@syscore/ui-library 1.27.3 → 2.0.0-beta-publish-workflow-beta.2

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.
Files changed (169) hide show
  1. package/client/App.tsx +0 -2
  2. package/client/assets/alert/icon-clear.svg +4 -0
  3. package/client/assets/alert/icon-done.svg +3 -0
  4. package/client/assets/avatar-identity/photo.png +0 -0
  5. package/client/assets/avatar-identity/placeholder-icon.svg +8 -0
  6. package/client/assets/breadcrumb/icon-ellipsis.svg +5 -0
  7. package/client/assets/breadcrumb/icon-home.svg +3 -0
  8. package/client/assets/breadcrumb/icon-separator.svg +3 -0
  9. package/client/assets/button-v01/icon-back.svg +4 -0
  10. package/client/assets/button-v01/icon-check.svg +3 -0
  11. package/client/assets/button-v01/icon-close.svg +4 -0
  12. package/client/assets/button-v01/icon-delete.svg +3 -0
  13. package/client/assets/button-v01/icon-device.svg +3 -0
  14. package/client/assets/dropdown/icon-carrot-contract.svg +3 -0
  15. package/client/assets/dropdown/icon-carrot-expand.svg +3 -0
  16. package/client/assets/dropdown/icon-clear.svg +4 -0
  17. package/client/assets/dropdown/icon-enter.svg +3 -0
  18. package/client/components/icons/UtilityChangeType.tsx +21 -0
  19. package/client/components/ui/alert-dialog-panel.tsx +246 -0
  20. package/client/components/ui/alert-v02.tsx +214 -0
  21. package/client/components/ui/app-bar.tsx +299 -0
  22. package/client/components/ui/avatar-identity.tsx +122 -0
  23. package/client/components/ui/banner.tsx +108 -0
  24. package/client/components/ui/bottom-navigation.tsx +223 -0
  25. package/client/components/ui/breadcrumb-trail.tsx +170 -0
  26. package/client/components/ui/button-v01.tsx +238 -0
  27. package/client/components/ui/button.tsx +2 -0
  28. package/client/components/ui/card.tsx +108 -26
  29. package/client/components/ui/code-badge.tsx +62 -0
  30. package/client/components/ui/date-picker.tsx +188 -0
  31. package/client/components/ui/dropdown.tsx +448 -0
  32. package/client/components/ui/empty-state.tsx +197 -0
  33. package/client/components/ui/file-upload.tsx +214 -0
  34. package/client/components/ui/footer.tsx +179 -0
  35. package/client/components/ui/layout.tsx +1182 -0
  36. package/client/components/ui/pagination-v01.tsx +157 -0
  37. package/client/components/ui/password-field-v01.tsx +67 -0
  38. package/client/components/ui/search-field-v01.tsx +192 -0
  39. package/client/components/ui/section-heading.tsx +49 -0
  40. package/client/components/ui/sidebar.tsx +2 -3
  41. package/client/components/ui/standard-navigation.tsx +8 -2
  42. package/client/components/ui/stepper.tsx +148 -0
  43. package/client/components/ui/switch-v01.tsx +71 -0
  44. package/client/components/ui/system-bar.tsx +119 -0
  45. package/client/components/ui/table-v01.tsx +230 -0
  46. package/client/components/ui/tabs-v01.tsx +99 -0
  47. package/client/components/ui/tag-v02.tsx +113 -0
  48. package/client/components/ui/text-area-v01.tsx +33 -0
  49. package/client/components/ui/text-field-v01.tsx +108 -0
  50. package/client/components/ui/timeline.tsx +181 -0
  51. package/client/components/ui/toast-v01.tsx +206 -0
  52. package/client/components/ui/tooltip.tsx +264 -71
  53. package/client/global.css +9565 -4378
  54. package/client/storybook.css +125 -0
  55. package/client/ui/Accordion.stories.tsx +1 -1
  56. package/client/ui/AlertDialogPanel/AlertDialogPanel.stories.tsx +150 -0
  57. package/client/ui/AlertV02/AlertV02.stories.tsx +188 -0
  58. package/client/ui/AppBar/app-bar.stories.tsx +280 -0
  59. package/client/ui/AspectRatio.stories.tsx +1 -1
  60. package/client/ui/AvatarIdentity/AvatarIdentity.stories.tsx +77 -0
  61. package/client/ui/Banner/banner.stories.tsx +238 -0
  62. package/client/ui/BottomNavigation/bottom-navigation.stories.tsx +285 -0
  63. package/client/ui/BreadcrumbTrail/BreadcrumbTrail.stories.tsx +232 -0
  64. package/client/ui/Button.stories.tsx +1 -1
  65. package/client/ui/ButtonV01/ButtonV01.stories.tsx +417 -0
  66. package/client/ui/Calendar/Calendar.stories.tsx +1 -1
  67. package/client/ui/Card.stories.tsx +285 -168
  68. package/client/ui/Carousel/Carousel.stories.tsx +1 -1
  69. package/client/ui/Chart/Chart.stories.tsx +1 -1
  70. package/client/ui/Checkbox.stories.tsx +1 -1
  71. package/client/ui/Collapsible/Collapsible.stories.tsx +1 -1
  72. package/client/ui/Colors.stories.tsx +1 -1
  73. package/client/ui/Command/Command.stories.tsx +1 -1
  74. package/client/ui/ContextMenu/ContextMenu.stories.tsx +1 -1
  75. package/client/ui/DatePicker/DatePicker.stories.tsx +293 -0
  76. package/client/ui/Dialog.stories.tsx +1 -1
  77. package/client/ui/Drawer/Drawer.stories.tsx +1 -1
  78. package/client/ui/Dropdown/Dropdown.stories.tsx +205 -0
  79. package/client/ui/EmptyState/empty-state.stories.tsx +251 -0
  80. package/client/ui/FileUpload/FileUpload.stories.tsx +218 -0
  81. package/client/ui/Footer/footer.stories.tsx +194 -0
  82. package/client/ui/Form/Form.stories.tsx +1 -1
  83. package/client/ui/Hero.stories.tsx +1 -1
  84. package/client/ui/HoverCard/HoverCard.stories.tsx +1 -1
  85. package/client/ui/Icons.stories.tsx +1 -1
  86. package/client/ui/Input.stories.tsx +1 -1
  87. package/client/ui/InputOTP/InputOTP.stories.tsx +1 -1
  88. package/client/ui/Label.stories.tsx +1 -1
  89. package/client/ui/Layout/Center.stories.tsx +100 -0
  90. package/client/ui/Layout/Columns.stories.tsx +136 -0
  91. package/client/ui/Layout/Container.stories.tsx +104 -0
  92. package/client/ui/Layout/FormLayout.stories.tsx +144 -0
  93. package/client/ui/Layout/Grid.stories.tsx +158 -0
  94. package/client/ui/Layout/GridSpan.stories.tsx +75 -0
  95. package/client/ui/Layout/HStack.stories.tsx +128 -0
  96. package/client/ui/Layout/Layout.stories.tsx +287 -0
  97. package/client/ui/Layout/LayoutContent.stories.tsx +91 -0
  98. package/client/ui/Layout/LayoutFooter.stories.tsx +77 -0
  99. package/client/ui/Layout/LayoutHeader.stories.tsx +104 -0
  100. package/client/ui/Layout/LayoutPanel.stories.tsx +143 -0
  101. package/client/ui/Layout/Positioned.stories.tsx +113 -0
  102. package/client/ui/Layout/Section.stories.tsx +84 -0
  103. package/client/ui/Layout/ShowHide.stories.tsx +99 -0
  104. package/client/ui/Layout/Spacer.stories.tsx +149 -0
  105. package/client/ui/Layout/Stack.stories.tsx +69 -0
  106. package/client/ui/Layout/StackItem.stories.tsx +124 -0
  107. package/client/ui/Layout/VStack.stories.tsx +101 -0
  108. package/client/ui/Layout/controls.ts +33 -0
  109. package/client/ui/Layout/demo.tsx +37 -0
  110. package/client/ui/Menubar/Menubar.stories.tsx +1 -1
  111. package/client/ui/MobileNav.stories.tsx +1 -1
  112. package/client/ui/Navigation.stories.tsx +1 -1
  113. package/client/ui/NavigationMenu/NavigationMenu.stories.tsx +1 -1
  114. package/client/ui/PageHeader.stories.tsx +13 -13
  115. package/client/ui/Pagination/Pagination.stories.tsx +178 -98
  116. package/client/ui/Pagination/PaginationLegacy.stories.tsx +121 -0
  117. package/client/ui/Panel.stories.tsx +1 -1
  118. package/client/ui/Popover/Popover.stories.tsx +1 -1
  119. package/client/ui/Progress/Progress.stories.tsx +1 -1
  120. package/client/ui/RadioGroup/RadioGroup.stories.tsx +1 -1
  121. package/client/ui/Resizable/Resizable.stories.tsx +1 -1
  122. package/client/ui/ScrollArea/ScrollArea.stories.tsx +1 -1
  123. package/client/ui/SearchField/SearchField.stories.tsx +153 -0
  124. package/client/ui/{SearchField.stories.tsx → SearchField/SearchFieldLegacy.stories.tsx} +2 -2
  125. package/client/ui/SectionBadge.stories.tsx +1 -1
  126. package/client/ui/Select.stories.tsx +1 -1
  127. package/client/ui/Separator/Separator.stories.tsx +1 -1
  128. package/client/ui/Sheet/Sheet.stories.tsx +1 -1
  129. package/client/ui/Sidebar/Sidebar.stories.tsx +57 -8
  130. package/client/ui/Skeleton/Skeleton.stories.tsx +1 -1
  131. package/client/ui/Slider/Slider.stories.tsx +1 -1
  132. package/client/ui/StandardNavigation.stories.tsx +1 -1
  133. package/client/ui/Stepper/Stepper.stories.tsx +344 -0
  134. package/client/ui/Switch.stories.tsx +1 -1
  135. package/client/ui/SwitchV01/SwitchV01.stories.tsx +152 -0
  136. package/client/ui/SystemBar/system-bar.stories.tsx +179 -0
  137. package/client/ui/Table/TableV01.stories.tsx +256 -0
  138. package/client/ui/Tabs.stories.tsx +1 -1
  139. package/client/ui/TabsV01/TabsV01.stories.tsx +144 -0
  140. package/client/ui/Tag.stories.tsx +1 -1
  141. package/client/ui/TagV02/TagStatusV02.stories.tsx +132 -0
  142. package/client/ui/TagV02/TagV02.stories.tsx +142 -0
  143. package/client/ui/TextAreaV01/TextAreaV01.stories.tsx +146 -0
  144. package/client/ui/TextFieldV01/PasswordFieldV01.stories.tsx +161 -0
  145. package/client/ui/TextFieldV01/TextFieldV01.stories.tsx +160 -0
  146. package/client/ui/Textarea.stories.tsx +1 -1
  147. package/client/ui/Timeline/timeline.stories.tsx +404 -0
  148. package/client/ui/Toast/Toast.stories.tsx +1 -1
  149. package/client/ui/ToastV01/ToastV01.stories.tsx +201 -0
  150. package/client/ui/Toaster/Toaster.stories.tsx +1 -1
  151. package/client/ui/Toggle.stories.tsx +1 -1
  152. package/client/ui/Tooltip.stories.tsx +287 -114
  153. package/client/ui/Typography.stories.tsx +1 -1
  154. package/dist/index.cjs.js +1 -1
  155. package/dist/index.d.ts +649 -13
  156. package/dist/index.es.js +4405 -653
  157. package/package.json +1 -1
  158. package/client/components/ui/badge.tsx +0 -33
  159. package/client/components/ui/sonner.tsx +0 -26
  160. package/client/components/ui/toggle-group.tsx +0 -76
  161. package/client/ui/Alert/Alert.stories.tsx +0 -82
  162. package/client/ui/AlertDialog/AlertDialog.stories.tsx +0 -106
  163. package/client/ui/Avatar/Avatar.stories.tsx +0 -94
  164. package/client/ui/Badge/Badge.stories.tsx +0 -60
  165. package/client/ui/Breadcrumb/Breadcrumb.stories.tsx +0 -97
  166. package/client/ui/DropdownMenu/DropdownMenu.stories.tsx +0 -139
  167. package/client/ui/Sonner/Sonner.stories.tsx +0 -48
  168. package/client/ui/Table/Table.stories.tsx +0 -135
  169. package/client/ui/ToggleGroup/ToggleGroup.stories.tsx +0 -88
@@ -0,0 +1,285 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import { useState } from "react";
3
+ import {
4
+ BottomNavigation,
5
+ BottomNavigationItem,
6
+ BottomNavigationGroup,
7
+ } from "../../components/ui/bottom-navigation";
8
+ import {
9
+ History,
10
+ Heart,
11
+ MapPin,
12
+ Tv,
13
+ Music,
14
+ BookOpen,
15
+ Image,
16
+ } from "lucide-react";
17
+
18
+ const meta = {
19
+ title: "Draft/BottomNavigation",
20
+ component: BottomNavigation,
21
+ tags: ["autodocs"],
22
+ parameters: {
23
+ layout: "fullscreen",
24
+ },
25
+ argTypes: {
26
+ grow: { control: "boolean" },
27
+ horizontal: { control: "boolean" },
28
+ shift: { control: "boolean" },
29
+ active: { control: "boolean" },
30
+ elevated: { control: "boolean" },
31
+ color: { control: "color" },
32
+ },
33
+ } satisfies Meta<typeof BottomNavigation>;
34
+
35
+ export default meta;
36
+
37
+ type Story = StoryObj<typeof meta>;
38
+
39
+ // ─── Wrapper helper — gives stories a realistic page height ──────────────────
40
+ function PageWrapper({ children }: { children: React.ReactNode }) {
41
+ return (
42
+ <div
43
+ style={{
44
+ position: "relative",
45
+ height: 200,
46
+ overflow: "hidden",
47
+ border: "1px solid #e5e7eb",
48
+ borderRadius: 8,
49
+ background: "#f9f9fa",
50
+ }}
51
+ >
52
+ {children}
53
+ </div>
54
+ );
55
+ }
56
+
57
+ // ─── Default ─────────────────────────────────────────────────────────────────
58
+
59
+ export const Default: Story = {
60
+ render: () => {
61
+ const [value, setValue] = useState(0);
62
+ return (
63
+ <PageWrapper>
64
+ <BottomNavigation value={value} onChange={(v) => setValue(Number(v))}>
65
+ <BottomNavigationGroup>
66
+ <BottomNavigationItem value={0}>
67
+ <History size={20} />
68
+ <span>Recent</span>
69
+ </BottomNavigationItem>
70
+ <BottomNavigationItem value={1}>
71
+ <Heart size={20} />
72
+ <span>Favorites</span>
73
+ </BottomNavigationItem>
74
+ <BottomNavigationItem value={2}>
75
+ <MapPin size={20} />
76
+ <span>Nearby</span>
77
+ </BottomNavigationItem>
78
+ </BottomNavigationGroup>
79
+ </BottomNavigation>
80
+ </PageWrapper>
81
+ );
82
+ },
83
+ };
84
+
85
+ // ─── Color ───────────────────────────────────────────────────────────────────
86
+ // The `color` prop applies the active highlight color to the selected item.
87
+
88
+ export const Color: Story = {
89
+ render: () => {
90
+ const [value, setValue] = useState(1);
91
+ return (
92
+ <PageWrapper>
93
+ <BottomNavigation
94
+ value={value}
95
+ onChange={(v) => setValue(Number(v))}
96
+ color="var(--color-cyan-800, #0f748a)"
97
+ >
98
+ <BottomNavigationGroup>
99
+ <BottomNavigationItem value={0}>
100
+ <History size={20} />
101
+ <span>Recents</span>
102
+ </BottomNavigationItem>
103
+ <BottomNavigationItem value={1}>
104
+ <Heart size={20} />
105
+ <span>Favorites</span>
106
+ </BottomNavigationItem>
107
+ <BottomNavigationItem value={2}>
108
+ <MapPin size={20} />
109
+ <span>Nearby</span>
110
+ </BottomNavigationItem>
111
+ </BottomNavigationGroup>
112
+ </BottomNavigation>
113
+ </PageWrapper>
114
+ );
115
+ },
116
+ };
117
+
118
+ // ─── Grow ─────────────────────────────────────────────────────────────────────
119
+ // Each item fills all available space (max 168px per MD spec).
120
+
121
+ export const Grow: Story = {
122
+ render: () => {
123
+ const [value, setValue] = useState(1);
124
+ return (
125
+ <PageWrapper>
126
+ <BottomNavigation
127
+ value={value}
128
+ onChange={(v) => setValue(Number(v))}
129
+ color="var(--color-cyan-800, #0f748a)"
130
+ grow
131
+ >
132
+ <BottomNavigationGroup>
133
+ <BottomNavigationItem value={0}>
134
+ <History size={20} />
135
+ <span>Recents</span>
136
+ </BottomNavigationItem>
137
+ <BottomNavigationItem value={1}>
138
+ <Heart size={20} />
139
+ <span>Favorites</span>
140
+ </BottomNavigationItem>
141
+ <BottomNavigationItem value={2}>
142
+ <MapPin size={20} />
143
+ <span>Nearby</span>
144
+ </BottomNavigationItem>
145
+ </BottomNavigationGroup>
146
+ </BottomNavigation>
147
+ </PageWrapper>
148
+ );
149
+ },
150
+ };
151
+
152
+ // ─── Horizontal ───────────────────────────────────────────────────────────────
153
+ // Icon and label sit side-by-side instead of stacked.
154
+
155
+ export const Horizontal: Story = {
156
+ render: () => {
157
+ const [value, setValue] = useState(1);
158
+ return (
159
+ <PageWrapper>
160
+ <BottomNavigation
161
+ value={value}
162
+ onChange={(v) => setValue(Number(v))}
163
+ color="var(--color-blue-600, #2e74ad)"
164
+ horizontal
165
+ >
166
+ <BottomNavigationGroup>
167
+ <BottomNavigationItem value={0}>
168
+ <History size={20} />
169
+ <span>Recents</span>
170
+ </BottomNavigationItem>
171
+ <BottomNavigationItem value={1}>
172
+ <Heart size={20} />
173
+ <span>Favorites</span>
174
+ </BottomNavigationItem>
175
+ <BottomNavigationItem value={2}>
176
+ <MapPin size={20} />
177
+ <span>Nearby</span>
178
+ </BottomNavigationItem>
179
+ </BottomNavigationGroup>
180
+ </BottomNavigation>
181
+ </PageWrapper>
182
+ );
183
+ },
184
+ };
185
+
186
+ // ─── Shift ────────────────────────────────────────────────────────────────────
187
+ // Only the active item shows its label; inactive items show icon only.
188
+ // The background color changes per active item using the color prop.
189
+
190
+ export const Shift: Story = {
191
+ render: () => {
192
+ const colors = ["#f97316", "#84cc16", "#0ea5e9", "#a855f7"];
193
+ const [value, setValue] = useState(1);
194
+ return (
195
+ <PageWrapper>
196
+ <BottomNavigation
197
+ value={value}
198
+ onChange={(v) => setValue(Number(v))}
199
+ color="#ffffff"
200
+ shift
201
+ style={{ backgroundColor: colors[value] }}
202
+ >
203
+ <BottomNavigationGroup>
204
+ <BottomNavigationItem value={0}>
205
+ <Tv size={20} />
206
+ <span>Video</span>
207
+ </BottomNavigationItem>
208
+ <BottomNavigationItem value={1}>
209
+ <Music size={20} />
210
+ <span>Music</span>
211
+ </BottomNavigationItem>
212
+ <BottomNavigationItem value={2}>
213
+ <BookOpen size={20} />
214
+ <span>Book</span>
215
+ </BottomNavigationItem>
216
+ <BottomNavigationItem value={3}>
217
+ <Image size={20} />
218
+ <span>Image</span>
219
+ </BottomNavigationItem>
220
+ </BottomNavigationGroup>
221
+ </BottomNavigation>
222
+ </PageWrapper>
223
+ );
224
+ },
225
+ };
226
+
227
+ // ─── Toggle ───────────────────────────────────────────────────────────────────
228
+ // The `active` prop controls whether the nav bar is visible.
229
+ // When false the bar slides off-screen.
230
+
231
+ export const Toggle: Story = {
232
+ render: () => {
233
+ const [value, setValue] = useState(0);
234
+ const [visible, setVisible] = useState(true);
235
+ return (
236
+ <PageWrapper>
237
+ <div
238
+ style={{
239
+ display: "flex",
240
+ justifyContent: "center",
241
+ paddingTop: "2rem",
242
+ }}
243
+ >
244
+ <button
245
+ type="button"
246
+ onClick={() => setVisible((v) => !v)}
247
+ style={{
248
+ padding: "0.5rem 1.25rem",
249
+ border: "1px solid var(--color-blue-600, #2e74ad)",
250
+ borderRadius: 9999,
251
+ color: "var(--color-blue-600, #2e74ad)",
252
+ background: "transparent",
253
+ cursor: "pointer",
254
+ fontWeight: 600,
255
+ fontSize: "0.875rem",
256
+ }}
257
+ >
258
+ Toggle Navigation
259
+ </button>
260
+ </div>
261
+ <BottomNavigation
262
+ value={value}
263
+ onChange={(v) => setValue(Number(v))}
264
+ color="var(--color-blue-600, #2e74ad)"
265
+ active={visible}
266
+ >
267
+ <BottomNavigationGroup>
268
+ <BottomNavigationItem value={0}>
269
+ <History size={20} />
270
+ <span>Recents</span>
271
+ </BottomNavigationItem>
272
+ <BottomNavigationItem value={1}>
273
+ <Heart size={20} />
274
+ <span>Favorites</span>
275
+ </BottomNavigationItem>
276
+ <BottomNavigationItem value={2}>
277
+ <MapPin size={20} />
278
+ <span>Nearby</span>
279
+ </BottomNavigationItem>
280
+ </BottomNavigationGroup>
281
+ </BottomNavigation>
282
+ </PageWrapper>
283
+ );
284
+ },
285
+ };
@@ -0,0 +1,232 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import {
3
+ BreadcrumbTrail,
4
+ BreadcrumbTrailCode,
5
+ BreadcrumbTrailEllipsis,
6
+ BreadcrumbTrailHome,
7
+ BreadcrumbTrailItem,
8
+ BreadcrumbTrailLink,
9
+ BreadcrumbTrailList,
10
+ BreadcrumbTrailPage,
11
+ BreadcrumbTrailSeparator,
12
+ } from "../../components/ui/breadcrumb-trail";
13
+ import { IconConceptCommunity } from "../../components/icons/ConceptIcons";
14
+
15
+ const meta = {
16
+ title: "Components/Breadcrumb",
17
+ component: BreadcrumbTrail,
18
+ tags: ["autodocs"],
19
+ parameters: {
20
+ layout: "centered",
21
+ docs: {
22
+ description: {
23
+ component: [
24
+ "Navigation trail. Existing `UI/Breadcrumb` is unchanged.",
25
+ "",
26
+ "Three variants: **Standard** (concept + theme/strategy codes),",
27
+ "**Directory** (home + current page), and **Account** (home + text path,",
28
+ "with an ellipsis collapse for deep trees).",
29
+ "",
30
+ "---",
31
+ "",
32
+ "## Import",
33
+ "",
34
+ "```tsx",
35
+ `import {`,
36
+ ` BreadcrumbTrail, BreadcrumbTrailList, BreadcrumbTrailItem,`,
37
+ ` BreadcrumbTrailLink, BreadcrumbTrailPage, BreadcrumbTrailSeparator,`,
38
+ ` BreadcrumbTrailHome, BreadcrumbTrailEllipsis, BreadcrumbTrailCode,`,
39
+ `} from "@syscore/ui-library"`,
40
+ "```",
41
+ "",
42
+ "## How to use",
43
+ "",
44
+ "Compose the trail like HTML: list → items → link or current page, with a separator",
45
+ "between items. The last crumb is `BreadcrumbTrailPage` (not a link).",
46
+ "",
47
+ "```tsx",
48
+ "<BreadcrumbTrail>",
49
+ " <BreadcrumbTrailList>",
50
+ " <BreadcrumbTrailItem>",
51
+ ` <BreadcrumbTrailLink href="/" aria-label="Home">`,
52
+ " <BreadcrumbTrailHome />",
53
+ " </BreadcrumbTrailLink>",
54
+ " </BreadcrumbTrailItem>",
55
+ " <BreadcrumbTrailSeparator />",
56
+ " <BreadcrumbTrailItem>",
57
+ ` <BreadcrumbTrailLink href="/projects">Projects</BreadcrumbTrailLink>`,
58
+ " </BreadcrumbTrailItem>",
59
+ " <BreadcrumbTrailSeparator />",
60
+ " <BreadcrumbTrailItem>",
61
+ " <BreadcrumbTrailPage>Overview</BreadcrumbTrailPage>",
62
+ " </BreadcrumbTrailItem>",
63
+ " </BreadcrumbTrailList>",
64
+ "</BreadcrumbTrail>",
65
+ "```",
66
+ "",
67
+ "| Situation | Use |",
68
+ "|-----------|-----|",
69
+ "| Home glyph | `BreadcrumbTrailHome` |",
70
+ "| Collapsed middle of a long path | `BreadcrumbTrailEllipsis` |",
71
+ "| Theme code badge | `BreadcrumbTrailCode variant=\"theme\"` |",
72
+ "| Strategy code badge | `BreadcrumbTrailCode variant=\"strategy\"` |",
73
+ "| Concept mark | `IconConceptCommunity` inside a link |",
74
+ "",
75
+ "Do not use the older `Breadcrumb` from `UI/Breadcrumb` —",
76
+ "that compound is the previous shadcn trail.",
77
+ ].join("\n"),
78
+ },
79
+ },
80
+ },
81
+ } satisfies Meta<typeof BreadcrumbTrail>;
82
+
83
+ export default meta;
84
+ type Story = StoryObj<typeof meta>;
85
+
86
+ export const Standard: Story = {
87
+ name: "Standard · Icon only",
88
+ render: () => (
89
+ <BreadcrumbTrail>
90
+ <BreadcrumbTrailList>
91
+ <BreadcrumbTrailItem>
92
+ <BreadcrumbTrailLink href="/" aria-label="Community">
93
+ <IconConceptCommunity active />
94
+ </BreadcrumbTrailLink>
95
+ </BreadcrumbTrailItem>
96
+ <BreadcrumbTrailSeparator />
97
+ <BreadcrumbTrailItem>
98
+ <BreadcrumbTrailLink href="/theme">
99
+ <BreadcrumbTrailCode variant="theme">C#</BreadcrumbTrailCode>
100
+ </BreadcrumbTrailLink>
101
+ </BreadcrumbTrailItem>
102
+ <BreadcrumbTrailSeparator />
103
+ <BreadcrumbTrailItem>
104
+ <BreadcrumbTrailCode variant="strategy">C#.#</BreadcrumbTrailCode>
105
+ </BreadcrumbTrailItem>
106
+ </BreadcrumbTrailList>
107
+ </BreadcrumbTrail>
108
+ ),
109
+ };
110
+
111
+ export const Directory: Story = {
112
+ name: "Directory · Icon + Text",
113
+ render: () => (
114
+ <BreadcrumbTrail>
115
+ <BreadcrumbTrailList>
116
+ <BreadcrumbTrailItem>
117
+ <BreadcrumbTrailLink href="/" aria-label="Home">
118
+ <BreadcrumbTrailHome />
119
+ </BreadcrumbTrailLink>
120
+ </BreadcrumbTrailItem>
121
+ <BreadcrumbTrailSeparator />
122
+ <BreadcrumbTrailItem>
123
+ <BreadcrumbTrailPage>Item</BreadcrumbTrailPage>
124
+ </BreadcrumbTrailItem>
125
+ </BreadcrumbTrailList>
126
+ </BreadcrumbTrail>
127
+ ),
128
+ };
129
+
130
+ export const Account: Story = {
131
+ name: "Account · Icon + Text",
132
+ render: () => (
133
+ <BreadcrumbTrail>
134
+ <BreadcrumbTrailList>
135
+ <BreadcrumbTrailItem>
136
+ <BreadcrumbTrailLink href="/" aria-label="Home">
137
+ <BreadcrumbTrailHome />
138
+ </BreadcrumbTrailLink>
139
+ </BreadcrumbTrailItem>
140
+ <BreadcrumbTrailSeparator />
141
+ <BreadcrumbTrailItem>
142
+ <BreadcrumbTrailLink href="/item-1">Item 1</BreadcrumbTrailLink>
143
+ </BreadcrumbTrailItem>
144
+ <BreadcrumbTrailSeparator />
145
+ <BreadcrumbTrailItem>
146
+ <BreadcrumbTrailLink href="/item-2">Item 2</BreadcrumbTrailLink>
147
+ </BreadcrumbTrailItem>
148
+ <BreadcrumbTrailSeparator />
149
+ <BreadcrumbTrailItem>
150
+ <BreadcrumbTrailPage>Item 3</BreadcrumbTrailPage>
151
+ </BreadcrumbTrailItem>
152
+ </BreadcrumbTrailList>
153
+ </BreadcrumbTrail>
154
+ ),
155
+ };
156
+
157
+ export const AccountCollapsed: Story = {
158
+ name: "Account · Icon + Text + Ellipsis",
159
+ render: () => (
160
+ <BreadcrumbTrail>
161
+ <BreadcrumbTrailList>
162
+ <BreadcrumbTrailItem>
163
+ <BreadcrumbTrailLink href="/" aria-label="Home">
164
+ <BreadcrumbTrailHome />
165
+ </BreadcrumbTrailLink>
166
+ </BreadcrumbTrailItem>
167
+ <BreadcrumbTrailSeparator />
168
+ <BreadcrumbTrailItem>
169
+ <BreadcrumbTrailEllipsis />
170
+ </BreadcrumbTrailItem>
171
+ <BreadcrumbTrailSeparator />
172
+ <BreadcrumbTrailItem>
173
+ <BreadcrumbTrailLink href="/item-a">Item 1</BreadcrumbTrailLink>
174
+ </BreadcrumbTrailItem>
175
+ <BreadcrumbTrailSeparator />
176
+ <BreadcrumbTrailItem>
177
+ <BreadcrumbTrailLink href="/item-b">Item 1</BreadcrumbTrailLink>
178
+ </BreadcrumbTrailItem>
179
+ <BreadcrumbTrailSeparator />
180
+ <BreadcrumbTrailItem>
181
+ <BreadcrumbTrailPage>Item 1</BreadcrumbTrailPage>
182
+ </BreadcrumbTrailItem>
183
+ </BreadcrumbTrailList>
184
+ </BreadcrumbTrail>
185
+ ),
186
+ };
187
+
188
+ const CONCEPTS = [
189
+ ["mind", "M"],
190
+ ["community", "C"],
191
+ ["movement", "V"],
192
+ ["water", "W"],
193
+ ["air", "A"],
194
+ ["light", "L"],
195
+ ["thermal-comfort", "T"],
196
+ ["nourishment", "N"],
197
+ ["sound", "S"],
198
+ ["materials", "X"],
199
+ ["inactive", "X"],
200
+ ] as const;
201
+
202
+ export const CodePalette: Story = {
203
+ name: "Code badges · All concepts",
204
+ render: () => (
205
+ <div style={{ display: "grid", gap: 24 }}>
206
+ <div>
207
+ <p style={{ marginBottom: 8, fontSize: 12, opacity: 0.6 }}>Theme</p>
208
+ <div style={{ display: "flex", flexWrap: "wrap", gap: 24 }}>
209
+ {CONCEPTS.map(([concept, prefix]) => (
210
+ <BreadcrumbTrailCode key={concept} variant="theme" concept={concept}>
211
+ {prefix}#
212
+ </BreadcrumbTrailCode>
213
+ ))}
214
+ </div>
215
+ </div>
216
+ <div>
217
+ <p style={{ marginBottom: 8, fontSize: 12, opacity: 0.6 }}>Strategy</p>
218
+ <div style={{ display: "flex", flexWrap: "wrap", gap: 24 }}>
219
+ {CONCEPTS.map(([concept, prefix]) => (
220
+ <BreadcrumbTrailCode
221
+ key={concept}
222
+ variant="strategy"
223
+ concept={concept}
224
+ >
225
+ {prefix}#.#
226
+ </BreadcrumbTrailCode>
227
+ ))}
228
+ </div>
229
+ </div>
230
+ </div>
231
+ ),
232
+ };
@@ -6,7 +6,7 @@ import { UtilityChevronDown } from "../components/icons/UtilityChevronDown";
6
6
  import { NavAccount } from "../components/icons/NavAccount";
7
7
 
8
8
  const meta = {
9
- title: "Review/Button",
9
+ title: "Draft/Button Legacy",
10
10
  component: Button,
11
11
  tags: ["autodocs"],
12
12
  parameters: {