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,118 +1,123 @@
|
|
|
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
|
-
|
|
1
|
+
# Badge
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Small, inline label for status and metadata. Supports many visual variants, optional icons, link mode, and disabled state.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
### Badge (Root)
|
|
12
|
+
|
|
13
|
+
| Prop | Type | Default | Description |
|
|
14
|
+
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------ | -------------------------------------------- |
|
|
15
|
+
| `variant` | `"default" \| "destructive" \| "warning" \| "success" \| "outline" \| "outline-primary" \| "outline-destructive" \| "outline-warning" \| "outline-success" \| "secondary" \| "ghost" \| "ghost-destructive" \| "ghost-accent" \| "ghost-warning" \| "ghost-success" \| "link"` | `"default"` | Visual style of the badge. |
|
|
16
|
+
| `asChild` | `boolean` | `false` | Renders the badge as its child element. |
|
|
17
|
+
| `disabled` | `boolean` | `false` | Disables interactions and dims the badge. |
|
|
18
|
+
| `iconLeft` | `IconName` | `undefined` | Optional left icon (uses `Icon` component). |
|
|
19
|
+
| `iconRight` | `IconName` | `undefined` | Optional right icon (uses `Icon` component). |
|
|
20
|
+
| `className` | `string` | `""` | Additional classes on the root element. |
|
|
21
|
+
| `children` | `React.ReactNode` | **required** | Text or content inside the badge. |
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Behavior
|
|
26
|
+
|
|
27
|
+
- **Variants**: Outline, ghost, and semantic variants available for flexible UIs.
|
|
28
|
+
- **As child**: Use `asChild` to render as an anchor or any custom element.
|
|
29
|
+
- **Icons**: `iconLeft`/`iconRight` render `Icon` with appropriate sizes.
|
|
30
|
+
- **Disabled**: Applies `cursor-not-allowed` and reduces opacity.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Examples
|
|
35
|
+
|
|
36
|
+
### Default
|
|
37
|
+
|
|
38
|
+
```tsx
|
|
39
|
+
import { Badge } from "laif-ds";
|
|
40
|
+
|
|
41
|
+
export function DefaultBadge() {
|
|
42
|
+
return <Badge>Badge</Badge>;
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Variants Grid
|
|
47
|
+
|
|
48
|
+
```tsx
|
|
49
|
+
import { Badge, type BadgeProps } from "laif-ds";
|
|
50
|
+
|
|
51
|
+
const variants: BadgeProps["variant"][] = [
|
|
52
|
+
"default",
|
|
53
|
+
"destructive",
|
|
54
|
+
"warning",
|
|
55
|
+
"success",
|
|
56
|
+
"outline",
|
|
57
|
+
"outline-primary",
|
|
58
|
+
"outline-destructive",
|
|
59
|
+
"outline-warning",
|
|
60
|
+
"outline-success",
|
|
61
|
+
"secondary",
|
|
62
|
+
"ghost",
|
|
63
|
+
"ghost-accent",
|
|
64
|
+
"ghost-destructive",
|
|
65
|
+
"ghost-warning",
|
|
66
|
+
"ghost-success",
|
|
67
|
+
"link",
|
|
68
|
+
];
|
|
69
|
+
|
|
70
|
+
export function VariantsShowcase() {
|
|
71
|
+
return (
|
|
72
|
+
<div className="flex flex-wrap gap-2">
|
|
73
|
+
{variants.map((v) => (
|
|
74
|
+
<Badge key={v} variant={v}>
|
|
75
|
+
{v}
|
|
76
|
+
</Badge>
|
|
77
|
+
))}
|
|
78
|
+
</div>
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### With Icons
|
|
84
|
+
|
|
85
|
+
```tsx
|
|
86
|
+
import { Badge } from "laif-ds";
|
|
87
|
+
|
|
88
|
+
export function WithIcons() {
|
|
89
|
+
return (
|
|
90
|
+
<div className="flex gap-2">
|
|
91
|
+
<Badge iconLeft="Check" iconRight="X">
|
|
92
|
+
Approved
|
|
93
|
+
</Badge>
|
|
94
|
+
<Badge variant="outline-primary" iconLeft="Pencil">
|
|
95
|
+
Edit
|
|
96
|
+
</Badge>
|
|
97
|
+
</div>
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### As Link (asChild)
|
|
103
|
+
|
|
104
|
+
```tsx
|
|
105
|
+
import { Badge } from "laif-ds";
|
|
106
|
+
|
|
107
|
+
export function LinkBadge() {
|
|
108
|
+
return (
|
|
109
|
+
<Badge asChild>
|
|
110
|
+
<a href="#" className="cursor-pointer">
|
|
111
|
+
Clickable Badge
|
|
112
|
+
</a>
|
|
113
|
+
</Badge>
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Notes
|
|
121
|
+
|
|
122
|
+
- **Icons**: Use `IconName` values supported by the design system.
|
|
123
|
+
- **AsChild**: Useful to keep semantics (e.g., anchors) while styling as badges.
|
|
@@ -58,7 +58,14 @@ export function BasicBreadcrumb() {
|
|
|
58
58
|
### Custom Separator
|
|
59
59
|
|
|
60
60
|
```tsx
|
|
61
|
-
import {
|
|
61
|
+
import {
|
|
62
|
+
Breadcrumb,
|
|
63
|
+
BreadcrumbList,
|
|
64
|
+
BreadcrumbItem,
|
|
65
|
+
BreadcrumbLink,
|
|
66
|
+
BreadcrumbSeparator,
|
|
67
|
+
BreadcrumbPage,
|
|
68
|
+
} from "laif-ds";
|
|
62
69
|
|
|
63
70
|
export function CustomSeparator() {
|
|
64
71
|
return (
|
|
@@ -1,129 +1,131 @@
|
|
|
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
|
-
|
|
1
|
+
# Button
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Versatile button with multiple variants and sizes, optional leading/trailing icons, loading state, and support for rendering as a child element.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
### Button (Root)
|
|
12
|
+
|
|
13
|
+
| Prop | Type | Default | Description |
|
|
14
|
+
| ----------- | -------------------------------------------------- | ------------- | ------------------------------------------------------- | ----------------- | --------------------- | ------------------- | ------- | ------------------- | -------------- | ------- | ----------- | --------------------------- |
|
|
15
|
+
| `variant` | `"default" | "destructive" | "outline" | "outline-primary" | "outline-destructive" | "secondary" | "ghost" | "ghost-destructive" | "ghost-accent" | "link"` | `"default"` | Visual style of the button. |
|
|
16
|
+
| `size` | `"default" | "sm" | "lg" | "icon"` | `"default"` | Size of the button. |
|
|
17
|
+
| `asChild` | `boolean` | `false` | Render as child (e.g., anchor) while preserving styles. |
|
|
18
|
+
| `iconLeft` | `IconName` | `undefined` | Optional left icon name. |
|
|
19
|
+
| `iconRight` | `IconName` | `undefined` | Optional right icon name. |
|
|
20
|
+
| `isLoading` | `boolean` | `false` | Shows a loading spinner; overrides `iconLeft`. |
|
|
21
|
+
| `className` | `string` | `""` | Additional classes for layout/width. |
|
|
22
|
+
| `disabled` | `boolean` | `false` | Disables the button. |
|
|
23
|
+
| `onClick` | `(e: React.MouseEvent<HTMLButtonElement>) => void` | `undefined` | Click handler. |
|
|
24
|
+
| `children` | `React.ReactNode` | **required** | Button label or content. |
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Behavior
|
|
29
|
+
|
|
30
|
+
- **Loading**: When `isLoading` is `true`, a spinner is shown and `iconLeft` is hidden.
|
|
31
|
+
- **Icons**: Icon sizes adapt to the button size (`sm`, `default`, `lg`, `icon`).
|
|
32
|
+
- **As Child**: Use `asChild` to render the button as a link or custom element while keeping button styles.
|
|
33
|
+
- **Accessibility**: Keyboard-focus ring and proper semantics are included.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Examples
|
|
38
|
+
|
|
39
|
+
### Default
|
|
40
|
+
|
|
41
|
+
```tsx
|
|
42
|
+
import { Button } from "laif-ds";
|
|
43
|
+
|
|
44
|
+
export function DefaultButton() {
|
|
45
|
+
return <Button>Button</Button>;
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Showcase (Variants × Sizes)
|
|
50
|
+
|
|
51
|
+
```tsx
|
|
52
|
+
import { Button, type ButtonProps } from "laif-ds";
|
|
53
|
+
|
|
54
|
+
const variants: ButtonProps["variant"][] = [
|
|
55
|
+
"default",
|
|
56
|
+
"destructive",
|
|
57
|
+
"outline",
|
|
58
|
+
"outline-primary",
|
|
59
|
+
"outline-destructive",
|
|
60
|
+
"secondary",
|
|
61
|
+
"ghost",
|
|
62
|
+
"ghost-accent",
|
|
63
|
+
"ghost-destructive",
|
|
64
|
+
"link",
|
|
65
|
+
];
|
|
66
|
+
|
|
67
|
+
const sizes: ButtonProps["size"][] = ["lg", "default", "sm", "icon"];
|
|
68
|
+
|
|
69
|
+
export function ButtonsGrid() {
|
|
70
|
+
return (
|
|
71
|
+
<div className="flex flex-col gap-4">
|
|
72
|
+
{variants.map((variant) => (
|
|
73
|
+
<div key={variant} className="flex flex-wrap items-center gap-2">
|
|
74
|
+
{sizes.map((size) =>
|
|
75
|
+
size === "icon" ? (
|
|
76
|
+
<Button
|
|
77
|
+
key={`${variant}-${size}`}
|
|
78
|
+
variant={variant}
|
|
79
|
+
size={size}
|
|
80
|
+
iconLeft="BadgeInfo"
|
|
81
|
+
/>
|
|
82
|
+
) : (
|
|
83
|
+
<Button key={`${variant}-${size}`} variant={variant} size={size}>
|
|
84
|
+
{variant} - {size}
|
|
85
|
+
</Button>
|
|
86
|
+
),
|
|
87
|
+
)}
|
|
88
|
+
</div>
|
|
89
|
+
))}
|
|
90
|
+
</div>
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Full Width
|
|
96
|
+
|
|
97
|
+
```tsx
|
|
98
|
+
import { Button } from "laif-ds";
|
|
99
|
+
|
|
100
|
+
export function FullWidthButton() {
|
|
101
|
+
return <Button className="w-full">Full Width Button</Button>;
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### With Icon
|
|
106
|
+
|
|
107
|
+
```tsx
|
|
108
|
+
import { Button } from "laif-ds";
|
|
109
|
+
|
|
110
|
+
export function WithIcon() {
|
|
111
|
+
return <Button iconLeft="Check">Button with Icon</Button>;
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Loading
|
|
116
|
+
|
|
117
|
+
```tsx
|
|
118
|
+
import { Button } from "laif-ds";
|
|
119
|
+
|
|
120
|
+
export function LoadingButton() {
|
|
121
|
+
return <Button isLoading>Loading Button</Button>;
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Notes
|
|
128
|
+
|
|
129
|
+
- **Disabled**: Applies reduced opacity and prevents interactions.
|
|
130
|
+
- **Icon-only**: Use `size="icon"` for square icon buttons.
|
|
131
|
+
- **Theming**: Use variants to match semantic meaning (primary, destructive, etc.).
|