@helixui/library 3.2.0-next.100 → 3.2.0-next.104
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 +10 -10
- 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 +5 -5
- 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 +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-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 +58 -113
- package/dist/css/helix-core.css +33 -23
- package/dist/css/helix-data.css +2 -4
- package/dist/css/helix-feedback.css +3 -12
- package/dist/css/helix-forms.css +16 -63
- package/dist/css/helix-navigation.css +2 -3
- package/dist/css/helix-tokens.css +16 -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 +32 -19
- package/dist/css/hx-checkbox.css +1 -4
- package/dist/css/hx-code-snippet.css +2 -4
- 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 +1 -1
- 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 +16 -14
- package/dist/index.js +21 -21
- 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-DVSDRKoV.js} +38 -25
- package/dist/shared/hx-button-DVSDRKoV.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-B26RM1_C.js → hx-code-snippet-Bi-arDKH.js} +3 -5
- package/dist/shared/hx-code-snippet-Bi-arDKH.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-CqbO5-T5.js → hx-nav-item-Dap3DYgB.js} +2 -2
- package/dist/shared/hx-nav-item-Dap3DYgB.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-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 +12 -12
- 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-B26RM1_C.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-CqbO5-T5.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-toggle-button-DPAIh_Xo.js.map +0 -1
- package/dist/shared/hx-tree-item-Dt0Ozqyr.js.map +0 -1
package/dist/css/helix-all.css
CHANGED
|
@@ -309,10 +309,7 @@
|
|
|
309
309
|
|
|
310
310
|
.alert__close-button:focus-visible {
|
|
311
311
|
outline: var(--hx-focus-ring-width, 2px) solid
|
|
312
|
-
var(
|
|
313
|
-
--hx-alert-close-btn-focus-ring-color,
|
|
314
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
315
|
-
);
|
|
312
|
+
var(--hx-alert-close-btn-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
316
313
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
317
314
|
opacity: 1;
|
|
318
315
|
}
|
|
@@ -832,10 +829,7 @@
|
|
|
832
829
|
|
|
833
830
|
.banner__action:focus-visible {
|
|
834
831
|
outline: var(--hx-focus-ring-width, 2px) solid
|
|
835
|
-
var(
|
|
836
|
-
--hx-banner-action-focus-ring-color,
|
|
837
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
838
|
-
);
|
|
832
|
+
var(--hx-banner-action-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
839
833
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
840
834
|
border-radius: var(--hx-border-radius-sm, 0.25rem);
|
|
841
835
|
}
|
|
@@ -876,10 +870,7 @@
|
|
|
876
870
|
|
|
877
871
|
.banner__close-button:focus-visible {
|
|
878
872
|
outline: var(--hx-focus-ring-width, 2px) solid
|
|
879
|
-
var(
|
|
880
|
-
--hx-banner-close-btn-focus-ring-color,
|
|
881
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
882
|
-
);
|
|
873
|
+
var(--hx-banner-close-btn-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
883
874
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
884
875
|
opacity: 1;
|
|
885
876
|
}
|
|
@@ -1255,15 +1246,16 @@
|
|
|
1255
1246
|
|
|
1256
1247
|
/* ─── Inverted Mode ─── */
|
|
1257
1248
|
|
|
1258
|
-
/* Inline-fallback contract for
|
|
1249
|
+
/* Inline-fallback contract for the on-dark-* tokens in this section:
|
|
1259
1250
|
the literal rgba(255, 255, 255, 0.X) arms are a LIGHT-MODE-only last
|
|
1260
1251
|
resort (cold-start, CSS-not-loaded). At runtime, hx-theme injects
|
|
1261
|
-
dark
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1252
|
+
the dark.* override (overlay-black-* for the strong border and the
|
|
1253
|
+
surface.on-dark-overlay-* fills) so dark-mode inverted buttons stay
|
|
1254
|
+
visible on the now-light surface.inverse (#EBEEE9). The inline white
|
|
1255
|
+
overlays would render invisible (≈1.1:1) on a light surface, but
|
|
1256
|
+
they never paint when the theme is mounted. If a future change
|
|
1257
|
+
moves these into a context where hx-theme is not guaranteed,
|
|
1258
|
+
replace with mode-aware tokens. */
|
|
1267
1259
|
|
|
1268
1260
|
/* Override text color and filter-based hover/active for all variants */
|
|
1269
1261
|
:host([inverted]) .button {
|
|
@@ -1281,8 +1273,12 @@
|
|
|
1281
1273
|
|
|
1282
1274
|
:host([inverted]) .button:focus-visible {
|
|
1283
1275
|
/* WCAG 1.4.11: focus indicator needs ≥3:1 against adjacent colors.
|
|
1284
|
-
border-on-dark-
|
|
1285
|
-
|
|
1276
|
+
border-on-dark-strong (overlay-white-70) ≈ 5:1 on neutral-900 — passes.
|
|
1277
|
+
The lower-alpha siblings used to live in border.* but were sub-3:1
|
|
1278
|
+
against any plausible surface and could not honour a border contract;
|
|
1279
|
+
they're now surface.on-dark-overlay-{default,subtle} (translucent
|
|
1280
|
+
fills, not borders) and used elsewhere in this file. See
|
|
1281
|
+
tokens.json color.surface.on-dark-overlay-* for canonical ratios. */
|
|
1286
1282
|
outline-color: var(
|
|
1287
1283
|
--hx-button-inverted-focus-ring-color,
|
|
1288
1284
|
var(--hx-color-border-on-dark-strong, rgba(255, 255, 255, 0.7))
|
|
@@ -1293,8 +1289,16 @@
|
|
|
1293
1289
|
so dark mode can flip the fill to primary-600. surface.inverse becomes light
|
|
1294
1290
|
(#EBEEE9) in dark mode; primary-500 on #EBEEE9 = 2.94:1 (sub-3:1 UI floor
|
|
1295
1291
|
fail for the inverted-button boundary). primary-600 on #EBEEE9 = 4.97:1
|
|
1296
|
-
(AA pass). Light mode tracks action.primary.bg
|
|
1297
|
-
dark surface.inverse).
|
|
1292
|
+
(AA pass). Light mode tracks action.primary.bg-inverted-rest's base value
|
|
1293
|
+
(primary-500, 5.20:1 on dark surface.inverse).
|
|
1294
|
+
|
|
1295
|
+
Override path note (codex round-11): this binds --hx-button-bg directly,
|
|
1296
|
+
matching the cascade convention every other .button--{variant} rule uses
|
|
1297
|
+
(light primary at line 89, danger at 120, secondary, tertiary, ghost). The
|
|
1298
|
+
consumer override path for inverted-primary rest is
|
|
1299
|
+
--hx-color-action-primary-bg-inverted-rest, NOT --hx-button-bg — the same
|
|
1300
|
+
pattern as light primary (consumers override --hx-color-action-primary-bg).
|
|
1301
|
+
Pinned by dark-mode-resolution.test.ts:185-197 across both modes. */
|
|
1298
1302
|
:host([inverted]) .button--primary {
|
|
1299
1303
|
--hx-button-bg: var(--hx-color-action-primary-bg-inverted-rest, #429797);
|
|
1300
1304
|
}
|
|
@@ -1347,19 +1351,19 @@
|
|
|
1347
1351
|
}
|
|
1348
1352
|
|
|
1349
1353
|
:host([inverted]) .button--secondary:hover {
|
|
1350
|
-
--hx-button-bg: var(--hx-color-
|
|
1354
|
+
--hx-button-bg: var(--hx-color-surface-on-dark-overlay-default, rgba(255, 255, 255, 0.3));
|
|
1351
1355
|
}
|
|
1352
1356
|
|
|
1353
|
-
/* Tertiary inverted — resting at subtle (10%) lifts to default
|
|
1354
|
-
so the runtime hover delta is visually distinct, not
|
|
1355
|
-
single token. */
|
|
1357
|
+
/* Tertiary inverted — resting at the subtle overlay (10%) lifts to the default
|
|
1358
|
+
overlay (30%) on hover so the runtime hover delta is visually distinct, not
|
|
1359
|
+
collapsed onto a single token. */
|
|
1356
1360
|
:host([inverted]) .button--tertiary {
|
|
1357
|
-
--hx-button-bg: var(--hx-color-
|
|
1361
|
+
--hx-button-bg: var(--hx-color-surface-on-dark-overlay-subtle, rgba(255, 255, 255, 0.1));
|
|
1358
1362
|
--hx-button-border-color: transparent;
|
|
1359
1363
|
}
|
|
1360
1364
|
|
|
1361
1365
|
:host([inverted]) .button--tertiary:hover {
|
|
1362
|
-
--hx-button-bg: var(--hx-color-
|
|
1366
|
+
--hx-button-bg: var(--hx-color-surface-on-dark-overlay-default, rgba(255, 255, 255, 0.3));
|
|
1363
1367
|
}
|
|
1364
1368
|
|
|
1365
1369
|
/* Ghost inverted — transparent base, translucent hover bg */
|
|
@@ -1371,7 +1375,7 @@
|
|
|
1371
1375
|
:host([inverted]) .button--ghost:hover {
|
|
1372
1376
|
--hx-button-bg: var(
|
|
1373
1377
|
--hx-button-inverted-ghost-hover-bg,
|
|
1374
|
-
var(--hx-color-
|
|
1378
|
+
var(--hx-color-surface-on-dark-overlay-default, rgba(255, 255, 255, 0.3))
|
|
1375
1379
|
);
|
|
1376
1380
|
}
|
|
1377
1381
|
|
|
@@ -1381,7 +1385,7 @@
|
|
|
1381
1385
|
}
|
|
1382
1386
|
|
|
1383
1387
|
:host([inverted]) .button--outline:hover {
|
|
1384
|
-
--hx-button-bg: var(--hx-color-
|
|
1388
|
+
--hx-button-bg: var(--hx-color-surface-on-dark-overlay-default, rgba(255, 255, 255, 0.3));
|
|
1385
1389
|
}
|
|
1386
1390
|
|
|
1387
1391
|
/* ─── Prefix / Suffix / Label ─── */
|
|
@@ -2058,10 +2062,7 @@
|
|
|
2058
2062
|
|
|
2059
2063
|
.checkbox__input:focus-visible ~ .checkbox__box {
|
|
2060
2064
|
outline: var(--hx-checkbox-focus-ring-width, var(--hx-focus-ring-width, 2px)) solid
|
|
2061
|
-
var(
|
|
2062
|
-
--hx-checkbox-focus-ring-color,
|
|
2063
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
2064
|
-
);
|
|
2065
|
+
var(--hx-checkbox-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
2065
2066
|
outline-offset: var(--hx-checkbox-focus-ring-offset, var(--hx-focus-ring-offset, 2px));
|
|
2066
2067
|
}
|
|
2067
2068
|
|
|
@@ -2753,8 +2754,7 @@
|
|
|
2753
2754
|
}
|
|
2754
2755
|
|
|
2755
2756
|
.code-snippet__copy-button:focus-visible {
|
|
2756
|
-
outline: var(--hx-focus-ring-width, 2px) solid
|
|
2757
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078));
|
|
2757
|
+
outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #0f7078);
|
|
2758
2758
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
2759
2759
|
}
|
|
2760
2760
|
|
|
@@ -2795,8 +2795,7 @@
|
|
|
2795
2795
|
}
|
|
2796
2796
|
|
|
2797
2797
|
.code-snippet__expand-button:focus-visible {
|
|
2798
|
-
outline: var(--hx-focus-ring-width, 2px) solid
|
|
2799
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078));
|
|
2798
|
+
outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #0f7078);
|
|
2800
2799
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
2801
2800
|
}
|
|
2802
2801
|
|
|
@@ -3184,17 +3183,11 @@
|
|
|
3184
3183
|
box-shadow var(--hx-transition-fast, 150ms ease);
|
|
3185
3184
|
}
|
|
3186
3185
|
.field__input-wrapper:focus-within {
|
|
3187
|
-
border-color: var(
|
|
3188
|
-
--hx-combobox-focus-ring-color,
|
|
3189
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
3190
|
-
);
|
|
3186
|
+
border-color: var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
3191
3187
|
box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
|
|
3192
3188
|
color-mix(
|
|
3193
3189
|
in srgb,
|
|
3194
|
-
var(
|
|
3195
|
-
--hx-combobox-focus-ring-color,
|
|
3196
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
3197
|
-
)
|
|
3190
|
+
var(--hx-combobox-focus-ring-color, var(--hx-focus-ring-color, #0f7078))
|
|
3198
3191
|
calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
|
|
3199
3192
|
transparent
|
|
3200
3193
|
);
|
|
@@ -4130,17 +4123,11 @@
|
|
|
4130
4123
|
}
|
|
4131
4124
|
|
|
4132
4125
|
.field__input-wrapper:focus-within {
|
|
4133
|
-
border-color: var(
|
|
4134
|
-
--hx-date-picker-focus-ring-color,
|
|
4135
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
4136
|
-
);
|
|
4126
|
+
border-color: var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
4137
4127
|
box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
|
|
4138
4128
|
color-mix(
|
|
4139
4129
|
in srgb,
|
|
4140
|
-
var(
|
|
4141
|
-
--hx-date-picker-focus-ring-color,
|
|
4142
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
4143
|
-
)
|
|
4130
|
+
var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, #0f7078))
|
|
4144
4131
|
calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
|
|
4145
4132
|
transparent
|
|
4146
4133
|
);
|
|
@@ -4209,17 +4196,10 @@
|
|
|
4209
4196
|
}
|
|
4210
4197
|
|
|
4211
4198
|
.field__trigger:focus-visible {
|
|
4212
|
-
color: var(
|
|
4213
|
-
--hx-date-picker-focus-ring-color,
|
|
4214
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
4215
|
-
);
|
|
4199
|
+
color: var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
4216
4200
|
background-color: color-mix(
|
|
4217
4201
|
in srgb,
|
|
4218
|
-
var(
|
|
4219
|
-
--hx-date-picker-focus-ring-color,
|
|
4220
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
4221
|
-
)
|
|
4222
|
-
8%,
|
|
4202
|
+
var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, #0f7078)) 8%,
|
|
4223
4203
|
transparent
|
|
4224
4204
|
);
|
|
4225
4205
|
}
|
|
@@ -4316,10 +4296,7 @@
|
|
|
4316
4296
|
|
|
4317
4297
|
:is(.calendar__nav-btn, .calendar__day):focus-visible {
|
|
4318
4298
|
box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
|
|
4319
|
-
var(
|
|
4320
|
-
--hx-date-picker-focus-ring-color,
|
|
4321
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
4322
|
-
);
|
|
4299
|
+
var(--hx-date-picker-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
4323
4300
|
z-index: 1;
|
|
4324
4301
|
}
|
|
4325
4302
|
|
|
@@ -6108,10 +6085,7 @@ export const helixGridItemStyles = css`
|
|
|
6108
6085
|
|
|
6109
6086
|
.link:focus-visible {
|
|
6110
6087
|
outline: var(--hx-focus-ring-width, 2px) solid
|
|
6111
|
-
var(
|
|
6112
|
-
--hx-link-focus-ring-color,
|
|
6113
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
6114
|
-
);
|
|
6088
|
+
var(--hx-link-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
6115
6089
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
6116
6090
|
border-radius: var(--hx-border-radius-sm, 0.25rem);
|
|
6117
6091
|
}
|
|
@@ -8193,8 +8167,7 @@ export const helixGridItemStyles = css`
|
|
|
8193
8167
|
}
|
|
8194
8168
|
|
|
8195
8169
|
.symbol:focus-visible {
|
|
8196
|
-
outline: var(--hx-focus-ring-width, 2px) solid
|
|
8197
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078));
|
|
8170
|
+
outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #0f7078);
|
|
8198
8171
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
8199
8172
|
border-radius: var(--hx-border-radius-sm, 0.25rem);
|
|
8200
8173
|
}
|
|
@@ -8308,10 +8281,7 @@ export const helixGridItemStyles = css`
|
|
|
8308
8281
|
--_border-radius: var(--hx-select-border-radius, var(--hx-border-radius-md, 0.375rem));
|
|
8309
8282
|
|
|
8310
8283
|
/* Focus ring */
|
|
8311
|
-
--_focus-ring-color: var(
|
|
8312
|
-
--hx-select-focus-ring-color,
|
|
8313
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
8314
|
-
);
|
|
8284
|
+
--_focus-ring-color: var(--hx-select-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
8315
8285
|
|
|
8316
8286
|
/* Error */
|
|
8317
8287
|
--_error-color: var(--hx-select-error-color, var(--hx-color-error-500, #e5493e));
|
|
@@ -8779,7 +8749,7 @@ export const helixGridItemStyles = css`
|
|
|
8779
8749
|
|
|
8780
8750
|
.side-nav__toggle:hover {
|
|
8781
8751
|
background-color: var(
|
|
8782
|
-
--hx-color-
|
|
8752
|
+
--hx-color-surface-on-dark-overlay-subtle,
|
|
8783
8753
|
rgba(255, 255, 255, 0.1)
|
|
8784
8754
|
); /* fallback for browsers without color-mix() */
|
|
8785
8755
|
color: var(--hx-side-nav-toggle-hover-color, var(--hx-color-text-inverse, #ffffff));
|
|
@@ -9151,10 +9121,7 @@ export const helixGridItemStyles = css`
|
|
|
9151
9121
|
.slider__input:focus-visible ~ .slider__thumb-visual {
|
|
9152
9122
|
box-shadow:
|
|
9153
9123
|
0 0 0 var(--hx-focus-ring-width, 2px)
|
|
9154
|
-
var(
|
|
9155
|
-
--hx-slider-focus-ring-color,
|
|
9156
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
9157
|
-
),
|
|
9124
|
+
var(--hx-slider-focus-ring-color, var(--hx-focus-ring-color, #0f7078)),
|
|
9158
9125
|
var(--hx-slider-thumb-shadow, var(--hx-shadow-sm, 0 1px 2px 0 rgb(0 0 0 / 0.05)));
|
|
9159
9126
|
}
|
|
9160
9127
|
|
|
@@ -9423,10 +9390,7 @@ export const helixGridItemStyles = css`
|
|
|
9423
9390
|
|
|
9424
9391
|
.split-button__primary:focus-visible {
|
|
9425
9392
|
outline: var(--hx-focus-ring-width, 2px) solid
|
|
9426
|
-
var(
|
|
9427
|
-
--hx-split-button-focus-ring-color,
|
|
9428
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
9429
|
-
);
|
|
9393
|
+
var(--hx-split-button-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
9430
9394
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
9431
9395
|
z-index: 1;
|
|
9432
9396
|
position: relative;
|
|
@@ -9468,10 +9432,7 @@ export const helixGridItemStyles = css`
|
|
|
9468
9432
|
|
|
9469
9433
|
.split-button__trigger:focus-visible {
|
|
9470
9434
|
outline: var(--hx-focus-ring-width, 2px) solid
|
|
9471
|
-
var(
|
|
9472
|
-
--hx-split-button-focus-ring-color,
|
|
9473
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
9474
|
-
);
|
|
9435
|
+
var(--hx-split-button-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
9475
9436
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
9476
9437
|
z-index: 1;
|
|
9477
9438
|
position: relative;
|
|
@@ -10539,10 +10500,7 @@ export const helixStructuredListRowStyles = css`
|
|
|
10539
10500
|
|
|
10540
10501
|
.switch__track:focus-visible {
|
|
10541
10502
|
outline: var(--hx-focus-ring-width, 2px) solid
|
|
10542
|
-
var(
|
|
10543
|
-
--hx-switch-focus-ring-color,
|
|
10544
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
10545
|
-
);
|
|
10503
|
+
var(--hx-switch-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
10546
10504
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
10547
10505
|
}
|
|
10548
10506
|
|
|
@@ -11321,10 +11279,7 @@ export const helixTableSectionBaseStyles = css`
|
|
|
11321
11279
|
);
|
|
11322
11280
|
--_text-input-border-color-focus: var(
|
|
11323
11281
|
--hx-text-input-border-color-focus,
|
|
11324
|
-
var(
|
|
11325
|
-
--hx-input-focus-ring-color,
|
|
11326
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
11327
|
-
)
|
|
11282
|
+
var(--hx-input-focus-ring-color, var(--hx-focus-ring-color, #0f7078))
|
|
11328
11283
|
);
|
|
11329
11284
|
--_text-input-border-color-invalid: var(
|
|
11330
11285
|
--hx-text-input-border-color-invalid,
|
|
@@ -11350,10 +11305,7 @@ export const helixTableSectionBaseStyles = css`
|
|
|
11350
11305
|
/* Focus ring */
|
|
11351
11306
|
--_text-input-focus-ring-color: var(
|
|
11352
11307
|
--hx-text-input-focus-ring-color,
|
|
11353
|
-
var(
|
|
11354
|
-
--hx-input-focus-ring-color,
|
|
11355
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
11356
|
-
)
|
|
11308
|
+
var(--hx-input-focus-ring-color, var(--hx-focus-ring-color, #0f7078))
|
|
11357
11309
|
);
|
|
11358
11310
|
--_text-input-focus-ring-width: var(
|
|
11359
11311
|
--hx-text-input-focus-ring-width,
|
|
@@ -11663,10 +11615,7 @@ export const helixTableSectionBaseStyles = css`
|
|
|
11663
11615
|
);
|
|
11664
11616
|
--_textarea-border-color-focus: var(
|
|
11665
11617
|
--hx-textarea-border-color-focus,
|
|
11666
|
-
var(
|
|
11667
|
-
--hx-input-focus-ring-color,
|
|
11668
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
11669
|
-
)
|
|
11618
|
+
var(--hx-input-focus-ring-color, var(--hx-focus-ring-color, #0f7078))
|
|
11670
11619
|
);
|
|
11671
11620
|
--_textarea-border-color-invalid: var(
|
|
11672
11621
|
--hx-textarea-border-color-invalid,
|
|
@@ -12490,10 +12439,7 @@ export const helixToastStackStyles = css`
|
|
|
12490
12439
|
|
|
12491
12440
|
.button:focus-visible {
|
|
12492
12441
|
outline: var(--hx-focus-ring-width, 2px) solid
|
|
12493
|
-
var(
|
|
12494
|
-
--hx-toggle-button-focus-ring-color,
|
|
12495
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
12496
|
-
);
|
|
12442
|
+
var(--hx-toggle-button-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
12497
12443
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
12498
12444
|
}
|
|
12499
12445
|
|
|
@@ -13017,8 +12963,7 @@ export const helixToastStackStyles = css`
|
|
|
13017
12963
|
}
|
|
13018
12964
|
|
|
13019
12965
|
.tree:focus-visible {
|
|
13020
|
-
outline: var(--hx-focus-ring-width, 2px) solid
|
|
13021
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078));
|
|
12966
|
+
outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #0f7078);
|
|
13022
12967
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
13023
12968
|
border-radius: var(--hx-border-radius-sm, 0.25rem);
|
|
13024
12969
|
}
|
package/dist/css/helix-core.css
CHANGED
|
@@ -578,15 +578,16 @@
|
|
|
578
578
|
|
|
579
579
|
/* ─── Inverted Mode ─── */
|
|
580
580
|
|
|
581
|
-
/* Inline-fallback contract for
|
|
581
|
+
/* Inline-fallback contract for the on-dark-* tokens in this section:
|
|
582
582
|
the literal rgba(255, 255, 255, 0.X) arms are a LIGHT-MODE-only last
|
|
583
583
|
resort (cold-start, CSS-not-loaded). At runtime, hx-theme injects
|
|
584
|
-
dark
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
584
|
+
the dark.* override (overlay-black-* for the strong border and the
|
|
585
|
+
surface.on-dark-overlay-* fills) so dark-mode inverted buttons stay
|
|
586
|
+
visible on the now-light surface.inverse (#EBEEE9). The inline white
|
|
587
|
+
overlays would render invisible (≈1.1:1) on a light surface, but
|
|
588
|
+
they never paint when the theme is mounted. If a future change
|
|
589
|
+
moves these into a context where hx-theme is not guaranteed,
|
|
590
|
+
replace with mode-aware tokens. */
|
|
590
591
|
|
|
591
592
|
/* Override text color and filter-based hover/active for all variants */
|
|
592
593
|
:host([inverted]) .button {
|
|
@@ -604,8 +605,12 @@
|
|
|
604
605
|
|
|
605
606
|
:host([inverted]) .button:focus-visible {
|
|
606
607
|
/* WCAG 1.4.11: focus indicator needs ≥3:1 against adjacent colors.
|
|
607
|
-
border-on-dark-
|
|
608
|
-
|
|
608
|
+
border-on-dark-strong (overlay-white-70) ≈ 5:1 on neutral-900 — passes.
|
|
609
|
+
The lower-alpha siblings used to live in border.* but were sub-3:1
|
|
610
|
+
against any plausible surface and could not honour a border contract;
|
|
611
|
+
they're now surface.on-dark-overlay-{default,subtle} (translucent
|
|
612
|
+
fills, not borders) and used elsewhere in this file. See
|
|
613
|
+
tokens.json color.surface.on-dark-overlay-* for canonical ratios. */
|
|
609
614
|
outline-color: var(
|
|
610
615
|
--hx-button-inverted-focus-ring-color,
|
|
611
616
|
var(--hx-color-border-on-dark-strong, rgba(255, 255, 255, 0.7))
|
|
@@ -616,8 +621,16 @@
|
|
|
616
621
|
so dark mode can flip the fill to primary-600. surface.inverse becomes light
|
|
617
622
|
(#EBEEE9) in dark mode; primary-500 on #EBEEE9 = 2.94:1 (sub-3:1 UI floor
|
|
618
623
|
fail for the inverted-button boundary). primary-600 on #EBEEE9 = 4.97:1
|
|
619
|
-
(AA pass). Light mode tracks action.primary.bg
|
|
620
|
-
dark surface.inverse).
|
|
624
|
+
(AA pass). Light mode tracks action.primary.bg-inverted-rest's base value
|
|
625
|
+
(primary-500, 5.20:1 on dark surface.inverse).
|
|
626
|
+
|
|
627
|
+
Override path note (codex round-11): this binds --hx-button-bg directly,
|
|
628
|
+
matching the cascade convention every other .button--{variant} rule uses
|
|
629
|
+
(light primary at line 89, danger at 120, secondary, tertiary, ghost). The
|
|
630
|
+
consumer override path for inverted-primary rest is
|
|
631
|
+
--hx-color-action-primary-bg-inverted-rest, NOT --hx-button-bg — the same
|
|
632
|
+
pattern as light primary (consumers override --hx-color-action-primary-bg).
|
|
633
|
+
Pinned by dark-mode-resolution.test.ts:185-197 across both modes. */
|
|
621
634
|
:host([inverted]) .button--primary {
|
|
622
635
|
--hx-button-bg: var(--hx-color-action-primary-bg-inverted-rest, #429797);
|
|
623
636
|
}
|
|
@@ -670,19 +683,19 @@
|
|
|
670
683
|
}
|
|
671
684
|
|
|
672
685
|
:host([inverted]) .button--secondary:hover {
|
|
673
|
-
--hx-button-bg: var(--hx-color-
|
|
686
|
+
--hx-button-bg: var(--hx-color-surface-on-dark-overlay-default, rgba(255, 255, 255, 0.3));
|
|
674
687
|
}
|
|
675
688
|
|
|
676
|
-
/* Tertiary inverted — resting at subtle (10%) lifts to default
|
|
677
|
-
so the runtime hover delta is visually distinct, not
|
|
678
|
-
single token. */
|
|
689
|
+
/* Tertiary inverted — resting at the subtle overlay (10%) lifts to the default
|
|
690
|
+
overlay (30%) on hover so the runtime hover delta is visually distinct, not
|
|
691
|
+
collapsed onto a single token. */
|
|
679
692
|
:host([inverted]) .button--tertiary {
|
|
680
|
-
--hx-button-bg: var(--hx-color-
|
|
693
|
+
--hx-button-bg: var(--hx-color-surface-on-dark-overlay-subtle, rgba(255, 255, 255, 0.1));
|
|
681
694
|
--hx-button-border-color: transparent;
|
|
682
695
|
}
|
|
683
696
|
|
|
684
697
|
:host([inverted]) .button--tertiary:hover {
|
|
685
|
-
--hx-button-bg: var(--hx-color-
|
|
698
|
+
--hx-button-bg: var(--hx-color-surface-on-dark-overlay-default, rgba(255, 255, 255, 0.3));
|
|
686
699
|
}
|
|
687
700
|
|
|
688
701
|
/* Ghost inverted — transparent base, translucent hover bg */
|
|
@@ -694,7 +707,7 @@
|
|
|
694
707
|
:host([inverted]) .button--ghost:hover {
|
|
695
708
|
--hx-button-bg: var(
|
|
696
709
|
--hx-button-inverted-ghost-hover-bg,
|
|
697
|
-
var(--hx-color-
|
|
710
|
+
var(--hx-color-surface-on-dark-overlay-default, rgba(255, 255, 255, 0.3))
|
|
698
711
|
);
|
|
699
712
|
}
|
|
700
713
|
|
|
@@ -704,7 +717,7 @@
|
|
|
704
717
|
}
|
|
705
718
|
|
|
706
719
|
:host([inverted]) .button--outline:hover {
|
|
707
|
-
--hx-button-bg: var(--hx-color-
|
|
720
|
+
--hx-button-bg: var(--hx-color-surface-on-dark-overlay-default, rgba(255, 255, 255, 0.3));
|
|
708
721
|
}
|
|
709
722
|
|
|
710
723
|
/* ─── Prefix / Suffix / Label ─── */
|
|
@@ -1519,10 +1532,7 @@
|
|
|
1519
1532
|
|
|
1520
1533
|
.link:focus-visible {
|
|
1521
1534
|
outline: var(--hx-focus-ring-width, 2px) solid
|
|
1522
|
-
var(
|
|
1523
|
-
--hx-link-focus-ring-color,
|
|
1524
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078))
|
|
1525
|
-
);
|
|
1535
|
+
var(--hx-link-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
1526
1536
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
1527
1537
|
border-radius: var(--hx-border-radius-sm, 0.25rem);
|
|
1528
1538
|
}
|
package/dist/css/helix-data.css
CHANGED
|
@@ -106,8 +106,7 @@
|
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
.code-snippet__copy-button:focus-visible {
|
|
109
|
-
outline: var(--hx-focus-ring-width, 2px) solid
|
|
110
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078));
|
|
109
|
+
outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #0f7078);
|
|
111
110
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
112
111
|
}
|
|
113
112
|
|
|
@@ -148,8 +147,7 @@
|
|
|
148
147
|
}
|
|
149
148
|
|
|
150
149
|
.code-snippet__expand-button:focus-visible {
|
|
151
|
-
outline: var(--hx-focus-ring-width, 2px) solid
|
|
152
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-600, #0f7078));
|
|
150
|
+
outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #0f7078);
|
|
153
151
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
154
152
|
}
|
|
155
153
|
|
|
@@ -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
|
}
|