@assure-one/design-system 1.37.0 → 1.39.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/README.md +60 -16
- package/codemods/README.md +90 -16
- package/codemods/lib/entry-map.mjs +315 -0
- package/codemods/lib/registry.mjs +2 -0
- package/codemods/transforms/cm-01-entry-imports.mjs +202 -0
- package/codemods/transforms/cm-18-data-table-parts.mjs +234 -0
- package/dist/brand-theme-B6rem2II.d.ts +59 -0
- package/dist/css/components.css +1 -1
- package/dist/css/legacy-aliases.css +8 -0
- package/dist/css/tokens.css +14 -6
- package/dist/design-system-provider-BM_F1C13.d.ts +143 -0
- package/dist/icons/index.d.ts +441 -3
- package/dist/icons/index.js.map +1 -1
- package/dist/index-BAAuIQqP.d.ts +2579 -0
- package/dist/index-DxBjmBBp.d.ts +1038 -0
- package/dist/index.d.ts +1017 -3293
- package/dist/index.js +7598 -5906
- package/dist/index.js.map +1 -1
- package/dist/legacy/index.d.ts +9 -0
- package/dist/legacy/index.js +3 -0
- package/dist/legacy/index.js.map +1 -0
- package/dist/next/index.d.ts +2 -1
- package/dist/reference-BkDbrPIB.d.ts +310 -0
- package/dist/styles.css +1 -1
- package/dist/suite/index.d.ts +4 -0
- package/dist/suite/index.js +3 -0
- package/dist/suite/index.js.map +1 -0
- package/dist/{system-CyAVbHhM.d.ts → system-DfJIVBlJ.d.ts} +1 -310
- package/dist/tokens/index.d.ts +3 -61
- package/dist/tokens/index.js +3 -3
- package/dist/tokens/index.js.map +1 -1
- package/dist/{design-system-provider-C8UlFe52.d.ts → types-k_kjwipx.d.ts} +69 -142
- package/dist/vocab-DornLJbW.d.ts +76 -0
- package/docs/components.md +62 -32
- package/docs/components.registry.json +2415 -465
- package/docs/for-ai-agents.md +2 -0
- package/eslint-config/index.mjs +210 -0
- package/eslint-config/stylelint-rules.mjs +54 -0
- package/eslint-config/stylelint.mjs +73 -0
- package/package.json +21 -3
- package/public/brand/assure-audit-mark.svg +6 -0
- package/public/brand/assure-audit.svg +8 -0
- package/public/brand/assure-books-mark.svg +6 -0
- package/public/brand/assure-books.svg +8 -0
- package/public/brand/assure-pro-mark.svg +6 -0
- package/public/brand/assure-pro.svg +8 -0
- package/public/brand/assure-tax-mark.svg +6 -0
- package/public/brand/assure-tax.svg +8 -0
- package/public/brand/mycpe-teams-mark.svg +36 -0
- package/public/brand/mycpe-teams.svg +66 -0
- package/dist/index-vztxMSfl.d.ts +0 -512
|
@@ -15,74 +15,455 @@
|
|
|
15
15
|
"hooks/utilities": "Non-rendering exports: hooks, class-name helpers, formatters and token objects."
|
|
16
16
|
},
|
|
17
17
|
"needs": [
|
|
18
|
-
{
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
{
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
{
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
{
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
{
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
{
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
{
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
{
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
18
|
+
{
|
|
19
|
+
"need": "Trigger an action",
|
|
20
|
+
"use": [
|
|
21
|
+
"Button",
|
|
22
|
+
"IconButton"
|
|
23
|
+
],
|
|
24
|
+
"notes": "`IconButton` when the control is only an icon (it requires an accessible name and shows a tooltip). Same `variant` × `intent` × `size` axes."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"need": "Navigate somewhere with a button look",
|
|
28
|
+
"use": [
|
|
29
|
+
"LinkButton"
|
|
30
|
+
],
|
|
31
|
+
"notes": "Renders an `<a href>`; `Button asChild` around your router's `Link` is the alternative."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"need": "Submit a form",
|
|
35
|
+
"use": [
|
|
36
|
+
"SubmitButton"
|
|
37
|
+
],
|
|
38
|
+
"notes": "Full-width by default; `type=\"submit\"` and pending state handled."
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"need": "Make something that is not a button clickable",
|
|
42
|
+
"use": [
|
|
43
|
+
"Pressable"
|
|
44
|
+
],
|
|
45
|
+
"notes": "Keyboard, focus ring, disabled handling, no button chrome. Never `<div onClick>`."
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"need": "Confirm a destructive action",
|
|
49
|
+
"use": [
|
|
50
|
+
"ConfirmActionButton",
|
|
51
|
+
"ConfirmDialog",
|
|
52
|
+
"ConfirmHost"
|
|
53
|
+
],
|
|
54
|
+
"notes": "`ConfirmActionButton` wraps the dialog around any trigger; `ConfirmDialog` when you control `open` or need a form field in the body; `useConfirm()` / `usePrompt()` to `await` an answer from an event handler (needs `DesignSystemProvider confirm` or a `ConfirmHost`)."
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"need": "Act on selected rows",
|
|
58
|
+
"use": [
|
|
59
|
+
"BulkActionBar"
|
|
60
|
+
],
|
|
61
|
+
"notes": "Floating bar with the count and the row actions."
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"need": "Keep Save / Cancel visible at the bottom of a long form",
|
|
65
|
+
"use": [
|
|
66
|
+
"StickyActionBar"
|
|
67
|
+
]
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"need": "Label + help + error around any control",
|
|
71
|
+
"use": [
|
|
72
|
+
"Field"
|
|
73
|
+
],
|
|
74
|
+
"notes": "`Label`, `FieldDescription`, `FieldError` inside; controls bind automatically. `Fieldset` groups several. `FieldControl` wires a non-DS control."
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"need": "Free text, one line",
|
|
78
|
+
"use": [
|
|
79
|
+
"Input"
|
|
80
|
+
],
|
|
81
|
+
"notes": "`SearchInput` for search boxes, `NumberInput` for numbers, `PhoneField` for phone numbers, `OTPInput` for codes."
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"need": "A phone number",
|
|
85
|
+
"use": [
|
|
86
|
+
"PhoneField"
|
|
87
|
+
],
|
|
88
|
+
"notes": "Country picker + national number, E.164 value. `PhoneInput` and `PhoneCountryInput` are deprecated."
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"need": "Free text, several lines",
|
|
92
|
+
"use": [
|
|
93
|
+
"Textarea"
|
|
94
|
+
]
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"need": "A number with formatting or steppers",
|
|
98
|
+
"use": [
|
|
99
|
+
"NumberInput"
|
|
100
|
+
]
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"need": "A date, or a date range",
|
|
104
|
+
"use": [
|
|
105
|
+
"DatePicker",
|
|
106
|
+
"DateRangePicker"
|
|
107
|
+
],
|
|
108
|
+
"notes": "`Calendar` alone when the picker should be inline rather than in a popover."
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"need": "Upload files",
|
|
112
|
+
"use": [
|
|
113
|
+
"FileUpload"
|
|
114
|
+
],
|
|
115
|
+
"notes": "`DocumentRequestUpload` for the client-portal request flow."
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"need": "Yes / no",
|
|
119
|
+
"use": [
|
|
120
|
+
"Checkbox",
|
|
121
|
+
"Switch"
|
|
122
|
+
],
|
|
123
|
+
"notes": "`Switch` when the change applies immediately, `Checkbox` when it is submitted with the form or is one of several."
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"need": "One of a few visible options",
|
|
127
|
+
"use": [
|
|
128
|
+
"RadioGroup",
|
|
129
|
+
"ToggleGroup"
|
|
130
|
+
],
|
|
131
|
+
"notes": "`RadioGroup` in forms; `ToggleGroup` for view/mode switches with immediate effect."
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"need": "One of many options in a dropdown",
|
|
135
|
+
"use": [
|
|
136
|
+
"Select",
|
|
137
|
+
"Combobox"
|
|
138
|
+
],
|
|
139
|
+
"notes": "`Select` for short static lists; `Combobox` when the user should type to filter or the list is large or async."
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"need": "Several of many options",
|
|
143
|
+
"use": [
|
|
144
|
+
"MultiSelect",
|
|
145
|
+
"MultiSelectField"
|
|
146
|
+
],
|
|
147
|
+
"notes": "`MultiSelect` is the searchable dropdown; `MultiSelectField` a visible pill toggle row for a handful of options."
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"need": "Pick a client or a team member",
|
|
151
|
+
"use": [
|
|
152
|
+
"ClientSelect",
|
|
153
|
+
"TeamMemberSelect"
|
|
154
|
+
]
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"need": "Filter a list",
|
|
158
|
+
"use": [
|
|
159
|
+
"Toolbar",
|
|
160
|
+
"MultiFilterPill",
|
|
161
|
+
"DisplayMenu"
|
|
162
|
+
],
|
|
163
|
+
"notes": "`FilterChip` inside `Toolbar` for one-value filters, `MultiFilterPill` for multi-value, `DisplayMenu` for the Linear-style filter/group/sort/columns menu."
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"need": "Removable or toggleable tokens (tags, applied filters)",
|
|
167
|
+
"use": [
|
|
168
|
+
"Chip"
|
|
169
|
+
],
|
|
170
|
+
"notes": "`DismissibleChip` is the older single-purpose removable chip."
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"need": "A slider value",
|
|
174
|
+
"use": [
|
|
175
|
+
"Slider"
|
|
176
|
+
]
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"need": "Show a message inline (success, warning, error, info)",
|
|
180
|
+
"use": [
|
|
181
|
+
"Alert"
|
|
182
|
+
]
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"need": "Notify after an action",
|
|
186
|
+
"use": [
|
|
187
|
+
"ToastProvider"
|
|
188
|
+
],
|
|
189
|
+
"notes": "`useToast()` from inside the provider."
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"need": "Show loading",
|
|
193
|
+
"use": [
|
|
194
|
+
"Spinner",
|
|
195
|
+
"Skeleton",
|
|
196
|
+
"LoadingRows"
|
|
197
|
+
],
|
|
198
|
+
"notes": "`Spinner` inside a control or small area, `Skeleton` for a shape, `LoadingRows` for list/table rows."
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"need": "Show progress",
|
|
202
|
+
"use": [
|
|
203
|
+
"ProgressBar",
|
|
204
|
+
"ProgressRing",
|
|
205
|
+
"SegmentedProgress",
|
|
206
|
+
"Stepper"
|
|
207
|
+
],
|
|
208
|
+
"notes": "`Stepper` when the steps have names; `SuiteProgress` for the suite's segmented percent meter."
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"need": "Nothing to show yet",
|
|
212
|
+
"use": [
|
|
213
|
+
"EmptyState",
|
|
214
|
+
"ComingSoon"
|
|
215
|
+
]
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"need": "A modal task or message",
|
|
219
|
+
"use": [
|
|
220
|
+
"Dialog",
|
|
221
|
+
"ResponsiveDialog"
|
|
222
|
+
],
|
|
223
|
+
"notes": "`ResponsiveDialog` becomes a `Sheet` on small screens."
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"need": "A side panel",
|
|
227
|
+
"use": [
|
|
228
|
+
"Sheet",
|
|
229
|
+
"SideDrawer"
|
|
230
|
+
],
|
|
231
|
+
"notes": "`Sheet` is the Radix-based standard; `SideDrawer` is the older API kept for existing call sites."
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
"need": "A contextual menu of actions",
|
|
235
|
+
"use": [
|
|
236
|
+
"DropdownMenu",
|
|
237
|
+
"ContextMenu",
|
|
238
|
+
"NewMenu"
|
|
239
|
+
],
|
|
240
|
+
"notes": "`ContextMenu` on right-click; `NewMenu` is the ready-made \"+ New\" creation menu."
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
"need": "Extra content on hover or click",
|
|
244
|
+
"use": [
|
|
245
|
+
"Tooltip",
|
|
246
|
+
"Popover",
|
|
247
|
+
"HoverCard"
|
|
248
|
+
],
|
|
249
|
+
"notes": "`Tooltip` for a short label, `Popover` for interactive content, `HoverCard` for a rich preview on hover."
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
"need": "A global command / search box",
|
|
253
|
+
"use": [
|
|
254
|
+
"CommandPalette",
|
|
255
|
+
"KeyboardShortcutsDialog"
|
|
256
|
+
]
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
"need": "Switch between views",
|
|
260
|
+
"use": [
|
|
261
|
+
"Tabs",
|
|
262
|
+
"ChannelTabs",
|
|
263
|
+
"BottomNav"
|
|
264
|
+
],
|
|
265
|
+
"notes": "`BottomNav` is the mobile tab bar."
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
"need": "Where am I",
|
|
269
|
+
"use": [
|
|
270
|
+
"Breadcrumb",
|
|
271
|
+
"PageHeader",
|
|
272
|
+
"AppHeader"
|
|
273
|
+
]
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
"need": "Page through results",
|
|
277
|
+
"use": [
|
|
278
|
+
"Pagination"
|
|
279
|
+
],
|
|
280
|
+
"notes": "`DataTablePagination` is the same pager with the table's 25-row default; `pageSizeOptions` adds a rows-per-page picker."
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
"need": "A tree or a rail of items",
|
|
284
|
+
"use": [
|
|
285
|
+
"FolderTree",
|
|
286
|
+
"ClientRailItem"
|
|
287
|
+
]
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
"need": "Space things out",
|
|
291
|
+
"use": [
|
|
292
|
+
"Stack",
|
|
293
|
+
"Inline"
|
|
294
|
+
],
|
|
295
|
+
"notes": "Tokenised gap and alignment; never ad-hoc `flex gap-*` in product code."
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
"need": "A bordered box or card",
|
|
299
|
+
"use": [
|
|
300
|
+
"Surface",
|
|
301
|
+
"Card"
|
|
302
|
+
],
|
|
303
|
+
"notes": "`Card` adds header/title/description/footer parts and an interactive variant."
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
"need": "A divider",
|
|
307
|
+
"use": [
|
|
308
|
+
"Separator",
|
|
309
|
+
"CategoryDivider"
|
|
310
|
+
]
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
"need": "Collapse content",
|
|
314
|
+
"use": [
|
|
315
|
+
"Collapsible",
|
|
316
|
+
"Accordion"
|
|
317
|
+
]
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
"need": "Scroll a region",
|
|
321
|
+
"use": [
|
|
322
|
+
"ScrollArea"
|
|
323
|
+
]
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
"need": "Title a page or a section",
|
|
327
|
+
"use": [
|
|
328
|
+
"PageHeader",
|
|
329
|
+
"SectionHeader",
|
|
330
|
+
"Heading"
|
|
331
|
+
]
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
"need": "Body text, captions, code, keys",
|
|
335
|
+
"use": [
|
|
336
|
+
"Text",
|
|
337
|
+
"Code",
|
|
338
|
+
"Kbd",
|
|
339
|
+
"Blockquote"
|
|
340
|
+
]
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
"need": "A number with a caption",
|
|
344
|
+
"use": [
|
|
345
|
+
"Stat",
|
|
346
|
+
"KpiCard"
|
|
347
|
+
],
|
|
348
|
+
"notes": "`KpiCard` is the dashboard tile with tone and hint."
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
"need": "A table of records",
|
|
352
|
+
"use": [
|
|
353
|
+
"DataTableView",
|
|
354
|
+
"DataTable",
|
|
355
|
+
"Table"
|
|
356
|
+
],
|
|
357
|
+
"notes": "`DataTableView` is config-driven (columns + data, owns search/sort/pagination); `DataTable` the composable parts; `Table` the bare semantic table."
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
"need": "Label / value pairs",
|
|
361
|
+
"use": [
|
|
362
|
+
"MetadataGrid"
|
|
363
|
+
]
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
"need": "A status word or count",
|
|
367
|
+
"use": [
|
|
368
|
+
"StatusBadge",
|
|
369
|
+
"Badge",
|
|
370
|
+
"StatusPill",
|
|
371
|
+
"StatusDot"
|
|
372
|
+
],
|
|
373
|
+
"notes": "`StatusBadge` for statuses (use `defineStatusMap`), `Badge` for counts and neutral labels, `StatusDot` for a dot alone."
|
|
374
|
+
},
|
|
375
|
+
{
|
|
376
|
+
"need": "A person or a file",
|
|
377
|
+
"use": [
|
|
378
|
+
"Avatar",
|
|
379
|
+
"FileTypeBadge",
|
|
380
|
+
"FileChip",
|
|
381
|
+
"AttachmentChip"
|
|
382
|
+
]
|
|
383
|
+
},
|
|
384
|
+
{
|
|
385
|
+
"need": "An activity feed or notifications",
|
|
386
|
+
"use": [
|
|
387
|
+
"ActivityList",
|
|
388
|
+
"NotificationPanel"
|
|
389
|
+
]
|
|
390
|
+
},
|
|
391
|
+
{
|
|
392
|
+
"need": "A chart",
|
|
393
|
+
"use": [
|
|
394
|
+
"AreaChart",
|
|
395
|
+
"DonutChart",
|
|
396
|
+
"StackedBarChart",
|
|
397
|
+
"RankedBars"
|
|
398
|
+
]
|
|
399
|
+
},
|
|
400
|
+
{
|
|
401
|
+
"need": "Preview a document",
|
|
402
|
+
"use": [
|
|
403
|
+
"PdfPreview",
|
|
404
|
+
"SpreadsheetPreview"
|
|
405
|
+
]
|
|
406
|
+
},
|
|
407
|
+
{
|
|
408
|
+
"need": "An icon",
|
|
409
|
+
"use": [
|
|
410
|
+
"Icons"
|
|
411
|
+
],
|
|
412
|
+
"notes": "From the catalogue only, never an inline `<svg>`; brand marks from the brand icon family or `Logo`."
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
"need": "The application frame",
|
|
416
|
+
"use": [
|
|
417
|
+
"Shell",
|
|
418
|
+
"Sidebar",
|
|
419
|
+
"AppHeader"
|
|
420
|
+
],
|
|
421
|
+
"notes": "`DesignSystemProvider` (or `/next`'s `NextDesignSystemProvider`) once in the root layout; `BrandScope` sets the product theme of a subtree."
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
"need": "Configure strings, locale, links or the portal container",
|
|
425
|
+
"use": [
|
|
426
|
+
"DesignSystemProvider"
|
|
427
|
+
],
|
|
428
|
+
"notes": "Once, in the root layout. `useDsMessages` reads the resolved strings."
|
|
429
|
+
},
|
|
430
|
+
{
|
|
431
|
+
"need": "Theme one subtree (scheme, brand, density) including its overlays",
|
|
432
|
+
"use": [
|
|
433
|
+
"ThemeScope",
|
|
434
|
+
"BrandScope"
|
|
435
|
+
],
|
|
436
|
+
"notes": "`ThemeScope` re-stamps portalled overlays; `BrandScope` is product brand only."
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
"need": "Hide text visually but keep it for screen readers",
|
|
440
|
+
"use": [
|
|
441
|
+
"VisuallyHidden"
|
|
442
|
+
]
|
|
443
|
+
},
|
|
444
|
+
{
|
|
445
|
+
"need": "Merge class names",
|
|
446
|
+
"use": [
|
|
447
|
+
"cn"
|
|
448
|
+
],
|
|
449
|
+
"notes": "Consumer classes win over component classes by cascade; `cn` only dedupes."
|
|
450
|
+
}
|
|
75
451
|
],
|
|
76
452
|
"iconFamilies": [
|
|
77
453
|
{
|
|
78
454
|
"name": "Icons",
|
|
79
455
|
"pattern": "Icon$",
|
|
80
456
|
"exclude": "BrandIcon$",
|
|
81
|
-
"helpers": [
|
|
457
|
+
"helpers": [
|
|
458
|
+
"createIcon"
|
|
459
|
+
],
|
|
82
460
|
"description": "The UI glyph catalogue: 24-unit grid, `currentColor` 1.5 strokes, `aria-hidden` unless titled. Import from `@assure-one/design-system/icons` (server-safe) or the root.",
|
|
83
461
|
"useWhen": "Any glyph in a control, a list row, a status, an empty state; `createIcon` to register a one-off glyph in the same contract.",
|
|
84
462
|
"dontUseWhen": "You need a product mark (brand icon family or `Logo`), a state-driven glyph (`StatusIcon`, `PriorityIcon`) or an illustration.",
|
|
85
|
-
"replacesRawHtml": [
|
|
463
|
+
"replacesRawHtml": [
|
|
464
|
+
"<svg>",
|
|
465
|
+
"lucide-react"
|
|
466
|
+
],
|
|
86
467
|
"story": "src/primitives/icons.stories.tsx",
|
|
87
468
|
"status": "experimental"
|
|
88
469
|
},
|
|
@@ -92,1089 +473,2128 @@
|
|
|
92
473
|
"description": "Product and third-party marks: the Assure products plus Google and Microsoft. The `BrandIcon` suffix is the contract disclosure that the drawing is a trademark.",
|
|
93
474
|
"useWhen": "A product switcher, a sign-in provider button, a suite tile.",
|
|
94
475
|
"dontUseWhen": "A generic glyph is meant (use the icon catalogue) or the full wordmark is wanted (`Logo`).",
|
|
95
|
-
"replacesRawHtml": [
|
|
476
|
+
"replacesRawHtml": [
|
|
477
|
+
"<img src=\"…logo.svg\">"
|
|
478
|
+
],
|
|
96
479
|
"story": "src/primitives/logo.stories.tsx"
|
|
97
480
|
}
|
|
98
481
|
],
|
|
99
482
|
"components": {
|
|
100
483
|
"Button": {
|
|
101
484
|
"category": "actions",
|
|
102
|
-
"helpers": [
|
|
485
|
+
"helpers": [
|
|
486
|
+
"buttonVariants",
|
|
487
|
+
"resolveButtonStyle"
|
|
488
|
+
],
|
|
103
489
|
"useWhen": "Any action the user triggers: `variant` (solid, soft, outline, ghost, link) × `intent` (brand, neutral, success, danger) × `size` (xs…xl); `loading`, `iconStart`/`iconEnd`, `asChild` for a router link.",
|
|
104
490
|
"dontUseWhen": "The control is icon-only (`IconButton`), navigates (`LinkButton`), submits a form (`SubmitButton`) or is a clickable non-button surface (`Pressable`).",
|
|
105
|
-
"replacesRawHtml": [
|
|
106
|
-
|
|
491
|
+
"replacesRawHtml": [
|
|
492
|
+
"<button>",
|
|
493
|
+
"<a role=\"button\">",
|
|
494
|
+
"<div onClick>",
|
|
495
|
+
"<input type=\"button\">"
|
|
496
|
+
],
|
|
497
|
+
"related": [
|
|
498
|
+
"IconButton",
|
|
499
|
+
"LinkButton",
|
|
500
|
+
"SubmitButton",
|
|
501
|
+
"Pressable",
|
|
502
|
+
"PrimaryAction"
|
|
503
|
+
],
|
|
107
504
|
"since": "0.0.0",
|
|
108
|
-
"docs": [
|
|
505
|
+
"docs": [
|
|
506
|
+
"docs/adr/007-variant-intent-vocabulary.md"
|
|
507
|
+
]
|
|
109
508
|
},
|
|
110
509
|
"IconButton": {
|
|
111
510
|
"category": "actions",
|
|
112
|
-
"helpers": [
|
|
511
|
+
"helpers": [
|
|
512
|
+
"iconButtonVariants"
|
|
513
|
+
],
|
|
113
514
|
"useWhen": "An icon-only action (close, edit, more): square control-scale geometry, a required accessible name, a tooltip by default, the Button family's variants and intents.",
|
|
114
515
|
"dontUseWhen": "The action has a visible text label (`Button` with `iconStart`) or is a menu trigger that shows the chosen value.",
|
|
115
|
-
"replacesRawHtml": [
|
|
116
|
-
|
|
516
|
+
"replacesRawHtml": [
|
|
517
|
+
"<button><svg/></button>"
|
|
518
|
+
],
|
|
519
|
+
"related": [
|
|
520
|
+
"Button",
|
|
521
|
+
"Tooltip"
|
|
522
|
+
],
|
|
117
523
|
"since": "1.35.0"
|
|
118
524
|
},
|
|
119
525
|
"LinkButton": {
|
|
120
526
|
"category": "actions",
|
|
121
527
|
"useWhen": "Navigation that should look like a button: an `<a href>` with the Button variants, intents, sizes and icon slots.",
|
|
122
528
|
"dontUseWhen": "The action does not change the URL (`Button`) or the link should read as inline text (`Text asChild` around your router link).",
|
|
123
|
-
"replacesRawHtml": [
|
|
124
|
-
|
|
529
|
+
"replacesRawHtml": [
|
|
530
|
+
"<a class=\"btn\">"
|
|
531
|
+
],
|
|
532
|
+
"related": [
|
|
533
|
+
"Button",
|
|
534
|
+
"LinkAction"
|
|
535
|
+
],
|
|
125
536
|
"since": "0.0.0"
|
|
126
537
|
},
|
|
127
538
|
"SubmitButton": {
|
|
128
539
|
"category": "actions",
|
|
129
540
|
"useWhen": "The primary submit of a form: `type=\"submit\"`, full width by default (`fullWidth={false}` inline), shows `pendingText` while the form's `useFormStatus` is pending.",
|
|
130
541
|
"dontUseWhen": "The button is not a form submit or you need a secondary action next to the submit (`Button`).",
|
|
131
|
-
"replacesRawHtml": [
|
|
132
|
-
|
|
542
|
+
"replacesRawHtml": [
|
|
543
|
+
"<button type=\"submit\">",
|
|
544
|
+
"<input type=\"submit\">"
|
|
545
|
+
],
|
|
546
|
+
"related": [
|
|
547
|
+
"Button",
|
|
548
|
+
"Field"
|
|
549
|
+
],
|
|
133
550
|
"since": "0.0.0"
|
|
134
551
|
},
|
|
135
552
|
"Pressable": {
|
|
136
553
|
"category": "actions",
|
|
137
554
|
"useWhen": "A clickable region without button chrome: a card, a row, a tile. Renders a `<button>` (or `asChild`) with keyboard activation, focus ring and disabled handling.",
|
|
138
555
|
"dontUseWhen": "A visible button is meant (`Button`) or the region contains its own interactive controls (use `Card variant=\"interactive\"` with an explicit action).",
|
|
139
|
-
"replacesRawHtml": [
|
|
140
|
-
|
|
556
|
+
"replacesRawHtml": [
|
|
557
|
+
"<div onClick>",
|
|
558
|
+
"<span role=\"button\">",
|
|
559
|
+
"<li onClick>"
|
|
560
|
+
],
|
|
561
|
+
"related": [
|
|
562
|
+
"Button",
|
|
563
|
+
"Card"
|
|
564
|
+
],
|
|
141
565
|
"since": "1.35.0"
|
|
142
566
|
},
|
|
143
567
|
"CopyButton": {
|
|
144
568
|
"category": "actions",
|
|
145
569
|
"useWhen": "Copy a value to the clipboard with check-mark feedback (ids, codes, links).",
|
|
146
570
|
"dontUseWhen": "The copy needs a confirmation toast or copies rich content — compose `IconButton` + `useToast`.",
|
|
147
|
-
"replacesRawHtml": [
|
|
148
|
-
|
|
571
|
+
"replacesRawHtml": [
|
|
572
|
+
"navigator.clipboard.writeText + useState"
|
|
573
|
+
],
|
|
574
|
+
"related": [
|
|
575
|
+
"IconButton",
|
|
576
|
+
"ToastProvider"
|
|
577
|
+
],
|
|
149
578
|
"since": "0.0.0"
|
|
150
579
|
},
|
|
151
580
|
"ConfirmActionButton": {
|
|
152
581
|
"category": "actions",
|
|
153
582
|
"useWhen": "A destructive or irreversible action that needs a confirmation step: a trigger plus `ConfirmDialog`, retiring `window.confirm()`. `destructive={false}` (alias of `intent=\"brand\"`) for a non-destructive confirm.",
|
|
154
583
|
"dontUseWhen": "The confirmation is imperative (`useConfirm`) or the action is reversible (act, then offer undo in a toast).",
|
|
155
|
-
"replacesRawHtml": [
|
|
156
|
-
|
|
584
|
+
"replacesRawHtml": [
|
|
585
|
+
"window.confirm()",
|
|
586
|
+
"useState + AlertDialog boilerplate"
|
|
587
|
+
],
|
|
588
|
+
"related": [
|
|
589
|
+
"ConfirmDialog",
|
|
590
|
+
"AlertDialog",
|
|
591
|
+
"DangerAction"
|
|
592
|
+
],
|
|
157
593
|
"since": "0.3.0"
|
|
158
594
|
},
|
|
159
595
|
"ConfirmDialog": {
|
|
160
596
|
"category": "overlays",
|
|
161
597
|
"useWhen": "The confirmation pattern (target architecture §34): `title`, `description`, optional body content (a form field the decision depends on), `intent` (`danger` default — focus starts on Cancel; `brand` / `neutral` / `success` render the action through the Button recipe), async `onConfirm` with a built-in pending state, a rejection or a resolved `false` keeps it open and shows the error inline. Labels default to the `confirm` messages namespace.",
|
|
162
598
|
"dontUseWhen": "A one-line confirm around a trigger (`ConfirmActionButton`, which is this pattern with a `trigger`) or an imperative `await` from an event handler (`useConfirm`).",
|
|
163
|
-
"replacesRawHtml": [
|
|
164
|
-
|
|
599
|
+
"replacesRawHtml": [
|
|
600
|
+
"window.confirm()",
|
|
601
|
+
"useState + AlertDialog + pending flag boilerplate"
|
|
602
|
+
],
|
|
603
|
+
"related": [
|
|
604
|
+
"ConfirmActionButton",
|
|
605
|
+
"AlertDialog",
|
|
606
|
+
"ConfirmHost"
|
|
607
|
+
],
|
|
165
608
|
"since": "unreleased"
|
|
166
609
|
},
|
|
167
610
|
"ConfirmHost": {
|
|
168
611
|
"category": "overlays",
|
|
169
|
-
"hooks": [
|
|
612
|
+
"hooks": [
|
|
613
|
+
"useConfirm",
|
|
614
|
+
"usePrompt"
|
|
615
|
+
],
|
|
170
616
|
"useWhen": "Imperative confirmation: `const confirm = useConfirm(); if (await confirm({ title, intent: \"danger\" })) …` resolves `true` / `false`; `usePrompt()` resolves the entered string or `null`. Mount one `ConfirmHost` high in the tree (`DesignSystemProvider confirm` does) and every hook below shares its queue; without a host, or on the server, a request resolves as cancelled.",
|
|
171
617
|
"dontUseWhen": "The confirmation is part of the markup (`ConfirmDialog`, `ConfirmActionButton`) or needs a custom body beyond one input (`ConfirmDialog` with children).",
|
|
172
|
-
"replacesRawHtml": [
|
|
173
|
-
|
|
618
|
+
"replacesRawHtml": [
|
|
619
|
+
"window.confirm()",
|
|
620
|
+
"window.prompt()",
|
|
621
|
+
"PromptDialog.ask() singletons"
|
|
622
|
+
],
|
|
623
|
+
"related": [
|
|
624
|
+
"ConfirmDialog",
|
|
625
|
+
"DesignSystemProvider"
|
|
626
|
+
],
|
|
174
627
|
"since": "unreleased",
|
|
175
628
|
"story": "src/patterns/confirm/use-confirm.stories.tsx"
|
|
176
629
|
},
|
|
177
630
|
"PrimaryAction": {
|
|
178
631
|
"category": "actions",
|
|
179
632
|
"label": "Intent actions",
|
|
180
|
-
"parts": [
|
|
633
|
+
"parts": [
|
|
634
|
+
"SecondaryAction",
|
|
635
|
+
"DangerAction",
|
|
636
|
+
"LinkAction",
|
|
637
|
+
"IconAction"
|
|
638
|
+
],
|
|
181
639
|
"useWhen": "Intent-named `Button` wrappers for product code that reads by role: primary, secondary, danger, link-styled, icon-only.",
|
|
182
640
|
"dontUseWhen": "You need the full variant × intent matrix or a size outside the defaults (`Button`, `IconButton`).",
|
|
183
|
-
"related": [
|
|
641
|
+
"related": [
|
|
642
|
+
"Button",
|
|
643
|
+
"IconButton",
|
|
644
|
+
"LinkButton"
|
|
645
|
+
],
|
|
184
646
|
"since": "0.3.0"
|
|
185
647
|
},
|
|
186
648
|
"BulkActionBar": {
|
|
187
649
|
"category": "actions",
|
|
188
|
-
"parts": [
|
|
650
|
+
"parts": [
|
|
651
|
+
"BulkActionBarAction",
|
|
652
|
+
"BulkActionBarSeparator"
|
|
653
|
+
],
|
|
189
654
|
"useWhen": "A floating bar that appears when rows are selected: selection count, actions, separators, clear.",
|
|
190
655
|
"dontUseWhen": "Actions apply to one record (row menu via `DropdownMenu`) or belong to the page (`PageHeader` actions).",
|
|
191
|
-
"related": [
|
|
656
|
+
"related": [
|
|
657
|
+
"DataTable",
|
|
658
|
+
"StickyActionBar"
|
|
659
|
+
],
|
|
192
660
|
"since": "0.15.0"
|
|
193
661
|
},
|
|
194
662
|
"StickyActionBar": {
|
|
195
663
|
"category": "actions",
|
|
196
664
|
"useWhen": "Save / Cancel that stays visible at the bottom of a long form or settings page, with an optional hint and mobile-nav offset.",
|
|
197
665
|
"dontUseWhen": "The form fits the viewport (put the `SubmitButton` at the end) or the actions belong to a dialog (`DialogFooter`).",
|
|
198
|
-
"replacesRawHtml": [
|
|
199
|
-
|
|
666
|
+
"replacesRawHtml": [
|
|
667
|
+
"<div class=\"sticky bottom-0\">"
|
|
668
|
+
],
|
|
669
|
+
"related": [
|
|
670
|
+
"SubmitButton",
|
|
671
|
+
"BulkActionBar"
|
|
672
|
+
],
|
|
200
673
|
"since": "1.3.0"
|
|
201
674
|
},
|
|
202
675
|
"NewMenu": {
|
|
203
676
|
"category": "actions",
|
|
204
677
|
"useWhen": "The \"+ New\" creation menu of an app: grouped actions with icons and shortcuts on a `DropdownMenu`.",
|
|
205
678
|
"dontUseWhen": "The menu is contextual to one record (`DropdownMenu`) or has a single action (`Button`).",
|
|
206
|
-
"related": [
|
|
679
|
+
"related": [
|
|
680
|
+
"DropdownMenu",
|
|
681
|
+
"AppHeader"
|
|
682
|
+
],
|
|
207
683
|
"since": "1.2.0"
|
|
208
684
|
},
|
|
209
685
|
"DisplayMenu": {
|
|
210
686
|
"category": "actions",
|
|
211
687
|
"useWhen": "The Linear-style Display control of a list surface: filters, grouping, ordering and column visibility in one searchable menu, driven by a `sections` array.",
|
|
212
688
|
"dontUseWhen": "There is one filter (`FilterChip`) or one multi-value filter (`MultiFilterPill`).",
|
|
213
|
-
"related": [
|
|
689
|
+
"related": [
|
|
690
|
+
"Toolbar",
|
|
691
|
+
"MultiFilterPill",
|
|
692
|
+
"DataTableView"
|
|
693
|
+
],
|
|
214
694
|
"since": "1.25.0"
|
|
215
695
|
},
|
|
216
696
|
"Toolbar": {
|
|
217
697
|
"category": "actions",
|
|
218
|
-
"parts": [
|
|
219
|
-
|
|
698
|
+
"parts": [
|
|
699
|
+
"FilterChip"
|
|
700
|
+
],
|
|
701
|
+
"helpers": [
|
|
702
|
+
"filterChipVariants"
|
|
703
|
+
],
|
|
220
704
|
"useWhen": "The row of controls above a list or dashboard; `FilterChip` for a single-value filter toggle inside it. Controls share one control size so the row reads as one line.",
|
|
221
705
|
"dontUseWhen": "The controls belong to a table card (`DataTableToolbar`) or the filter is multi-value (`MultiFilterPill`).",
|
|
222
|
-
"replacesRawHtml": [
|
|
223
|
-
|
|
706
|
+
"replacesRawHtml": [
|
|
707
|
+
"<div class=\"flex items-center gap-2\"> above a list"
|
|
708
|
+
],
|
|
709
|
+
"related": [
|
|
710
|
+
"MultiFilterPill",
|
|
711
|
+
"DisplayMenu",
|
|
712
|
+
"DataTable"
|
|
713
|
+
],
|
|
224
714
|
"since": "0.3.0"
|
|
225
715
|
},
|
|
226
716
|
"SuggestionPills": {
|
|
227
717
|
"category": "actions",
|
|
228
718
|
"useWhen": "A strip of AI quick-reply pills floated above a composer; renders nothing when empty and not loading, so mount it unconditionally.",
|
|
229
719
|
"dontUseWhen": "The choices are a form value (`MultiSelectField`) or filters (`FilterChip`).",
|
|
230
|
-
"related": [
|
|
720
|
+
"related": [
|
|
721
|
+
"MessageComposer",
|
|
722
|
+
"AiDraftCard"
|
|
723
|
+
],
|
|
231
724
|
"since": "1.5.0"
|
|
232
725
|
},
|
|
233
|
-
|
|
234
726
|
"Field": {
|
|
235
727
|
"category": "forms",
|
|
236
|
-
"parts": [
|
|
728
|
+
"parts": [
|
|
729
|
+
"FieldDescription",
|
|
730
|
+
"FieldError"
|
|
731
|
+
],
|
|
237
732
|
"useWhen": "Every form control: owns ids, states and ARIA wiring for one control and its `Label`, `FieldDescription` and `FieldError`; design-system controls bind automatically.",
|
|
238
733
|
"dontUseWhen": "Grouping several controls (`Fieldset`) or wiring a control the design system does not ship (`FieldControl`).",
|
|
239
|
-
"replacesRawHtml": [
|
|
240
|
-
|
|
734
|
+
"replacesRawHtml": [
|
|
735
|
+
"<label for> + <input id> + <p id> aria-describedby",
|
|
736
|
+
"<p class=\"text-red-500\">"
|
|
737
|
+
],
|
|
738
|
+
"related": [
|
|
739
|
+
"Label",
|
|
740
|
+
"Fieldset",
|
|
741
|
+
"FieldControl",
|
|
742
|
+
"useFieldControl"
|
|
743
|
+
],
|
|
241
744
|
"since": "unreleased",
|
|
242
|
-
"docs": [
|
|
745
|
+
"docs": [
|
|
746
|
+
"docs/forms.md",
|
|
747
|
+
"docs/adr/006-field-native-form-participation.md"
|
|
748
|
+
]
|
|
243
749
|
},
|
|
244
750
|
"FieldControl": {
|
|
245
751
|
"category": "forms",
|
|
246
752
|
"useWhen": "A control that is not a design-system component (a rich-text editor, a canvas, a plain `<input>`) that must still get the `Field` wiring; a Slot that renders no element of its own.",
|
|
247
753
|
"dontUseWhen": "The control is a design-system component — it already calls `useFieldControl`.",
|
|
248
|
-
"related": [
|
|
754
|
+
"related": [
|
|
755
|
+
"Field",
|
|
756
|
+
"useFieldControl"
|
|
757
|
+
],
|
|
249
758
|
"since": "unreleased"
|
|
250
759
|
},
|
|
251
760
|
"Fieldset": {
|
|
252
761
|
"category": "forms",
|
|
253
|
-
"parts": [
|
|
762
|
+
"parts": [
|
|
763
|
+
"FieldsetLegend"
|
|
764
|
+
],
|
|
254
765
|
"useWhen": "Group related controls under one legend (a radio group, a set of checkboxes, a date range, a composite field): native `<fieldset>`/`<legend>`, `disabled` disables all.",
|
|
255
766
|
"dontUseWhen": "There is a single control (`Field`) or the grouping is only visual (`Section`, `Card`).",
|
|
256
|
-
"replacesRawHtml": [
|
|
257
|
-
|
|
767
|
+
"replacesRawHtml": [
|
|
768
|
+
"<fieldset>",
|
|
769
|
+
"<legend>",
|
|
770
|
+
"<div role=\"group\">"
|
|
771
|
+
],
|
|
772
|
+
"related": [
|
|
773
|
+
"Field",
|
|
774
|
+
"RadioGroup",
|
|
775
|
+
"FormSection"
|
|
776
|
+
],
|
|
258
777
|
"since": "unreleased"
|
|
259
778
|
},
|
|
260
779
|
"Label": {
|
|
261
780
|
"category": "forms",
|
|
262
|
-
"helpers": [
|
|
781
|
+
"helpers": [
|
|
782
|
+
"labelVariants"
|
|
783
|
+
],
|
|
263
784
|
"useWhen": "The visible name of a control, inside a `Field` (binds automatically) or with an explicit `htmlFor`.",
|
|
264
785
|
"dontUseWhen": "The text is not a control's name (`Text`) or a heading (`Heading`).",
|
|
265
|
-
"replacesRawHtml": [
|
|
266
|
-
|
|
786
|
+
"replacesRawHtml": [
|
|
787
|
+
"<label>"
|
|
788
|
+
],
|
|
789
|
+
"related": [
|
|
790
|
+
"Field",
|
|
791
|
+
"Input"
|
|
792
|
+
],
|
|
267
793
|
"since": "0.0.0"
|
|
268
794
|
},
|
|
795
|
+
"InfoHint": {
|
|
796
|
+
"category": "data display",
|
|
797
|
+
"useWhen": "The \u24d8 beside a label or a figure (W7-15): `label` names what the hint is about, `children` is the explanation, `presentation=\"tooltip\"` (default) or `\"popover\"` for an explanation with a paragraph or a link. The trigger is a real `IconButton`, so the hint is reachable by keyboard and by touch.",
|
|
798
|
+
"dontUseWhen": "The text belongs in the layout (`FieldDescription` under a field) or the surface is a rich hover preview (`HoverCard`).",
|
|
799
|
+
"replacesRawHtml": ["<svg title>", "<span title>"],
|
|
800
|
+
"related": ["Tooltip", "Popover", "IconButton", "FieldDescription"],
|
|
801
|
+
"since": "unreleased"
|
|
802
|
+
},
|
|
803
|
+
"PeoplePicker": {
|
|
804
|
+
"category": "selection",
|
|
805
|
+
"useWhen": "Pick a person or people from the firm's roster (W7-10): `people`, single or `multiple`, avatars with an optional second line, an \"assign to me\" shortcut from `currentUserId`, and an `unassignedLabel` row that reports `null`. Search, keyboard, `Field` binding and form submission come from `Combobox`.",
|
|
806
|
+
"dontUseWhen": "The options are not people (`Combobox`, `MultiSelect`), or a plain roster select with no roster affordances is enough (`Select`). `TeamMemberSelect` is the predecessor it replaces.",
|
|
807
|
+
"replacesRawHtml": ["hand-rolled assignee popover with checkboxes"],
|
|
808
|
+
"related": ["Combobox", "MultiSelect", "Avatar", "TeamMemberSelect"],
|
|
809
|
+
"since": "unreleased"
|
|
810
|
+
},
|
|
811
|
+
"SegmentedControl": {
|
|
812
|
+
"category": "selection",
|
|
813
|
+
"useWhen": "One of a few mutually exclusive views or scopes, shown side by side (W7-17): `options` with an optional `count` per segment, `size` on the control scale, radio semantics and arrow-key movement from `ToggleGroup`. The active segment cannot be cleared by clicking it again.",
|
|
814
|
+
"dontUseWhen": "The set is long or open-ended (`Select`, `Combobox`), more than one may be active (`ToggleGroup type=\"multiple\"`), or the segments switch page regions rather than a value (`Tabs`).",
|
|
815
|
+
"replacesRawHtml": ["pill Tabs used as a filter", "<div> of <button> with a manual active class"],
|
|
816
|
+
"related": ["ToggleGroup", "Tabs", "Select", "MultiFilterPill"],
|
|
817
|
+
"since": "unreleased"
|
|
818
|
+
},
|
|
269
819
|
"Input": {
|
|
270
820
|
"category": "forms",
|
|
271
|
-
"helpers": [
|
|
821
|
+
"helpers": [
|
|
822
|
+
"inputVariants"
|
|
823
|
+
],
|
|
272
824
|
"useWhen": "Single-line text, email, password, url, tel, file: `size` on the control scale, `variant` default/ghost, invalid state, start/end adornments, `label`/`description`/`error` sugar, `classNames` per part.",
|
|
273
825
|
"dontUseWhen": "Multi-line (`Textarea`), numbers (`NumberInput`), search (`SearchInput`), phone (`PhoneField`), codes (`OTPInput`), dates (`DatePicker`), files with drop zone (`FileUpload`).",
|
|
274
|
-
"replacesRawHtml": [
|
|
275
|
-
|
|
826
|
+
"replacesRawHtml": [
|
|
827
|
+
"<input>",
|
|
828
|
+
"<input type=\"text\">",
|
|
829
|
+
"<input type=\"email\">",
|
|
830
|
+
"<input type=\"password\">"
|
|
831
|
+
],
|
|
832
|
+
"related": [
|
|
833
|
+
"Field",
|
|
834
|
+
"Textarea",
|
|
835
|
+
"NumberInput",
|
|
836
|
+
"SearchInput"
|
|
837
|
+
],
|
|
276
838
|
"since": "0.0.0",
|
|
277
|
-
"docs": [
|
|
839
|
+
"docs": [
|
|
840
|
+
"docs/design-system/control-sizes.md"
|
|
841
|
+
]
|
|
278
842
|
},
|
|
279
843
|
"Textarea": {
|
|
280
844
|
"category": "forms",
|
|
281
|
-
"helpers": [
|
|
845
|
+
"helpers": [
|
|
846
|
+
"textareaVariants"
|
|
847
|
+
],
|
|
282
848
|
"useWhen": "Multi-line free text with the Input chrome, sizes, invalid state and Field binding.",
|
|
283
849
|
"dontUseWhen": "Rich text (bring your editor inside `FieldControl` or `MessageComposer`) or a single line (`Input`).",
|
|
284
|
-
"replacesRawHtml": [
|
|
285
|
-
|
|
850
|
+
"replacesRawHtml": [
|
|
851
|
+
"<textarea>"
|
|
852
|
+
],
|
|
853
|
+
"related": [
|
|
854
|
+
"Input",
|
|
855
|
+
"Field",
|
|
856
|
+
"MessageComposer"
|
|
857
|
+
],
|
|
286
858
|
"since": "0.0.0"
|
|
287
859
|
},
|
|
288
860
|
"NumberInput": {
|
|
289
861
|
"category": "forms",
|
|
290
862
|
"useWhen": "A `number | null` value with locale formatting, min/max/step, optional stepper buttons and a text fallback while typing.",
|
|
291
863
|
"dontUseWhen": "Money entered as text with a mask (`Input` + your formatter) or a bounded visual value (`Slider`).",
|
|
292
|
-
"replacesRawHtml": [
|
|
293
|
-
|
|
864
|
+
"replacesRawHtml": [
|
|
865
|
+
"<input type=\"number\">"
|
|
866
|
+
],
|
|
867
|
+
"related": [
|
|
868
|
+
"Input",
|
|
869
|
+
"Slider"
|
|
870
|
+
],
|
|
294
871
|
"since": "unreleased"
|
|
295
872
|
},
|
|
296
873
|
"SearchInput": {
|
|
297
874
|
"category": "forms",
|
|
298
|
-
"helpers": [
|
|
875
|
+
"helpers": [
|
|
876
|
+
"searchInputVariants"
|
|
877
|
+
],
|
|
299
878
|
"useWhen": "A search box: search icon, clear affordance, `size`, debounced `onValueChange`.",
|
|
300
879
|
"dontUseWhen": "The search filters a dropdown's options (`Combobox`) or the whole app (`CommandPalette`).",
|
|
301
|
-
"replacesRawHtml": [
|
|
302
|
-
|
|
880
|
+
"replacesRawHtml": [
|
|
881
|
+
"<input type=\"search\">"
|
|
882
|
+
],
|
|
883
|
+
"related": [
|
|
884
|
+
"Input",
|
|
885
|
+
"Combobox",
|
|
886
|
+
"DataTable"
|
|
887
|
+
],
|
|
303
888
|
"since": "0.0.0"
|
|
304
889
|
},
|
|
305
890
|
"OTPInput": {
|
|
306
891
|
"category": "forms",
|
|
307
892
|
"useWhen": "A one-time code split into cells: paste handling, auto-advance, one hidden form value, named by the surrounding `Label`.",
|
|
308
893
|
"dontUseWhen": "A plain numeric field (`NumberInput`) or a password (`Input type=\"password\"`).",
|
|
309
|
-
"replacesRawHtml": [
|
|
310
|
-
|
|
894
|
+
"replacesRawHtml": [
|
|
895
|
+
"six <input maxlength=\"1\">"
|
|
896
|
+
],
|
|
897
|
+
"related": [
|
|
898
|
+
"Input",
|
|
899
|
+
"Field"
|
|
900
|
+
],
|
|
311
901
|
"since": "0.0.0"
|
|
312
902
|
},
|
|
313
903
|
"PhoneField": {
|
|
314
904
|
"category": "forms",
|
|
315
|
-
"helpers": [
|
|
905
|
+
"helpers": [
|
|
906
|
+
"DEFAULT_PHONE_FIELD_MESSAGES"
|
|
907
|
+
],
|
|
316
908
|
"useWhen": "The one phone control: a `Combobox` country picker beside the national-number input on the shared control chrome; E.164 value (`+14155550100` or `null`), `onValueChange(value, { country, nationalNumber })`, lazy-loaded flags, Field binding and native submission; `DEFAULT_PHONE_FIELD_MESSAGES` to localise its strings.",
|
|
317
909
|
"dontUseWhen": "The value is not a phone number (`Input type=\"tel\"` is never right either — an extension or a PIN is an `Input`/`OTPInput`).",
|
|
318
|
-
"replacesRawHtml": [
|
|
319
|
-
|
|
910
|
+
"replacesRawHtml": [
|
|
911
|
+
"<input type=\"tel\">",
|
|
912
|
+
"<select> of dial codes + <input type=\"tel\">"
|
|
913
|
+
],
|
|
914
|
+
"related": [
|
|
915
|
+
"Combobox",
|
|
916
|
+
"Field",
|
|
917
|
+
"PhoneInput",
|
|
918
|
+
"PhoneCountryInput"
|
|
919
|
+
],
|
|
320
920
|
"since": "unreleased"
|
|
321
921
|
},
|
|
322
922
|
"PhoneInput": {
|
|
323
923
|
"category": "forms",
|
|
324
924
|
"useWhen": "Only in code that already uses it: US-only phone formatting on the `Input` chrome.",
|
|
325
925
|
"dontUseWhen": "New code — `PhoneField` (deprecated, removed in 3.0).",
|
|
326
|
-
"related": [
|
|
926
|
+
"related": [
|
|
927
|
+
"PhoneField",
|
|
928
|
+
"Input"
|
|
929
|
+
],
|
|
327
930
|
"since": "0.0.0"
|
|
328
931
|
},
|
|
329
932
|
"PhoneCountryInput": {
|
|
330
933
|
"category": "forms",
|
|
331
|
-
"parts": [
|
|
934
|
+
"parts": [
|
|
935
|
+
"CountrySelect",
|
|
936
|
+
"CountryFlag"
|
|
937
|
+
],
|
|
332
938
|
"useWhen": "Only in code that already uses it: the pre-PhoneField country `Select` + `tel` input pair; `parsePhoneForEditing` seeds it from a stored E.164 string.",
|
|
333
939
|
"dontUseWhen": "New code — `PhoneField` (its country picker is a `Combobox`; deprecated, removed in 3.0).",
|
|
334
|
-
"related": [
|
|
940
|
+
"related": [
|
|
941
|
+
"PhoneField",
|
|
942
|
+
"COUNTRY_CODES"
|
|
943
|
+
],
|
|
335
944
|
"since": "1.1.0"
|
|
336
945
|
},
|
|
337
946
|
"FileUpload": {
|
|
338
947
|
"category": "forms",
|
|
339
948
|
"useWhen": "Pick or drop files: accept/multiple/max size, file list with remove, keyboard-focusable input, Field binding.",
|
|
340
949
|
"dontUseWhen": "The upload belongs to a client document request (`DocumentRequestUpload`) or you only show already-uploaded files (`AttachmentChip`, `FileChip`).",
|
|
341
|
-
"replacesRawHtml": [
|
|
342
|
-
|
|
950
|
+
"replacesRawHtml": [
|
|
951
|
+
"<input type=\"file\">",
|
|
952
|
+
"drop-zone div with onDrop"
|
|
953
|
+
],
|
|
954
|
+
"related": [
|
|
955
|
+
"DocumentRequestUpload",
|
|
956
|
+
"AttachmentChip",
|
|
957
|
+
"FileTypeBadge"
|
|
958
|
+
],
|
|
343
959
|
"since": "0.0.0"
|
|
344
960
|
},
|
|
345
961
|
"DatePicker": {
|
|
346
962
|
"category": "forms",
|
|
347
963
|
"useWhen": "One date (or a year in year mode) typed with a mask or picked from a `Calendar` popover; ISO `YYYY-MM-DD` value, `onValueChange`, deterministic `en-US` display.",
|
|
348
964
|
"dontUseWhen": "A range (`DateRangePicker`) or an always-visible calendar (`Calendar`).",
|
|
349
|
-
"replacesRawHtml": [
|
|
350
|
-
|
|
965
|
+
"replacesRawHtml": [
|
|
966
|
+
"<input type=\"date\">"
|
|
967
|
+
],
|
|
968
|
+
"related": [
|
|
969
|
+
"DateRangePicker",
|
|
970
|
+
"Calendar",
|
|
971
|
+
"isoToDisplay"
|
|
972
|
+
],
|
|
351
973
|
"since": "0.0.0"
|
|
352
974
|
},
|
|
353
975
|
"DateRangePicker": {
|
|
354
976
|
"category": "forms",
|
|
355
977
|
"useWhen": "A from/to pair in one control; posts `${name}_from` / `${name}_to`.",
|
|
356
978
|
"dontUseWhen": "A single date (`DatePicker`) or two independent dates in a form (two `DatePicker`s in a `Fieldset`).",
|
|
357
|
-
"replacesRawHtml": [
|
|
358
|
-
|
|
979
|
+
"replacesRawHtml": [
|
|
980
|
+
"two <input type=\"date\">"
|
|
981
|
+
],
|
|
982
|
+
"related": [
|
|
983
|
+
"DatePicker",
|
|
984
|
+
"Calendar"
|
|
985
|
+
],
|
|
359
986
|
"since": "0.11.0"
|
|
360
987
|
},
|
|
361
988
|
"Calendar": {
|
|
362
989
|
"category": "forms",
|
|
363
990
|
"useWhen": "An inline month grid (react-day-picker) for choosing a day or range without a popover.",
|
|
364
991
|
"dontUseWhen": "The date belongs in a form field (`DatePicker`, `DateRangePicker`).",
|
|
365
|
-
"related": [
|
|
992
|
+
"related": [
|
|
993
|
+
"DatePicker",
|
|
994
|
+
"DateRangePicker"
|
|
995
|
+
],
|
|
366
996
|
"since": "0.0.0"
|
|
367
997
|
},
|
|
368
998
|
"Checkbox": {
|
|
369
999
|
"category": "forms",
|
|
370
1000
|
"useWhen": "A boolean or one of several independent choices; `checked` accepts `\"indeterminate\"` for select-all; native form participation.",
|
|
371
1001
|
"dontUseWhen": "The change applies immediately as a setting (`Switch`) or the choices are exclusive (`RadioGroup`).",
|
|
372
|
-
"replacesRawHtml": [
|
|
373
|
-
|
|
1002
|
+
"replacesRawHtml": [
|
|
1003
|
+
"<input type=\"checkbox\">"
|
|
1004
|
+
],
|
|
1005
|
+
"related": [
|
|
1006
|
+
"Switch",
|
|
1007
|
+
"RadioGroup",
|
|
1008
|
+
"DataTable"
|
|
1009
|
+
],
|
|
374
1010
|
"since": "0.0.0"
|
|
375
1011
|
},
|
|
376
1012
|
"RadioGroup": {
|
|
377
1013
|
"category": "forms",
|
|
378
|
-
"parts": [
|
|
1014
|
+
"parts": [
|
|
1015
|
+
"RadioGroupItem"
|
|
1016
|
+
],
|
|
379
1017
|
"useWhen": "Exclusive choice among a few visible options in a form; wrap in `Fieldset` for the legend.",
|
|
380
1018
|
"dontUseWhen": "More than about six options (`Select`) or an immediate view switch (`ToggleGroup`).",
|
|
381
|
-
"replacesRawHtml": [
|
|
382
|
-
|
|
1019
|
+
"replacesRawHtml": [
|
|
1020
|
+
"<input type=\"radio\">"
|
|
1021
|
+
],
|
|
1022
|
+
"related": [
|
|
1023
|
+
"Fieldset",
|
|
1024
|
+
"ToggleGroup",
|
|
1025
|
+
"Select"
|
|
1026
|
+
],
|
|
383
1027
|
"since": "0.0.0"
|
|
384
1028
|
},
|
|
385
1029
|
"Switch": {
|
|
386
1030
|
"category": "forms",
|
|
387
1031
|
"useWhen": "An on/off setting that takes effect immediately.",
|
|
388
1032
|
"dontUseWhen": "The value is submitted with the form (`Checkbox`).",
|
|
389
|
-
"replacesRawHtml": [
|
|
390
|
-
|
|
1033
|
+
"replacesRawHtml": [
|
|
1034
|
+
"<input type=\"checkbox\" role=\"switch\">"
|
|
1035
|
+
],
|
|
1036
|
+
"related": [
|
|
1037
|
+
"Checkbox"
|
|
1038
|
+
],
|
|
391
1039
|
"since": "0.0.0"
|
|
392
1040
|
},
|
|
393
1041
|
"Slider": {
|
|
394
1042
|
"category": "forms",
|
|
395
1043
|
"useWhen": "A bounded numeric value chosen by dragging (one or two thumbs).",
|
|
396
1044
|
"dontUseWhen": "Exact numbers matter (`NumberInput`).",
|
|
397
|
-
"replacesRawHtml": [
|
|
398
|
-
|
|
1045
|
+
"replacesRawHtml": [
|
|
1046
|
+
"<input type=\"range\">"
|
|
1047
|
+
],
|
|
1048
|
+
"related": [
|
|
1049
|
+
"NumberInput"
|
|
1050
|
+
],
|
|
399
1051
|
"since": "0.0.0"
|
|
400
1052
|
},
|
|
401
1053
|
"MultiSelectField": {
|
|
402
1054
|
"category": "forms",
|
|
403
1055
|
"useWhen": "A visible row of pill buttons that toggle membership in a comma-separated value: a handful of options everyone should see.",
|
|
404
1056
|
"dontUseWhen": "Many options or search (`MultiSelect`), or the pills are filters rather than a form value (`FilterChip`).",
|
|
405
|
-
"replacesRawHtml": [
|
|
406
|
-
|
|
1057
|
+
"replacesRawHtml": [
|
|
1058
|
+
"<input type=\"checkbox\"> styled as pills"
|
|
1059
|
+
],
|
|
1060
|
+
"related": [
|
|
1061
|
+
"MultiSelect",
|
|
1062
|
+
"ToggleGroup",
|
|
1063
|
+
"Chip"
|
|
1064
|
+
],
|
|
407
1065
|
"since": "0.0.0"
|
|
408
1066
|
},
|
|
409
1067
|
"Grid": {
|
|
410
1068
|
"category": "forms",
|
|
411
1069
|
"useWhen": "A matrix of typed cells (rows × columns of text, number, select, checkbox) edited as one controlled value with an accessible name per cell.",
|
|
412
1070
|
"dontUseWhen": "Read-only data (`Table`, `DataTable`) or a single column of fields (`Stack` of `Field`s).",
|
|
413
|
-
"replacesRawHtml": [
|
|
414
|
-
|
|
1071
|
+
"replacesRawHtml": [
|
|
1072
|
+
"<table> of <input>s"
|
|
1073
|
+
],
|
|
1074
|
+
"related": [
|
|
1075
|
+
"Table",
|
|
1076
|
+
"Questions"
|
|
1077
|
+
],
|
|
415
1078
|
"since": "1.20.0"
|
|
416
1079
|
},
|
|
417
1080
|
"Questions": {
|
|
418
1081
|
"category": "forms",
|
|
419
1082
|
"useWhen": "One questionnaire question card: index, title, description, type, required flag, `chrome` card or plain.",
|
|
420
1083
|
"dontUseWhen": "You are laying out the whole questionnaire (`QuestionnairePanel`) or a plain form field (`Field`).",
|
|
421
|
-
"related": [
|
|
1084
|
+
"related": [
|
|
1085
|
+
"QuestionnairePanel",
|
|
1086
|
+
"Field"
|
|
1087
|
+
],
|
|
422
1088
|
"since": "1.17.0"
|
|
423
1089
|
},
|
|
424
1090
|
"QuestionnairePanel": {
|
|
425
1091
|
"category": "forms",
|
|
426
1092
|
"useWhen": "The questionnaire container of the client portal: `cards` or `navigation` variant with eyebrow and title.",
|
|
427
1093
|
"dontUseWhen": "A settings form (`Fieldset` inside `Card`).",
|
|
428
|
-
"related": [
|
|
1094
|
+
"related": [
|
|
1095
|
+
"Questions",
|
|
1096
|
+
"Fieldset"
|
|
1097
|
+
],
|
|
429
1098
|
"since": "1.17.0"
|
|
430
1099
|
},
|
|
1100
|
+
"QUESTION_TYPES": {
|
|
1101
|
+
"category": "hooks/utilities",
|
|
1102
|
+
"useWhen": "Runtime list of every questionnaire question type the DS renders — validate or switch over types from API data.",
|
|
1103
|
+
"dontUseWhen": "Rendering a question — use `Questions` / `QuestionnairePanel`.",
|
|
1104
|
+
"related": ["QUESTION_TYPE_CONTRACT_VERSION", "Questions"],
|
|
1105
|
+
"since": "1.39.0"
|
|
1106
|
+
},
|
|
1107
|
+
"QUESTION_TYPE_CONTRACT_VERSION": {
|
|
1108
|
+
"category": "hooks/utilities",
|
|
1109
|
+
"useWhen": "Check which version of the question-type contract the installed DS implements before trusting a stored questionnaire.",
|
|
1110
|
+
"dontUseWhen": "Rendering a question — use `Questions` / `QuestionnairePanel`.",
|
|
1111
|
+
"related": ["QUESTION_TYPES", "Questions"],
|
|
1112
|
+
"since": "1.39.0"
|
|
1113
|
+
},
|
|
431
1114
|
"MessageComposer": {
|
|
432
1115
|
"category": "forms",
|
|
433
1116
|
"useWhen": "The chat input of a thread: one card chrome, optional quick-reply chips, your editor as `children`, a footer with a built-in Send.",
|
|
434
1117
|
"dontUseWhen": "A plain multi-line field (`Textarea`) or an email signature editor (`SignatureEditor`).",
|
|
435
|
-
"related": [
|
|
1118
|
+
"related": [
|
|
1119
|
+
"Textarea",
|
|
1120
|
+
"SuggestionPills",
|
|
1121
|
+
"AiDraftCard",
|
|
1122
|
+
"MessageBubble"
|
|
1123
|
+
],
|
|
436
1124
|
"since": "0.14.0"
|
|
437
1125
|
},
|
|
438
1126
|
"SignatureEditor": {
|
|
439
1127
|
"category": "forms",
|
|
440
1128
|
"useWhen": "The panel chrome for editing a personal email signature: header with Add image, your editor as `children`, Save / Insert footer; drop it in a `Popover` or use standalone.",
|
|
441
1129
|
"dontUseWhen": "Capturing a drawn e-signature (`ProposalSignatureBlock`).",
|
|
442
|
-
"related": [
|
|
1130
|
+
"related": [
|
|
1131
|
+
"MessageComposer",
|
|
1132
|
+
"Popover"
|
|
1133
|
+
],
|
|
443
1134
|
"since": "1.5.0"
|
|
444
1135
|
},
|
|
445
1136
|
"DocumentRequestField": {
|
|
446
1137
|
"category": "forms",
|
|
447
1138
|
"useWhen": "One row of a document request form: a slot for your document-type select plus description and required toggle.",
|
|
448
1139
|
"dontUseWhen": "A generic form field (`Field`).",
|
|
449
|
-
"related": [
|
|
1140
|
+
"related": [
|
|
1141
|
+
"DocumentRequestDetail",
|
|
1142
|
+
"Field",
|
|
1143
|
+
"Select"
|
|
1144
|
+
],
|
|
450
1145
|
"since": "1.4.0"
|
|
451
1146
|
},
|
|
452
1147
|
"DocumentRequestUpload": {
|
|
453
1148
|
"category": "forms",
|
|
454
1149
|
"useWhen": "The client-portal upload for a requested document: drop zone, progress and states tied to the request.",
|
|
455
1150
|
"dontUseWhen": "A generic file field (`FileUpload`).",
|
|
456
|
-
"related": [
|
|
1151
|
+
"related": [
|
|
1152
|
+
"FileUpload",
|
|
1153
|
+
"DocumentChecklist",
|
|
1154
|
+
"DocumentRequestDetail"
|
|
1155
|
+
],
|
|
457
1156
|
"since": "1.20.0"
|
|
458
1157
|
},
|
|
459
1158
|
"ProposalSignatureBlock": {
|
|
460
1159
|
"category": "forms",
|
|
461
1160
|
"label": "Proposal signing",
|
|
462
|
-
"parts": [
|
|
1161
|
+
"parts": [
|
|
1162
|
+
"ProposalConsentGate",
|
|
1163
|
+
"ProposalPaymentCapture"
|
|
1164
|
+
],
|
|
463
1165
|
"useWhen": "The signing step of a proposal: consent gate, signature capture, payment capture.",
|
|
464
1166
|
"dontUseWhen": "An email signature (`SignatureEditor`).",
|
|
465
|
-
"related": [
|
|
1167
|
+
"related": [
|
|
1168
|
+
"AgreementViewer",
|
|
1169
|
+
"ProposalPackageCard"
|
|
1170
|
+
],
|
|
466
1171
|
"since": "1.12.0"
|
|
467
1172
|
},
|
|
468
1173
|
"FormSection": {
|
|
469
1174
|
"category": "forms",
|
|
470
1175
|
"useWhen": "Only in code that already uses it: a titled `<fieldset>` block of a settings form with description and trailing action.",
|
|
471
1176
|
"dontUseWhen": "New code — use `Fieldset` + `FieldsetLegend` (deprecated, removed in 3.0).",
|
|
472
|
-
"related": [
|
|
1177
|
+
"related": [
|
|
1178
|
+
"Fieldset",
|
|
1179
|
+
"Field"
|
|
1180
|
+
],
|
|
473
1181
|
"since": "0.4.1"
|
|
474
1182
|
},
|
|
475
1183
|
"FormError": {
|
|
476
1184
|
"category": "forms",
|
|
477
1185
|
"label": "FormError / FormSuccess",
|
|
478
|
-
"parts": [
|
|
1186
|
+
"parts": [
|
|
1187
|
+
"FormSuccess"
|
|
1188
|
+
],
|
|
479
1189
|
"useWhen": "Only in code that already uses them: the pre-Field inline error and success messages (contract C-FORM-MSG).",
|
|
480
1190
|
"dontUseWhen": "New code — `FieldError` and `FieldDescription` inside a `Field`, or a toast for a saved form (deprecated, removed in 3.0).",
|
|
481
|
-
"related": [
|
|
1191
|
+
"related": [
|
|
1192
|
+
"Field",
|
|
1193
|
+
"ToastProvider"
|
|
1194
|
+
],
|
|
482
1195
|
"since": "0.0.0"
|
|
483
1196
|
},
|
|
484
|
-
|
|
485
1197
|
"Select": {
|
|
486
1198
|
"category": "selection",
|
|
487
|
-
"parts": [
|
|
1199
|
+
"parts": [
|
|
1200
|
+
"SelectRoot",
|
|
1201
|
+
"SelectTrigger",
|
|
1202
|
+
"SelectValue",
|
|
1203
|
+
"SelectContent",
|
|
1204
|
+
"SelectItem",
|
|
1205
|
+
"SelectGroup",
|
|
1206
|
+
"SelectLabel",
|
|
1207
|
+
"SelectSeparator",
|
|
1208
|
+
"SelectScrollUpButton",
|
|
1209
|
+
"SelectScrollDownButton"
|
|
1210
|
+
],
|
|
488
1211
|
"useWhen": "One of a short static list in a dropdown: the sealed `Select` takes `options`; the `Select*` parts compose custom items. Empty value is a real empty (no sentinel option), `size`, `classNames`, Field binding.",
|
|
489
1212
|
"dontUseWhen": "The user should type to filter, the list is long or async (`Combobox`), several values (`MultiSelect`), or a few options that can all be visible (`RadioGroup`, `ToggleGroup`).",
|
|
490
|
-
"replacesRawHtml": [
|
|
491
|
-
|
|
1213
|
+
"replacesRawHtml": [
|
|
1214
|
+
"<select>",
|
|
1215
|
+
"<option>"
|
|
1216
|
+
],
|
|
1217
|
+
"related": [
|
|
1218
|
+
"Combobox",
|
|
1219
|
+
"MultiSelect",
|
|
1220
|
+
"ClientSelect",
|
|
1221
|
+
"TeamMemberSelect"
|
|
1222
|
+
],
|
|
492
1223
|
"since": "0.0.0"
|
|
493
1224
|
},
|
|
494
1225
|
"Combobox": {
|
|
495
1226
|
"category": "selection",
|
|
496
|
-
"helpers": [
|
|
1227
|
+
"helpers": [
|
|
1228
|
+
"DEFAULT_COMBOBOX_MESSAGES"
|
|
1229
|
+
],
|
|
497
1230
|
"useWhen": "A searchable pick: one input, a portalled listbox, the `Option<T>` model (`{ value, label }`), async loading and empty messages, single or `multiple`.",
|
|
498
1231
|
"dontUseWhen": "A short static list (`Select`) or free text with suggestions that need not match (`Input` + `Popover`).",
|
|
499
|
-
"replacesRawHtml": [
|
|
500
|
-
|
|
1232
|
+
"replacesRawHtml": [
|
|
1233
|
+
"<input list> + <datalist>",
|
|
1234
|
+
"<select> with a search box"
|
|
1235
|
+
],
|
|
1236
|
+
"related": [
|
|
1237
|
+
"Select",
|
|
1238
|
+
"MultiSelect",
|
|
1239
|
+
"SearchSelect"
|
|
1240
|
+
],
|
|
501
1241
|
"since": "unreleased"
|
|
502
1242
|
},
|
|
503
1243
|
"MultiSelect": {
|
|
504
1244
|
"category": "selection",
|
|
505
1245
|
"useWhen": "Several of many options with search: `Combobox` in `multiple` mode with selected chips.",
|
|
506
1246
|
"dontUseWhen": "A handful of options that should all be visible (`MultiSelectField`) or one value (`Combobox`, `Select`).",
|
|
507
|
-
"replacesRawHtml": [
|
|
508
|
-
|
|
1247
|
+
"replacesRawHtml": [
|
|
1248
|
+
"<select multiple>"
|
|
1249
|
+
],
|
|
1250
|
+
"related": [
|
|
1251
|
+
"Combobox",
|
|
1252
|
+
"MultiSelectField",
|
|
1253
|
+
"Chip"
|
|
1254
|
+
],
|
|
509
1255
|
"since": "unreleased"
|
|
510
1256
|
},
|
|
511
1257
|
"SearchSelect": {
|
|
512
1258
|
"category": "selection",
|
|
513
1259
|
"useWhen": "Only in code that already uses it: the pre-Combobox searchable select with `{ id, label }` options (contract C-SEARCHSELECT).",
|
|
514
1260
|
"dontUseWhen": "New code — `Combobox` with `Option` (deprecated, removed in 3.0; CM-08 rewrites single-mode call sites).",
|
|
515
|
-
"related": [
|
|
1261
|
+
"related": [
|
|
1262
|
+
"Combobox",
|
|
1263
|
+
"MultiSelect"
|
|
1264
|
+
],
|
|
516
1265
|
"since": "0.0.0"
|
|
517
1266
|
},
|
|
518
1267
|
"ClientSelect": {
|
|
519
1268
|
"category": "selection",
|
|
520
|
-
"useWhen": "Pick one client:
|
|
521
|
-
"dontUseWhen": "
|
|
522
|
-
"related": [
|
|
1269
|
+
"useWhen": "Pick one client: searchable name and email rows on the `Combobox` primitive, long names truncated.",
|
|
1270
|
+
"dontUseWhen": "Clients fetched per keystroke (`Combobox` with async options) or any other entity (`Select`).",
|
|
1271
|
+
"related": [
|
|
1272
|
+
"Select",
|
|
1273
|
+
"TeamMemberSelect",
|
|
1274
|
+
"Combobox"
|
|
1275
|
+
],
|
|
523
1276
|
"since": "0.0.0"
|
|
524
1277
|
},
|
|
525
1278
|
"TeamMemberSelect": {
|
|
526
1279
|
"category": "selection",
|
|
527
1280
|
"useWhen": "Pick an assignee: avatar and name rows on the `Select` primitive, with an unassigned option.",
|
|
528
1281
|
"dontUseWhen": "Several assignees (`MultiSelect`) or any other entity (`Select`).",
|
|
529
|
-
"related": [
|
|
1282
|
+
"related": [
|
|
1283
|
+
"Select",
|
|
1284
|
+
"ClientSelect",
|
|
1285
|
+
"DataTableView"
|
|
1286
|
+
],
|
|
530
1287
|
"since": "0.0.0"
|
|
531
1288
|
},
|
|
532
1289
|
"ToggleGroup": {
|
|
533
1290
|
"category": "selection",
|
|
534
|
-
"parts": [
|
|
1291
|
+
"parts": [
|
|
1292
|
+
"ToggleGroupItem"
|
|
1293
|
+
],
|
|
535
1294
|
"useWhen": "A view or mode switch with immediate effect (list/grid, day/week), single or multiple, roving focus.",
|
|
536
1295
|
"dontUseWhen": "The choice is a form value (`RadioGroup`, `MultiSelectField`) or navigation between panels (`Tabs`).",
|
|
537
|
-
"replacesRawHtml": [
|
|
538
|
-
|
|
1296
|
+
"replacesRawHtml": [
|
|
1297
|
+
"group of <button aria-pressed>"
|
|
1298
|
+
],
|
|
1299
|
+
"related": [
|
|
1300
|
+
"Tabs",
|
|
1301
|
+
"RadioGroup",
|
|
1302
|
+
"DocumentSourceFilter"
|
|
1303
|
+
],
|
|
539
1304
|
"since": "0.0.0"
|
|
540
1305
|
},
|
|
541
1306
|
"Chip": {
|
|
542
1307
|
"category": "selection",
|
|
543
|
-
"helpers": [
|
|
1308
|
+
"helpers": [
|
|
1309
|
+
"chipVariants",
|
|
1310
|
+
"resolveChipStyle"
|
|
1311
|
+
],
|
|
544
1312
|
"useWhen": "A removable, toggleable or clickable token: applied filters, tags, selected values; `variant` × `intent` × `size`, `onRemove`, `pressed`.",
|
|
545
1313
|
"dontUseWhen": "A static label (`Badge`), a status (`StatusBadge`) or a file (`FileChip`, `AttachmentChip`).",
|
|
546
|
-
"replacesRawHtml": [
|
|
547
|
-
|
|
1314
|
+
"replacesRawHtml": [
|
|
1315
|
+
"<span class=\"rounded-full …\"><button>×</button></span>"
|
|
1316
|
+
],
|
|
1317
|
+
"related": [
|
|
1318
|
+
"DismissibleChip",
|
|
1319
|
+
"Badge",
|
|
1320
|
+
"Toolbar",
|
|
1321
|
+
"MultiSelect"
|
|
1322
|
+
],
|
|
548
1323
|
"since": "1.35.0"
|
|
549
1324
|
},
|
|
550
1325
|
"DismissibleChip": {
|
|
551
1326
|
"category": "selection",
|
|
552
1327
|
"useWhen": "Only in code that already uses it: a label with a remove button.",
|
|
553
1328
|
"dontUseWhen": "New code — `Chip` with `onRemove` covers it with the shared variants and sizes.",
|
|
554
|
-
"related": [
|
|
1329
|
+
"related": [
|
|
1330
|
+
"Chip"
|
|
1331
|
+
],
|
|
555
1332
|
"since": "0.4.0"
|
|
556
1333
|
},
|
|
557
1334
|
"MultiFilterPill": {
|
|
558
1335
|
"category": "selection",
|
|
559
1336
|
"useWhen": "A toolbar filter with a multi-select dropdown and a count of applied values.",
|
|
560
1337
|
"dontUseWhen": "A single-value filter (`FilterChip`) or the full display menu (`DisplayMenu`).",
|
|
561
|
-
"related": [
|
|
1338
|
+
"related": [
|
|
1339
|
+
"Toolbar",
|
|
1340
|
+
"DisplayMenu",
|
|
1341
|
+
"MultiSelect"
|
|
1342
|
+
],
|
|
562
1343
|
"since": "0.0.0"
|
|
563
1344
|
},
|
|
564
1345
|
"DocumentSourceFilter": {
|
|
565
1346
|
"category": "selection",
|
|
566
1347
|
"useWhen": "Scope a document list to a provenance bucket (all, uploaded, emailed, …) with counts: a `ToggleGroup` that reuses `DocumentSourceTag`'s glyphs.",
|
|
567
1348
|
"dontUseWhen": "Any other segmented filter (`ToggleGroup`).",
|
|
568
|
-
"related": [
|
|
1349
|
+
"related": [
|
|
1350
|
+
"ToggleGroup",
|
|
1351
|
+
"DocumentSourceTag",
|
|
1352
|
+
"DocumentDetailPanel"
|
|
1353
|
+
],
|
|
569
1354
|
"since": "1.12.0"
|
|
570
1355
|
},
|
|
571
|
-
|
|
572
1356
|
"Alert": {
|
|
573
1357
|
"category": "feedback",
|
|
574
|
-
"parts": [
|
|
575
|
-
|
|
1358
|
+
"parts": [
|
|
1359
|
+
"AlertTitle",
|
|
1360
|
+
"AlertDescription"
|
|
1361
|
+
],
|
|
1362
|
+
"helpers": [
|
|
1363
|
+
"alertVariants"
|
|
1364
|
+
],
|
|
576
1365
|
"useWhen": "An inline banner in the page flow: success, warning, danger or info, with title, description and optional action.",
|
|
577
1366
|
"dontUseWhen": "Feedback after an action that should disappear (`ToastProvider`), a per-field error (`FieldError`) or a blocking message (`AlertDialog`).",
|
|
578
|
-
"replacesRawHtml": [
|
|
579
|
-
|
|
1367
|
+
"replacesRawHtml": [
|
|
1368
|
+
"<div role=\"alert\">",
|
|
1369
|
+
"coloured bordered div"
|
|
1370
|
+
],
|
|
1371
|
+
"related": [
|
|
1372
|
+
"ToastProvider",
|
|
1373
|
+
"Field",
|
|
1374
|
+
"AlertDialog"
|
|
1375
|
+
],
|
|
580
1376
|
"since": "0.0.0"
|
|
581
1377
|
},
|
|
582
1378
|
"ToastProvider": {
|
|
583
1379
|
"category": "feedback",
|
|
584
|
-
"hooks": [
|
|
1380
|
+
"hooks": [
|
|
1381
|
+
"useToast"
|
|
1382
|
+
],
|
|
585
1383
|
"useWhen": "Transient notifications after an action: mount `ToastProvider` once, call `useToast()` anywhere below; `/testing` ships `createToastRecorder`.",
|
|
586
1384
|
"dontUseWhen": "The message must stay until read (`Alert`) or is tied to a field (`FieldError`).",
|
|
587
|
-
"replacesRawHtml": [
|
|
588
|
-
|
|
1385
|
+
"replacesRawHtml": [
|
|
1386
|
+
"alert()",
|
|
1387
|
+
"hand-rolled toast portal"
|
|
1388
|
+
],
|
|
1389
|
+
"related": [
|
|
1390
|
+
"Alert",
|
|
1391
|
+
"CopyButton"
|
|
1392
|
+
],
|
|
589
1393
|
"since": "0.0.0"
|
|
590
1394
|
},
|
|
591
1395
|
"Spinner": {
|
|
592
1396
|
"category": "feedback",
|
|
593
|
-
"helpers": [
|
|
1397
|
+
"helpers": [
|
|
1398
|
+
"spinnerVariants",
|
|
1399
|
+
"SPINNER_TONE_TO_INTENT"
|
|
1400
|
+
],
|
|
594
1401
|
"useWhen": "Indeterminate activity in a small area or inside a control; inherits `currentColor` unless an `intent` is set.",
|
|
595
1402
|
"dontUseWhen": "Loading content with a known shape (`Skeleton`, `LoadingRows`) or a button's own pending state (`Button loading`).",
|
|
596
|
-
"replacesRawHtml": [
|
|
597
|
-
|
|
1403
|
+
"replacesRawHtml": [
|
|
1404
|
+
"animate-spin svg"
|
|
1405
|
+
],
|
|
1406
|
+
"related": [
|
|
1407
|
+
"Skeleton",
|
|
1408
|
+
"LoadingRows",
|
|
1409
|
+
"ProgressBar"
|
|
1410
|
+
],
|
|
598
1411
|
"since": "0.15.0"
|
|
599
1412
|
},
|
|
600
1413
|
"Skeleton": {
|
|
601
1414
|
"category": "feedback",
|
|
602
|
-
"parts": [
|
|
1415
|
+
"parts": [
|
|
1416
|
+
"SkeletonText",
|
|
1417
|
+
"SkeletonCircle"
|
|
1418
|
+
],
|
|
603
1419
|
"useWhen": "A placeholder in the shape of the content that is loading: block, text lines, circle.",
|
|
604
1420
|
"dontUseWhen": "Rows of a list or table (`LoadingRows`) or an operation with no layout to reserve (`Spinner`).",
|
|
605
|
-
"replacesRawHtml": [
|
|
606
|
-
|
|
1421
|
+
"replacesRawHtml": [
|
|
1422
|
+
"<div class=\"animate-pulse bg-…\">"
|
|
1423
|
+
],
|
|
1424
|
+
"related": [
|
|
1425
|
+
"LoadingRows",
|
|
1426
|
+
"Spinner"
|
|
1427
|
+
],
|
|
607
1428
|
"since": "0.0.0"
|
|
608
1429
|
},
|
|
609
1430
|
"LoadingRows": {
|
|
610
1431
|
"category": "feedback",
|
|
611
1432
|
"useWhen": "N uniform skeleton rows while a list or table loads.",
|
|
612
1433
|
"dontUseWhen": "A single shape (`Skeleton`).",
|
|
613
|
-
"replacesRawHtml": [
|
|
614
|
-
|
|
1434
|
+
"replacesRawHtml": [
|
|
1435
|
+
"Array.from({ length }).map(<Skeleton/>)"
|
|
1436
|
+
],
|
|
1437
|
+
"related": [
|
|
1438
|
+
"Skeleton",
|
|
1439
|
+
"DataTable"
|
|
1440
|
+
],
|
|
615
1441
|
"since": "0.4.1"
|
|
616
1442
|
},
|
|
617
1443
|
"ProgressBar": {
|
|
618
1444
|
"category": "feedback",
|
|
619
|
-
"helpers": [
|
|
1445
|
+
"helpers": [
|
|
1446
|
+
"progressBarVariants",
|
|
1447
|
+
"PROGRESS_LEGACY_TO_INTENT"
|
|
1448
|
+
],
|
|
620
1449
|
"useWhen": "A determinate (or indeterminate) horizontal meter; `intent` sets the colour, otherwise it follows the value.",
|
|
621
1450
|
"dontUseWhen": "A compact circular meter (`ProgressRing`), discrete steps (`SegmentedProgress`, `Stepper`) or the suite's percent readout (`SuiteProgress`).",
|
|
622
|
-
"replacesRawHtml": [
|
|
623
|
-
|
|
1451
|
+
"replacesRawHtml": [
|
|
1452
|
+
"<progress>",
|
|
1453
|
+
"nested div with width:%"
|
|
1454
|
+
],
|
|
1455
|
+
"related": [
|
|
1456
|
+
"ProgressRing",
|
|
1457
|
+
"SegmentedProgress",
|
|
1458
|
+
"SuiteProgress"
|
|
1459
|
+
],
|
|
624
1460
|
"since": "0.0.0"
|
|
625
1461
|
},
|
|
626
1462
|
"ProgressRing": {
|
|
627
1463
|
"category": "feedback",
|
|
628
|
-
"helpers": [
|
|
1464
|
+
"helpers": [
|
|
1465
|
+
"progressRingVariants"
|
|
1466
|
+
],
|
|
629
1467
|
"useWhen": "A circular meter for a card or tile, with the same `intent` and value-driven colour rule as `ProgressBar`.",
|
|
630
1468
|
"dontUseWhen": "A wide layout (`ProgressBar`) or a donut of several series (`DonutChart`).",
|
|
631
|
-
"related": [
|
|
1469
|
+
"related": [
|
|
1470
|
+
"ProgressBar",
|
|
1471
|
+
"DonutChart"
|
|
1472
|
+
],
|
|
632
1473
|
"since": "0.0.0"
|
|
633
1474
|
},
|
|
634
1475
|
"SegmentedProgress": {
|
|
635
1476
|
"category": "feedback",
|
|
636
1477
|
"useWhen": "Progress through a known number of steps as filled segments (onboarding, checklists).",
|
|
637
1478
|
"dontUseWhen": "The steps have names (`Stepper`) or the value is continuous (`ProgressBar`).",
|
|
638
|
-
"related": [
|
|
1479
|
+
"related": [
|
|
1480
|
+
"Stepper",
|
|
1481
|
+
"ProgressBar",
|
|
1482
|
+
"SuiteProgress"
|
|
1483
|
+
],
|
|
639
1484
|
"since": "1.2.0"
|
|
640
1485
|
},
|
|
641
1486
|
"SuiteProgress": {
|
|
642
1487
|
"category": "feedback",
|
|
643
|
-
"helpers": [
|
|
1488
|
+
"helpers": [
|
|
1489
|
+
"suiteProgressFillVariants"
|
|
1490
|
+
],
|
|
644
1491
|
"useWhen": "The suite's discrete segmented meter with a percent readout, tinted per product or `intent`.",
|
|
645
1492
|
"dontUseWhen": "A generic segmented meter (`SegmentedProgress`) or a continuous one (`ProgressBar`).",
|
|
646
|
-
"related": [
|
|
1493
|
+
"related": [
|
|
1494
|
+
"SegmentedProgress",
|
|
1495
|
+
"ProgressBar"
|
|
1496
|
+
],
|
|
647
1497
|
"since": "1.34.0"
|
|
648
1498
|
},
|
|
649
1499
|
"EmptyState": {
|
|
650
1500
|
"category": "feedback",
|
|
651
1501
|
"useWhen": "A list or panel has nothing to show: icon, title, description and one action.",
|
|
652
1502
|
"dontUseWhen": "The feature does not exist yet (`ComingSoon`) or content is loading (`Skeleton`).",
|
|
653
|
-
"replacesRawHtml": [
|
|
654
|
-
|
|
1503
|
+
"replacesRawHtml": [
|
|
1504
|
+
"centred div with an icon and grey text"
|
|
1505
|
+
],
|
|
1506
|
+
"related": [
|
|
1507
|
+
"ComingSoon",
|
|
1508
|
+
"LoadingRows",
|
|
1509
|
+
"ErrorState"
|
|
1510
|
+
],
|
|
655
1511
|
"since": "0.0.0"
|
|
656
1512
|
},
|
|
1513
|
+
"SectionCard": {
|
|
1514
|
+
"category": "layout",
|
|
1515
|
+
"useWhen": "A titled panel: `title`, optional `description`, trailing `actions`, body and optional `footer` — `Card`'s header/body/footer composed once. `flush` for a body that owns its row insets.",
|
|
1516
|
+
"dontUseWhen": "The surface has no heading (`Card`) or it is a whole page header (`PageHeader`).",
|
|
1517
|
+
"replacesRawHtml": [
|
|
1518
|
+
"section with a border, a heading row and a padded body"
|
|
1519
|
+
],
|
|
1520
|
+
"related": [
|
|
1521
|
+
"Card",
|
|
1522
|
+
"PageHeader",
|
|
1523
|
+
"Surface"
|
|
1524
|
+
],
|
|
1525
|
+
"since": "1.38.0"
|
|
1526
|
+
},
|
|
1527
|
+
"AvatarGroup": {
|
|
1528
|
+
"category": "data display",
|
|
1529
|
+
"useWhen": "An overlapping stack of `Avatar`s with a `+N` overflow bubble: `max` caps the faces, `total` carries the real count, `size` cascades from Avatar's scale.",
|
|
1530
|
+
"dontUseWhen": "A single person (`Avatar`) or a list that needs names (`DescriptionList`).",
|
|
1531
|
+
"replacesRawHtml": [
|
|
1532
|
+
"flex row of avatars with negative margins and a +N circle"
|
|
1533
|
+
],
|
|
1534
|
+
"related": [
|
|
1535
|
+
"Avatar",
|
|
1536
|
+
"TeamMemberSelect"
|
|
1537
|
+
],
|
|
1538
|
+
"since": "1.38.0"
|
|
1539
|
+
},
|
|
1540
|
+
"ErrorState": {
|
|
1541
|
+
"category": "feedback",
|
|
1542
|
+
"useWhen": "A list or panel failed to load: danger icon tile, title, description and a retry button (`onRetry`). `size=\"compact\"` inside a table.",
|
|
1543
|
+
"dontUseWhen": "There is simply nothing to show (`EmptyState`) or the error belongs to a form field (`FieldError`).",
|
|
1544
|
+
"replacesRawHtml": [
|
|
1545
|
+
"centred div with a warning icon and a Try again button"
|
|
1546
|
+
],
|
|
1547
|
+
"related": [
|
|
1548
|
+
"EmptyState",
|
|
1549
|
+
"TableError"
|
|
1550
|
+
],
|
|
1551
|
+
"since": "1.38.0"
|
|
1552
|
+
},
|
|
657
1553
|
"ComingSoon": {
|
|
658
1554
|
"category": "feedback",
|
|
659
1555
|
"useWhen": "A placeholder for a feature that is not available yet: icon, title, description and a feature list.",
|
|
660
1556
|
"dontUseWhen": "The feature exists but has no data (`EmptyState`).",
|
|
661
|
-
"related": [
|
|
1557
|
+
"related": [
|
|
1558
|
+
"EmptyState"
|
|
1559
|
+
],
|
|
662
1560
|
"since": "0.0.0"
|
|
663
1561
|
},
|
|
664
1562
|
"AttentionItem": {
|
|
665
1563
|
"category": "feedback",
|
|
666
1564
|
"useWhen": "One row of an attention queue: icon, title, description, service tone and trailing action.",
|
|
667
1565
|
"dontUseWhen": "A notification (`NotificationPanel` items) or an activity event (`ActivityList` items).",
|
|
668
|
-
"related": [
|
|
1566
|
+
"related": [
|
|
1567
|
+
"NotificationPanel",
|
|
1568
|
+
"ActivityList",
|
|
1569
|
+
"KpiCard"
|
|
1570
|
+
],
|
|
669
1571
|
"since": "1.2.0"
|
|
670
1572
|
},
|
|
671
1573
|
"MissingDocumentsPanel": {
|
|
672
1574
|
"category": "feedback",
|
|
673
1575
|
"useWhen": "The firm-side panel listing documents a client has not provided, with a Request action.",
|
|
674
1576
|
"dontUseWhen": "The client-side checklist (`DocumentChecklist`).",
|
|
675
|
-
"related": [
|
|
1577
|
+
"related": [
|
|
1578
|
+
"DocumentChecklist",
|
|
1579
|
+
"DocumentRequestDetail"
|
|
1580
|
+
],
|
|
676
1581
|
"since": "1.4.0"
|
|
677
1582
|
},
|
|
678
1583
|
"AiDraftCard": {
|
|
679
1584
|
"category": "feedback",
|
|
680
1585
|
"useWhen": "Present an AI-generated draft inside a composer: one `state` prop drives loading, refining, error and ready (collapsible); you pass the body and actions.",
|
|
681
1586
|
"dontUseWhen": "A human message (`MessageBubble`) or AI quick replies (`SuggestionPills`).",
|
|
682
|
-
"related": [
|
|
1587
|
+
"related": [
|
|
1588
|
+
"MessageComposer",
|
|
1589
|
+
"SuggestionPills",
|
|
1590
|
+
"AIReceiptPanel"
|
|
1591
|
+
],
|
|
683
1592
|
"since": "1.5.0"
|
|
684
1593
|
},
|
|
685
1594
|
"AIReceiptPanel": {
|
|
686
1595
|
"category": "feedback",
|
|
687
1596
|
"useWhen": "The receipt-reading panel: idle, reading and done states with the extracted result and an Attach action.",
|
|
688
1597
|
"dontUseWhen": "A generic upload (`FileUpload`) or a draft message (`AiDraftCard`).",
|
|
689
|
-
"related": [
|
|
1598
|
+
"related": [
|
|
1599
|
+
"AiDraftCard",
|
|
1600
|
+
"FileUpload"
|
|
1601
|
+
],
|
|
690
1602
|
"since": "1.2.0"
|
|
691
1603
|
},
|
|
692
|
-
|
|
693
1604
|
"Dialog": {
|
|
694
1605
|
"category": "overlays",
|
|
695
|
-
"parts": [
|
|
1606
|
+
"parts": [
|
|
1607
|
+
"DialogTrigger",
|
|
1608
|
+
"DialogPortal",
|
|
1609
|
+
"DialogOverlay",
|
|
1610
|
+
"DialogContent",
|
|
1611
|
+
"DialogHeader",
|
|
1612
|
+
"DialogTitle",
|
|
1613
|
+
"DialogDescription",
|
|
1614
|
+
"DialogBody",
|
|
1615
|
+
"DialogFooter",
|
|
1616
|
+
"DialogClose"
|
|
1617
|
+
],
|
|
696
1618
|
"useWhen": "A modal task or message: focus trap, Escape, overlay, `DialogTitle` required for the accessible name; `size` up to `xl` (or the `--ds-dialog-width` variable), `height`, and `DialogBody` as the scrolling region between header and footer.",
|
|
697
1619
|
"dontUseWhen": "A confirmation that must be answered (`AlertDialog`), a side panel (`Sheet`), a mobile-friendly modal (`ResponsiveDialog`) or non-modal content (`Popover`).",
|
|
698
|
-
"replacesRawHtml": [
|
|
699
|
-
|
|
1620
|
+
"replacesRawHtml": [
|
|
1621
|
+
"<dialog>",
|
|
1622
|
+
"fixed inset-0 div"
|
|
1623
|
+
],
|
|
1624
|
+
"related": [
|
|
1625
|
+
"AlertDialog",
|
|
1626
|
+
"Sheet",
|
|
1627
|
+
"ResponsiveDialog",
|
|
1628
|
+
"CommandPalette"
|
|
1629
|
+
],
|
|
700
1630
|
"since": "0.0.0",
|
|
701
|
-
"docs": [
|
|
1631
|
+
"docs": [
|
|
1632
|
+
"docs/adr/012-overlay-presence-motion.md"
|
|
1633
|
+
]
|
|
702
1634
|
},
|
|
703
1635
|
"AlertDialog": {
|
|
704
1636
|
"category": "overlays",
|
|
705
|
-
"parts": [
|
|
1637
|
+
"parts": [
|
|
1638
|
+
"AlertDialogTrigger",
|
|
1639
|
+
"AlertDialogPortal",
|
|
1640
|
+
"AlertDialogOverlay",
|
|
1641
|
+
"AlertDialogContent",
|
|
1642
|
+
"AlertDialogHeader",
|
|
1643
|
+
"AlertDialogTitle",
|
|
1644
|
+
"AlertDialogDescription",
|
|
1645
|
+
"AlertDialogFooter",
|
|
1646
|
+
"AlertDialogAction",
|
|
1647
|
+
"AlertDialogCancel"
|
|
1648
|
+
],
|
|
706
1649
|
"useWhen": "A decision the user must make before continuing (delete, discard): no outside-click dismiss, explicit Action and Cancel.",
|
|
707
1650
|
"dontUseWhen": "A dismissible task (`Dialog`) or a one-line confirm around a trigger (`ConfirmActionButton`).",
|
|
708
|
-
"replacesRawHtml": [
|
|
709
|
-
|
|
1651
|
+
"replacesRawHtml": [
|
|
1652
|
+
"window.confirm()"
|
|
1653
|
+
],
|
|
1654
|
+
"related": [
|
|
1655
|
+
"Dialog",
|
|
1656
|
+
"ConfirmActionButton"
|
|
1657
|
+
],
|
|
710
1658
|
"since": "0.0.0"
|
|
711
1659
|
},
|
|
712
1660
|
"Sheet": {
|
|
713
1661
|
"category": "overlays",
|
|
714
|
-
"parts": [
|
|
1662
|
+
"parts": [
|
|
1663
|
+
"SheetTrigger",
|
|
1664
|
+
"SheetPortal",
|
|
1665
|
+
"SheetOverlay",
|
|
1666
|
+
"SheetContent",
|
|
1667
|
+
"SheetHeader",
|
|
1668
|
+
"SheetTitle",
|
|
1669
|
+
"SheetDescription",
|
|
1670
|
+
"SheetBody",
|
|
1671
|
+
"SheetFooter",
|
|
1672
|
+
"SheetClose"
|
|
1673
|
+
],
|
|
715
1674
|
"useWhen": "A panel sliding in from an edge for a secondary task or detail: `side`, sizes, the Dialog accessibility model, `SheetBody` as the scrolling region between header and footer.",
|
|
716
1675
|
"dontUseWhen": "Centred content (`Dialog`) or a persistent split view (`MasterDetailLayout`).",
|
|
717
|
-
"replacesRawHtml": [
|
|
718
|
-
|
|
1676
|
+
"replacesRawHtml": [
|
|
1677
|
+
"fixed right-0 h-full div"
|
|
1678
|
+
],
|
|
1679
|
+
"related": [
|
|
1680
|
+
"SideDrawer",
|
|
1681
|
+
"Dialog",
|
|
1682
|
+
"ResponsiveDialog"
|
|
1683
|
+
],
|
|
719
1684
|
"since": "0.0.0"
|
|
720
1685
|
},
|
|
721
1686
|
"SideDrawer": {
|
|
722
1687
|
"category": "overlays",
|
|
723
1688
|
"useWhen": "Only in code that already uses it: the earlier slide-in panel API (`open`, `onClose`, `title`, `width`).",
|
|
724
1689
|
"dontUseWhen": "New code — `Sheet` has the same behaviour with composable parts.",
|
|
725
|
-
"related": [
|
|
1690
|
+
"related": [
|
|
1691
|
+
"Sheet"
|
|
1692
|
+
],
|
|
726
1693
|
"since": "0.0.0"
|
|
727
1694
|
},
|
|
728
1695
|
"ResponsiveDialog": {
|
|
729
1696
|
"category": "overlays",
|
|
730
1697
|
"useWhen": "A modal that should be a `Dialog` on desktop and a bottom `Sheet` below the `sm` breakpoint, decided after mount.",
|
|
731
1698
|
"dontUseWhen": "The presentation must be fixed (`Dialog`, `Sheet`).",
|
|
732
|
-
"related": [
|
|
1699
|
+
"related": [
|
|
1700
|
+
"Dialog",
|
|
1701
|
+
"Sheet"
|
|
1702
|
+
],
|
|
733
1703
|
"since": "1.3.0"
|
|
734
1704
|
},
|
|
735
1705
|
"Popover": {
|
|
736
1706
|
"category": "overlays",
|
|
737
|
-
"parts": [
|
|
1707
|
+
"parts": [
|
|
1708
|
+
"PopoverTrigger",
|
|
1709
|
+
"PopoverAnchor",
|
|
1710
|
+
"PopoverPortal",
|
|
1711
|
+
"PopoverContent",
|
|
1712
|
+
"PopoverClose"
|
|
1713
|
+
],
|
|
738
1714
|
"useWhen": "Interactive content anchored to a trigger: a small form, a picker, a filter panel.",
|
|
739
1715
|
"dontUseWhen": "A short non-interactive label (`Tooltip`), a preview on hover (`HoverCard`) or a list of actions (`DropdownMenu`).",
|
|
740
|
-
"replacesRawHtml": [
|
|
741
|
-
|
|
1716
|
+
"replacesRawHtml": [
|
|
1717
|
+
"absolute-positioned div toggled by state"
|
|
1718
|
+
],
|
|
1719
|
+
"related": [
|
|
1720
|
+
"Tooltip",
|
|
1721
|
+
"HoverCard",
|
|
1722
|
+
"DropdownMenu"
|
|
1723
|
+
],
|
|
742
1724
|
"since": "0.0.0"
|
|
743
1725
|
},
|
|
744
1726
|
"HoverCard": {
|
|
745
1727
|
"category": "overlays",
|
|
746
|
-
"parts": [
|
|
1728
|
+
"parts": [
|
|
1729
|
+
"HoverCardTrigger",
|
|
1730
|
+
"HoverCardPortal",
|
|
1731
|
+
"HoverCardContent"
|
|
1732
|
+
],
|
|
747
1733
|
"useWhen": "A rich preview when hovering a link or name (a person card, a record summary), for sighted pointer users.",
|
|
748
1734
|
"dontUseWhen": "The content is essential (it is hover-only) or interactive (`Popover`).",
|
|
749
|
-
"related": [
|
|
1735
|
+
"related": [
|
|
1736
|
+
"Popover",
|
|
1737
|
+
"Tooltip"
|
|
1738
|
+
],
|
|
750
1739
|
"since": "0.0.0"
|
|
751
1740
|
},
|
|
752
1741
|
"Tooltip": {
|
|
753
1742
|
"category": "overlays",
|
|
754
|
-
"parts": [
|
|
1743
|
+
"parts": [
|
|
1744
|
+
"TooltipProvider",
|
|
1745
|
+
"TooltipTrigger",
|
|
1746
|
+
"TooltipPortal",
|
|
1747
|
+
"TooltipContent"
|
|
1748
|
+
],
|
|
755
1749
|
"useWhen": "A short label for a control on hover and focus; the sealed `Tooltip` takes `content`, the parts compose.",
|
|
756
1750
|
"dontUseWhen": "The text is essential to use the control (make it visible) or interactive (`Popover`).",
|
|
757
|
-
"replacesRawHtml": [
|
|
758
|
-
|
|
1751
|
+
"replacesRawHtml": [
|
|
1752
|
+
"title=\"…\""
|
|
1753
|
+
],
|
|
1754
|
+
"related": [
|
|
1755
|
+
"IconButton",
|
|
1756
|
+
"Popover",
|
|
1757
|
+
"Kbd"
|
|
1758
|
+
],
|
|
759
1759
|
"since": "0.0.0"
|
|
760
1760
|
},
|
|
761
1761
|
"DropdownMenu": {
|
|
762
1762
|
"category": "overlays",
|
|
763
|
-
"parts": [
|
|
1763
|
+
"parts": [
|
|
1764
|
+
"DropdownMenuTrigger",
|
|
1765
|
+
"DropdownMenuPortal",
|
|
1766
|
+
"DropdownMenuContent",
|
|
1767
|
+
"DropdownMenuItem",
|
|
1768
|
+
"DropdownMenuCheckboxItem",
|
|
1769
|
+
"DropdownMenuRadioGroup",
|
|
1770
|
+
"DropdownMenuRadioItem",
|
|
1771
|
+
"DropdownMenuGroup",
|
|
1772
|
+
"DropdownMenuLabel",
|
|
1773
|
+
"DropdownMenuSeparator",
|
|
1774
|
+
"DropdownMenuShortcut",
|
|
1775
|
+
"DropdownMenuSub",
|
|
1776
|
+
"DropdownMenuSubTrigger",
|
|
1777
|
+
"DropdownMenuSubContent"
|
|
1778
|
+
],
|
|
764
1779
|
"useWhen": "A menu of actions from a button: items, checkbox and radio items, groups, shortcuts, submenus; `/testing` ships `openMenu`.",
|
|
765
1780
|
"dontUseWhen": "Choosing a form value (`Select`), right-click (`ContextMenu`) or a form inside (`Popover`).",
|
|
766
|
-
"replacesRawHtml": [
|
|
767
|
-
|
|
1781
|
+
"replacesRawHtml": [
|
|
1782
|
+
"<ul> shown on click",
|
|
1783
|
+
"<select> used as a menu"
|
|
1784
|
+
],
|
|
1785
|
+
"related": [
|
|
1786
|
+
"ContextMenu",
|
|
1787
|
+
"NewMenu",
|
|
1788
|
+
"Select",
|
|
1789
|
+
"Popover"
|
|
1790
|
+
],
|
|
768
1791
|
"since": "0.0.0"
|
|
769
1792
|
},
|
|
770
1793
|
"ContextMenu": {
|
|
771
1794
|
"category": "overlays",
|
|
772
|
-
"parts": [
|
|
1795
|
+
"parts": [
|
|
1796
|
+
"ContextMenuTrigger",
|
|
1797
|
+
"ContextMenuPortal",
|
|
1798
|
+
"ContextMenuContent",
|
|
1799
|
+
"ContextMenuItem",
|
|
1800
|
+
"ContextMenuCheckboxItem",
|
|
1801
|
+
"ContextMenuRadioGroup",
|
|
1802
|
+
"ContextMenuRadioItem",
|
|
1803
|
+
"ContextMenuGroup",
|
|
1804
|
+
"ContextMenuLabel",
|
|
1805
|
+
"ContextMenuSeparator",
|
|
1806
|
+
"ContextMenuShortcut",
|
|
1807
|
+
"ContextMenuSub",
|
|
1808
|
+
"ContextMenuSubTrigger",
|
|
1809
|
+
"ContextMenuSubContent"
|
|
1810
|
+
],
|
|
773
1811
|
"useWhen": "Actions on right-click or long-press over a region, with the same item model as `DropdownMenu`.",
|
|
774
1812
|
"dontUseWhen": "The actions must be discoverable (`DropdownMenu` from a visible trigger).",
|
|
775
|
-
"replacesRawHtml": [
|
|
776
|
-
|
|
1813
|
+
"replacesRawHtml": [
|
|
1814
|
+
"onContextMenu + positioned div"
|
|
1815
|
+
],
|
|
1816
|
+
"related": [
|
|
1817
|
+
"DropdownMenu"
|
|
1818
|
+
],
|
|
777
1819
|
"since": "0.0.0"
|
|
778
1820
|
},
|
|
779
1821
|
"CommandPalette": {
|
|
780
1822
|
"category": "overlays",
|
|
781
1823
|
"useWhen": "The ⌘K command and search dialog: `cmdk` inside `Dialog`, groups, shortcuts, async results.",
|
|
782
1824
|
"dontUseWhen": "Searching one list (`SearchInput`) or picking a form value (`Combobox`).",
|
|
783
|
-
"related": [
|
|
1825
|
+
"related": [
|
|
1826
|
+
"Dialog",
|
|
1827
|
+
"KeyboardShortcutsDialog",
|
|
1828
|
+
"Combobox"
|
|
1829
|
+
],
|
|
784
1830
|
"since": "0.0.0"
|
|
785
1831
|
},
|
|
786
1832
|
"KeyboardShortcutsDialog": {
|
|
787
1833
|
"category": "overlays",
|
|
788
1834
|
"useWhen": "The \"?\" help dialog listing keyboard shortcuts by section; no props shows the universal General section.",
|
|
789
1835
|
"dontUseWhen": "Showing one shortcut next to a control (`Kbd`, `KbdHint`).",
|
|
790
|
-
"related": [
|
|
1836
|
+
"related": [
|
|
1837
|
+
"Kbd",
|
|
1838
|
+
"CommandPalette"
|
|
1839
|
+
],
|
|
791
1840
|
"since": "0.0.0"
|
|
792
1841
|
},
|
|
793
|
-
|
|
794
1842
|
"Tabs": {
|
|
795
1843
|
"category": "navigation",
|
|
796
|
-
"parts": [
|
|
1844
|
+
"parts": [
|
|
1845
|
+
"TabsList",
|
|
1846
|
+
"TabsTrigger",
|
|
1847
|
+
"TabsContent"
|
|
1848
|
+
],
|
|
797
1849
|
"useWhen": "Switch between panels of one page; roving focus, `value`/`onValueChange`.",
|
|
798
1850
|
"dontUseWhen": "The switch changes a mode rather than showing another panel (`ToggleGroup`), or it is the mobile app-level bar (`BottomNav`).",
|
|
799
|
-
"replacesRawHtml": [
|
|
800
|
-
|
|
1851
|
+
"replacesRawHtml": [
|
|
1852
|
+
"<ul role=\"tablist\">",
|
|
1853
|
+
"buttons toggling useState panels"
|
|
1854
|
+
],
|
|
1855
|
+
"related": [
|
|
1856
|
+
"ToggleGroup",
|
|
1857
|
+
"ChannelTabs",
|
|
1858
|
+
"BottomNav"
|
|
1859
|
+
],
|
|
801
1860
|
"since": "0.0.0"
|
|
802
1861
|
},
|
|
803
1862
|
"ChannelTabs": {
|
|
804
1863
|
"category": "navigation",
|
|
805
1864
|
"useWhen": "Pill tabs switching between communication channels on a thread, each with a toned status dot and unread count; fully controlled.",
|
|
806
1865
|
"dontUseWhen": "Generic panels (`Tabs`).",
|
|
807
|
-
"related": [
|
|
1866
|
+
"related": [
|
|
1867
|
+
"Tabs",
|
|
1868
|
+
"StatusDot",
|
|
1869
|
+
"MessageBubble"
|
|
1870
|
+
],
|
|
808
1871
|
"since": "1.5.0"
|
|
809
1872
|
},
|
|
810
1873
|
"Breadcrumb": {
|
|
811
1874
|
"category": "navigation",
|
|
812
|
-
"parts": [
|
|
1875
|
+
"parts": [
|
|
1876
|
+
"BreadcrumbList",
|
|
1877
|
+
"BreadcrumbItem",
|
|
1878
|
+
"BreadcrumbLink",
|
|
1879
|
+
"BreadcrumbPage",
|
|
1880
|
+
"BreadcrumbSeparator"
|
|
1881
|
+
],
|
|
813
1882
|
"useWhen": "The path to the current page; `BreadcrumbPage` marks the current one, `BreadcrumbLink asChild` wraps your router link.",
|
|
814
1883
|
"dontUseWhen": "The page title itself (`PageHeader`) or the app-level bar (`AppHeaderBreadcrumb` inside `AppHeader`).",
|
|
815
|
-
"replacesRawHtml": [
|
|
816
|
-
|
|
1884
|
+
"replacesRawHtml": [
|
|
1885
|
+
"<nav aria-label=\"breadcrumb\"><ol>"
|
|
1886
|
+
],
|
|
1887
|
+
"related": [
|
|
1888
|
+
"PageHeader",
|
|
1889
|
+
"AppHeader"
|
|
1890
|
+
],
|
|
817
1891
|
"since": "0.0.0"
|
|
818
1892
|
},
|
|
819
1893
|
"Pagination": {
|
|
820
1894
|
"category": "navigation",
|
|
821
1895
|
"useWhen": "Page controls for a paged list: current/total pages, sibling count, optional total items.",
|
|
822
|
-
"dontUseWhen": "Inside a `DataTable
|
|
823
|
-
"replacesRawHtml": [
|
|
824
|
-
|
|
1896
|
+
"dontUseWhen": "Infinite scroll. Inside a `DataTable`, `DataTablePagination` is the same component with the table defaults.",
|
|
1897
|
+
"replacesRawHtml": [
|
|
1898
|
+
"<nav> of page number buttons"
|
|
1899
|
+
],
|
|
1900
|
+
"related": [
|
|
1901
|
+
"DataTable",
|
|
1902
|
+
"DataTableView"
|
|
1903
|
+
],
|
|
825
1904
|
"since": "0.0.0"
|
|
826
1905
|
},
|
|
827
1906
|
"Stepper": {
|
|
828
1907
|
"category": "navigation",
|
|
829
1908
|
"useWhen": "Named steps of a multi-step flow, horizontal or vertical, with the current step marked.",
|
|
830
1909
|
"dontUseWhen": "Unnamed progress (`SegmentedProgress`) or a timeline of past events (`EngagementTimeline`).",
|
|
831
|
-
"related": [
|
|
1910
|
+
"related": [
|
|
1911
|
+
"SegmentedProgress",
|
|
1912
|
+
"EngagementTimeline"
|
|
1913
|
+
],
|
|
832
1914
|
"since": "0.0.0"
|
|
833
1915
|
},
|
|
834
1916
|
"BottomNav": {
|
|
835
1917
|
"category": "navigation",
|
|
836
1918
|
"useWhen": "The mobile tab bar at the bottom of the app: tabs with icons and badges, controlled `value`.",
|
|
837
1919
|
"dontUseWhen": "Desktop navigation (`Sidebar`) or in-page panels (`Tabs`).",
|
|
838
|
-
"related": [
|
|
1920
|
+
"related": [
|
|
1921
|
+
"Sidebar",
|
|
1922
|
+
"Tabs",
|
|
1923
|
+
"StickyActionBar"
|
|
1924
|
+
],
|
|
839
1925
|
"since": "1.2.0"
|
|
840
1926
|
},
|
|
841
1927
|
"FolderTree": {
|
|
842
1928
|
"category": "navigation",
|
|
843
1929
|
"useWhen": "A collapsible tree of folders with an active node, default-open ids and selection callback.",
|
|
844
1930
|
"dontUseWhen": "A flat list (`ClientRailItem`) or a file list (`DocumentList`).",
|
|
845
|
-
"related": [
|
|
1931
|
+
"related": [
|
|
1932
|
+
"DocumentsWorkspaceLayout",
|
|
1933
|
+
"ClientRailItem",
|
|
1934
|
+
"Collapsible"
|
|
1935
|
+
],
|
|
846
1936
|
"since": "1.2.0"
|
|
847
1937
|
},
|
|
848
1938
|
"ClientRailItem": {
|
|
849
1939
|
"category": "navigation",
|
|
850
|
-
"parts": [
|
|
1940
|
+
"parts": [
|
|
1941
|
+
"ClientRailGroupHeader"
|
|
1942
|
+
],
|
|
851
1943
|
"useWhen": "One client row in the Documents left rail (avatar, name, counts) plus the section label above a group.",
|
|
852
1944
|
"dontUseWhen": "Picking a client in a form (`ClientSelect`) or the main navigation (`SidebarLink`).",
|
|
853
|
-
"related": [
|
|
1945
|
+
"related": [
|
|
1946
|
+
"DocumentsWorkspaceLayout",
|
|
1947
|
+
"ClientSelect",
|
|
1948
|
+
"Sidebar"
|
|
1949
|
+
],
|
|
854
1950
|
"since": "1.4.0"
|
|
855
1951
|
},
|
|
856
|
-
|
|
857
1952
|
"Stack": {
|
|
858
1953
|
"category": "layout",
|
|
859
1954
|
"useWhen": "A vertical (or `direction=\"row\"`) flex container that owns the gap between its children with tokenised `gap` and alignment.",
|
|
860
1955
|
"dontUseWhen": "A wrapping horizontal row (`Inline`) or a bordered box (`Surface`).",
|
|
861
|
-
"replacesRawHtml": [
|
|
862
|
-
|
|
1956
|
+
"replacesRawHtml": [
|
|
1957
|
+
"<div class=\"flex flex-col gap-4\">"
|
|
1958
|
+
],
|
|
1959
|
+
"related": [
|
|
1960
|
+
"Inline",
|
|
1961
|
+
"Surface"
|
|
1962
|
+
],
|
|
863
1963
|
"since": "1.33.0"
|
|
864
1964
|
},
|
|
865
1965
|
"Inline": {
|
|
866
1966
|
"category": "layout",
|
|
867
1967
|
"useWhen": "A horizontal wrapping row with children centred on the baseline and a tokenised gap: a row of chips, a button row, meta items.",
|
|
868
1968
|
"dontUseWhen": "A column (`Stack`) or a toolbar of controls that must share one control size (`Toolbar`).",
|
|
869
|
-
"replacesRawHtml": [
|
|
870
|
-
|
|
1969
|
+
"replacesRawHtml": [
|
|
1970
|
+
"<div class=\"flex flex-wrap items-center gap-2\">"
|
|
1971
|
+
],
|
|
1972
|
+
"related": [
|
|
1973
|
+
"Stack",
|
|
1974
|
+
"Toolbar"
|
|
1975
|
+
],
|
|
871
1976
|
"since": "1.33.0"
|
|
872
1977
|
},
|
|
873
1978
|
"Surface": {
|
|
874
1979
|
"category": "layout",
|
|
875
1980
|
"useWhen": "The bordered box content sits on: surface background, 1px rule, radius, `padding` role (none/sm/md/lg).",
|
|
876
1981
|
"dontUseWhen": "You need header/title/footer parts or an interactive variant (`Card`).",
|
|
877
|
-
"replacesRawHtml": [
|
|
878
|
-
|
|
1982
|
+
"replacesRawHtml": [
|
|
1983
|
+
"<div class=\"rounded-xl border bg-white p-4\">"
|
|
1984
|
+
],
|
|
1985
|
+
"related": [
|
|
1986
|
+
"Card",
|
|
1987
|
+
"Stack"
|
|
1988
|
+
],
|
|
879
1989
|
"since": "1.33.0"
|
|
880
1990
|
},
|
|
881
1991
|
"Card": {
|
|
882
1992
|
"category": "layout",
|
|
883
|
-
"parts": [
|
|
884
|
-
|
|
1993
|
+
"parts": [
|
|
1994
|
+
"CardHeader",
|
|
1995
|
+
"CardTitle",
|
|
1996
|
+
"CardDescription",
|
|
1997
|
+
"CardAction",
|
|
1998
|
+
"CardContent",
|
|
1999
|
+
"CardFooter"
|
|
2000
|
+
],
|
|
2001
|
+
"helpers": [
|
|
2002
|
+
"cardVariants"
|
|
2003
|
+
],
|
|
885
2004
|
"useWhen": "A surface with structure: header, title, description, trailing action, content, footer; `variant` default, interactive (hover border) or flat (nested).",
|
|
886
2005
|
"dontUseWhen": "A plain box without parts (`Surface`), a KPI tile (`KpiCard`) or a domain card that already exists (`EngagementCard`, `DocumentFileRow`).",
|
|
887
|
-
"replacesRawHtml": [
|
|
888
|
-
|
|
2006
|
+
"replacesRawHtml": [
|
|
2007
|
+
"<div class=\"rounded-xl border shadow\">"
|
|
2008
|
+
],
|
|
2009
|
+
"related": [
|
|
2010
|
+
"Surface",
|
|
2011
|
+
"KpiCard",
|
|
2012
|
+
"Pressable"
|
|
2013
|
+
],
|
|
889
2014
|
"since": "0.0.0"
|
|
890
2015
|
},
|
|
891
2016
|
"Separator": {
|
|
892
2017
|
"category": "layout",
|
|
893
2018
|
"useWhen": "A horizontal or vertical rule between groups, decorative or semantic.",
|
|
894
2019
|
"dontUseWhen": "The divider carries a category label (`CategoryDivider`) or sits inside a menu (`DropdownMenuSeparator`).",
|
|
895
|
-
"replacesRawHtml": [
|
|
896
|
-
|
|
2020
|
+
"replacesRawHtml": [
|
|
2021
|
+
"<hr>",
|
|
2022
|
+
"<div class=\"border-t\">"
|
|
2023
|
+
],
|
|
2024
|
+
"related": [
|
|
2025
|
+
"CategoryDivider"
|
|
2026
|
+
],
|
|
897
2027
|
"since": "0.0.0"
|
|
898
2028
|
},
|
|
899
2029
|
"AspectRatio": {
|
|
900
2030
|
"category": "layout",
|
|
901
2031
|
"useWhen": "Reserve a fixed ratio box for an image, video or embed.",
|
|
902
2032
|
"dontUseWhen": "The media has intrinsic size (plain `<img>` with width/height).",
|
|
903
|
-
"replacesRawHtml": [
|
|
904
|
-
|
|
2033
|
+
"replacesRawHtml": [
|
|
2034
|
+
"padding-top percentage hack"
|
|
2035
|
+
],
|
|
2036
|
+
"related": [
|
|
2037
|
+
"PdfPreview"
|
|
2038
|
+
],
|
|
905
2039
|
"since": "0.0.0"
|
|
906
2040
|
},
|
|
907
2041
|
"ScrollArea": {
|
|
908
2042
|
"category": "layout",
|
|
909
|
-
"parts": [
|
|
2043
|
+
"parts": [
|
|
2044
|
+
"ScrollBar"
|
|
2045
|
+
],
|
|
910
2046
|
"useWhen": "A scrollable region with styled, consistent scrollbars (panels, menus, side rails).",
|
|
911
2047
|
"dontUseWhen": "The document scrolls (leave it to the browser).",
|
|
912
|
-
"replacesRawHtml": [
|
|
913
|
-
|
|
2048
|
+
"replacesRawHtml": [
|
|
2049
|
+
"<div class=\"overflow-auto\">"
|
|
2050
|
+
],
|
|
2051
|
+
"related": [
|
|
2052
|
+
"Sheet",
|
|
2053
|
+
"Sidebar"
|
|
2054
|
+
],
|
|
914
2055
|
"since": "0.0.0"
|
|
915
2056
|
},
|
|
916
2057
|
"Collapsible": {
|
|
917
2058
|
"category": "layout",
|
|
918
|
-
"parts": [
|
|
2059
|
+
"parts": [
|
|
2060
|
+
"CollapsibleTrigger",
|
|
2061
|
+
"CollapsibleContent"
|
|
2062
|
+
],
|
|
919
2063
|
"useWhen": "Show/hide one region from a trigger, animated and reduced-motion aware.",
|
|
920
2064
|
"dontUseWhen": "Several mutually exclusive sections (`Accordion`).",
|
|
921
|
-
"replacesRawHtml": [
|
|
922
|
-
|
|
2065
|
+
"replacesRawHtml": [
|
|
2066
|
+
"<details>/<summary>",
|
|
2067
|
+
"useState toggle"
|
|
2068
|
+
],
|
|
2069
|
+
"related": [
|
|
2070
|
+
"Accordion",
|
|
2071
|
+
"FolderTree"
|
|
2072
|
+
],
|
|
923
2073
|
"since": "0.0.0"
|
|
924
2074
|
},
|
|
925
2075
|
"Accordion": {
|
|
926
2076
|
"category": "layout",
|
|
927
|
-
"parts": [
|
|
2077
|
+
"parts": [
|
|
2078
|
+
"AccordionItem",
|
|
2079
|
+
"AccordionTrigger",
|
|
2080
|
+
"AccordionContent"
|
|
2081
|
+
],
|
|
928
2082
|
"useWhen": "A list of expandable sections, single or multiple open.",
|
|
929
2083
|
"dontUseWhen": "One region (`Collapsible`) or navigation between panels (`Tabs`).",
|
|
930
|
-
"replacesRawHtml": [
|
|
931
|
-
|
|
2084
|
+
"replacesRawHtml": [
|
|
2085
|
+
"stack of <details>"
|
|
2086
|
+
],
|
|
2087
|
+
"related": [
|
|
2088
|
+
"Collapsible",
|
|
2089
|
+
"Tabs"
|
|
2090
|
+
],
|
|
932
2091
|
"since": "0.0.0"
|
|
933
2092
|
},
|
|
934
2093
|
"Section": {
|
|
935
2094
|
"category": "layout",
|
|
936
|
-
"parts": [
|
|
2095
|
+
"parts": [
|
|
2096
|
+
"SectionHead"
|
|
2097
|
+
],
|
|
937
2098
|
"useWhen": "A max-width centred content section with the canonical `--content-pad` gutter and a `SectionHead` title row.",
|
|
938
2099
|
"dontUseWhen": "The page already sits in `Content` of the `Shell` and needs a page title (`PageHeader`).",
|
|
939
|
-
"replacesRawHtml": [
|
|
940
|
-
|
|
2100
|
+
"replacesRawHtml": [
|
|
2101
|
+
"<section class=\"mx-auto max-w-… px-8\">"
|
|
2102
|
+
],
|
|
2103
|
+
"related": [
|
|
2104
|
+
"SectionHeader",
|
|
2105
|
+
"PageHeader",
|
|
2106
|
+
"Shell"
|
|
2107
|
+
],
|
|
941
2108
|
"since": "0.0.0"
|
|
942
2109
|
},
|
|
943
2110
|
"SectionHeader": {
|
|
944
2111
|
"category": "layout",
|
|
945
2112
|
"useWhen": "A title + description block for a marketing-style or settings section.",
|
|
946
2113
|
"dontUseWhen": "The top of a page (`PageHeader`) or a form group (`FieldsetLegend`).",
|
|
947
|
-
"replacesRawHtml": [
|
|
948
|
-
|
|
2114
|
+
"replacesRawHtml": [
|
|
2115
|
+
"<h2> + <p> pair"
|
|
2116
|
+
],
|
|
2117
|
+
"related": [
|
|
2118
|
+
"PageHeader",
|
|
2119
|
+
"Heading",
|
|
2120
|
+
"Section"
|
|
2121
|
+
],
|
|
949
2122
|
"since": "0.0.0"
|
|
950
2123
|
},
|
|
951
2124
|
"PageHeader": {
|
|
952
2125
|
"category": "layout",
|
|
953
|
-
"parts": [
|
|
2126
|
+
"parts": [
|
|
2127
|
+
"PageHeaderSpec",
|
|
2128
|
+
"PageHeaderSep"
|
|
2129
|
+
],
|
|
954
2130
|
"useWhen": "The top-of-page title block: eyebrow, headline with trailing actions, description and a meta row (`PageHeaderSpec` items separated by `PageHeaderSep`).",
|
|
955
2131
|
"dontUseWhen": "The sticky app bar (`AppHeader`) or a section inside the page (`SectionHeader`).",
|
|
956
|
-
"replacesRawHtml": [
|
|
957
|
-
|
|
2132
|
+
"replacesRawHtml": [
|
|
2133
|
+
"<div class=\"flex items-center justify-between\"><h1>"
|
|
2134
|
+
],
|
|
2135
|
+
"related": [
|
|
2136
|
+
"AppHeader",
|
|
2137
|
+
"SectionHeader",
|
|
2138
|
+
"Breadcrumb"
|
|
2139
|
+
],
|
|
958
2140
|
"since": "0.3.0"
|
|
959
2141
|
},
|
|
960
2142
|
"CategoryDivider": {
|
|
961
2143
|
"category": "layout",
|
|
962
|
-
"parts": [
|
|
2144
|
+
"parts": [
|
|
2145
|
+
"CategoryTag"
|
|
2146
|
+
],
|
|
963
2147
|
"useWhen": "Separate a run of items by service line: a tone-tinted category pill, a hairline and an optional count — the one place per-service colour is allowed.",
|
|
964
2148
|
"dontUseWhen": "A plain rule (`Separator`) or a status (`StatusBadge`).",
|
|
965
|
-
"related": [
|
|
2149
|
+
"related": [
|
|
2150
|
+
"Separator",
|
|
2151
|
+
"serviceToneStyle"
|
|
2152
|
+
],
|
|
966
2153
|
"since": "1.3.0"
|
|
967
2154
|
},
|
|
968
2155
|
"StickyStack": {
|
|
969
2156
|
"category": "layout",
|
|
970
|
-
"parts": [
|
|
2157
|
+
"parts": [
|
|
2158
|
+
"StickyStackLayer",
|
|
2159
|
+
"StickyStackSticky",
|
|
2160
|
+
"StickyStackSectionHeader"
|
|
2161
|
+
],
|
|
971
2162
|
"useWhen": "Several fixed layers (app header, toolbar, section headers) that must stack without overlapping: layers are measured and sticky regions consume the offset.",
|
|
972
2163
|
"dontUseWhen": "One sticky element (`position: sticky` on it) or a bottom bar (`StickyActionBar`).",
|
|
973
|
-
"replacesRawHtml": [
|
|
974
|
-
|
|
2164
|
+
"replacesRawHtml": [
|
|
2165
|
+
"hard-coded top-[56px] sticky offsets"
|
|
2166
|
+
],
|
|
2167
|
+
"related": [
|
|
2168
|
+
"AppHeader",
|
|
2169
|
+
"StickyActionBar"
|
|
2170
|
+
],
|
|
975
2171
|
"since": "1.30.1"
|
|
976
2172
|
},
|
|
977
2173
|
"DetailGrid": {
|
|
978
2174
|
"category": "layout",
|
|
979
2175
|
"label": "Detail layout",
|
|
980
|
-
"parts": [
|
|
2176
|
+
"parts": [
|
|
2177
|
+
"DetailSpine",
|
|
2178
|
+
"DetailSpineHeader",
|
|
2179
|
+
"DetailSpineSection",
|
|
2180
|
+
"DetailSpineStats",
|
|
2181
|
+
"DetailMain"
|
|
2182
|
+
],
|
|
981
2183
|
"useWhen": "A record detail page: a sticky 320px spine (identity, key facts, stats) and a scrolling main column for tabs, sections and feeds.",
|
|
982
2184
|
"dontUseWhen": "A list with a selected item beside it (`MasterDetailLayout`) or a plain page (`Section`).",
|
|
983
|
-
"replacesRawHtml": [
|
|
984
|
-
|
|
2185
|
+
"replacesRawHtml": [
|
|
2186
|
+
"<div class=\"grid grid-cols-[320px_1fr]\">"
|
|
2187
|
+
],
|
|
2188
|
+
"related": [
|
|
2189
|
+
"MasterDetailLayout",
|
|
2190
|
+
"MetadataGrid",
|
|
2191
|
+
"Tabs"
|
|
2192
|
+
],
|
|
985
2193
|
"since": "0.3.0"
|
|
986
2194
|
},
|
|
987
2195
|
"MasterDetailLayout": {
|
|
988
2196
|
"category": "layout",
|
|
989
2197
|
"useWhen": "A list on the left and the selected item's detail on the right, collapsing to one pane on small screens.",
|
|
990
2198
|
"dontUseWhen": "A record page with a spine (`DetailGrid`) or the three-pane documents workspace (`DocumentsWorkspaceLayout`).",
|
|
991
|
-
"related": [
|
|
2199
|
+
"related": [
|
|
2200
|
+
"DetailGrid",
|
|
2201
|
+
"DocumentsWorkspaceLayout"
|
|
2202
|
+
],
|
|
992
2203
|
"since": "1.3.0"
|
|
993
2204
|
},
|
|
994
2205
|
"DocumentsWorkspaceLayout": {
|
|
995
2206
|
"category": "layout",
|
|
996
2207
|
"useWhen": "The three-pane documents workspace: clients rail, folder tree and files area as slots.",
|
|
997
2208
|
"dontUseWhen": "Two panes (`MasterDetailLayout`).",
|
|
998
|
-
"related": [
|
|
2209
|
+
"related": [
|
|
2210
|
+
"ClientRailItem",
|
|
2211
|
+
"FolderTree",
|
|
2212
|
+
"DocumentDetailPanel",
|
|
2213
|
+
"MasterDetailLayout"
|
|
2214
|
+
],
|
|
999
2215
|
"since": "1.4.0"
|
|
1000
2216
|
},
|
|
1001
2217
|
"DashGrid": {
|
|
1002
2218
|
"category": "layout",
|
|
1003
2219
|
"useWhen": "A dashboard of reorderable widgets in 2–4 columns with the order persisted under `storageKey`.",
|
|
1004
2220
|
"dontUseWhen": "A static grid of cards (CSS grid of `Card`s).",
|
|
1005
|
-
"related": [
|
|
2221
|
+
"related": [
|
|
2222
|
+
"KpiCard",
|
|
2223
|
+
"Card"
|
|
2224
|
+
],
|
|
1006
2225
|
"since": "1.2.0"
|
|
1007
2226
|
},
|
|
1008
2227
|
"RouteTransition": {
|
|
1009
2228
|
"category": "layout",
|
|
1010
2229
|
"useWhen": "Fade and slide a page panel in when `routeKey` changes; respects reduced motion.",
|
|
1011
2230
|
"dontUseWhen": "Animating a component's own presence (the overlays already do) or a list (leave static).",
|
|
1012
|
-
"related": [
|
|
2231
|
+
"related": [
|
|
2232
|
+
"Shell"
|
|
2233
|
+
],
|
|
1013
2234
|
"since": "1.3.0"
|
|
1014
2235
|
},
|
|
1015
2236
|
"VisuallyHidden": {
|
|
1016
2237
|
"category": "layout",
|
|
1017
2238
|
"useWhen": "Text for assistive technology that must not be seen: the name of an icon-only control you compose yourself, a live-region message.",
|
|
1018
2239
|
"dontUseWhen": "Hiding from everyone (`hidden`) or an `IconButton` (it names itself).",
|
|
1019
|
-
"replacesRawHtml": [
|
|
1020
|
-
|
|
2240
|
+
"replacesRawHtml": [
|
|
2241
|
+
"class=\"sr-only\""
|
|
2242
|
+
],
|
|
2243
|
+
"related": [
|
|
2244
|
+
"IconButton"
|
|
2245
|
+
],
|
|
1021
2246
|
"since": "0.0.0"
|
|
1022
2247
|
},
|
|
1023
|
-
|
|
1024
2248
|
"Heading": {
|
|
1025
2249
|
"category": "typography",
|
|
1026
2250
|
"useWhen": "A heading: `level` sets the element (h1–h6), `size` the visual role when it differs; h1 once per screen.",
|
|
1027
2251
|
"dontUseWhen": "A label for a control (`Label`) or emphasised body text (`Text weight`).",
|
|
1028
|
-
"replacesRawHtml": [
|
|
1029
|
-
|
|
2252
|
+
"replacesRawHtml": [
|
|
2253
|
+
"<h1>",
|
|
2254
|
+
"<h2>",
|
|
2255
|
+
"<h3>",
|
|
2256
|
+
"<h4>"
|
|
2257
|
+
],
|
|
2258
|
+
"related": [
|
|
2259
|
+
"Text",
|
|
2260
|
+
"PageHeader",
|
|
2261
|
+
"SectionHeader"
|
|
2262
|
+
],
|
|
1030
2263
|
"since": "1.33.0",
|
|
1031
|
-
"docs": [
|
|
2264
|
+
"docs": [
|
|
2265
|
+
"docs/design-system/typography-roles.md"
|
|
2266
|
+
]
|
|
1032
2267
|
},
|
|
1033
2268
|
"Text": {
|
|
1034
2269
|
"category": "typography",
|
|
1035
2270
|
"useWhen": "Body, caption and label text: `size` is the typography role, `color` the token, `asChild` renders your element (a link, a `<p>`).",
|
|
1036
2271
|
"dontUseWhen": "A heading (`Heading`), an identifier or snippet (`Code`) or a control's label (`Label`).",
|
|
1037
|
-
"replacesRawHtml": [
|
|
1038
|
-
|
|
2272
|
+
"replacesRawHtml": [
|
|
2273
|
+
"<p>",
|
|
2274
|
+
"<span class=\"text-sm text-gray-500\">"
|
|
2275
|
+
],
|
|
2276
|
+
"related": [
|
|
2277
|
+
"Heading",
|
|
2278
|
+
"Code",
|
|
2279
|
+
"Eyebrow"
|
|
2280
|
+
],
|
|
1039
2281
|
"since": "1.33.0"
|
|
1040
2282
|
},
|
|
1041
2283
|
"Code": {
|
|
1042
2284
|
"category": "typography",
|
|
1043
2285
|
"useWhen": "Monospace text: an identifier, a path, a value, a snippet (inline or block); server-safe.",
|
|
1044
2286
|
"dontUseWhen": "A keyboard key (`Kbd`) or tabular figures in body text (`Numeric`).",
|
|
1045
|
-
"replacesRawHtml": [
|
|
1046
|
-
|
|
2287
|
+
"replacesRawHtml": [
|
|
2288
|
+
"<code>",
|
|
2289
|
+
"<pre>"
|
|
2290
|
+
],
|
|
2291
|
+
"related": [
|
|
2292
|
+
"Kbd",
|
|
2293
|
+
"Eyebrow"
|
|
2294
|
+
],
|
|
1047
2295
|
"since": "1.33.0"
|
|
1048
2296
|
},
|
|
1049
2297
|
"Kbd": {
|
|
1050
2298
|
"category": "typography",
|
|
1051
2299
|
"useWhen": "A keyboard key or shortcut, with platform spelling decided after mount (⌘ vs Ctrl).",
|
|
1052
2300
|
"dontUseWhen": "A hint next to a control in the intent-atom style (`KbdHint`) or code (`Code`).",
|
|
1053
|
-
"replacesRawHtml": [
|
|
1054
|
-
|
|
2301
|
+
"replacesRawHtml": [
|
|
2302
|
+
"<kbd>"
|
|
2303
|
+
],
|
|
2304
|
+
"related": [
|
|
2305
|
+
"Eyebrow",
|
|
2306
|
+
"KeyboardShortcutsDialog"
|
|
2307
|
+
],
|
|
1055
2308
|
"since": "1.33.0"
|
|
1056
2309
|
},
|
|
1057
2310
|
"Blockquote": {
|
|
1058
2311
|
"category": "typography",
|
|
1059
2312
|
"useWhen": "A quoted passage with the design system's rule and spacing.",
|
|
1060
2313
|
"dontUseWhen": "A callout with an intent (`Alert`).",
|
|
1061
|
-
"replacesRawHtml": [
|
|
1062
|
-
|
|
2314
|
+
"replacesRawHtml": [
|
|
2315
|
+
"<blockquote>"
|
|
2316
|
+
],
|
|
2317
|
+
"related": [
|
|
2318
|
+
"Alert",
|
|
2319
|
+
"Text"
|
|
2320
|
+
],
|
|
1063
2321
|
"since": "0.0.0"
|
|
1064
2322
|
},
|
|
1065
2323
|
"Eyebrow": {
|
|
1066
2324
|
"category": "typography",
|
|
1067
2325
|
"label": "Intent atoms",
|
|
1068
|
-
"parts": [
|
|
2326
|
+
"parts": [
|
|
2327
|
+
"MutedSpec",
|
|
2328
|
+
"Numeric",
|
|
2329
|
+
"KbdHint"
|
|
2330
|
+
],
|
|
1069
2331
|
"useWhen": "Intent-named text atoms that bake in typography and colour tokens: `Eyebrow` (small caps label), `MutedSpec` (secondary spec text), `Numeric` (tabular figures), `KbdHint` (a key hint).",
|
|
1070
2332
|
"dontUseWhen": "General body text with a chosen role (`Text`) or a heading (`Heading`).",
|
|
1071
|
-
"related": [
|
|
2333
|
+
"related": [
|
|
2334
|
+
"Text",
|
|
2335
|
+
"Kbd",
|
|
2336
|
+
"Stat"
|
|
2337
|
+
],
|
|
1072
2338
|
"since": "0.3.0"
|
|
1073
2339
|
},
|
|
1074
2340
|
"StarRating": {
|
|
1075
2341
|
"category": "data display",
|
|
1076
|
-
"helpers": [
|
|
2342
|
+
"helpers": [
|
|
2343
|
+
"starRatingVariants"
|
|
2344
|
+
],
|
|
1077
2345
|
"useWhen": "A display-only rating: fractional stars, `max`, sized variants.",
|
|
1078
2346
|
"dontUseWhen": "Capturing a rating (compose `RadioGroup` or `ToggleGroup` with star icons).",
|
|
1079
|
-
"related": [
|
|
2347
|
+
"related": [
|
|
2348
|
+
"Badge",
|
|
2349
|
+
"KpiCard"
|
|
2350
|
+
],
|
|
1080
2351
|
"since": "0.0.0"
|
|
1081
2352
|
},
|
|
1082
2353
|
"Stat": {
|
|
1083
2354
|
"category": "typography",
|
|
1084
2355
|
"useWhen": "A large number with a caption in display type.",
|
|
1085
2356
|
"dontUseWhen": "A dashboard tile with tone, icon and hint (`KpiCard`).",
|
|
1086
|
-
"related": [
|
|
2357
|
+
"related": [
|
|
2358
|
+
"KpiCard",
|
|
2359
|
+
"Eyebrow"
|
|
2360
|
+
],
|
|
1087
2361
|
"since": "0.0.0"
|
|
1088
2362
|
},
|
|
1089
|
-
|
|
1090
2363
|
"Table": {
|
|
1091
2364
|
"category": "data display",
|
|
1092
|
-
"parts": [
|
|
2365
|
+
"parts": [
|
|
2366
|
+
"TableHeader",
|
|
2367
|
+
"TableBody",
|
|
2368
|
+
"TableFooter",
|
|
2369
|
+
"TableRow",
|
|
2370
|
+
"TableHead",
|
|
2371
|
+
"TableCell",
|
|
2372
|
+
"TableCaption"
|
|
2373
|
+
],
|
|
1093
2374
|
"useWhen": "A bare semantic table with the design system's row, header and caption styling.",
|
|
1094
2375
|
"dontUseWhen": "A records table with toolbar, sorting and pagination (`DataTable`, `DataTableView`) or an editable matrix (`Grid`).",
|
|
1095
|
-
"replacesRawHtml": [
|
|
1096
|
-
|
|
2376
|
+
"replacesRawHtml": [
|
|
2377
|
+
"<table>",
|
|
2378
|
+
"<tr>",
|
|
2379
|
+
"<td>",
|
|
2380
|
+
"<th>"
|
|
2381
|
+
],
|
|
2382
|
+
"related": [
|
|
2383
|
+
"DataTable",
|
|
2384
|
+
"DataTableView",
|
|
2385
|
+
"MetadataGrid"
|
|
2386
|
+
],
|
|
1097
2387
|
"since": "0.0.0"
|
|
1098
2388
|
},
|
|
1099
2389
|
"DataTable": {
|
|
1100
2390
|
"category": "data display",
|
|
1101
|
-
"parts": [
|
|
2391
|
+
"parts": [
|
|
2392
|
+
"DataTableToolbar",
|
|
2393
|
+
"DataTableSearch",
|
|
2394
|
+
"DataTableSpacer",
|
|
2395
|
+
"DataTableResultsCount",
|
|
2396
|
+
"DataTableHead",
|
|
2397
|
+
"DataTableHeader",
|
|
2398
|
+
"DataTableBody",
|
|
2399
|
+
"DataTableRow",
|
|
2400
|
+
"DataTableCell",
|
|
2401
|
+
"DataTableCellName",
|
|
2402
|
+
"DataTableCellMono",
|
|
2403
|
+
"DataTableCellId",
|
|
2404
|
+
"DataTableCellDue",
|
|
2405
|
+
"DataTableCheckbox",
|
|
2406
|
+
"DataTablePagination"
|
|
2407
|
+
],
|
|
1102
2408
|
"useWhen": "The composable records table: card frame, toolbar with search and count, sortable headers, typed cells (name, mono, id, due), row checkbox, pagination.",
|
|
1103
2409
|
"dontUseWhen": "A config-driven table is enough (`DataTableView`) or the table is a plain semantic one (`Table`).",
|
|
1104
|
-
"replacesRawHtml": [
|
|
1105
|
-
|
|
2410
|
+
"replacesRawHtml": [
|
|
2411
|
+
"<table> + hand-rolled toolbar and pager"
|
|
2412
|
+
],
|
|
2413
|
+
"related": [
|
|
2414
|
+
"DataTableView",
|
|
2415
|
+
"Table",
|
|
2416
|
+
"BulkActionBar",
|
|
2417
|
+
"LoadingRows",
|
|
2418
|
+
"TableLoading"
|
|
2419
|
+
],
|
|
1106
2420
|
"since": "0.3.0"
|
|
1107
2421
|
},
|
|
2422
|
+
"TableLoading": {
|
|
2423
|
+
"category": "data display",
|
|
2424
|
+
"useWhen": "The `<tbody aria-busy>` of a data table while its rows load: skeleton rows sized to the columns. Slots in place of `DataTableBody`.",
|
|
2425
|
+
"dontUseWhen": "A list outside a table (`LoadingRows`) or a single shape (`Skeleton`).",
|
|
2426
|
+
"replacesRawHtml": [
|
|
2427
|
+
"<tbody> of hand-rolled skeleton <td>s"
|
|
2428
|
+
],
|
|
2429
|
+
"related": [
|
|
2430
|
+
"TableEmpty",
|
|
2431
|
+
"TableError",
|
|
2432
|
+
"DataTable",
|
|
2433
|
+
"LoadingRows"
|
|
2434
|
+
],
|
|
2435
|
+
"since": "1.38.0"
|
|
2436
|
+
},
|
|
2437
|
+
"TableEmpty": {
|
|
2438
|
+
"category": "data display",
|
|
2439
|
+
"useWhen": "The `<tbody>` of a data table with no rows: one full-width row holding a compact `EmptyState`.",
|
|
2440
|
+
"dontUseWhen": "An empty panel outside a table (`EmptyState`).",
|
|
2441
|
+
"replacesRawHtml": [
|
|
2442
|
+
"<tr><td colSpan> with centred grey text"
|
|
2443
|
+
],
|
|
2444
|
+
"related": [
|
|
2445
|
+
"TableLoading",
|
|
2446
|
+
"TableError",
|
|
2447
|
+
"EmptyState",
|
|
2448
|
+
"DataTable"
|
|
2449
|
+
],
|
|
2450
|
+
"since": "1.38.0"
|
|
2451
|
+
},
|
|
2452
|
+
"TableError": {
|
|
2453
|
+
"category": "data display",
|
|
2454
|
+
"useWhen": "The `<tbody>` of a data table whose rows failed to load: one full-width row holding a compact `ErrorState` with retry.",
|
|
2455
|
+
"dontUseWhen": "An error panel outside a table (`ErrorState`).",
|
|
2456
|
+
"replacesRawHtml": [
|
|
2457
|
+
"<tr><td colSpan> with an error message and a retry button"
|
|
2458
|
+
],
|
|
2459
|
+
"related": [
|
|
2460
|
+
"TableLoading",
|
|
2461
|
+
"TableEmpty",
|
|
2462
|
+
"ErrorState",
|
|
2463
|
+
"DataTable"
|
|
2464
|
+
],
|
|
2465
|
+
"since": "1.38.0"
|
|
2466
|
+
},
|
|
1108
2467
|
"DataTableView": {
|
|
1109
2468
|
"category": "data display",
|
|
1110
|
-
"parts": [
|
|
2469
|
+
"parts": [
|
|
2470
|
+
"StagePill",
|
|
2471
|
+
"Assignee",
|
|
2472
|
+
"MoneyCell",
|
|
2473
|
+
"TagsCell",
|
|
2474
|
+
"Dash"
|
|
2475
|
+
],
|
|
1111
2476
|
"useWhen": "A list screen as configuration: `columns` + `data` (+ filters, search keys, sort); owns search/filter/sort/pagination state. Cell renderers `StagePill`, `Assignee`, `MoneyCell`, `TagsCell`, `Dash` for `column.render`.",
|
|
1112
2477
|
"dontUseWhen": "You need custom table composition (`DataTable`).",
|
|
1113
|
-
"related": [
|
|
2478
|
+
"related": [
|
|
2479
|
+
"DataTable",
|
|
2480
|
+
"DisplayMenu",
|
|
2481
|
+
"Toolbar"
|
|
2482
|
+
],
|
|
1114
2483
|
"since": "1.6.0"
|
|
1115
2484
|
},
|
|
1116
2485
|
"MetadataGrid": {
|
|
1117
2486
|
"category": "data display",
|
|
1118
|
-
"parts": [
|
|
2487
|
+
"parts": [
|
|
2488
|
+
"DataItem"
|
|
2489
|
+
],
|
|
1119
2490
|
"useWhen": "Label / value pairs on a detail surface as a semantic `<dl>`; `DataItem span={2}` for full-row values.",
|
|
1120
2491
|
"dontUseWhen": "Tabular records (`Table`) or a stat tile (`KpiCard`).",
|
|
1121
|
-
"replacesRawHtml": [
|
|
1122
|
-
|
|
2492
|
+
"replacesRawHtml": [
|
|
2493
|
+
"<dl>",
|
|
2494
|
+
"two-column label/value divs"
|
|
2495
|
+
],
|
|
2496
|
+
"related": [
|
|
2497
|
+
"DetailGrid",
|
|
2498
|
+
"Table"
|
|
2499
|
+
],
|
|
1123
2500
|
"since": "0.4.1"
|
|
1124
2501
|
},
|
|
1125
2502
|
"KpiCard": {
|
|
1126
2503
|
"category": "data display",
|
|
1127
|
-
"parts": [
|
|
2504
|
+
"parts": [
|
|
2505
|
+
"SelectableKpiCard"
|
|
2506
|
+
],
|
|
1128
2507
|
"useWhen": "A single-stat dashboard tile: label, value, optional tone, icon and hint; `SelectableKpiCard` when tiles act as filters.",
|
|
1129
2508
|
"dontUseWhen": "A number inside running content (`Stat`) or a chart (`DonutChart`).",
|
|
1130
|
-
"related": [
|
|
2509
|
+
"related": [
|
|
2510
|
+
"Stat",
|
|
2511
|
+
"DashGrid",
|
|
2512
|
+
"Card"
|
|
2513
|
+
],
|
|
1131
2514
|
"since": "0.4.1"
|
|
1132
2515
|
},
|
|
1133
2516
|
"Badge": {
|
|
1134
2517
|
"category": "data display",
|
|
1135
|
-
"helpers": [
|
|
2518
|
+
"helpers": [
|
|
2519
|
+
"badgeVariants",
|
|
2520
|
+
"resolveBadgeAppearance"
|
|
2521
|
+
],
|
|
1136
2522
|
"useWhen": "A short static label or count: `variant` (solid, soft, outline) × `intent`.",
|
|
1137
2523
|
"dontUseWhen": "A status with a shared vocabulary (`StatusBadge`), a removable token (`Chip`) or a machine-suggested intent (`IntentBadge`).",
|
|
1138
|
-
"replacesRawHtml": [
|
|
1139
|
-
|
|
2524
|
+
"replacesRawHtml": [
|
|
2525
|
+
"<span class=\"rounded-full px-2 text-xs\">"
|
|
2526
|
+
],
|
|
2527
|
+
"related": [
|
|
2528
|
+
"StatusBadge",
|
|
2529
|
+
"Chip",
|
|
2530
|
+
"IntentBadge",
|
|
2531
|
+
"StatusDot"
|
|
2532
|
+
],
|
|
1140
2533
|
"since": "0.0.0"
|
|
1141
2534
|
},
|
|
1142
2535
|
"StatusBadge": {
|
|
1143
2536
|
"category": "data display",
|
|
1144
|
-
"helpers": [
|
|
2537
|
+
"helpers": [
|
|
2538
|
+
"defineStatusMap"
|
|
2539
|
+
],
|
|
1145
2540
|
"useWhen": "The presentation of a status: soft badge, indicator dot, icon; define the product's statuses once with `defineStatusMap` and spread an entry onto it.",
|
|
1146
2541
|
"dontUseWhen": "A count or neutral label (`Badge`) or a stage pill inside `DataTableView` (`StagePill`).",
|
|
1147
|
-
"related": [
|
|
2542
|
+
"related": [
|
|
2543
|
+
"Badge",
|
|
2544
|
+
"StatusDot",
|
|
2545
|
+
"StatusPill",
|
|
2546
|
+
"DataTableView"
|
|
2547
|
+
],
|
|
1148
2548
|
"since": "1.35.0"
|
|
1149
2549
|
},
|
|
1150
2550
|
"StatusPill": {
|
|
1151
2551
|
"category": "data display",
|
|
1152
2552
|
"useWhen": "Only in code that already uses it: the fixed-vocabulary pill (`status`, optional dot) for authoritative state.",
|
|
1153
2553
|
"dontUseWhen": "New code — `StatusBadge` with `defineStatusMap`.",
|
|
1154
|
-
"related": [
|
|
2554
|
+
"related": [
|
|
2555
|
+
"StatusBadge",
|
|
2556
|
+
"IntentBadge"
|
|
2557
|
+
],
|
|
1155
2558
|
"since": "1.2.0"
|
|
1156
2559
|
},
|
|
1157
2560
|
"IntentBadge": {
|
|
1158
2561
|
"category": "data display",
|
|
1159
2562
|
"useWhen": "A dashed-outline badge for an AI-classified intent: signals machine-suggested, not yet confirmed.",
|
|
1160
2563
|
"dontUseWhen": "Authoritative state (`StatusBadge`).",
|
|
1161
|
-
"related": [
|
|
2564
|
+
"related": [
|
|
2565
|
+
"StatusBadge",
|
|
2566
|
+
"Badge",
|
|
2567
|
+
"AiDraftCard"
|
|
2568
|
+
],
|
|
1162
2569
|
"since": "1.5.0"
|
|
1163
2570
|
},
|
|
1164
2571
|
"StatusDot": {
|
|
1165
2572
|
"category": "data display",
|
|
1166
|
-
"helpers": [
|
|
2573
|
+
"helpers": [
|
|
2574
|
+
"statusDotVariants",
|
|
2575
|
+
"STATUS_DOT_TONE_TO_INTENT"
|
|
2576
|
+
],
|
|
1167
2577
|
"useWhen": "A standalone attention / unread / presence dot on non-avatar surfaces: nav rails, bells, list rows; `intent` colours it.",
|
|
1168
2578
|
"dontUseWhen": "Next to an avatar (`Avatar` renders its own presence dot) or with a label (`StatusBadge`).",
|
|
1169
|
-
"replacesRawHtml": [
|
|
1170
|
-
|
|
2579
|
+
"replacesRawHtml": [
|
|
2580
|
+
"<span class=\"h-2 w-2 rounded-full bg-red-500\">"
|
|
2581
|
+
],
|
|
2582
|
+
"related": [
|
|
2583
|
+
"StatusBadge",
|
|
2584
|
+
"Avatar",
|
|
2585
|
+
"Sidebar"
|
|
2586
|
+
],
|
|
1171
2587
|
"since": "1.3.0"
|
|
1172
2588
|
},
|
|
1173
2589
|
"StatusIcon": {
|
|
1174
2590
|
"category": "icons",
|
|
1175
2591
|
"useWhen": "A progress-aware state circle for pipeline stages (`state`, optional `progress`).",
|
|
1176
2592
|
"dontUseWhen": "A status with text (`StatusBadge`) or a fixed glyph (icon catalogue).",
|
|
1177
|
-
"related": [
|
|
2593
|
+
"related": [
|
|
2594
|
+
"PriorityIcon",
|
|
2595
|
+
"StatusBadge",
|
|
2596
|
+
"ProgressRing"
|
|
2597
|
+
],
|
|
1178
2598
|
"since": "0.8.0",
|
|
1179
2599
|
"story": "src/primitives/priority-status-icons.stories.tsx"
|
|
1180
2600
|
},
|
|
@@ -1182,267 +2602,501 @@
|
|
|
1182
2602
|
"category": "icons",
|
|
1183
2603
|
"useWhen": "The glyph for the fixed none/low/medium/high/urgent priority scale.",
|
|
1184
2604
|
"dontUseWhen": "A generic arrow or flag (icon catalogue) or a status (`StatusIcon`).",
|
|
1185
|
-
"related": [
|
|
2605
|
+
"related": [
|
|
2606
|
+
"StatusIcon",
|
|
2607
|
+
"StackedBarChart"
|
|
2608
|
+
],
|
|
1186
2609
|
"since": "0.8.0",
|
|
1187
2610
|
"story": "src/primitives/priority-status-icons.stories.tsx"
|
|
1188
2611
|
},
|
|
1189
2612
|
"IconTile": {
|
|
1190
2613
|
"category": "data display",
|
|
1191
|
-
"helpers": [
|
|
2614
|
+
"helpers": [
|
|
2615
|
+
"iconTileVariants",
|
|
2616
|
+
"ICON_TILE_TONE_TO_INTENT"
|
|
2617
|
+
],
|
|
1192
2618
|
"useWhen": "The tinted rounded-square icon chip that leads a list row or card: `intent` tints the square and the glyph.",
|
|
1193
2619
|
"dontUseWhen": "An action (`IconButton`) or a file type (`FileTypeBadge`).",
|
|
1194
|
-
"replacesRawHtml": [
|
|
1195
|
-
|
|
2620
|
+
"replacesRawHtml": [
|
|
2621
|
+
"<div class=\"grid place-items-center rounded-lg bg-…\"><svg/>"
|
|
2622
|
+
],
|
|
2623
|
+
"related": [
|
|
2624
|
+
"FileTypeBadge",
|
|
2625
|
+
"Avatar",
|
|
2626
|
+
"IconButton"
|
|
2627
|
+
],
|
|
1196
2628
|
"since": "1.3.0"
|
|
1197
2629
|
},
|
|
1198
2630
|
"Avatar": {
|
|
1199
2631
|
"category": "data display",
|
|
1200
2632
|
"useWhen": "A person or organisation: image with initials fallback, sizes, optional presence dot.",
|
|
1201
2633
|
"dontUseWhen": "A file (`FileTypeBadge`) or a product mark (brand icons, `Logo`).",
|
|
1202
|
-
"replacesRawHtml": [
|
|
1203
|
-
|
|
2634
|
+
"replacesRawHtml": [
|
|
2635
|
+
"<img class=\"rounded-full\">"
|
|
2636
|
+
],
|
|
2637
|
+
"related": [
|
|
2638
|
+
"StatusDot",
|
|
2639
|
+
"DataTableView",
|
|
2640
|
+
"TeamMemberSelect"
|
|
2641
|
+
],
|
|
1204
2642
|
"since": "0.0.0"
|
|
1205
2643
|
},
|
|
1206
2644
|
"FileTypeBadge": {
|
|
1207
2645
|
"category": "data display",
|
|
1208
|
-
"helpers": [
|
|
2646
|
+
"helpers": [
|
|
2647
|
+
"fileTypeBadgeVariants",
|
|
2648
|
+
"fileTypeFromName"
|
|
2649
|
+
],
|
|
1209
2650
|
"useWhen": "The coloured format square (PDF, IMG, DOC…) for a file; `fileTypeFromName` derives the type.",
|
|
1210
2651
|
"dontUseWhen": "A whole file row (`AttachmentChip`, `FileChip`, `DocumentFileRow`).",
|
|
1211
|
-
"related": [
|
|
2652
|
+
"related": [
|
|
2653
|
+
"AttachmentChip",
|
|
2654
|
+
"FileChip",
|
|
2655
|
+
"IconTile"
|
|
2656
|
+
],
|
|
1212
2657
|
"since": "1.3.0"
|
|
1213
2658
|
},
|
|
1214
2659
|
"FileChip": {
|
|
1215
2660
|
"category": "data display",
|
|
1216
2661
|
"useWhen": "A compact file token: name, meta, kind icon, one action.",
|
|
1217
2662
|
"dontUseWhen": "A full attachment row with view/download (`AttachmentChip`) or a document in the portal (`DocumentFileRow`).",
|
|
1218
|
-
"related": [
|
|
2663
|
+
"related": [
|
|
2664
|
+
"AttachmentChip",
|
|
2665
|
+
"FileTypeBadge",
|
|
2666
|
+
"Chip"
|
|
2667
|
+
],
|
|
1219
2668
|
"since": "1.2.0"
|
|
1220
2669
|
},
|
|
1221
2670
|
"AttachmentChip": {
|
|
1222
2671
|
"category": "data display",
|
|
1223
|
-
"helpers": [
|
|
2672
|
+
"helpers": [
|
|
2673
|
+
"attachmentChipVariants"
|
|
2674
|
+
],
|
|
1224
2675
|
"useWhen": "A full attachment row: `FileTypeBadge`, truncated name with meta, trailing view/download and your actions; presentational.",
|
|
1225
2676
|
"dontUseWhen": "A compact token (`FileChip`) or an upload control (`FileUpload`).",
|
|
1226
|
-
"related": [
|
|
2677
|
+
"related": [
|
|
2678
|
+
"FileChip",
|
|
2679
|
+
"FileTypeBadge",
|
|
2680
|
+
"FileUpload"
|
|
2681
|
+
],
|
|
1227
2682
|
"since": "1.3.0"
|
|
1228
2683
|
},
|
|
1229
2684
|
"DocumentSourceTag": {
|
|
1230
2685
|
"category": "data display",
|
|
1231
2686
|
"useWhen": "Where a document came from (uploaded, emailed, scanned…): glyph + label tag.",
|
|
1232
2687
|
"dontUseWhen": "Filtering by source (`DocumentSourceFilter`).",
|
|
1233
|
-
"related": [
|
|
2688
|
+
"related": [
|
|
2689
|
+
"DocumentSourceFilter",
|
|
2690
|
+
"DocumentDetailPanel"
|
|
2691
|
+
],
|
|
1234
2692
|
"since": "1.12.0"
|
|
1235
2693
|
},
|
|
1236
2694
|
"ActivityList": {
|
|
1237
2695
|
"category": "data display",
|
|
1238
|
-
"parts": [
|
|
2696
|
+
"parts": [
|
|
2697
|
+
"ActivityItem",
|
|
2698
|
+
"ActivityEventItem"
|
|
2699
|
+
],
|
|
1239
2700
|
"useWhen": "An activity feed: actor/text/target rows (`ActivityItem`) and titled events with a time and coloured dot (`ActivityEventItem`).",
|
|
1240
2701
|
"dontUseWhen": "Notifications with filters and read state (`NotificationPanel`) or a process timeline (`EngagementTimeline`).",
|
|
1241
|
-
"replacesRawHtml": [
|
|
1242
|
-
|
|
2702
|
+
"replacesRawHtml": [
|
|
2703
|
+
"<ul> of hand-styled feed rows"
|
|
2704
|
+
],
|
|
2705
|
+
"related": [
|
|
2706
|
+
"NotificationPanel",
|
|
2707
|
+
"EngagementTimeline",
|
|
2708
|
+
"AttentionItem"
|
|
2709
|
+
],
|
|
1243
2710
|
"since": "0.3.0"
|
|
1244
2711
|
},
|
|
1245
2712
|
"NotificationPanel": {
|
|
1246
2713
|
"category": "data display",
|
|
1247
|
-
"parts": [
|
|
2714
|
+
"parts": [
|
|
2715
|
+
"NotificationPanelHeader",
|
|
2716
|
+
"NotificationFilter",
|
|
2717
|
+
"NotificationList",
|
|
2718
|
+
"NotificationItem",
|
|
2719
|
+
"NotificationPanelFooter"
|
|
2720
|
+
],
|
|
1248
2721
|
"useWhen": "The notifications flyout: header, filter, list of items with read state, footer actions.",
|
|
1249
2722
|
"dontUseWhen": "A page-level activity feed (`ActivityList`).",
|
|
1250
|
-
"related": [
|
|
2723
|
+
"related": [
|
|
2724
|
+
"ActivityList",
|
|
2725
|
+
"StatusDot",
|
|
2726
|
+
"Popover"
|
|
2727
|
+
],
|
|
1251
2728
|
"since": "0.7.0"
|
|
1252
2729
|
},
|
|
1253
2730
|
"Kanban": {
|
|
1254
2731
|
"category": "data display",
|
|
1255
|
-
"parts": [
|
|
2732
|
+
"parts": [
|
|
2733
|
+
"KanbanColumn",
|
|
2734
|
+
"KanbanCard"
|
|
2735
|
+
],
|
|
1256
2736
|
"useWhen": "A board of columns and cards for stage-based work.",
|
|
1257
2737
|
"dontUseWhen": "The data is tabular (`DataTableView`).",
|
|
1258
|
-
"related": [
|
|
2738
|
+
"related": [
|
|
2739
|
+
"DataTableView"
|
|
2740
|
+
],
|
|
1259
2741
|
"since": "0.3.0"
|
|
1260
2742
|
},
|
|
1261
2743
|
"EngagementCard": {
|
|
1262
2744
|
"category": "data display",
|
|
1263
2745
|
"useWhen": "The client-portal card for one engagement: service, tone, title, progress and next step.",
|
|
1264
2746
|
"dontUseWhen": "A generic card (`Card`) or a KPI (`KpiCard`).",
|
|
1265
|
-
"related": [
|
|
2747
|
+
"related": [
|
|
2748
|
+
"EngagementTimeline",
|
|
2749
|
+
"Card",
|
|
2750
|
+
"serviceToneStyle"
|
|
2751
|
+
],
|
|
1266
2752
|
"since": "1.2.0"
|
|
1267
2753
|
},
|
|
1268
2754
|
"EngagementTimeline": {
|
|
1269
2755
|
"category": "data display",
|
|
1270
|
-
"parts": [
|
|
2756
|
+
"parts": [
|
|
2757
|
+
"EngagementTimelineStep"
|
|
2758
|
+
],
|
|
1271
2759
|
"useWhen": "The steps of an engagement as a toned vertical timeline.",
|
|
1272
2760
|
"dontUseWhen": "A flow the user navigates (`Stepper`) or an activity feed (`ActivityList`).",
|
|
1273
|
-
"related": [
|
|
2761
|
+
"related": [
|
|
2762
|
+
"EngagementCard",
|
|
2763
|
+
"Stepper",
|
|
2764
|
+
"ActivityList"
|
|
2765
|
+
],
|
|
1274
2766
|
"since": "1.2.0"
|
|
1275
2767
|
},
|
|
1276
2768
|
"MessageBubble": {
|
|
1277
2769
|
"category": "data display",
|
|
1278
|
-
"parts": [
|
|
2770
|
+
"parts": [
|
|
2771
|
+
"MessageBubbleAction",
|
|
2772
|
+
"MessageBubbleTombstone"
|
|
2773
|
+
],
|
|
1279
2774
|
"useWhen": "One chat message in a thread, inbound or outbound, with hover actions and a tombstone for deleted messages.",
|
|
1280
2775
|
"dontUseWhen": "An email (`EmailMessageCard`) or an AI draft (`AiDraftCard`).",
|
|
1281
|
-
"related": [
|
|
2776
|
+
"related": [
|
|
2777
|
+
"EmailMessageCard",
|
|
2778
|
+
"MessageComposer",
|
|
2779
|
+
"ChannelTabs"
|
|
2780
|
+
],
|
|
1282
2781
|
"since": "0.12.0"
|
|
1283
2782
|
},
|
|
1284
2783
|
"EmailMessageCard": {
|
|
1285
2784
|
"category": "data display",
|
|
1286
2785
|
"useWhen": "An email in a thread as an envelope card (header, readable body, footer) with auto-clamp and show-full toggle; you sanitise the HTML.",
|
|
1287
2786
|
"dontUseWhen": "A chat message (`MessageBubble`).",
|
|
1288
|
-
"related": [
|
|
2787
|
+
"related": [
|
|
2788
|
+
"MessageBubble",
|
|
2789
|
+
"AttachmentChip"
|
|
2790
|
+
],
|
|
1289
2791
|
"since": "1.5.0"
|
|
1290
2792
|
},
|
|
1291
2793
|
"DocumentChecklist": {
|
|
1292
2794
|
"category": "data display",
|
|
1293
2795
|
"useWhen": "The client's view of requested documents by lifecycle: awaiting, in review, received, complete.",
|
|
1294
2796
|
"dontUseWhen": "The firm's missing-documents view (`MissingDocumentsPanel`).",
|
|
1295
|
-
"related": [
|
|
2797
|
+
"related": [
|
|
2798
|
+
"MissingDocumentsPanel",
|
|
2799
|
+
"DocumentRequestUpload"
|
|
2800
|
+
],
|
|
1296
2801
|
"since": "1.21.0"
|
|
1297
2802
|
},
|
|
1298
2803
|
"DocumentDetailPanel": {
|
|
1299
2804
|
"category": "data display",
|
|
1300
|
-
"parts": [
|
|
2805
|
+
"parts": [
|
|
2806
|
+
"DocumentDetailHeader",
|
|
2807
|
+
"DocumentDetailTitle",
|
|
2808
|
+
"DocumentDetailRequester",
|
|
2809
|
+
"DocumentDetailMetaRow",
|
|
2810
|
+
"DocumentDetailBody",
|
|
2811
|
+
"DocumentDetailActions",
|
|
2812
|
+
"DocumentList",
|
|
2813
|
+
"DocumentListSection",
|
|
2814
|
+
"DocumentRow"
|
|
2815
|
+
],
|
|
1301
2816
|
"useWhen": "The document detail side panel and the document list it opens from: header, title, requester, meta, body, actions; `DocumentList` sections of `DocumentRow`s.",
|
|
1302
2817
|
"dontUseWhen": "A file outside the documents workspace (`AttachmentChip`).",
|
|
1303
|
-
"related": [
|
|
2818
|
+
"related": [
|
|
2819
|
+
"DocumentsWorkspaceLayout",
|
|
2820
|
+
"DocumentFileRow",
|
|
2821
|
+
"DocumentSourceTag"
|
|
2822
|
+
],
|
|
1304
2823
|
"since": "1.8.0"
|
|
1305
2824
|
},
|
|
1306
2825
|
"DocumentFileRow": {
|
|
1307
2826
|
"category": "data display",
|
|
1308
|
-
"parts": [
|
|
2827
|
+
"parts": [
|
|
2828
|
+
"DocumentFileCard",
|
|
2829
|
+
"DocumentFileLine"
|
|
2830
|
+
],
|
|
1309
2831
|
"useWhen": "A file in the documents workspace as a row, a card or a selectable line (named checkbox).",
|
|
1310
2832
|
"dontUseWhen": "An attachment outside the workspace (`AttachmentChip`).",
|
|
1311
|
-
"related": [
|
|
2833
|
+
"related": [
|
|
2834
|
+
"DocumentDetailPanel",
|
|
2835
|
+
"FileTypeBadge",
|
|
2836
|
+
"AttachmentChip"
|
|
2837
|
+
],
|
|
1312
2838
|
"since": "1.4.0"
|
|
1313
2839
|
},
|
|
1314
2840
|
"DocumentRequestDetail": {
|
|
1315
2841
|
"category": "data display",
|
|
1316
|
-
"parts": [
|
|
2842
|
+
"parts": [
|
|
2843
|
+
"DocumentRequestCard"
|
|
2844
|
+
],
|
|
1317
2845
|
"useWhen": "A document request as a card in a list and as the expanded detail.",
|
|
1318
2846
|
"dontUseWhen": "The request form field (`DocumentRequestField`) or the client's upload (`DocumentRequestUpload`).",
|
|
1319
|
-
"related": [
|
|
2847
|
+
"related": [
|
|
2848
|
+
"DocumentRequestField",
|
|
2849
|
+
"DocumentRequestUpload",
|
|
2850
|
+
"MissingDocumentsPanel"
|
|
2851
|
+
],
|
|
1320
2852
|
"since": "1.9.0"
|
|
1321
2853
|
},
|
|
1322
2854
|
"TimeLogger": {
|
|
1323
2855
|
"category": "data display",
|
|
1324
|
-
"parts": [
|
|
1325
|
-
|
|
1326
|
-
|
|
2856
|
+
"parts": [
|
|
2857
|
+
"TimeLoggerHeader",
|
|
2858
|
+
"TimeLoggerTimer",
|
|
2859
|
+
"TimeLoggerContextRow",
|
|
2860
|
+
"TimeLoggerField",
|
|
2861
|
+
"TimeLoggerBillable",
|
|
2862
|
+
"TimeLoggerNotes",
|
|
2863
|
+
"TimeLoggerEntryList",
|
|
2864
|
+
"TimeLoggerEntry",
|
|
2865
|
+
"TimeLoggerActions",
|
|
2866
|
+
"TimeLoggerFooter"
|
|
2867
|
+
],
|
|
2868
|
+
"helpers": [
|
|
2869
|
+
"formatClock",
|
|
2870
|
+
"formatDuration",
|
|
2871
|
+
"parseDuration",
|
|
2872
|
+
"formatCurrency"
|
|
2873
|
+
],
|
|
2874
|
+
"hooks": [
|
|
2875
|
+
"useStopwatch"
|
|
2876
|
+
],
|
|
1327
2877
|
"useWhen": "The compact time-entry panel: compose only the rows a surface needs (timer, context, billable, notes, entries); `useStopwatch` and the duration formatters drive it.",
|
|
1328
2878
|
"dontUseWhen": "A single duration field (`Input` + `parseDuration`).",
|
|
1329
|
-
"related": [
|
|
2879
|
+
"related": [
|
|
2880
|
+
"Popover",
|
|
2881
|
+
"NumberInput"
|
|
2882
|
+
],
|
|
1330
2883
|
"since": "0.15.0"
|
|
1331
2884
|
},
|
|
1332
2885
|
"ProposalPackageCard": {
|
|
1333
2886
|
"category": "data display",
|
|
1334
2887
|
"label": "Proposal pricing",
|
|
1335
|
-
"parts": [
|
|
2888
|
+
"parts": [
|
|
2889
|
+
"ProposalServiceRow",
|
|
2890
|
+
"ProposalAddOn",
|
|
2891
|
+
"ProposalBillingTerms",
|
|
2892
|
+
"ProposalPricingSummary"
|
|
2893
|
+
],
|
|
1336
2894
|
"useWhen": "The Services & Pricing blocks of a proposal preview: package card, service rows, add-ons, billing terms, summary; inherit the firm accent inside `AgreementViewer`.",
|
|
1337
2895
|
"dontUseWhen": "Anything outside a proposal (`Card`, `MetadataGrid`).",
|
|
1338
|
-
"related": [
|
|
2896
|
+
"related": [
|
|
2897
|
+
"AgreementViewer",
|
|
2898
|
+
"ProposalSignatureBlock",
|
|
2899
|
+
"ProposalSignerList"
|
|
2900
|
+
],
|
|
1339
2901
|
"since": "1.12.0"
|
|
1340
2902
|
},
|
|
1341
2903
|
"ProposalSignerList": {
|
|
1342
2904
|
"category": "data display",
|
|
1343
2905
|
"label": "Proposal content",
|
|
1344
|
-
"parts": [
|
|
2906
|
+
"parts": [
|
|
2907
|
+
"ProposalNote",
|
|
2908
|
+
"ProposalCustomPage"
|
|
2909
|
+
],
|
|
1345
2910
|
"useWhen": "The content blocks of a proposal: signer list, notes, custom pages.",
|
|
1346
2911
|
"dontUseWhen": "Anything outside a proposal.",
|
|
1347
|
-
"related": [
|
|
2912
|
+
"related": [
|
|
2913
|
+
"AgreementViewer",
|
|
2914
|
+
"ProposalPackageCard"
|
|
2915
|
+
],
|
|
1348
2916
|
"since": "1.12.0"
|
|
1349
2917
|
},
|
|
1350
|
-
|
|
1351
2918
|
"AreaChart": {
|
|
1352
2919
|
"category": "media",
|
|
1353
2920
|
"useWhen": "A trend over time as a filled area, in design-system colours.",
|
|
1354
2921
|
"dontUseWhen": "Parts of a whole (`DonutChart`) or category comparison (`StackedBarChart`, `RankedBars`).",
|
|
1355
|
-
"replacesRawHtml": [
|
|
1356
|
-
|
|
2922
|
+
"replacesRawHtml": [
|
|
2923
|
+
"ad-hoc recharts with hex colours"
|
|
2924
|
+
],
|
|
2925
|
+
"related": [
|
|
2926
|
+
"DonutChart",
|
|
2927
|
+
"StackedBarChart",
|
|
2928
|
+
"RankedBars"
|
|
2929
|
+
],
|
|
1357
2930
|
"since": "1.2.0"
|
|
1358
2931
|
},
|
|
1359
2932
|
"DonutChart": {
|
|
1360
2933
|
"category": "media",
|
|
1361
2934
|
"useWhen": "Parts of a whole with a centre label.",
|
|
1362
2935
|
"dontUseWhen": "One value's progress (`ProgressRing`).",
|
|
1363
|
-
"related": [
|
|
2936
|
+
"related": [
|
|
2937
|
+
"ProgressRing",
|
|
2938
|
+
"AreaChart"
|
|
2939
|
+
],
|
|
1364
2940
|
"since": "1.2.0"
|
|
1365
2941
|
},
|
|
1366
2942
|
"StackedBarChart": {
|
|
1367
2943
|
"category": "media",
|
|
1368
2944
|
"useWhen": "Composition per category as stacked bars (e.g. work by priority).",
|
|
1369
2945
|
"dontUseWhen": "A ranked list of values (`RankedBars`).",
|
|
1370
|
-
"related": [
|
|
2946
|
+
"related": [
|
|
2947
|
+
"RankedBars",
|
|
2948
|
+
"AreaChart",
|
|
2949
|
+
"PriorityIcon"
|
|
2950
|
+
],
|
|
1371
2951
|
"since": "1.6.0"
|
|
1372
2952
|
},
|
|
1373
2953
|
"RankedBars": {
|
|
1374
2954
|
"category": "media",
|
|
1375
2955
|
"useWhen": "A ranked list of labelled values as horizontal bars.",
|
|
1376
2956
|
"dontUseWhen": "Stacked composition (`StackedBarChart`).",
|
|
1377
|
-
"related": [
|
|
2957
|
+
"related": [
|
|
2958
|
+
"StackedBarChart"
|
|
2959
|
+
],
|
|
1378
2960
|
"since": "1.2.0"
|
|
1379
2961
|
},
|
|
1380
2962
|
"PdfPreview": {
|
|
1381
2963
|
"category": "media",
|
|
1382
2964
|
"useWhen": "Render a PDF inline with paging and zoom.",
|
|
1383
2965
|
"dontUseWhen": "A spreadsheet (`SpreadsheetPreview`) or just a file row (`AttachmentChip`).",
|
|
1384
|
-
"related": [
|
|
2966
|
+
"related": [
|
|
2967
|
+
"SpreadsheetPreview",
|
|
2968
|
+
"AttachmentChip",
|
|
2969
|
+
"AspectRatio"
|
|
2970
|
+
],
|
|
1385
2971
|
"since": "1.7.0"
|
|
1386
2972
|
},
|
|
1387
2973
|
"SpreadsheetPreview": {
|
|
1388
2974
|
"category": "media",
|
|
1389
2975
|
"useWhen": "Render a spreadsheet's sheets and cells inline.",
|
|
1390
2976
|
"dontUseWhen": "A PDF (`PdfPreview`) or an editable grid (`Grid`).",
|
|
1391
|
-
"related": [
|
|
2977
|
+
"related": [
|
|
2978
|
+
"PdfPreview",
|
|
2979
|
+
"Table"
|
|
2980
|
+
],
|
|
1392
2981
|
"since": "1.7.0"
|
|
1393
2982
|
},
|
|
1394
2983
|
"Logo": {
|
|
1395
2984
|
"category": "media",
|
|
1396
2985
|
"useWhen": "The Assure suite or product wordmark: official artwork with a glyph + text fallback; `assetPath` resolves the artwork base.",
|
|
1397
2986
|
"dontUseWhen": "A small product mark alone (brand icon family).",
|
|
1398
|
-
"replacesRawHtml": [
|
|
1399
|
-
|
|
2987
|
+
"replacesRawHtml": [
|
|
2988
|
+
"<img src=\"/brand/….svg\">"
|
|
2989
|
+
],
|
|
2990
|
+
"related": [
|
|
2991
|
+
"Sidebar",
|
|
2992
|
+
"assetPath"
|
|
2993
|
+
],
|
|
1400
2994
|
"since": "0.0.0"
|
|
1401
2995
|
},
|
|
1402
|
-
|
|
1403
2996
|
"Shell": {
|
|
1404
2997
|
"category": "shell/screens",
|
|
1405
|
-
"parts": [
|
|
2998
|
+
"parts": [
|
|
2999
|
+
"Main",
|
|
3000
|
+
"Content"
|
|
3001
|
+
],
|
|
1406
3002
|
"useWhen": "The application frame: `Shell` holds the `Sidebar` and `Main`; `Main` holds `AppHeader` and `Content`.",
|
|
1407
3003
|
"dontUseWhen": "A public or marketing page (`Section`).",
|
|
1408
|
-
"replacesRawHtml": [
|
|
1409
|
-
|
|
3004
|
+
"replacesRawHtml": [
|
|
3005
|
+
"<div class=\"flex h-screen\">"
|
|
3006
|
+
],
|
|
3007
|
+
"related": [
|
|
3008
|
+
"Sidebar",
|
|
3009
|
+
"AppHeader",
|
|
3010
|
+
"BrandScope"
|
|
3011
|
+
],
|
|
1410
3012
|
"since": "0.3.0"
|
|
1411
3013
|
},
|
|
1412
3014
|
"Sidebar": {
|
|
1413
3015
|
"category": "shell/screens",
|
|
1414
|
-
"parts": [
|
|
1415
|
-
|
|
1416
|
-
|
|
3016
|
+
"parts": [
|
|
3017
|
+
"SidebarProvider",
|
|
3018
|
+
"SidebarTrigger",
|
|
3019
|
+
"SidebarBrand",
|
|
3020
|
+
"SidebarBrandText",
|
|
3021
|
+
"SidebarSection",
|
|
3022
|
+
"SidebarLinkGroup",
|
|
3023
|
+
"SidebarLink",
|
|
3024
|
+
"SidebarLinkLabel",
|
|
3025
|
+
"SidebarLinkBadge",
|
|
3026
|
+
"SidebarLinkAction",
|
|
3027
|
+
"SidebarPinButton",
|
|
3028
|
+
"SidebarUser",
|
|
3029
|
+
"SidebarFooter"
|
|
3030
|
+
],
|
|
3031
|
+
"helpers": [
|
|
3032
|
+
"sidebarLinkBadgeVariants"
|
|
3033
|
+
],
|
|
3034
|
+
"hooks": [
|
|
3035
|
+
"useSidebarState",
|
|
3036
|
+
"useSidebarPeekLock"
|
|
3037
|
+
],
|
|
1417
3038
|
"useWhen": "The app navigation rail: expanded/collapsed/peek states from `SidebarProvider`, brand, sections, link groups with badges and actions, user and footer.",
|
|
1418
3039
|
"dontUseWhen": "Mobile (`BottomNav`) or a rail of records (`ClientRailItem`).",
|
|
1419
|
-
"replacesRawHtml": [
|
|
1420
|
-
|
|
3040
|
+
"replacesRawHtml": [
|
|
3041
|
+
"<aside> + <nav> hand-rolled"
|
|
3042
|
+
],
|
|
3043
|
+
"related": [
|
|
3044
|
+
"Shell",
|
|
3045
|
+
"SidebarBrandSwitcher",
|
|
3046
|
+
"BottomNav",
|
|
3047
|
+
"SidebarDrawer"
|
|
3048
|
+
],
|
|
1421
3049
|
"since": "0.3.0"
|
|
1422
3050
|
},
|
|
1423
3051
|
"SidebarBrandSwitcher": {
|
|
1424
3052
|
"category": "shell/screens",
|
|
1425
|
-
"parts": [
|
|
3053
|
+
"parts": [
|
|
3054
|
+
"SidebarBrandSwitcherTile"
|
|
3055
|
+
],
|
|
1426
3056
|
"useWhen": "Switch between Assure products from the sidebar brand slot: tiles for available, current and coming-soon products.",
|
|
1427
3057
|
"dontUseWhen": "A single-product app (`SidebarBrand`).",
|
|
1428
|
-
"related": [
|
|
3058
|
+
"related": [
|
|
3059
|
+
"Sidebar",
|
|
3060
|
+
"BrandScope",
|
|
3061
|
+
"Logo"
|
|
3062
|
+
],
|
|
1429
3063
|
"since": "0.11.2"
|
|
1430
3064
|
},
|
|
1431
3065
|
"AppHeader": {
|
|
1432
3066
|
"category": "shell/screens",
|
|
1433
|
-
"parts": [
|
|
3067
|
+
"parts": [
|
|
3068
|
+
"AppHeaderBreadcrumb",
|
|
3069
|
+
"AppHeaderTitle",
|
|
3070
|
+
"AppHeaderSearch",
|
|
3071
|
+
"AppHeaderActions"
|
|
3072
|
+
],
|
|
1434
3073
|
"useWhen": "The sticky 56px top bar inside `Main`: breadcrumb, title, search and actions slots in any order.",
|
|
1435
3074
|
"dontUseWhen": "The page's own title block (`PageHeader`).",
|
|
1436
|
-
"related": [
|
|
3075
|
+
"related": [
|
|
3076
|
+
"Shell",
|
|
3077
|
+
"PageHeader",
|
|
3078
|
+
"NewMenu",
|
|
3079
|
+
"NotificationPanel"
|
|
3080
|
+
],
|
|
1437
3081
|
"since": "0.3.0"
|
|
1438
3082
|
},
|
|
1439
3083
|
"DesignSystemProvider": {
|
|
1440
3084
|
"category": "shell/screens",
|
|
1441
|
-
"hooks": [
|
|
3085
|
+
"hooks": [
|
|
3086
|
+
"useDsMessages"
|
|
3087
|
+
],
|
|
1442
3088
|
"useWhen": "Mount once in the root layout to configure the whole design system: `messages` overrides for the generic strings components render, `locale` (default `en-US`, pass the one your app knows server-side), `dir`, the portal container, the router `linkComponent` and `imageComponent` for `LinkButton` and `Logo`, the tooltip provider, and opt-in `toasts` / `confirm` regions. `useDsMessages(namespace, override?)` reads the resolved strings inside your own components.",
|
|
1443
3089
|
"dontUseWhen": "You are on Next.js — `NextDesignSystemProvider` from `/next` fills in the adapters. Theming a subtree is `ThemeScope` / `BrandScope`, not a nested provider.",
|
|
1444
|
-
"replacesRawHtml": [
|
|
1445
|
-
|
|
3090
|
+
"replacesRawHtml": [
|
|
3091
|
+
"hand-rolled i18n or router context for design-system strings and links"
|
|
3092
|
+
],
|
|
3093
|
+
"related": [
|
|
3094
|
+
"ThemeScope",
|
|
3095
|
+
"BrandScope",
|
|
3096
|
+
"Tooltip",
|
|
3097
|
+
"LinkButton",
|
|
3098
|
+
"Logo"
|
|
3099
|
+
],
|
|
1446
3100
|
"since": "unreleased",
|
|
1447
3101
|
"story": "src/foundation/provider/design-system-provider.stories.tsx"
|
|
1448
3102
|
},
|
|
@@ -1450,93 +3104,237 @@
|
|
|
1450
3104
|
"category": "shell/screens",
|
|
1451
3105
|
"useWhen": "A subtree that renders with its own colour `scheme`, `brand`, `density`, `dir` or runtime brand theme: stamps the `data-ds-*` attributes on its element and registers them so portalled overlays opened from inside (Dialog, Popover, menus) come up in the same theme; nested scopes merge.",
|
|
1452
3106
|
"dontUseWhen": "The whole app shares one theme (set the attributes on the document root) or only the product brand changes (`BrandScope`).",
|
|
1453
|
-
"replacesRawHtml": [
|
|
1454
|
-
|
|
3107
|
+
"replacesRawHtml": [
|
|
3108
|
+
"<div data-ds-scheme=\"dark\"> whose dialogs come up in the root theme"
|
|
3109
|
+
],
|
|
3110
|
+
"related": [
|
|
3111
|
+
"BrandScope",
|
|
3112
|
+
"DesignSystemProvider",
|
|
3113
|
+
"Dialog",
|
|
3114
|
+
"Popover"
|
|
3115
|
+
],
|
|
1455
3116
|
"since": "unreleased",
|
|
1456
3117
|
"story": "src/primitives/behavior/portal.stories.tsx",
|
|
1457
|
-
"docs": [
|
|
3118
|
+
"docs": [
|
|
3119
|
+
"docs/integration/css.md"
|
|
3120
|
+
]
|
|
1458
3121
|
},
|
|
1459
3122
|
"BrandScope": {
|
|
1460
3123
|
"category": "shell/screens",
|
|
1461
|
-
"parts": [
|
|
1462
|
-
|
|
1463
|
-
|
|
3124
|
+
"parts": [
|
|
3125
|
+
"BrandScopeProvider"
|
|
3126
|
+
],
|
|
3127
|
+
"helpers": [
|
|
3128
|
+
"BRAND_PRODUCTS",
|
|
3129
|
+
"brandLabel",
|
|
3130
|
+
"brandScope"
|
|
3131
|
+
],
|
|
3132
|
+
"hooks": [
|
|
3133
|
+
"useBrandScope"
|
|
3134
|
+
],
|
|
1464
3135
|
"useWhen": "Theme a subtree as a product: stamps `data-brand` and provides it so portalled surfaces re-stamp themselves; `brandScope(product)` for the attribute alone.",
|
|
1465
3136
|
"dontUseWhen": "Colouring by service line (`serviceToneStyle`) or by status (`intent`).",
|
|
1466
|
-
"related": [
|
|
3137
|
+
"related": [
|
|
3138
|
+
"Shell",
|
|
3139
|
+
"SidebarBrandSwitcher"
|
|
3140
|
+
],
|
|
1467
3141
|
"since": "1.18.0",
|
|
1468
|
-
"docs": [
|
|
3142
|
+
"docs": [
|
|
3143
|
+
"docs/integration/css.md"
|
|
3144
|
+
]
|
|
1469
3145
|
},
|
|
1470
3146
|
"AgreementViewer": {
|
|
1471
3147
|
"category": "shell/screens",
|
|
1472
|
-
"parts": [
|
|
3148
|
+
"parts": [
|
|
3149
|
+
"AgreementPaneHeading"
|
|
3150
|
+
],
|
|
1473
3151
|
"useWhen": "The client-facing agreement / proposal viewer: cover, steps, firm accent scope for the proposal blocks.",
|
|
1474
3152
|
"dontUseWhen": "Previewing a PDF (`PdfPreview`).",
|
|
1475
|
-
"related": [
|
|
3153
|
+
"related": [
|
|
3154
|
+
"ProposalPackageCard",
|
|
3155
|
+
"ProposalSignatureBlock",
|
|
3156
|
+
"ProposalSignerList"
|
|
3157
|
+
],
|
|
1476
3158
|
"since": "1.12.0"
|
|
1477
3159
|
},
|
|
1478
|
-
|
|
1479
3160
|
"cn": {
|
|
1480
3161
|
"category": "hooks/utilities",
|
|
1481
3162
|
"useWhen": "Merge class names (clsx + tailwind-merge) when composing `className`; consumer classes still win by cascade, `cn` only dedupes.",
|
|
1482
3163
|
"dontUseWhen": "Overriding a component part — pass `className`/`classNames` instead of rebuilding its classes.",
|
|
1483
|
-
"related": [
|
|
3164
|
+
"related": [
|
|
3165
|
+
"Button"
|
|
3166
|
+
],
|
|
1484
3167
|
"since": "0.0.0",
|
|
1485
|
-
"docs": [
|
|
3168
|
+
"docs": [
|
|
3169
|
+
"docs/integration/css.md"
|
|
3170
|
+
]
|
|
3171
|
+
},
|
|
3172
|
+
"useDataTable": {
|
|
3173
|
+
"category": "hooks/utilities",
|
|
3174
|
+
"label": "Data-table controller",
|
|
3175
|
+
"helpers": [
|
|
3176
|
+
"compareSortValues",
|
|
3177
|
+
"nextSortDirection"
|
|
3178
|
+
],
|
|
3179
|
+
"useWhen": "Building a data table: owns sorting, pagination, search, selection, column visibility and filters (each controllable or uncontrolled), derives the rows to render, and in `manual` mode only emits state for a server-driven table.",
|
|
3180
|
+
"dontUseWhen": "A static table with no state (the `Table` parts alone), or the data-driven convenience (`DataTableView`) once it is rebuilt on the hook.",
|
|
3181
|
+
"related": [
|
|
3182
|
+
"Table",
|
|
3183
|
+
"DataTable",
|
|
3184
|
+
"DataTableView",
|
|
3185
|
+
"Pagination"
|
|
3186
|
+
],
|
|
3187
|
+
"since": "unreleased",
|
|
3188
|
+
"docs": [
|
|
3189
|
+
"docs/data-tables.md"
|
|
3190
|
+
]
|
|
1486
3191
|
},
|
|
1487
3192
|
"useFieldControl": {
|
|
1488
3193
|
"category": "hooks/utilities",
|
|
1489
3194
|
"useWhen": "Building your own form control that should bind to `Field` like the design-system ones: returns ids, `aria-*`, invalid/disabled/required wiring; explicit props win.",
|
|
1490
3195
|
"dontUseWhen": "Wrapping an existing element once (`FieldControl`).",
|
|
1491
|
-
"related": [
|
|
3196
|
+
"related": [
|
|
3197
|
+
"Field",
|
|
3198
|
+
"FieldControl"
|
|
3199
|
+
],
|
|
1492
3200
|
"since": "1.32.0",
|
|
1493
|
-
"docs": [
|
|
3201
|
+
"docs": [
|
|
3202
|
+
"docs/adr/006-field-native-form-participation.md"
|
|
3203
|
+
]
|
|
1494
3204
|
},
|
|
1495
3205
|
"isoToDisplay": {
|
|
1496
3206
|
"category": "hooks/utilities",
|
|
1497
3207
|
"label": "Date utilities",
|
|
1498
|
-
"helpers": [
|
|
3208
|
+
"helpers": [
|
|
3209
|
+
"displayToIso",
|
|
3210
|
+
"applyMask",
|
|
3211
|
+
"applyYearMask",
|
|
3212
|
+
"isoToDate",
|
|
3213
|
+
"dateToIso",
|
|
3214
|
+
"isoToYear",
|
|
3215
|
+
"yearToIso",
|
|
3216
|
+
"DATE_DISPLAY_PLACEHOLDER",
|
|
3217
|
+
"YEAR_DISPLAY_PLACEHOLDER"
|
|
3218
|
+
],
|
|
1499
3219
|
"useWhen": "Convert between ISO `YYYY-MM-DD`, the `MM/DD/YYYY` display format and JS `Date` the way `DatePicker` does, and apply its typing masks.",
|
|
1500
3220
|
"dontUseWhen": "Locale-aware formatting for display text (`Intl.DateTimeFormat`).",
|
|
1501
|
-
"related": [
|
|
3221
|
+
"related": [
|
|
3222
|
+
"DatePicker",
|
|
3223
|
+
"DateRangePicker"
|
|
3224
|
+
],
|
|
1502
3225
|
"since": "0.11.0"
|
|
1503
3226
|
},
|
|
1504
3227
|
"COUNTRY_CODES": {
|
|
1505
3228
|
"category": "hooks/utilities",
|
|
1506
3229
|
"label": "Country codes",
|
|
1507
|
-
"helpers": [
|
|
3230
|
+
"helpers": [
|
|
3231
|
+
"getFlagEmoji",
|
|
3232
|
+
"parsePhoneForEditing"
|
|
3233
|
+
],
|
|
1508
3234
|
"useWhen": "The ISO country / dial-code table behind `PhoneCountryInput`, a flag emoji fallback, and splitting a stored phone string for editing.",
|
|
1509
3235
|
"dontUseWhen": "Full phone validation (bring libphonenumber).",
|
|
1510
|
-
"related": [
|
|
3236
|
+
"related": [
|
|
3237
|
+
"PhoneField",
|
|
3238
|
+
"PhoneCountryInput"
|
|
3239
|
+
],
|
|
1511
3240
|
"since": "1.1.0"
|
|
1512
3241
|
},
|
|
1513
3242
|
"serviceToneStyle": {
|
|
1514
3243
|
"category": "hooks/utilities",
|
|
1515
3244
|
"label": "Service tones",
|
|
1516
|
-
"helpers": [
|
|
3245
|
+
"helpers": [
|
|
3246
|
+
"SERVICE_TONES",
|
|
3247
|
+
"serviceToneLabel"
|
|
3248
|
+
],
|
|
1517
3249
|
"useWhen": "Tone a portal surface per service line by setting `--tone` / `--tone-bg` once on its root; labels for chips and headings.",
|
|
1518
3250
|
"dontUseWhen": "Status colour (`intent`) or product theming (`BrandScope`).",
|
|
1519
|
-
"related": [
|
|
3251
|
+
"related": [
|
|
3252
|
+
"CategoryDivider",
|
|
3253
|
+
"EngagementCard",
|
|
3254
|
+
"BrandScope"
|
|
3255
|
+
],
|
|
1520
3256
|
"since": "1.2.0"
|
|
1521
3257
|
},
|
|
1522
3258
|
"assetPath": {
|
|
1523
3259
|
"category": "hooks/utilities",
|
|
1524
3260
|
"label": "Asset base path",
|
|
1525
|
-
"helpers": [
|
|
3261
|
+
"helpers": [
|
|
3262
|
+
"getAssetBasePath",
|
|
3263
|
+
"setAssetBasePath"
|
|
3264
|
+
],
|
|
1526
3265
|
"useWhen": "The app is served from a subpath: call `setAssetBasePath` once so the design system's own artwork (`Logo`) resolves.",
|
|
1527
3266
|
"dontUseWhen": "Your own assets (use your framework's base path).",
|
|
1528
|
-
"related": [
|
|
3267
|
+
"related": [
|
|
3268
|
+
"Logo"
|
|
3269
|
+
],
|
|
1529
3270
|
"since": "1.33.0"
|
|
1530
3271
|
},
|
|
1531
3272
|
"systemTokens": {
|
|
1532
3273
|
"category": "hooks/utilities",
|
|
1533
3274
|
"label": "Tokens (root re-export)",
|
|
1534
|
-
"helpers": [
|
|
3275
|
+
"helpers": [
|
|
3276
|
+
"reference",
|
|
3277
|
+
"colors",
|
|
3278
|
+
"spacing",
|
|
3279
|
+
"radii",
|
|
3280
|
+
"shadows",
|
|
3281
|
+
"surfaces",
|
|
3282
|
+
"typography"
|
|
3283
|
+
],
|
|
1535
3284
|
"useWhen": "Token objects from JavaScript when a utility class cannot reach (inline styles, charts, motion); prefer the `/tokens` entry for a smaller import.",
|
|
1536
3285
|
"dontUseWhen": "Styling components — use the `--ds-*` custom properties and utilities; never read `reference`/`colors` in component code.",
|
|
1537
|
-
"related": [
|
|
3286
|
+
"related": [
|
|
3287
|
+
"BrandScope"
|
|
3288
|
+
],
|
|
1538
3289
|
"since": "0.0.0",
|
|
1539
|
-
"docs": [
|
|
3290
|
+
"docs": [
|
|
3291
|
+
"docs/design-system/shape-roles.md"
|
|
3292
|
+
]
|
|
3293
|
+
},
|
|
3294
|
+
"DataTablePattern": {
|
|
3295
|
+
"category": "data display",
|
|
3296
|
+
"label": "DataTable (compound)",
|
|
3297
|
+
"useWhen": "A records table driven by `useDataTable`: the toolbar with a labelled search, filters and a column-visibility menu, the table on the `Table*` parts with sort and selection wired to the controller, bulk actions, the merged pager and the built-in loading / empty / error bodies. `classNames.search` and `--ds-data-table-search-width` size the search field.",
|
|
3298
|
+
"dontUseWhen": "A table with no state (the `Table` parts alone), the hand-written `DataTable*` parts a product already composes, or the config-driven convenience (`DataTableView`).",
|
|
3299
|
+
"replacesRawHtml": [
|
|
3300
|
+
"hand-rolled toolbar + <table> + pager around per-table useState"
|
|
3301
|
+
],
|
|
3302
|
+
"related": [
|
|
3303
|
+
"useDataTable",
|
|
3304
|
+
"Table",
|
|
3305
|
+
"DataTable",
|
|
3306
|
+
"DataTableView",
|
|
3307
|
+
"Pagination",
|
|
3308
|
+
"BulkActionBar",
|
|
3309
|
+
"TableLoading"
|
|
3310
|
+
],
|
|
3311
|
+
"since": "unreleased",
|
|
3312
|
+
"docs": [
|
|
3313
|
+
"docs/data-tables.md"
|
|
3314
|
+
]
|
|
3315
|
+
},
|
|
3316
|
+
"EmptyValue": {
|
|
3317
|
+
"category": "data display",
|
|
3318
|
+
"status": "experimental",
|
|
3319
|
+
"useWhen": "A table or detail cell has no value: renders the em dash placeholder consistently.",
|
|
3320
|
+
"dontUseWhen": "The value is genuinely empty text a user typed — render it as-is.",
|
|
3321
|
+
"replacesRawHtml": [
|
|
3322
|
+
"<span>—</span>"
|
|
3323
|
+
],
|
|
3324
|
+
"since": "unreleased",
|
|
3325
|
+
"story": "src/composites/data-table-view.stories.tsx"
|
|
3326
|
+
},
|
|
3327
|
+
"SidebarDrawer": {
|
|
3328
|
+
"category": "shell/screens",
|
|
3329
|
+
"useWhen": "The sidebar nav off-canvas on small viewports: the same tree in a left-hand Sheet, with the focus trap, scroll lock and dismissal the overlay parts already provide.",
|
|
3330
|
+
"dontUseWhen": "Desktop widths (`Sidebar`) or a bottom tab bar (`BottomNav`).",
|
|
3331
|
+
"related": [
|
|
3332
|
+
"Sidebar",
|
|
3333
|
+
"Sheet",
|
|
3334
|
+
"Shell"
|
|
3335
|
+
],
|
|
3336
|
+
"status": "experimental",
|
|
3337
|
+
"since": "1.38.0"
|
|
1540
3338
|
}
|
|
1541
3339
|
},
|
|
1542
3340
|
"entries": {
|
|
@@ -1572,33 +3370,185 @@
|
|
|
1572
3370
|
}
|
|
1573
3371
|
},
|
|
1574
3372
|
"deprecatedAliases": [
|
|
1575
|
-
{
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
{
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
{
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
{
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
{
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
3373
|
+
{
|
|
3374
|
+
"deprecated": "`Button variant=\"primary\"`",
|
|
3375
|
+
"replacement": "`variant=\"solid\" intent=\"brand\"` (the default)",
|
|
3376
|
+
"codemod": "CM-04",
|
|
3377
|
+
"contract": "C-BTN-VARIANT"
|
|
3378
|
+
},
|
|
3379
|
+
{
|
|
3380
|
+
"deprecated": "`Button variant=\"secondary\"`",
|
|
3381
|
+
"replacement": "`variant=\"soft\" intent=\"neutral\"`",
|
|
3382
|
+
"codemod": "CM-04",
|
|
3383
|
+
"contract": "C-BTN-VARIANT"
|
|
3384
|
+
},
|
|
3385
|
+
{
|
|
3386
|
+
"deprecated": "`Button variant=\"destructive\"`",
|
|
3387
|
+
"replacement": "`variant=\"solid\" intent=\"danger\"`",
|
|
3388
|
+
"codemod": "CM-04",
|
|
3389
|
+
"contract": "C-BTN-VARIANT"
|
|
3390
|
+
},
|
|
3391
|
+
{
|
|
3392
|
+
"deprecated": "`Button variant=\"success\"`",
|
|
3393
|
+
"replacement": "`variant=\"solid\" intent=\"success\"`",
|
|
3394
|
+
"codemod": "CM-04",
|
|
3395
|
+
"contract": "C-BTN-VARIANT"
|
|
3396
|
+
},
|
|
3397
|
+
{
|
|
3398
|
+
"deprecated": "`Button variant=\"accent\"` / `\"dashed\"`",
|
|
3399
|
+
"replacement": "Reported by CM-04 for review: `accent` is a brand look, `dashed` an outline look; both keep rendering until 3.0",
|
|
3400
|
+
"codemod": "CM-04 (report)",
|
|
3401
|
+
"contract": "C-BTN-VARIANT"
|
|
3402
|
+
},
|
|
3403
|
+
{
|
|
3404
|
+
"deprecated": "`Button intent=\"destructive\"`",
|
|
3405
|
+
"replacement": "`intent=\"danger\"`",
|
|
3406
|
+
"codemod": "—",
|
|
3407
|
+
"contract": "C-BTN-VARIANT"
|
|
3408
|
+
},
|
|
3409
|
+
{
|
|
3410
|
+
"deprecated": "`Button size=\"compact\"` / `\"default\"` / `\"comfortable\"`, `\"icon-xs\"` / `\"icon-sm\"` / `\"icon\"`",
|
|
3411
|
+
"replacement": "`size=\"sm\"` / `\"md\"` / `\"lg\"`; icon sizes → `IconButton size`",
|
|
3412
|
+
"codemod": "CM-02 (explicit `size=\"md\"`)",
|
|
3413
|
+
"contract": "C-BTN-SIZE"
|
|
3414
|
+
},
|
|
3415
|
+
{
|
|
3416
|
+
"deprecated": "`Button` / `LinkButton` / `SubmitButton` `iconLeft` / `iconRight`",
|
|
3417
|
+
"replacement": "`iconStart` / `iconEnd`",
|
|
3418
|
+
"codemod": "CM-05",
|
|
3419
|
+
"contract": "C-BTN-ICONPROPS"
|
|
3420
|
+
},
|
|
3421
|
+
{
|
|
3422
|
+
"deprecated": "`Button` without `type` inside a form",
|
|
3423
|
+
"replacement": "`type=\"submit\"` where evident, or `SubmitButton`",
|
|
3424
|
+
"codemod": "CM-12",
|
|
3425
|
+
"contract": "—"
|
|
3426
|
+
},
|
|
3427
|
+
{
|
|
3428
|
+
"deprecated": "`Input` / `Textarea` / `SearchInput` `inputSize`",
|
|
3429
|
+
"replacement": "`size`",
|
|
3430
|
+
"codemod": "CM-07",
|
|
3431
|
+
"contract": "C-INPUT-SIZE"
|
|
3432
|
+
},
|
|
3433
|
+
{
|
|
3434
|
+
"deprecated": "`InputSizeAlias` `compact` / `default` / `comfortable`",
|
|
3435
|
+
"replacement": "`sm` / `md` / `lg`",
|
|
3436
|
+
"codemod": "—",
|
|
3437
|
+
"contract": "C-INPUT-SIZE"
|
|
3438
|
+
},
|
|
3439
|
+
{
|
|
3440
|
+
"deprecated": "`Select` `triggerClassName` / `contentClassName`",
|
|
3441
|
+
"replacement": "`classNames={{ trigger, content }}`",
|
|
3442
|
+
"codemod": "—",
|
|
3443
|
+
"contract": "C-SELECT-CLASSNAMES"
|
|
3444
|
+
},
|
|
3445
|
+
{
|
|
3446
|
+
"deprecated": "`Dash` (DataTableView cell)",
|
|
3447
|
+
"replacement": "`EmptyValue`",
|
|
3448
|
+
"codemod": "—",
|
|
3449
|
+
"contract": "—"
|
|
3450
|
+
},
|
|
3451
|
+
{
|
|
3452
|
+
"deprecated": "`StagePill` / `Assignee` / `MoneyCell` / `TableTone` (DataTableView product cells)",
|
|
3453
|
+
"replacement": "Product-owned renderers in `column.render` (`StatusBadge`, `Avatar`, `Intl.NumberFormat`, `EmptyValue`); hand-over to TAX in W8-13",
|
|
3454
|
+
"codemod": "—",
|
|
3455
|
+
"contract": "—"
|
|
3456
|
+
},
|
|
3457
|
+
{
|
|
3458
|
+
"deprecated": "`Select searchable`",
|
|
3459
|
+
"replacement": "`Combobox`",
|
|
3460
|
+
"codemod": "—",
|
|
3461
|
+
"contract": "—"
|
|
3462
|
+
},
|
|
3463
|
+
{
|
|
3464
|
+
"deprecated": "`Select` sentinel option values standing in for \"no value\"",
|
|
3465
|
+
"replacement": "A real empty value (`value=\"\"`, `clearable`)",
|
|
3466
|
+
"codemod": "CM-20 (finder)",
|
|
3467
|
+
"contract": "C-SELECT-EMPTY"
|
|
3468
|
+
},
|
|
3469
|
+
{
|
|
3470
|
+
"deprecated": "`SearchSelect` (`{ id, label }` options)",
|
|
3471
|
+
"replacement": "`Combobox` with `Option` (`{ value, label }`)",
|
|
3472
|
+
"codemod": "CM-08",
|
|
3473
|
+
"contract": "C-SEARCHSELECT"
|
|
3474
|
+
},
|
|
3475
|
+
{
|
|
3476
|
+
"deprecated": "`Checkbox indeterminate`",
|
|
3477
|
+
"replacement": "`checked=\"indeterminate\"`",
|
|
3478
|
+
"codemod": "—",
|
|
3479
|
+
"contract": "C-CHECKBOX-INDET"
|
|
3480
|
+
},
|
|
3481
|
+
{
|
|
3482
|
+
"deprecated": "`DatePicker onChange={e => f(e.target.value)}` (fake event)",
|
|
3483
|
+
"replacement": "`onValueChange={value => f(value)}`",
|
|
3484
|
+
"codemod": "CM-10",
|
|
3485
|
+
"contract": "C-DATE-FAKEEVENT"
|
|
3486
|
+
},
|
|
3487
|
+
{
|
|
3488
|
+
"deprecated": "`StatusDot` / `IconTile` / `Spinner` / `SegmentedProgress` / `SuiteProgress` `tone`",
|
|
3489
|
+
"replacement": "`intent` (`pro` → `brand`, `muted` → `neutral`, `accent` → `info`, `destructive` → `danger`)",
|
|
3490
|
+
"codemod": "CM-06",
|
|
3491
|
+
"contract": "C-TONE"
|
|
3492
|
+
},
|
|
3493
|
+
{
|
|
3494
|
+
"deprecated": "`ProgressBar` / `ProgressRing` `variant` (`default`, `destructive`, …)",
|
|
3495
|
+
"replacement": "`intent` (`brand`, `danger`, …); value-driven auto colour written down explicitly",
|
|
3496
|
+
"codemod": "CM-19",
|
|
3497
|
+
"contract": "C-PROGRESS"
|
|
3498
|
+
},
|
|
3499
|
+
{
|
|
3500
|
+
"deprecated": "`Badge variant=\"default\"` / `\"secondary\"` / `\"destructive\"` / `\"success\"` / `\"warning\"` / `\"info\"` / `\"outline\"`",
|
|
3501
|
+
"replacement": "`variant` (`solid`, `soft`, `outline`) + `intent`",
|
|
3502
|
+
"codemod": "—",
|
|
3503
|
+
"contract": "C-BADGE"
|
|
3504
|
+
},
|
|
3505
|
+
{
|
|
3506
|
+
"deprecated": "`FormError`",
|
|
3507
|
+
"replacement": "`FieldError` inside a `Field`",
|
|
3508
|
+
"codemod": "—",
|
|
3509
|
+
"contract": "C-FORM-MSG"
|
|
3510
|
+
},
|
|
3511
|
+
{
|
|
3512
|
+
"deprecated": "`FormSuccess`",
|
|
3513
|
+
"replacement": "`FieldDescription` inside a `Field`, or a toast for a saved form",
|
|
3514
|
+
"codemod": "—",
|
|
3515
|
+
"contract": "C-FORM-MSG"
|
|
3516
|
+
},
|
|
3517
|
+
{
|
|
3518
|
+
"deprecated": "`FormSection`",
|
|
3519
|
+
"replacement": "`Fieldset` + `FieldsetLegend`",
|
|
3520
|
+
"codemod": "—",
|
|
3521
|
+
"contract": "—"
|
|
3522
|
+
},
|
|
3523
|
+
{
|
|
3524
|
+
"deprecated": "`PhoneInput`, `PhoneCountryInput` (+ `CountrySelect`, `CountryFlag`)",
|
|
3525
|
+
"replacement": "`PhoneField` (E.164 value, `Combobox` country picker)",
|
|
3526
|
+
"codemod": "—",
|
|
3527
|
+
"contract": "—"
|
|
3528
|
+
},
|
|
3529
|
+
{
|
|
3530
|
+
"deprecated": "`Sidebar gutterPx`",
|
|
3531
|
+
"replacement": "The sidebar's own geometry tokens",
|
|
3532
|
+
"codemod": "—",
|
|
3533
|
+
"contract": "—"
|
|
3534
|
+
},
|
|
3535
|
+
{
|
|
3536
|
+
"deprecated": "`CloseIcon`, `ArrowRightSmallIcon`",
|
|
3537
|
+
"replacement": "`XIcon`, `ArrowRightIcon` (same drawing)",
|
|
3538
|
+
"codemod": "—",
|
|
3539
|
+
"contract": "—"
|
|
3540
|
+
},
|
|
3541
|
+
{
|
|
3542
|
+
"deprecated": "Hidden `<input name>` mirrors added because a control posted nothing",
|
|
3543
|
+
"replacement": "Remove them: every control participates in the form through `FormBridge`",
|
|
3544
|
+
"codemod": "CM-14 (finder)",
|
|
3545
|
+
"contract": "C-HIDDEN-MIRRORS"
|
|
3546
|
+
},
|
|
3547
|
+
{
|
|
3548
|
+
"deprecated": "Selectors into a component's internal DOM",
|
|
3549
|
+
"replacement": "`className` / `classNames` and `data-slot` selectors (ADR-008)",
|
|
3550
|
+
"codemod": "CM-15 (finder)",
|
|
3551
|
+
"contract": "C-DOM-*"
|
|
3552
|
+
}
|
|
1603
3553
|
]
|
|
1604
3554
|
}
|