Loading...
Loading...
Compare original and translation side by side
Critical + Blocking → Modal Dialog
Important + Non-blocking → Alert Banner
Success/Info + Temporary → Toast/Snackbar
Contextual Help → Tooltip/Popover
In-progress → Progress Indicator
No Data → Empty StateCritical + Blocking → Modal Dialog
Important + Non-blocking → Alert Banner
Success/Info + Temporary → Toast/Snackbar
Contextual Help → Tooltip/Popover
In-progress → Progress Indicator
No Data → Empty State| Urgency Level | Component | Duration | Blocks Interaction |
|---|---|---|---|
| Critical | Modal Dialog | Until action | Yes |
| Important | Alert Banner | Until dismissed | No |
| Standard | Toast | 3-7 seconds | No |
| Contextual | Inline Message | Persistent | No |
| Help | Tooltip | On hover | No |
| Progress | Spinner/Bar | During operation | Optional |
| 紧急程度 | 组件 | 持续时长 | 是否阻断交互 |
|---|---|---|---|
| Critical(紧急) | Modal Dialog | 直到用户操作 | 是 |
| Important(重要) | Alert Banner | 直到用户关闭 | 否 |
| Standard(标准) | Toast | 3-7秒 | 否 |
| Contextual(上下文相关) | Inline Message | 持续显示 | 否 |
| Help(帮助) | Tooltip | 悬停时显示 | 否 |
| Progress(进度) | Spinner/Bar | 操作进行中 | 可选 |
references/toast-patterns.mdreferences/modal-patterns.md30s: Progress bar + time estimate + cancel
references/progress-indicators.mdreferences/empty-states.mdreferences/toast-patterns.mdreferences/modal-patterns.md30s:进度条 + 时间预估 + 取消按钮
references/progress-indicators.mdreferences/empty-states.mdnpm install sonner @radix-ui/react-dialogimport { Toaster, toast } from 'sonner';
// In your app root
<Toaster position="bottom-right" />
// Trigger notifications
toast.success('Changes saved successfully');
toast.promise(saveData(), {
loading: 'Saving...',
success: 'Saved!',
error: 'Failed to save'
});import * as Dialog from '@radix-ui/react-dialog';
<Dialog.Root>
<Dialog.Trigger>Open</Dialog.Trigger>
<Dialog.Portal>
<Dialog.Overlay />
<Dialog.Content>
<Dialog.Title>Confirm Action</Dialog.Title>
<Dialog.Description>Are you sure?</Dialog.Description>
<Dialog.Close>Cancel</Dialog.Close>
</Dialog.Content>
</Dialog.Portal>
</Dialog.Root>references/library-comparison.mdnpm install sonner @radix-ui/react-dialogimport { Toaster, toast } from 'sonner';
// 在应用根组件中
<Toaster position="bottom-right" />
// 触发通知
toast.success('Changes saved successfully');
toast.promise(saveData(), {
loading: 'Saving...',
success: 'Saved!',
error: 'Failed to save'
});import * as Dialog from '@radix-ui/react-dialog';
<Dialog.Root>
<Dialog.Trigger>Open</Dialog.Trigger>
<Dialog.Portal>
<Dialog.Overlay />
<Dialog.Content>
<Dialog.Title>Confirm Action</Dialog.Title>
<Dialog.Description>Are you sure?</Dialog.Description>
<Dialog.Close>Cancel</Dialog.Close>
</Dialog.Content>
</Dialog.Portal>
</Dialog.Root>references/library-comparison.md<!-- For non-critical notifications -->
<div role="status" aria-live="polite">
File uploaded successfully
</div>
<!-- For critical alerts -->
<div role="alert" aria-live="assertive">
Error: Failed to save
</div>references/accessibility-feedback.md<!-- 非关键通知 -->
<div role="status" aria-live="polite">
File uploaded successfully
</div>
<!-- 关键警报 -->
<div role="alert" aria-live="assertive">
Error: Failed to save
</div>references/accessibility-feedback.md/* Example token usage */
.toast {
background: var(--toast-bg);
color: var(--toast-text);
padding: var(--toast-padding);
border-radius: var(--toast-border-radius);
box-shadow: var(--toast-shadow);
animation-duration: var(--toast-enter-duration);
}/* 令牌使用示例 */
.toast {
background: var(--toast-bg);
color: var(--toast-text);
padding: var(--toast-padding);
border-radius: var(--toast-border-radius);
box-shadow: var(--toast-shadow);
animation-duration: var(--toast-enter-duration);
}30s: Progress bar + cancel option
30s:进度条 + 取消选项
scripts/generate_toast_manager.jsscripts/format_messages.pyscripts/calculate_timing.jsscripts/generate_toast_manager.jsscripts/format_messages.pyscripts/calculate_timing.jsreferences/toast-patterns.mdreferences/alert-patterns.mdreferences/modal-patterns.mdreferences/progress-indicators.mdreferences/empty-states.mdreferences/accessibility-feedback.mdreferences/library-comparison.mdreferences/toast-patterns.mdreferences/alert-patterns.mdreferences/modal-patterns.mdreferences/progress-indicators.mdreferences/empty-states.mdreferences/accessibility-feedback.mdreferences/library-comparison.mdexamples/success-toast.tsxexamples/confirmation-modal.tsxexamples/progress-upload.tsxexamples/inline-validation.tsxexamples/success-toast.tsxexamples/confirmation-modal.tsxexamples/progress-upload.tsxexamples/inline-validation.tsxassets/message-templates.jsonassets/error-catalog.jsonassets/timing-config.jsonassets/message-templates.jsonassets/error-catalog.jsonassets/timing-config.json| Library | Type | Size | Best For |
|---|---|---|---|
| Sonner | Toast | Small | Modern React 18+, accessibility |
| react-hot-toast | Toast | <5KB | Minimal bundle size |
| react-toastify | Toast | ~16KB | RTL support, mobile |
| Radix UI | Modal | Small | Design systems, headless |
| Headless UI | Modal | Small | Tailwind projects |
references/library-comparison.md| 库 | 类型 | 大小 | 最佳适用场景 |
|---|---|---|---|
| Sonner | Toast | 小 | 现代React 18+、无障碍支持 |
| react-hot-toast | Toast | <5KB | 最小包体积 |
| react-toastify | Toast | ~16KB | RTL支持、移动端 |
| Radix UI | Modal | 小 | 设计系统、无头组件 |
| Headless UI | Modal | 小 | Tailwind项目 |
references/library-comparison.md