@helixui/library 3.2.0-next.98 → 3.3.0-next.111
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/custom-elements.json +30 -18
- package/dist/components/hx-alert/hx-alert.styles.d.ts.map +1 -1
- package/dist/components/hx-alert/index.js +1 -1
- package/dist/components/hx-banner/hx-banner.styles.d.ts.map +1 -1
- package/dist/components/hx-banner/index.js +1 -1
- package/dist/components/hx-button/hx-button.d.ts +8 -6
- package/dist/components/hx-button/hx-button.d.ts.map +1 -1
- package/dist/components/hx-button/hx-button.styles.d.ts.map +1 -1
- package/dist/components/hx-button/index.js +1 -1
- package/dist/components/hx-checkbox/hx-checkbox.styles.d.ts.map +1 -1
- package/dist/components/hx-checkbox/index.js +1 -1
- package/dist/components/hx-code-snippet/hx-code-snippet.styles.d.ts.map +1 -1
- package/dist/components/hx-code-snippet/index.js +1 -1
- package/dist/components/hx-combobox/hx-combobox.styles.d.ts.map +1 -1
- package/dist/components/hx-combobox/index.js +1 -1
- package/dist/components/hx-date-picker/hx-date-picker.styles.d.ts.map +1 -1
- package/dist/components/hx-date-picker/index.js +1 -1
- package/dist/components/hx-link/hx-link.styles.d.ts.map +1 -1
- package/dist/components/hx-link/index.js +1 -1
- package/dist/components/hx-list/hx-list-item.styles.d.ts.map +1 -1
- package/dist/components/hx-list/index.js +1 -1
- package/dist/components/hx-radio-group/hx-radio.styles.d.ts.map +1 -1
- package/dist/components/hx-radio-group/index.js +1 -1
- package/dist/components/hx-rating/hx-rating.styles.d.ts.map +1 -1
- package/dist/components/hx-rating/index.js +1 -1
- package/dist/components/hx-select/hx-select.styles.d.ts.map +1 -1
- package/dist/components/hx-select/index.js +1 -1
- package/dist/components/hx-side-nav/hx-side-nav.d.ts +4 -3
- package/dist/components/hx-side-nav/hx-side-nav.d.ts.map +1 -1
- package/dist/components/hx-side-nav/hx-side-nav.styles.d.ts.map +1 -1
- package/dist/components/hx-side-nav/index.js +1 -1
- package/dist/components/hx-slider/hx-slider.styles.d.ts.map +1 -1
- package/dist/components/hx-slider/index.js +1 -1
- package/dist/components/hx-split-button/hx-split-button.styles.d.ts.map +1 -1
- package/dist/components/hx-split-button/index.js +1 -1
- package/dist/components/hx-switch/hx-switch.styles.d.ts.map +1 -1
- package/dist/components/hx-switch/index.js +1 -1
- package/dist/components/hx-tabs/hx-tab-panel.styles.d.ts.map +1 -1
- package/dist/components/hx-tabs/hx-tab.styles.d.ts.map +1 -1
- package/dist/components/hx-tabs/index.js +1 -1
- package/dist/components/hx-text-input/hx-text-input.styles.d.ts.map +1 -1
- package/dist/components/hx-text-input/index.js +1 -1
- package/dist/components/hx-textarea/hx-textarea.styles.d.ts.map +1 -1
- package/dist/components/hx-textarea/index.js +1 -1
- package/dist/components/hx-theme/hx-theme.d.ts +14 -2
- package/dist/components/hx-theme/hx-theme.d.ts.map +1 -1
- package/dist/components/hx-theme/index.js +1 -1
- package/dist/components/hx-toggle-button/hx-toggle-button.styles.d.ts.map +1 -1
- package/dist/components/hx-toggle-button/index.js +1 -1
- package/dist/components/hx-tree-view/hx-tree-view.styles.d.ts.map +1 -1
- package/dist/components/hx-tree-view/index.js +1 -1
- package/dist/css/helix-all.css +122 -120
- package/dist/css/helix-core.css +53 -23
- package/dist/css/helix-data.css +20 -6
- package/dist/css/helix-feedback.css +3 -12
- package/dist/css/helix-forms.css +16 -63
- package/dist/css/helix-navigation.css +28 -8
- package/dist/css/helix-tokens.css +8 -8
- package/dist/css/helix-utility.css +2 -8
- package/dist/css/hx-alert.css +1 -4
- package/dist/css/hx-banner.css +2 -8
- package/dist/css/hx-button.css +52 -19
- package/dist/css/hx-checkbox.css +1 -4
- package/dist/css/hx-code-snippet.css +20 -6
- package/dist/css/hx-combobox.css +2 -8
- package/dist/css/hx-date-picker.css +5 -21
- package/dist/css/hx-link.css +1 -4
- package/dist/css/hx-rating.css +1 -2
- package/dist/css/hx-select.css +1 -4
- package/dist/css/hx-side-nav.css +27 -6
- package/dist/css/hx-slider.css +1 -4
- package/dist/css/hx-split-button.css +2 -8
- package/dist/css/hx-switch.css +1 -4
- package/dist/css/hx-text-input.css +2 -8
- package/dist/css/hx-textarea.css +1 -4
- package/dist/css/hx-toggle-button.css +1 -4
- package/dist/css/hx-tree-view.css +1 -2
- package/dist/css/index.css +1 -1
- package/dist/css/manifest.json +20 -18
- package/dist/index.js +22 -22
- package/dist/shared/{hx-alert-C597yHpD.js → hx-alert-CLn7CstP.js} +2 -5
- package/dist/shared/hx-alert-CLn7CstP.js.map +1 -0
- package/dist/shared/{hx-banner-Cxd7eFUP.js → hx-banner-D3DzpfcP.js} +7 -13
- package/dist/shared/hx-banner-D3DzpfcP.js.map +1 -0
- package/dist/shared/{hx-button-9OUjJnk7.js → hx-button-DPY6SPVT.js} +58 -25
- package/dist/shared/hx-button-DPY6SPVT.js.map +1 -0
- package/dist/shared/{hx-checkbox-DBD-gMoz.js → hx-checkbox-D7xma9YH.js} +6 -9
- package/dist/shared/hx-checkbox-D7xma9YH.js.map +1 -0
- package/dist/shared/{hx-code-snippet-CJrFeyz0.js → hx-code-snippet-fVV3Z2DZ.js} +55 -41
- package/dist/shared/hx-code-snippet-fVV3Z2DZ.js.map +1 -0
- package/dist/shared/{hx-combobox-ClhNRAS5.js → hx-combobox-DDzqNKEW.js} +6 -12
- package/dist/shared/hx-combobox-DDzqNKEW.js.map +1 -0
- package/dist/shared/{hx-date-picker-BJm7Yrda.js → hx-date-picker-2iRG1p74.js} +12 -28
- package/dist/shared/hx-date-picker-2iRG1p74.js.map +1 -0
- package/dist/shared/{hx-link-9Ig2DW6L.js → hx-link-C-O6vq0Q.js} +2 -5
- package/dist/shared/hx-link-C-O6vq0Q.js.map +1 -0
- package/dist/shared/{hx-list-CkphGi9T.js → hx-list-MyEhh8c7.js} +3 -5
- package/dist/shared/hx-list-MyEhh8c7.js.map +1 -0
- package/dist/shared/{hx-nav-item-DH2tXcj1.js → hx-nav-item-xqRPOCWX.js} +58 -37
- package/dist/shared/hx-nav-item-xqRPOCWX.js.map +1 -0
- package/dist/shared/{hx-radio-dFjUAost.js → hx-radio-CJvNU2yP.js} +2 -5
- package/dist/shared/{hx-radio-dFjUAost.js.map → hx-radio-CJvNU2yP.js.map} +1 -1
- package/dist/shared/{hx-rating-CGtsejNf.js → hx-rating-C3QP53k9.js} +2 -3
- package/dist/shared/hx-rating-C3QP53k9.js.map +1 -0
- package/dist/shared/{hx-select-Bf4usFts.js → hx-select-C8fEHQhC.js} +2 -5
- package/dist/shared/hx-select-C8fEHQhC.js.map +1 -0
- package/dist/shared/{hx-slider-m0aEClH1.js → hx-slider-Blmv_rwS.js} +23 -26
- package/dist/shared/hx-slider-Blmv_rwS.js.map +1 -0
- package/dist/shared/{hx-split-button-BxDFfx4D.js → hx-split-button-Djnc5Aeg.js} +3 -9
- package/dist/shared/hx-split-button-Djnc5Aeg.js.map +1 -0
- package/dist/shared/{hx-switch-DvAW4YY-.js → hx-switch-BrZFaRue.js} +6 -9
- package/dist/shared/hx-switch-BrZFaRue.js.map +1 -0
- package/dist/shared/{hx-tab-panel-SWOEHuJc.js → hx-tab-panel-DspCrKqo.js} +3 -9
- package/dist/shared/{hx-tab-panel-SWOEHuJc.js.map → hx-tab-panel-DspCrKqo.js.map} +1 -1
- package/dist/shared/{hx-text-input-Bn7Gn8CI.js → hx-text-input-D6FlOZM-.js} +3 -9
- package/dist/shared/hx-text-input-D6FlOZM-.js.map +1 -0
- package/dist/shared/{hx-textarea-Jx1xnhgv.js → hx-textarea-CNG590KY.js} +6 -9
- package/dist/shared/hx-textarea-CNG590KY.js.map +1 -0
- package/dist/shared/{hx-theme-BiyQ7UUK.js → hx-theme-BsefFWTO.js} +83 -113
- package/dist/shared/hx-theme-BsefFWTO.js.map +1 -0
- package/dist/shared/{hx-toggle-button-DPAIh_Xo.js → hx-toggle-button-iLiYrMbD.js} +2 -5
- package/dist/shared/hx-toggle-button-iLiYrMbD.js.map +1 -0
- package/dist/shared/{hx-tree-item-Dt0Ozqyr.js → hx-tree-item-C2CiWuDE.js} +2 -3
- package/dist/shared/hx-tree-item-C2CiWuDE.js.map +1 -0
- package/figma-inventory.json +34 -19
- package/package.json +2 -2
- package/dist/shared/hx-alert-C597yHpD.js.map +0 -1
- package/dist/shared/hx-banner-Cxd7eFUP.js.map +0 -1
- package/dist/shared/hx-button-9OUjJnk7.js.map +0 -1
- package/dist/shared/hx-checkbox-DBD-gMoz.js.map +0 -1
- package/dist/shared/hx-code-snippet-CJrFeyz0.js.map +0 -1
- package/dist/shared/hx-combobox-ClhNRAS5.js.map +0 -1
- package/dist/shared/hx-date-picker-BJm7Yrda.js.map +0 -1
- package/dist/shared/hx-link-9Ig2DW6L.js.map +0 -1
- package/dist/shared/hx-list-CkphGi9T.js.map +0 -1
- package/dist/shared/hx-nav-item-DH2tXcj1.js.map +0 -1
- package/dist/shared/hx-rating-CGtsejNf.js.map +0 -1
- package/dist/shared/hx-select-Bf4usFts.js.map +0 -1
- package/dist/shared/hx-slider-m0aEClH1.js.map +0 -1
- package/dist/shared/hx-split-button-BxDFfx4D.js.map +0 -1
- package/dist/shared/hx-switch-DvAW4YY-.js.map +0 -1
- package/dist/shared/hx-text-input-Bn7Gn8CI.js.map +0 -1
- package/dist/shared/hx-textarea-Jx1xnhgv.js.map +0 -1
- package/dist/shared/hx-theme-BiyQ7UUK.js.map +0 -1
- package/dist/shared/hx-toggle-button-DPAIh_Xo.js.map +0 -1
- package/dist/shared/hx-tree-item-Dt0Ozqyr.js.map +0 -1
package/dist/css/helix-data.css
CHANGED
|
@@ -80,7 +80,8 @@
|
|
|
80
80
|
min-width: var(--hx-touch-target-min, 2.75rem);
|
|
81
81
|
min-height: var(--hx-touch-target-min, 2.75rem);
|
|
82
82
|
padding: var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem);
|
|
83
|
-
border: var(--hx-border-width-thin, 1px) solid
|
|
83
|
+
border: var(--hx-border-width-thin, 1px) solid
|
|
84
|
+
var(--hx-color-border-on-dark-strong, rgba(255, 255, 255, 0.7));
|
|
84
85
|
border-radius: var(--hx-border-radius-sm, 0.25rem);
|
|
85
86
|
/* Copy button sits on the always-dark block snippet surface; uses inverse family for contrast on the terminal background. */
|
|
86
87
|
background-color: var(--hx-color-surface-inverse, #0d1825);
|
|
@@ -105,8 +106,14 @@
|
|
|
105
106
|
}
|
|
106
107
|
|
|
107
108
|
.code-snippet__copy-button:focus-visible {
|
|
108
|
-
|
|
109
|
-
|
|
109
|
+
/* Always-dark terminal surface — uses primary-400 (#6AB1B1, 7.27:1 on #0d1825)
|
|
110
|
+
instead of the light-mode --hx-focus-ring-color (primary-600, 3.07:1 — razor
|
|
111
|
+
above the 3:1 UI floor with no headroom). Deliberate primitive-tier consumption:
|
|
112
|
+
there is no semantic focus-ring-on-dark alias today — the dark.color.focus-ring
|
|
113
|
+
override at tokens.json only fires under theme=dark, but this surface is dark in
|
|
114
|
+
every theme. Tracked for promotion to a semantic alias in a future token-cascade
|
|
115
|
+
follow-up. */
|
|
116
|
+
outline: var(--hx-focus-ring-width, 2px) solid var(--hx-color-primary-400, #6ab1b1);
|
|
110
117
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
111
118
|
}
|
|
112
119
|
|
|
@@ -125,7 +132,8 @@
|
|
|
125
132
|
min-height: var(--hx-touch-target-min, 2.75rem);
|
|
126
133
|
padding: var(--hx-space-2, 0.5rem) var(--hx-space-4, 1rem);
|
|
127
134
|
border: none;
|
|
128
|
-
border-top: var(--hx-border-width-thin, 1px) solid
|
|
135
|
+
border-top: var(--hx-border-width-thin, 1px) solid
|
|
136
|
+
var(--hx-color-border-on-dark-strong, rgba(255, 255, 255, 0.7));
|
|
129
137
|
/* Expand button is attached to the always-dark block snippet — inverse family maintains the terminal aesthetic. */
|
|
130
138
|
background-color: var(--hx-color-surface-inverse, #0d1825);
|
|
131
139
|
color: var(--hx-color-text-inverse, #ffffff);
|
|
@@ -146,8 +154,14 @@
|
|
|
146
154
|
}
|
|
147
155
|
|
|
148
156
|
.code-snippet__expand-button:focus-visible {
|
|
149
|
-
|
|
150
|
-
|
|
157
|
+
/* Always-dark terminal surface — uses primary-400 (#6AB1B1, 7.27:1 on #0d1825)
|
|
158
|
+
instead of the light-mode --hx-focus-ring-color (primary-600, 3.07:1 — razor
|
|
159
|
+
above the 3:1 UI floor with no headroom). Deliberate primitive-tier consumption:
|
|
160
|
+
there is no semantic focus-ring-on-dark alias today — the dark.color.focus-ring
|
|
161
|
+
override at tokens.json only fires under theme=dark, but this surface is dark in
|
|
162
|
+
every theme. Tracked for promotion to a semantic alias in a future token-cascade
|
|
163
|
+
follow-up. */
|
|
164
|
+
outline: var(--hx-focus-ring-width, 2px) solid var(--hx-color-primary-400, #6ab1b1);
|
|
151
165
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
152
166
|
}
|
|
153
167
|
|
|
@@ -160,10 +160,7 @@
|
|
|
160
160
|
|
|
161
161
|
.alert__close-button:focus-visible {
|
|
162
162
|
outline: var(--hx-focus-ring-width, 2px) solid
|
|
163
|
-
var(
|
|
164
|
-
--hx-alert-close-btn-focus-ring-color,
|
|
165
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
166
|
-
);
|
|
163
|
+
var(--hx-alert-close-btn-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
167
164
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
168
165
|
opacity: 1;
|
|
169
166
|
}
|
|
@@ -336,10 +333,7 @@
|
|
|
336
333
|
|
|
337
334
|
.banner__action:focus-visible {
|
|
338
335
|
outline: var(--hx-focus-ring-width, 2px) solid
|
|
339
|
-
var(
|
|
340
|
-
--hx-banner-action-focus-ring-color,
|
|
341
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
342
|
-
);
|
|
336
|
+
var(--hx-banner-action-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
343
337
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
344
338
|
border-radius: var(--hx-border-radius-sm, 0.25rem);
|
|
345
339
|
}
|
|
@@ -380,10 +374,7 @@
|
|
|
380
374
|
|
|
381
375
|
.banner__close-button:focus-visible {
|
|
382
376
|
outline: var(--hx-focus-ring-width, 2px) solid
|
|
383
|
-
var(
|
|
384
|
-
--hx-banner-close-btn-focus-ring-color,
|
|
385
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
386
|
-
);
|
|
377
|
+
var(--hx-banner-close-btn-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
387
378
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
388
379
|
opacity: 1;
|
|
389
380
|
}
|
package/dist/css/helix-forms.css
CHANGED
|
@@ -74,10 +74,7 @@
|
|
|
74
74
|
|
|
75
75
|
.checkbox__input:focus-visible ~ .checkbox__box {
|
|
76
76
|
outline: var(--hx-checkbox-focus-ring-width, var(--hx-focus-ring-width, 2px)) solid
|
|
77
|
-
var(
|
|
78
|
-
--hx-checkbox-focus-ring-color,
|
|
79
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
80
|
-
);
|
|
77
|
+
var(--hx-checkbox-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
81
78
|
outline-offset: var(--hx-checkbox-focus-ring-offset, var(--hx-focus-ring-offset, 2px));
|
|
82
79
|
}
|
|
83
80
|
|
|
@@ -722,17 +719,11 @@
|
|
|
722
719
|
box-shadow var(--hx-transition-fast, 150ms ease);
|
|
723
720
|
}
|
|
724
721
|
.field__input-wrapper:focus-within {
|
|
725
|
-
border-color: var(
|
|
726
|
-
--hx-combobox-focus-ring-color,
|
|
727
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
728
|
-
);
|
|
722
|
+
border-color: var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
729
723
|
box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
|
|
730
724
|
color-mix(
|
|
731
725
|
in srgb,
|
|
732
|
-
var(
|
|
733
|
-
--hx-combobox-focus-ring-color,
|
|
734
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
735
|
-
)
|
|
726
|
+
var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, #0f7078))
|
|
736
727
|
calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
|
|
737
728
|
transparent
|
|
738
729
|
);
|
|
@@ -1138,17 +1129,11 @@
|
|
|
1138
1129
|
}
|
|
1139
1130
|
|
|
1140
1131
|
.field__input-wrapper:focus-within {
|
|
1141
|
-
border-color: var(
|
|
1142
|
-
--hx-date-picker-focus-ring-color,
|
|
1143
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
1144
|
-
);
|
|
1132
|
+
border-color: var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
1145
1133
|
box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
|
|
1146
1134
|
color-mix(
|
|
1147
1135
|
in srgb,
|
|
1148
|
-
var(
|
|
1149
|
-
--hx-date-picker-focus-ring-color,
|
|
1150
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
1151
|
-
)
|
|
1136
|
+
var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, #0f7078))
|
|
1152
1137
|
calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
|
|
1153
1138
|
transparent
|
|
1154
1139
|
);
|
|
@@ -1217,17 +1202,10 @@
|
|
|
1217
1202
|
}
|
|
1218
1203
|
|
|
1219
1204
|
.field__trigger:focus-visible {
|
|
1220
|
-
color: var(
|
|
1221
|
-
--hx-date-picker-focus-ring-color,
|
|
1222
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
1223
|
-
);
|
|
1205
|
+
color: var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
1224
1206
|
background-color: color-mix(
|
|
1225
1207
|
in srgb,
|
|
1226
|
-
var(
|
|
1227
|
-
--hx-date-picker-focus-ring-color,
|
|
1228
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
1229
|
-
)
|
|
1230
|
-
8%,
|
|
1208
|
+
var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, #0f7078)) 8%,
|
|
1231
1209
|
transparent
|
|
1232
1210
|
);
|
|
1233
1211
|
}
|
|
@@ -1324,10 +1302,7 @@
|
|
|
1324
1302
|
|
|
1325
1303
|
:is(.calendar__nav-btn, .calendar__day):focus-visible {
|
|
1326
1304
|
box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
|
|
1327
|
-
var(
|
|
1328
|
-
--hx-date-picker-focus-ring-color,
|
|
1329
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
1330
|
-
);
|
|
1305
|
+
var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
1331
1306
|
z-index: 1;
|
|
1332
1307
|
}
|
|
1333
1308
|
|
|
@@ -2543,8 +2518,7 @@
|
|
|
2543
2518
|
}
|
|
2544
2519
|
|
|
2545
2520
|
.symbol:focus-visible {
|
|
2546
|
-
outline: var(--hx-focus-ring-width, 2px) solid
|
|
2547
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078));
|
|
2521
|
+
outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #0f7078);
|
|
2548
2522
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
2549
2523
|
border-radius: var(--hx-border-radius-sm, 0.25rem);
|
|
2550
2524
|
}
|
|
@@ -2658,10 +2632,7 @@
|
|
|
2658
2632
|
--_border-radius: var(--hx-select-border-radius, var(--hx-border-radius-md, 0.375rem));
|
|
2659
2633
|
|
|
2660
2634
|
/* Focus ring */
|
|
2661
|
-
--_focus-ring-color: var(
|
|
2662
|
-
--hx-select-focus-ring-color,
|
|
2663
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
2664
|
-
);
|
|
2635
|
+
--_focus-ring-color: var(--hx-select-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
2665
2636
|
|
|
2666
2637
|
/* Error */
|
|
2667
2638
|
--_error-color: var(--hx-select-error-color, var(--hx-color-error-500, #e5493e));
|
|
@@ -3215,10 +3186,7 @@
|
|
|
3215
3186
|
.slider__input:focus-visible ~ .slider__thumb-visual {
|
|
3216
3187
|
box-shadow:
|
|
3217
3188
|
0 0 0 var(--hx-focus-ring-width, 2px)
|
|
3218
|
-
var(
|
|
3219
|
-
--hx-slider-focus-ring-color,
|
|
3220
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
3221
|
-
),
|
|
3189
|
+
var(--hx-slider-focus-ring-color, var(--hx-focus-ring-color, #0f7078)),
|
|
3222
3190
|
var(--hx-slider-thumb-shadow, var(--hx-shadow-sm, 0 1px 2px 0 rgb(0 0 0 / 0.05)));
|
|
3223
3191
|
}
|
|
3224
3192
|
|
|
@@ -3362,10 +3330,7 @@
|
|
|
3362
3330
|
|
|
3363
3331
|
.switch__track:focus-visible {
|
|
3364
3332
|
outline: var(--hx-focus-ring-width, 2px) solid
|
|
3365
|
-
var(
|
|
3366
|
-
--hx-switch-focus-ring-color,
|
|
3367
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
3368
|
-
);
|
|
3333
|
+
var(--hx-switch-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
3369
3334
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
3370
3335
|
}
|
|
3371
3336
|
|
|
@@ -3579,10 +3544,7 @@
|
|
|
3579
3544
|
);
|
|
3580
3545
|
--_text-input-border-color-focus: var(
|
|
3581
3546
|
--hx-text-input-border-color-focus,
|
|
3582
|
-
var(
|
|
3583
|
-
--hx-input-focus-ring-color,
|
|
3584
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
3585
|
-
)
|
|
3547
|
+
var(--hx-input-focus-ring-color, var(--hx-focus-ring-color, #0f7078))
|
|
3586
3548
|
);
|
|
3587
3549
|
--_text-input-border-color-invalid: var(
|
|
3588
3550
|
--hx-text-input-border-color-invalid,
|
|
@@ -3608,10 +3570,7 @@
|
|
|
3608
3570
|
/* Focus ring */
|
|
3609
3571
|
--_text-input-focus-ring-color: var(
|
|
3610
3572
|
--hx-text-input-focus-ring-color,
|
|
3611
|
-
var(
|
|
3612
|
-
--hx-input-focus-ring-color,
|
|
3613
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
3614
|
-
)
|
|
3573
|
+
var(--hx-input-focus-ring-color, var(--hx-focus-ring-color, #0f7078))
|
|
3615
3574
|
);
|
|
3616
3575
|
--_text-input-focus-ring-width: var(
|
|
3617
3576
|
--hx-text-input-focus-ring-width,
|
|
@@ -3921,10 +3880,7 @@
|
|
|
3921
3880
|
);
|
|
3922
3881
|
--_textarea-border-color-focus: var(
|
|
3923
3882
|
--hx-textarea-border-color-focus,
|
|
3924
|
-
var(
|
|
3925
|
-
--hx-input-focus-ring-color,
|
|
3926
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
3927
|
-
)
|
|
3883
|
+
var(--hx-input-focus-ring-color, var(--hx-focus-ring-color, #0f7078))
|
|
3928
3884
|
);
|
|
3929
3885
|
--_textarea-border-color-invalid: var(
|
|
3930
3886
|
--hx-textarea-border-color-invalid,
|
|
@@ -4446,10 +4402,7 @@
|
|
|
4446
4402
|
|
|
4447
4403
|
.button:focus-visible {
|
|
4448
4404
|
outline: var(--hx-focus-ring-width, 2px) solid
|
|
4449
|
-
var(
|
|
4450
|
-
--hx-toggle-button-focus-ring-color,
|
|
4451
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
4452
|
-
);
|
|
4405
|
+
var(--hx-toggle-button-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
4453
4406
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
4454
4407
|
}
|
|
4455
4408
|
|
|
@@ -740,7 +740,10 @@
|
|
|
740
740
|
transition: width var(--hx-transition-normal, 300ms) ease;
|
|
741
741
|
overflow: hidden;
|
|
742
742
|
border-inline-end: var(--hx-border-width-thin, 1px) solid
|
|
743
|
-
var(
|
|
743
|
+
var(
|
|
744
|
+
--hx-side-nav-border-color,
|
|
745
|
+
var(--hx-color-border-on-dark-strong, rgba(255, 255, 255, 0.7))
|
|
746
|
+
);
|
|
744
747
|
}
|
|
745
748
|
|
|
746
749
|
/* ─── Collapsed State ─── */
|
|
@@ -758,7 +761,10 @@
|
|
|
758
761
|
flex-shrink: 0;
|
|
759
762
|
min-height: var(--hx-space-14, 3.5rem);
|
|
760
763
|
border-bottom: var(--hx-border-width-thin, 1px) solid
|
|
761
|
-
var(
|
|
764
|
+
var(
|
|
765
|
+
--hx-side-nav-border-color,
|
|
766
|
+
var(--hx-color-border-on-dark-strong, rgba(255, 255, 255, 0.7))
|
|
767
|
+
);
|
|
762
768
|
overflow: hidden;
|
|
763
769
|
}
|
|
764
770
|
|
|
@@ -785,7 +791,10 @@
|
|
|
785
791
|
flex-shrink: 0;
|
|
786
792
|
min-height: var(--hx-space-14, 3.5rem);
|
|
787
793
|
border-top: var(--hx-border-width-thin, 1px) solid
|
|
788
|
-
var(
|
|
794
|
+
var(
|
|
795
|
+
--hx-side-nav-border-color,
|
|
796
|
+
var(--hx-color-border-on-dark-strong, rgba(255, 255, 255, 0.7))
|
|
797
|
+
);
|
|
789
798
|
overflow: hidden;
|
|
790
799
|
}
|
|
791
800
|
|
|
@@ -816,16 +825,28 @@
|
|
|
816
825
|
}
|
|
817
826
|
|
|
818
827
|
.side-nav__toggle:hover {
|
|
828
|
+
/* Read both deprecated --hx-color-border-on-dark-subtle (3.2.0/3.2.1 API)
|
|
829
|
+
and canonical --hx-color-surface-on-dark-overlay-subtle so consumer
|
|
830
|
+
overrides on either name reach paint. Deprecated removal: 4.0.0.
|
|
831
|
+
Hex fallback for browsers without color-mix(). */
|
|
819
832
|
background-color: var(
|
|
820
833
|
--hx-color-border-on-dark-subtle,
|
|
821
|
-
rgba(255, 255, 255, 0.1)
|
|
822
|
-
);
|
|
834
|
+
var(--hx-color-surface-on-dark-overlay-subtle, rgba(255, 255, 255, 0.1))
|
|
835
|
+
);
|
|
823
836
|
color: var(--hx-side-nav-toggle-hover-color, var(--hx-color-text-inverse, #ffffff));
|
|
824
837
|
}
|
|
825
838
|
|
|
826
839
|
@supports (color: color-mix(in srgb, red 50%, blue)) {
|
|
840
|
+
/* Fold color-mix() into the same deprecated-first chain so consumer
|
|
841
|
+
overrides on either token reach paint on the modern path too. */
|
|
827
842
|
.side-nav__toggle:hover {
|
|
828
|
-
background-color:
|
|
843
|
+
background-color: var(
|
|
844
|
+
--hx-color-border-on-dark-subtle,
|
|
845
|
+
var(
|
|
846
|
+
--hx-color-surface-on-dark-overlay-subtle,
|
|
847
|
+
color-mix(in srgb, currentColor 15%, transparent)
|
|
848
|
+
)
|
|
849
|
+
);
|
|
829
850
|
}
|
|
830
851
|
}
|
|
831
852
|
|
|
@@ -1287,8 +1308,7 @@
|
|
|
1287
1308
|
}
|
|
1288
1309
|
|
|
1289
1310
|
.tree:focus-visible {
|
|
1290
|
-
outline: var(--hx-focus-ring-width, 2px) solid
|
|
1291
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078));
|
|
1311
|
+
outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #0f7078);
|
|
1292
1312
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
1293
1313
|
border-radius: var(--hx-border-radius-sm, 0.25rem);
|
|
1294
1314
|
}
|
|
@@ -119,13 +119,13 @@
|
|
|
119
119
|
--hx-color-surface-warning-strong: var(--hx-color-warning-500);
|
|
120
120
|
--hx-color-surface-danger-strong: var(--hx-color-error-600);
|
|
121
121
|
--hx-color-surface-info-strong: var(--hx-color-primary-600);
|
|
122
|
+
--hx-color-surface-on-dark-overlay-default: var(--hx-overlay-white-30);
|
|
123
|
+
--hx-color-surface-on-dark-overlay-subtle: var(--hx-overlay-white-10);
|
|
122
124
|
--hx-color-border-default: var(--hx-color-neutral-200);
|
|
123
125
|
--hx-color-border-subtle: var(--hx-color-neutral-100);
|
|
124
126
|
--hx-color-border-strong: var(--hx-color-neutral-500);
|
|
125
127
|
--hx-color-border-focus: var(--hx-color-primary-500);
|
|
126
128
|
--hx-color-border-on-dark-strong: var(--hx-overlay-white-70);
|
|
127
|
-
--hx-color-border-on-dark-default: var(--hx-overlay-white-30);
|
|
128
|
-
--hx-color-border-on-dark-subtle: var(--hx-overlay-white-10);
|
|
129
129
|
--hx-color-focus-ring: var(--hx-color-primary-600);
|
|
130
130
|
--hx-color-selection-bg: var(--hx-color-primary-200);
|
|
131
131
|
--hx-color-selection-color: var(--hx-color-neutral-900);
|
|
@@ -368,13 +368,13 @@
|
|
|
368
368
|
--hx-color-surface-sunken: var(--hx-color-neutral-950);
|
|
369
369
|
--hx-color-surface-inverse: var(--hx-color-neutral-100);
|
|
370
370
|
--hx-color-surface-overlay: rgba(0, 0, 0, 0.85);
|
|
371
|
+
--hx-color-surface-on-dark-overlay-default: var(--hx-overlay-black-30);
|
|
372
|
+
--hx-color-surface-on-dark-overlay-subtle: var(--hx-overlay-black-10);
|
|
371
373
|
--hx-color-border-default: var(--hx-color-neutral-700);
|
|
372
374
|
--hx-color-border-subtle: var(--hx-color-neutral-800);
|
|
373
375
|
--hx-color-border-strong: var(--hx-color-neutral-400);
|
|
374
376
|
--hx-color-border-focus: var(--hx-color-primary-400);
|
|
375
377
|
--hx-color-border-on-dark-strong: var(--hx-overlay-black-50);
|
|
376
|
-
--hx-color-border-on-dark-default: var(--hx-overlay-black-30);
|
|
377
|
-
--hx-color-border-on-dark-subtle: var(--hx-overlay-black-10);
|
|
378
378
|
--hx-color-focus-ring: var(--hx-color-primary-400);
|
|
379
379
|
--hx-color-selection-bg: var(--hx-color-primary-800);
|
|
380
380
|
--hx-color-selection-color: var(--hx-color-neutral-100);
|
|
@@ -414,13 +414,13 @@
|
|
|
414
414
|
--hx-color-surface-sunken: var(--hx-color-neutral-950);
|
|
415
415
|
--hx-color-surface-inverse: var(--hx-color-neutral-100);
|
|
416
416
|
--hx-color-surface-overlay: rgba(0, 0, 0, 0.85);
|
|
417
|
+
--hx-color-surface-on-dark-overlay-default: var(--hx-overlay-black-30);
|
|
418
|
+
--hx-color-surface-on-dark-overlay-subtle: var(--hx-overlay-black-10);
|
|
417
419
|
--hx-color-border-default: var(--hx-color-neutral-700);
|
|
418
420
|
--hx-color-border-subtle: var(--hx-color-neutral-800);
|
|
419
421
|
--hx-color-border-strong: var(--hx-color-neutral-400);
|
|
420
422
|
--hx-color-border-focus: var(--hx-color-primary-400);
|
|
421
423
|
--hx-color-border-on-dark-strong: var(--hx-overlay-black-50);
|
|
422
|
-
--hx-color-border-on-dark-default: var(--hx-overlay-black-30);
|
|
423
|
-
--hx-color-border-on-dark-subtle: var(--hx-overlay-black-10);
|
|
424
424
|
--hx-color-focus-ring: var(--hx-color-primary-400);
|
|
425
425
|
--hx-color-selection-bg: var(--hx-color-primary-800);
|
|
426
426
|
--hx-color-selection-color: var(--hx-color-neutral-100);
|
|
@@ -486,13 +486,13 @@
|
|
|
486
486
|
--hx-color-surface-warning-strong: var(--hx-color-warning-500);
|
|
487
487
|
--hx-color-surface-danger-strong: var(--hx-color-error-500);
|
|
488
488
|
--hx-color-surface-info-strong: var(--hx-color-primary-500);
|
|
489
|
+
--hx-color-surface-on-dark-overlay-default: #FFFFFF;
|
|
490
|
+
--hx-color-surface-on-dark-overlay-subtle: #C0C0C0;
|
|
489
491
|
--hx-color-border-default: #FFFFFF;
|
|
490
492
|
--hx-color-border-subtle: #C0C0C0;
|
|
491
493
|
--hx-color-border-strong: #FFFFFF;
|
|
492
494
|
--hx-color-border-focus: #FFFF00;
|
|
493
495
|
--hx-color-border-on-dark-strong: #FFFFFF;
|
|
494
|
-
--hx-color-border-on-dark-default: #FFFFFF;
|
|
495
|
-
--hx-color-border-on-dark-subtle: #C0C0C0;
|
|
496
496
|
--hx-color-focus-ring: #FFFF00;
|
|
497
497
|
--hx-color-selection-bg: #1AEBFF;
|
|
498
498
|
--hx-color-selection-color: #000000;
|
|
@@ -415,10 +415,7 @@
|
|
|
415
415
|
|
|
416
416
|
.split-button__primary:focus-visible {
|
|
417
417
|
outline: var(--hx-focus-ring-width, 2px) solid
|
|
418
|
-
var(
|
|
419
|
-
--hx-split-button-focus-ring-color,
|
|
420
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
421
|
-
);
|
|
418
|
+
var(--hx-split-button-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
422
419
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
423
420
|
z-index: 1;
|
|
424
421
|
position: relative;
|
|
@@ -460,10 +457,7 @@
|
|
|
460
457
|
|
|
461
458
|
.split-button__trigger:focus-visible {
|
|
462
459
|
outline: var(--hx-focus-ring-width, 2px) solid
|
|
463
|
-
var(
|
|
464
|
-
--hx-split-button-focus-ring-color,
|
|
465
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
466
|
-
);
|
|
460
|
+
var(--hx-split-button-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
467
461
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
468
462
|
z-index: 1;
|
|
469
463
|
position: relative;
|
package/dist/css/hx-alert.css
CHANGED
|
@@ -158,10 +158,7 @@
|
|
|
158
158
|
|
|
159
159
|
.alert__close-button:focus-visible {
|
|
160
160
|
outline: var(--hx-focus-ring-width, 2px) solid
|
|
161
|
-
var(
|
|
162
|
-
--hx-alert-close-btn-focus-ring-color,
|
|
163
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
164
|
-
);
|
|
161
|
+
var(--hx-alert-close-btn-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
165
162
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
166
163
|
opacity: 1;
|
|
167
164
|
}
|
package/dist/css/hx-banner.css
CHANGED
|
@@ -96,10 +96,7 @@
|
|
|
96
96
|
|
|
97
97
|
.banner__action:focus-visible {
|
|
98
98
|
outline: var(--hx-focus-ring-width, 2px) solid
|
|
99
|
-
var(
|
|
100
|
-
--hx-banner-action-focus-ring-color,
|
|
101
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
102
|
-
);
|
|
99
|
+
var(--hx-banner-action-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
103
100
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
104
101
|
border-radius: var(--hx-border-radius-sm, 0.25rem);
|
|
105
102
|
}
|
|
@@ -140,10 +137,7 @@
|
|
|
140
137
|
|
|
141
138
|
.banner__close-button:focus-visible {
|
|
142
139
|
outline: var(--hx-focus-ring-width, 2px) solid
|
|
143
|
-
var(
|
|
144
|
-
--hx-banner-close-btn-focus-ring-color,
|
|
145
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
146
|
-
);
|
|
140
|
+
var(--hx-banner-close-btn-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
147
141
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
148
142
|
opacity: 1;
|
|
149
143
|
}
|
package/dist/css/hx-button.css
CHANGED
|
@@ -229,15 +229,16 @@
|
|
|
229
229
|
|
|
230
230
|
/* ─── Inverted Mode ─── */
|
|
231
231
|
|
|
232
|
-
/* Inline-fallback contract for
|
|
232
|
+
/* Inline-fallback contract for the on-dark-* tokens in this section:
|
|
233
233
|
the literal rgba(255, 255, 255, 0.X) arms are a LIGHT-MODE-only last
|
|
234
234
|
resort (cold-start, CSS-not-loaded). At runtime, hx-theme injects
|
|
235
|
-
dark
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
235
|
+
the dark.* override (overlay-black-* for the strong border and the
|
|
236
|
+
surface.on-dark-overlay-* fills) so dark-mode inverted buttons stay
|
|
237
|
+
visible on the now-light surface.inverse (#EBEEE9). The inline white
|
|
238
|
+
overlays would render invisible (≈1.1:1) on a light surface, but
|
|
239
|
+
they never paint when the theme is mounted. If a future change
|
|
240
|
+
moves these into a context where hx-theme is not guaranteed,
|
|
241
|
+
replace with mode-aware tokens. */
|
|
241
242
|
|
|
242
243
|
/* Override text color and filter-based hover/active for all variants */
|
|
243
244
|
:host([inverted]) .button {
|
|
@@ -255,8 +256,12 @@
|
|
|
255
256
|
|
|
256
257
|
:host([inverted]) .button:focus-visible {
|
|
257
258
|
/* WCAG 1.4.11: focus indicator needs ≥3:1 against adjacent colors.
|
|
258
|
-
border-on-dark-
|
|
259
|
-
|
|
259
|
+
border-on-dark-strong (overlay-white-70) ≈ 5:1 on neutral-900 — passes.
|
|
260
|
+
The lower-alpha siblings used to live in border.* but were sub-3:1
|
|
261
|
+
against any plausible surface and could not honour a border contract;
|
|
262
|
+
they're now surface.on-dark-overlay-{default,subtle} (translucent
|
|
263
|
+
fills, not borders) and used elsewhere in this file. See
|
|
264
|
+
tokens.json color.surface.on-dark-overlay-* for canonical ratios. */
|
|
260
265
|
outline-color: var(
|
|
261
266
|
--hx-button-inverted-focus-ring-color,
|
|
262
267
|
var(--hx-color-border-on-dark-strong, rgba(255, 255, 255, 0.7))
|
|
@@ -267,8 +272,16 @@
|
|
|
267
272
|
so dark mode can flip the fill to primary-600. surface.inverse becomes light
|
|
268
273
|
(#EBEEE9) in dark mode; primary-500 on #EBEEE9 = 2.94:1 (sub-3:1 UI floor
|
|
269
274
|
fail for the inverted-button boundary). primary-600 on #EBEEE9 = 4.97:1
|
|
270
|
-
(AA pass). Light mode tracks action.primary.bg
|
|
271
|
-
dark surface.inverse).
|
|
275
|
+
(AA pass). Light mode tracks action.primary.bg-inverted-rest's base value
|
|
276
|
+
(primary-500, 5.20:1 on dark surface.inverse).
|
|
277
|
+
|
|
278
|
+
Override path note (codex round-11): this binds --hx-button-bg directly,
|
|
279
|
+
matching the cascade convention every other .button--{variant} rule uses
|
|
280
|
+
(light primary at line 89, danger at 120, secondary, tertiary, ghost). The
|
|
281
|
+
consumer override path for inverted-primary rest is
|
|
282
|
+
--hx-color-action-primary-bg-inverted-rest, NOT --hx-button-bg — the same
|
|
283
|
+
pattern as light primary (consumers override --hx-color-action-primary-bg).
|
|
284
|
+
Pinned by dark-mode-resolution.test.ts:185-197 across both modes. */
|
|
272
285
|
:host([inverted]) .button--primary {
|
|
273
286
|
--hx-button-bg: var(--hx-color-action-primary-bg-inverted-rest, #429797);
|
|
274
287
|
}
|
|
@@ -320,20 +333,34 @@
|
|
|
320
333
|
--hx-button-border-color: var(--hx-color-border-on-dark-strong, rgba(255, 255, 255, 0.7));
|
|
321
334
|
}
|
|
322
335
|
|
|
336
|
+
/* Inverted overlay fills read both names so consumer overrides reach paint
|
|
337
|
+
regardless of which token they target: the deprecated --hx-color-border-on-dark-*
|
|
338
|
+
names (3.2.0/3.2.1 public API, scheduled for removal in 4.0.0) and the canonical
|
|
339
|
+
--hx-color-surface-on-dark-overlay-* names (round-8 rename). Deprecated name
|
|
340
|
+
wins when set; otherwise resolves through the canonical alias chain. */
|
|
323
341
|
:host([inverted]) .button--secondary:hover {
|
|
324
|
-
--hx-button-bg: var(
|
|
342
|
+
--hx-button-bg: var(
|
|
343
|
+
--hx-color-border-on-dark-default,
|
|
344
|
+
var(--hx-color-surface-on-dark-overlay-default, rgba(255, 255, 255, 0.3))
|
|
345
|
+
);
|
|
325
346
|
}
|
|
326
347
|
|
|
327
|
-
/* Tertiary inverted — resting at subtle (10%) lifts to default
|
|
328
|
-
so the runtime hover delta is visually distinct, not
|
|
329
|
-
single token. */
|
|
348
|
+
/* Tertiary inverted — resting at the subtle overlay (10%) lifts to the default
|
|
349
|
+
overlay (30%) on hover so the runtime hover delta is visually distinct, not
|
|
350
|
+
collapsed onto a single token. */
|
|
330
351
|
:host([inverted]) .button--tertiary {
|
|
331
|
-
--hx-button-bg: var(
|
|
352
|
+
--hx-button-bg: var(
|
|
353
|
+
--hx-color-border-on-dark-subtle,
|
|
354
|
+
var(--hx-color-surface-on-dark-overlay-subtle, rgba(255, 255, 255, 0.1))
|
|
355
|
+
);
|
|
332
356
|
--hx-button-border-color: transparent;
|
|
333
357
|
}
|
|
334
358
|
|
|
335
359
|
:host([inverted]) .button--tertiary:hover {
|
|
336
|
-
--hx-button-bg: var(
|
|
360
|
+
--hx-button-bg: var(
|
|
361
|
+
--hx-color-border-on-dark-default,
|
|
362
|
+
var(--hx-color-surface-on-dark-overlay-default, rgba(255, 255, 255, 0.3))
|
|
363
|
+
);
|
|
337
364
|
}
|
|
338
365
|
|
|
339
366
|
/* Ghost inverted — transparent base, translucent hover bg */
|
|
@@ -345,7 +372,10 @@
|
|
|
345
372
|
:host([inverted]) .button--ghost:hover {
|
|
346
373
|
--hx-button-bg: var(
|
|
347
374
|
--hx-button-inverted-ghost-hover-bg,
|
|
348
|
-
var(
|
|
375
|
+
var(
|
|
376
|
+
--hx-color-border-on-dark-default,
|
|
377
|
+
var(--hx-color-surface-on-dark-overlay-default, rgba(255, 255, 255, 0.3))
|
|
378
|
+
)
|
|
349
379
|
);
|
|
350
380
|
}
|
|
351
381
|
|
|
@@ -355,7 +385,10 @@
|
|
|
355
385
|
}
|
|
356
386
|
|
|
357
387
|
:host([inverted]) .button--outline:hover {
|
|
358
|
-
--hx-button-bg: var(
|
|
388
|
+
--hx-button-bg: var(
|
|
389
|
+
--hx-color-border-on-dark-default,
|
|
390
|
+
var(--hx-color-surface-on-dark-overlay-default, rgba(255, 255, 255, 0.3))
|
|
391
|
+
);
|
|
359
392
|
}
|
|
360
393
|
|
|
361
394
|
/* ─── Prefix / Suffix / Label ─── */
|
package/dist/css/hx-checkbox.css
CHANGED
|
@@ -72,10 +72,7 @@
|
|
|
72
72
|
|
|
73
73
|
.checkbox__input:focus-visible ~ .checkbox__box {
|
|
74
74
|
outline: var(--hx-checkbox-focus-ring-width, var(--hx-focus-ring-width, 2px)) solid
|
|
75
|
-
var(
|
|
76
|
-
--hx-checkbox-focus-ring-color,
|
|
77
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
78
|
-
);
|
|
75
|
+
var(--hx-checkbox-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
79
76
|
outline-offset: var(--hx-checkbox-focus-ring-offset, var(--hx-focus-ring-offset, 2px));
|
|
80
77
|
}
|
|
81
78
|
|
|
@@ -78,7 +78,8 @@
|
|
|
78
78
|
min-width: var(--hx-touch-target-min, 2.75rem);
|
|
79
79
|
min-height: var(--hx-touch-target-min, 2.75rem);
|
|
80
80
|
padding: var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem);
|
|
81
|
-
border: var(--hx-border-width-thin, 1px) solid
|
|
81
|
+
border: var(--hx-border-width-thin, 1px) solid
|
|
82
|
+
var(--hx-color-border-on-dark-strong, rgba(255, 255, 255, 0.7));
|
|
82
83
|
border-radius: var(--hx-border-radius-sm, 0.25rem);
|
|
83
84
|
/* Copy button sits on the always-dark block snippet surface; uses inverse family for contrast on the terminal background. */
|
|
84
85
|
background-color: var(--hx-color-surface-inverse, #0d1825);
|
|
@@ -103,8 +104,14 @@
|
|
|
103
104
|
}
|
|
104
105
|
|
|
105
106
|
.code-snippet__copy-button:focus-visible {
|
|
106
|
-
|
|
107
|
-
|
|
107
|
+
/* Always-dark terminal surface — uses primary-400 (#6AB1B1, 7.27:1 on #0d1825)
|
|
108
|
+
instead of the light-mode --hx-focus-ring-color (primary-600, 3.07:1 — razor
|
|
109
|
+
above the 3:1 UI floor with no headroom). Deliberate primitive-tier consumption:
|
|
110
|
+
there is no semantic focus-ring-on-dark alias today — the dark.color.focus-ring
|
|
111
|
+
override at tokens.json only fires under theme=dark, but this surface is dark in
|
|
112
|
+
every theme. Tracked for promotion to a semantic alias in a future token-cascade
|
|
113
|
+
follow-up. */
|
|
114
|
+
outline: var(--hx-focus-ring-width, 2px) solid var(--hx-color-primary-400, #6ab1b1);
|
|
108
115
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
109
116
|
}
|
|
110
117
|
|
|
@@ -123,7 +130,8 @@
|
|
|
123
130
|
min-height: var(--hx-touch-target-min, 2.75rem);
|
|
124
131
|
padding: var(--hx-space-2, 0.5rem) var(--hx-space-4, 1rem);
|
|
125
132
|
border: none;
|
|
126
|
-
border-top: var(--hx-border-width-thin, 1px) solid
|
|
133
|
+
border-top: var(--hx-border-width-thin, 1px) solid
|
|
134
|
+
var(--hx-color-border-on-dark-strong, rgba(255, 255, 255, 0.7));
|
|
127
135
|
/* Expand button is attached to the always-dark block snippet — inverse family maintains the terminal aesthetic. */
|
|
128
136
|
background-color: var(--hx-color-surface-inverse, #0d1825);
|
|
129
137
|
color: var(--hx-color-text-inverse, #ffffff);
|
|
@@ -144,8 +152,14 @@
|
|
|
144
152
|
}
|
|
145
153
|
|
|
146
154
|
.code-snippet__expand-button:focus-visible {
|
|
147
|
-
|
|
148
|
-
|
|
155
|
+
/* Always-dark terminal surface — uses primary-400 (#6AB1B1, 7.27:1 on #0d1825)
|
|
156
|
+
instead of the light-mode --hx-focus-ring-color (primary-600, 3.07:1 — razor
|
|
157
|
+
above the 3:1 UI floor with no headroom). Deliberate primitive-tier consumption:
|
|
158
|
+
there is no semantic focus-ring-on-dark alias today — the dark.color.focus-ring
|
|
159
|
+
override at tokens.json only fires under theme=dark, but this surface is dark in
|
|
160
|
+
every theme. Tracked for promotion to a semantic alias in a future token-cascade
|
|
161
|
+
follow-up. */
|
|
162
|
+
outline: var(--hx-focus-ring-width, 2px) solid var(--hx-color-primary-400, #6ab1b1);
|
|
149
163
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
150
164
|
}
|
|
151
165
|
|