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