Skip to content

react-component/notification

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

275 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

@rc-component/notification

Ant Design Part of the Ant Design ecosystem.

๐Ÿ”” Hook-based React notification primitives for stacked, animated, and accessible notices.

NPM version npm downloads build status Codecov bundle size dumi

English | ็ฎ€ไฝ“ไธญๆ–‡

Highlights

  • useNotification hook returning an API and React holder element.
  • Top, bottom, left, and right placements with max-count limiting.
  • Closable notices, duration timers, progress display, hover pause, and stacked layout.
  • Custom motion, semantic classNames / styles, progress component override, and provider-level classes.
  • TypeScript definitions for notification config, API, list config, and progress props.
  • Used by Ant Design as the shared notification foundation.

Install

npm install @rc-component/notification

Usage

import { useNotification } from '@rc-component/notification';

export default () => {
  const [api, holder] = useNotification();

  return (
    <>
      {holder}
      <button
        type="button"
        onClick={() => {
          api.open({
            key: 'welcome',
            title: 'Notification',
            description: 'This notice is rendered by @rc-component/notification.',
            closable: true,
          });
        }}
      >
        Open
      </button>
    </>
  );
};
import { NotificationProvider, useNotification } from '@rc-component/notification';

const Demo = () => {
  const [api, holder] = useNotification({
    placement: 'topRight',
    maxCount: 3,
    showProgress: true,
    pauseOnHover: true,
    stack: true,
  });

  return (
    <>
      {holder}
      <button type="button" onClick={() => api.open({ title: 'Queued' })}>
        Add
      </button>
    </>
  );
};

export default () => (
  <NotificationProvider classNames={{ notice: 'custom-notice' }}>
    <Demo />
  </NotificationProvider>
);

Examples

Run the local dumi site:

npm install
npm start

Then open http://localhost:8000.

API

useNotification

const [api, holder] = useNotification(config);
Property Type Default Description
className (placement: Placement) => string - Class name for each placement container.
classNames NotificationClassNames - Semantic class names for notice and list slots.
closable boolean | { closeIcon?: ReactNode; onClose?: () => void } - Shared closable config for opened notices.
components { progress?: ComponentType<NotificationProgressProps> } - Component overrides.
duration number | false | null 4.5 Auto-close delay in seconds. Use false or 0 to disable.
getContainer () => HTMLElement | ShadowRoot () => document.body Notification portal container.
maxCount number - Maximum notices to keep. Oldest notices are dropped.
motion CSSMotionProps | (placement) => CSSMotionProps - Motion config for notice transitions.
pauseOnHover boolean true Pause auto-close timer while hovering.
placement Placement topRight Default placement for opened notices.
prefixCls string rc-notification Class name prefix.
renderNotifications (node, info) => ReactElement - Customize the rendered notification tree.
showProgress boolean false Show auto-close progress for opened notices.
stack boolean | StackConfig false Enable stacked notification layout.
style (placement: Placement) => CSSProperties - Inline style for each placement container.
styles NotificationStyles - Semantic styles for notice and list slots.
onAllRemoved () => void - Triggered after all notices are removed.

NotificationAPI

Method Type Description
open (config: Partial<NotificationListConfig>) => void Open or update a notice.
close (key: React.Key) => void Close a notice by key.
destroy () => void Remove all notices.

NotificationListConfig

Property Type Default Description
actions ReactNode - Extra action content.
className string - Class name for the notice.
classNames NotificationClassNames - Semantic class names for notice slots.
closable boolean | { closeIcon?: ReactNode; onClose?: () => void } - Whether the notice can be closed.
components { progress?: ComponentType<NotificationProgressProps> } - Component overrides for this notice.
description ReactNode - Notice description content.
duration number | false | null 4.5 Auto-close delay in seconds.
icon ReactNode - Notice icon.
key React.Key - Unique notice key. Opening with the same key updates it.
offset number - Offset used by stacked positioning.
pauseOnHover boolean true Pause this notice while hovering.
placement Placement topRight Notice placement.
props HTMLAttributes<HTMLDivElement> & Record<string, any> - Extra props passed to the notice root.
role string - ARIA role for the notice.
showProgress boolean false Show auto-close progress.
style CSSProperties - Inline style for the notice.
styles NotificationStyles - Semantic styles for notice slots.
title ReactNode - Notice title content.
onClick MouseEventHandler<HTMLDivElement> - Triggered when the notice is clicked.
onClose () => void - Triggered when the notice closes. Prefer closable.onClose.
onMouseEnter MouseEventHandler<HTMLDivElement> - Triggered when mouse enters the notice.
onMouseLeave MouseEventHandler<HTMLDivElement> - Triggered when mouse leaves the notice.

Types

type Placement = 'top' | 'topLeft' | 'topRight' | 'bottom' | 'bottomLeft' | 'bottomRight';

interface StackConfig {
  threshold?: number;
  offset?: number;
}

Development

npm install
npm start
npm test
npm run tsc
npm run coverage
npm run compile
npm run build

The dumi site runs at http://localhost:8000 by default.

Release

npm run prepublishOnly

The release flow is handled by @rc-component/np through the rc-np command after the package build.

License

@rc-component/notification is released under the MIT license.

About

๐Ÿ”” Hook-based React notification primitives for stacked, animated, and accessible notices.

Topics

Resources

License

MIT, MIT licenses found

Licenses found

MIT
LICENSE
MIT
LICENSE.md

Stars

Watchers

Forks

Contributors