@scattered-light/loomiere-mojave 0.24.1 → 0.41.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.
Files changed (48) hide show
  1. package/dist/exports/AGENTS.md +1 -1
  2. package/dist/exports/base-ui.css +5574 -0
  3. package/dist/exports/base-ui.md +535 -0
  4. package/dist/exports/catalog.json +34 -0
  5. package/dist/exports/design-system/README.md +1 -1
  6. package/dist/exports/design-system/components/Badge/README.md +2 -1
  7. package/dist/exports/design-system/components/Badge/preview.html +457 -1
  8. package/dist/exports/design-system/components/ChecklistNotice/README.md +53 -0
  9. package/dist/exports/design-system/components/ChecklistNotice/preview.html +475 -0
  10. package/dist/exports/design-system/components/ChipPicker/README.md +43 -0
  11. package/dist/exports/design-system/components/ChipPicker/preview.html +475 -0
  12. package/dist/exports/design-system/components/DataTable/README.md +9 -2
  13. package/dist/exports/design-system/components/DataTable/preview.html +202 -202
  14. package/dist/exports/design-system/components/EmptyState/README.md +17 -3
  15. package/dist/exports/design-system/components/EmptyState/preview.html +170 -170
  16. package/dist/exports/design-system/components/FileDropZone/README.md +38 -0
  17. package/dist/exports/design-system/components/FileDropZone/preview.html +19 -0
  18. package/dist/exports/design-system/components/LineItemGrid/README.md +53 -0
  19. package/dist/exports/design-system/components/LineItemGrid/preview.html +475 -0
  20. package/dist/exports/design-system/components/MultiSelect/README.md +8 -2
  21. package/dist/exports/design-system/components/MultiSelect/preview.html +2 -2
  22. package/dist/exports/design-system/components/Notice/README.md +6 -2
  23. package/dist/exports/design-system/components/Notice/preview.html +2 -2
  24. package/dist/exports/design-system/components/ParameterBar/README.md +68 -0
  25. package/dist/exports/design-system/components/ParameterBar/preview.html +475 -0
  26. package/dist/exports/design-system/components/RadioCard/README.md +43 -0
  27. package/dist/exports/design-system/components/RadioCard/preview.html +19 -0
  28. package/dist/exports/design-system/components/Shortcuts/README.md +80 -0
  29. package/dist/exports/design-system/components/Shortcuts/preview.html +19 -0
  30. package/dist/exports/design-system/components/SourcePreview/README.md +45 -0
  31. package/dist/exports/design-system/components/SourcePreview/preview.html +19 -0
  32. package/dist/exports/design-system/components/SplitButton/README.md +2 -1
  33. package/dist/exports/design-system/components/SplitButton/preview.html +2 -2
  34. package/dist/exports/design-system/components/StatBand/README.md +34 -0
  35. package/dist/exports/design-system/components/StatBand/preview.html +475 -0
  36. package/dist/exports/design-system/components/Stepper/README.md +34 -0
  37. package/dist/exports/design-system/components/Stepper/preview.html +19 -0
  38. package/dist/exports/design-system/components/SummaryStrip/README.md +36 -0
  39. package/dist/exports/design-system/components/SummaryStrip/preview.html +19 -0
  40. package/dist/exports/design-system/components/Table/README.md +2 -1
  41. package/dist/exports/design-system/components/Tabs/README.md +2 -1
  42. package/dist/exports/design-system/components/Tabs/preview.html +1 -1
  43. package/dist/exports/design-system/components/Text/README.md +29 -0
  44. package/dist/exports/design-system/components/Text/preview.html +19 -0
  45. package/dist/exports/design-system/components/bundle.css +2851 -433
  46. package/dist/exports/design-system/components/bundle.js +7 -7
  47. package/dist/exports/design-system/components/index.d.ts +7 -24
  48. package/package.json +2 -2
@@ -0,0 +1,535 @@
1
+ # Base UI classes for mojave
2
+
3
+ `base-ui.css` styles every [Base UI](https://base-ui.com) part (written for `@base-ui/react` 1.9.0) with this theme. Base UI renders unstyled parts and leaves the look to you, so the styles target class names: give each part the class below and it takes on the brand, in every mode, look and `data-color`.
4
+
5
+ ```ts
6
+ import './theme/tokens.css'; // the variables: load first
7
+ import './theme/utilities.css'; // optional: text-style and layout classes
8
+ import './theme/exports/base-ui.css'; // reset + Base UI part styles
9
+ ```
10
+
11
+ ```tsx
12
+ import { Switch } from '@base-ui/react/switch';
13
+
14
+ <div className="SwitchContainer" data-size="sm">
15
+ <Switch.Root id="wifi" className="SwitchRoot"><Switch.Thumb className="SwitchThumb" /></Switch.Root>
16
+ <label className="SwitchLabel" htmlFor="wifi">Wi-Fi</label>
17
+ </div>
18
+ ```
19
+
20
+ A `className` can be a string or Base UI's state callback; either way, keep the part's class in it (`className="SelectItem my-row"`).
21
+
22
+ ## What you set, what Base UI sets
23
+
24
+ - Base UI sets the state attributes itself: `data-checked`, `data-open`, `data-disabled`, `data-highlighted`, `data-side` and so on. The styles answer to them; you do nothing.
25
+ - You set the design attributes: `data-size="sm|lg"` (md is the default; some parts also take `xs` or `xl`, listed below), `data-emphasis="bold|standard|subtle|quiet"` on anything with the `Button` class (triggers and close buttons included), and `data-color="<palette>"` (`primary`, `secondary`, `error`, …) on any part or section to repaint it in that palette.
26
+ - `data-theme` (light, dark, high contrast, color vision) and `data-look` go on `<html>` or any section, as for the rest of the theme. Pairs (`.sl-pair-<name>`) work on a section too.
27
+
28
+ ## Notes
29
+
30
+ - The reset (box sizing, margins, focus outlines, reduced motion) is in `@layer reset`, so any unlayered rule of yours wins over it. The part styles are unlayered.
31
+ - With Tailwind v4, utilities on a part lose to these unlayered styles. Use `@scattered-light/loomiere-base-ui/tailwind.css` there, which puts the same styles in Tailwind's layers.
32
+ - Fonts are yours to load (the brand's families are in `tokens.css` as `--sl-font-family-*`). Icon sizing inside buttons expects [Material Symbols](https://fonts.google.com/icons) (`<span class="material-symbols-outlined">add</span>`); any inline SVG works too.
33
+ - Not included: the React wrappers that put these classes on for you, and the components Base UI doesn't have (Badge, DatePicker, MoneyField, data tables, Splitter, EmptyState, the HTML `Table` class…). Those come with `@scattered-light/loomiere-base-ui`.
34
+
35
+ ## Parts
36
+
37
+ ### Accordion
38
+
39
+ [Base UI docs](https://base-ui.com/react/components/accordion). No component tokens. Hover, press, chevron, divider and motion are the disclosure concept (tokens/semantic/disclosure.json); the trigger is the title-base heading and the panel is base text. The accordion sits on whatever surface holds it.
40
+
41
+ | Part | Class | Data attributes it answers to |
42
+ |---|---|---|
43
+ | `Accordion.Root` | `Accordion` | `data-variant`: `separated`, `bordered` |
44
+ | `Accordion.Item` | `AccordionItem` | |
45
+ | `Accordion.Header` | `AccordionHeader` | |
46
+ | `Accordion.Trigger` | `AccordionTrigger` | `data-disabled`; `data-panel-open` |
47
+ | `Accordion.Panel` | `AccordionPanel` | `data-starting-style`; `data-ending-style` |
48
+ | `<div>` (yours) | `AccordionContent` | |
49
+
50
+ Also styled, for elements you put inside the parts: `AccordionIcon`.
51
+
52
+ ### AlertDialog
53
+
54
+ [Base UI docs](https://base-ui.com/react/components/alert-dialog). No component tokens and no rules of its own. An alert dialog looks exactly like a dialog, so its backdrop, popup, title, description and actions are styled with the dialog's in Dialog.css. Its buttons are .Button elements: the confirming one bold, a cancel quiet, and a destructive one bold with data-color="error".
55
+
56
+ | Part | Class | Data attributes it answers to |
57
+ |---|---|---|
58
+ | `AlertDialog.Trigger` | `Button` | |
59
+ | `AlertDialog.Backdrop` | `AlertDialogBackdrop` | |
60
+ | `AlertDialog.Popup` | `AlertDialogPopup` | |
61
+ | `AlertDialog.Title` | `AlertDialogTitle` | |
62
+ | `AlertDialog.Description` | `AlertDialogDescription` | |
63
+ | `AlertDialog.Close` | `Button` | |
64
+ | `<div>` (yours) | `AlertDialogActions` | |
65
+
66
+ ### Autocomplete
67
+
68
+ [Base UI docs](https://base-ui.com/react/components/autocomplete). No component tokens. The input is Input (Input.css), the clear button is an icon button, and the list is a popup of item rows with the shared group label, separator and empty message.
69
+
70
+ | Part | Class | Data attributes it answers to |
71
+ |---|---|---|
72
+ | `Autocomplete.Input` | `AutocompleteInput` | |
73
+ | `Autocomplete.Clear` | `AutocompleteClear` | |
74
+ | `Autocomplete.Positioner` | `AutocompletePositioner` | |
75
+ | `Autocomplete.Popup` | `AutocompletePopup` | `data-ending-style` |
76
+ | `Autocomplete.List` | `AutocompleteList` | |
77
+ | `Autocomplete.Item` | `AutocompleteItem` | `data-highlighted`; `data-selected`; `data-disabled` |
78
+ | `Autocomplete.GroupLabel` | `AutocompleteGroupLabel` | |
79
+ | `Autocomplete.Separator` | `AutocompleteSeparator` | |
80
+ | `Autocomplete.Empty` | `AutocompleteEmpty` | |
81
+ | `<div>` (yours) | `AutocompleteRoot` | |
82
+
83
+ ### Avatar
84
+
85
+ [Base UI docs](https://base-ui.com/react/components/avatar). A round picture with a ring in the page color, so avatars in a group cut out of each other in both themes. Initials paint with the avatar's emphasis level (bold unless data-emphasis says otherwise), so data-color re-colors them and the brand's ladder sets how loud they are. Initials use the heading text style one tier per size. Only the sizes are avatar tokens.
86
+
87
+ | Part | Class | Data attributes it answers to |
88
+ |---|---|---|
89
+ | `Avatar.Root` | `AvatarRoot` | `data-size`: `xs`, `sm`, `lg`, `xl` |
90
+ | `Avatar.Image` | `AvatarImage` | |
91
+ | `Avatar.Fallback` | `AvatarFallback` | |
92
+ | `<div>` (yours) | `AvatarGroup` | |
93
+
94
+ ### Button
95
+
96
+ [Base UI docs](https://base-ui.com/react/components/button). Colors are the brand's emphasis levels, sizes are control.*, text is the trigger text style of each tier, and icons fill the button line (icon-size one tier up). Only the pill shape and disabled fade are Button's own (tokens/component/button.json).
97
+
98
+ | Part | Class | Data attributes it answers to |
99
+ |---|---|---|
100
+ | `Button` | `Button` | `data-icon-only`; `data-emphasis`: `link`; `data-size`: `xs`, `sm`, `lg` |
101
+
102
+ ### Checkbox
103
+
104
+ [Base UI docs](https://base-ui.com/react/components/checkbox). Sizes follow the label: the box is the icon size one tier above the label's text tier (like a button's icon) and the check mark one tier below it.
105
+
106
+ | Part | Class | Data attributes it answers to |
107
+ |---|---|---|
108
+ | `Checkbox.Root` | `CheckboxRoot` | `data-size`: `sm`, `lg`; `data-checked`; `data-indeterminate`; `data-disabled`; `data-variant`: `outline`, `circular-outline`, `circular` |
109
+ | `Checkbox.Indicator` | `CheckboxIndicator` | |
110
+ | `<label>` (yours) | `CheckboxLabel` | `data-size`: `sm`, `lg`; `data-disabled` |
111
+
112
+ Also styled, for elements you put inside the parts: `CheckboxIcon`.
113
+
114
+ ### CheckboxGroup
115
+
116
+ [Base UI docs](https://base-ui.com/react/components/checkbox-group). /* Each checkbox row is already a full tap target tall, so the rows sit close.
117
+
118
+ | Part | Class | Data attributes it answers to |
119
+ |---|---|---|
120
+ | `CheckboxGroup` | `CheckboxGroup` | `data-disabled` |
121
+
122
+ ### Collapsible
123
+
124
+ [Base UI docs](https://base-ui.com/react/components/collapsible). No component tokens. Hover, press, chevron and motion are the disclosure concept (tokens/semantic/disclosure.json). The trigger is base-subtitle text with a base-size chevron; the panel lines up under the trigger's text and sits on the overlay surface.
125
+
126
+ | Part | Class | Data attributes it answers to |
127
+ |---|---|---|
128
+ | `Collapsible.Root` | `Collapsible` | |
129
+ | `Collapsible.Trigger` | `CollapsibleTrigger` | `data-panel-open` |
130
+ | `Collapsible.Panel` | `CollapsiblePanel` | `data-starting-style`; `data-ending-style` |
131
+ | `<div>` (yours) | `CollapsibleContent` | |
132
+
133
+ Also styled, for elements you put inside the parts: `CollapsibleIcon`.
134
+
135
+ ### Combobox
136
+
137
+ [Base UI docs](https://base-ui.com/react/components/combobox). No component tokens. The input is Input (Input.css); the chips box is a field; the clear and open buttons are icon buttons; the list is a popup of item rows with the shared group label, separator and empty message. Rules that adjust Input are scoped under a Combobox parent so they win over Input.css, which loads later.
138
+
139
+ | Part | Class | Data attributes it answers to |
140
+ |---|---|---|
141
+ | `Combobox.Label` | `ComboboxLabel` | |
142
+ | `Combobox.Input` | `ComboboxInput` | |
143
+ | `Combobox.Clear` | `ComboboxClear` | |
144
+ | `Combobox.Icon` | `ComboboxIcon` | |
145
+ | `Combobox.Chips` | `ComboboxChips` | |
146
+ | `Combobox.Chip` | `ComboboxChip` | `data-highlighted` |
147
+ | `Combobox.ChipRemove` | `ComboboxChipRemove` | |
148
+ | `Combobox.Positioner` | `ComboboxPositioner` | |
149
+ | `Combobox.Popup` | `ComboboxPopup` | |
150
+ | `Combobox.List` | `ComboboxList` | |
151
+ | `Combobox.Item` | `ComboboxItem` | `data-highlighted`; `data-selected`; `data-disabled` |
152
+ | `Combobox.ItemIndicator` | `ComboboxItemIndicator` | |
153
+ | `Combobox.GroupLabel` | `ComboboxGroupLabel` | |
154
+ | `Combobox.Separator` | `ComboboxSeparator` | |
155
+ | `Combobox.Empty` | `ComboboxEmpty` | |
156
+ | `Combobox.Status` | `ComboboxStatus` | |
157
+ | `<div>` (yours) | `ComboboxRoot` | |
158
+
159
+ Also styled, for elements you put inside the parts: `ComboboxContainer`, `ComboboxInputWrapper`, `ComboboxChipRemoveIcon`, `ComboboxActionButtons`, `ComboboxTrigger`, `ComboboxClearIcon`, `ComboboxTriggerIcon`, `ComboboxItemIndicatorIcon`, `ComboboxItemText`, `ComboboxSelectTrigger`, `ComboboxInputContainer`, `ComboboxSpinner`, `ComboboxItemTitle`, `ComboboxItemSubtitle`, `ComboboxItemUsername`, `ComboboxItemEmail`.
160
+
161
+ ### ContextMenu
162
+
163
+ [Base UI docs](https://base-ui.com/react/components/context-menu). No component tokens. Opens on right-click; the trigger area only sets the cursor. The popup is the popup concept, rows are item rows at the dense menu height, and group labels, separators and check slots are the shared list parts, so menus and listboxes read as one family.
164
+
165
+ | Part | Class | Data attributes it answers to |
166
+ |---|---|---|
167
+ | `ContextMenu.Trigger` | `ContextMenuTrigger` | |
168
+ | `ContextMenu.Positioner` | `ContextMenuPositioner` | |
169
+ | `ContextMenu.Popup` | `ContextMenuPopup` | |
170
+ | `ContextMenu.Item` | `ContextMenuItem` | `data-highlighted`; `data-disabled` |
171
+ | `ContextMenu.CheckboxItem` | `ContextMenuCheckboxItem` | `data-highlighted`; `data-disabled` |
172
+ | `ContextMenu.CheckboxItemIndicator` | `ContextMenuCheckboxItemIndicator` | |
173
+ | `ContextMenu.RadioItem` | `ContextMenuRadioItem` | `data-highlighted`; `data-disabled`; `data-unchecked` |
174
+ | `ContextMenu.RadioItemIndicator` | `ContextMenuRadioItemIndicator` | |
175
+ | `ContextMenu.SubmenuTrigger` | `ContextMenuSubmenuTrigger` | `data-highlighted`; `data-disabled` |
176
+ | `ContextMenu.Group` | `ContextMenuGroup` | |
177
+ | `ContextMenu.GroupLabel` | `ContextMenuGroupLabel` | |
178
+ | `ContextMenu.Separator` | `ContextMenuSeparator` | |
179
+ | `ContextMenu.Arrow` | `ContextMenuArrow` | |
180
+
181
+ Also styled, for elements you put inside the parts: `ContextMenuCheckboxItemIndicatorIcon`, `ContextMenuRadioItemIndicatorIcon`.
182
+
183
+ ### Dialog
184
+
185
+ [Base UI docs](https://base-ui.com/react/components/dialog). Both are centered modals built from the modal concept (tokens/semantic/modal.json): the modal-surface and modal-backdrop patterns, the title-amplify heading and base description. Alert dialog shares every rule here; AlertDialog.css adds nothing of its own. Action buttons are plain .Button elements, so they follow the emphasis levels.
186
+
187
+ | Part | Class | Data attributes it answers to |
188
+ |---|---|---|
189
+ | `Dialog.Trigger` | `Button` | |
190
+ | `Dialog.Backdrop` | `DialogBackdrop` | `data-starting-style`; `data-ending-style` |
191
+ | `Dialog.Popup` | `DialogPopup` | `data-starting-style`; `data-ending-style` |
192
+ | `Dialog.Title` | `DialogTitle` | |
193
+ | `Dialog.Description` | `DialogDescription` | |
194
+ | `Dialog.Close` | `DialogClose`, or `Button` to draw it as a button | |
195
+ | `<div>` (yours) | `DialogContent` | |
196
+ | `<div>` (yours) | `DialogActions` | |
197
+
198
+ ### Drawer
199
+
200
+ [Base UI docs](https://base-ui.com/react/components/drawer). The surface, scrim, heading and motion are the modal concept's (--sl-modal-*), so a drawer reads as a dialog's sibling; only its size and grab bar are its own (--sl-drawer-*). Base UI supplies the swipe through --drawer-swipe-movement-x/y and data-swipe-direction on the popup. The working-paper rule (rule.width, 0 by default) replaces the top border with a heavier line in rule.color. It is an inset shadow, so it stays put while the drawer scrolls.
201
+
202
+ | Part | Class | Data attributes it answers to |
203
+ |---|---|---|
204
+ | `Drawer.Trigger` | `Button` | |
205
+ | `Drawer.Backdrop` | `DrawerBackdrop` | `data-starting-style`; `data-ending-style` |
206
+ | `Drawer.Viewport` | `DrawerViewport` | |
207
+ | `Drawer.Popup` | `DrawerPopup` | `data-swipe-direction`: `down`, `up`, `right`, `left`; `data-starting-style`; `data-ending-style`; `data-swiping` |
208
+ | `Drawer.Title` | `DrawerTitle` | |
209
+ | `Drawer.Description` | `DrawerDescription` | |
210
+ | `Drawer.Content` | `DrawerContent` | |
211
+ | `Drawer.Close` | `Button` | |
212
+
213
+ ### Field
214
+
215
+ [Base UI docs](https://base-ui.com/react/components/field). Label, control, description and error. No component tokens: spacing is the field concept (tokens/semantic/field.json) and text is whole text styles. Field.Control is styled with Input (Input.css). Number field's label, description and error are the same parts, so they share these rules.
216
+
217
+ | Part | Class | Data attributes it answers to |
218
+ |---|---|---|
219
+ | `Field.Root` | `FieldRoot` | `data-disabled` |
220
+ | `Field.Label` | `FieldLabel` | |
221
+ | `Field.Description` | `FieldDescription` | |
222
+ | `Field.Error` | `FieldError` | |
223
+ | `Field.Control` | `FieldControl` | |
224
+
225
+ ### Fieldset
226
+
227
+ [Base UI docs](https://base-ui.com/react/components/fieldset). No component tokens: a titled group of fields, spaced by the stack gaps, with whole text styles.
228
+
229
+ | Part | Class | Data attributes it answers to |
230
+ |---|---|---|
231
+ | `Fieldset.Root` | `Fieldset` | |
232
+ | `Fieldset.Legend` | `FieldsetLegend` | |
233
+ | `<div>` (yours) | `FieldsetDescription` | |
234
+
235
+ ### Form
236
+
237
+ [Base UI docs](https://base-ui.com/react/components/form). No component tokens: fields stack with the large block space, and the action buttons sit in a row after them.
238
+
239
+ | Part | Class | Data attributes it answers to |
240
+ |---|---|---|
241
+ | `Form` | `Form` | |
242
+ | `<div>` (yours) | `FormActions` | |
243
+
244
+ ### Input
245
+
246
+ [Base UI docs](https://base-ui.com/react/components/input). No component tokens: the look is the field concept (tokens/semantic/field.json), sizes are control.*, and text is a whole text style. Field.Control is the same control inside a Field, and Number field's, Autocomplete's and Combobox's inputs are the same control with buttons at the end, and an OTP field's slots are the same control cut into squares (OTPField.css sizes them), so they share these rules.
247
+
248
+ | Part | Class | Data attributes it answers to |
249
+ |---|---|---|
250
+ | `Input` | `Input` | `data-error`; `data-size`: `xs`, `sm`, `lg` |
251
+
252
+ ### Menu
253
+
254
+ [Base UI docs](https://base-ui.com/react/components/menu). No component tokens. The trigger is a Button. The popup is the popup concept, rows are item rows at the dense menu height, and group labels, separators and check slots are the shared list parts, so menus and listboxes read as one family.
255
+
256
+ | Part | Class | Data attributes it answers to |
257
+ |---|---|---|
258
+ | `Menu.Trigger` | `Button` | |
259
+ | `Menu.Positioner` | `MenuPositioner` | |
260
+ | `Menu.Popup` | `MenuPopup` | |
261
+ | `Menu.Item` | `MenuItem` | `data-highlighted`; `data-disabled` |
262
+ | `Menu.CheckboxItem` | `MenuCheckboxItem` | `data-highlighted`; `data-disabled` |
263
+ | `Menu.CheckboxItemIndicator` | `MenuCheckboxItemIndicator` | |
264
+ | `Menu.RadioItem` | `MenuRadioItem` | `data-highlighted`; `data-disabled` |
265
+ | `Menu.RadioItemIndicator` | `MenuRadioItemIndicator` | `data-unchecked` |
266
+ | `Menu.SubmenuTrigger` | `MenuSubmenuTrigger` | `data-highlighted`; `data-disabled` |
267
+ | `Menu.Group` | `MenuGroup` | |
268
+ | `Menu.GroupLabel` | `MenuGroupLabel` | |
269
+ | `Menu.Separator` | `MenuSeparator` | |
270
+
271
+ Also styled, for elements you put inside the parts: `MenuCheckboxItemIndicatorIcon`, `MenuRadioItemIndicatorIcon`.
272
+
273
+ ### Menubar
274
+
275
+ [Base UI docs](https://base-ui.com/react/components/menubar). No component tokens. A row of quiet triggers, each opening a menu. The popup is the popup concept, rows are item rows at the dense menu height, and group labels, separators and check slots are the shared list parts, so menus and listboxes read as one family.
276
+
277
+ | Part | Class | Data attributes it answers to |
278
+ |---|---|---|
279
+ | `Menubar` | `MenubarRoot` | |
280
+
281
+ Also styled, for elements you put inside the parts: `MenubarTrigger`, `MenubarPositioner`, `MenubarPopup`, `MenubarItem`, `MenubarCheckboxItem`, `MenubarRadioItem`, `MenubarSubmenuTrigger`, `MenubarCheckboxItemIndicator`, `MenubarRadioItemIndicator`, `MenubarCheckboxItemIndicatorIcon`, `MenubarRadioItemIndicatorIcon`, `MenubarGroup`, `MenubarGroupLabel`, `MenubarSeparator`.
282
+
283
+ ### Meter
284
+
285
+ [Base UI docs](https://base-ui.com/react/components/meter). A gauge (tokens/semantic/gauge.json). The fill is the solid color of the scope around it: the accent by default, or set data-color on the root (success, warning, error, any palette) to show a zone. Base UI doesn't map low/high/optimum, so the app picks the color.
286
+
287
+ | Part | Class | Data attributes it answers to |
288
+ |---|---|---|
289
+ | `Meter.Root` | `MeterRoot` | |
290
+ | `Meter.Label` | `MeterLabel` | |
291
+ | `Meter.Value` | `MeterValue` | |
292
+ | `Meter.Track` | `MeterTrack` | `data-size`: `sm`, `lg` |
293
+ | `Meter.Indicator` | `MeterIndicator` | |
294
+ | `<div>` (yours) | `MeterHeader` | |
295
+
296
+ ### NavigationMenu
297
+
298
+ [Base UI docs](https://base-ui.com/react/components/navigation-menu). The strip is the bar concept, the panel is the popup concept and each link is an item row with a title and description. Only the panel sizes are its own (tokens/component/navigation-menu.json). The panel slides between triggers on the slow duration with the out easing.
299
+
300
+ | Part | Class | Data attributes it answers to |
301
+ |---|---|---|
302
+ | `NavigationMenu.Root` | `NavigationMenuRoot` | |
303
+ | `NavigationMenu.List` | `NavigationMenuList` | |
304
+ | `NavigationMenu.Content` | `NavigationMenuContent` | `data-starting-style`; `data-ending-style`; `data-activation-direction`: `left`, `right` |
305
+ | `NavigationMenu.Trigger` | `NavigationMenuTrigger` | `data-popup-open` |
306
+ | `NavigationMenu.Icon` | `NavigationMenuIcon` | `data-popup-open` |
307
+ | `NavigationMenu.Positioner` | `NavigationMenuPositioner` | `data-side`: `top`, `bottom`, `left`, `right`; `data-instant` |
308
+ | `NavigationMenu.Popup` | `NavigationMenuPopup` | `data-starting-style`; `data-ending-style` |
309
+ | `NavigationMenu.Arrow` | `NavigationMenuArrow` | `data-side`: `top`, `bottom`, `left`, `right` |
310
+ | `NavigationMenu.Viewport` | `NavigationMenuViewport` | |
311
+ | `NavigationMenu.Link` | `NavigationMenuLink` | |
312
+
313
+ Also styled, for elements you put inside the parts: `NavigationMenuLinkList`, `NavigationMenuSections`, `NavigationMenuLinkTitle`, `NavigationMenuLinkDescription`, `NavigationMenuSection`, `NavigationMenuSectionHeading`, `NavigationMenuArrowFill`, `NavigationMenuArrowOuterStroke`, `NavigationMenuArrowInnerStroke`, `NavigationMenuSeparator`.
314
+
315
+ ### NumberField
316
+
317
+ [Base UI docs](https://base-ui.com/react/components/number-field). No component tokens. The input is Input (Input.css) and the label, description and error are Field's parts (Field.css). Only the stepper buttons are drawn here: two stacked halves of the field's height, as wide as the smallest control.
318
+
319
+ | Part | Class | Data attributes it answers to |
320
+ |---|---|---|
321
+ | `NumberField.Root` | `NumberFieldRoot` | |
322
+ | `NumberField.Group` | `NumberFieldGroup` | |
323
+ | `NumberField.Input` | `NumberFieldInput` | |
324
+ | `NumberField.Increment` | `NumberFieldIncrement` | |
325
+ | `NumberField.Decrement` | `NumberFieldDecrement` | |
326
+ | `NumberField.ScrubArea` | `NumberFieldScrubArea` | `data-scrubbing` |
327
+ | `<label>` (yours) | `NumberFieldLabel` | |
328
+
329
+ ### OTPField
330
+
331
+ [Base UI docs](https://base-ui.com/react/components/otp-field). One-time code entry: a row of single-character inputs. Each slot is the same control as Input (Input.css styles .OTPFieldInput with the field pattern, hover, focus, disabled and error), cut into a square as tall as a control of the same size. data-size on the root picks the control size and the text tier of the same name, as on Input. No component tokens.
332
+
333
+ | Part | Class | Data attributes it answers to |
334
+ |---|---|---|
335
+ | `OTPField.Root` | `OTPFieldRoot` | `data-size`: `sm`, `lg` |
336
+ | `OTPField.Input` | `OTPFieldInput` | |
337
+ | `OTPField.Separator` | `OTPFieldSeparator` | |
338
+
339
+ ### Popover
340
+
341
+ [Base UI docs](https://base-ui.com/react/components/popover). /* ============================================ TRIGGER ============================================
342
+
343
+ | Part | Class | Data attributes it answers to |
344
+ |---|---|---|
345
+ | `Popover.Trigger` | `PopoverTrigger`, or `PopoverTrigger Button` to draw it as a button | |
346
+ | `Popover.Backdrop` | `PopoverBackdrop` | |
347
+ | `Popover.Positioner` | `PopoverPositioner` | |
348
+ | `Popover.Popup` | `PopoverPopup` | `data-starting-style`; `data-ending-style` |
349
+ | `Popover.Title` | `PopoverTitle` | |
350
+ | `Popover.Description` | `PopoverDescription` | |
351
+ | `Popover.Close` | `PopoverClose` | |
352
+ | `Popover.Arrow` | `PopoverArrow` | `data-side`: `top`, `bottom`, `left`, `right` |
353
+
354
+ Also styled, for elements you put inside the parts: `PopoverArrowFill`, `PopoverArrowOuterStroke`, `PopoverArrowInnerStroke`.
355
+
356
+ ### PreviewCard
357
+
358
+ [Base UI docs](https://base-ui.com/react/components/preview-card). The popup concept (surface, arrow, motion) with a title-magnify title and condense description. Only its min and max width are its own (tokens/component/preview-card.json).
359
+
360
+ | Part | Class | Data attributes it answers to |
361
+ |---|---|---|
362
+ | `PreviewCard.Trigger` | `PreviewCardTrigger` | |
363
+ | `PreviewCard.Positioner` | `PreviewCardPositioner` | |
364
+ | `PreviewCard.Popup` | `PreviewCardPopup` | `data-starting-style`; `data-ending-style` |
365
+ | `PreviewCard.Arrow` | `PreviewCardArrow` | `data-side`: `top`, `bottom`, `left`, `right` |
366
+ | `<img>` (yours) | `PreviewCardImage` | |
367
+ | `<div>` (yours) | `PreviewCardContent` | |
368
+ | `<p>` (yours) | `PreviewCardDescription` | |
369
+
370
+ Also styled, for elements you put inside the parts: `PreviewCardTitle`, `PreviewCardArrowFill`, `PreviewCardArrowOuterStroke`, `PreviewCardArrowInnerStroke`.
371
+
372
+ ### Progress
373
+
374
+ [Base UI docs](https://base-ui.com/react/components/progress). A gauge (tokens/semantic/gauge.json), the same bar as Meter. The fill is the solid color of the scope around it: the accent by default, or set data-color on the root (success, warning, error, any palette).
375
+
376
+ | Part | Class | Data attributes it answers to |
377
+ |---|---|---|
378
+ | `Progress.Root` | `ProgressRoot` | `data-indeterminate`; `data-size`: `sm`, `lg` |
379
+ | `Progress.Label` | `ProgressLabel` | |
380
+ | `Progress.Value` | `ProgressValue` | |
381
+ | `Progress.Track` | `ProgressTrack` | |
382
+ | `Progress.Indicator` | `ProgressIndicator` | |
383
+ | `<div>` (yours) | `ProgressHeader` | |
384
+
385
+ ### Radio
386
+
387
+ [Base UI docs](https://base-ui.com/react/components/radio). Same box as Checkbox, always round. Sizes follow the label the same way, and the dot is a share of the circle (check.dot-scale).
388
+
389
+ | Part | Class | Data attributes it answers to |
390
+ |---|---|---|
391
+ | `Radio.Root` | `RadioButton` | `data-unchecked`; `data-checked` |
392
+ | `Radio.Indicator` | `RadioIndicator` | `data-unchecked` |
393
+ | `RadioGroup` | `RadioGroup` | |
394
+ | `<label>` (yours) | `RadioRoot` | `data-size`: `sm`, `lg`; `data-disabled` |
395
+ | `<span>` (yours) | `RadioLabel` | |
396
+
397
+ ### ScrollArea
398
+
399
+ [Base UI docs](https://base-ui.com/react/components/scroll-area). The scrollbar is the content scrollbar (content.scrollbar-*): a track that stays clear until you reach for it, and a thumb in the strong fills. No component tokens.
400
+
401
+ | Part | Class | Data attributes it answers to |
402
+ |---|---|---|
403
+ | `ScrollArea.Root` | `ScrollAreaRoot` | |
404
+ | `ScrollArea.Viewport` | `ScrollAreaViewport` | |
405
+ | `ScrollArea.Scrollbar` | `ScrollAreaScrollbar` | `data-orientation`: `vertical`, `horizontal` |
406
+ | `ScrollArea.Thumb` | `ScrollAreaThumb` | `data-dragging` |
407
+ | `ScrollArea.Corner` | `ScrollAreaCorner` | |
408
+
409
+ ### Select
410
+
411
+ [Base UI docs](https://base-ui.com/react/components/select). The trigger is a field (the field pattern, control sizes, the base text style); the list is a popup of item rows. Select keeps no tokens of its own.
412
+
413
+ | Part | Class | Data attributes it answers to |
414
+ |---|---|---|
415
+ | `Select.Trigger` | `SelectTrigger`, or `Button` to draw it as a button | |
416
+ | `Select.Value` | `SelectValue` | |
417
+ | `Select.Icon` | `SelectIcon` | |
418
+ | `Select.Backdrop` | `SelectBackdrop` | |
419
+ | `Select.Positioner` | `SelectPositioner` | |
420
+ | `Select.Popup` | `SelectPopup` | |
421
+ | `Select.List` | `SelectList` | |
422
+ | `Select.Item` | `SelectItem` | `data-highlighted`; `data-disabled`; `data-selected` |
423
+ | `Select.ItemIndicator` | `SelectItemIndicator` | |
424
+ | `Select.ItemText` | `SelectItemText` | |
425
+ | `Select.Arrow` | `SelectArrow` | |
426
+ | `Select.ScrollDownArrow` | `SelectScrollArrow` | |
427
+ | `Select.ScrollUpArrow` | `SelectScrollArrow` | |
428
+ | `Select.Group` | `SelectGroup` | |
429
+ | `Select.GroupLabel` | `SelectGroupLabel` | |
430
+ | `Select.Separator` | `SelectSeparator` | |
431
+
432
+ Also styled, for elements you put inside the parts: `SelectItemIndicatorIcon`, `SelectScrollArrowIcon`, `SelectArrowFill`, `SelectArrowStroke`.
433
+
434
+ ### Separator
435
+
436
+ [Base UI docs](https://base-ui.com/react/components/separator). A hairline in the everyday divider color (border.default), one stroke thick, with a step of space on either side. No component tokens.
437
+
438
+ | Part | Class | Data attributes it answers to |
439
+ |---|---|---|
440
+ | `Separator` | `Separator` | `data-orientation`: `horizontal`, `vertical` |
441
+
442
+ ### Slider
443
+
444
+ [Base UI docs](https://base-ui.com/react/components/slider). A slider is a gauge you can drag: the track, fill and label row are gauge.* (the same bar as Meter and Progress, thin size), and the fill is the scope's solid color, so data-color on the root re-colors it. The thumb is a field-colored knob ringed in that color. Only the knob size and the vertical length are slider tokens.
445
+
446
+ | Part | Class | Data attributes it answers to |
447
+ |---|---|---|
448
+ | `Slider.Root` | `SliderRoot` | |
449
+ | `Slider.Label` | `SliderLabel` | |
450
+ | `Slider.Value` | `SliderValue` | |
451
+ | `Slider.Control` | `SliderControl` | `data-disabled`; `data-orientation`: `vertical`, `horizontal` |
452
+ | `Slider.Track` | `SliderTrack` | |
453
+ | `Slider.Indicator` | `SliderIndicator` | |
454
+ | `Slider.Thumb` | `SliderThumb` | `data-disabled`; `data-dragging` |
455
+ | `<div>` (yours) | `SliderHeader` | |
456
+
457
+ Also styled, for elements you put inside the parts: `SliderMark`.
458
+
459
+ ### Switch
460
+
461
+ [Base UI docs](https://base-ui.com/react/components/switch). Switch keeps its track sizes. The thumb, its travel and the ON/OFF text are worked out from them: the thumb fills the track's height inside the padding, travels (width - height), and the text centers in the part the thumb leaves free.
462
+
463
+ | Part | Class | Data attributes it answers to |
464
+ |---|---|---|
465
+ | `Switch.Root` | `SwitchRoot` | `data-checked`; `data-disabled` |
466
+ | `Switch.Thumb` | `SwitchThumb` | `data-checked` |
467
+ | `<div>` (yours) | `SwitchContainer` | `data-size`: `sm`, `lg`; `data-disabled` |
468
+ | `<label>` (yours) | `SwitchLabel` | |
469
+
470
+ ### Tabs
471
+
472
+ [Base UI docs](https://base-ui.com/react/components/tabs). No component tokens. The divider, the selected line and color, hover and the disabled fade are the disclosure concept (tokens/semantic/disclosure.json). Tabs use the text style of their tier and switch to that tier's selected style when chosen, like a selected row in a list.
473
+
474
+ | Part | Class | Data attributes it answers to |
475
+ |---|---|---|
476
+ | `Tabs.Root` | `TabsRoot` | `data-orientation`: `vertical`; `data-size`: `sm`, `lg` |
477
+ | `Tabs.List` | `TabsList` | `data-variant`: `sheet` |
478
+ | `Tabs.Tab` | `TabsTab` | `data-disabled`; `data-active` |
479
+ | `Tabs.Panel` | `TabsPanel` | |
480
+
481
+ Also styled, for elements you put inside the parts: `TabsTabCount`.
482
+
483
+ ### Toast
484
+
485
+ [Base UI docs](https://base-ui.com/react/components/toast). A toast is a notice (tokens/semantic/notice.json) on the popup surface. A toast whose type is success, warning, error or info takes that palette (the build points the scope at it); data-color picks any other palette. Toast tokens hold only the stack's place and width.
486
+
487
+ | Part | Class | Data attributes it answers to |
488
+ |---|---|---|
489
+ | `Toast.Viewport` | `Viewport` | |
490
+ | `Toast.Root` | `Toast` | `data-color`; `data-type`: `success`, `warning`, `error`, `info`; `data-expanded`; `data-starting-style`; `data-ending-style`; `data-swipe-direction`: `up`, `down`, `left`, `right`; `data-limited` |
491
+ | `Toast.Content` | `Content` | `data-behind`; `data-expanded` |
492
+ | `Toast.Title` | `Title` | |
493
+ | `Toast.Description` | `Description` | |
494
+ | `Toast.Close` | `Close` | |
495
+ | `Toast.Action` | `Button` | |
496
+
497
+ ### Toggle
498
+
499
+ [Base UI docs](https://base-ui.com/react/components/toggle). A toggle is a button that stays pressed: the same heights, padding, gap and trigger text style as a button of the same size. Pressed, it takes its emphasis level's pressed look (standard unless data-emphasis on it or its group says otherwise), so the brand's emphasis ladder decides how loud an "on" toggle is.
500
+
501
+ | Part | Class | Data attributes it answers to |
502
+ |---|---|---|
503
+ | `Toggle` | `Toggle` | `data-disabled`; `data-pressed`; `data-size`: `sm`, `lg` |
504
+
505
+ ### ToggleGroup
506
+
507
+ [Base UI docs](https://base-ui.com/react/components/toggle-group). No component tokens. The strip is the bar concept (tokens/semantic/bar.json); the toggles are Toggle, with item corners so they nest inside the strip's.
508
+
509
+ | Part | Class | Data attributes it answers to |
510
+ |---|---|---|
511
+ | `ToggleGroup` | `ToggleGroup` | `data-variant`: `segmented` |
512
+
513
+ ### Toolbar
514
+
515
+ [Base UI docs](https://base-ui.com/react/components/toolbar). The strip is the bar concept (tokens/semantic/bar.json). Buttons, toggles, selects and inputs inside it keep their own styles; only the field's width is the toolbar's.
516
+
517
+ | Part | Class | Data attributes it answers to |
518
+ |---|---|---|
519
+ | `Toolbar.Root` | `Toolbar` | |
520
+ | `Toolbar.Group` | `ToolbarGroup` | |
521
+ | `Toolbar.Separator` | `ToolbarSeparator` | |
522
+ | `Toolbar.Button` | `Button` | |
523
+ | `Toolbar.Link` | `ToolbarLink` | |
524
+ | `Toolbar.Input` | `ToolbarInput` | |
525
+
526
+ ### Tooltip
527
+
528
+ [Base UI docs](https://base-ui.com/react/components/tooltip). The inverse surface (surface.inverse, text.on-inverse-surface) with condense text, so a tooltip reads as a label laid over the page. Motion is the popup's; only the width limit is the tooltip's own (tokens/component/tooltip.json).
529
+
530
+ | Part | Class | Data attributes it answers to |
531
+ |---|---|---|
532
+ | `Tooltip.Trigger` | `TooltipTrigger`, or `TooltipTrigger Button` to draw it as a button | |
533
+ | `Tooltip.Positioner` | `TooltipPositioner` | |
534
+ | `Tooltip.Popup` | `TooltipPopup` | `data-starting-style`; `data-ending-style` |
535
+ | `Tooltip.Arrow` | `TooltipArrow` | |
@@ -57,6 +57,16 @@
57
57
  ],
58
58
  "for": "React apps on @chakra-ui/react v3: pass the exported system to ChakraProvider, and load tokens.css."
59
59
  },
60
+ {
61
+ "id": "base-ui",
62
+ "name": "Base UI",
63
+ "file": "base-ui.css",
64
+ "files": [
65
+ "base-ui.css",
66
+ "base-ui.md"
67
+ ],
68
+ "for": "Base UI (@base-ui/react) on its own: the reset and a style for every Base UI part, by class name (className=\"SwitchRoot\"), following data-size, data-emphasis, data-color, data-theme and data-look. base-ui.md lists which class goes on which part. Needs tokens.css. For the React wrappers and custom components, install @scattered-light/loomiere-base-ui instead."
69
+ },
60
70
  {
61
71
  "id": "ag-grid-v36",
62
72
  "name": "AG Grid 36+",
@@ -113,6 +123,10 @@
113
123
  "design-system/components/Checkbox/preview.html",
114
124
  "design-system/components/CheckboxGroup/README.md",
115
125
  "design-system/components/CheckboxGroup/preview.html",
126
+ "design-system/components/ChecklistNotice/README.md",
127
+ "design-system/components/ChecklistNotice/preview.html",
128
+ "design-system/components/ChipPicker/README.md",
129
+ "design-system/components/ChipPicker/preview.html",
116
130
  "design-system/components/Collapsible/README.md",
117
131
  "design-system/components/Collapsible/preview.html",
118
132
  "design-system/components/Collection/README.md",
@@ -144,12 +158,16 @@
144
158
  "design-system/components/Field/preview.html",
145
159
  "design-system/components/Fieldset/README.md",
146
160
  "design-system/components/Fieldset/preview.html",
161
+ "design-system/components/FileDropZone/README.md",
162
+ "design-system/components/FileDropZone/preview.html",
147
163
  "design-system/components/Form/README.md",
148
164
  "design-system/components/Form/preview.html",
149
165
  "design-system/components/FormGrid/README.md",
150
166
  "design-system/components/FormGrid/preview.html",
151
167
  "design-system/components/Input/README.md",
152
168
  "design-system/components/Input/preview.html",
169
+ "design-system/components/LineItemGrid/README.md",
170
+ "design-system/components/LineItemGrid/preview.html",
153
171
  "design-system/components/ListDetail/README.md",
154
172
  "design-system/components/ListDetail/preview.html",
155
173
  "design-system/components/Menu/README.md",
@@ -170,6 +188,8 @@
170
188
  "design-system/components/NumberField/preview.html",
171
189
  "design-system/components/OTPField/README.md",
172
190
  "design-system/components/OTPField/preview.html",
191
+ "design-system/components/ParameterBar/README.md",
192
+ "design-system/components/ParameterBar/preview.html",
173
193
  "design-system/components/PickerButton/README.md",
174
194
  "design-system/components/PickerButton/preview.html",
175
195
  "design-system/components/PickerSplit/README.md",
@@ -181,6 +201,8 @@
181
201
  "design-system/components/Progress/preview.html",
182
202
  "design-system/components/Radio/README.md",
183
203
  "design-system/components/Radio/preview.html",
204
+ "design-system/components/RadioCard/README.md",
205
+ "design-system/components/RadioCard/preview.html",
184
206
  "design-system/components/ScrollArea/README.md",
185
207
  "design-system/components/ScrollArea/preview.html",
186
208
  "design-system/components/Select/README.md",
@@ -189,26 +211,38 @@
189
211
  "design-system/components/Separator/preview.html",
190
212
  "design-system/components/Sheet/README.md",
191
213
  "design-system/components/Sheet/preview.html",
214
+ "design-system/components/Shortcuts/README.md",
215
+ "design-system/components/Shortcuts/preview.html",
192
216
  "design-system/components/SideNav/README.md",
193
217
  "design-system/components/SideNav/preview.html",
194
218
  "design-system/components/Slider/README.md",
195
219
  "design-system/components/Slider/preview.html",
220
+ "design-system/components/SourcePreview/README.md",
221
+ "design-system/components/SourcePreview/preview.html",
196
222
  "design-system/components/Spinner/README.md",
197
223
  "design-system/components/Spinner/preview.html",
198
224
  "design-system/components/SplitButton/README.md",
199
225
  "design-system/components/SplitButton/preview.html",
200
226
  "design-system/components/Splitter/README.md",
201
227
  "design-system/components/Splitter/preview.html",
228
+ "design-system/components/StatBand/README.md",
229
+ "design-system/components/StatBand/preview.html",
202
230
  "design-system/components/StatCard/README.md",
203
231
  "design-system/components/StatCard/preview.html",
204
232
  "design-system/components/StatFigure/README.md",
205
233
  "design-system/components/StatFigure/preview.html",
234
+ "design-system/components/Stepper/README.md",
235
+ "design-system/components/Stepper/preview.html",
236
+ "design-system/components/SummaryStrip/README.md",
237
+ "design-system/components/SummaryStrip/preview.html",
206
238
  "design-system/components/Switch/README.md",
207
239
  "design-system/components/Switch/preview.html",
208
240
  "design-system/components/Table/README.md",
209
241
  "design-system/components/Table/preview.html",
210
242
  "design-system/components/Tabs/README.md",
211
243
  "design-system/components/Tabs/preview.html",
244
+ "design-system/components/Text/README.md",
245
+ "design-system/components/Text/preview.html",
212
246
  "design-system/components/Toast/README.md",
213
247
  "design-system/components/Toast/preview.html",
214
248
  "design-system/components/Toggle/README.md",
@@ -144,7 +144,7 @@ Looks: this brand can look 2 ways. With no `data-look` it is Mojave; `data-look=
144
144
 
145
145
  ## Components
146
146
 
147
- The components are [Base UI](https://base-ui.com) parts styled by class name: `Accordion`, `AlertDialog`, `AppBar`, `Autocomplete`, `Avatar`, `Badge`, `Button`, `Checkbox`, `CheckboxGroup`, `Collapsible`, `Collection`, `CollectionCards`, `CollectionPagination`, `CollectionToolbar`, `Combobox`, `ContextMenu`, `DataList`, `DataTable`, `DatePicker`, `DescriptionList`, `Dialog`, `Drawer`, `EditableList`, `EmptyState`, `Field`, `Fieldset`, `Form`, `FormGrid`, `Input`, `ListDetail`, `Menu`, `Menubar`, `Meter`, `MoneyField`, `MultiSelect`, `NavigationMenu`, `Notice`, `NumberField`, `OTPField`, `PickerButton`, `PickerSplit`, `Popover`, `PreviewCard`, `Progress`, `Radio`, `ScrollArea`, `Select`, `Separator`, `Sheet`, `SideNav`, `Slider`, `Spinner`, `SplitButton`, `Splitter`, `StatCard`, `StatFigure`, `Switch`, `Table`, `Tabs`, `Toast`, `Toggle`, `ToggleGroup`, `Toolbar`, `Tooltip`. Each component's README lists the classes its parts take and the data attributes they answer to (`data-size="sm|lg"`, `data-emphasis`, `data-color`).
147
+ The components are [Base UI](https://base-ui.com) parts styled by class name: `Accordion`, `AlertDialog`, `AppBar`, `Autocomplete`, `Avatar`, `Badge`, `Button`, `Checkbox`, `CheckboxGroup`, `ChecklistNotice`, `ChipPicker`, `Collapsible`, `Collection`, `CollectionCards`, `CollectionPagination`, `CollectionToolbar`, `Combobox`, `ContextMenu`, `DataList`, `DataTable`, `DatePicker`, `DescriptionList`, `Dialog`, `Drawer`, `EditableList`, `EmptyState`, `Field`, `Fieldset`, `FileDropZone`, `Form`, `FormGrid`, `Input`, `LineItemGrid`, `ListDetail`, `Menu`, `Menubar`, `Meter`, `MoneyField`, `MultiSelect`, `NavigationMenu`, `Notice`, `NumberField`, `OTPField`, `ParameterBar`, `PickerButton`, `PickerSplit`, `Popover`, `PreviewCard`, `Progress`, `Radio`, `RadioCard`, `ScrollArea`, `Select`, `Separator`, `Sheet`, `Shortcuts`, `SideNav`, `Slider`, `SourcePreview`, `Spinner`, `SplitButton`, `Splitter`, `StatBand`, `StatCard`, `StatFigure`, `Stepper`, `SummaryStrip`, `Switch`, `Table`, `Tabs`, `Text`, `Toast`, `Toggle`, `ToggleGroup`, `Toolbar`, `Tooltip`. Each component's README lists the classes its parts take and the data attributes they answer to (`data-size="sm|lg"`, `data-emphasis`, `data-color`).
148
148
 
149
149
  Icons are Material Symbols Outlined by ligature name (`<span class="material-symbols-outlined">search</span>`, or `Loomiere.MaterialSymbol name="search"`), sized by the `.icon-<tier>` utilities to match the text beside them.
150
150