notification — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited notification (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Toast notification system with variants, auto-dismiss, flood prevention, and custom components. Wrap your app in <Notifications> and use useNotification hook to trigger.
import { Notifications, useNotification } from 'reablocks';Wrap your app (or a section) in the Notifications provider:
<Notifications>
<App />
</Notifications>| Prop | Type | Default | Description |
|---|---|---|---|
limit | number | 10 | Maximum visible notifications |
timeout | number | 4000 | Auto-dismiss delay in ms |
showClose | boolean | true | Show close button |
preventFlooding | boolean | true | Prevent duplicate messages |
className | string | — | CSS classes for notifications |
components | { [variant]: ComponentType } | — | Custom notification components per variant |
icons | { [variant]: ReactNode } | built-in SVGs | Custom icons per variant |
theme | NotificationTheme | — | Per-instance theme override |
function MyComponent() {
const {
notify,
notifySuccess,
notifyError,
notifyWarning,
notifyInfo,
clearNotification,
clearAllNotifications
} = useNotification();
return (
<>
<Button onClick={() => notify('Default message')}>Notify</Button>
<Button onClick={() => notifySuccess('Saved!')}>Success</Button>
<Button onClick={() => notifyError('Failed!')}>Error</Button>
<Button onClick={() => notifyWarning('Careful!')}>Warning</Button>
<Button onClick={() => notifyInfo('FYI...')}>Info</Button>
<Button onClick={() => clearAllNotifications()}>Clear All</Button>
</>
);
}Both notify() and variant methods accept a second options argument:
notify('Title', {
body: 'Additional details here', // Body text (string or ReactNode)
variant: 'success', // default | success | error | warning | info
timeout: 6000, // Override auto-dismiss delay
showClose: true, // Show close button
icon: <CustomIcon />, // Override icon
action: <Button size="small">Undo</Button>, // Action element
className: 'custom-class' // Additional CSS classes
});<Notifications
components={{
error: ({ message, onClose }) => (
<div className="custom-error">
{message}
<button onClick={onClose}>Dismiss</button>
</div>
)
}}
>
<App />
</Notifications>interface NotificationTheme {
container: string; // Outer container
positions: string; // Fixed positioning (bottom-center by default)
notification: {
base: string; // Notification card (flex, min-w, rounded, bg, border)
variants: {
default: { base: string; icon?: string };
success: { base: string; icon?: string };
error: { base: string; icon?: string };
warning: { base: string; icon?: string };
info: { base: string; icon?: string };
};
header: string; // Title area
content: string; // Content wrapper
body: string; // Body text
closeContainer: string;
action: string; // Action slot
closeButton: string; // Close button
};
}~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.