@smwb/ui-react 2.8.0 → 2.9.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/AI_LESS_OVERRIDES.md +84 -21
- package/AI_THEMING.md +72 -28
- package/README.md +654 -0
- package/dist/assets/styles/less/components/appBar/appBar.entry.css +1 -1
- package/dist/assets/styles/less/components/button/button.entry.css +1 -1
- package/dist/assets/styles/less/components/checkbox/checkbox.entry.css +1 -1
- package/dist/assets/styles/less/components/chip/chip.entry.css +1 -1
- package/dist/assets/styles/less/components/commandPalette/commandPalette.entry.css +1 -0
- package/dist/assets/styles/less/components/composer/composer.entry.css +1 -0
- package/dist/assets/styles/less/components/dagView/dagView.entry.css +1 -0
- package/dist/assets/styles/less/components/diffStat/diffStat.entry.css +1 -0
- package/dist/assets/styles/less/components/kbd/kbd.entry.css +1 -0
- package/dist/assets/styles/less/components/list/list.entry.css +1 -1
- package/dist/assets/styles/less/components/qrCode/qrCode.entry.css +1 -0
- package/dist/assets/styles/less/components/radioButton/radioButton.entry.css +1 -1
- package/dist/assets/styles/less/components/selectField/selectField.entry.css +1 -1
- package/dist/assets/styles/less/components/sidebar/sidebar.entry.css +1 -1
- package/dist/assets/styles/less/components/statusDot/statusDot.entry.css +1 -0
- package/dist/assets/styles/less/components/swimlanes/swimlanes.entry.css +1 -0
- package/dist/assets/styles/less/components/tabGroups/tabGroups.entry.css +1 -0
- package/dist/assets/styles/less/components/tabs/tab/tab.entry.css +1 -1
- package/dist/assets/styles/less/components/tabs/tabPanel/tabPanel.entry.css +1 -0
- package/dist/assets/styles/less/components/tabs/tabs.entry.css +1 -1
- package/dist/assets/styles/less/components/textField/textField.entry.css +1 -1
- package/dist/assets/styles/less/components/toggle/toggle.entry.css +1 -1
- package/dist/assets/styles/less/components/treeView/treeView.entry.css +1 -1
- package/dist/assets/styles/less/tokens.entry.css +1 -1
- package/dist/components/dataDisplay/chat/chat.d.ts +43 -1
- package/dist/components/dataDisplay/chat/chat.js +179 -150
- package/dist/components/dataDisplay/chat/chat.js.map +1 -1
- package/dist/components/dataDisplay/chat/chatComposer.d.ts +17 -0
- package/dist/components/dataDisplay/chat/chatComposer.js +31 -29
- package/dist/components/dataDisplay/chat/chatComposer.js.map +1 -1
- package/dist/components/dataDisplay/chat/index.d.ts +1 -1
- package/dist/components/dataDisplay/chat/utils.d.ts +14 -0
- package/dist/components/dataDisplay/chat/utils.js.map +1 -1
- package/dist/components/dataDisplay/dagView/dagLayout.d.ts +74 -0
- package/dist/components/dataDisplay/dagView/dagLayout.js +289 -0
- package/dist/components/dataDisplay/dagView/dagLayout.js.map +1 -0
- package/dist/components/dataDisplay/dagView/dagView.d.ts +157 -0
- package/dist/components/dataDisplay/dagView/dagView.js +543 -0
- package/dist/components/dataDisplay/dagView/dagView.js.map +1 -0
- package/dist/components/dataDisplay/dagView/index.d.ts +4 -0
- package/dist/components/dataDisplay/dagView/panZoom.d.ts +75 -0
- package/dist/components/dataDisplay/dagView/panZoom.js +171 -0
- package/dist/components/dataDisplay/dagView/panZoom.js.map +1 -0
- package/dist/components/dataDisplay/diffStat/diffStat.d.ts +54 -0
- package/dist/components/dataDisplay/diffStat/diffStat.js +63 -0
- package/dist/components/dataDisplay/diffStat/diffStat.js.map +1 -0
- package/dist/components/dataDisplay/diffStat/index.d.ts +2 -0
- package/dist/components/dataDisplay/kbd/index.d.ts +4 -0
- package/dist/components/dataDisplay/kbd/kbd.d.ts +40 -0
- package/dist/components/dataDisplay/kbd/kbd.js +27 -0
- package/dist/components/dataDisplay/kbd/kbd.js.map +1 -0
- package/dist/components/dataDisplay/kbd/kbdKeys.d.ts +18 -0
- package/dist/components/dataDisplay/kbd/kbdKeys.js +72 -0
- package/dist/components/dataDisplay/kbd/kbdKeys.js.map +1 -0
- package/dist/components/dataDisplay/list/listItem.d.ts +34 -0
- package/dist/components/dataDisplay/list/listItem.js +47 -24
- package/dist/components/dataDisplay/list/listItem.js.map +1 -1
- package/dist/components/dataDisplay/qrCode/index.d.ts +2 -0
- package/dist/components/dataDisplay/qrCode/qrCode.d.ts +28 -0
- package/dist/components/dataDisplay/qrCode/qrCode.js +78 -0
- package/dist/components/dataDisplay/qrCode/qrCode.js.map +1 -0
- package/dist/components/dataDisplay/qrCode/qrCodePath.d.ts +7 -0
- package/dist/components/dataDisplay/qrCode/qrCodePath.js +20 -0
- package/dist/components/dataDisplay/qrCode/qrCodePath.js.map +1 -0
- package/dist/components/dataDisplay/statusDot/index.d.ts +2 -0
- package/dist/components/dataDisplay/statusDot/statusDot.d.ts +35 -0
- package/dist/components/dataDisplay/statusDot/statusDot.js +30 -0
- package/dist/components/dataDisplay/statusDot/statusDot.js.map +1 -0
- package/dist/components/dataDisplay/swimlanes/index.d.ts +2 -0
- package/dist/components/dataDisplay/swimlanes/swimlanes.d.ts +53 -0
- package/dist/components/dataDisplay/swimlanes/swimlanes.js +357 -0
- package/dist/components/dataDisplay/swimlanes/swimlanes.js.map +1 -0
- package/dist/components/dataDisplay/treeView/treeView.d.ts +17 -1
- package/dist/components/dataDisplay/treeView/treeView.js +113 -92
- package/dist/components/dataDisplay/treeView/treeView.js.map +1 -1
- package/dist/components/feedBack/modal/modal.js +84 -63
- package/dist/components/feedBack/modal/modal.js.map +1 -1
- package/dist/components/inputs/button/button.d.ts +13 -1
- package/dist/components/inputs/button/button.js +57 -51
- package/dist/components/inputs/button/button.js.map +1 -1
- package/dist/components/inputs/composer/composer.d.ts +149 -0
- package/dist/components/inputs/composer/composer.js +219 -0
- package/dist/components/inputs/composer/composer.js.map +1 -0
- package/dist/components/inputs/composer/composerFiles.d.ts +26 -0
- package/dist/components/inputs/composer/composerFiles.js +19 -0
- package/dist/components/inputs/composer/composerFiles.js.map +1 -0
- package/dist/components/inputs/composer/composerKeys.d.ts +29 -0
- package/dist/components/inputs/composer/composerKeys.js +7 -0
- package/dist/components/inputs/composer/composerKeys.js.map +1 -0
- package/dist/components/inputs/composer/index.d.ts +3 -0
- package/dist/components/layout/sheet/sheet.d.ts +12 -0
- package/dist/components/layout/sheet/sheet.js +152 -137
- package/dist/components/layout/sheet/sheet.js.map +1 -1
- package/dist/components/layout/tabGroups/index.d.ts +4 -0
- package/dist/components/layout/tabGroups/tabGroups.d.ts +94 -0
- package/dist/components/layout/tabGroups/tabGroups.js +783 -0
- package/dist/components/layout/tabGroups/tabGroups.js.map +1 -0
- package/dist/components/layout/tabGroups/tabGroupsFocus.d.ts +55 -0
- package/dist/components/layout/tabGroups/tabGroupsFocus.js +199 -0
- package/dist/components/layout/tabGroups/tabGroupsFocus.js.map +1 -0
- package/dist/components/layout/tabGroups/tabGroupsLayout.d.ts +250 -0
- package/dist/components/layout/tabGroups/tabGroupsLayout.js +497 -0
- package/dist/components/layout/tabGroups/tabGroupsLayout.js.map +1 -0
- package/dist/components/navigation/appBar/appBar.d.ts +22 -0
- package/dist/components/navigation/appBar/appBar.js +31 -26
- package/dist/components/navigation/appBar/appBar.js.map +1 -1
- package/dist/components/navigation/commandPalette/commandPalette.d.ts +111 -0
- package/dist/components/navigation/commandPalette/commandPalette.js +337 -0
- package/dist/components/navigation/commandPalette/commandPalette.js.map +1 -0
- package/dist/components/navigation/commandPalette/commandPaletteFilter.d.ts +11 -0
- package/dist/components/navigation/commandPalette/commandPaletteFilter.js +16 -0
- package/dist/components/navigation/commandPalette/commandPaletteFilter.js.map +1 -0
- package/dist/components/navigation/commandPalette/commandPaletteNavigation.d.ts +13 -0
- package/dist/components/navigation/commandPalette/commandPaletteNavigation.js +38 -0
- package/dist/components/navigation/commandPalette/commandPaletteNavigation.js.map +1 -0
- package/dist/components/navigation/commandPalette/commandPaletteTypes.d.ts +39 -0
- package/dist/components/navigation/commandPalette/index.d.ts +4 -0
- package/dist/components/navigation/sidebar/sidebar.d.ts +10 -0
- package/dist/components/navigation/sidebar/sidebar.js +61 -59
- package/dist/components/navigation/sidebar/sidebar.js.map +1 -1
- package/dist/components/navigation/tabs/index.d.ts +3 -1
- package/dist/components/navigation/tabs/tab/tab.d.ts +88 -1
- package/dist/components/navigation/tabs/tab/tab.js +121 -42
- package/dist/components/navigation/tabs/tab/tab.js.map +1 -1
- package/dist/components/navigation/tabs/tabPanel/tabPanel.d.ts +19 -0
- package/dist/components/navigation/tabs/tabPanel/tabPanel.js +27 -0
- package/dist/components/navigation/tabs/tabPanel/tabPanel.js.map +1 -0
- package/dist/components/navigation/tabs/tabs.d.ts +75 -5
- package/dist/components/navigation/tabs/tabs.js +369 -145
- package/dist/components/navigation/tabs/tabs.js.map +1 -1
- package/dist/components/navigation/tabs/tabs.utils.d.ts +20 -0
- package/dist/components/navigation/tabs/tabs.utils.js +11 -0
- package/dist/components/navigation/tabs/tabs.utils.js.map +1 -0
- package/dist/components/navigation/tabs/tabsContext.d.ts +11 -0
- package/dist/components/navigation/tabs/tabsContext.js +6 -0
- package/dist/components/navigation/tabs/tabsContext.js.map +1 -0
- package/dist/headless/components/dataDisplay/chat/chat.js +179 -150
- package/dist/headless/components/dataDisplay/chat/chat.js.map +1 -1
- package/dist/headless/components/dataDisplay/chat/chatComposer.js +31 -29
- package/dist/headless/components/dataDisplay/chat/chatComposer.js.map +1 -1
- package/dist/headless/components/dataDisplay/chat/utils.js.map +1 -1
- package/dist/headless/components/dataDisplay/dagView/dagLayout.js +289 -0
- package/dist/headless/components/dataDisplay/dagView/dagLayout.js.map +1 -0
- package/dist/headless/components/dataDisplay/dagView/dagView.js +541 -0
- package/dist/headless/components/dataDisplay/dagView/dagView.js.map +1 -0
- package/dist/headless/components/dataDisplay/dagView/panZoom.js +171 -0
- package/dist/headless/components/dataDisplay/dagView/panZoom.js.map +1 -0
- package/dist/headless/components/dataDisplay/diffStat/diffStat.js +61 -0
- package/dist/headless/components/dataDisplay/diffStat/diffStat.js.map +1 -0
- package/dist/headless/components/dataDisplay/kbd/kbd.js +25 -0
- package/dist/headless/components/dataDisplay/kbd/kbd.js.map +1 -0
- package/dist/headless/components/dataDisplay/kbd/kbdKeys.js +72 -0
- package/dist/headless/components/dataDisplay/kbd/kbdKeys.js.map +1 -0
- package/dist/headless/components/dataDisplay/list/listItem.js +47 -24
- package/dist/headless/components/dataDisplay/list/listItem.js.map +1 -1
- package/dist/headless/components/dataDisplay/qrCode/qrCode.js +76 -0
- package/dist/headless/components/dataDisplay/qrCode/qrCode.js.map +1 -0
- package/dist/headless/components/dataDisplay/qrCode/qrCodePath.js +20 -0
- package/dist/headless/components/dataDisplay/qrCode/qrCodePath.js.map +1 -0
- package/dist/headless/components/dataDisplay/statusDot/statusDot.js +28 -0
- package/dist/headless/components/dataDisplay/statusDot/statusDot.js.map +1 -0
- package/dist/headless/components/dataDisplay/swimlanes/swimlanes.js +355 -0
- package/dist/headless/components/dataDisplay/swimlanes/swimlanes.js.map +1 -0
- package/dist/headless/components/dataDisplay/treeView/treeView.js +113 -92
- package/dist/headless/components/dataDisplay/treeView/treeView.js.map +1 -1
- package/dist/headless/components/feedBack/modal/modal.js +85 -64
- package/dist/headless/components/feedBack/modal/modal.js.map +1 -1
- package/dist/headless/components/inputs/button/button.js +56 -50
- package/dist/headless/components/inputs/button/button.js.map +1 -1
- package/dist/headless/components/inputs/composer/composer.js +217 -0
- package/dist/headless/components/inputs/composer/composer.js.map +1 -0
- package/dist/headless/components/inputs/composer/composerFiles.js +19 -0
- package/dist/headless/components/inputs/composer/composerFiles.js.map +1 -0
- package/dist/headless/components/inputs/composer/composerKeys.js +7 -0
- package/dist/headless/components/inputs/composer/composerKeys.js.map +1 -0
- package/dist/headless/components/layout/sheet/sheet.js +160 -145
- package/dist/headless/components/layout/sheet/sheet.js.map +1 -1
- package/dist/headless/components/layout/tabGroups/tabGroups.js +781 -0
- package/dist/headless/components/layout/tabGroups/tabGroups.js.map +1 -0
- package/dist/headless/components/layout/tabGroups/tabGroupsFocus.js +199 -0
- package/dist/headless/components/layout/tabGroups/tabGroupsFocus.js.map +1 -0
- package/dist/headless/components/layout/tabGroups/tabGroupsLayout.js +497 -0
- package/dist/headless/components/layout/tabGroups/tabGroupsLayout.js.map +1 -0
- package/dist/headless/components/navigation/appBar/appBar.js +35 -30
- package/dist/headless/components/navigation/appBar/appBar.js.map +1 -1
- package/dist/headless/components/navigation/commandPalette/commandPalette.js +335 -0
- package/dist/headless/components/navigation/commandPalette/commandPalette.js.map +1 -0
- package/dist/headless/components/navigation/commandPalette/commandPaletteFilter.js +16 -0
- package/dist/headless/components/navigation/commandPalette/commandPaletteFilter.js.map +1 -0
- package/dist/headless/components/navigation/commandPalette/commandPaletteNavigation.js +38 -0
- package/dist/headless/components/navigation/commandPalette/commandPaletteNavigation.js.map +1 -0
- package/dist/headless/components/navigation/sidebar/sidebar.js +56 -54
- package/dist/headless/components/navigation/sidebar/sidebar.js.map +1 -1
- package/dist/headless/components/navigation/tabs/tab/tab.js +121 -42
- package/dist/headless/components/navigation/tabs/tab/tab.js.map +1 -1
- package/dist/headless/components/navigation/tabs/tabPanel/tabPanel.js +25 -0
- package/dist/headless/components/navigation/tabs/tabPanel/tabPanel.js.map +1 -0
- package/dist/headless/components/navigation/tabs/tabs.js +369 -145
- package/dist/headless/components/navigation/tabs/tabs.js.map +1 -1
- package/dist/headless/components/navigation/tabs/tabs.utils.js +11 -0
- package/dist/headless/components/navigation/tabs/tabs.utils.js.map +1 -0
- package/dist/headless/components/navigation/tabs/tabsContext.js +6 -0
- package/dist/headless/components/navigation/tabs/tabsContext.js.map +1 -0
- package/dist/headless/hooks/useFocusTrap.js +24 -21
- package/dist/headless/hooks/useFocusTrap.js.map +1 -1
- package/dist/headless/hooks/useKeyboardShortcut.js +19 -0
- package/dist/headless/hooks/useKeyboardShortcut.js.map +1 -0
- package/dist/headless/index.js +360 -316
- package/dist/headless/index.js.map +1 -1
- package/dist/headless/utils/keyboardShortcut.js +49 -0
- package/dist/headless/utils/keyboardShortcut.js.map +1 -0
- package/dist/headless/utils/linkAttrs.js +13 -0
- package/dist/headless/utils/linkAttrs.js.map +1 -0
- package/dist/headless/utils/restoreFocus.js +10 -0
- package/dist/headless/utils/restoreFocus.js.map +1 -0
- package/dist/hooks/useFocusTrap.d.ts +6 -1
- package/dist/hooks/useFocusTrap.js +24 -21
- package/dist/hooks/useFocusTrap.js.map +1 -1
- package/dist/hooks/useKeyboardShortcut.d.ts +30 -0
- package/dist/hooks/useKeyboardShortcut.js +19 -0
- package/dist/hooks/useKeyboardShortcut.js.map +1 -0
- package/dist/index.cjs +3 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +24 -3
- package/dist/index.js +360 -316
- package/dist/index.js.map +1 -1
- package/dist/utils/keyboardShortcut.d.ts +12 -0
- package/dist/utils/keyboardShortcut.js +49 -0
- package/dist/utils/keyboardShortcut.js.map +1 -0
- package/dist/utils/linkAttrs.d.ts +13 -0
- package/dist/utils/linkAttrs.js +13 -0
- package/dist/utils/linkAttrs.js.map +1 -0
- package/dist/utils/restoreFocus.d.ts +8 -0
- package/dist/utils/restoreFocus.js +10 -0
- package/dist/utils/restoreFocus.js.map +1 -0
- package/package.json +5 -3
package/AI_LESS_OVERRIDES.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
AUDIENCE: AI agent (not human). Dense, exact, copy-paste ready.
|
|
3
3
|
TOPIC: compile-time customization of @smwb/ui-react via Less overrides.
|
|
4
4
|
Companion: AI_THEMING.md (runtime CSS vars + component props).
|
|
5
|
+
SCOPE: documents BOTH @smwb/ui-react and @smwb/ui-solid — ui-solid ships
|
|
6
|
+
no AI_*.md of its own, so nothing here is React-specific.
|
|
5
7
|
-->
|
|
6
8
|
|
|
7
9
|
# AI_LESS_OVERRIDES — Less override mechanism
|
|
@@ -45,10 +47,10 @@ hook is `theme.config`.
|
|
|
45
47
|
|
|
46
48
|
```less
|
|
47
49
|
// theme.config (consumer)
|
|
48
|
-
@smui-spacing-unit: 8px;
|
|
49
|
-
@smui-radius-md:
|
|
50
|
-
@primaryColor:
|
|
51
|
-
@cardPadding:
|
|
50
|
+
@smui-spacing-unit: 8px; // double every gap/padding/margin
|
|
51
|
+
@smui-radius-md: 2px; // sharper corners library-wide
|
|
52
|
+
@primaryColor: @md-teal-500; // pull brand from the MD palette
|
|
53
|
+
@cardPadding: @smui-space-xxl;
|
|
52
54
|
```
|
|
53
55
|
|
|
54
56
|
`site.variables.less` (`@smwb/ui-styles/less/site/globals/site.variables.less`)
|
|
@@ -57,17 +59,17 @@ first-party theming.
|
|
|
57
59
|
|
|
58
60
|
## Token catalog (authoritative files)
|
|
59
61
|
|
|
60
|
-
| Layer
|
|
61
|
-
|
|
62
|
-
| MD palette
|
|
63
|
-
| Spacing
|
|
64
|
-
| Radius
|
|
65
|
-
| Elevation
|
|
66
|
-
| Breakpoints
|
|
67
|
-
| Control sizing
|
|
68
|
-
| Semantic colors + per-component vars | `@smwb/ui-styles/less/default/globals/default.variables.less` | `@primaryColor`, `@secondaryColor`, `@errorColor`, … and component vars
|
|
69
|
-
| Dark theme vars
|
|
70
|
-
| Runtime exposure
|
|
62
|
+
| Layer | File | Tokens |
|
|
63
|
+
| ------------------------------------ | ------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
64
|
+
| MD palette | `@smwb/ui-styles/less/foundation/palette.less` | `@md-<color>-<shade>` |
|
|
65
|
+
| Spacing | `@smwb/ui-styles/less/foundation/spacing.less` | `@smui-spacing-unit`, `@smui-space-*` + mixins |
|
|
66
|
+
| Radius | `@smwb/ui-styles/less/foundation/radius.less` | `@smui-radius-*` |
|
|
67
|
+
| Elevation | `@smwb/ui-styles/less/foundation/elevation.less` | `@smui-elevation-*` + mixin |
|
|
68
|
+
| Breakpoints | `@smwb/ui-styles/less/foundation/breakpoints.less` | `@smui-bp-*`, `@xs..@xl` + media mixins |
|
|
69
|
+
| Control sizing | `@smwb/ui-styles/less/foundation/sizing.less` | `@smui-control-h-*` (consumed — see "Control sizing" below), `@smui-control-font-sm/lg` (TextField/SelectField), `@smui-selection-*` (checkbox/radio box edges); `@smui-control-px-*`, `@smui-icon-*`, `@smui-control-font-md` reserved (defined, not consumed) |
|
|
70
|
+
| Semantic colors + per-component vars | `@smwb/ui-styles/less/default/globals/default.variables.less` | `@primaryColor`, `@secondaryColor`, `@errorColor`, … and component vars |
|
|
71
|
+
| Dark theme vars | same file, `*Dark` suffixed | e.g. `@primaryColorDark` |
|
|
72
|
+
| Runtime exposure | `@smwb/ui-styles/less/variables.less` | `:root { --smui-* }` |
|
|
71
73
|
|
|
72
74
|
To enumerate any group exactly, grep the source (always current):
|
|
73
75
|
|
|
@@ -120,10 +122,69 @@ Detached-ruleset mixins:
|
|
|
120
122
|
|
|
121
123
|
### Control sizing (`foundation/sizing.less`)
|
|
122
124
|
|
|
123
|
-
`@smui-control-h-sm|md|lg` (32/40/48)
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
125
|
+
`@smui-control-h-sm|md|lg` (32/40/48) are the control heights. Wired
|
|
126
|
+
consumers read them uniformly as
|
|
127
|
+
`min-height: var(--smui-control-h-<step>, @smui-control-h-<step>);`:
|
|
128
|
+
|
|
129
|
+
| Component | Selector wired to the token | Step |
|
|
130
|
+
| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ------------ |
|
|
131
|
+
| Button | `.smwb-button.smwb-small` / `.smwb-medium` / `.smwb-large` | sm/md/lg |
|
|
132
|
+
| TextField (outlined) | `.smwb-text-field__input:not(.smwb-text-field__input--inline)` (base = md); `.smwb-text-field_size-small` / `_size-large` variants of the same | md / sm / lg |
|
|
133
|
+
| SelectField (outlined) | `.smwb-select-field:not(.smwb-select-field--inline)` (base = md); the same under `.smwb-text-field_size-small` / `_size-large` ancestors | md / sm / lg |
|
|
134
|
+
| Chip | base `.smwb-chip` | sm |
|
|
135
|
+
| Checkbox | `.smwb-checkbox_size-small` / `-medium` / `-large` (row) | sm/md/lg |
|
|
136
|
+
| RadioButton | `.smwb-radio_size-small` / `-medium` / `-large` (row) | sm/md/lg |
|
|
137
|
+
| Toggle | `.smwb-toggle__wrapper:has(.smwb-toggle_size-small)` / `-medium` / `-large` (row — the size class rides the switch, `:has()` reaches the row) | sm/md/lg |
|
|
138
|
+
|
|
139
|
+
ButtonGroup forwards `size` to Button and inherits. The class
|
|
140
|
+
conventions: Button and exempt FloatingButton use
|
|
141
|
+
`.smwb-small|medium|large`; exempt Avatar emits a third convention,
|
|
142
|
+
`smwb-avatar_${size}` (`avatar.tsx`), and reads none of the tokens;
|
|
143
|
+
TextField/SelectField/Chip and the selection controls use
|
|
144
|
+
`*_size-small|large` — TextField's medium emits no class
|
|
145
|
+
(base rule = md), Chip has no `large`, Checkbox/RadioButton/Toggle emit
|
|
146
|
+
all three.
|
|
147
|
+
|
|
148
|
+
**Variant exemptions (wired components that do NOT read the tokens):**
|
|
149
|
+
`--filled` TextField keeps `content-box`, its padding summing with
|
|
150
|
+
`min-height: 0` (the shrunk resting label needs the 23px top
|
|
151
|
+
padding); `--filled` SelectField only resets `min-height: 0` and keeps
|
|
152
|
+
its own padding — `.smwb-select-field` is `border-box` in both
|
|
153
|
+
variants; `--inline` TextField/SelectField are excluded by the
|
|
154
|
+
`:not(--inline)` guard; RadioButton's md box is a hardcoded 20px — off
|
|
155
|
+
the 16/18/22 `@smui-selection-*` scale (its sm/lg boxes DO read
|
|
156
|
+
`@smui-selection-sm/lg`); Chip `_size-small` is a constant 24px, below
|
|
157
|
+
the scale; the Toggle switch geometry (track, thumb) is not scaled.
|
|
158
|
+
|
|
159
|
+
**Component exemptions (not wired, do not add without a design
|
|
160
|
+
decision):** FloatingButton (Material FAB diameters 56/48/40, extended
|
|
161
|
+
48/40/34, are their own scale), Avatar (identity badge 24/40/56, not a
|
|
162
|
+
control), Pagination (own item scale 32/26), ProgressIndicator
|
|
163
|
+
(indicator diameter 28px), StatusDot (decorative dot, and `_size-sm` is
|
|
164
|
+
a different suffix), Slider (`size` scales track thickness/thumb
|
|
165
|
+
diameter), Modal (`size` is dialog width), Rating (`size?: number` is a
|
|
166
|
+
pixel value), DatePicker/TimePicker/DateTimePicker (compose TextField +
|
|
167
|
+
Button, so they inherit the tokens).
|
|
168
|
+
|
|
169
|
+
**Reserved (defined, NOT consumed — do not claim otherwise):**
|
|
170
|
+
`@smui-control-px-*` and `@smui-icon-*` have no readers anywhere;
|
|
171
|
+
`@smui-control-font-md` is unconsumed (`-sm`/`-lg` are read by the
|
|
172
|
+
TextField/SelectField sm/lg rules); `@smui-selection-*` is read only by
|
|
173
|
+
the checkbox box edges (all three steps) and the radio sm/lg box edges —
|
|
174
|
+
Toggle reads none.
|
|
175
|
+
|
|
176
|
+
**Default deltas (accepted breaking changes — never "restore" these by
|
|
177
|
+
hardcoding heights):** Button sm/md/lg grew ≈27.5/33/38.5 → 32/40/48;
|
|
178
|
+
outlined TextField sm/md/lg shrank 40/56/55 → 32/40/48 (SelectField
|
|
179
|
+
40/56/56 → 32/40/48, border-box: the padding calc adds up to the token
|
|
180
|
+
exactly); Checkbox/RadioButton/Toggle rows previously had no
|
|
181
|
+
`min-height` — md rows are now floored at 40px.
|
|
182
|
+
|
|
183
|
+
This mapping is machine-enforced:
|
|
184
|
+
`packages/styles/scripts/check-control-heights.mjs` (in
|
|
185
|
+
`@smwb/ui-styles`' `lint`, gating CI) re-renders `components.less` with
|
|
186
|
+
`@smui-control-h-md: 44px` and asserts exactly the wired selectors
|
|
187
|
+
above change. Editing either side without the other fails the lint cube.
|
|
127
188
|
|
|
128
189
|
### Semantic colors (`default.variables.less`)
|
|
129
190
|
|
|
@@ -151,7 +212,9 @@ grep -nE '^@[a-z][A-Za-z0-9]+:' @smwb/ui-styles/less/default/globals/default.var
|
|
|
151
212
|
@smui-spacing-unit: 6px;
|
|
152
213
|
|
|
153
214
|
// 2. Flatter corners everywhere
|
|
154
|
-
@smui-radius-md: 2px;
|
|
215
|
+
@smui-radius-md: 2px;
|
|
216
|
+
@smui-radius-lg: 4px;
|
|
217
|
+
@smui-radius-xl: 6px;
|
|
155
218
|
|
|
156
219
|
// 3. Rebrand from the MD palette (cascades to all primary usages)
|
|
157
220
|
@primaryColor: @md-indigo-600;
|
|
@@ -159,7 +222,7 @@ grep -nE '^@[a-z][A-Za-z0-9]+:' @smwb/ui-styles/less/default/globals/default.var
|
|
|
159
222
|
|
|
160
223
|
// 4. Retune ONE component without touching others
|
|
161
224
|
@cardPadding: @smui-space-xxl;
|
|
162
|
-
@tooltipBg:
|
|
225
|
+
@tooltipBg: @md-blueGrey-800;
|
|
163
226
|
|
|
164
227
|
// 5. Soften elevation globally
|
|
165
228
|
@smui-elevation-2: @smui-elevation-1;
|
package/AI_THEMING.md
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
TOPIC: changing component appearance in @smwb/ui-react — at runtime
|
|
4
4
|
(CSS custom properties) and via component props.
|
|
5
5
|
Companion: AI_LESS_OVERRIDES.md (compile-time Less tokens).
|
|
6
|
+
SCOPE: documents BOTH @smwb/ui-react and @smwb/ui-solid — ui-solid ships
|
|
7
|
+
no AI_*.md of its own, so nothing here is React-specific.
|
|
6
8
|
-->
|
|
7
9
|
|
|
8
10
|
# AI_THEMING — change component appearance
|
|
@@ -40,8 +42,14 @@ shared sheet (`tokens.entry.less`), at zero specificity:
|
|
|
40
42
|
`:root` or any subtree (cascades):
|
|
41
43
|
|
|
42
44
|
```css
|
|
43
|
-
:root {
|
|
44
|
-
|
|
45
|
+
:root {
|
|
46
|
+
--smui-primaryColor: #00695c;
|
|
47
|
+
--smui-radius-md: 2px;
|
|
48
|
+
}
|
|
49
|
+
.dense-area {
|
|
50
|
+
--smui-space-md: 8px;
|
|
51
|
+
--smui-space-lg: 12px;
|
|
52
|
+
}
|
|
45
53
|
```
|
|
46
54
|
|
|
47
55
|
- **Precedence**: against the per-component CSS a `:root` override
|
|
@@ -62,17 +70,26 @@ Groups exposed: `--smui-primaryColor*`, full semantic set
|
|
|
62
70
|
surface/text (`--smui-surfaceBackground`, `--smui-onSurfaceColor`,
|
|
63
71
|
`--smui-dividerColor`, …), per-component (`--smui-tooltipBg`,
|
|
64
72
|
`--smui-menuTextColor`, `--smui-tableBorderColor`, …), spacing
|
|
65
|
-
(`--smui-space-*`, `--smui-spacing-unit`),
|
|
73
|
+
(`--smui-space-*`, `--smui-spacing-unit`), control heights
|
|
74
|
+
(`--smui-control-h-sm|md|lg` — read by the wired controls listed in
|
|
75
|
+
AI_LESS_OVERRIDES "Control sizing"; the exempt components and the
|
|
76
|
+
`--filled`/`--inline` variants do NOT respond), `--smui-radius-*`,
|
|
66
77
|
`--smui-elevation-*`, `--smui-bp-*`.
|
|
67
78
|
|
|
68
79
|
## 2. Component props (appearance)
|
|
69
80
|
|
|
70
81
|
Standardized vocabulary (rollout in progress across the library):
|
|
71
82
|
|
|
72
|
-
- `size?: "small" | "medium" | "large"` — control density. Emits
|
|
73
|
-
|
|
83
|
+
- `size?: "small" | "medium" | "large"` — control density. Emits the
|
|
84
|
+
component's size class; on wired components (Button, TextField,
|
|
85
|
+
SelectField, Chip, Checkbox, RadioButton, Toggle — the exact
|
|
86
|
+
selectors and exemptions are in AI_LESS_OVERRIDES "Control sizing")
|
|
87
|
+
the wired rule reads `@smui-control-h-*` at compile time and
|
|
88
|
+
`--smui-control-h-*` at runtime (for Chip that is the base
|
|
89
|
+
`.smwb-chip` rule — its `_size-small` class pins 24px and does not
|
|
90
|
+
read the token).
|
|
74
91
|
- `color?: "primary" | "secondary" | "error" | "success" | "warning"
|
|
75
|
-
|
|
92
|
+
| "info"` — semantic color, resolves through `--smui-<name>Color*`.
|
|
76
93
|
- `variant?: …` — structural style; component-specific values.
|
|
77
94
|
|
|
78
95
|
Authoritative per-component prop surface = the exported `*Props`
|
|
@@ -85,24 +102,24 @@ grep -nE 'export interface .*Props|size\?|color\?|variant\?' \
|
|
|
85
102
|
|
|
86
103
|
Representative current values:
|
|
87
104
|
|
|
88
|
-
| Component
|
|
89
|
-
|
|
90
|
-
| Button
|
|
91
|
-
| FloatingButton
|
|
92
|
-
| Chip
|
|
93
|
-
| TextField
|
|
94
|
-
| SelectField
|
|
95
|
-
| Card
|
|
96
|
-
| Avatar
|
|
97
|
-
| Badge
|
|
98
|
-
| Skeleton
|
|
99
|
-
| Pagination
|
|
100
|
-
| Message
|
|
101
|
-
| Modal
|
|
102
|
-
| ProgressIndicator | circular\|linear
|
|
103
|
-
| Divider
|
|
104
|
-
| Slider
|
|
105
|
-
| Tabs/Tab
|
|
105
|
+
| Component | variant | color | size | other appearance props |
|
|
106
|
+
| ----------------- | ------------------------------------ | ------------------------------------------------- | -------------------------- | ------------------------------------------------------- |
|
|
107
|
+
| Button | contained\|text\|outlined | (colorTheme:primary) | small\|medium\|large | `fullWidth`, `icon`, `iconProps` |
|
|
108
|
+
| FloatingButton | default\|extended | primary\|secondary\|error\|success\|warning\|info | small\|medium\|large | `type` |
|
|
109
|
+
| Chip | filled\|outlined | — | — | `icon`, `deleteIcon`, `selected` |
|
|
110
|
+
| TextField | outlined\|filled | — | — | `startAdornment`, `endAdornment`, `inline`, `fullWidth` |
|
|
111
|
+
| SelectField | outlined\|filled | — | — | `chips`, `search`, `endAdornment`, `optionRenderer` |
|
|
112
|
+
| Card | filled\|elevated\|outlined | — | — | `disabled` |
|
|
113
|
+
| Avatar | circular\|rounded\|square | (`color` = bg of fallback) | small\|medium\|large \| px | — |
|
|
114
|
+
| Badge | inside\|outside | primary\|success\|danger | — | `vertical`, `horizontal` |
|
|
115
|
+
| Skeleton | text\|circular\|rounded\|rectangular | — | (`width`/`height`) | `animation` |
|
|
116
|
+
| Pagination | — | — | small\|medium | `showFirstButton`, `showLastButton` |
|
|
117
|
+
| Message | outlined\|filled\|left-accent | (`type`: success/error/warning/info) | — | `onClose` |
|
|
118
|
+
| Modal | — | — | small\|large\|fullscreen | `backdrop`, `animation` |
|
|
119
|
+
| ProgressIndicator | circular\|linear | — | — | `type` det/indet, `progressValue` |
|
|
120
|
+
| Divider | fullWidth\|inset\|middle | — | — | `orientation`, `textAlign` |
|
|
121
|
+
| Slider | continuous\|discrete | — | — | `withTicks`, `valueField` |
|
|
122
|
+
| Tabs/Tab | — | — | — | `scrollable`, `stacked`, `icon` |
|
|
106
123
|
|
|
107
124
|
(The exported `*Props` interface is the source of truth; this table is
|
|
108
125
|
a navigational summary, not exhaustive.)
|
|
@@ -133,20 +150,47 @@ grep -oE 'var\(--smui-[a-zA-Z0-9-]+' @smwb/ui-styles/less/components/<name>/<nam
|
|
|
133
150
|
|
|
134
151
|
```css
|
|
135
152
|
/* B. Tooltip: dark slate, at runtime, no rebuild */
|
|
136
|
-
:root {
|
|
153
|
+
:root {
|
|
154
|
+
--smui-tooltipBg: #37474f;
|
|
155
|
+
--smui-tooltipTextColor: #fff;
|
|
156
|
+
}
|
|
137
157
|
```
|
|
138
158
|
|
|
139
159
|
```tsx
|
|
140
160
|
// C. FloatingButton: semantic color + size via props
|
|
141
|
-
<FloatingButton color="success" size="large" variant="extended">
|
|
161
|
+
<FloatingButton color="success" size="large" variant="extended">
|
|
162
|
+
Save
|
|
163
|
+
</FloatingButton>
|
|
142
164
|
```
|
|
143
165
|
|
|
144
166
|
```css
|
|
145
167
|
/* D. Scope a denser theme to a region (runtime, cascades) */
|
|
146
|
-
.compact {
|
|
147
|
-
|
|
168
|
+
.compact {
|
|
169
|
+
--smui-space-md: 8px;
|
|
170
|
+
--smui-space-lg: 12px;
|
|
171
|
+
--smui-control-h-md: 32px;
|
|
172
|
+
}
|
|
148
173
|
```
|
|
149
174
|
|
|
175
|
+
> Recipe D is live for control heights: `--smui-control-h-sm|md|lg` are
|
|
176
|
+
> declared in the `.smui-tokens-light()` mixin ONLY (`variables.less`)
|
|
177
|
+
> — density is theme-independent, and the light `:root` block applies
|
|
178
|
+
> under `data-theme="dark"` too (same precedent as `--smui-space-*` /
|
|
179
|
+
> `--smui-radius-*`); re-declaring them in the dark mixin would add a
|
|
180
|
+
> higher-specificity `:root[data-theme="dark"]` copy that silently
|
|
181
|
+
> resets a consumer's global `:root` density override in dark mode —
|
|
182
|
+
> and read via
|
|
183
|
+
> `var(--smui-control-h-*, @smui-control-h-*)` by Button, TextField,
|
|
184
|
+
> SelectField, Chip, Checkbox, RadioButton and Toggle (exact selectors
|
|
185
|
+
> and the machine-checked list: AI_LESS_OVERRIDES "Control sizing"). So
|
|
186
|
+
> density is overridable BOTH at compile time (`@smui-control-h-md` in
|
|
187
|
+
> `theme.config`, see AI_LESS_OVERRIDES) and at runtime per subtree as
|
|
188
|
+
> above. Exempt and do not expect a response: `--filled` and `--inline`
|
|
189
|
+
> TextField/SelectField, FloatingButton, Avatar, Pagination,
|
|
190
|
+
> ProgressIndicator, StatusDot, Slider, Modal, Rating. The pickers
|
|
191
|
+
> (DatePicker/TimePicker/DateTimePicker) have no wiring of their own —
|
|
192
|
+
> they inherit through their inner TextField + Button.
|
|
193
|
+
|
|
150
194
|
```less
|
|
151
195
|
// E. Whole-library rebrand (compile-time) — see AI_LESS_OVERRIDES recipes
|
|
152
196
|
@primaryColor: @md-deepPurple-600;
|