Repository: react-component/notification
Pull request #367: 关闭按钮a标签修改为button用以无障碍属性实现
Author: login: EmilyyyLiu
Created: 2025-03-20T03:21:24Z | Merged: 2025-03-21T15:12:32Z

修改背景：
antd RFC：https://github.com/ant-design/ant-design/discussions/53197

<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **样式**
  - 更新了通知关闭按钮的外观，移除了边框并采用了白色背景，提升了界面的整洁效果。
- **重构**
  - 调整了关闭操作的交互方式，将关闭图标改为更符合语义的按钮元素，增强了键盘操作支持和无障碍体验。
  - 更新了通知配置结构，简化了关闭图标的处理方式，使其更灵活并支持无障碍属性。
- **测试**
  - 在通知组件的测试套件中新增了测试用例，验证关闭按钮的可访问性属性是否正确设置。
  - 修改了现有测试用例，更新了关闭图标的处理逻辑。
<!-- end of auto-generated comment: release notes by coderabbit.ai -->


Diff:
diff --git a/assets/index.less b/assets/index.less
index 5fbbf71..2ac0cc8 100644
--- a/assets/index.less
+++ b/assets/index.less
@@ -79,6 +79,8 @@
       cursor: pointer;
       opacity: 0.2;
       filter: alpha(opacity=20);
+      border: 0;
+      background-color: #fff;
 
       &-x:after {
         content: '×';
diff --git a/src/Notice.tsx b/src/Notice.tsx
index 38a9b9c..5cf4180 100644
--- a/src/Notice.tsx
+++ b/src/Notice.tsx
@@ -27,7 +27,6 @@ const Notify = React.forwardRef<HTMLDivElement, NoticeProps & { times?: number }
     eventKey,
     content,
     closable,
-    closeIcon = 'x',
     props: divProps,
 
     onClick,
@@ -46,7 +45,7 @@ const Notify = React.forwardRef<HTMLDivElement, NoticeProps & { times?: number }
     onNoticeClose(eventKey);
   };
 
-  const onCloseKeyDown: React.KeyboardEventHandler<HTMLAnchorElement> = (e) => {
+  const onCloseKeyDown: React.KeyboardEventHandler<HTMLButtonElement> = (e) => {
     if (e.key === 'Enter' || e.code === 'Enter' || e.keyCode === KeyCode.ENTER) {
       onInternalClose();
     }
@@ -106,11 +105,8 @@ const Notify = React.forwardRef<HTMLDivElement, NoticeProps & { times?: number }
     if (typeof closable === 'object' && closable !== null) {
       return closable;
     }
-    if (closable) {
-      return { closeIcon };
-    }
     return {};
-  }, [closable, closeIcon]);
+  }, [closable]);
 
   const ariaProps = pickAttrs(closableObj, true);
 
@@ -143,8 +139,7 @@ const Notify = React.forwardRef<HTMLDivElement, NoticeProps & { times?: number }
 
       {/* Close Icon */}
       {closable && (
-        <a
-          tabIndex={0}
+        <button
           className={`${noticePrefixCls}-close`}
           onKeyDown={onCloseKeyDown}
           aria-label="Close"
@@ -155,8 +150,8 @@ const Notify = React.forwardRef<HTMLDivElement, NoticeProps & { times?: number }
             onInternalClose();
           }}
         >
-          {closableObj.closeIcon}
-        </a>
+          {closableObj.closeIcon ?? 'x'}
+        </button>
       )}
 
       {/* Progress Bar */}
diff --git a/src/hooks/useNotification.tsx b/src/hooks/useNotification.tsx
index 52f0e8d..c64f94f 100644
--- a/src/hooks/useNotification.tsx
+++ b/src/hooks/useNotification.tsx
@@ -14,7 +14,7 @@ export interface NotificationConfig {
   /** Customize container. It will repeat call which means you should return same container element. */
   getContainer?: () => HTMLElement | ShadowRoot;
   motion?: CSSMotionProps | ((placement: Placement) => CSSMotionProps);
-  closeIcon?: React.ReactNode;
+
   closable?: boolean | ({ closeIcon?: React.ReactNode } & React.AriaAttributes);
   maxCount?: number;
   duration?: number;
diff --git a/src/interface.ts b/src/interface.ts
index 52ccbe0..ce36f2e 100644
--- a/src/interface.ts
+++ b/src/interface.ts
@@ -9,7 +9,7 @@ export interface NoticeConfig {
   duration?: number | null;
   showProgress?: boolean;
   pauseOnHover?: boolean;
-  closeIcon?: React.ReactNode;
+
   closable?: boolean | ({ closeIcon?: React.ReactNode } & React.AriaAttributes);
   className?: string;
   style?: React.CSSProperties;
diff --git a/tests/index.test.tsx b/tests/index.test.tsx
index 472b1da..3fb2e60 100644
--- a/tests/index.test.tsx
+++ b/tests/index.test.tsx
@@ -52,14 +52,14 @@ describe('Notification.Basic', () => {
   });
 
   it('works with custom close icon', () => {
-    const { instance } = renderDemo({
-      closeIcon: <span className="test-icon">test-close-icon</span>,
-    });
+    const { instance } = renderDemo();
 
     act(() => {
       instance.open({
         content: <p className="test">1</p>,
-        closable: true,
+        closable: {
+          closeIcon: <span className="test-icon">test-close-icon</span>,
+        },
         duration: 0,
       });
     });
@@ -892,4 +892,32 @@ describe('Notification.Basic', () => {
       expect(document.querySelectorAll('.rc-notification-notice').length).toBe(1);
     });
   });
+  it('notification close node ', () => {
+    const Demo = () => {
+      const [duration] = React.useState(0);
+      const [api, holder] = useNotification({ duration });
+      return (
+        <>
+          <button
+            data-testid="show-notification"
+            onClick={() => {
+              api.open({
+                content: `Test Notification`,
+                closable: { 'aria-label': 'xxx' },
+              });
+            }}
+          >
+            show notification
+          </button>
+          {holder}
+        </>
+      );
+    };
+    const { getByTestId } = render(<Demo />);
+    fireEvent.click(getByTestId('show-notification'));
+    expect(document.querySelector('button.rc-notification-notice-close')).toHaveAttribute(
+      'aria-label',
+      'xxx',
+    );
+  });
 });


Reviews:
user: login: coderabbitai[bot]
body: **Actionable comments posted: 0**

<details>
<summary>🧹 Nitpick comments (1)</summary><blockquote>

<details>
<summary>src/Notice.tsx (1)</summary><blockquote>

`146-160`: **提高可访问性：将锚点标签替换为按钮元素**

将关闭图标从`<a>`标签更改为`<button>`标签是一个很好的改进，可以：

1. 提高语义正确性 - 按钮用于触发页面内的操作，而不是导航
2. 改善屏幕阅读器用户体验 - 辅助技术可以正确识别并宣布这是一个按钮
3. 增强键盘可访问性 - 按钮默认可以接收键盘焦点，并可通过Enter和空格键激活

这符合WCAG (Web Content Accessibility Guidelines) 的最佳实践，特别是针对"可感知"和"可操作"原则的要求。


您还可以考虑添加一些额外的无障碍属性来进一步提升用户体验：

```diff
<button
  tabIndex={0}
  className={`${noticePrefixCls}-close`}
  onKeyDown={onCloseKeyDown}
  aria-label="Close"
+ aria-pressed="false"
  {...ariaProps}
  onClick={(e) => {
    e.preventDefault();
    e.stopPropagation();
    onInternalClose();
  }}
>
  {closableObj.closeIcon}
</button>
```

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 3b1e34b5037141b168859a051872c4cea098eab6 and cef134009f68a47ebfc22799102f588bad7ffd3d.

</details>

<details>
<summary>📒 Files selected for processing (2)</summary>

* `assets/index.less` (1 hunks)
* `src/Notice.tsx` (3 hunks)

</details>

<details>
<summary>🔇 Additional comments (2)</summary><blockquote>

<details>
<summary>assets/index.less (1)</summary>

`82-83`: **为关闭按钮添加适当的样式**

通过设置`border: 0`和`background-color: #fff`，使按钮元素在视觉上保持一致性，同时去除了按钮默认的边框样式。这是从`<a>`标签转换为`<button>`元素的必要样式调整，确保用户界面不会产生视觉差异。

在无障碍性方面，这些样式变更配合HTML元素的语义变更，共同提升了组件的可访问性。

</details>
<details>
<summary>src/Notice.tsx (1)</summary>

`49-49`: **更新事件处理器类型以匹配按钮元素**

将`onCloseKeyDown`的类型从`HTMLAnchorElement`更改为`HTMLButtonElement`，与实际DOM元素类型保持一致，确保类型安全。这种变更是从锚点标签转换到按钮元素的必要步骤。

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: NONE
submitted_at: 2025-03-20T03:24:17Z
user: login: zombieJ
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-20T03:24:18Z
user: login: afc163
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-20T05:41:03Z
user: login: EmilyyyLiu
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-20T05:45:12Z
user: login: zombieJ
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-20T09:25:02Z
user: login: zombieJ
state: APPROVED
author_association: MEMBER
submitted_at: 2025-03-21T15:11:18Z

Review comments:
diff_hunk: @@ -143,7 +143,7 @@ const Notify = React.forwardRef<HTMLDivElement, NoticeProps & { times?: number }
 
       {/* Close Icon */}
       {closable && (
-        <a
+        <button
path: src/Notice.tsx
user: login: zombieJ
body: 顺道帮忙把 closable 的用例加一下
created_at: 2025-03-20T03:24:18Z
author_association: MEMBER
diff_hunk: @@ -143,7 +143,7 @@ const Notify = React.forwardRef<HTMLDivElement, NoticeProps & { times?: number }
 
       {/* Close Icon */}
       {closable && (
-        <a
+        <button
           tabIndex={0}
path: src/Notice.tsx
user: login: afc163
body: 这一行还需要么？
created_at: 2025-03-20T05:41:03Z
author_association: MEMBER
diff_hunk: @@ -143,7 +143,7 @@ const Notify = React.forwardRef<HTMLDivElement, NoticeProps & { times?: number }
 
       {/* Close Icon */}
       {closable && (
-        <a
+        <button
           tabIndex={0}
path: src/Notice.tsx
user: login: EmilyyyLiu
body:  tabIndex={0}么？button元素应该是可以不用了，我删掉一下
created_at: 2025-03-20T05:45:12Z
author_association: CONTRIBUTOR
diff_hunk: @@ -155,8 +150,8 @@ const Notify = React.forwardRef<HTMLDivElement, NoticeProps & { times?: number }
             onInternalClose();
           }}
         >
-          {closableObj.closeIcon}
-        </a>
+          {closableObj?.closeIcon || 'x'}
path: src/Notice.tsx
user: login: zombieJ
body: 这个不会是空的，不需要 `?.`，'x' 这个用 `??`
created_at: 2025-03-20T09:25:01Z
author_association: MEMBER

PR comments:
user: login: vercel[bot]
created_at: 2025-03-20T03:21:27Z
body: [vc]: #7GwyvnEVX5kq1cQZ2ndStzN5YG6f8LZt/HUbuKB85xU=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJub3RpZmljYXRpb24iLCJpbnNwZWN0b3JVcmwiOiJodHRwczovL3ZlcmNlbC5jb20vcmVhY3QtY29tcG9uZW50L25vdGlmaWNhdGlvbi9CMkZZbUd3OXdCWmdLUVRmMWdUTnQ5dTZvYXZUIiwicHJldmlld1VybCI6Im5vdGlmaWNhdGlvbi1naXQtZm9yay1lbWlseXl5bGl1LWxpdWgtMDMyMC1hcmlhLXJlYWN0LWNvbXBvbmVudC52ZXJjZWwuYXBwIiwibmV4dENvbW1pdFN0YXR1cyI6IkRFUExPWUVEIiwibGl2ZUZlZWRiYWNrIjp7InJlc29sdmVkIjowLCJ1bnJlc29sdmVkIjowLCJ0b3RhbCI6MCwibGluayI6Im5vdGlmaWNhdGlvbi1naXQtZm9yay1lbWlseXl5bGl1LWxpdWgtMDMyMC1hcmlhLXJlYWN0LWNvbXBvbmVudC52ZXJjZWwuYXBwIn19XX0=
**The latest updates on your projects**. Learn more about [Vercel for Git ↗︎](https://vercel.link/github-learn-more)

| Name | Status | Preview | Comments | Updated (UTC) |
| :--- | :----- | :------ | :------- | :------ |
| **notification** | ✅ Ready ([Inspect](https://vercel.com/react-component/notification/B2FYmGw9wBZgKQTf1gTNt9u6oavT)) | [Visit Preview](https://notification-git-fork-emilyyyliu-liuh-0320-aria-react-component.vercel.app) | 💬 [**Add feedback**](https://vercel.live/open-feedback/notification-git-fork-emilyyyliu-liuh-0320-aria-react-component.vercel.app?via=pr-comment-feedback-link) | Mar 21, 2025 1:35am |


author_association: NONE
user: login: coderabbitai[bot]
created_at: 2025-03-20T03:21:32Z
body: <!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- walkthrough_start -->

## Walkthrough

本次提交包含两部分更改：一是在 `assets/index.less` 中修改了通知组件中 `.close` 样式，设置 `border: 0` 和 `background-color: #fff` 来调整关闭按钮的视觉效果；另一处在 `src/Notice.tsx` 中，将关闭图标的渲染元素从 `<a>` 更改为 `<button>`，同时更新 `onCloseKeyDown` 事件处理类型以匹配按钮元素的语义。此外，在测试文件 `tests/index.test.tsx` 中添加了新的测试用例，以验证关闭按钮的可访问性属性。

## Changes

| 文件                     | 变更概况                                                                         |
|--------------------------|----------------------------------------------------------------------------------|
| assets/.../index.less    | 修改 `.close` 类：设置 `border: 0` 和 `background-color: #fff`，调整关闭按钮样式。     |
| src/Notice.tsx           | 更换关闭图标元素从 `<a>` 到 `<button>`，修改 `onCloseKeyDown` 事件处理类型，优化点击和键盘事件逻辑。 |
| src/hooks/.../useNotification.tsx | 移除 `closeIcon` 属性，更新 `closable` 属性以包含可选的 `closeIcon` 和 ARIA 属性。 |
| src/.../interface.ts     | 移除 `closeIcon` 属性，更新 `closable` 属性以包含可选的 `closeIcon` 和 ARIA 属性。 |
| tests/.../index.test.tsx | 添加新的测试用例：验证通知关闭按钮的 `aria-label` 属性，修改现有测试用例逻辑以适应新结构。 |

## Sequence Diagram(s)

```mermaid
sequenceDiagram
    participant 用户
    participant 按钮
    participant 组件

    用户->>按钮: 点击关闭按钮
    按钮->>组件: 触发 onCloseKeyDown 事件
    组件->>组件: 执行关闭逻辑
```

## Poem

> 嗨，我是快乐的小兔子，  
> 看着代码风轻云淡舞；  
> 边框消逝，白光闪烁，  
> 按钮跳跃，语义更妥；  
> 在这代码花园中，  
> 一跃成诗，喜乐无穷！  
> 🐰✨

<!-- walkthrough_end -->
<!-- This is an auto-generated comment: all tool run failures by coderabbit.ai -->

> [!WARNING]
> There were issues while running some tools. Please review the errors and either fix the tool’s configuration or disable the tool if it’s a critical failure.
> 
> <details>
> <summary>🔧 ESLint</summary>
> 
> > If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.
> 
>  WARN  deprecated eslint@7.32.0: This version is no longer supported. Please see https://eslint.org/version-support for other options.
> Progress: resolved 1, reused 0, downloaded 0, added 0
> Progress: resolved 3, reused 0, downloaded 3, added 0
> Progress: resolved 4, reused 0, downloaded 4, added 0
> Progress: resolved 5, reused 0, downloaded 4, added 0
> Progress: resolved 5, reused 0, downloaded 5, added 0
> Progress: resolved 6, reused 0, downloaded 5, added 0
> Progress: resolved 32, reused 0, downloaded 25, added 0
> Progress: resolved 56, reused 0, downloaded 45, added 0
> Progress: resolved 76, reused 0, downloaded 65, added 0
> Progress: resolved 95, reused 0, downloaded 87, added 0
> Progress: resolved 123, reused 0, downloaded 106, added 0
> Progress: resolved 140, reused 0, downloaded 124, added 0
> Progress: resolved 171, reused 0, downloaded 153, added 0
> Progress: resolved 209, reused 0, downloaded 193, added 0
> Progress: resolved 238, reused 0, downloaded 219, added 0
> Progress: resolved 270, reused 0, downloaded 249, added 0
> Progress: resolved 303, reused 0, downloaded 282, added 0
> Progress: resolved 322, reused 0, downloaded 292, added 0
> Progress: resolved 333, reused 0, downloaded 305, added 0
> Progress: resolved 361, reused 0, downloaded 326, added 0
> Progress: resolved 411, reused 0, downloaded 373, added 0
> Progress: resolved 461, reused 0, downloaded 421, added 0
> Progress: resolved 484, reused 0, downloaded 445, added 0
> Progress: resolved 524, reused 0, downloaded 481, added 0
> Progress: resolved 541, reused 0, downloaded 499, added 0
> Progress: resolved 557, reused 0, downloaded 506, added 0
> Progress: resolved 572, reused 0, downloaded 515, added 0
> Progress: resolved 591, reused 0, downloaded 533, added 0
> Progress: resolved 605, reused 0, downloaded 546, added 0
> Progress: resolved 622, reused 0, downloaded 564, added 0
> Progress: resolved 648, reused 0, downloaded 588, added 0
> Progress: resolved 662, reused 0, downloaded 599, added 0
> Progress: resolved 667, reused 0, downloaded 602, added 0
> Progress: resolved 671, reused 0, downloaded 606, added 0
> Progress: resolved 673, reused 0, downloaded 610, added 0
> Progress: resolved 675, reused 0, downloaded 612, added 0
> Progress: resolved 676, reused 0, downloaded 612, added 0
> Progress: resolved 679, reused 0, downloaded 612, added 0
> Progress: resolved 681, reused 0, downloaded 613, added 0
> Progress: resolved 682, reused 0, downloaded 617, added 0
> Progress: resolved 683, reused 0, downloaded 617, added 0
> Progress: resolved 686, reused 0, downloaded 620, added 0
> Progress: resolved 689, reused 0, downloaded 626, added 0
> Progress: resolved 689, reused 0, downloaded 627, added 0
> Progress: resolved 692, reused 0, downloaded 627, added 0
> Progress: resolved 693, reused 0, downloaded 628, added 0
> Progress: resolved 695, reused 0, downloaded 630, added 0
> Progress: resolved 695, reused 0, downloaded 632, added 0
> Progress: resolved 700, reused 0, downloaded 636, added 0
> Progress: resolved 701, reused 0, downloaded 636, added 0
> Progress: resolved 703, reused 0, downloaded 637, added 0
> Progress: resolved 704, reused 0, downloaded 638, added 0
> Progress: resolved 709, reused 0, downloaded 644, added 0
>  WARN  GET http://10.0.0.28:4873/@typescript-eslint%2Fexperimental-utils error (504). Will retry in 10 seconds. 2 retries left.
> Progress: resolved 711, reused 0, downloaded 646, added 0
>  WARN  GET http://10.0.0.28:4873/@typescript-eslint%2Ftypescript-estree error (504). Will retry in 10 seconds. 2 retries left.
>  WARN  GET http://10.0.0.28:4873/@typescript-eslint%2Fscope-manager error (ECONNRESET). Will retry in 10 seconds. 2 retries left.
> Progress: resolved 713, reused 0, downloaded 648, added 0
> Progress: resolved 716, reused 0, downloaded 652, added 0
> Progress: resolved 721, reused 0, downloaded 656, added 0
> Progress: resolved 725, reused 0, downloaded 660, added 0
> Progress: resolved 729, reused 0, downloaded 662, added 0
> Progress: resolved 746, reused 0, downloaded 667, added 0
> Progress: resolved 752, reused 0, downloaded 669, added 0
> Progress: resolved 759, reused 0, downloaded 671, added 0
> Progress: resolved 768, reused 0, downloaded 676, added 0
> Progress: resolved 772, reused 0, downloaded 683, added 0
> Progress: resolved 774, reused 0, downloaded 685, added 0
> Progress: resolved 781, reused 0, downloaded 692, added 0
> Progress: resolved 787, reused 0, downloaded 697, added 0
> Progress: resolved 794, reused 0, downloaded 704, added 0
> Progress: resolved 798, reused 0, downloaded 707, added 0
> Progress: resolved 805, reused 0, downloaded 712, added 0
> Progress: resolved 807, reused 0, downloaded 716, added 0
> Progress: resolved 817, reused 0, downloaded 721, added 0
> Progress: resolved 819, reused 0, downloaded 728, added 0
> Progress: resolved 825, reused 0, downloaded 734, added 0
> Progress: resolved 858, reused 0, downloaded 739, added 0
> Progress: resolved 867, reused 0, downloaded 742, added 0
> Progress: resolved 870, reused 0, downloaded 743, added 0
> Progress: resolved 875, reused 0, downloaded 745, added 0
> Progress: resolved 879, reused 0, downloaded 748, added 0
> Progress: resolved 887, reused 0, downloaded 753, added 0
> Progress: resolved 889, reused 0, downloaded 756, added 0
> Progress: resolved 905, reused 0, downloaded 771, added 0
> Progress: resolved 905, reused 0, downloaded 773, added 0
> Progress: resolved 921, reused 0, downloaded 779, added 0
> Progress: resolved 929, reused 0, downloaded 788, added 0
> Progress: resolved 933, reused 0, downloaded 797, added 0
> Progress: resolved 940, reused 0, downloaded 802, added 0
> Progress: resolved 948, reused 0, downloaded 809, added 0
> Progress: resolved 960, reused 0, downloaded 822, added 0
> Progress: resolved 963, reused 0, downloaded 824, added 0
> Progress: resolved 968, reused 0, downloaded 827, added 0
> Progress: resolved 973, reused 0, downloaded 834, added 0
> Progress: resolved 987, reused 0, downloaded 843, added 0
> Progress: resolved 1001, reused 0, downloaded 857, added 0
> Progress: resolved 1012, reused 0, downloaded 867, added 0
> Progress: resolved 1030, reused 0, downloaded 880, added 0
> Progress: resolved 1040, reused 0, downloaded 887, added 0
> Progress: resolved 1051, reused 0, downloaded 896, added 0
> Progress: resolved 1060, reused 0, downloaded 910, added 0
> Progress: resolved 1077, reused 0, downloaded 925, added 0
> Progress: resolved 1099, reused 0, downloaded 945, added 0
> Progress: resolved 1115, reused 0, downloaded 959, added 0
> Progress: resolved 1137, reused 0, downloaded 972, added 0
> Progress: resolved 1149, reused 0, downloaded 981, added 0
> Progress: resolved 1165, reused 0, downloaded 999, added 0
> Progress: resolved 1172, reused 0, downloaded 1005, added 0
> Progress: resolved 1180, reused 0, downloaded 1013, added 0
> Progress: resolved 1193, reused 0, downloaded 1026, added 0
> Progress: resolved 1207, reused 0, downloaded 1037, added 0
> Progress: resolved 1214, reused 0, downloaded 1043, added 0
> Progress: resolved 1231, reused 0, downloaded 1055, added 0
> Progress: resolved 1239, reused 0, downloaded 1068, added 0
> Progress: resolved 1251, reused 0, downloaded 1078, added 0
> Progress: resolved 1280, reused 0, downloaded 1105, added 0
> Progress: resolved 1313, reused 0, downloaded 1141, added 0
> Progress: resolved 1345, reused 0, downloaded 1171, added 0
> Progress: resolved 1361, reused 0, downloaded 1180, added 0
> Progress: resolved 1373, reused 0, downloaded 1184, added 0
> Progress: resolved 1388, reused 0, downloaded 1200, added 0
> Progress: resolved 1393, reused 0, downloaded 1207, added 0
> Progress: resolved 1408, reused 0, downloaded 1217, added 0
> Progress: resolved 1420, reused 0, downloaded 1230, added 0
> Progress: resolved 1426, reused 0, downloaded 1237, added 0
> Progress: resolved 1437, reused 0, downloaded 1245, added 0
> Progress: resolved 1465, reused 0, downloaded 1271, added 0
> Progress: resolved 1479, reused 0, downloaded 1287, added 0
> Progress: resolved 1492, reused 0, downloaded 1298, added 0
> Progress: resolved 1508, reused 0, downloaded 1311, added 0
> Progress: resolved 1538, reused 0, downloaded 1321, added 0
> Progress: resolved 1548, reused 0, downloaded 1332, added 0
> Progress: resolved 1562, reused 0, downloaded 1345, added 0
> Progress: resolved 1570, reused 0, downloaded 1350, added 0
> Progress: resolved 1572, reused 0, downloaded 1355, added 0
> Progress: resolved 1579, reused 0, downloaded 1362, added 0
> Progress: resolved 1585, reused 0, downloaded 1366, added 0
> Progress: resolved 1595, reused 0, downloaded 1375, added 0
> Progress: resolved 1602, reused 0, downloaded 1380, added 0
> Progress: resolved 1612, reused 0, downloaded 1390, added 0
> Progress: resolved 1616, reused 0, downloaded 1397, added 0
> Progress: resolved 1619, reused 0, downloaded 1400, added 0
> Progress: resolved 1634, reused 0, downloaded 1409, added 0
> Progress: resolved 1635, reused 0, downloaded 1412, added 0
> Progress: resolved 1644, reused 0, downloaded 1418, added 0
> Progress: resolved 1659, reused 0, downloaded 1429, added 0
> Progress: resolved 1670, reused 0, downloaded 1434, added 0
> Progress: resolved 1671, reused 0, downloaded 1437, added 0
> Progress: resolved 1672, reused 0, downloaded 1441, added 0
> Progress: resolved 1673, reused 0, downloaded 1450, added 0
>  WARN  GET http://10.0.0.28:4873/@umijs/mako-linux-x64-gnu/-/mako-linux-x64-gnu-0.11.5.tgz error (ECONNRESET). Will retry in 10 seconds. 2 retries left.
> Progress: resolved 1673, reused 0, downloaded 1451, added 0
> Progress: resolved 1674, reused 0, downloaded 1451, added 0
> Progress: resolved 1677, reused 0, downloaded 1458, added 0
>  WARN  GET http://10.0.0.28:4873/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz error (ERR_PNPM_FETCH_504). Will retry in 10 seconds. 2 retries left.
> Progress: resolved 1677, reused 0, downloaded 1465, added 0
> Progress: resolved 1679, reused 0, downloaded 1471, added 0
> Progress: resolved 1679, reused 0, downloaded 1472, added 0
> Progress: resolved 1679, reused 0, downloaded 1473, added 0
> Progress: resolved 1679, reused 0, downloaded 1475, added 0
> Progress: resolved 1679, reused 0, downloaded 1476, added 0
> Progress: resolved 1679, reused 0, downloaded 1483, added 0
> Progress: resolved 1679, reused 0, downloaded 1492, added 0
> Progress: resolved 1679, reused 0, downloaded 1493, added 0
> Progress: resolved 1679, reused 0, downloaded 1494, added 0
> Progress: resolved 1679, reused 0, downloaded 1495, added 0
>  WARN  GET http://10.0.0.28:4873/@types%2Fnode error (504). Will retry in 10 seconds. 2 retries left.
> Progress: resolved 1679, reused 0, downloaded 1501, added 0
> Progress: resolved 1679, reused 0, downloaded 1502, added 0
> Progress: resolved 1679, reused 0, downloaded 1506, added 0
> Progress: resolved 1679, reused 0, downloaded 1510, added 0
> Progress: resolved 1679, reused 0, downloaded 1513, added 0
> Progress: resolved 1679, reused 0, downloaded 1514, added 0
> Progress: resolved 1679, reused 0, downloaded 1518, added 0
> Progress: resolved 1679, reused 0, downloaded 1522, added 0
> Progress: resolved 1679, reused 0, downloaded 1527, added 0
> Progress: resolved 1679, reused 0, downloaded 1530, added 0
> Progress: resolved 1679, reused 0, downloaded 1531, added 0
> Progress: resolved 1679, reused 0, downloaded 1532, added 0
> Progress: resolved 1679, reused 0, downloaded 1533, added 0
> Progress: resolved 1679, reused 0, downloaded 1534, added 0
>  WARN  GET http://10.0.0.28:4873/editions/-/editions-2.3.1.tgz error (ERR_PNPM_FETCH_504). Will retry in 10 seconds. 2 retries left.
>  WARN  GET http://10.0.0.28:4873/markdown-table/-/markdown-table-3.0.4.tgz error (ERR_PNPM_FETCH_504). Will retry in 10 seconds. 2 retries left.
>  WARN  GET http://10.0.0.28:4873/@umijs/es-module-parser-linux-x64-gnu/-/es-module-parser-linux-x64-gnu-0.0.7.tgz error (ERR_PNPM_FETCH_504). Will retry in 10 seconds. 2 retries left.
>  WARN  GET http://10.0.0.28:4873/express-http-proxy/-/express-http-proxy-2.1.1.tgz error (ERR_PNPM_FETCH_504). Will retry in 10 seconds. 2 retries left.
>  WARN  GET http://10.0.0.28:4873/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz error (ERR_PNPM_FETCH_504). Will retry in 1 minute. 1 retries left.
> Progress: resolved 1679, reused 0, downloaded 1535, added 0
> Progress: resolved 1679, reused 0, downloaded 1536, added 0
>  WARN  GET http://10.0.0.28:4873/postcss-place/-/postcss-place-7.0.5.tgz error (ERR_PNPM_FETCH_504). Will retry in 10 seconds. 2 retries left.
>  WARN  GET http://10.0.0.28:4873/errlop/-/errlop-2.2.0.tgz error (ERR_PNPM_FETCH_504). Will retry in 10 seconds. 2 retries left.
> Progress: resolved 1679, reused 0, downloaded 1537, added 0
> Progress: resolved 1679, reused 0, downloaded 1538, added 0
> Progress: resolved 1679, reused 0, downloaded 1540, added 0
>  WARN  GET http://10.0.0.28:4873/@types%2Fnode error (504). Will retry in 1 minute. 1 retries left.
> Progress: resolved 1679, reused 0, downloaded 1541, added 0
> Progress: resolved 1679, reused 0, downloaded 1542, added 0
> Progress: resolved 1679, reused 0, downloaded 1543, added 0
> Progress: resolved 1680, reused 0, downloaded 1543, added 0
> Progress: resolved 1684, reused 0, downloaded 1546, added 0
> Progress: resolved 1685, reused 0, downloaded 1547, added 0
> Progress: resolved 1686, reused 0, downloaded 1547, added 0
> Progress: resolved 1693, reused 0, downloaded 1549, added 0
> Progress: resolved 1701, reused 0, downloaded 1556, added 0
> Progress: resolved 1704, reused 0, downloaded 1556, added 0
> Progress: resolved 1704, reused 0, downloaded 1557, added 0
> Progress: resolved 1704, reused 0, downloaded 1559, added 0
> Progress: resolved 1704, reused 0, downloaded 1562, added 0
> Progress: resolved 1707, reused 0, downloaded 1567, added 0
> Progress: resolved 1710, reused 0, downloaded 1568, added 0
> 
> 
> 
> </details>

<!-- end of auto-generated comment: all tool run failures by coderabbit.ai -->


---

<details>
<summary>📜 Recent review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 6ee12409ad780e9dcba5dede79d902efaeb4bda1 and 8e5038cf018f03147ea282cf833c40663baa142b.

</details>

<details>
<summary>📒 Files selected for processing (1)</summary>

* `src/Notice.tsx` (4 hunks)

</details>

<details>
<summary>🚧 Files skipped from review as they are similar to previous changes (1)</summary>

* src/Notice.tsx

</details>

</details>
<!-- internal state start -->


<!-- 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 -->

<!-- internal state end -->
<!-- tips_start -->

---



<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=react-component/notification&utm_content=367):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Generate unit testing code for this file.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai generate unit testing code for this file.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and generate unit testing code.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### CodeRabbit Configuration File (`.coderabbit.yaml`)

- You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository.
- Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json`

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->
author_association: NONE
user: login: codecov[bot]
created_at: 2025-03-20T05:41:33Z
body: ## [Codecov](https://app.codecov.io/gh/react-component/notification/pull/367?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=react-component) Report
All modified and coverable lines are covered by tests :white_check_mark:
> Project coverage is 99.74%. Comparing base [(`3b1e34b`)](https://app.codecov.io/gh/react-component/notification/commit/3b1e34b5037141b168859a051872c4cea098eab6?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=react-component) to head [(`8e5038c`)](https://app.codecov.io/gh/react-component/notification/commit/8e5038cf018f03147ea282cf833c40663baa142b?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=react-component).
> Report is 1 commits behind head on master.

<details><summary>Additional details and impacted files</summary>


```diff
@@            Coverage Diff             @@
##           master     #367      +/-   ##
==========================================
- Coverage   99.74%   99.74%   -0.01%     
==========================================
  Files           7        7              
  Lines         777      772       -5     
  Branches      125      124       -1     
==========================================
- Hits          775      770       -5     
  Misses          2        2              
```

</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/react-component/notification/pull/367?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=react-component).   
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=react-component).

<details><summary> :rocket: New features to boost your workflow: </summary>

- :snowflake: [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems.
- :package: [JS Bundle Analysis](https://docs.codecov.com/docs/javascript-bundle-analysis): Save yourself from yourself by tracking and limiting bundle sizes in JS merges.
</details>
author_association: NONE