@nexub/mcp 8.3.0 → 8.4.0
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/skill/references/components/alert-dialog.md +1 -1
- package/dist/skill/references/components/auth-card.md +1 -1
- package/dist/skill/references/components/bento-grid.md +1 -1
- package/dist/skill/references/components/box.md +0 -3
- package/dist/skill/references/components/button-group.md +8 -8
- package/dist/skill/references/components/button.md +11 -11
- package/dist/skill/references/components/chip.md +0 -1
- package/dist/skill/references/components/collapsible.md +2 -2
- package/dist/skill/references/components/data-table.md +1 -1
- package/dist/skill/references/components/date-picker.md +0 -2
- package/dist/skill/references/components/dialog.md +3 -3
- package/dist/skill/references/components/drawer.md +7 -7
- package/dist/skill/references/components/empty-state.md +3 -3
- package/dist/skill/references/components/error-state.md +0 -1
- package/dist/skill/references/components/filter-chip.md +0 -2
- package/dist/skill/references/components/flex.md +2 -2
- package/dist/skill/references/components/form-field.md +0 -1
- package/dist/skill/references/components/grid.md +0 -1
- package/dist/skill/references/components/info-list.md +1 -1
- package/dist/skill/references/components/motion-collapse.md +1 -1
- package/dist/skill/references/components/motion-fade.md +2 -2
- package/dist/skill/references/components/motion-scale.md +1 -1
- package/dist/skill/references/components/motion-slide.md +1 -1
- package/dist/skill/references/components/pagination.md +0 -1
- package/dist/skill/references/components/plan-card.md +2 -2
- package/dist/skill/references/components/popover.md +2 -2
- package/dist/skill/references/components/product-grid.md +7 -7
- package/dist/skill/references/components/separator.md +0 -1
- package/dist/skill/references/components/settings-section.md +1 -1
- package/dist/skill/references/components/sheet.md +1 -1
- package/dist/skill/references/components/stack.md +4 -4
- package/dist/skill/references/components/stat-band.md +6 -6
- package/dist/skill/references/components/streaming-text.md +1 -1
- package/dist/skill/references/components/testimonial-grid.md +7 -7
- package/dist/skill/references/components/text-gradient.md +0 -8
- package/dist/skill/references/components/toast.md +7 -7
- package/dist/skill/references/components/tooltip.md +2 -2
- package/dist/skill/references/components/user-card.md +1 -1
- package/dist/skill/references/components.md +1 -1
- package/dist/skill/references/tokens.md +1 -1
- package/package.json +1 -1
|
@@ -41,7 +41,7 @@ export default function Example() {
|
|
|
41
41
|
This action cannot be undone. This will permanently delete your account and remove all your data.
|
|
42
42
|
</AlertDialog.Description>
|
|
43
43
|
<div className="flex gap-2 justify-end mt-6">
|
|
44
|
-
<AlertDialog.Cancel asChild><Button variant="
|
|
44
|
+
<AlertDialog.Cancel asChild><Button variant="outlined">Cancel</Button></AlertDialog.Cancel>
|
|
45
45
|
<AlertDialog.Action asChild><Button variant="destructive">Yes, delete</Button></AlertDialog.Action>
|
|
46
46
|
</div>
|
|
47
47
|
</AlertDialog.Content>
|
|
@@ -35,7 +35,7 @@ export default function Example() {
|
|
|
35
35
|
<Label htmlFor="auth-pass">Password</Label>
|
|
36
36
|
<Input id="auth-pass" type="password" placeholder="••••••••" />
|
|
37
37
|
</div>
|
|
38
|
-
<Button variant="
|
|
38
|
+
<Button variant="filled" className="w-full">Sign in</Button>
|
|
39
39
|
</div>
|
|
40
40
|
</AuthCard>
|
|
41
41
|
</div>
|
|
@@ -20,7 +20,7 @@ A grid of card tiles in mixed sizes. Responds to its own width: 1 column, 2 at 4
|
|
|
20
20
|
| Prop | Type | Default | Description |
|
|
21
21
|
| --- | --- | --- | --- |
|
|
22
22
|
| `BentoGrid children` (required) | `ReactNode` | | `BentoTile`s. Dense packing back-fills gaps left by large tiles, so visual order can differ from source order. |
|
|
23
|
-
| `size` | `'1x1' \| '2x1' \| '1x2' \| '2x2'` | `'1x1'` | Tile span, columns × rows. Two-wide spans apply from 2 columns up. |
|
|
23
|
+
| `BentoTile size` | `'1x1' \| '2x1' \| '1x2' \| '2x2'` | `'1x1'` | Tile span, columns × rows. Two-wide spans apply from 2 columns up. |
|
|
24
24
|
| `...Card props` | `CardProps` | | A tile is a surface Card (`variant` is fixed); `tone`, `surface` and `effect` pass through. |
|
|
25
25
|
|
|
26
26
|
## Example: Dashboard
|
|
@@ -10,9 +10,6 @@ Generic container primitive with style token props.
|
|
|
10
10
|
|
|
11
11
|
| Prop | Type | Default | Description |
|
|
12
12
|
| --- | --- | --- | --- |
|
|
13
|
-
| `padding` | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl'` | | Padding applied to all sides using design tokens. |
|
|
14
|
-
| `background` | `string` | | Background color CSS value or token. |
|
|
15
|
-
| `radius` | `string` | | Border radius CSS value or token. |
|
|
16
13
|
| `asChild` | `boolean` | | Merges props onto the immediate child element (Radix Slot). |
|
|
17
14
|
|
|
18
15
|
## Example: Default
|
|
@@ -21,8 +21,8 @@ import { ButtonGroup, Button } from '@nexub/react';
|
|
|
21
21
|
export default function Example() {
|
|
22
22
|
return (
|
|
23
23
|
<ButtonGroup>
|
|
24
|
-
<Button variant="
|
|
25
|
-
<Button variant="
|
|
24
|
+
<Button variant="filled">Save</Button>
|
|
25
|
+
<Button variant="outlined">Cancel</Button>
|
|
26
26
|
</ButtonGroup>
|
|
27
27
|
);
|
|
28
28
|
}
|
|
@@ -36,9 +36,9 @@ import { ButtonGroup, Button } from '@nexub/react';
|
|
|
36
36
|
export default function Example() {
|
|
37
37
|
return (
|
|
38
38
|
<ButtonGroup attached>
|
|
39
|
-
<Button variant="
|
|
40
|
-
<Button variant="
|
|
41
|
-
<Button variant="
|
|
39
|
+
<Button variant="outlined">Left</Button>
|
|
40
|
+
<Button variant="outlined">Center</Button>
|
|
41
|
+
<Button variant="outlined">Right</Button>
|
|
42
42
|
</ButtonGroup>
|
|
43
43
|
);
|
|
44
44
|
}
|
|
@@ -52,9 +52,9 @@ import { ButtonGroup, Button } from '@nexub/react';
|
|
|
52
52
|
export default function Example() {
|
|
53
53
|
return (
|
|
54
54
|
<ButtonGroup orientation="vertical">
|
|
55
|
-
<Button variant="
|
|
56
|
-
<Button variant="
|
|
57
|
-
<Button variant="
|
|
55
|
+
<Button variant="outlined">Option A</Button>
|
|
56
|
+
<Button variant="outlined">Option B</Button>
|
|
57
|
+
<Button variant="outlined">Option C</Button>
|
|
58
58
|
</ButtonGroup>
|
|
59
59
|
);
|
|
60
60
|
}
|
|
@@ -24,7 +24,7 @@ Triggers an action or event. Supports multiple variants, sizes, and semantic ton
|
|
|
24
24
|
|
|
25
25
|
| Prop | Type | Default | Description |
|
|
26
26
|
| --- | --- | --- | --- |
|
|
27
|
-
| `variant` | `'filled' \| 'tonal' \| 'outlined' \| 'text' \| 'glass' \| 'hero' \| 'subtle' \| 'link' \| 'destructive' \| 'accent'` | `'primary'` | Visual style of the button. `hero` is the marketing-mode main button (gradient, glow, spring lift): a filled button outside `data-mode="marketing"`; one per screen.
|
|
27
|
+
| `variant` | `'filled' \| 'tonal' \| 'outlined' \| 'text' \| 'glass' \| 'hero' \| 'subtle' \| 'link' \| 'destructive' \| 'accent'` | `'primary'` | Visual style of the button. `hero` is the marketing-mode main button (gradient, glow, spring lift): a filled button outside `data-mode="marketing"`; one per screen. Deprecated in 8.4, removed in 9.0: the legacy aliases primary (filled), secondary (tonal), outline (outlined) and ghost (text) still work; `npx nexub-migrate --rules button-aliases --write` renames them. |
|
|
28
28
|
| `size` | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl'` | `'md'` | Control height and padding. |
|
|
29
29
|
| `status` | `'idle' \| 'loading' \| 'success' \| 'error'` | `'idle'` | Async feedback (beta, 1.7.0). `loading` shows a spinner and blocks clicks but keeps focus; `success` draws a check; `error` shakes once. The label stays in flow, so the width holds. |
|
|
30
30
|
| `loading` | `boolean` | `false` | Alias for `status="loading"`. |
|
|
@@ -45,7 +45,7 @@ Triggers an action or event. Supports multiple variants, sizes, and semantic ton
|
|
|
45
45
|
import { Button } from '@nexub/react';
|
|
46
46
|
|
|
47
47
|
export default function Example() {
|
|
48
|
-
return <Button variant="
|
|
48
|
+
return <Button variant="filled">Click me</Button>;
|
|
49
49
|
}
|
|
50
50
|
```
|
|
51
51
|
|
|
@@ -57,9 +57,9 @@ import { Button } from '@nexub/react';
|
|
|
57
57
|
export default function Example() {
|
|
58
58
|
return (
|
|
59
59
|
<div className="flex gap-2 flex-wrap items-center justify-center">
|
|
60
|
-
<Button variant="
|
|
61
|
-
<Button variant="
|
|
62
|
-
<Button variant="
|
|
60
|
+
<Button variant="filled">Primary</Button>
|
|
61
|
+
<Button variant="outlined">Outline</Button>
|
|
62
|
+
<Button variant="text">Ghost</Button>
|
|
63
63
|
<Button variant="subtle">Subtle</Button>
|
|
64
64
|
<Button variant="link">Link</Button>
|
|
65
65
|
</div>
|
|
@@ -75,10 +75,10 @@ import { Button } from '@nexub/react';
|
|
|
75
75
|
export default function Example() {
|
|
76
76
|
return (
|
|
77
77
|
<div className="flex gap-2 flex-wrap items-center justify-center">
|
|
78
|
-
<Button size="xs" variant="
|
|
79
|
-
<Button size="sm" variant="
|
|
80
|
-
<Button size="md" variant="
|
|
81
|
-
<Button size="lg" variant="
|
|
78
|
+
<Button size="xs" variant="filled">XSmall</Button>
|
|
79
|
+
<Button size="sm" variant="filled">Small</Button>
|
|
80
|
+
<Button size="md" variant="filled">Medium</Button>
|
|
81
|
+
<Button size="lg" variant="filled">Large</Button>
|
|
82
82
|
</div>
|
|
83
83
|
);
|
|
84
84
|
}
|
|
@@ -92,8 +92,8 @@ import { Button } from '@nexub/react';
|
|
|
92
92
|
export default function Example() {
|
|
93
93
|
return (
|
|
94
94
|
<div className="flex gap-2 flex-wrap items-center justify-center">
|
|
95
|
-
<Button variant="
|
|
96
|
-
<Button variant="
|
|
95
|
+
<Button variant="filled" loading>Loading</Button>
|
|
96
|
+
<Button variant="outlined" disabled>Disabled</Button>
|
|
97
97
|
</div>
|
|
98
98
|
);
|
|
99
99
|
}
|
|
@@ -10,7 +10,6 @@ Compact label chip, optionally dismissible.
|
|
|
10
10
|
|
|
11
11
|
| Prop | Type | Default | Description |
|
|
12
12
|
| --- | --- | --- | --- |
|
|
13
|
-
| `variant` | `'filled' \| 'outline'` | `'filled'` | Visual style of the chip. |
|
|
14
13
|
| `onRemove` | `() => void` | | When provided, renders a dismiss button that calls this handler. |
|
|
15
14
|
| `removeLabel` | `string` | `'Remove'` | Accessible name of the dismiss button (5.2), e.g. "Remove Bug". Use it when several chips sit together. |
|
|
16
15
|
| `size` | `'sm' \| 'md'` | | Controls chip size. |
|
|
@@ -28,7 +28,7 @@ export default function Example() {
|
|
|
28
28
|
return (
|
|
29
29
|
<Collapsible.Root open={open} onOpenChange={setOpen}>
|
|
30
30
|
<Collapsible.Trigger asChild>
|
|
31
|
-
<Button variant="
|
|
31
|
+
<Button variant="outlined">{open ? 'Hide details' : 'Show details'}</Button>
|
|
32
32
|
</Collapsible.Trigger>
|
|
33
33
|
<Collapsible.Content>
|
|
34
34
|
<div className="pt-3 text-[var(--color-on-surface-variant)] text-body-sm">
|
|
@@ -53,7 +53,7 @@ export default function Example() {
|
|
|
53
53
|
<div className="flex items-center gap-2">
|
|
54
54
|
<span className="font-medium text-[var(--color-on-surface)] text-body-sm">Advanced settings</span>
|
|
55
55
|
<Collapsible.Trigger asChild>
|
|
56
|
-
<Button variant="
|
|
56
|
+
<Button variant="text" size="sm">{open2 ? 'Collapse' : 'Expand'}</Button>
|
|
57
57
|
</Collapsible.Trigger>
|
|
58
58
|
</div>
|
|
59
59
|
<Collapsible.Content>
|
|
@@ -138,7 +138,7 @@ export default function Example() {
|
|
|
138
138
|
viewOptions
|
|
139
139
|
bulkActions={(rows, clear) => (
|
|
140
140
|
<>
|
|
141
|
-
<Button size="sm" variant="
|
|
141
|
+
<Button size="sm" variant="outlined" onClick={clear}>
|
|
142
142
|
Send reminders ({rows.length})
|
|
143
143
|
</Button>
|
|
144
144
|
<Button size="sm" variant="destructive" onClick={clear}>
|
|
@@ -17,10 +17,8 @@ Calendar date picker with text input.
|
|
|
17
17
|
| `disabled` | `boolean` | `false` | Disables the date picker input and calendar. |
|
|
18
18
|
| `minDate` | `Date` | | Earliest selectable date. Dates before this are greyed out. |
|
|
19
19
|
| `maxDate` | `Date` | | Latest selectable date. Dates after this are greyed out. |
|
|
20
|
-
| `format` | `string` | `'dd/MM/yyyy'` | Date format string for the text input display. |
|
|
21
20
|
| `aria-label` | `string` | | Field name for screen readers; the selected value is appended. |
|
|
22
21
|
| `id` | `string` | | Id for the trigger button, e.g. to pair with a <label htmlFor>. |
|
|
23
|
-
| `error` | `string` | | Error message displayed below the input. |
|
|
24
22
|
|
|
25
23
|
## Example: Default
|
|
26
24
|
|
|
@@ -39,7 +39,7 @@ export default function Example() {
|
|
|
39
39
|
const [open, setOpen] = React.useState(false);
|
|
40
40
|
return (
|
|
41
41
|
<>
|
|
42
|
-
<Button variant="
|
|
42
|
+
<Button variant="filled" onClick={() => setOpen(true)}>Open Dialog</Button>
|
|
43
43
|
<Dialog.Root open={open} onOpenChange={setOpen}>
|
|
44
44
|
<Dialog.Portal>
|
|
45
45
|
<Dialog.Overlay />
|
|
@@ -49,8 +49,8 @@ export default function Example() {
|
|
|
49
49
|
Are you sure you want to continue? This action cannot be undone.
|
|
50
50
|
</Dialog.Description>
|
|
51
51
|
<div className="flex gap-2 justify-end">
|
|
52
|
-
<Dialog.Close asChild><Button variant="
|
|
53
|
-
<Button variant="
|
|
52
|
+
<Dialog.Close asChild><Button variant="outlined">Cancel</Button></Dialog.Close>
|
|
53
|
+
<Button variant="filled" onClick={() => setOpen(false)}>Confirm</Button>
|
|
54
54
|
</div>
|
|
55
55
|
</Dialog.Content>
|
|
56
56
|
</Dialog.Portal>
|
|
@@ -16,13 +16,13 @@ Slide-in panel from any edge of the screen.
|
|
|
16
16
|
| `Drawer.Overlay` | `compound` | | Dimmed backdrop rendered behind the drawer. |
|
|
17
17
|
| `Drawer.Content` | `compound` | | The drawer panel. Accepts a side prop. |
|
|
18
18
|
| `scrollLock` | `'style' \| 'class'` | | On Drawer.Root. How page scroll is locked while open. `class` adds a class from @nexub/themes/base instead of injecting a <style> tag, so it works under a strict CSP (style-src 'self'). Default `style`. |
|
|
19
|
-
| `
|
|
19
|
+
| `direction` | `'left' \| 'right' \| 'top' \| 'bottom'` | | Edge of the screen from which the drawer slides in. |
|
|
20
20
|
| `Drawer.Header` | `compound` | | Header section of the drawer panel. Sticky on solid panels (5.1): long content scrolls under it. |
|
|
21
21
|
| `Drawer.Footer` | `compound` | | Footer section of the drawer panel. Sticky on solid panels (5.1): actions stay in view while content scrolls. |
|
|
22
22
|
| `Drawer.Title` | `compound` | | Accessible title for the drawer. |
|
|
23
23
|
| `Drawer.Description` | `compound` | | Supporting description text for the drawer. |
|
|
24
24
|
| `Drawer.Close` | `compound` | | Element that closes the drawer. |
|
|
25
|
-
| `surface` | `'solid' \| 'glass'` | `'solid'` | Glass material on Drawer.Content — see Foundations → Materials. |
|
|
25
|
+
| `Drawer.Content surface` | `'solid' \| 'glass'` | `'solid'` | Glass material on Drawer.Content — see Foundations → Materials. |
|
|
26
26
|
|
|
27
27
|
## Example: Default
|
|
28
28
|
|
|
@@ -34,7 +34,7 @@ export default function Example() {
|
|
|
34
34
|
const [open, setOpen] = React.useState(false);
|
|
35
35
|
return (
|
|
36
36
|
<>
|
|
37
|
-
<Button variant="
|
|
37
|
+
<Button variant="outlined" onClick={() => setOpen(true)}>Open Drawer</Button>
|
|
38
38
|
<Drawer.Root open={open} onOpenChange={setOpen}>
|
|
39
39
|
<Drawer.Portal>
|
|
40
40
|
<Drawer.Overlay />
|
|
@@ -57,8 +57,8 @@ export default function Example() {
|
|
|
57
57
|
</div>
|
|
58
58
|
<Drawer.Footer>
|
|
59
59
|
<div className="flex gap-2 justify-end">
|
|
60
|
-
<Drawer.Close asChild><Button variant="
|
|
61
|
-
<Button variant="
|
|
60
|
+
<Drawer.Close asChild><Button variant="outlined">Cancel</Button></Drawer.Close>
|
|
61
|
+
<Button variant="filled">Save changes</Button>
|
|
62
62
|
</div>
|
|
63
63
|
</Drawer.Footer>
|
|
64
64
|
</Drawer.Content>
|
|
@@ -79,7 +79,7 @@ export default function Example() {
|
|
|
79
79
|
const [open, setOpen] = React.useState(false);
|
|
80
80
|
return (
|
|
81
81
|
<>
|
|
82
|
-
<Button variant="
|
|
82
|
+
<Button variant="outlined" onClick={() => setOpen(true)}>Open Bottom Sheet</Button>
|
|
83
83
|
<Drawer.Root open={open} onOpenChange={setOpen}>
|
|
84
84
|
<Drawer.Portal>
|
|
85
85
|
<Drawer.Overlay />
|
|
@@ -89,7 +89,7 @@ export default function Example() {
|
|
|
89
89
|
</Drawer.Header>
|
|
90
90
|
<div className="p-4 flex gap-3 flex-wrap">
|
|
91
91
|
{['Twitter', 'LinkedIn', 'Slack', 'Email'].map((s) => (
|
|
92
|
-
<Button key={s} variant="
|
|
92
|
+
<Button key={s} variant="outlined" size="sm">{s}</Button>
|
|
93
93
|
))}
|
|
94
94
|
</div>
|
|
95
95
|
</Drawer.Content>
|
|
@@ -35,7 +35,7 @@ export default function Example() {
|
|
|
35
35
|
<EmptyState.Title>No results found</EmptyState.Title>
|
|
36
36
|
<EmptyState.Description>Try adjusting your search or filters to find what you're looking for.</EmptyState.Description>
|
|
37
37
|
<EmptyState.Actions>
|
|
38
|
-
<Button variant="
|
|
38
|
+
<Button variant="filled" size="sm">Clear filters</Button>
|
|
39
39
|
</EmptyState.Actions>
|
|
40
40
|
</EmptyState.Root>
|
|
41
41
|
);
|
|
@@ -61,7 +61,7 @@ export default function Example() {
|
|
|
61
61
|
<EmptyState.Title>No documents yet</EmptyState.Title>
|
|
62
62
|
<EmptyState.Description>Upload your first document to get started.</EmptyState.Description>
|
|
63
63
|
<EmptyState.Actions>
|
|
64
|
-
<Button variant="
|
|
64
|
+
<Button variant="filled">Upload document</Button>
|
|
65
65
|
</EmptyState.Actions>
|
|
66
66
|
</EmptyState.Root>
|
|
67
67
|
);
|
|
@@ -78,7 +78,7 @@ import { Button, EmptyStatePreset } from '@nexub/react';
|
|
|
78
78
|
export default function Example() {
|
|
79
79
|
return (
|
|
80
80
|
<div className="grid w-full gap-4 sm:grid-cols-2">
|
|
81
|
-
<EmptyStatePreset kind="noResults" actions={<Button variant="
|
|
81
|
+
<EmptyStatePreset kind="noResults" actions={<Button variant="outlined" size="sm">Clear filters</Button>} />
|
|
82
82
|
<EmptyStatePreset kind="serverError" actions={<Button size="sm">Retry</Button>} />
|
|
83
83
|
</div>
|
|
84
84
|
);
|
|
@@ -14,7 +14,6 @@ Full-page or section error view with retry action.
|
|
|
14
14
|
| `description` | `string` | | Supporting text with more detail about the error or recovery steps. |
|
|
15
15
|
| `tone` | `'error' \| 'warning' \| 'info'` | `'error'` | Controls the icon and colour scheme of the error state. |
|
|
16
16
|
| `onRetry` | `() => void` | | When provided, renders a "Try again" button that calls this function on click. |
|
|
17
|
-
| `actions` | `React.ReactNode` | | Custom action elements rendered below the description. Takes priority over the default retry button. |
|
|
18
17
|
|
|
19
18
|
## Example: Default
|
|
20
19
|
|
|
@@ -11,9 +11,7 @@ Interactive chip for filtering, supports selected/unselected state.
|
|
|
11
11
|
| Prop | Type | Default | Description |
|
|
12
12
|
| --- | --- | --- | --- |
|
|
13
13
|
| `selected` | `boolean` | | Controlled selected state of the chip. |
|
|
14
|
-
| `onSelectedChange` | `(selected: boolean) => void` | | Called when the selected state changes. |
|
|
15
14
|
| `disabled` | `boolean` | | Disables the chip. |
|
|
16
|
-
| `size` | `'sm' \| 'md'` | | Controls chip size. |
|
|
17
15
|
|
|
18
16
|
## Example: Default
|
|
19
17
|
|
|
@@ -24,8 +24,8 @@ import { Flex, Button } from '@nexub/react';
|
|
|
24
24
|
export default function Example() {
|
|
25
25
|
return (
|
|
26
26
|
<Flex gap="md" align="center">
|
|
27
|
-
<Button variant="
|
|
28
|
-
<Button variant="
|
|
27
|
+
<Button variant="filled">Action</Button>
|
|
28
|
+
<Button variant="outlined">Cancel</Button>
|
|
29
29
|
</Flex>
|
|
30
30
|
);
|
|
31
31
|
}
|
|
@@ -12,7 +12,6 @@ Wraps Label, Input, HelperText and FormError into a single accessible group.
|
|
|
12
12
|
| --- | --- | --- | --- |
|
|
13
13
|
| `name` (required) | `string` | | Name attribute forwarded to the underlying input. |
|
|
14
14
|
| `id` | `string` | | Explicit id for the input; defaults to the name value. |
|
|
15
|
-
| `error` | `string` | | Validation error message shown below the input. |
|
|
16
15
|
| `required` | `boolean` | | Marks the field as required and renders a required indicator on the label. |
|
|
17
16
|
|
|
18
17
|
## Example: Default
|
|
@@ -12,7 +12,6 @@ CSS Grid layout primitive.
|
|
|
12
12
|
| --- | --- | --- | --- |
|
|
13
13
|
| `cols` | `number \| string` | | Number of columns or a custom grid-template-columns value. |
|
|
14
14
|
| `gap` | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl'` | | Gap between grid cells using design tokens. |
|
|
15
|
-
| `align` | `'start' \| 'center' \| 'end' \| 'stretch'` | | Sets the align-items CSS property for all grid cells. |
|
|
16
15
|
|
|
17
16
|
## Example: 2-column
|
|
18
17
|
|
|
@@ -10,7 +10,7 @@ Key–value list for displaying structured metadata or details.
|
|
|
10
10
|
|
|
11
11
|
| Prop | Type | Default | Description |
|
|
12
12
|
| --- | --- | --- | --- |
|
|
13
|
-
| `label` (required) | `string` | | The key label. |
|
|
13
|
+
| `InfoListItem label` (required) | `string` | | The key label. |
|
|
14
14
|
| `value` (required) | `React.ReactNode` | | The displayed value. |
|
|
15
15
|
|
|
16
16
|
## Example: Default
|
|
@@ -42,7 +42,7 @@ export default function Example() {
|
|
|
42
42
|
const [visible, setVisible] = React.useState(true);
|
|
43
43
|
return (
|
|
44
44
|
<div className="flex flex-col gap-3 items-start">
|
|
45
|
-
<Button variant="
|
|
45
|
+
<Button variant="outlined" onClick={() => setVisible((v) => !v)}>
|
|
46
46
|
{visible ? 'Collapse' : 'Expand'}
|
|
47
47
|
</Button>
|
|
48
48
|
<Collapse in={visible}>
|
|
@@ -36,7 +36,7 @@ export default function Example() {
|
|
|
36
36
|
const [visible, setVisible] = React.useState(true);
|
|
37
37
|
return (
|
|
38
38
|
<div className="flex flex-col gap-3 items-start">
|
|
39
|
-
<Button variant="
|
|
39
|
+
<Button variant="outlined" onClick={() => setVisible((v) => !v)}>
|
|
40
40
|
{visible ? 'Hide' : 'Show'}
|
|
41
41
|
</Button>
|
|
42
42
|
<Fade in={visible} unmountOnExit>
|
|
@@ -57,7 +57,7 @@ export default function Example() {
|
|
|
57
57
|
const [visible, setVisible] = React.useState(true);
|
|
58
58
|
return (
|
|
59
59
|
<div className="flex flex-col gap-3 items-start">
|
|
60
|
-
<Button variant="
|
|
60
|
+
<Button variant="outlined" onClick={() => setVisible((v) => !v)}>Toggle</Button>
|
|
61
61
|
<Fade in={visible} duration="slow">
|
|
62
62
|
<Card className="w-[200px]"><Text size="body-sm">Slow spring fade animation.</Text></Card>
|
|
63
63
|
</Fade>
|
|
@@ -36,7 +36,7 @@ export default function Example() {
|
|
|
36
36
|
const [visible, setVisible] = React.useState(true);
|
|
37
37
|
return (
|
|
38
38
|
<div className="flex flex-col gap-3 items-start">
|
|
39
|
-
<Button variant="
|
|
39
|
+
<Button variant="outlined" onClick={() => setVisible((v) => !v)}>Toggle</Button>
|
|
40
40
|
<Scale in={visible} unmountOnExit>
|
|
41
41
|
<Card className="w-[200px]"><Text size="body-sm">Scaling content</Text></Card>
|
|
42
42
|
</Scale>
|
|
@@ -37,7 +37,7 @@ export default function Example() {
|
|
|
37
37
|
const [visible, setVisible] = React.useState(true);
|
|
38
38
|
return (
|
|
39
39
|
<div className="flex flex-col gap-3 items-start">
|
|
40
|
-
<Button variant="
|
|
40
|
+
<Button variant="outlined" onClick={() => setVisible((v) => !v)}>Toggle</Button>
|
|
41
41
|
<Slide in={visible} direction="up" unmountOnExit>
|
|
42
42
|
<Card className="w-[200px]"><Text size="body-sm">Sliding content</Text></Card>
|
|
43
43
|
</Slide>
|
|
@@ -15,7 +15,6 @@ Page navigation control with prev/next and page number buttons.
|
|
|
15
15
|
| `pageSize` | `number` | `10` | Number of items per page. Used to calculate total page count. |
|
|
16
16
|
| `siblingCount` | `number` | `1` | Number of page buttons to show on each side of the current page. |
|
|
17
17
|
| `onPageChange` (required) | `(page: number) => void` | | Callback invoked with the new page number when the user navigates. |
|
|
18
|
-
| `showFirstLast` | `boolean` | `true` | Whether to show First and Last page navigation buttons. |
|
|
19
18
|
| `disabled` | `boolean` | `false` | Disables all pagination controls. |
|
|
20
19
|
|
|
21
20
|
## Example: Default
|
|
@@ -16,8 +16,8 @@ Pricing plan card with feature checklist, badge, and CTA button.
|
|
|
16
16
|
| `features` | `string[]` | | List of included features. |
|
|
17
17
|
| `highlighted` | `boolean` | `false` | Applies brand accent styling for recommended plans. |
|
|
18
18
|
| `badge` | `string` | | Label for the plan badge (e.g. "Most Popular"). |
|
|
19
|
-
| `
|
|
20
|
-
| `
|
|
19
|
+
| `cta` | `string` | `'Get started'` | CTA button label. |
|
|
20
|
+
| `onSelect` | `() => void` | | CTA button click handler. |
|
|
21
21
|
|
|
22
22
|
## Example: Default
|
|
23
23
|
|
|
@@ -29,7 +29,7 @@ export default function Example() {
|
|
|
29
29
|
return (
|
|
30
30
|
<Popover.Root>
|
|
31
31
|
<Popover.Trigger asChild>
|
|
32
|
-
<Button variant="
|
|
32
|
+
<Button variant="outlined">Open popover</Button>
|
|
33
33
|
</Popover.Trigger>
|
|
34
34
|
<Popover.Content>
|
|
35
35
|
<Text size="body-sm">This is popover content. You can put anything here.</Text>
|
|
@@ -50,7 +50,7 @@ export default function Example() {
|
|
|
50
50
|
{(['top', 'right', 'bottom', 'left'] as const).map((s) => (
|
|
51
51
|
<Popover.Root key={s}>
|
|
52
52
|
<Popover.Trigger asChild>
|
|
53
|
-
<Button variant="
|
|
53
|
+
<Button variant="text" size="sm">{s}</Button>
|
|
54
54
|
</Popover.Trigger>
|
|
55
55
|
<Popover.Content side={s}>
|
|
56
56
|
<Text size="body-sm">Opens {s}</Text>
|
|
@@ -10,13 +10,13 @@ Product cards in a grid; each card is one link with the product's accent. Server
|
|
|
10
10
|
|
|
11
11
|
| Prop | Type | Default | Description |
|
|
12
12
|
| --- | --- | --- | --- |
|
|
13
|
-
| `header` | `React.ReactNode` | |
|
|
14
|
-
| `name` (required) | `string` | |
|
|
15
|
-
| `description` (required) | `React.ReactNode` | |
|
|
16
|
-
| `href` (required) | `string` | |
|
|
17
|
-
| `icon` | `React.ReactNode` | |
|
|
18
|
-
| `accent` | `'leap' \| 'bookub' \| 'payub' \| 'founderub'` | |
|
|
19
|
-
| `linkLabel` | `string` | `'Learn more'` |
|
|
13
|
+
| `header` | `React.ReactNode` | | A SectionHeader, usually. |
|
|
14
|
+
| `ProductCard name` (required) | `string` | | Product name, the card's link text. |
|
|
15
|
+
| `ProductCard description` (required) | `React.ReactNode` | | One line on what it does. |
|
|
16
|
+
| `ProductCard href` (required) | `string` | | The product page. |
|
|
17
|
+
| `ProductCard icon` | `React.ReactNode` | | The product mark. |
|
|
18
|
+
| `ProductCard accent` | `'leap' \| 'bookub' \| 'payub' \| 'founderub'` | | Coloured top edge and tint in marketing mode. |
|
|
19
|
+
| `ProductCard linkLabel` | `string` | `'Learn more'` | The visual link cue. |
|
|
20
20
|
|
|
21
21
|
## Example: Default
|
|
22
22
|
|
|
@@ -11,7 +11,6 @@ A horizontal or vertical visual divider.
|
|
|
11
11
|
| Prop | Type | Default | Description |
|
|
12
12
|
| --- | --- | --- | --- |
|
|
13
13
|
| `orientation` | `'horizontal' \| 'vertical'` | `'horizontal'` | Direction of the separator line. |
|
|
14
|
-
| `decorative` | `boolean` | `true` | When true, the separator is hidden from the accessibility tree. |
|
|
15
14
|
|
|
16
15
|
## Example: Default
|
|
17
16
|
|
|
@@ -13,7 +13,7 @@ Grouped settings panel with title, description, and action area.
|
|
|
13
13
|
| `title` (required) | `string` | | Section heading. |
|
|
14
14
|
| `description` | `string` | | Supporting description for the section. |
|
|
15
15
|
| `children` (required) | `React.ReactNode` | | Settings controls. |
|
|
16
|
-
| `
|
|
16
|
+
| `actions` | `React.ReactNode` | | Primary action (e.g. save button). |
|
|
17
17
|
|
|
18
18
|
## Example: Default
|
|
19
19
|
|
|
@@ -33,7 +33,7 @@ export default function Example() {
|
|
|
33
33
|
const [open, setOpen] = React.useState(false);
|
|
34
34
|
return (
|
|
35
35
|
<>
|
|
36
|
-
<Button variant="
|
|
36
|
+
<Button variant="outlined" onClick={() => setOpen(true)}>Open Sheet</Button>
|
|
37
37
|
<Sheet.Root open={open} onOpenChange={setOpen}>
|
|
38
38
|
<Sheet.Portal>
|
|
39
39
|
<Sheet.Overlay />
|
|
@@ -12,7 +12,7 @@ Vertical stack layout with configurable gap.
|
|
|
12
12
|
| --- | --- | --- | --- |
|
|
13
13
|
| `gap` | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl'` | `'md'` | Spacing between child elements. |
|
|
14
14
|
| `align` | `'start' \| 'center' \| 'end' \| 'stretch'` | | Cross-axis alignment of children. |
|
|
15
|
-
| `
|
|
15
|
+
| `divider` | `boolean` | | Element rendered between each pair of children, e.g. `<Separator />`. |
|
|
16
16
|
|
|
17
17
|
## Example: Default
|
|
18
18
|
|
|
@@ -22,9 +22,9 @@ import { Stack, Button } from '@nexub/react';
|
|
|
22
22
|
export default function Example() {
|
|
23
23
|
return (
|
|
24
24
|
<Stack gap="md">
|
|
25
|
-
<Button variant="
|
|
26
|
-
<Button variant="
|
|
27
|
-
<Button variant="
|
|
25
|
+
<Button variant="outlined">Item 1</Button>
|
|
26
|
+
<Button variant="outlined">Item 2</Button>
|
|
27
|
+
<Button variant="outlined">Item 3</Button>
|
|
28
28
|
</Stack>
|
|
29
29
|
);
|
|
30
30
|
}
|
|
@@ -10,12 +10,12 @@ A band of headline numbers that count up as they scroll into view. StatBandItem
|
|
|
10
10
|
|
|
11
11
|
| Prop | Type | Default | Description |
|
|
12
12
|
| --- | --- | --- | --- |
|
|
13
|
-
| `title` | `React.ReactNode` | |
|
|
14
|
-
| `value` (required) | `number \| string` | |
|
|
15
|
-
| `label` (required) | `React.ReactNode` | |
|
|
16
|
-
| `prefix / suffix` | `string` | |
|
|
17
|
-
| `tone` | `ToneValue` | `'info'` |
|
|
18
|
-
| `format` | `Intl.NumberFormatOptions` | |
|
|
13
|
+
| `title` | `React.ReactNode` | | A heading above the stats. |
|
|
14
|
+
| `StatBandItem value` (required) | `number \| string` | | A number counts up from zeros when it scrolls into view; the server HTML keeps the real value. |
|
|
15
|
+
| `StatBandItem label` (required) | `React.ReactNode` | | What the number counts. |
|
|
16
|
+
| `StatBandItem prefix / suffix` | `string` | | E.g. "$" or "+". |
|
|
17
|
+
| `StatBandItem tone` | `ToneValue` | `'info'` | The number's colour (accent roles, AA as large text). |
|
|
18
|
+
| `StatBandItem format` | `Intl.NumberFormatOptions` | | Number formatting. |
|
|
19
19
|
|
|
20
20
|
## Example: Default
|
|
21
21
|
|
|
@@ -46,7 +46,7 @@ export default function Example() {
|
|
|
46
46
|
return (
|
|
47
47
|
<div className="flex flex-col gap-3 items-start max-w-[480px]">
|
|
48
48
|
<StreamingText as="p" text={STREAM_DEMO_TEXT.slice(0, length)} streaming={streaming} />
|
|
49
|
-
<Button variant="
|
|
49
|
+
<Button variant="outlined" size="sm" onClick={() => setLength(0)}>Restart</Button>
|
|
50
50
|
</div>
|
|
51
51
|
);
|
|
52
52
|
}
|
|
@@ -10,13 +10,13 @@ Customer quotes in product-coloured cards, with an optional star rating. Server
|
|
|
10
10
|
|
|
11
11
|
| Prop | Type | Default | Description |
|
|
12
12
|
| --- | --- | --- | --- |
|
|
13
|
-
| `header` | `React.ReactNode` | |
|
|
14
|
-
| `quote` (required) | `React.ReactNode` | |
|
|
15
|
-
| `name` (required) | `string` | |
|
|
16
|
-
| `role` | `React.ReactNode` | |
|
|
17
|
-
| `avatarSrc` | `string` | |
|
|
18
|
-
| `rating` | `number` | |
|
|
19
|
-
| `accent` | `'leap' \| 'bookub' \| 'payub' \| 'founderub'` | |
|
|
13
|
+
| `header` | `React.ReactNode` | | A SectionHeader, usually. |
|
|
14
|
+
| `TestimonialCard quote` (required) | `React.ReactNode` | | The quote. |
|
|
15
|
+
| `TestimonialCard name` (required) | `string` | | Who said it. |
|
|
16
|
+
| `TestimonialCard role` | `React.ReactNode` | | Job title and company. |
|
|
17
|
+
| `TestimonialCard avatarSrc` | `string` | | Photo; initials otherwise. |
|
|
18
|
+
| `TestimonialCard rating` | `number` | | Stars out of 5, announced as "Rated n out of 5". |
|
|
19
|
+
| `TestimonialCard accent` | `'leap' \| 'bookub' \| 'payub' \| 'founderub'` | | The product the customer uses. |
|
|
20
20
|
|
|
21
21
|
## Example: Default
|
|
22
22
|
|
|
@@ -6,14 +6,6 @@ Renders text with a brand gradient fill.
|
|
|
6
6
|
- Import: `import { TextGradient } from '@nexub/react';`
|
|
7
7
|
- Docs: https://nexub-ds-docs.pages.dev/components/text-gradient
|
|
8
8
|
|
|
9
|
-
## Props
|
|
10
|
-
|
|
11
|
-
| Prop | Type | Default | Description |
|
|
12
|
-
| --- | --- | --- | --- |
|
|
13
|
-
| `from` | `string` | | Starting color of the gradient (CSS color value or token). |
|
|
14
|
-
| `to` | `string` | | Ending color of the gradient (CSS color value or token). |
|
|
15
|
-
| `direction` | `'to-r' \| 'to-br' \| 'to-b'` | | Direction of the gradient. |
|
|
16
|
-
|
|
17
9
|
## Example: Default
|
|
18
10
|
|
|
19
11
|
```tsx
|
|
@@ -46,7 +46,7 @@ import { Button, toast } from '@nexub/react';
|
|
|
46
46
|
// The docs root layout already renders <Toaster />; a second one doubles every toast.
|
|
47
47
|
export default function Example() {
|
|
48
48
|
return (
|
|
49
|
-
<Button variant="
|
|
49
|
+
<Button variant="outlined" onClick={() => toast.custom('Changes saved', { description: 'Your profile has been updated.' })}>
|
|
50
50
|
Show toast
|
|
51
51
|
</Button>
|
|
52
52
|
);
|
|
@@ -61,10 +61,10 @@ import { Button, toast } from '@nexub/react';
|
|
|
61
61
|
export default function Example() {
|
|
62
62
|
return (
|
|
63
63
|
<div className="flex gap-2 flex-wrap items-center justify-center">
|
|
64
|
-
<Button variant="
|
|
65
|
-
<Button variant="
|
|
66
|
-
<Button variant="
|
|
67
|
-
<Button variant="
|
|
64
|
+
<Button variant="outlined" size="sm" onClick={() => toast.success('Saved successfully!')}>Success</Button>
|
|
65
|
+
<Button variant="outlined" size="sm" onClick={() => toast.error('Something went wrong.')}>Error</Button>
|
|
66
|
+
<Button variant="outlined" size="sm" onClick={() => toast.warning('Review required.')}>Warning</Button>
|
|
67
|
+
<Button variant="outlined" size="sm" onClick={() => toast.info('New update available.')}>Info</Button>
|
|
68
68
|
</div>
|
|
69
69
|
);
|
|
70
70
|
}
|
|
@@ -78,7 +78,7 @@ import { Button, toast } from '@nexub/react';
|
|
|
78
78
|
export default function Example() {
|
|
79
79
|
return (
|
|
80
80
|
<Button
|
|
81
|
-
variant="
|
|
81
|
+
variant="outlined"
|
|
82
82
|
onClick={() =>
|
|
83
83
|
toast.custom('File deleted', {
|
|
84
84
|
description: 'The file was moved to trash.',
|
|
@@ -113,7 +113,7 @@ export default function Example() {
|
|
|
113
113
|
return hidden ? (
|
|
114
114
|
<Button variant="text" onClick={() => setHidden(false)}>Restore demo</Button>
|
|
115
115
|
) : (
|
|
116
|
-
<Button variant="
|
|
116
|
+
<Button variant="outlined" tone="danger" onClick={remove}>Delete INV-2041</Button>
|
|
117
117
|
);
|
|
118
118
|
}
|
|
119
119
|
```
|
|
@@ -23,7 +23,7 @@ export default function Example() {
|
|
|
23
23
|
return (
|
|
24
24
|
<TooltipProvider>
|
|
25
25
|
<Tooltip label="This is a tooltip" side="top">
|
|
26
|
-
<Button variant="
|
|
26
|
+
<Button variant="outlined">Hover me</Button>
|
|
27
27
|
</Tooltip>
|
|
28
28
|
</TooltipProvider>
|
|
29
29
|
);
|
|
@@ -39,7 +39,7 @@ export default function Example() {
|
|
|
39
39
|
return (
|
|
40
40
|
<TooltipProvider>
|
|
41
41
|
<Tooltip label="This is a tooltip" side="top">
|
|
42
|
-
<Button variant="
|
|
42
|
+
<Button variant="outlined">Hover me</Button>
|
|
43
43
|
</Tooltip>
|
|
44
44
|
</TooltipProvider>
|
|
45
45
|
);
|
|
@@ -13,7 +13,7 @@ User profile card displaying avatar, name, role, and optional actions.
|
|
|
13
13
|
| `name` (required) | `string` | | User display name. |
|
|
14
14
|
| `email` | `string` | | User email address. |
|
|
15
15
|
| `role` | `string` | | Job title or role label. |
|
|
16
|
-
| `
|
|
16
|
+
| `avatarSrc` | `string` | | URL for avatar image. |
|
|
17
17
|
| `actions` | `React.ReactNode` | | Action buttons or menu. |
|
|
18
18
|
|
|
19
19
|
## Example: Default
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Component index
|
|
2
2
|
|
|
3
|
-
Nexub DS v8.
|
|
3
|
+
Nexub DS v8.4.0. Open `components/<slug>.md` for props, examples and accessibility notes.
|
|
4
4
|
Never use a component marked deprecated.
|
|
5
5
|
|
|
6
6
|
## Components — Actions
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Tokens
|
|
2
2
|
|
|
3
|
-
Nexub DS v8.
|
|
3
|
+
Nexub DS v8.4.0. Every token is a CSS custom property from `@nexub/tokens/css` (loaded by `@nexub/themes/base`).
|
|
4
4
|
The Tailwind preset (`@nexub/tokens/tailwind`) maps them to utilities. Never hardcode a hex, px spacing or shadow that a token covers.
|
|
5
5
|
|
|
6
6
|
## Color roles
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nexub/mcp",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.4.0",
|
|
4
4
|
"description": "MCP server for Nexub Design System: gives Claude, Cursor and any MCP client the components, patterns, tokens and design rules of the installed release.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|