@zohodesk/components 1.6.25 → 1.6.26
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/CHANGELOG.md +2042 -0
- package/README.md +16 -2031
- package/assets/Appearance/dark/mode/Component_v1_DarkMode.module.css +5 -20
- package/assets/Appearance/light/mode/Component_v1_LightMode.module.css +5 -20
- package/assets/Appearance/pureDark/mode/Component_v1_PureDarkMode.module.css +5 -20
- package/es/Accordion/Accordion.js +1 -6
- package/es/Accordion/AccordionItem.js +1 -6
- package/es/Animation/Animation.js +1 -8
- package/es/AppContainer/AppContainer.js +1 -6
- package/es/AppContainer/__tests__/__snapshots__/AppContainer.spec.js.snap +16 -16
- package/es/Avatar/Avatar.js +1 -6
- package/es/AvatarTeam/AvatarTeam.js +1 -7
- package/es/Button/Button.js +1 -6
- package/es/Buttongroup/Buttongroup.js +1 -14
- package/es/Card/Card.js +1 -9
- package/es/Card/__tests__/__snapshots__/Card.spec.js.snap +17 -17
- package/es/Card/__tests__/__snapshots__/CardContent.spec.js.snap +12 -12
- package/es/Card/__tests__/__snapshots__/CardHeader.spec.js.snap +4 -4
- package/es/CheckBox/CheckBox.js +1 -6
- package/es/CheckBox/__tests__/__snapshots__/CheckBox.spec.js.snap +88 -88
- package/es/ColorSelect/__tests__/__snapshots__/ColorMultiSelect.spec.js.snap +48 -48
- package/es/ColorSelect/__tests__/__snapshots__/ColorSingleSelect.spec.js.snap +30 -30
- package/es/DateTime/DateWidget.js +0 -10
- package/es/DateTime/__tests__/__snapshots__/CalendarView.spec.js.snap +49 -49
- package/es/DateTime/__tests__/__snapshots__/DateTime.spec.js.snap +93 -93
- package/es/DateTime/__tests__/__snapshots__/DateTimePopupFooter.spec.js.snap +1 -1
- package/es/DateTime/__tests__/__snapshots__/DateTimePopupHeader.spec.js.snap +8 -8
- package/es/DateTime/__tests__/__snapshots__/DateWidget.spec.js.snap +7 -7
- package/es/DateTime/__tests__/__snapshots__/DaysRow.spec.js.snap +1 -1
- package/es/DateTime/__tests__/__snapshots__/Time.spec.js.snap +28 -28
- package/es/DropDown/DropDownHeading.js +1 -6
- package/es/DropDown/__tests__/__snapshots__/DropDown.spec.js.snap +2 -2
- package/es/Heading/Heading.js +1 -6
- package/es/Label/Label.js +1 -6
- package/es/Label/__tests__/__snapshots__/Label.spec.js.snap +4 -4
- package/es/ListItem/ListContainer.js +1 -6
- package/es/ListItem/ListItem.js +1 -6
- package/es/ListItem/ListItemWithAvatar.js +1 -6
- package/es/ListItem/ListItemWithCheckBox.js +1 -6
- package/es/ListItem/ListItemWithIcon.js +1 -6
- package/es/ListItem/ListItemWithRadio.js +1 -6
- package/es/ListItem/__tests__/__snapshots__/ListContainer.spec.js.snap +2 -2
- package/es/ListItem/__tests__/__snapshots__/ListItem.spec.js.snap +16 -16
- package/es/ListItem/__tests__/__snapshots__/ListItemWithAvatar.spec.js.snap +41 -41
- package/es/ListItem/__tests__/__snapshots__/ListItemWithCheckBox.spec.js.snap +62 -62
- package/es/ListItem/__tests__/__snapshots__/ListItemWithIcon.spec.js.snap +41 -41
- package/es/ListItem/__tests__/__snapshots__/ListItemWithRadio.spec.js.snap +62 -62
- package/es/Modal/Modal.js +1 -8
- package/es/MultiSelect/AdvancedGroupMultiSelect.js +1 -7
- package/es/MultiSelect/AdvancedMultiSelect.js +1 -9
- package/es/MultiSelect/MobileHeader/__tests__/__snapshots__/MobileHeader.spec.js.snap +3 -3
- package/es/MultiSelect/__tests__/__snapshots__/AdvancedGroupMultiSelect.spec.js.snap +6 -6
- package/es/MultiSelect/__tests__/__snapshots__/AdvancedMultiSelect.spec.js.snap +50 -50
- package/es/MultiSelect/__tests__/__snapshots__/MultiSelect.spec.js.snap +35 -35
- package/es/MultiSelect/__tests__/__snapshots__/MultiSelectHeader.spec.js.snap +7 -7
- package/es/MultiSelect/__tests__/__snapshots__/MultiSelectWithAvatar.spec.js.snap +8 -8
- package/es/MultiSelect/__tests__/__snapshots__/SelectedOptions.spec.js.snap +4 -4
- package/es/MultiSelect/__tests__/__snapshots__/Suggestions.spec.js.snap +47 -47
- package/es/Radio/__tests__/__snapshots__/Radio.spec.js.snap +94 -94
- package/es/ResponsiveDropBox/__tests__/__snapshots__/ResponsiveDropBox.spec.js.snap +1 -1
- package/es/RippleEffect/RippleEffect.js +1 -6
- package/es/Select/GroupSelect.js +1 -8
- package/es/Select/Select.js +1 -10
- package/es/Select/SelectWithAvatar.js +1 -9
- package/es/Select/SelectWithIcon.js +1 -7
- package/es/Select/__tests__/__snapshots__/GroupSelect.spec.js.snap +7 -7
- package/es/Select/__tests__/__snapshots__/Select.spec.js.snap +831 -831
- package/es/Select/__tests__/__snapshots__/SelectWithAvatar.spec.js.snap +2 -2
- package/es/Select/__tests__/__snapshots__/SelectWithIcon.spec.js.snap +10 -10
- package/es/Switch/Switch.js +1 -6
- package/es/Switch/__tests__/__snapshots__/Switch.spec.js.snap +44 -44
- package/es/Tab/Tab.js +1 -6
- package/es/Tab/__tests__/__snapshots__/Tab.spec.js.snap +2 -2
- package/es/Tab/__tests__/__snapshots__/TabContent.spec.js.snap +1 -1
- package/es/Tab/__tests__/__snapshots__/TabContentWrapper.spec.js.snap +1 -1
- package/es/Tab/__tests__/__snapshots__/TabLayout.spec.js.snap +40 -40
- package/es/Tab/__tests__/__snapshots__/TabWrapper.spec.js.snap +1 -1
- package/es/Tab/__tests__/__snapshots__/Tabs.spec.js.snap +4 -4
- package/es/Tag/Tag.js +1 -6
- package/es/Tag/__tests__/__snapshots__/Tag.spec.js.snap +94 -94
- package/es/TextBox/TextBox.js +1 -8
- package/es/TextBoxIcon/TextBoxIcon.js +1 -8
- package/es/TextBoxIcon/__tests__/__snapshots__/TextBoxIcon.spec.js.snap +167 -167
- package/es/Textarea/Textarea.js +1 -8
- package/es/Tooltip/Tooltip.js +1 -8
- package/es/VelocityAnimation/VelocityAnimation/VelocityAnimation.js +1 -5
- package/es/VelocityAnimation/VelocityAnimationGroup/VelocityAnimationGroup.js +1 -5
- package/es/semantic/Button/Button.js +1 -6
- package/es/shared/ArrowIcon/__tests__/__snapshots__/ArrowIcon.spec.js.snap +20 -20
- package/es/shared/InputFieldLine/__tests__/__snapshots__/InputFieldLine.spec.js.snap +19 -19
- package/es/v1/Button/Button.js +197 -113
- package/es/v1/Button/README.md +110 -44
- package/es/v1/Button/__tests__/Button.spec.js +139 -48
- package/es/v1/Button/__tests__/__snapshots__/Button.spec.js.snap +1236 -340
- package/es/v1/Button/constants/index.js +29 -23
- package/es/v1/Button/constants/presets.js +160 -0
- package/es/v1/Button/css/Button_v1.module.css +33 -16
- package/es/v1/Button/css/cssJSLogic.js +56 -29
- package/es/v1/Button/props/defaultProps.js +5 -6
- package/es/v1/Button/props/propTypes.js +26 -8
- package/es/v1/Label/__tests__/__snapshots__/Label.spec.js.snap +24 -24
- package/es/v1/Switch/__tests__/__snapshots__/Switch.spec.js.snap +14 -14
- package/es/v1/helpers/colorHelpers/__tests__/colorHelper.spec.js +357 -0
- package/es/v1/helpers/colorHelpers/background/backgroundColor.module.css +38 -534
- package/es/v1/helpers/colorHelpers/border/borderColor.module.css +28 -412
- package/es/v1/helpers/colorHelpers/colorHelper.js +120 -139
- package/es/v1/helpers/colorHelpers/constants/index.js +45 -4
- package/es/v1/helpers/colorHelpers/index.js +0 -1
- package/es/v1/helpers/colorHelpers/paletteUtilities.README.md +141 -336
- package/es/v1/helpers/colorHelpers/text/textColor.module.css +79 -295
- package/lib/Accordion/Accordion.js +1 -6
- package/lib/Accordion/AccordionItem.js +1 -6
- package/lib/Animation/Animation.js +1 -8
- package/lib/AppContainer/AppContainer.js +1 -6
- package/lib/AppContainer/__tests__/__snapshots__/AppContainer.spec.js.snap +16 -16
- package/lib/Avatar/Avatar.js +1 -6
- package/lib/AvatarTeam/AvatarTeam.js +1 -7
- package/lib/Button/Button.js +1 -7
- package/lib/Buttongroup/Buttongroup.js +1 -14
- package/lib/Card/Card.js +1 -8
- package/lib/Card/__tests__/__snapshots__/Card.spec.js.snap +17 -17
- package/lib/Card/__tests__/__snapshots__/CardContent.spec.js.snap +12 -12
- package/lib/Card/__tests__/__snapshots__/CardHeader.spec.js.snap +4 -4
- package/lib/CheckBox/CheckBox.js +1 -6
- package/lib/CheckBox/__tests__/__snapshots__/CheckBox.spec.js.snap +88 -88
- package/lib/ColorSelect/__tests__/__snapshots__/ColorMultiSelect.spec.js.snap +48 -48
- package/lib/ColorSelect/__tests__/__snapshots__/ColorSingleSelect.spec.js.snap +30 -30
- package/lib/DateTime/DateWidget.js +0 -10
- package/lib/DateTime/__tests__/__snapshots__/CalendarView.spec.js.snap +49 -49
- package/lib/DateTime/__tests__/__snapshots__/DateTime.spec.js.snap +93 -93
- package/lib/DateTime/__tests__/__snapshots__/DateTimePopupFooter.spec.js.snap +1 -1
- package/lib/DateTime/__tests__/__snapshots__/DateTimePopupHeader.spec.js.snap +8 -8
- package/lib/DateTime/__tests__/__snapshots__/DateWidget.spec.js.snap +7 -7
- package/lib/DateTime/__tests__/__snapshots__/DaysRow.spec.js.snap +1 -1
- package/lib/DateTime/__tests__/__snapshots__/Time.spec.js.snap +28 -28
- package/lib/DropDown/DropDownHeading.js +1 -6
- package/lib/DropDown/__tests__/__snapshots__/DropDown.spec.js.snap +2 -2
- package/lib/Heading/Heading.js +1 -6
- package/lib/Label/Label.js +1 -6
- package/lib/Label/__tests__/__snapshots__/Label.spec.js.snap +4 -4
- package/lib/ListItem/ListContainer.js +1 -7
- package/lib/ListItem/ListItem.js +1 -6
- package/lib/ListItem/ListItemWithAvatar.js +1 -6
- package/lib/ListItem/ListItemWithCheckBox.js +1 -6
- package/lib/ListItem/ListItemWithIcon.js +1 -6
- package/lib/ListItem/ListItemWithRadio.js +1 -6
- package/lib/ListItem/__tests__/__snapshots__/ListContainer.spec.js.snap +2 -2
- package/lib/ListItem/__tests__/__snapshots__/ListItem.spec.js.snap +16 -16
- package/lib/ListItem/__tests__/__snapshots__/ListItemWithAvatar.spec.js.snap +41 -41
- package/lib/ListItem/__tests__/__snapshots__/ListItemWithCheckBox.spec.js.snap +62 -62
- package/lib/ListItem/__tests__/__snapshots__/ListItemWithIcon.spec.js.snap +41 -41
- package/lib/ListItem/__tests__/__snapshots__/ListItemWithRadio.spec.js.snap +62 -62
- package/lib/Modal/Modal.js +1 -8
- package/lib/MultiSelect/AdvancedGroupMultiSelect.js +1 -7
- package/lib/MultiSelect/AdvancedMultiSelect.js +1 -9
- package/lib/MultiSelect/MobileHeader/__tests__/__snapshots__/MobileHeader.spec.js.snap +3 -3
- package/lib/MultiSelect/__tests__/__snapshots__/AdvancedGroupMultiSelect.spec.js.snap +6 -6
- package/lib/MultiSelect/__tests__/__snapshots__/AdvancedMultiSelect.spec.js.snap +50 -50
- package/lib/MultiSelect/__tests__/__snapshots__/MultiSelect.spec.js.snap +35 -35
- package/lib/MultiSelect/__tests__/__snapshots__/MultiSelectHeader.spec.js.snap +7 -7
- package/lib/MultiSelect/__tests__/__snapshots__/MultiSelectWithAvatar.spec.js.snap +8 -8
- package/lib/MultiSelect/__tests__/__snapshots__/SelectedOptions.spec.js.snap +4 -4
- package/lib/MultiSelect/__tests__/__snapshots__/Suggestions.spec.js.snap +47 -47
- package/lib/Radio/__tests__/__snapshots__/Radio.spec.js.snap +94 -94
- package/lib/ResponsiveDropBox/__tests__/__snapshots__/ResponsiveDropBox.spec.js.snap +1 -1
- package/lib/RippleEffect/RippleEffect.js +1 -6
- package/lib/Select/GroupSelect.js +1 -9
- package/lib/Select/Select.js +1 -11
- package/lib/Select/SelectWithAvatar.js +1 -9
- package/lib/Select/SelectWithIcon.js +1 -7
- package/lib/Select/__tests__/__snapshots__/GroupSelect.spec.js.snap +7 -7
- package/lib/Select/__tests__/__snapshots__/Select.spec.js.snap +831 -831
- package/lib/Select/__tests__/__snapshots__/SelectWithAvatar.spec.js.snap +2 -2
- package/lib/Select/__tests__/__snapshots__/SelectWithIcon.spec.js.snap +10 -10
- package/lib/Switch/Switch.js +1 -6
- package/lib/Switch/__tests__/__snapshots__/Switch.spec.js.snap +44 -44
- package/lib/Tab/Tab.js +1 -6
- package/lib/Tab/__tests__/__snapshots__/Tab.spec.js.snap +2 -2
- package/lib/Tab/__tests__/__snapshots__/TabContent.spec.js.snap +1 -1
- package/lib/Tab/__tests__/__snapshots__/TabContentWrapper.spec.js.snap +1 -1
- package/lib/Tab/__tests__/__snapshots__/TabLayout.spec.js.snap +40 -40
- package/lib/Tab/__tests__/__snapshots__/TabWrapper.spec.js.snap +1 -1
- package/lib/Tab/__tests__/__snapshots__/Tabs.spec.js.snap +4 -4
- package/lib/Tag/Tag.js +1 -6
- package/lib/Tag/__tests__/__snapshots__/Tag.spec.js.snap +94 -94
- package/lib/TextBox/TextBox.js +1 -8
- package/lib/TextBoxIcon/TextBoxIcon.js +1 -8
- package/lib/TextBoxIcon/__tests__/__snapshots__/TextBoxIcon.spec.js.snap +167 -167
- package/lib/Textarea/Textarea.js +1 -8
- package/lib/Tooltip/Tooltip.js +1 -8
- package/lib/VelocityAnimation/VelocityAnimation/VelocityAnimation.js +1 -5
- package/lib/VelocityAnimation/VelocityAnimationGroup/VelocityAnimationGroup.js +1 -5
- package/lib/semantic/Button/Button.js +1 -6
- package/lib/shared/ArrowIcon/__tests__/__snapshots__/ArrowIcon.spec.js.snap +20 -20
- package/lib/shared/InputFieldLine/__tests__/__snapshots__/InputFieldLine.spec.js.snap +19 -19
- package/lib/v1/Button/Button.js +207 -123
- package/lib/v1/Button/README.md +110 -44
- package/lib/v1/Button/__tests__/Button.spec.js +195 -88
- package/lib/v1/Button/__tests__/__snapshots__/Button.spec.js.snap +1236 -340
- package/lib/v1/Button/constants/index.js +34 -31
- package/lib/v1/Button/constants/presets.js +179 -0
- package/lib/v1/Button/css/Button_v1.module.css +33 -16
- package/lib/v1/Button/css/cssJSLogic.js +45 -25
- package/lib/v1/Button/props/defaultProps.js +4 -5
- package/lib/v1/Button/props/propTypes.js +41 -7
- package/lib/v1/Label/__tests__/__snapshots__/Label.spec.js.snap +24 -24
- package/lib/v1/Switch/__tests__/__snapshots__/Switch.spec.js.snap +14 -14
- package/lib/v1/helpers/colorHelpers/__tests__/colorHelper.spec.js +363 -0
- package/lib/v1/helpers/colorHelpers/background/backgroundColor.module.css +38 -534
- package/lib/v1/helpers/colorHelpers/border/borderColor.module.css +28 -412
- package/lib/v1/helpers/colorHelpers/colorHelper.js +130 -153
- package/lib/v1/helpers/colorHelpers/constants/index.js +45 -4
- package/lib/v1/helpers/colorHelpers/index.js +2 -24
- package/lib/v1/helpers/colorHelpers/paletteUtilities.README.md +141 -336
- package/lib/v1/helpers/colorHelpers/text/textColor.module.css +79 -295
- package/package.json +16 -16
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Color Helpers
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
CSS color utility classes and a `getPaletteClasses` helper for DOT v1 components.
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -9,407 +9,212 @@ Tailwind-inspired color utility classes and a `colorHelper` for DOT components.
|
|
|
9
9
|
```
|
|
10
10
|
colorHelpers/
|
|
11
11
|
├── background/
|
|
12
|
-
│ └── backgroundColor.module.css
|
|
12
|
+
│ └── backgroundColor.module.css
|
|
13
13
|
├── text/
|
|
14
|
-
│ └── textColor.module.css
|
|
14
|
+
│ └── textColor.module.css
|
|
15
15
|
├── border/
|
|
16
|
-
│ └── borderColor.module.css
|
|
16
|
+
│ └── borderColor.module.css
|
|
17
17
|
├── constants/
|
|
18
|
-
│ └── index.js
|
|
19
|
-
|
|
20
|
-
└── paletteUtilities.README.md # This file
|
|
18
|
+
│ └── index.js # PALETTE_CONFIG, TONE_INTENSITY
|
|
19
|
+
└── colorHelper.js # getPaletteClasses (default export)
|
|
21
20
|
```
|
|
22
21
|
|
|
23
22
|
---
|
|
24
23
|
|
|
25
|
-
##
|
|
24
|
+
## CSS Class Patterns
|
|
26
25
|
|
|
27
|
-
All three CSS
|
|
26
|
+
All three CSS modules share the same 7 base tones: `brand`, `grey`, `blue`, `green`, `orange`, `red`, `yellow`.
|
|
28
27
|
|
|
29
|
-
|
|
30
|
-
|------|--------------|----------|
|
|
31
|
-
| **default** | `--zdt_v1_palette_default_*` | Default/neutral actions |
|
|
32
|
-
| **grey** | `--zdt_v1_palette_grey_*` | Secondary, muted elements |
|
|
33
|
-
| **blue** | `--zdt_v1_palette_blue_*` | Information, primary actions |
|
|
34
|
-
| **green** | `--zdt_v1_palette_green_*` | Success, positive status |
|
|
35
|
-
| **orange** | `--zdt_v1_palette_orange_*` | Warning, caution |
|
|
36
|
-
| **red** | `--zdt_v1_palette_red_*` | Error, danger, destructive actions |
|
|
37
|
-
| **yellow** | `--zdt_v1_palette_yellow_*` | Alerts, highlights |
|
|
28
|
+
Shades are numeric values defined in `TONE_INTENSITY` per tone (e.g. for `brand`: base `80`, hover `100`, light `10`, lightHover `20`, borderLight `10`).
|
|
38
29
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
## Available Utilities
|
|
42
|
-
|
|
43
|
-
### Background (`background/backgroundColor.module.css`)
|
|
44
|
-
|
|
45
|
-
Per color (`default`, `grey`, `blue`, `green`, `orange`, `red`, `yellow`):
|
|
30
|
+
### Background (`backgroundColor.module.css`)
|
|
46
31
|
|
|
47
32
|
| Class Pattern | Description |
|
|
48
|
-
|
|
49
|
-
|
|
|
50
|
-
|
|
|
51
|
-
|
|
|
52
|
-
|
|
|
53
|
-
|
|
|
54
|
-
|
|
|
55
|
-
|
|
|
56
|
-
| `.active\:bg-{color}-light:active` | Light active state |
|
|
57
|
-
| `.selected\:bg-{color}` | Selected state |
|
|
58
|
-
| `.selected\:bg-{color}-light` | Light selected state |
|
|
59
|
-
|
|
60
|
-
**Utility classes:** `.bg-transparent`, `.bg-white`, `.bg-black`
|
|
33
|
+
|---|---|
|
|
34
|
+
| `bg-{tone}-{base}` | Filled background |
|
|
35
|
+
| `bg-{tone}-{light}` | Light background variant |
|
|
36
|
+
| `hover:bg-{tone}-{hover}` | Filled — hover state |
|
|
37
|
+
| `hover:bg-{tone}-{lightHover}` | Light — hover state |
|
|
38
|
+
| `focus:bg-{tone}-{...}` | Focus state (same shade logic) |
|
|
39
|
+
| `active:bg-{tone}-{...}` | Active state (same shade logic) |
|
|
40
|
+
| `selected:bg-{tone}-{...}` | Selected state (same shade logic) |
|
|
61
41
|
|
|
62
|
-
|
|
42
|
+
**Utility:** `bg-transparent`, `bg-white`, `bg-black` (+ `hover:`, `focus:`, `active:`, `selected:` variants)
|
|
63
43
|
|
|
64
|
-
|
|
44
|
+
### Text (`textColor.module.css`)
|
|
65
45
|
|
|
66
46
|
| Class Pattern | Description |
|
|
67
|
-
|
|
68
|
-
|
|
|
69
|
-
|
|
|
70
|
-
|
|
|
71
|
-
|
|
|
72
|
-
|
|
|
73
|
-
|
|
74
|
-
**Special:** `.text-brand-filled` (+ hover/focus/active/selected) — uses `--zdt_v1_palette_default_filled_text` for filled default backgrounds.
|
|
47
|
+
|---|---|
|
|
48
|
+
| `text-{tone}-{base}` | Base text color |
|
|
49
|
+
| `hover:text-{tone}-{textHover\|hover}` | Hover state |
|
|
50
|
+
| `focus:text-{tone}-{...}` | Focus state |
|
|
51
|
+
| `active:text-{tone}-{...}` | Active state |
|
|
52
|
+
| `selected:text-{tone}-{...}` | Selected state |
|
|
75
53
|
|
|
76
|
-
**
|
|
54
|
+
**Special:** `text-brand-filled` (+ state variants) — used for text on filled `brand` backgrounds.
|
|
77
55
|
|
|
78
|
-
|
|
56
|
+
**Utility:** `text-transparent`, `text-white`, `text-black` (+ state variants)
|
|
79
57
|
|
|
80
|
-
|
|
58
|
+
> Text has no `-light` shade variant. `getPaletteClasses` automatically switches to `filledTextTone` (`white`) when rendering on a filled background.
|
|
81
59
|
|
|
82
|
-
|
|
60
|
+
### Border (`borderColor.module.css`)
|
|
83
61
|
|
|
84
62
|
| Class Pattern | Description |
|
|
85
|
-
|
|
86
|
-
|
|
|
87
|
-
|
|
|
88
|
-
|
|
|
89
|
-
|
|
|
90
|
-
|
|
|
91
|
-
|
|
|
63
|
+
|---|---|
|
|
64
|
+
| `border-{tone}-{base}` | Base border |
|
|
65
|
+
| `border-{tone}-{borderLight}` | Light border (resting only) |
|
|
66
|
+
| `hover:border-{tone}-{hover}` | Hover state (always base shade) |
|
|
67
|
+
| `focus:border-{tone}-{...}` | Focus state |
|
|
68
|
+
| `active:border-{tone}-{...}` | Active state |
|
|
69
|
+
| `selected:border-{tone}-{...}` | Selected state |
|
|
92
70
|
|
|
93
|
-
**Utility
|
|
94
|
-
|
|
95
|
-
> **Note:** Border state classes only use the base tone — no `-light` state variants. The `-light` class is available for the resting state only.
|
|
71
|
+
**Utility:** `border-transparent`, `border-white`, `border-black` (+ state variants)
|
|
96
72
|
|
|
97
73
|
---
|
|
98
74
|
|
|
99
|
-
## Direct CSS Usage
|
|
100
|
-
|
|
101
|
-
Import only the CSS modules you need and compose classes directly.
|
|
75
|
+
## Direct CSS Usage
|
|
102
76
|
|
|
103
|
-
|
|
77
|
+
Import only the modules you need and compose classes directly.
|
|
104
78
|
|
|
105
|
-
```
|
|
79
|
+
```js
|
|
106
80
|
import bgStyle from './background/backgroundColor.module.css';
|
|
107
81
|
import textStyle from './text/textColor.module.css';
|
|
108
|
-
|
|
109
|
-
function StatusTag({ status }) {
|
|
110
|
-
const className = compileClassNames({
|
|
111
|
-
[bgStyle['bg-green-light']]: status === 'success',
|
|
112
|
-
[bgStyle['bg-red-light']]: status === 'error',
|
|
113
|
-
[bgStyle['bg-orange-light']]: status === 'warning',
|
|
114
|
-
[textStyle['text-green']]: status === 'success',
|
|
115
|
-
[textStyle['text-red']]: status === 'error',
|
|
116
|
-
[textStyle['text-orange']]: status === 'warning',
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
return <span className={className}>{status}</span>;
|
|
120
|
-
}
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
### Example 2: Bordered Card (border + background)
|
|
124
|
-
|
|
125
|
-
```javascript
|
|
126
|
-
import bgStyle from './background/backgroundColor.module.css';
|
|
127
82
|
import borderStyle from './border/borderColor.module.css';
|
|
128
83
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
[bgStyle['bg-blue-light']]: variant === 'info',
|
|
132
|
-
[bgStyle['bg-red-light']]: variant === 'error',
|
|
133
|
-
[borderStyle['border-blue']]: variant === 'info',
|
|
134
|
-
[borderStyle['border-red']]: variant === 'error',
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
return <div className={className}>{children}</div>;
|
|
138
|
-
}
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
### Example 3: Interactive Button (text + background + border + hover)
|
|
142
|
-
|
|
143
|
-
```javascript
|
|
144
|
-
import bgStyle from './background/backgroundColor.module.css';
|
|
145
|
-
import textStyle from './text/textColor.module.css';
|
|
146
|
-
import borderStyle from './border/borderColor.module.css';
|
|
147
|
-
|
|
148
|
-
function Button({ label, variant }) {
|
|
149
|
-
// Primary: blue bg, white text, blue border
|
|
150
|
-
const primaryClasses = compileClassNames({
|
|
151
|
-
[bgStyle['bg-blue']]: true,
|
|
152
|
-
[bgStyle['hover:bg-blue']]: true,
|
|
153
|
-
[textStyle['text-white']]: true,
|
|
154
|
-
[borderStyle['border-blue']]: true,
|
|
155
|
-
[borderStyle['hover:border-blue']]: true,
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
// Danger: red bg, white text, red border
|
|
159
|
-
const dangerClasses = compileClassNames({
|
|
160
|
-
[bgStyle['bg-red']]: true,
|
|
161
|
-
[bgStyle['hover:bg-red']]: true,
|
|
162
|
-
[textStyle['text-white']]: true,
|
|
163
|
-
[borderStyle['border-red']]: true,
|
|
164
|
-
[borderStyle['hover:border-red']]: true,
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
return <button className={variant === 'danger' ? dangerClasses : primaryClasses}>{label}</button>;
|
|
168
|
-
}
|
|
169
|
-
```
|
|
170
|
-
---
|
|
171
|
-
|
|
172
|
-
## Using `colorHelper.js`
|
|
173
|
-
|
|
174
|
-
### Named Exports
|
|
175
|
-
|
|
176
|
-
Three utility functions return individual CSS module classes:
|
|
177
|
-
|
|
178
|
-
```javascript
|
|
179
|
-
import { getBgClass, getTextClass, getBorderClass } from './colorHelper';
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
#### `getBgClass({ state?, tone, isLighter? })`
|
|
183
|
-
|
|
184
|
-
Returns a background CSS class from `backgroundColor.module.css`.
|
|
185
|
-
|
|
186
|
-
| Parameter | Type | Required | Description |
|
|
187
|
-
|-----------|------|----------|-------------|
|
|
188
|
-
| `tone` | `string` | Yes | Color tone (`default`, `grey`, `blue`, `green`, `orange`, `red`, `yellow`, `white`, `black`) |
|
|
189
|
-
| `state` | `string` | No | State prefix (`hover`, `focus`, `active`, `selected`). Omit for base class. |
|
|
190
|
-
| `isLighter` | `boolean` | No | `true` → appends `-light` to the tone |
|
|
191
|
-
|
|
192
|
-
**Generated key pattern:** `[state:]bg-{tone}[-light]`
|
|
193
|
-
|
|
194
|
-
```javascript
|
|
195
|
-
getBgClass({ tone: 'blue' }) // → paletteBgStyle['bg-blue']
|
|
196
|
-
getBgClass({ tone: 'blue', isLighter: true }) // → paletteBgStyle['bg-blue-light']
|
|
197
|
-
getBgClass({ state: 'hover', tone: 'red' }) // → paletteBgStyle['hover:bg-red']
|
|
198
|
-
getBgClass({ state: 'hover', tone: 'red', isLighter: true }) // → paletteBgStyle['hover:bg-red-light']
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
#### `getTextClass({ state?, textTone })`
|
|
202
|
-
|
|
203
|
-
Returns a text CSS class from `textColor.module.css`.
|
|
204
|
-
|
|
205
|
-
| Parameter | Type | Required | Description |
|
|
206
|
-
|-----------|------|----------|-------------|
|
|
207
|
-
| `textTone` | `string` | Yes | Text tone (`brand`, `grey`, `blue`, `green`, `orange`, `red`, `yellow`, `white`, `black`, `brand-filled`) |
|
|
208
|
-
| `state` | `string` | No | State prefix (`hover`, `focus`, `active`, `selected`). Omit for base class. |
|
|
209
|
-
|
|
210
|
-
> **Note:** `textTone` has no `isLighter` equivalent. Use `filledTextTone` (e.g. `white`) directly when needed.
|
|
84
|
+
// Status tag: light bg + colored text
|
|
85
|
+
<span className={`${bgStyle['bg-green-10']} ${textStyle['text-green-80']}`}>Success</span>
|
|
211
86
|
|
|
212
|
-
|
|
87
|
+
// Info card: light bg + light border
|
|
88
|
+
<div className={`${bgStyle['bg-blue-10']} ${borderStyle['border-blue-10']}`}>{children}</div>
|
|
213
89
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
90
|
+
// Interactive element: filled bg + white text + hover bg
|
|
91
|
+
<button className={`${bgStyle['bg-brand-80']} ${bgStyle['hover:bg-brand-100']} ${textStyle['text-brand-filled']}`}>
|
|
92
|
+
Click
|
|
93
|
+
</button>
|
|
218
94
|
```
|
|
219
95
|
|
|
220
|
-
#### `getBorderClass({ state?, tone, isLighter? })`
|
|
221
|
-
|
|
222
|
-
Returns a border CSS class from `borderColor.module.css`.
|
|
223
|
-
|
|
224
|
-
| Parameter | Type | Required | Description |
|
|
225
|
-
|-----------|------|----------|-------------|
|
|
226
|
-
| `tone` | `string` | Yes | Color tone (`default`, `grey`, `blue`, `green`, `orange`, `red`, `yellow`) |
|
|
227
|
-
| `state` | `string` | No | State prefix (`hover`, `focus`, `active`, `selected`). Omit for base class. |
|
|
228
|
-
| `isLighter` | `boolean` | No | `true` → appends `-light` to the tone (resting state only by convention) |
|
|
229
|
-
|
|
230
|
-
**Generated key pattern:** `[state:]border-{tone}[-light]`
|
|
231
|
-
|
|
232
|
-
```javascript
|
|
233
|
-
getBorderClass({ tone: 'blue' }) // → paletteBorderStyle['border-blue']
|
|
234
|
-
getBorderClass({ tone: 'blue', isLighter: true }) // → paletteBorderStyle['border-blue-light']
|
|
235
|
-
getBorderClass({ state: 'hover', tone: 'red' }) // → paletteBorderStyle['hover:border-red']
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
#### Internal Helpers (not exported)
|
|
239
|
-
|
|
240
|
-
- **`toTone(tone, isLighter)`** — returns `'{tone}-light'` if `isLighter` is truthy, else `'{tone}'`
|
|
241
|
-
- **`withState(state, key)`** — returns `'{state}:{key}'` if `state` is truthy, else `'{key}'`
|
|
242
|
-
|
|
243
96
|
---
|
|
244
97
|
|
|
245
|
-
|
|
98
|
+
## `getPaletteClasses`
|
|
246
99
|
|
|
247
|
-
|
|
100
|
+
Computes all 15 CSS class keys for a palette in one call.
|
|
248
101
|
|
|
249
|
-
```
|
|
102
|
+
```js
|
|
250
103
|
import getPaletteClasses from './colorHelper';
|
|
251
104
|
```
|
|
252
105
|
|
|
253
|
-
|
|
106
|
+
### API
|
|
107
|
+
|
|
108
|
+
```js
|
|
109
|
+
getPaletteClasses({ palette, appearance, hoverAppearance, selectedAppearance })
|
|
110
|
+
```
|
|
254
111
|
|
|
255
|
-
|
|
|
256
|
-
|
|
257
|
-
| `
|
|
258
|
-
| `
|
|
112
|
+
| Parameter | Type | Description |
|
|
113
|
+
|---|---|---|
|
|
114
|
+
| `palette` | `string` | One of the 12 palette names (see table below) |
|
|
115
|
+
| `appearance` | `{ bg?, border?, text? }` | Resting state |
|
|
116
|
+
| `hoverAppearance` | `{ bg?, border?, text? }` | Hover / focus / active states |
|
|
117
|
+
| `selectedAppearance` | `{ bg?, border?, text? }` | Selected state |
|
|
118
|
+
|
|
119
|
+
Each key in an appearance object accepts:
|
|
120
|
+
- `true` — use the palette's own tone
|
|
121
|
+
- `false` / omitted — no class produced
|
|
122
|
+
- `'paletteName'` — use a different palette's tone (e.g. `text: 'brand'`)
|
|
123
|
+
|
|
124
|
+
### Palettes (`PALETTE_CONFIG`)
|
|
125
|
+
|
|
126
|
+
| Palette | Tone | Text tone | Filled text tone |
|
|
127
|
+
|---------|------|-----------|-----------------|
|
|
128
|
+
| `brand` | `brand` | `brand` | `brand-filled` |
|
|
129
|
+
| `brandLighter` | `brand` (light shades) | `brand` | `brand` |
|
|
130
|
+
| `info` | `blue` | `blue` | `white` |
|
|
131
|
+
| `infoLighter` | `blue` (light shades) | `blue` | `blue` |
|
|
259
132
|
| `secondary` | `grey` | `grey` | `white` |
|
|
133
|
+
| `secondaryLighter` | `grey` (light shades) | `grey` | `grey` |
|
|
260
134
|
| `danger` | `red` | `red` | `white` |
|
|
135
|
+
| `dangerLighter` | `red` (light shades) | `red` | `red` |
|
|
261
136
|
| `success` | `green` | `green` | `white` |
|
|
137
|
+
| `successLighter` | `green` (light shades) | `green` | `green` |
|
|
138
|
+
| `warning` | `orange` | `orange` | `white` |
|
|
139
|
+
| `warningLighter` | `orange` (light shades) | `orange` | `orange` |
|
|
262
140
|
|
|
263
|
-
|
|
141
|
+
`*Lighter` palettes use `light` / `borderLight` shades from `TONE_INTENSITY` instead of `base`.
|
|
264
142
|
|
|
265
|
-
|
|
143
|
+
### Return Value
|
|
266
144
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
145
|
+
```js
|
|
146
|
+
{
|
|
147
|
+
bg, hoverBg, focusBg, activeBg, selectedBg,
|
|
148
|
+
text, hoverText, focusText, activeText, selectedText,
|
|
149
|
+
border, hoverBorder, focusBorder, activeBorder, selectedBorder
|
|
150
|
+
}
|
|
151
|
+
```
|
|
274
152
|
|
|
275
|
-
|
|
153
|
+
Each key is a CSS module class string, or `''` if not applicable for that appearance configuration.
|
|
276
154
|
|
|
277
|
-
|
|
155
|
+
> `border` always has a value — when `bg: false` and no `border` key is set, it defaults to `border-transparent`.
|
|
278
156
|
|
|
279
|
-
|
|
280
|
-
|---|---|---|
|
|
281
|
-
| `bgAppearance: 'default'` + default shade | `filledTextTone` (e.g. `white`) | `filledTextTone` |
|
|
282
|
-
| `bgAppearance: 'default'` + `'lighter'` shade | `textTone` (e.g. `blue`) | `textTone` |
|
|
283
|
-
| `bgAppearance:` other (not `'none'`) + default shade | `textTone` | `filledTextTone` |
|
|
284
|
-
| `bgAppearance:` other (not `'none'`) + `'lighter'` shade | `textTone` | `textTone` |
|
|
285
|
-
| `bgAppearance: 'none'` | `textTone` | `textTone` |
|
|
157
|
+
### Text Tone Resolution
|
|
286
158
|
|
|
287
|
-
|
|
159
|
+
| Background state | Text produced |
|
|
160
|
+
|---|---|
|
|
161
|
+
| Filled (`bg: true`, non-lighter palette) | `filledTextTone` (`white`) |
|
|
162
|
+
| Light (`bg: true`, `*Lighter` palette) | `textTone` (`brand`) |
|
|
163
|
+
| No background (`bg: false` or omitted) | `textTone`, or `''` if `text` not set |
|
|
288
164
|
|
|
289
|
-
|
|
165
|
+
### Examples
|
|
290
166
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
activeText, // getTextClass({ state: 'active', textTone: stateTextTone })
|
|
301
|
-
border, // isSelected → selected border (if borderAppearance !== 'none'); else resting border
|
|
302
|
-
hoverBorder, // getBorderClass({ state: 'hover', tone }) — if borderAppearance !== 'none'
|
|
303
|
-
focusBorder, // getBorderClass({ state: 'focus', tone }) — if borderAppearance !== 'none'
|
|
304
|
-
activeBorder // getBorderClass({ state: 'active', tone }) — if borderAppearance !== 'none'
|
|
305
|
-
}
|
|
167
|
+
**Filled button**
|
|
168
|
+
```js
|
|
169
|
+
getPaletteClasses({
|
|
170
|
+
palette: 'brand',
|
|
171
|
+
appearance: { bg: true, text: true, border: true },
|
|
172
|
+
hoverAppearance: { bg: true, text: true, border: true }
|
|
173
|
+
});
|
|
174
|
+
// bg → bg-brand-80 | text → text-brand-filled | border → border-brand-80
|
|
175
|
+
// hoverBg → hover:bg-brand-100 | hoverText → hover:text-brand-filled
|
|
306
176
|
```
|
|
307
177
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
bgAppearance: 'default',
|
|
316
|
-
borderAppearance: 'visible',
|
|
317
|
-
paletteShade: 'default',
|
|
178
|
+
**Ghost button (no bg, with border)**
|
|
179
|
+
```js
|
|
180
|
+
getPaletteClasses({
|
|
181
|
+
palette: 'brand',
|
|
182
|
+
appearance: { bg: false, border: true },
|
|
183
|
+
hoverAppearance: { bg: false, border: true },
|
|
184
|
+
selectedAppearance: { bg: false, border: true }
|
|
318
185
|
});
|
|
319
|
-
//
|
|
320
|
-
//
|
|
321
|
-
// classes.text → 'text-white' (filledTextTone — bgAppearance: 'default' + not lighter)
|
|
322
|
-
// classes.hoverText → 'hover:text-white' (filledTextTone — hasBgState + not lighter)
|
|
323
|
-
// classes.border → 'border-blue' (visible appearance)
|
|
324
|
-
// classes.hoverBorder → 'hover:border-blue'
|
|
186
|
+
// bg → '' | border → border-brand-80 | hoverBorder → hover:border-brand-80
|
|
187
|
+
// selectedBorder → selected:border-brand-80
|
|
325
188
|
```
|
|
326
189
|
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
paletteShade: 'lighter',
|
|
190
|
+
**Text-only with selected fill**
|
|
191
|
+
```js
|
|
192
|
+
getPaletteClasses({
|
|
193
|
+
palette: 'brand',
|
|
194
|
+
appearance: { bg: false, text: true },
|
|
195
|
+
hoverAppearance: { bg: false, text: true },
|
|
196
|
+
selectedAppearance: { bg: true, text: true }
|
|
335
197
|
});
|
|
336
|
-
//
|
|
337
|
-
//
|
|
338
|
-
// classes.text → 'text-red' (textTone — lighter shade overrides filledTextTone)
|
|
339
|
-
// classes.hoverText → 'hover:text-red' (textTone — lighter shade)
|
|
340
|
-
// classes.border → 'border-transparent' (borderAppearance: 'none')
|
|
341
|
-
// classes.hoverBorder → undefined (no state borders with 'none')
|
|
198
|
+
// text → text-brand-80 | hoverText → hover:text-brand-100
|
|
199
|
+
// selectedBg → selected:bg-brand-80 | selectedText → selected:text-brand-filled
|
|
342
200
|
```
|
|
343
201
|
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
borderAppearance: 'onHover',
|
|
351
|
-
paletteShade: 'default',
|
|
202
|
+
**Cross-palette override (black text, brand on hover)**
|
|
203
|
+
```js
|
|
204
|
+
getPaletteClasses({
|
|
205
|
+
palette: 'brand',
|
|
206
|
+
appearance: { bg: false, text: 'black' },
|
|
207
|
+
hoverAppearance: { bg: false }
|
|
352
208
|
});
|
|
353
|
-
//
|
|
354
|
-
// classes.hoverBg → undefined (bgAppearance: 'none')
|
|
355
|
-
// classes.text → 'text-grey' (textTone — not filled)
|
|
356
|
-
// classes.hoverText → 'hover:text-grey' (textTone — bgAppearance 'none' → no filled text)
|
|
357
|
-
// classes.border → 'border-transparent' (onHover → transparent base)
|
|
358
|
-
// classes.hoverBorder → 'hover:border-grey' (onHover → state borders present)
|
|
209
|
+
// text → text-black | hoverText → ''
|
|
359
210
|
```
|
|
360
211
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
borderAppearance: 'visible',
|
|
368
|
-
paletteShade: 'default',
|
|
212
|
+
**Tinted outline (lighter palette)**
|
|
213
|
+
```js
|
|
214
|
+
getPaletteClasses({
|
|
215
|
+
palette: 'brandLighter',
|
|
216
|
+
appearance: { border: true },
|
|
217
|
+
hoverAppearance: { border: true }
|
|
369
218
|
});
|
|
370
|
-
//
|
|
371
|
-
// classes.hoverBg → 'hover:bg-blue' (not 'none' → state bg present)
|
|
372
|
-
// classes.text → 'text-blue' (baseTextTone — not filled, so textTone)
|
|
373
|
-
// classes.hoverText → 'hover:text-white' (stateTextTone — hasBgState + not lighter → filledTextTone!)
|
|
374
|
-
// classes.border → 'border-blue' (visible)
|
|
375
|
-
// classes.hoverBorder → 'hover:border-blue'
|
|
219
|
+
// bg → '' | border → border-brand-10 (borderLight shade) | hoverBorder → hover:border-brand-100
|
|
376
220
|
```
|
|
377
|
-
|
|
378
|
-
> This shows a key behavior: the base text is the normal tone, but **state text switches to `filledTextTone`** because the hover/state background will be filled (dark).
|
|
379
|
-
|
|
380
|
-
> **Note on `isSelected`:** Pass `isSelected: true` to fold the selected state into `bg`, `text`, and `border`. Instead of the resting class, each returns its `selected:` variant class. There are no separate `selectedBg`/`selectedText`/`selectedBorder` return keys.
|
|
381
|
-
|
|
382
|
-
---
|
|
383
|
-
|
|
384
|
-
## Behavior Summary
|
|
385
|
-
|
|
386
|
-
| Property | Lighter shade (`paletteShade: 'lighter'`) | Default shade |
|
|
387
|
-
|----------|-------------------------------------------|---------------|
|
|
388
|
-
| **Background** | Uses `-light` variant (e.g. `bg-blue-light`) | Uses base (e.g. `bg-blue`) |
|
|
389
|
-
| **Base text** | Always `textTone` (e.g. `text-blue`) | `filledTextTone` when filled (e.g. `text-white`), else `textTone` |
|
|
390
|
-
| **State text** | Always `textTone` (e.g. `hover:text-blue`) | `filledTextTone` when `bgAppearance !== 'none'` (e.g. `hover:text-white`), else `textTone` |
|
|
391
|
-
| **Border (base)** | Uses `-light` variant if not transparent (e.g. `border-blue-light`) | Uses base if not transparent (e.g. `border-blue`) |
|
|
392
|
-
| **Border (states)** | Always base tone (e.g. `hover:border-blue`) | Always base tone |
|
|
393
|
-
|
|
394
|
-
---
|
|
395
|
-
|
|
396
|
-
## FAQ
|
|
397
|
-
|
|
398
|
-
**Q: Why do text classes have no `-light` variant?**
|
|
399
|
-
A: Text on a light background should stay the base color for readability. When the background is filled (dark), text switches to a contrasting tone (e.g. `white`) instead.
|
|
400
|
-
|
|
401
|
-
**Q: Why do border state classes not use `-light`?**
|
|
402
|
-
A: Border hover/focus/active/selected states always use the full-intensity base tone for visibility, even when the resting border uses a lighter shade.
|
|
403
|
-
|
|
404
|
-
**Q: What happens if I pass an unknown palette to `getPaletteClasses`?**
|
|
405
|
-
A: It returns `DUMMY_OBJECT` (an empty frozen object), so no classes are applied.
|
|
406
|
-
|
|
407
|
-
**Q: Can I use CSS classes directly without `getPaletteClasses`?**
|
|
408
|
-
A: Yes. The CSS modules are standalone. `getPaletteClasses` is a convenience for components that accept palette/appearance/shade props.
|
|
409
|
-
|
|
410
|
-
**Q: When does state text differ from base text?**
|
|
411
|
-
A: When `bgAppearance` is neither `'none'` nor `'filled'` with default (non-lighter) shade. Base text uses `textTone` (colored), but state text uses `filledTextTone` (e.g. `white`) — because the hover/state will show a filled background.
|
|
412
|
-
|
|
413
|
-
---
|
|
414
|
-
|
|
415
|
-
**Last Updated:** March 2026
|