laif-ds 0.2.74 → 0.2.76
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CHANGELOG.md +446 -0
- package/dist/agent-docs/adoption-report.json +615 -0
- package/dist/agent-docs/components/Accordion.md +46 -16
- package/dist/agent-docs/components/Alert.md +90 -95
- package/dist/agent-docs/components/AlertDialog.md +132 -126
- package/dist/agent-docs/components/AppEditor.md +90 -90
- package/dist/agent-docs/components/AppRadioGroup.md +18 -18
- package/dist/agent-docs/components/AppSidebar.md +129 -122
- package/dist/agent-docs/components/AppStepper.md +81 -77
- package/dist/agent-docs/components/AspectRatio.md +70 -62
- package/dist/agent-docs/components/AudioVisualizer.md +5 -5
- package/dist/agent-docs/components/Avatar.md +112 -113
- package/dist/agent-docs/components/Badge.md +123 -118
- package/dist/agent-docs/components/Breadcrumb.md +8 -1
- package/dist/agent-docs/components/Button.md +131 -129
- package/dist/agent-docs/components/Card.md +172 -147
- package/dist/agent-docs/components/Carousel.md +148 -129
- package/dist/agent-docs/components/Chat.md +121 -109
- package/dist/agent-docs/components/ChatMessage.md +72 -61
- package/dist/agent-docs/components/Checkbox.md +150 -135
- package/dist/agent-docs/components/CircularProgress.md +53 -49
- package/dist/agent-docs/components/CodeHighlighter.md +4 -4
- package/dist/agent-docs/components/Collapsible.md +114 -95
- package/dist/agent-docs/components/Command.md +141 -142
- package/dist/agent-docs/components/Confirmer.md +182 -175
- package/dist/agent-docs/components/ContextMenu.md +196 -191
- package/dist/agent-docs/components/DataCrossTable.md +114 -94
- package/dist/agent-docs/components/DataTable.md +32 -24
- package/dist/agent-docs/components/Dialog.md +130 -125
- package/dist/agent-docs/components/Drawer.md +141 -127
- package/dist/agent-docs/components/FilePreviewer.md +138 -139
- package/dist/agent-docs/components/FileUploader.md +149 -129
- package/dist/agent-docs/components/Form.md +3 -1
- package/dist/agent-docs/components/FormComposer.md +163 -137
- package/dist/agent-docs/components/GanttChart.md +125 -122
- package/dist/agent-docs/components/HoverCard.md +1 -1
- package/dist/agent-docs/components/Icon.md +98 -99
- package/dist/agent-docs/components/Input.md +173 -138
- package/dist/agent-docs/components/InputOtp.md +6 -1
- package/dist/agent-docs/components/InputSelector.md +94 -97
- package/dist/agent-docs/components/InterruptPrompt.md +4 -4
- package/dist/agent-docs/components/MarkdownRenderer.md +5 -2
- package/dist/agent-docs/components/Menubar.md +60 -57
- package/dist/agent-docs/components/MessageInput.md +134 -131
- package/dist/agent-docs/components/MessageList.md +110 -96
- package/dist/agent-docs/components/MultipleSelector.md +147 -146
- package/dist/agent-docs/components/NavigationMenu.md +6 -2
- package/dist/agent-docs/components/Popover.md +112 -103
- package/dist/agent-docs/components/PromptSuggestions.md +5 -5
- package/dist/agent-docs/components/RadioGroup.md +97 -90
- package/dist/agent-docs/components/Resizable.md +4 -1
- package/dist/agent-docs/components/ResizePrompt.md +12 -13
- package/dist/agent-docs/components/ScrollArea.md +6 -2
- package/dist/agent-docs/components/SecurePdfViewer.md +10 -6
- package/dist/agent-docs/components/Select.md +131 -132
- package/dist/agent-docs/components/Sheet.md +8 -1
- package/dist/agent-docs/components/ShikiHighlighter.md +5 -5
- package/dist/agent-docs/components/Sidebar.md +94 -85
- package/dist/agent-docs/components/Slider.md +62 -58
- package/dist/agent-docs/components/Sonner.md +1 -0
- package/dist/agent-docs/components/Spinner.md +14 -14
- package/dist/agent-docs/components/Stepper.md +93 -67
- package/dist/agent-docs/components/Switch.md +41 -42
- package/dist/agent-docs/components/TableSkeleton.md +8 -8
- package/dist/agent-docs/components/Tabs.md +106 -86
- package/dist/agent-docs/components/TextArea.md +51 -52
- package/dist/agent-docs/components/ThemeSwitcher.md +72 -69
- package/dist/agent-docs/components/Toaster.md +1 -0
- package/dist/agent-docs/components/Tooltip.md +102 -91
- package/dist/agent-docs/components/Typo.md +68 -65
- package/dist/agent-docs/components/WeeklyCalendar.md +63 -64
- package/dist/agent-docs/components-list.md +1 -0
- package/dist/agent-docs/manifest.json +5981 -0
- package/dist/agent-docs/truncated-cell.md +342 -0
- package/dist/components/editor/editor-hooks/use-update-toolbar.js +6 -6
- package/dist/components/editor/plugins/actions/counter-character-plugin.js +6 -6
- package/dist/components/editor/plugins/toolbar/font-format-toolbar-plugin.js +18 -18
- package/dist/components/editor/plugins/toolbar/history-toolbar-plugin.js +10 -10
- package/dist/components/editor/plugins/toolbar/toolbar-plugin.js +9 -9
- package/dist/components/ui/app-checkbox.js +1 -1
- package/dist/components/ui/app-dialog.js +70 -64
- package/dist/components/ui/app-editor.js +51 -51
- package/dist/components/ui/app-form.js +81 -81
- package/dist/components/ui/app-multiple-select-dropdown.js +36 -36
- package/dist/components/ui/app-select.js +109 -104
- package/dist/components/ui/app-sidebar.js +41 -41
- package/dist/components/ui/app-stepper.js +1 -1
- package/dist/components/ui/app-time-picker.js +18 -18
- package/dist/components/ui/app-tooltip.js +1 -1
- package/dist/components/ui/async-select.js +5 -5
- package/dist/components/ui/audio-visualizer.js +61 -58
- package/dist/components/ui/card.js +1 -1
- package/dist/components/ui/carousel.js +2 -2
- package/dist/components/ui/chart.js +1 -1
- package/dist/components/ui/chat-message.js +8 -8
- package/dist/components/ui/chat.js +86 -88
- package/dist/components/ui/command.js +2 -2
- package/dist/components/ui/copy-button.js +4 -4
- package/dist/components/ui/date-picker.js +20 -20
- package/dist/components/ui/file-preview/index.js +13 -13
- package/dist/components/ui/file-previewer.js +12 -11
- package/dist/components/ui/file-uploader.js +86 -78
- package/dist/components/ui/form.js +2 -2
- package/dist/components/ui/gantt/components/Chart/Bars/Bars.js +56 -56
- package/dist/components/ui/gantt/components/Chart/Bars/BarsRow/BarItem/BarItem.js +12 -12
- package/dist/components/ui/gantt/components/Chart/Bars/BarsRow/BarsItems/BarItems.js +1 -1
- package/dist/components/ui/gantt/components/Chart/Bars/BarsRow/BarsRow.js +4 -4
- package/dist/components/ui/gantt/components/Chart/Bars/BarsRow/RepeteadBars/RepeteadBars.js +2 -2
- package/dist/components/ui/gantt/components/Chart/Chart.js +23 -23
- package/dist/components/ui/gantt/components/Chart/Scale/Scale.js +1 -1
- package/dist/components/ui/gantt/components/Chart/Tree/Tree.js +34 -34
- package/dist/components/ui/gantt/components/Controls/Controls.js +5 -5
- package/dist/components/ui/gantt/components/Gantt/Gantt.js +4 -4
- package/dist/components/ui/gantt/hooks/useGanttCalculate.js +25 -18
- package/dist/components/ui/input-selector.js +1 -1
- package/dist/components/ui/input.js +23 -23
- package/dist/components/ui/kanban.js +8 -9
- package/dist/components/ui/markdown-renderer.js +41 -35
- package/dist/components/ui/message-input.js +45 -44
- package/dist/components/ui/multiple-selector.js +91 -82
- package/dist/components/ui/secure-pdf-viewer.js +19 -7
- package/dist/components/ui/sidebar.js +1 -1
- package/dist/components/ui/slider.js +1 -1
- package/dist/components/ui/spinner.js +4 -4
- package/dist/components/ui/stepper.js +157 -138
- package/dist/components/ui/tables/data-cross-table/data-cross-table-buttons.js +29 -29
- package/dist/components/ui/tables/data-cross-table/data-cross-table.js +258 -246
- package/dist/components/ui/tables/data-table/components/data-table-advanced-filter.js +4 -1
- package/dist/components/ui/tables/data-table/components/data-table-body.js +211 -367
- package/dist/components/ui/tables/data-table/components/data-table-filter-inputs.js +114 -112
- package/dist/components/ui/tables/data-table/components/data-table-filters.js +116 -96
- package/dist/components/ui/tables/data-table/components/data-table-header.js +211 -0
- package/dist/components/ui/tables/data-table/components/data-table-searchbar.js +8 -8
- package/dist/components/ui/tables/data-table/components/data-table-skeleton-rows.js +33 -0
- package/dist/components/ui/tables/data-table/data-table.js +258 -250
- package/dist/components/ui/tables/data-table/data-table.service.js +112 -97
- package/dist/components/ui/tables/data-table/data-table.utils.js +25 -15
- package/dist/components/ui/textarea.js +2 -2
- package/dist/components/ui/theme-switcher.js +1 -1
- package/dist/components/ui/toggle-group.js +2 -2
- package/dist/components/ui/truncated-cell.js +100 -0
- package/dist/components/ui/weekly-calendar/appointment-card.js +16 -16
- package/dist/components/ui/weekly-calendar/calendar-context.js +6 -6
- package/dist/components/ui/weekly-calendar/calendar-header.js +12 -12
- package/dist/components/ui/weekly-calendar/day-column.js +16 -16
- package/dist/components/ui/weekly-calendar/time-column.js +4 -4
- package/dist/components/ui/weekly-calendar/weekly-calendar.js +4 -4
- package/dist/hooks/use-audio-recording.js +1 -1
- package/dist/hooks/use-auto-scroll.js +18 -18
- package/dist/hooks/use-autosize-textarea.js +12 -13
- package/dist/index.d.ts +100 -45
- package/dist/index.js +362 -360
- package/dist/lib/utils.js +6 -6
- package/dist/styles.v3.css +1 -1
- package/package.json +14 -4
|
@@ -1,142 +1,141 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
1
|
+
# Command
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Command palette and command list built on `cmdk`. Provides an input for filtering, groups, items, separators, and a dialog wrapper for modal usage.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
### Command (Root)
|
|
12
|
+
|
|
13
|
+
| Prop | Type | Default | Description |
|
|
14
|
+
| ----------- | ----------------- | ------------ | --------------------------------------------- |
|
|
15
|
+
| `className` | `string` | `""` | Additional classes for layout/size. |
|
|
16
|
+
| `children` | `React.ReactNode` | **required** | Compose with input, list, groups, items, etc. |
|
|
17
|
+
|
|
18
|
+
### CommandDialog
|
|
19
|
+
|
|
20
|
+
Wraps a `Dialog` and renders a `Command` inside.
|
|
21
|
+
|
|
22
|
+
| Prop | Type | Default | Description |
|
|
23
|
+
| -------------- | ------------------------ | ---------------------------------- | --------------------------------- |
|
|
24
|
+
| `open` | `boolean` | `undefined` | Controlled open state. |
|
|
25
|
+
| `onOpenChange` | `(open: boolean) => any` | `undefined` | Called when dialog state changes. |
|
|
26
|
+
| `title` | `string` | `"Command Palette"` | Accessible dialog title. |
|
|
27
|
+
| `description` | `string` | `"Search for a command to run..."` | Accessible dialog description. |
|
|
28
|
+
|
|
29
|
+
### Subcomponents
|
|
30
|
+
|
|
31
|
+
- `CommandInput`: Search input with a leading search icon.
|
|
32
|
+
- `CommandList`: Scrollable list container.
|
|
33
|
+
- `CommandEmpty`: Empty state when no results match.
|
|
34
|
+
- `CommandGroup`: Group with optional `heading` prop.
|
|
35
|
+
- `CommandItem`: Selectable item (supports disabled state).
|
|
36
|
+
- `CommandSeparator`: Visual separator between groups.
|
|
37
|
+
- `CommandShortcut`: Right-aligned shortcut hint (e.g., `⌘K`).
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Behavior
|
|
42
|
+
|
|
43
|
+
- **Filtering**: Typing in `CommandInput` filters visible items.
|
|
44
|
+
- **Keyboard**: Arrow keys navigate, Enter selects, Esc can close the dialog.
|
|
45
|
+
- **Accessibility**: Proper roles/aria set by `cmdk` and dialog wrapper.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Examples
|
|
50
|
+
|
|
51
|
+
### Basic List
|
|
52
|
+
|
|
53
|
+
```tsx
|
|
54
|
+
import {
|
|
55
|
+
Command,
|
|
56
|
+
CommandEmpty,
|
|
57
|
+
CommandGroup,
|
|
58
|
+
CommandInput,
|
|
59
|
+
CommandItem,
|
|
60
|
+
CommandList,
|
|
61
|
+
CommandSeparator,
|
|
62
|
+
CommandShortcut,
|
|
63
|
+
} from "laif-ds";
|
|
64
|
+
|
|
65
|
+
export function BasicCommand() {
|
|
66
|
+
return (
|
|
67
|
+
<Command className="border-d-border w-[400px] rounded-lg border shadow-md">
|
|
68
|
+
<CommandInput placeholder="Type a command or search..." />
|
|
69
|
+
<CommandList>
|
|
70
|
+
<CommandEmpty>No results found.</CommandEmpty>
|
|
71
|
+
<CommandGroup heading="Suggestions">
|
|
72
|
+
<CommandItem>Calendar</CommandItem>
|
|
73
|
+
<CommandItem>Search</CommandItem>
|
|
74
|
+
<CommandItem>Settings</CommandItem>
|
|
75
|
+
</CommandGroup>
|
|
76
|
+
<CommandSeparator />
|
|
77
|
+
<CommandGroup heading="User">
|
|
78
|
+
<CommandItem>
|
|
79
|
+
Profile
|
|
80
|
+
<CommandShortcut>⌘P</CommandShortcut>
|
|
81
|
+
</CommandItem>
|
|
82
|
+
<CommandItem>Billing</CommandItem>
|
|
83
|
+
<CommandItem>Logout</CommandItem>
|
|
84
|
+
</CommandGroup>
|
|
85
|
+
</CommandList>
|
|
86
|
+
</Command>
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Command Dialog
|
|
92
|
+
|
|
93
|
+
```tsx
|
|
94
|
+
import { useState } from "react";
|
|
95
|
+
import { Button } from "laif-ds";
|
|
96
|
+
import {
|
|
97
|
+
CommandDialog,
|
|
98
|
+
CommandInput,
|
|
99
|
+
CommandList,
|
|
100
|
+
CommandEmpty,
|
|
101
|
+
CommandGroup,
|
|
102
|
+
CommandItem,
|
|
103
|
+
CommandSeparator,
|
|
104
|
+
} from "laif-ds";
|
|
105
|
+
|
|
106
|
+
export function CommandDialogExample() {
|
|
107
|
+
const [open, setOpen] = useState(false);
|
|
108
|
+
return (
|
|
109
|
+
<>
|
|
110
|
+
<Button onClick={() => setOpen(true)} variant="outline">
|
|
111
|
+
Open Command Dialog
|
|
112
|
+
</Button>
|
|
113
|
+
<CommandDialog open={open} onOpenChange={setOpen}>
|
|
114
|
+
<CommandInput placeholder="Type a command or search..." />
|
|
115
|
+
<CommandList>
|
|
116
|
+
<CommandEmpty>No results found.</CommandEmpty>
|
|
117
|
+
<CommandGroup heading="Suggestions">
|
|
118
|
+
<CommandItem>Calendar</CommandItem>
|
|
119
|
+
<CommandItem>Search</CommandItem>
|
|
120
|
+
<CommandItem>Settings</CommandItem>
|
|
121
|
+
</CommandGroup>
|
|
122
|
+
<CommandSeparator />
|
|
123
|
+
<CommandGroup heading="User">
|
|
124
|
+
<CommandItem>Profile</CommandItem>
|
|
125
|
+
<CommandItem>Billing</CommandItem>
|
|
126
|
+
<CommandItem>Logout</CommandItem>
|
|
127
|
+
</CommandGroup>
|
|
128
|
+
</CommandList>
|
|
129
|
+
</CommandDialog>
|
|
130
|
+
</>
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Notes
|
|
138
|
+
|
|
139
|
+
- **Shortcuts**: Use `CommandShortcut` for right-aligned hints within `CommandItem`.
|
|
140
|
+
- **Layout**: Set explicit width on `Command` (e.g., `w-[400px]`) when used inline.
|
|
141
|
+
- **Dialog**: `CommandDialog` hides its title/description visually but preserves accessibility.
|
|
@@ -1,175 +1,182 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
1
|
+
# Confirmer
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Promise-based confirmation dialog utility built on top of `AlertDialog`. Mount the `Confirmer` component once, then call `confirm()` to open a dialog and await the user decision.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## API
|
|
10
|
+
|
|
11
|
+
### `Confirmer` (Component)
|
|
12
|
+
|
|
13
|
+
Mount this once at app root (or Story scope) to enable dialogs.
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
import { Confirmer } from "laif-ds";
|
|
17
|
+
|
|
18
|
+
export function AppRoot() {
|
|
19
|
+
return (
|
|
20
|
+
<>
|
|
21
|
+
{/* ...your app... */}
|
|
22
|
+
<Confirmer />
|
|
23
|
+
</>
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### `confirm(options)`
|
|
29
|
+
|
|
30
|
+
Returns a Promise that resolves when the user confirms and rejects when the user cancels.
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
type ConfirmOptions = {
|
|
34
|
+
title?: React.ReactNode;
|
|
35
|
+
description?: React.ReactNode;
|
|
36
|
+
cancelText?: React.ReactNode;
|
|
37
|
+
actionText?: React.ReactNode;
|
|
38
|
+
CancelProps?: React.ComponentProps<typeof AlertDialogCancel>;
|
|
39
|
+
ActionProps?: React.ComponentProps<typeof Button>;
|
|
40
|
+
variant?: "default" | "destructive";
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
declare function confirm(options: ConfirmOptions): Promise<boolean>;
|
|
44
|
+
declare function safeConfirm(
|
|
45
|
+
options: ConfirmOptions,
|
|
46
|
+
): Promise<boolean | undefined>;
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
- `variant`: when set to `"destructive"`, shows a destructive style and warning icon.
|
|
50
|
+
- `safeConfirm`: resolves `undefined` instead of throwing on cancel.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Behavior
|
|
55
|
+
|
|
56
|
+
- **Resolve/Reject**: `confirm()` resolves on action click, rejects on cancel or close.
|
|
57
|
+
- **Destructive mode**: Adds an alert icon and uses destructive button variant.
|
|
58
|
+
- **Custom buttons**: Pass `ActionProps` and `CancelProps` to customize.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Examples
|
|
63
|
+
|
|
64
|
+
### Destructive
|
|
65
|
+
|
|
66
|
+
```tsx
|
|
67
|
+
import { Button } from "laif-ds";
|
|
68
|
+
import { Confirmer, confirm } from "laif-ds";
|
|
69
|
+
|
|
70
|
+
export function DeleteFile() {
|
|
71
|
+
const onClick = async () => {
|
|
72
|
+
try {
|
|
73
|
+
await confirm({
|
|
74
|
+
variant: "destructive",
|
|
75
|
+
title: "Permanently delete file?",
|
|
76
|
+
description:
|
|
77
|
+
"This action cannot be undone. The file will be removed permanently.",
|
|
78
|
+
cancelText: "Cancel",
|
|
79
|
+
actionText: "Delete",
|
|
80
|
+
});
|
|
81
|
+
console.log("File deleted");
|
|
82
|
+
} catch {
|
|
83
|
+
console.log("Deletion cancelled");
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
return (
|
|
88
|
+
<>
|
|
89
|
+
<Button variant="destructive" onClick={onClick}>
|
|
90
|
+
Delete File
|
|
91
|
+
</Button>
|
|
92
|
+
<Confirmer />
|
|
93
|
+
</>
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Custom Text and Buttons
|
|
99
|
+
|
|
100
|
+
```tsx
|
|
101
|
+
import { Button } from "laif-ds";
|
|
102
|
+
import { Confirmer, confirm } from "laif-ds";
|
|
103
|
+
|
|
104
|
+
export function PublishArticle() {
|
|
105
|
+
const onClick = async () => {
|
|
106
|
+
try {
|
|
107
|
+
await confirm({
|
|
108
|
+
title: "Publish article?",
|
|
109
|
+
description: "This will make your article visible to the public.",
|
|
110
|
+
cancelText: "Save as draft",
|
|
111
|
+
actionText: "Publish now",
|
|
112
|
+
ActionProps: {
|
|
113
|
+
variant: "default",
|
|
114
|
+
},
|
|
115
|
+
});
|
|
116
|
+
console.log("Article published");
|
|
117
|
+
} catch {
|
|
118
|
+
console.log("Article saved as draft");
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
return (
|
|
123
|
+
<>
|
|
124
|
+
<Button onClick={onClick}>Publish Article</Button>
|
|
125
|
+
<Confirmer />
|
|
126
|
+
</>
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Multiple Confirmers (independent flows)
|
|
132
|
+
|
|
133
|
+
```tsx
|
|
134
|
+
import { Button } from "laif-ds";
|
|
135
|
+
import { Confirmer, confirm } from "laif-ds";
|
|
136
|
+
|
|
137
|
+
export function MultipleActions() {
|
|
138
|
+
const accept1 = async () => {
|
|
139
|
+
try {
|
|
140
|
+
await confirm({
|
|
141
|
+
title: "Confirm action 1",
|
|
142
|
+
description: "This is the first confirmation dialog.",
|
|
143
|
+
});
|
|
144
|
+
console.log("Action 1 confirmed");
|
|
145
|
+
} catch {
|
|
146
|
+
console.log("Action 1 cancelled");
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
const accept2 = async () => {
|
|
151
|
+
try {
|
|
152
|
+
await confirm({
|
|
153
|
+
title: "Confirm action 2",
|
|
154
|
+
description: "This is the second confirmation dialog.",
|
|
155
|
+
cancelText: "Reject",
|
|
156
|
+
actionText: "Accept",
|
|
157
|
+
});
|
|
158
|
+
console.log("Action 2 confirmed");
|
|
159
|
+
} catch {
|
|
160
|
+
console.log("Action 2 cancelled");
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
return (
|
|
165
|
+
<>
|
|
166
|
+
<div className="flex gap-4">
|
|
167
|
+
<Button onClick={accept1}>Action 1</Button>
|
|
168
|
+
<Button onClick={accept2}>Action 2</Button>
|
|
169
|
+
</div>
|
|
170
|
+
<Confirmer />
|
|
171
|
+
</>
|
|
172
|
+
);
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Notes
|
|
179
|
+
|
|
180
|
+
- **Mount once**: Add a single `<Confirmer />` near app root.
|
|
181
|
+
- **Error handling**: Use `try/catch` with `confirm()`; or `safeConfirm()` to avoid throwing.
|
|
182
|
+
- **Theming**: `variant="destructive"` changes icon and button styling accordingly.
|