division-ds 0.3.0 → 0.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/AGENTS.md +2 -2
- package/package.json +1 -1
- package/public/docs/components/accordion.md +1 -1
- package/public/docs/components/ai-label.md +1 -1
- package/public/docs/components/alert-dialog.md +1 -1
- package/public/docs/components/alert.md +1 -1
- package/public/docs/components/approval-request.md +1 -1
- package/public/docs/components/auth-form.md +1 -1
- package/public/docs/components/avatar-group.md +1 -1
- package/public/docs/components/avatar.md +1 -1
- package/public/docs/components/badge.md +1 -1
- package/public/docs/components/breadcrumbs.md +1 -1
- package/public/docs/components/button.md +1 -1
- package/public/docs/components/card.md +1 -1
- package/public/docs/components/carousel.md +1 -1
- package/public/docs/components/cart.md +1 -1
- package/public/docs/components/chart-panel.md +58 -43
- package/public/docs/components/chat-message.md +1 -1
- package/public/docs/components/chat-thread.md +1 -1
- package/public/docs/components/checkbox.md +1 -1
- package/public/docs/components/checkout-form.md +1 -1
- package/public/docs/components/code-block.md +106 -0
- package/public/docs/components/command-palette.md +1 -1
- package/public/docs/components/data-table.md +1 -1
- package/public/docs/components/date-picker.md +3 -3
- package/public/docs/components/date-presets.md +1 -1
- package/public/docs/components/date-range-picker.md +3 -3
- package/public/docs/components/description-list.md +1 -1
- package/public/docs/components/dialog.md +1 -1
- package/public/docs/components/divider.md +1 -1
- package/public/docs/components/dropdown-menu.md +2 -1
- package/public/docs/components/empty-state.md +1 -1
- package/public/docs/components/footer.md +1 -1
- package/public/docs/components/form-field.md +2 -2
- package/public/docs/components/icon-button.md +1 -1
- package/public/docs/components/input.md +1 -1
- package/public/docs/components/kanban-board.md +1 -1
- package/public/docs/components/kbd.md +25 -4
- package/public/docs/components/link.md +1 -1
- package/public/docs/components/list-item.md +1 -1
- package/public/docs/components/loading-animation.md +1 -1
- package/public/docs/components/multi-select.md +5 -5
- package/public/docs/components/navbar.md +55 -4
- package/public/docs/components/newsletter-form.md +1 -1
- package/public/docs/components/page-header.md +1 -1
- package/public/docs/components/pagination.md +1 -1
- package/public/docs/components/panel.md +139 -0
- package/public/docs/components/product-card.md +1 -1
- package/public/docs/components/progress.md +2 -2
- package/public/docs/components/prompt-input.md +1 -1
- package/public/docs/components/quantity-stepper.md +2 -2
- package/public/docs/components/radio.md +1 -1
- package/public/docs/components/rating.md +1 -1
- package/public/docs/components/score-ring.md +1 -1
- package/public/docs/components/search.md +1 -1
- package/public/docs/components/section-heading.md +1 -1
- package/public/docs/components/segmented-control.md +1 -1
- package/public/docs/components/select.md +2 -2
- package/public/docs/components/sheet.md +1 -1
- package/public/docs/components/sidebar.md +1 -1
- package/public/docs/components/skeleton.md +1 -1
- package/public/docs/components/slider.md +1 -1
- package/public/docs/components/sparkline.md +1 -1
- package/public/docs/components/spinner.md +1 -1
- package/public/docs/components/stat.md +1 -1
- package/public/docs/components/status-tracker.md +1 -1
- package/public/docs/components/stepper.md +1 -1
- package/public/docs/components/switch.md +1 -1
- package/public/docs/components/tabs.md +1 -1
- package/public/docs/components/tag.md +1 -1
- package/public/docs/components/textarea.md +1 -1
- package/public/docs/components/time-field.md +5 -5
- package/public/docs/components/timeline.md +1 -1
- package/public/docs/components/toast.md +1 -1
- package/public/docs/components/tool-call.md +1 -1
- package/public/docs/components/tooltip.md +1 -1
- package/public/manifest/components.json +516 -92
- package/public/manifest/tokens.json +10 -7
- package/scripts/lib/agent-docs.mjs +1 -1
- package/scripts/lib/props-validator.mjs +36 -2
- package/skills/division-ds/SKILL.md +1 -1
- package/division-ds-0.3.0.tgz +0 -0
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from 'src/components/molecules/dropdown-menu/DropdownMenu'
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file.
|
|
16
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
17
17
|
|
|
18
18
|
## Props
|
|
19
19
|
|
|
@@ -29,6 +29,7 @@ Paths are from the Division DS repository root. Installed with shadcn they start
|
|
|
29
29
|
| `onSelect (Item)` | `(event: Event) => void` | | Called when the item is chosen. |
|
|
30
30
|
| `disabled (Item)` | `boolean` | `false` | The item can't be chosen, and typing letters (typeahead) skips it. |
|
|
31
31
|
| `tone (Item)` | `'default' \| 'hostile'` | `'default'` | Use hostile for a destructive action: hostile-coloured text at rest, the hostile fill with ink text when highlighted. |
|
|
32
|
+
| `asChild (Item)` | `boolean` | `false` | Makes the one child (a link) the item, for a menu of links. icon and shortcut are ignored then; put the content inside the link. |
|
|
32
33
|
| `icon (Item)` | `ReactNode` | | A small icon before the text, hidden from screen readers (aria-hidden). |
|
|
33
34
|
| `shortcut (Item)` | `string` | | Shown on the right and passed to screen readers as aria-keyshortcuts. It only displays the key: the menu never makes the key work. |
|
|
34
35
|
| `checked (Checkbox item)` | `boolean` | | Whether the tick shows. |
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import { EmptyState } from 'src/components/molecules/empty-state/EmptyState'
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file.
|
|
16
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
17
17
|
|
|
18
18
|
## Props
|
|
19
19
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import { Footer } from 'src/components/organisms/footer/Footer'
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file.
|
|
16
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
17
17
|
|
|
18
18
|
## Props
|
|
19
19
|
|
|
@@ -15,7 +15,7 @@ import { FormField } from 'src/components/molecules/form-field/FormField'
|
|
|
15
15
|
import { ErrorSummary } from 'src/components/molecules/form-field/ErrorSummary'
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file.
|
|
18
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
19
19
|
|
|
20
20
|
## Props
|
|
21
21
|
|
|
@@ -25,7 +25,7 @@ Paths are from the Division DS repository root. Installed with shadcn they start
|
|
|
25
25
|
| `help` | `string` | | Instruction text, read out before any error. |
|
|
26
26
|
| `error` | `string` | | Sets invalid on the control and adds the error line. |
|
|
27
27
|
| `required` | `boolean` | `false` | Adds the asterisk (hidden from screen readers) and the built-in required attribute on the control. That attribute is what assistive technology actually announces. |
|
|
28
|
-
| `children` | `ReactElement` | | Exactly one control: Input, Textarea, Select or
|
|
28
|
+
| `children` | `ReactElement` | | Exactly one control: Input, Textarea, Select, MultiSelect, QuantityStepper, DatePicker, DateRangePicker or TimeField. The controls that name themselves (all but Input and Textarea) take the FormField label, so leave their own label out. An id you give the control is kept (point an ErrorSummary entry at it); without one, FormField makes one up. |
|
|
29
29
|
| `className` | `string` | | Extra CSS classes, merged with the outer element's own. When two Tailwind classes clash, the later one wins. |
|
|
30
30
|
| `ref` | `Ref<HTMLDivElement>` | | Passed through to the outer element. |
|
|
31
31
|
| `errors (ErrorSummary)` | `{ fieldId: string; message: string }[]` | | What stopped the form from submitting, in the order of the fields. Each entry links to its field and moves focus there. An empty list shows nothing. |
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import { IconButton } from 'src/components/atoms/icon-button/IconButton'
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file.
|
|
16
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
17
17
|
|
|
18
18
|
## Props
|
|
19
19
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import { Input, inputVariants } from 'src/components/atoms/input/Input'
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file.
|
|
16
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
17
17
|
|
|
18
18
|
## Requires
|
|
19
19
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import { KanbanBoard, applyKanbanMove, groupKanbanItems, kanbanDragOver, kanbanDrop, kanbanMessages, kanbanPosition } from 'src/components/organisms/kanban-board/KanbanBoard'
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file.
|
|
16
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
17
17
|
|
|
18
18
|
## Requires
|
|
19
19
|
|
|
@@ -13,13 +13,15 @@
|
|
|
13
13
|
import { Kbd } from 'src/components/atoms/kbd/Kbd'
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file.
|
|
16
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
17
17
|
|
|
18
18
|
## Props
|
|
19
19
|
|
|
20
20
|
| Prop | Type | Default | Description |
|
|
21
21
|
|---|---|---|---|
|
|
22
22
|
| `children` | `ReactNode` | | The key's name, for example "Esc" or "⌘". |
|
|
23
|
+
| `size` | `'md' \| 'sm'` | `'md'` | md is 24px tall, for a cap beside text or in a menu row. sm is 20px tall, for a cap inside a 32px control: a small Button or a search field. |
|
|
24
|
+
| `cut` | `boolean` | `false` | Cuts the bottom-right corner (5px at sm, 8px at md) so the cap nests in the corner of a bevelled control, its diagonal parallel to the control's. Only for a cap inside such a control. |
|
|
23
25
|
| `className` | `string` | | Merged with the component's classes. When Tailwind utility classes clash, the later one wins. |
|
|
24
26
|
| `ref` | `Ref<HTMLElement>` | | Passed through to the kbd element. |
|
|
25
27
|
| `...rest` | `HTMLAttributes<HTMLElement>` | | Every native attribute, passed onto the kbd element, such as a title, or an aria-label for a symbol key (aria-label is the name screen readers read out). |
|
|
@@ -49,6 +51,24 @@ Each is compiled and rendered on the docs page. Imports are omitted; see above.
|
|
|
49
51
|
<span className="text-sm text-[var(--color-text-secondary)]">Open the command palette</span>
|
|
50
52
|
```
|
|
51
53
|
|
|
54
|
+
### Sizes
|
|
55
|
+
|
|
56
|
+
```tsx
|
|
57
|
+
<Kbd>Esc</Kbd>
|
|
58
|
+
<Kbd size="sm">Esc</Kbd>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Small and cut, inside a small button
|
|
62
|
+
|
|
63
|
+
```tsx
|
|
64
|
+
<Button variant="secondary" size="sm" iconStart={<Search />} aria-keyshortcuts="Control+K">
|
|
65
|
+
Search
|
|
66
|
+
<Kbd aria-hidden="true" size="sm" cut className="-mr-1.5 ml-2 -translate-y-[var(--cap-shift,0px)]">
|
|
67
|
+
Ctrl K
|
|
68
|
+
</Kbd>
|
|
69
|
+
</Button>
|
|
70
|
+
```
|
|
71
|
+
|
|
52
72
|
## Keyboard
|
|
53
73
|
|
|
54
74
|
Not focusable. No keyboard behaviour of its own.
|
|
@@ -58,15 +78,16 @@ Not focusable. No keyboard behaviour of its own.
|
|
|
58
78
|
- Use one Kbd per physical key, and put them side by side for a chord (keys pressed together).
|
|
59
79
|
- Put it next to the action it triggers, in the same row or the same tooltip.
|
|
60
80
|
- Write the key name the way the keyboard prints it.
|
|
81
|
+
- Inside a 32px control, use size="sm"; inside a bevelled one (a Button), add cut and place the cap at the end, near the cut corner.
|
|
61
82
|
|
|
62
83
|
## Don't
|
|
63
84
|
|
|
64
|
-
- Don’t
|
|
85
|
+
- Don’t set cut on a cap that stands alone in text or a menu row. The cut answers a bevelled corner around it; without one it reads as a button.
|
|
65
86
|
- Don’t put a whole chord inside one Kbd ("Ctrl+K" in a single cap).
|
|
66
87
|
- Don’t use it for anything that isn’t a key. It’s not a badge.
|
|
67
88
|
|
|
68
89
|
## Anatomy
|
|
69
90
|
|
|
70
91
|
- **kbd element**: The HTML element made for keys. Screen readers announce it as keyboard input.
|
|
71
|
-
- **Hairline border**: A one-pixel border in border.hairline-strong
|
|
72
|
-
- **Mono legend**: JetBrains Mono, uppercase, 11px (pixels): the tertiary type role.
|
|
92
|
+
- **Hairline border**: A one-pixel border in border.hairline-strong. Square corners by default; with cut, the bottom-right corner is cut at 45 degrees and the border follows the diagonal.
|
|
93
|
+
- **Mono legend**: JetBrains Mono, uppercase, 11px (pixels): the tertiary type role, at both sizes.
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import { Link, linkVariants } from 'src/components/atoms/link/Link'
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file.
|
|
16
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
17
17
|
|
|
18
18
|
## Props
|
|
19
19
|
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
import { List, ListItem } from 'src/components/molecules/list-item/ListItem'
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file.
|
|
17
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
18
18
|
|
|
19
19
|
## Requires
|
|
20
20
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import { LoadingAnimation } from 'src/components/atoms/loading-animation/LoadingAnimation'
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file.
|
|
16
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
17
17
|
|
|
18
18
|
## Props
|
|
19
19
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import { MultiSelect } from 'src/components/molecules/multi-select/MultiSelect'
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file.
|
|
16
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
17
17
|
|
|
18
18
|
## Requires
|
|
19
19
|
|
|
@@ -23,7 +23,7 @@ Paths are from the Division DS repository root. Installed with shadcn they start
|
|
|
23
23
|
|
|
24
24
|
| Prop | Type | Default | Description |
|
|
25
25
|
|---|---|---|---|
|
|
26
|
-
| `label` | `string` | |
|
|
26
|
+
| `label` | `string` | | The name screen readers give the text field and the list. Leave it out inside a FormField, which sets it from its own label. Outside one it is required, and `division-ds check` flags a missing one. |
|
|
27
27
|
| `options` | `SelectOption[]` | | { value, label, disabled? }, the same rows Select takes. |
|
|
28
28
|
| `value` | `string[]` | | The current selection when the page keeps track of it (controlled), as option values in the order they were chosen. |
|
|
29
29
|
| `defaultValue` | `string[]` | | The starting selection when the component keeps track itself (uncontrolled). |
|
|
@@ -60,7 +60,7 @@ const LOADOUT = [
|
|
|
60
60
|
|
|
61
61
|
<div className="w-full max-w-md">
|
|
62
62
|
<FormField label="Loadout">
|
|
63
|
-
<MultiSelect
|
|
63
|
+
<MultiSelect options={LOADOUT} placeholder="Choose your kit…" />
|
|
64
64
|
</FormField>
|
|
65
65
|
</div>
|
|
66
66
|
```
|
|
@@ -84,7 +84,7 @@ function ControlledExample() {
|
|
|
84
84
|
return (
|
|
85
85
|
<div className="flex flex-col gap-2 w-full max-w-md">
|
|
86
86
|
<FormField label="Loadout" help="Remove a tag and watch the others close the gap.">
|
|
87
|
-
<MultiSelect
|
|
87
|
+
<MultiSelect options={LOADOUT} value={kit} onValueChange={setKit} />
|
|
88
88
|
</FormField>
|
|
89
89
|
<span className="font-mono text-xs text-[var(--color-text-secondary)]">value: [{kit.join(', ')}]</span>
|
|
90
90
|
</div>
|
|
@@ -110,7 +110,7 @@ const LOADOUT = [
|
|
|
110
110
|
|
|
111
111
|
<div className="w-full max-w-md">
|
|
112
112
|
<FormField label="Loadout" error="Pick eye protection.">
|
|
113
|
-
<MultiSelect
|
|
113
|
+
<MultiSelect options={LOADOUT} defaultValue={['mags']} />
|
|
114
114
|
</FormField>
|
|
115
115
|
</div>
|
|
116
116
|
```
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import { Navbar } from 'src/components/organisms/navbar/Navbar'
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file.
|
|
16
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
17
17
|
|
|
18
18
|
## Props
|
|
19
19
|
|
|
@@ -21,11 +21,12 @@ Paths are from the Division DS repository root. Installed with shadcn they start
|
|
|
21
21
|
|---|---|---|---|
|
|
22
22
|
| `label` | `string` | | Required. The name screen readers give the navigation region. |
|
|
23
23
|
| `brand` | `ReactNode` | | Required. The wordmark or logo, usually a link to the home page. |
|
|
24
|
-
| `items` | `NavbarItem[]` | | Required.
|
|
24
|
+
| `items` | `NavbarItem[]` | | Required. A link is { label, href, current }. A menu among the links is { label, menu, current }: menu lists { label, href, description } entries, opened from a dropdown on a wide bar and listed as a labelled group in the menu sheet on a narrow one. |
|
|
25
25
|
| `actions` | `ReactNode` | | Controls on the right: icon buttons, a cart link, an account menu. Keep them small, because they stay visible at every width. |
|
|
26
26
|
| `renderLink` | `(props: LinkRenderProps) => ReactNode` | `a plain anchor` | Pass your router's link component here. Map href to its own prop, and pass className, aria-current and onClick through. |
|
|
27
27
|
| `menuLabel` | `string` | `'Menu'` | The menu button's name for screen readers, and the sheet's title. |
|
|
28
|
-
| `menuFooter` | `ReactNode` | | Shown in the menu sheet under the links. Use it for an action that doesn't fit in actions on a narrow bar. Hide the matching copy in actions below the breakpoint by wrapping it in an element with the classes hidden @2xl:flex. |
|
|
28
|
+
| `menuFooter` | `ReactNode` | | Shown in the menu sheet under the links. Use it for an action that doesn't fit in actions on a narrow bar. Hide the matching copy in actions below the breakpoint by wrapping it in an element with the classes hidden @2xl:flex (hidden @4xl:flex when collapseBelow is '4xl'). |
|
|
29
|
+
| `collapseBelow` | `'2xl' \| '4xl'` | `'2xl'` | The bar's own width below which the links fold into the menu sheet: 2xl is 42rem, 4xl is 56rem. Pick the one at which the brand, every link and the actions still fit on one row with room to spare. |
|
|
29
30
|
| `className` | `string` | | Added to the root classes. Where two Tailwind utility classes clash, the later one wins. |
|
|
30
31
|
| `ref` | `Ref<HTMLElement>` | | The header element. |
|
|
31
32
|
|
|
@@ -34,7 +35,7 @@ Paths are from the Division DS repository root. Installed with shadcn they start
|
|
|
34
35
|
Exported beside the component, from the same file. Import a type with `import type { ... }`.
|
|
35
36
|
|
|
36
37
|
```ts
|
|
37
|
-
export type NavbarItem =
|
|
38
|
+
export type NavbarItem = NavbarLink | NavbarMenu
|
|
38
39
|
```
|
|
39
40
|
|
|
40
41
|
## Examples
|
|
@@ -77,6 +78,56 @@ const ACTIONS = (
|
|
|
77
78
|
<Navbar label="Store navigation" brand={BRAND} items={ITEMS} actions={ACTIONS} />
|
|
78
79
|
```
|
|
79
80
|
|
|
81
|
+
### A menu among the links
|
|
82
|
+
|
|
83
|
+
```tsx
|
|
84
|
+
const ITEMS = [
|
|
85
|
+
{ label: 'Replicas', href: '#replicas' },
|
|
86
|
+
{ label: 'Optics', href: '#optics', current: true },
|
|
87
|
+
{ label: 'Parts', href: '#parts' },
|
|
88
|
+
{ label: 'Care', href: '#care' },
|
|
89
|
+
{ label: 'Field notes', href: '#field-notes' },
|
|
90
|
+
]
|
|
91
|
+
|
|
92
|
+
const BRAND = (
|
|
93
|
+
<a
|
|
94
|
+
href="#home"
|
|
95
|
+
className="inline-flex items-center min-h-10 font-display font-bold uppercase tracking-[0.14em] text-[var(--color-text-primary)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--color-focus-ring)]"
|
|
96
|
+
>
|
|
97
|
+
Hexline
|
|
98
|
+
</a>
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
const ACTIONS = (
|
|
102
|
+
<>
|
|
103
|
+
<IconButton label="Search" variant="ghost">
|
|
104
|
+
<Search aria-hidden="true" className="w-5 h-5" />
|
|
105
|
+
</IconButton>
|
|
106
|
+
<IconButton label="Cart, 2 items" variant="ghost" asChild>
|
|
107
|
+
<a href="#cart">
|
|
108
|
+
<ShoppingBag aria-hidden="true" className="w-5 h-5" />
|
|
109
|
+
</a>
|
|
110
|
+
</IconButton>
|
|
111
|
+
</>
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
<Navbar
|
|
115
|
+
label="Store navigation with a menu"
|
|
116
|
+
brand={BRAND}
|
|
117
|
+
items={[
|
|
118
|
+
...ITEMS.slice(0, 3),
|
|
119
|
+
{
|
|
120
|
+
label: 'Guides',
|
|
121
|
+
menu: [
|
|
122
|
+
{ label: 'Sizing', href: '#sizing', description: 'Fit charts for every replica.' },
|
|
123
|
+
{ label: 'Returns', href: '#returns', description: 'Thirty days, no questions.' },
|
|
124
|
+
],
|
|
125
|
+
},
|
|
126
|
+
]}
|
|
127
|
+
actions={ACTIONS}
|
|
128
|
+
/>
|
|
129
|
+
```
|
|
130
|
+
|
|
80
131
|
### A narrow container
|
|
81
132
|
|
|
82
133
|
```tsx
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import { NewsletterForm } from 'src/components/organisms/newsletter-form/NewsletterForm'
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file.
|
|
16
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
17
17
|
|
|
18
18
|
## Props
|
|
19
19
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import { PageHeader } from 'src/components/molecules/page-header/PageHeader'
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file.
|
|
16
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
17
17
|
|
|
18
18
|
## Props
|
|
19
19
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import { Pagination, paginationRange } from 'src/components/molecules/pagination/Pagination'
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file.
|
|
16
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
17
17
|
|
|
18
18
|
## Props
|
|
19
19
|
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# Panel
|
|
2
|
+
|
|
3
|
+
> The system's framed surface: a thin border around a fill, with the crosshair corner marks and the cut corner as options. Card is a Panel with a title, body and footer; Panel is the frame alone, for a feature tile, a demo frame or a tile that is one link.
|
|
4
|
+
|
|
5
|
+
- **Best for:** Framing content that has no title, body and footer structure: a feature tile, a demo area, or a tile that is one link.
|
|
6
|
+
- **Not for:** Content with a title, a body and actions: use Card. A page-width layout wrapper: use a plain div with max-w-*.
|
|
7
|
+
- Atom. Source: `src/components/atoms/panel/Panel.tsx`
|
|
8
|
+
- Rendered docs page: `/components/panel`
|
|
9
|
+
|
|
10
|
+
## Import
|
|
11
|
+
|
|
12
|
+
```tsx
|
|
13
|
+
import { Panel } from 'src/components/atoms/panel/Panel'
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
17
|
+
|
|
18
|
+
## Props
|
|
19
|
+
|
|
20
|
+
| Prop | Type | Default | Description |
|
|
21
|
+
|---|---|---|---|
|
|
22
|
+
| `padding` | `'none' \| 'sm' \| 'md' \| 'lg'` | `'md'` | Inner spacing: 0, 12px, 20px or 32px. |
|
|
23
|
+
| `tone` | `'base' \| 'raised' \| 'signal'` | `'raised'` | base sits flush with the page, raised is one step up, signal is the brand wash for the one panel in a group that leads. |
|
|
24
|
+
| `crosshair` | `boolean` | `false` | Draws the crosshair marks at the corners. |
|
|
25
|
+
| `cut` | `boolean` | `false` | Cuts the bottom-right corner, with the border following the cut. |
|
|
26
|
+
| `interactive` | `boolean` | `false` | Hover and focus states for a panel that is one link or button. Use it with asChild; it adds no behaviour of its own. |
|
|
27
|
+
| `asChild` | `boolean` | `false` | Renders the single child element (an a, a router Link, a button) with the panel classes merged onto it, instead of a div. |
|
|
28
|
+
| `className` | `string` | | Merged with the component's classes. Use it for layout (a grid span, flex, gap), not for the fill or the border. |
|
|
29
|
+
| `ref` | `Ref<HTMLDivElement>` | | Passed through to the div, or to the child with asChild. |
|
|
30
|
+
| `...rest` | `HTMLAttributes<HTMLDivElement>` | | Every native attribute, passed onto the element. |
|
|
31
|
+
|
|
32
|
+
## Examples
|
|
33
|
+
|
|
34
|
+
Each is compiled and rendered on the docs page. Imports are omitted; see above.
|
|
35
|
+
|
|
36
|
+
### Tones
|
|
37
|
+
|
|
38
|
+
```tsx
|
|
39
|
+
<Panel tone="base">
|
|
40
|
+
<p className="font-display font-semibold">Base</p>
|
|
41
|
+
<p className="text-sm text-[var(--color-text-secondary)]">Flush with the page.</p>
|
|
42
|
+
</Panel>
|
|
43
|
+
<Panel tone="raised">
|
|
44
|
+
<p className="font-display font-semibold">Raised</p>
|
|
45
|
+
<p className="text-sm text-[var(--color-text-secondary)]">One step up.</p>
|
|
46
|
+
</Panel>
|
|
47
|
+
<Panel tone="signal">
|
|
48
|
+
<p className="font-display font-semibold">Signal</p>
|
|
49
|
+
<p className="text-sm text-[var(--color-text-secondary)]">The one that leads.</p>
|
|
50
|
+
</Panel>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Padding
|
|
54
|
+
|
|
55
|
+
```tsx
|
|
56
|
+
<Panel padding="none">none</Panel>
|
|
57
|
+
<Panel padding="sm">sm</Panel>
|
|
58
|
+
<Panel padding="md">md</Panel>
|
|
59
|
+
<Panel padding="lg">lg</Panel>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Crosshair and cut corner
|
|
63
|
+
|
|
64
|
+
```tsx
|
|
65
|
+
<Panel crosshair>Crosshair</Panel>
|
|
66
|
+
<Panel cut>Cut corner</Panel>
|
|
67
|
+
<Panel crosshair cut tone="signal">Both</Panel>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Interactive, as a router link
|
|
71
|
+
|
|
72
|
+
```tsx
|
|
73
|
+
<Panel interactive cut padding="lg" asChild>
|
|
74
|
+
<RouterLink to="/components/card" className="flex flex-col gap-3">
|
|
75
|
+
<span className="font-display text-lg font-semibold">Card</span>
|
|
76
|
+
<span className="text-sm text-[var(--color-text-secondary)]">A panel with a title, a body and a footer.</span>
|
|
77
|
+
<span className="inline-flex items-center gap-2 font-semibold text-[var(--color-accent-signal-text)]">
|
|
78
|
+
Open <ArrowRight aria-hidden="true" className="size-4" />
|
|
79
|
+
</span>
|
|
80
|
+
</RouterLink>
|
|
81
|
+
</Panel>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Keyboard
|
|
85
|
+
|
|
86
|
+
| Keys | Result |
|
|
87
|
+
|---|---|
|
|
88
|
+
| `Tab` | With interactive and asChild on a link or button: moves focus to the panel and shows the focus ring. |
|
|
89
|
+
| `Enter` | Follows the link, or presses the button, that the panel was rendered as. |
|
|
90
|
+
|
|
91
|
+
## Do
|
|
92
|
+
|
|
93
|
+
- Use signal on at most one panel in a group: the one that leads.
|
|
94
|
+
- Give a clickable panel interactive and asChild, with a real link or button as the child.
|
|
95
|
+
- Leave 8px around a panel with the crosshair, so a parent that clips does not cut the marks off.
|
|
96
|
+
|
|
97
|
+
## Don't
|
|
98
|
+
|
|
99
|
+
- Don’t put a button near the bottom-right corner of a cut panel; the cut can clip it.
|
|
100
|
+
- Don’t set a fill or border colour with a class. Choose a tone.
|
|
101
|
+
- Don’t put a second link or button inside an interactive panel.
|
|
102
|
+
|
|
103
|
+
## Common mistakes
|
|
104
|
+
|
|
105
|
+
Wrong:
|
|
106
|
+
|
|
107
|
+
```tsx
|
|
108
|
+
<Panel className="bg-[var(--color-surface-base)] border-[var(--color-border-selection)]">
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Right:
|
|
112
|
+
|
|
113
|
+
```tsx
|
|
114
|
+
<Panel tone="base">
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
The panel's fill and border come from its tone, through CSS that sits outside Tailwind's layers, so a bg- or border- class never wins. Pick the tone.
|
|
118
|
+
|
|
119
|
+
Wrong:
|
|
120
|
+
|
|
121
|
+
```tsx
|
|
122
|
+
<Panel interactive onClick={open}>Replicas</Panel>
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Right:
|
|
126
|
+
|
|
127
|
+
```tsx
|
|
128
|
+
<Panel interactive asChild><Link to="/replicas">Replicas</Link></Panel>
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
A div with a click handler cannot be reached by keyboard and is not announced as a link. interactive styles a panel that already is a link or a button; asChild makes it one.
|
|
132
|
+
|
|
133
|
+
## Anatomy
|
|
134
|
+
|
|
135
|
+
- **Frame**: A div (or, with asChild, your element) with the .panel class: a one-pixel border and a fill, both set by the tone.
|
|
136
|
+
- **Tone**: base: surface.base fill, border.hairline border. raised: surface.raised fill, border.hairline border. signal: accent.signal.wash fill, border.selection border. All tokens, so each one is right in both themes.
|
|
137
|
+
- **Crosshair**: Optional. Short marks drawn 5px outside each corner, in text.muted. The parent must not clip its overflow.
|
|
138
|
+
- **Cut corner**: Optional. The bottom-right corner cut at 45 degrees (14px), with the border drawn along the cut, so the outline does not break at that corner. With the crosshair on, the bottom-right marks fall inside the cut and are not drawn.
|
|
139
|
+
- **Interactive state**: Optional. On hover and on keyboard focus the border, diagonal included, turns accent.signal.indicator; keyboard focus also draws the focus ring 2px outside. Nothing moves.
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
import { ProductCard, ProductGrid } from 'src/components/organisms/product-card/ProductCard'
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file.
|
|
17
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
18
18
|
|
|
19
19
|
## Props
|
|
20
20
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import { Progress } from 'src/components/atoms/progress/Progress'
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file.
|
|
16
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
17
17
|
|
|
18
18
|
## Props
|
|
19
19
|
|
|
@@ -23,7 +23,7 @@ Paths are from the Division DS repository root. Installed with shadcn they start
|
|
|
23
23
|
| `value` | `number \| null` | | null means indeterminate. The value is clamped to [0, max], so an out-of-range value shows as complete instead of overflowing the track. |
|
|
24
24
|
| `max` | `number` | `100` | The value at which the bar is complete. |
|
|
25
25
|
| `showValue` | `boolean` | `false` | Shows the percentage (or "In progress") as a readout. |
|
|
26
|
-
| `tone` | `'signal' \| 'ok' \| 'warning' \| 'hostile'` | `'signal'` | The fill colour. signal paints accent.signal.indicator to match Slider. On the track in light theme that’s a 2.
|
|
26
|
+
| `tone` | `'signal' \| 'ok' \| 'warning' \| 'hostile'` | `'signal'` | The fill colour. signal paints accent.signal.indicator to match Slider. On the track in light theme that’s a 2.80:1 contrast ratio, below the 3:1 a bar needs when it’s the only sign of progress. So set showValue there. |
|
|
27
27
|
| `className` | `string` | | Merged with the outer wrapper’s classes. Later Tailwind utilities (Tailwind is the CSS framework the system is styled with) win. |
|
|
28
28
|
| `ref` | `Ref<HTMLDivElement>` | | Passed through to the Radix Progress root, which is the bar itself. Radix is the library of accessible building blocks this component sits on. |
|
|
29
29
|
| `...rest` | `Omit<HTMLAttributes<HTMLDivElement>, 'children'>` | | Every native div prop except children, spread onto the outer wrapper, so a molecule can attach a data-testid there. children is typed away because this component draws its own label row and track, and a children prop would be thrown away without any warning. |
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import { PromptInput } from 'src/components/molecules/prompt-input/PromptInput'
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file.
|
|
16
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
17
17
|
|
|
18
18
|
## Requires
|
|
19
19
|
|
|
@@ -13,13 +13,13 @@
|
|
|
13
13
|
import { QuantityStepper, clampQuantity, gridMax } from 'src/components/molecules/quantity-stepper/QuantityStepper'
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file.
|
|
16
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
17
17
|
|
|
18
18
|
## Props
|
|
19
19
|
|
|
20
20
|
| Prop | Type | Default | Description |
|
|
21
21
|
|---|---|---|---|
|
|
22
|
-
| `label` | `string` | |
|
|
22
|
+
| `label` | `string` | | Names the field and both buttons ("Decrease Speed loader quantity"). Leave it out inside a FormField, which sets it from its own label. Outside one it is required, and `division-ds check` flags a missing one. |
|
|
23
23
|
| `value` | `number` | | Controlled value (your page holds it). |
|
|
24
24
|
| `defaultValue` | `number` | `min` | Starting value when the component holds the value itself (uncontrolled). |
|
|
25
25
|
| `onValueChange` | `(value: number) => void` | | Fires with the final value, pulled inside the limits: after a button click, an arrow key, Home/End, or when typing is finished by leaving the field or pressing Enter. |
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import { Radio, RadioGroup } from 'src/components/atoms/radio/Radio'
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file.
|
|
16
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
17
17
|
|
|
18
18
|
## Props
|
|
19
19
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import { Rating, RatingInput } from 'src/components/molecules/rating/Rating'
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file.
|
|
16
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
17
17
|
|
|
18
18
|
## Props
|
|
19
19
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import { ScoreRing, scoreBand } from 'src/components/atoms/score-ring/ScoreRing'
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file.
|
|
16
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
17
17
|
|
|
18
18
|
## Props
|
|
19
19
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import { Search } from 'src/components/molecules/search/Search'
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file.
|
|
16
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
17
17
|
|
|
18
18
|
## Props
|
|
19
19
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import { SectionHeading } from 'src/components/molecules/section-heading/SectionHeading'
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file.
|
|
16
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
17
17
|
|
|
18
18
|
## Props
|
|
19
19
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import { SegmentedControl } from 'src/components/molecules/segmented-control/SegmentedControl'
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file.
|
|
16
|
+
Paths are from the Division DS repository root. Installed with shadcn they start `src/division-ds/` instead of `src/` (`src/division-ds/components/...`); import them relative to your file. An install has no index barrels: import each component from its own file, never from `components/molecules`.
|
|
17
17
|
|
|
18
18
|
## Props
|
|
19
19
|
|