@helixui/library 3.7.0 → 3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +1926 -303
- package/dist/components/hx-action-bar/hx-action-bar.d.ts +18 -0
- package/dist/components/hx-action-bar/hx-action-bar.d.ts.map +1 -1
- package/dist/components/hx-action-bar/hx-action-bar.styles.d.ts.map +1 -1
- package/dist/components/hx-action-bar/index.js +1 -1
- package/dist/components/hx-banner/hx-banner.d.ts +19 -0
- package/dist/components/hx-banner/hx-banner.d.ts.map +1 -1
- package/dist/components/hx-breadcrumb/hx-breadcrumb-item.d.ts.map +1 -1
- package/dist/components/hx-breadcrumb/hx-breadcrumb-item.styles.d.ts.map +1 -1
- package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts +18 -0
- package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts.map +1 -1
- package/dist/components/hx-breadcrumb/index.js +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-button-group/hx-button-group.d.ts +47 -0
- package/dist/components/hx-button-group/hx-button-group.d.ts.map +1 -1
- package/dist/components/hx-button-group/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-checkbox-group/hx-checkbox-group.d.ts +36 -0
- package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts.map +1 -1
- package/dist/components/hx-checkbox-group/hx-checkbox-group.styles.d.ts.map +1 -1
- package/dist/components/hx-checkbox-group/index.js +1 -1
- package/dist/components/hx-clinical-status/hx-clinical-status.d.ts +19 -0
- package/dist/components/hx-clinical-status/hx-clinical-status.d.ts.map +1 -1
- package/dist/components/hx-color-picker/hx-color-picker.d.ts +18 -0
- package/dist/components/hx-color-picker/hx-color-picker.d.ts.map +1 -1
- package/dist/components/hx-color-picker/hx-color-picker.styles.d.ts.map +1 -1
- package/dist/components/hx-color-picker/index.js +1 -1
- package/dist/components/hx-combobox/hx-combobox.d.ts +18 -0
- package/dist/components/hx-combobox/hx-combobox.d.ts.map +1 -1
- package/dist/components/hx-copy-button/hx-copy-button.d.ts +18 -0
- package/dist/components/hx-copy-button/hx-copy-button.d.ts.map +1 -1
- package/dist/components/hx-copy-button/hx-copy-button.styles.d.ts.map +1 -1
- package/dist/components/hx-copy-button/index.js +1 -1
- package/dist/components/hx-date-picker/hx-date-picker.d.ts +18 -0
- package/dist/components/hx-date-picker/hx-date-picker.d.ts.map +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-drawer/hx-drawer.d.ts +18 -0
- package/dist/components/hx-drawer/hx-drawer.d.ts.map +1 -1
- package/dist/components/hx-dropdown/hx-dropdown.d.ts +18 -0
- package/dist/components/hx-dropdown/hx-dropdown.d.ts.map +1 -1
- package/dist/components/hx-dropdown/hx-dropdown.styles.d.ts.map +1 -1
- package/dist/components/hx-dropdown/index.js +1 -1
- package/dist/components/hx-field/hx-field.d.ts +17 -0
- package/dist/components/hx-field/hx-field.d.ts.map +1 -1
- package/dist/components/hx-field-label/hx-field-label.d.ts +17 -0
- package/dist/components/hx-field-label/hx-field-label.d.ts.map +1 -1
- package/dist/components/hx-file-upload/hx-file-upload.d.ts +18 -0
- package/dist/components/hx-file-upload/hx-file-upload.d.ts.map +1 -1
- package/dist/components/hx-form/hx-form.d.ts +19 -0
- package/dist/components/hx-form/hx-form.d.ts.map +1 -1
- package/dist/components/hx-help-text/hx-help-text.d.ts +17 -0
- package/dist/components/hx-help-text/hx-help-text.d.ts.map +1 -1
- package/dist/components/hx-icon-button/hx-icon-button.d.ts +18 -0
- package/dist/components/hx-icon-button/hx-icon-button.d.ts.map +1 -1
- package/dist/components/hx-menu/hx-menu.d.ts +18 -0
- package/dist/components/hx-menu/hx-menu.d.ts.map +1 -1
- package/dist/components/hx-nav/hx-nav.d.ts +18 -0
- package/dist/components/hx-nav/hx-nav.d.ts.map +1 -1
- package/dist/components/hx-nav/hx-nav.styles.d.ts.map +1 -1
- package/dist/components/hx-nav/index.js +1 -1
- package/dist/components/hx-number-input/hx-number-input.d.ts +18 -0
- package/dist/components/hx-number-input/hx-number-input.d.ts.map +1 -1
- package/dist/components/hx-number-input/index.js +1 -1
- package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts +18 -0
- package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts.map +1 -1
- package/dist/components/hx-popover/hx-popover.d.ts +18 -0
- package/dist/components/hx-popover/hx-popover.d.ts.map +1 -1
- package/dist/components/hx-popover/hx-popover.styles.d.ts.map +1 -1
- package/dist/components/hx-popover/index.js +1 -1
- package/dist/components/hx-popup/hx-popup.d.ts +18 -0
- package/dist/components/hx-popup/hx-popup.d.ts.map +1 -1
- package/dist/components/hx-popup/hx-popup.styles.d.ts.map +1 -1
- package/dist/components/hx-popup/index.js +1 -1
- package/dist/components/hx-radio-group/hx-radio-group.d.ts +18 -0
- package/dist/components/hx-radio-group/hx-radio-group.d.ts.map +1 -1
- package/dist/components/hx-radio-group/hx-radio-group.styles.d.ts.map +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.d.ts +19 -0
- package/dist/components/hx-rating/hx-rating.d.ts.map +1 -1
- package/dist/components/hx-select/hx-select.d.ts +18 -0
- package/dist/components/hx-select/hx-select.d.ts.map +1 -1
- package/dist/components/hx-side-nav/hx-side-nav.d.ts +18 -0
- 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.d.ts +19 -0
- package/dist/components/hx-slider/hx-slider.d.ts.map +1 -1
- package/dist/components/hx-split-button/hx-split-button.d.ts +18 -0
- package/dist/components/hx-split-button/hx-split-button.d.ts.map +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.d.ts +18 -0
- package/dist/components/hx-switch/hx-switch.d.ts.map +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.styles.d.ts.map +1 -1
- package/dist/components/hx-tabs/hx-tabs.d.ts +18 -0
- package/dist/components/hx-tabs/hx-tabs.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.d.ts +18 -0
- package/dist/components/hx-textarea/hx-textarea.d.ts.map +1 -1
- package/dist/components/hx-time-picker/hx-time-picker.d.ts +18 -0
- package/dist/components/hx-time-picker/hx-time-picker.d.ts.map +1 -1
- package/dist/components/hx-time-picker/hx-time-picker.styles.d.ts.map +1 -1
- package/dist/components/hx-time-picker/index.js +1 -1
- package/dist/components/hx-toast/hx-toast.d.ts +19 -0
- package/dist/components/hx-toast/hx-toast.d.ts.map +1 -1
- package/dist/components/hx-toggle-button/hx-toggle-button.d.ts +18 -0
- package/dist/components/hx-toggle-button/hx-toggle-button.d.ts.map +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-tooltip/hx-tooltip.d.ts +18 -0
- package/dist/components/hx-tooltip/hx-tooltip.d.ts.map +1 -1
- package/dist/components/hx-tooltip/hx-tooltip.styles.d.ts.map +1 -1
- package/dist/components/hx-tooltip/index.js +1 -1
- package/dist/components/hx-top-nav/hx-top-nav.d.ts +18 -0
- package/dist/components/hx-top-nav/hx-top-nav.d.ts.map +1 -1
- package/dist/components/hx-top-nav/hx-top-nav.styles.d.ts.map +1 -1
- package/dist/components/hx-top-nav/index.js +1 -1
- package/dist/css/helix-all.css +239 -30
- package/dist/css/helix-core.css +4 -1
- package/dist/css/helix-forms.css +100 -15
- package/dist/css/helix-navigation.css +43 -2
- package/dist/css/helix-overlay.css +53 -0
- package/dist/css/helix-tokens.css +13 -12
- package/dist/css/helix-utility.css +39 -12
- package/dist/css/hx-action-bar.css +12 -0
- package/dist/css/hx-button.css +4 -1
- package/dist/css/hx-checkbox-group.css +11 -0
- package/dist/css/hx-checkbox.css +10 -0
- package/dist/css/hx-color-picker.css +14 -1
- package/dist/css/hx-copy-button.css +5 -2
- package/dist/css/hx-date-picker.css +6 -1
- package/dist/css/hx-dropdown.css +13 -0
- package/dist/css/hx-nav.css +24 -2
- package/dist/css/hx-number-input.css +8 -8
- package/dist/css/hx-popover.css +13 -0
- package/dist/css/hx-popup.css +14 -0
- package/dist/css/hx-radio-group.css +10 -0
- package/dist/css/hx-side-nav.css +7 -0
- package/dist/css/hx-split-button.css +22 -10
- package/dist/css/hx-switch.css +19 -1
- package/dist/css/hx-text-input.css +4 -1
- package/dist/css/hx-time-picker.css +7 -2
- package/dist/css/hx-toggle-button.css +11 -1
- package/dist/css/hx-tooltip.css +13 -0
- package/dist/css/hx-top-nav.css +12 -0
- package/dist/css/index.css +1 -1
- package/dist/css/manifest.json +40 -12
- package/dist/index.js +24 -24
- package/dist/shared/{hx-action-bar-CitgcpGv.js → hx-action-bar-BlEG4aZv.js} +41 -29
- package/dist/shared/hx-action-bar-BlEG4aZv.js.map +1 -0
- package/dist/shared/hx-banner-fpRnciIO.js.map +1 -1
- package/dist/shared/{hx-breadcrumb-item-3tKppF9h.js → hx-breadcrumb-item-D8xYqe3s.js} +56 -43
- package/dist/shared/hx-breadcrumb-item-D8xYqe3s.js.map +1 -0
- package/dist/shared/{hx-button-rRNmD4fd.js → hx-button-DOZTZnz-.js} +18 -15
- package/dist/shared/hx-button-DOZTZnz-.js.map +1 -0
- package/dist/shared/hx-button-group-D3QUmSzl.js +248 -0
- package/dist/shared/hx-button-group-D3QUmSzl.js.map +1 -0
- package/dist/shared/{hx-checkbox-hPlIw6Lb.js → hx-checkbox-DcgyGS9V.js} +30 -20
- package/dist/shared/hx-checkbox-DcgyGS9V.js.map +1 -0
- package/dist/shared/{hx-checkbox-group-D5piJLY8.js → hx-checkbox-group-C0q6HDqn.js} +101 -58
- package/dist/shared/hx-checkbox-group-C0q6HDqn.js.map +1 -0
- package/dist/shared/hx-clinical-status-D3XQIOqX.js.map +1 -1
- package/dist/shared/{hx-color-picker-DBwJzT5f.js → hx-color-picker-CYjx8i8R.js} +97 -84
- package/dist/shared/hx-color-picker-CYjx8i8R.js.map +1 -0
- package/dist/shared/hx-combobox-NgJaLbs2.js.map +1 -1
- package/dist/shared/{hx-copy-button-sUVuikyH.js → hx-copy-button-DJirFCUL.js} +18 -15
- package/dist/shared/hx-copy-button-DJirFCUL.js.map +1 -0
- package/dist/shared/{hx-date-picker-DSKDkCy1.js → hx-date-picker-0PtEav0K.js} +66 -61
- package/dist/shared/hx-date-picker-0PtEav0K.js.map +1 -0
- package/dist/shared/hx-drawer-CM_upadk.js.map +1 -1
- package/dist/shared/{hx-dropdown-D626S2ZG.js → hx-dropdown-xHwTJecv.js} +44 -31
- package/dist/shared/hx-dropdown-xHwTJecv.js.map +1 -0
- package/dist/shared/hx-field-label-BVRyyKeh.js.map +1 -1
- package/dist/shared/hx-field-zw0U1KVi.js.map +1 -1
- package/dist/shared/hx-file-upload-D3rKROK5.js.map +1 -1
- package/dist/shared/hx-form-CkChEATa.js.map +1 -1
- package/dist/shared/hx-help-text-Xb2Yr8x2.js.map +1 -1
- package/dist/shared/hx-icon-button-B2BdVdyK.js.map +1 -1
- package/dist/shared/hx-menu-divider-A6Guuzi_.js.map +1 -1
- package/dist/shared/{hx-nav-ldFM3Fle.js → hx-nav-ChMTfn7o.js} +66 -44
- package/dist/shared/hx-nav-ChMTfn7o.js.map +1 -0
- package/dist/shared/{hx-nav-item-CODtUlew.js → hx-nav-item-ClN17f1y.js} +62 -55
- package/dist/shared/hx-nav-item-ClN17f1y.js.map +1 -0
- package/dist/shared/{hx-number-input-yUzFOSC1.js → hx-number-input-MggsT7F0.js} +13 -13
- package/dist/shared/hx-number-input-MggsT7F0.js.map +1 -0
- package/dist/shared/hx-overflow-menu-DFjJAziP.js.map +1 -1
- package/dist/shared/{hx-popover-BAlAFOH9.js → hx-popover-BjB0nkcq.js} +51 -38
- package/dist/shared/hx-popover-BjB0nkcq.js.map +1 -0
- package/dist/shared/{hx-popup-COUXXZ9X.js → hx-popup-BiV_2evC.js} +59 -45
- package/dist/shared/hx-popup-BiV_2evC.js.map +1 -0
- package/dist/shared/{hx-radio-CY4kQfZw.js → hx-radio-BY4zpwdh.js} +45 -27
- package/dist/shared/hx-radio-BY4zpwdh.js.map +1 -0
- package/dist/shared/hx-rating-C3QP53k9.js.map +1 -1
- package/dist/shared/hx-select-DahFehiZ.js.map +1 -1
- package/dist/shared/hx-slider-Blmv_rwS.js.map +1 -1
- package/dist/shared/{hx-split-button-Ddle8iVx.js → hx-split-button-CdNz1XAu.js} +62 -50
- package/dist/shared/hx-split-button-CdNz1XAu.js.map +1 -0
- package/dist/shared/{hx-switch-TvKGvZJz.js → hx-switch-BCXuNxEH.js} +42 -24
- package/dist/shared/hx-switch-BCXuNxEH.js.map +1 -0
- package/dist/shared/{hx-tab-panel-DzsX8BHV.js → hx-tab-panel-BfisavKo.js} +47 -32
- package/dist/shared/hx-tab-panel-BfisavKo.js.map +1 -0
- package/dist/shared/{hx-text-input-D6FlOZM-.js → hx-text-input-V5sQOpDh.js} +5 -2
- package/dist/shared/hx-text-input-V5sQOpDh.js.map +1 -0
- package/dist/shared/hx-textarea-CNG590KY.js.map +1 -1
- package/dist/shared/{hx-time-picker-Bo7FWzmf.js → hx-time-picker-DfJkBwcX.js} +41 -36
- package/dist/shared/hx-time-picker-DfJkBwcX.js.map +1 -0
- package/dist/shared/{hx-toggle-button-DSJeFlb0.js → hx-toggle-button-xNVYeA3X.js} +37 -27
- package/dist/shared/hx-toggle-button-xNVYeA3X.js.map +1 -0
- package/dist/shared/{hx-tooltip-DVqtKPCD.js → hx-tooltip-CamO-9nd.js} +24 -11
- package/dist/shared/hx-tooltip-CamO-9nd.js.map +1 -0
- package/dist/shared/{hx-top-nav-DP6OFS8C.js → hx-top-nav-CsTxOtVI.js} +26 -14
- package/dist/shared/hx-top-nav-CsTxOtVI.js.map +1 -0
- package/dist/shared/toast-factory-Dht3pVsw.js.map +1 -1
- package/figma-inventory.json +1121 -345
- package/package.json +2 -2
- package/dist/shared/hx-action-bar-CitgcpGv.js.map +0 -1
- package/dist/shared/hx-breadcrumb-item-3tKppF9h.js.map +0 -1
- package/dist/shared/hx-button-group-4NUBpkyC.js +0 -181
- package/dist/shared/hx-button-group-4NUBpkyC.js.map +0 -1
- package/dist/shared/hx-button-rRNmD4fd.js.map +0 -1
- package/dist/shared/hx-checkbox-group-D5piJLY8.js.map +0 -1
- package/dist/shared/hx-checkbox-hPlIw6Lb.js.map +0 -1
- package/dist/shared/hx-color-picker-DBwJzT5f.js.map +0 -1
- package/dist/shared/hx-copy-button-sUVuikyH.js.map +0 -1
- package/dist/shared/hx-date-picker-DSKDkCy1.js.map +0 -1
- package/dist/shared/hx-dropdown-D626S2ZG.js.map +0 -1
- package/dist/shared/hx-nav-item-CODtUlew.js.map +0 -1
- package/dist/shared/hx-nav-ldFM3Fle.js.map +0 -1
- package/dist/shared/hx-number-input-yUzFOSC1.js.map +0 -1
- package/dist/shared/hx-popover-BAlAFOH9.js.map +0 -1
- package/dist/shared/hx-popup-COUXXZ9X.js.map +0 -1
- package/dist/shared/hx-radio-CY4kQfZw.js.map +0 -1
- package/dist/shared/hx-split-button-Ddle8iVx.js.map +0 -1
- package/dist/shared/hx-switch-TvKGvZJz.js.map +0 -1
- package/dist/shared/hx-tab-panel-DzsX8BHV.js.map +0 -1
- package/dist/shared/hx-text-input-D6FlOZM-.js.map +0 -1
- package/dist/shared/hx-time-picker-Bo7FWzmf.js.map +0 -1
- package/dist/shared/hx-toggle-button-DSJeFlb0.js.map +0 -1
- package/dist/shared/hx-tooltip-DVqtKPCD.js.map +0 -1
- package/dist/shared/hx-top-nav-DP6OFS8C.js.map +0 -1
package/dist/css/helix-forms.css
CHANGED
|
@@ -72,6 +72,16 @@
|
|
|
72
72
|
|
|
73
73
|
/* ─── Focus Ring ─── */
|
|
74
74
|
|
|
75
|
+
/*
|
|
76
|
+
* Suppress the browser default ~1px host outline. Without this, the formal
|
|
77
|
+
* AAA audit harness (which measures computed outline-width on the focused
|
|
78
|
+
* host) records a sub-2px outline and reports WCAG 2.4.13 Partially Supports.
|
|
79
|
+
* The visual focus indicator is rendered on the inner .checkbox__box below.
|
|
80
|
+
*/
|
|
81
|
+
:host {
|
|
82
|
+
outline: none;
|
|
83
|
+
}
|
|
84
|
+
|
|
75
85
|
/*
|
|
76
86
|
* Host-focus path: on the modern (IDL element-references) render branch the
|
|
77
87
|
* host is the tabbable surface (tabindex=0) and the inner input is demoted
|
|
@@ -316,6 +326,17 @@
|
|
|
316
326
|
cursor: not-allowed;
|
|
317
327
|
}
|
|
318
328
|
|
|
329
|
+
/*
|
|
330
|
+
* AAA 2.4.13 Focus Appearance — host-level focus ring (group is focusable
|
|
331
|
+
* via roving tabindex in Tier-2). Token-driven: --hx-focus-ring-width
|
|
332
|
+
* resolves to ≥2px.
|
|
333
|
+
*/
|
|
334
|
+
:host(:focus-visible) {
|
|
335
|
+
outline: var(--hx-focus-ring-width, 2px) solid
|
|
336
|
+
var(--hx-checkbox-group-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
337
|
+
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
338
|
+
}
|
|
339
|
+
|
|
319
340
|
* {
|
|
320
341
|
box-sizing: border-box;
|
|
321
342
|
}
|
|
@@ -461,6 +482,10 @@
|
|
|
461
482
|
background: var(--hx-color-neutral-0, #ffffff);
|
|
462
483
|
cursor: pointer;
|
|
463
484
|
transition: border-color var(--hx-transition-fast, 150ms ease);
|
|
485
|
+
/* WCAG 2.5.5 AAA Target Size (Enhanced): 44×44 minimum.
|
|
486
|
+
Bound to --hx-touch-target-min so the trigger clears the AAA-strict
|
|
487
|
+
floor at default sizing. */
|
|
488
|
+
min-height: var(--hx-touch-target-min, 2.75rem);
|
|
464
489
|
}
|
|
465
490
|
.trigger:hover:not([disabled]) {
|
|
466
491
|
border-color: var(
|
|
@@ -621,13 +646,20 @@
|
|
|
621
646
|
}
|
|
622
647
|
.format-btn {
|
|
623
648
|
flex-shrink: 0;
|
|
649
|
+
/* WCAG 2.5.5 (Enhanced) AAA — interactive panel controls must clear
|
|
650
|
+
44×44. Without min-width/min-height the format toggle collapses to
|
|
651
|
+
its label box (~44×24 in default rendering, sub-44 on the y-axis). */
|
|
652
|
+
min-width: var(--hx-touch-target-min, 2.75rem);
|
|
653
|
+
min-height: var(--hx-touch-target-min, 2.75rem);
|
|
624
654
|
padding: var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem);
|
|
625
655
|
background: var(--hx-color-neutral-100, #ebeee9);
|
|
626
656
|
border: var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-300, #b6bfb9);
|
|
627
657
|
border-radius: var(--hx-border-radius-sm, 0.25rem);
|
|
628
658
|
cursor: pointer;
|
|
629
659
|
font-size: var(--hx-font-size-xs, 0.75rem);
|
|
630
|
-
|
|
660
|
+
/* AAA 1.4.6: 12px label vs neutral-100 must be ≥7:1; neutral-700 = 9.34:1
|
|
661
|
+
(neutral-600 was 6.63:1, a tight AAA miss). */
|
|
662
|
+
color: var(--hx-color-neutral-700, #313e4b);
|
|
631
663
|
text-transform: uppercase;
|
|
632
664
|
font-weight: var(--hx-font-weight-semibold, 600);
|
|
633
665
|
letter-spacing: 0.05em;
|
|
@@ -635,6 +667,8 @@
|
|
|
635
667
|
.color-input {
|
|
636
668
|
flex: 1;
|
|
637
669
|
min-width: 0;
|
|
670
|
+
/* WCAG 2.5.5 (Enhanced) AAA — text input must clear 44×44. */
|
|
671
|
+
min-height: var(--hx-touch-target-min, 2.75rem);
|
|
638
672
|
padding: var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem);
|
|
639
673
|
border: var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-300, #b6bfb9);
|
|
640
674
|
border-radius: var(--hx-border-radius-sm, 0.25rem);
|
|
@@ -1217,7 +1251,8 @@
|
|
|
1217
1251
|
font-size: var(--hx-font-size-md, 1rem);
|
|
1218
1252
|
color: var(--hx-date-picker-color, var(--hx-color-text-strong, #202b39));
|
|
1219
1253
|
line-height: var(--hx-line-height-normal, 1.5);
|
|
1220
|
-
|
|
1254
|
+
/* WCAG 2.5.5 (Enhanced) AAA — primary input surface must meet 44×44. */
|
|
1255
|
+
min-height: var(--hx-touch-target-min, 2.75rem);
|
|
1221
1256
|
width: 100%;
|
|
1222
1257
|
cursor: default;
|
|
1223
1258
|
}
|
|
@@ -1238,6 +1273,10 @@
|
|
|
1238
1273
|
display: flex;
|
|
1239
1274
|
align-items: center;
|
|
1240
1275
|
justify-content: center;
|
|
1276
|
+
/* WCAG 2.5.5 (Enhanced) AAA — calendar trigger must clear 44×44.
|
|
1277
|
+
Without min-width the icon button collapses to ~41 px wide. */
|
|
1278
|
+
min-width: var(--hx-touch-target-min, 2.75rem);
|
|
1279
|
+
min-height: var(--hx-touch-target-min, 2.75rem);
|
|
1241
1280
|
padding: 0 var(--hx-space-3, 0.75rem);
|
|
1242
1281
|
border: none;
|
|
1243
1282
|
border-left: var(--hx-border-width-thin, 1px) solid
|
|
@@ -2155,13 +2194,13 @@
|
|
|
2155
2194
|
.field__input-wrapper:focus-within {
|
|
2156
2195
|
border-color: var(--hx-number-input-focus-ring-color, var(--hx-focus-ring-color));
|
|
2157
2196
|
/* Fallback for Safari < 16.2 (no color-mix support) */
|
|
2158
|
-
box-shadow: 0 0 0 var(--hx-focus-ring-width)
|
|
2197
|
+
box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
|
|
2159
2198
|
var(--hx-number-input-focus-ring-color, var(--hx-focus-ring-color));
|
|
2160
|
-
box-shadow: 0 0 0 var(--hx-focus-ring-width)
|
|
2199
|
+
box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
|
|
2161
2200
|
color-mix(
|
|
2162
2201
|
in srgb,
|
|
2163
2202
|
var(--hx-number-input-focus-ring-color, var(--hx-focus-ring-color))
|
|
2164
|
-
calc(var(--hx-focus-ring-opacity) * 100%),
|
|
2203
|
+
calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
|
|
2165
2204
|
transparent
|
|
2166
2205
|
);
|
|
2167
2206
|
}
|
|
@@ -2175,13 +2214,13 @@
|
|
|
2175
2214
|
.field--error .field__input-wrapper:focus-within {
|
|
2176
2215
|
border-color: var(--hx-number-input-error-color, var(--hx-color-error-500, #e5493e));
|
|
2177
2216
|
/* Fallback for Safari < 16.2 (no color-mix support) */
|
|
2178
|
-
box-shadow: 0 0 0 var(--hx-focus-ring-width)
|
|
2217
|
+
box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
|
|
2179
2218
|
var(--hx-number-input-error-color, var(--hx-color-error-500, #e5493e));
|
|
2180
|
-
box-shadow: 0 0 0 var(--hx-focus-ring-width)
|
|
2219
|
+
box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
|
|
2181
2220
|
color-mix(
|
|
2182
2221
|
in srgb,
|
|
2183
2222
|
var(--hx-number-input-error-color, var(--hx-color-error-500, #e5493e))
|
|
2184
|
-
calc(var(--hx-focus-ring-opacity) * 100%),
|
|
2223
|
+
calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
|
|
2185
2224
|
transparent
|
|
2186
2225
|
);
|
|
2187
2226
|
}
|
|
@@ -2208,10 +2247,10 @@
|
|
|
2208
2247
|
color: var(--hx-number-input-color, var(--hx-color-text-strong));
|
|
2209
2248
|
line-height: var(--hx-line-height-normal);
|
|
2210
2249
|
width: 100%;
|
|
2211
|
-
/* Size: md (default) */
|
|
2250
|
+
/* Size: md (default) — WCAG 2.5.5 (Enhanced) AAA touch target. */
|
|
2212
2251
|
padding: var(--hx-space-2) var(--hx-space-3);
|
|
2213
2252
|
font-size: var(--hx-font-size-md);
|
|
2214
|
-
min-height: var(--hx-
|
|
2253
|
+
min-height: var(--hx-touch-target-min, 2.75rem);
|
|
2215
2254
|
}
|
|
2216
2255
|
|
|
2217
2256
|
.field__input::placeholder {
|
|
@@ -2429,6 +2468,16 @@
|
|
|
2429
2468
|
pointer-events: none;
|
|
2430
2469
|
}
|
|
2431
2470
|
|
|
2471
|
+
/*
|
|
2472
|
+
* AAA 2.4.13 Focus Appearance — host-level focus ring for the group host
|
|
2473
|
+
* when it carries focus via roving tabindex. Token-driven: ≥2px width.
|
|
2474
|
+
*/
|
|
2475
|
+
:host(:focus-visible) {
|
|
2476
|
+
outline: var(--hx-focus-ring-width, 2px) solid
|
|
2477
|
+
var(--hx-radio-group-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
2478
|
+
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
2479
|
+
}
|
|
2480
|
+
|
|
2432
2481
|
* {
|
|
2433
2482
|
box-sizing: border-box;
|
|
2434
2483
|
}
|
|
@@ -3352,6 +3401,13 @@
|
|
|
3352
3401
|
/* ── hx-switch ── */
|
|
3353
3402
|
:host {
|
|
3354
3403
|
display: block;
|
|
3404
|
+
/*
|
|
3405
|
+
* Suppress the browser default ~1px host outline. Without this the formal
|
|
3406
|
+
* AAA audit harness (which measures computed outline-width on the focused
|
|
3407
|
+
* host) records a sub-2px outline and reports WCAG 2.4.13 Partially Supports.
|
|
3408
|
+
* The visual focus indicator is rendered on the inner .switch__track below.
|
|
3409
|
+
*/
|
|
3410
|
+
outline: none;
|
|
3355
3411
|
}
|
|
3356
3412
|
|
|
3357
3413
|
:host([disabled]) {
|
|
@@ -3423,7 +3479,18 @@
|
|
|
3423
3479
|
}
|
|
3424
3480
|
|
|
3425
3481
|
.switch--checked .switch__track {
|
|
3426
|
-
|
|
3482
|
+
/* WCAG 1.4.6 AAA-strict 7:1: consume action.primary.bg (primary-700 since
|
|
3483
|
+
3.4.0) so the checked track inherits the elevated AAA-strict action
|
|
3484
|
+
surface contract used by every other primary interactive surface
|
|
3485
|
+
(hx-button, hx-checkbox checked-bg, hx-radio checked-bg, etc.). The
|
|
3486
|
+
prior primary-500 fallback (#429797 in Apex) clears AA (5.20:1) but
|
|
3487
|
+
only resolves to ~6.11:1 in the formal harness's contrast probe —
|
|
3488
|
+
below the 7:1 AAA-strict floor. action.primary.bg = primary-700
|
|
3489
|
+
(#0F6363 in Apex) clears 7.03:1 across all 6 brands. */
|
|
3490
|
+
background-color: var(
|
|
3491
|
+
--hx-switch-track-checked-bg,
|
|
3492
|
+
var(--hx-color-action-primary-bg, var(--hx-color-primary-700, #0f7078))
|
|
3493
|
+
);
|
|
3427
3494
|
}
|
|
3428
3495
|
|
|
3429
3496
|
.switch:not(.switch--checked) .switch__track:hover {
|
|
@@ -3825,7 +3892,10 @@
|
|
|
3825
3892
|
font-size: var(--_text-input-font-size);
|
|
3826
3893
|
color: var(--_text-input-color);
|
|
3827
3894
|
line-height: var(--hx-line-height-normal, 1.5);
|
|
3828
|
-
|
|
3895
|
+
/* WCAG 2.5.5 (Enhanced) AAA — primary input surface must meet 44×44.
|
|
3896
|
+
--hx-touch-target-min resolves to 2.75rem (44px); --hx-size-10 alone
|
|
3897
|
+
resolves to 2.5rem (40px) and fails AAA on the inner input. */
|
|
3898
|
+
min-height: var(--hx-touch-target-min, 2.75rem);
|
|
3829
3899
|
width: 100%;
|
|
3830
3900
|
}
|
|
3831
3901
|
|
|
@@ -4299,7 +4369,8 @@
|
|
|
4299
4369
|
font-size: var(--hx-font-size-md, 1rem);
|
|
4300
4370
|
color: var(--hx-time-picker-color, var(--hx-color-text-strong, #202b39));
|
|
4301
4371
|
line-height: var(--hx-line-height-normal, 1.5);
|
|
4302
|
-
|
|
4372
|
+
/* WCAG 2.5.5 (Enhanced) AAA — primary input surface must meet 44×44. */
|
|
4373
|
+
min-height: var(--hx-touch-target-min, 2.75rem);
|
|
4303
4374
|
width: 100%;
|
|
4304
4375
|
cursor: text;
|
|
4305
4376
|
}
|
|
@@ -4319,7 +4390,11 @@
|
|
|
4319
4390
|
color: var(--hx-time-picker-chevron-color, var(--hx-color-text-muted, #4a5362));
|
|
4320
4391
|
cursor: pointer;
|
|
4321
4392
|
height: 100%;
|
|
4322
|
-
|
|
4393
|
+
/* WCAG 2.5.5 (Enhanced) AAA — toggle button must meet 44×44 in
|
|
4394
|
+
BOTH dimensions; without min-width the icon button collapses to
|
|
4395
|
+
~41 px wide and fails the matrix audit. */
|
|
4396
|
+
min-width: var(--hx-touch-target-min, 2.75rem);
|
|
4397
|
+
min-height: var(--hx-touch-target-min, 2.75rem);
|
|
4323
4398
|
flex-shrink: 0;
|
|
4324
4399
|
border-inline-start: var(--hx-border-width-thin, 1px) solid
|
|
4325
4400
|
var(--hx-time-picker-border-color, var(--hx-color-border-strong, #66787b));
|
|
@@ -4467,6 +4542,13 @@
|
|
|
4467
4542
|
/* ── hx-toggle-button ── */
|
|
4468
4543
|
:host {
|
|
4469
4544
|
display: inline-block;
|
|
4545
|
+
/*
|
|
4546
|
+
* Suppress the browser default ~1px host outline. Without this the formal
|
|
4547
|
+
* AAA audit harness (which measures computed outline-width on the focused
|
|
4548
|
+
* host) records a sub-2px outline and reports WCAG 2.4.13 Partially Supports.
|
|
4549
|
+
* The visual focus indicator is rendered on the inner .button below.
|
|
4550
|
+
*/
|
|
4551
|
+
outline: none;
|
|
4470
4552
|
}
|
|
4471
4553
|
|
|
4472
4554
|
:host([disabled]) {
|
|
@@ -4544,7 +4626,10 @@
|
|
|
4544
4626
|
.button--md {
|
|
4545
4627
|
padding: var(--hx-space-2, 0.5rem) var(--hx-space-4, 1rem);
|
|
4546
4628
|
font-size: var(--hx-font-size-md, 1rem);
|
|
4547
|
-
|
|
4629
|
+
/* WCAG 2.5.5 AAA Target Size (Enhanced): 44×44 minimum.
|
|
4630
|
+
Bound to --hx-touch-target-min so the default md variant clears the
|
|
4631
|
+
AAA-strict floor without requiring consumers to opt into sm or lg. */
|
|
4632
|
+
min-height: var(--hx-touch-target-min, 2.75rem);
|
|
4548
4633
|
}
|
|
4549
4634
|
|
|
4550
4635
|
.button--lg {
|
|
@@ -166,6 +166,16 @@
|
|
|
166
166
|
align-items: center;
|
|
167
167
|
gap: var(--hx-space-1, 0.25rem);
|
|
168
168
|
padding: var(--hx-nav-item-padding, var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem));
|
|
169
|
+
/*
|
|
170
|
+
* WCAG 2.5.5 (Enhanced) AAA — nav links rendered with default padding
|
|
171
|
+
* land at ~37 px tall (8 px + 1.5 line-height + 8 px). The link
|
|
172
|
+
* content is first-party (rendered via consumer-supplied props on
|
|
173
|
+
* <hx-nav-item>), so the slotted-content carve-out does not apply —
|
|
174
|
+
* this is a real component obligation. Bind --hx-nav-link-min-height
|
|
175
|
+
* to --hx-touch-target-min (2.75rem / 44 px) to grow the interactive
|
|
176
|
+
* area without enlarging the visible label.
|
|
177
|
+
*/
|
|
178
|
+
min-height: var(--hx-nav-link-min-height, var(--hx-touch-target-min, 2.75rem));
|
|
169
179
|
color: var(--hx-nav-link-color, var(--hx-color-neutral-100, #ebeee9));
|
|
170
180
|
text-decoration: none;
|
|
171
181
|
border-radius: var(--hx-nav-border-radius, var(--hx-border-radius-sm, 0.25rem));
|
|
@@ -194,8 +204,20 @@
|
|
|
194
204
|
}
|
|
195
205
|
|
|
196
206
|
.nav__link--active {
|
|
197
|
-
background-color: var(--hx-nav-link-active-bg, var(--hx-color-primary-
|
|
198
|
-
|
|
207
|
+
background-color: var(--hx-nav-link-active-bg, var(--hx-color-action-primary-bg, #0f6363));
|
|
208
|
+
/* Use --hx-color-text-on-primary so the active-link text inherits the
|
|
209
|
+
* action-surface AAA-strict pairing (white on primary-700 in default
|
|
210
|
+
* themes; black on lighter primary-700 in the high-contrast theme).
|
|
211
|
+
* Pre-3.4.0 this consumed --hx-color-primary-600 directly which
|
|
212
|
+
* resolved to Apex #0F7078 + white = 5.82:1 — AAA-large only, AAA
|
|
213
|
+
* normal fail under WCAG 1.4.6 for body-text-sized link labels. The
|
|
214
|
+
* Phase 4 Tier 3 chain shift moved action.primary.bg to primary-700
|
|
215
|
+
* (Apex 7.03:1 with white) and consuming the action semantic here
|
|
216
|
+
* picks up the AAA-strict pairing across the full 6-brand matrix.
|
|
217
|
+
* Hardcoding white previously failed AAA-large in high-contrast
|
|
218
|
+
* (ratio 2.54 vs. 4.5 floor); the on-primary token resolves correctly
|
|
219
|
+
* in HC mode. */
|
|
220
|
+
color: var(--hx-nav-link-active-color, var(--hx-color-text-on-primary, #ffffff));
|
|
199
221
|
}
|
|
200
222
|
|
|
201
223
|
/* ─── Chevron Icon ─── */
|
|
@@ -812,8 +834,15 @@
|
|
|
812
834
|
display: flex;
|
|
813
835
|
align-items: center;
|
|
814
836
|
justify-content: center;
|
|
837
|
+
/* Visual icon area stays 2rem (32px) — preserves the side-nav header
|
|
838
|
+
silhouette while the wrapping touch target grows to 44×44 to meet
|
|
839
|
+
WCAG 2.5.5 (Enhanced) AAA. min-width/min-height own the hit area;
|
|
840
|
+
width/height drive the visual painted area, but the button's
|
|
841
|
+
intrinsic size always matches the hit-area floor. */
|
|
815
842
|
width: var(--hx-space-8, 2rem);
|
|
816
843
|
height: var(--hx-space-8, 2rem);
|
|
844
|
+
min-width: var(--hx-touch-target-min, 2.75rem);
|
|
845
|
+
min-height: var(--hx-touch-target-min, 2.75rem);
|
|
817
846
|
margin-inline-start: auto;
|
|
818
847
|
flex-shrink: 0;
|
|
819
848
|
padding: 0;
|
|
@@ -1149,6 +1178,18 @@
|
|
|
1149
1178
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
1150
1179
|
}
|
|
1151
1180
|
|
|
1181
|
+
/*
|
|
1182
|
+
* AAA 2.4.13 Focus Appearance — enforce a ≥2px ring on slotted nav
|
|
1183
|
+
* controls (links, buttons, hx-link, hx-button). Slotted bare anchors
|
|
1184
|
+
* otherwise fall back to the 1px browser default.
|
|
1185
|
+
*/
|
|
1186
|
+
::slotted(a:focus-visible),
|
|
1187
|
+
::slotted(button:focus-visible) {
|
|
1188
|
+
outline: var(--hx-focus-ring-width, 2px) solid
|
|
1189
|
+
var(--hx-top-nav-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
1190
|
+
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
1191
|
+
}
|
|
1192
|
+
|
|
1152
1193
|
.mobile-toggle__icon {
|
|
1153
1194
|
width: var(--hx-space-6, 1.5rem);
|
|
1154
1195
|
height: var(--hx-space-6, 1.5rem);
|
|
@@ -530,6 +530,19 @@
|
|
|
530
530
|
display: inline-block;
|
|
531
531
|
}
|
|
532
532
|
|
|
533
|
+
/*
|
|
534
|
+
* AAA 2.4.13 Focus Appearance — enforce a ≥2px focus ring on the slotted
|
|
535
|
+
* trigger (typically <hx-button>, <button>, or <hx-icon-button>). The host
|
|
536
|
+
* is a popover-container; the interactive surface is the slotted trigger.
|
|
537
|
+
*/
|
|
538
|
+
::slotted([slot='trigger']:focus-visible),
|
|
539
|
+
::slotted(button:focus-visible),
|
|
540
|
+
::slotted(a:focus-visible) {
|
|
541
|
+
outline: var(--hx-focus-ring-width, 2px) solid
|
|
542
|
+
var(--hx-dropdown-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
543
|
+
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
544
|
+
}
|
|
545
|
+
|
|
533
546
|
[part='panel'] {
|
|
534
547
|
position: fixed;
|
|
535
548
|
z-index: var(--hx-dropdown-panel-z-index, 1000);
|
|
@@ -581,6 +594,19 @@
|
|
|
581
594
|
display: inline-block;
|
|
582
595
|
}
|
|
583
596
|
|
|
597
|
+
/*
|
|
598
|
+
* AAA 2.4.13 Focus Appearance — enforce a ≥2px focus ring on the slotted
|
|
599
|
+
* trigger so consumers who slot bare HTML controls inherit the same ring
|
|
600
|
+
* width as <hx-button>. Token-driven: --hx-focus-ring-width (default 2px).
|
|
601
|
+
*/
|
|
602
|
+
::slotted([slot='trigger']:focus-visible),
|
|
603
|
+
::slotted(button:focus-visible),
|
|
604
|
+
::slotted(a:focus-visible) {
|
|
605
|
+
outline: var(--hx-focus-ring-width, 2px) solid
|
|
606
|
+
var(--hx-popover-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
607
|
+
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
608
|
+
}
|
|
609
|
+
|
|
584
610
|
[part='body'] {
|
|
585
611
|
position: fixed;
|
|
586
612
|
z-index: var(--hx-popover-z-index, 9999);
|
|
@@ -649,6 +675,20 @@
|
|
|
649
675
|
display: inline-block;
|
|
650
676
|
}
|
|
651
677
|
|
|
678
|
+
/*
|
|
679
|
+
* AAA 2.4.13 Focus Appearance — enforce a ≥2px focus ring on slotted
|
|
680
|
+
* trigger / anchor controls. hx-popup is a positioning primitive: it
|
|
681
|
+
* paints no surface itself, but slotted natives (<button>, <a>) must
|
|
682
|
+
* still meet the AAA ring threshold. Token-driven.
|
|
683
|
+
*/
|
|
684
|
+
::slotted([slot='anchor']:focus-visible),
|
|
685
|
+
::slotted(button:focus-visible),
|
|
686
|
+
::slotted(a:focus-visible) {
|
|
687
|
+
outline: var(--hx-focus-ring-width, 2px) solid
|
|
688
|
+
var(--hx-popup-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
689
|
+
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
690
|
+
}
|
|
691
|
+
|
|
652
692
|
[part='popup'] {
|
|
653
693
|
position: fixed;
|
|
654
694
|
z-index: var(--hx-popup-z-index, 9000);
|
|
@@ -696,6 +736,19 @@
|
|
|
696
736
|
display: inline-block;
|
|
697
737
|
}
|
|
698
738
|
|
|
739
|
+
/*
|
|
740
|
+
* AAA 2.4.13 Focus Appearance — enforce a ≥2px focus ring on the slotted
|
|
741
|
+
* trigger. APG forbids the tooltip body from holding focus, so the
|
|
742
|
+
* trigger is the only AAA-relevant focus surface. Token-driven.
|
|
743
|
+
*/
|
|
744
|
+
::slotted([slot='trigger']:focus-visible),
|
|
745
|
+
::slotted(button:focus-visible),
|
|
746
|
+
::slotted(a:focus-visible) {
|
|
747
|
+
outline: var(--hx-focus-ring-width, 2px) solid
|
|
748
|
+
var(--hx-tooltip-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
749
|
+
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
750
|
+
}
|
|
751
|
+
|
|
699
752
|
[part='tooltip'] {
|
|
700
753
|
position: fixed;
|
|
701
754
|
z-index: var(--hx-tooltip-z-index, var(--hx-z-index-tooltip, 1600));
|
|
@@ -104,11 +104,11 @@
|
|
|
104
104
|
--hx-color-text-on-primary-strong: var(--hx-color-neutral-0);
|
|
105
105
|
--hx-color-text-on-success-strong: var(--hx-color-neutral-0);
|
|
106
106
|
--hx-color-text-on-error-strong: var(--hx-color-neutral-0);
|
|
107
|
-
--hx-color-text-link: var(--hx-color-primary-
|
|
108
|
-
--hx-color-text-link-hover: var(--hx-color-primary-
|
|
109
|
-
--hx-color-text-link-visited: var(--hx-color-secondary-
|
|
110
|
-
--hx-color-text-link-active: var(--hx-color-primary-
|
|
111
|
-
--hx-color-error-text: var(--hx-color-error-
|
|
107
|
+
--hx-color-text-link: var(--hx-color-primary-700);
|
|
108
|
+
--hx-color-text-link-hover: var(--hx-color-primary-800);
|
|
109
|
+
--hx-color-text-link-visited: var(--hx-color-secondary-700);
|
|
110
|
+
--hx-color-text-link-active: var(--hx-color-primary-900);
|
|
111
|
+
--hx-color-error-text: var(--hx-color-error-700);
|
|
112
112
|
--hx-color-success-text: var(--hx-color-success-700);
|
|
113
113
|
--hx-color-surface-default: var(--hx-color-neutral-0);
|
|
114
114
|
--hx-color-surface-raised: var(--hx-color-neutral-50);
|
|
@@ -129,15 +129,15 @@
|
|
|
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);
|
|
132
|
-
--hx-color-action-primary-bg: var(--hx-color-primary-
|
|
132
|
+
--hx-color-action-primary-bg: var(--hx-color-primary-700);
|
|
133
133
|
--hx-color-action-primary-bg-inverted-rest: var(--hx-color-primary-500);
|
|
134
|
-
--hx-color-action-primary-bg-hover: var(--hx-color-primary-
|
|
135
|
-
--hx-color-action-primary-bg-active: var(--hx-color-primary-
|
|
134
|
+
--hx-color-action-primary-bg-hover: var(--hx-color-primary-800);
|
|
135
|
+
--hx-color-action-primary-bg-active: var(--hx-color-primary-900);
|
|
136
136
|
--hx-color-action-primary-bg-inverted-hover: var(--hx-color-primary-400);
|
|
137
|
-
--hx-color-action-secondary-fg: var(--hx-color-primary-
|
|
138
|
-
--hx-color-action-secondary-border: var(--hx-color-primary-
|
|
137
|
+
--hx-color-action-secondary-fg: var(--hx-color-primary-700);
|
|
138
|
+
--hx-color-action-secondary-border: var(--hx-color-primary-700);
|
|
139
139
|
--hx-color-action-secondary-bg-hover: var(--hx-color-primary-50);
|
|
140
|
-
--hx-color-action-ghost-fg: var(--hx-color-primary-
|
|
140
|
+
--hx-color-action-ghost-fg: var(--hx-color-primary-700);
|
|
141
141
|
--hx-color-action-ghost-bg-hover: var(--hx-color-primary-50);
|
|
142
142
|
--hx-color-action-danger-bg: var(--hx-color-error-500);
|
|
143
143
|
--hx-color-action-danger-bg-hover: var(--hx-color-error-600);
|
|
@@ -268,7 +268,7 @@
|
|
|
268
268
|
--hx-container-content: 72rem;
|
|
269
269
|
--hx-container-narrow: 48rem;
|
|
270
270
|
--hx-input-height-sm: var(--hx-size-8);
|
|
271
|
-
--hx-input-height-md: var(--hx-size-
|
|
271
|
+
--hx-input-height-md: var(--hx-size-11);
|
|
272
272
|
--hx-input-height-lg: var(--hx-size-12);
|
|
273
273
|
--hx-divider-color: var(--hx-color-border-default);
|
|
274
274
|
--hx-divider-width: var(--hx-border-width-thin);
|
|
@@ -496,6 +496,7 @@
|
|
|
496
496
|
--hx-color-focus-ring: #FFFF00;
|
|
497
497
|
--hx-color-selection-bg: #1AEBFF;
|
|
498
498
|
--hx-color-selection-color: #000000;
|
|
499
|
+
--hx-color-action-primary-bg-hover: var(--hx-color-primary-600);
|
|
499
500
|
--hx-color-action-primary-bg-active: var(--hx-color-primary-700);
|
|
500
501
|
--hx-color-action-danger-bg-active: var(--hx-color-error-500);
|
|
501
502
|
--hx-body-bg: #000000;
|
|
@@ -118,6 +118,18 @@
|
|
|
118
118
|
flex-shrink: 0;
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
+
/*
|
|
122
|
+
* AAA 2.4.13 Focus Appearance — enforce a ≥2px focus ring on slotted
|
|
123
|
+
* natives (e.g. bare <button>, <a>) so consumers who slot non-HELiX
|
|
124
|
+
* controls inherit the same indicator as the HELiX components do.
|
|
125
|
+
* Token-driven: --hx-focus-ring-width resolves to 2px (default).
|
|
126
|
+
*/
|
|
127
|
+
::slotted(:focus-visible) {
|
|
128
|
+
outline: var(--hx-focus-ring-width, 2px) solid
|
|
129
|
+
var(--hx-action-bar-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
130
|
+
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
131
|
+
}
|
|
132
|
+
|
|
121
133
|
/* ─── High Contrast Mode (forced-colors) ─── */
|
|
122
134
|
|
|
123
135
|
@media (forced-colors: active) {
|
|
@@ -188,10 +200,13 @@
|
|
|
188
200
|
font-size: var(--hx-font-size-sm);
|
|
189
201
|
}
|
|
190
202
|
|
|
203
|
+
/* md — WCAG 2.5.5 AAA Target Size (Enhanced): 44×44 minimum.
|
|
204
|
+
Bound to --hx-touch-target-min so the default md variant clears the
|
|
205
|
+
AAA-strict floor without requiring consumers to opt into sm or lg. */
|
|
191
206
|
.button--md {
|
|
192
207
|
padding: var(--hx-space-2);
|
|
193
|
-
min-width: var(--hx-
|
|
194
|
-
height: var(--hx-
|
|
208
|
+
min-width: var(--hx-touch-target-min, 2.75rem);
|
|
209
|
+
min-height: var(--hx-touch-target-min, 2.75rem);
|
|
195
210
|
font-size: var(--hx-font-size-md);
|
|
196
211
|
}
|
|
197
212
|
|
|
@@ -502,16 +517,22 @@
|
|
|
502
517
|
min-height: var(--hx-size-8, 2rem);
|
|
503
518
|
}
|
|
504
519
|
|
|
505
|
-
/* md
|
|
520
|
+
/* md — WCAG 2.5.5 AAA Target Size (Enhanced): 44×44 minimum.
|
|
521
|
+
Bound to --hx-touch-target-min so the default md variant clears the
|
|
522
|
+
AAA-strict floor without requiring consumers to opt into sm or lg. */
|
|
506
523
|
.split-button--md .split-button__primary {
|
|
507
524
|
padding: var(--hx-space-2, 0.5rem) var(--hx-space-4, 1rem);
|
|
508
525
|
font-size: var(--hx-font-size-md, 1rem);
|
|
509
|
-
min-height: var(--hx-
|
|
526
|
+
min-height: var(--hx-touch-target-min, 2.75rem);
|
|
510
527
|
}
|
|
511
528
|
|
|
512
529
|
.split-button--md .split-button__trigger {
|
|
513
530
|
padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);
|
|
514
|
-
|
|
531
|
+
/* WCAG 2.5.5 (Enhanced) AAA — chevron trigger must clear 44×44 in
|
|
532
|
+
BOTH dimensions. Without min-width, the trigger collapses to its
|
|
533
|
+
icon width (~38 px) and fails the brand-theme matrix audit. */
|
|
534
|
+
min-width: var(--hx-touch-target-min, 2.75rem);
|
|
535
|
+
min-height: var(--hx-touch-target-min, 2.75rem);
|
|
515
536
|
}
|
|
516
537
|
|
|
517
538
|
/* lg */
|
|
@@ -528,21 +549,27 @@
|
|
|
528
549
|
|
|
529
550
|
/* ─── Variant: primary ─── */
|
|
530
551
|
|
|
552
|
+
/* Primary resting — bind through action.primary.bg (resolves to primary-600
|
|
553
|
+
across all 6 brands) coordinated with text.on-primary. Inline fallback
|
|
554
|
+
#0d1825 matches text.on-primary's resolved primitive (neutral-900) so a
|
|
555
|
+
cold-start without semantic tokens paints AA-tuned dark-on-teal (5.20:1)
|
|
556
|
+
rather than white-on-teal (3.43:1 fail). Mirrors hx-button precedent
|
|
557
|
+
(hx-button.styles.ts ~line 88) and Phase C structural fix. */
|
|
531
558
|
.split-button--primary .split-button__primary,
|
|
532
559
|
.split-button--primary .split-button__trigger {
|
|
533
|
-
--hx-split-button-bg: var(--hx-color-primary-
|
|
534
|
-
--hx-split-button-color: var(--hx-color-text-on-primary, #
|
|
560
|
+
--hx-split-button-bg: var(--hx-color-action-primary-bg, #429797);
|
|
561
|
+
--hx-split-button-color: var(--hx-color-text-on-primary, #0d1825);
|
|
535
562
|
--hx-split-button-border-color: transparent;
|
|
536
563
|
--hx-split-button-divider-color: var(--hx-color-primary-900, #0b3232);
|
|
537
564
|
}
|
|
538
565
|
|
|
539
|
-
/* primary:hover —
|
|
540
|
-
|
|
541
|
-
|
|
566
|
+
/* primary:hover — lift to action.primary.bg-hover (primary-700) with
|
|
567
|
+
text.on-primary-strong (neutral-0). Replaces the universal brightness(0.9)
|
|
568
|
+
filter which would degrade contrast on the resting pair. */
|
|
542
569
|
.split-button--primary .split-button__primary:hover,
|
|
543
570
|
.split-button--primary .split-button__trigger:hover {
|
|
544
|
-
--hx-split-button-bg: var(--hx-color-primary-
|
|
545
|
-
--hx-split-button-color: var(--hx-color-
|
|
571
|
+
--hx-split-button-bg: var(--hx-color-action-primary-bg-hover, #0f7078);
|
|
572
|
+
--hx-split-button-color: var(--hx-color-text-on-primary-strong, #ffffff);
|
|
546
573
|
filter: none;
|
|
547
574
|
}
|
|
548
575
|
|
|
@@ -116,6 +116,18 @@
|
|
|
116
116
|
flex-shrink: 0;
|
|
117
117
|
}
|
|
118
118
|
|
|
119
|
+
/*
|
|
120
|
+
* AAA 2.4.13 Focus Appearance — enforce a ≥2px focus ring on slotted
|
|
121
|
+
* natives (e.g. bare <button>, <a>) so consumers who slot non-HELiX
|
|
122
|
+
* controls inherit the same indicator as the HELiX components do.
|
|
123
|
+
* Token-driven: --hx-focus-ring-width resolves to 2px (default).
|
|
124
|
+
*/
|
|
125
|
+
::slotted(:focus-visible) {
|
|
126
|
+
outline: var(--hx-focus-ring-width, 2px) solid
|
|
127
|
+
var(--hx-action-bar-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
128
|
+
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
129
|
+
}
|
|
130
|
+
|
|
119
131
|
/* ─── High Contrast Mode (forced-colors) ─── */
|
|
120
132
|
|
|
121
133
|
@media (forced-colors: active) {
|
package/dist/css/hx-button.css
CHANGED
|
@@ -72,7 +72,10 @@
|
|
|
72
72
|
.button--md {
|
|
73
73
|
padding: var(--hx-space-2, 0.5rem) var(--hx-space-4, 1rem);
|
|
74
74
|
font-size: var(--hx-font-size-md, 1rem);
|
|
75
|
-
|
|
75
|
+
/* WCAG 2.5.5 AAA Target Size (Enhanced): 44×44 minimum.
|
|
76
|
+
Bound to --hx-touch-target-min so the default md variant clears the
|
|
77
|
+
AAA-strict floor without requiring consumers to opt into sm or lg. */
|
|
78
|
+
min-height: var(--hx-touch-target-min, 2.75rem);
|
|
76
79
|
}
|
|
77
80
|
|
|
78
81
|
.button--lg {
|
|
@@ -8,6 +8,17 @@
|
|
|
8
8
|
cursor: not-allowed;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
+
/*
|
|
12
|
+
* AAA 2.4.13 Focus Appearance — host-level focus ring (group is focusable
|
|
13
|
+
* via roving tabindex in Tier-2). Token-driven: --hx-focus-ring-width
|
|
14
|
+
* resolves to ≥2px.
|
|
15
|
+
*/
|
|
16
|
+
:host(:focus-visible) {
|
|
17
|
+
outline: var(--hx-focus-ring-width, 2px) solid
|
|
18
|
+
var(--hx-checkbox-group-focus-ring-color, var(--hx-focus-ring-color, #0f7078));
|
|
19
|
+
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
20
|
+
}
|
|
21
|
+
|
|
11
22
|
* {
|
|
12
23
|
box-sizing: border-box;
|
|
13
24
|
}
|
package/dist/css/hx-checkbox.css
CHANGED
|
@@ -70,6 +70,16 @@
|
|
|
70
70
|
|
|
71
71
|
/* ─── Focus Ring ─── */
|
|
72
72
|
|
|
73
|
+
/*
|
|
74
|
+
* Suppress the browser default ~1px host outline. Without this, the formal
|
|
75
|
+
* AAA audit harness (which measures computed outline-width on the focused
|
|
76
|
+
* host) records a sub-2px outline and reports WCAG 2.4.13 Partially Supports.
|
|
77
|
+
* The visual focus indicator is rendered on the inner .checkbox__box below.
|
|
78
|
+
*/
|
|
79
|
+
:host {
|
|
80
|
+
outline: none;
|
|
81
|
+
}
|
|
82
|
+
|
|
73
83
|
/*
|
|
74
84
|
* Host-focus path: on the modern (IDL element-references) render branch the
|
|
75
85
|
* host is the tabbable surface (tabindex=0) and the inner input is demoted
|
|
@@ -44,6 +44,10 @@
|
|
|
44
44
|
background: var(--hx-color-neutral-0, #ffffff);
|
|
45
45
|
cursor: pointer;
|
|
46
46
|
transition: border-color var(--hx-transition-fast, 150ms ease);
|
|
47
|
+
/* WCAG 2.5.5 AAA Target Size (Enhanced): 44×44 minimum.
|
|
48
|
+
Bound to --hx-touch-target-min so the trigger clears the AAA-strict
|
|
49
|
+
floor at default sizing. */
|
|
50
|
+
min-height: var(--hx-touch-target-min, 2.75rem);
|
|
47
51
|
}
|
|
48
52
|
.trigger:hover:not([disabled]) {
|
|
49
53
|
border-color: var(
|
|
@@ -204,13 +208,20 @@
|
|
|
204
208
|
}
|
|
205
209
|
.format-btn {
|
|
206
210
|
flex-shrink: 0;
|
|
211
|
+
/* WCAG 2.5.5 (Enhanced) AAA — interactive panel controls must clear
|
|
212
|
+
44×44. Without min-width/min-height the format toggle collapses to
|
|
213
|
+
its label box (~44×24 in default rendering, sub-44 on the y-axis). */
|
|
214
|
+
min-width: var(--hx-touch-target-min, 2.75rem);
|
|
215
|
+
min-height: var(--hx-touch-target-min, 2.75rem);
|
|
207
216
|
padding: var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem);
|
|
208
217
|
background: var(--hx-color-neutral-100, #ebeee9);
|
|
209
218
|
border: var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-300, #b6bfb9);
|
|
210
219
|
border-radius: var(--hx-border-radius-sm, 0.25rem);
|
|
211
220
|
cursor: pointer;
|
|
212
221
|
font-size: var(--hx-font-size-xs, 0.75rem);
|
|
213
|
-
|
|
222
|
+
/* AAA 1.4.6: 12px label vs neutral-100 must be ≥7:1; neutral-700 = 9.34:1
|
|
223
|
+
(neutral-600 was 6.63:1, a tight AAA miss). */
|
|
224
|
+
color: var(--hx-color-neutral-700, #313e4b);
|
|
214
225
|
text-transform: uppercase;
|
|
215
226
|
font-weight: var(--hx-font-weight-semibold, 600);
|
|
216
227
|
letter-spacing: 0.05em;
|
|
@@ -218,6 +229,8 @@
|
|
|
218
229
|
.color-input {
|
|
219
230
|
flex: 1;
|
|
220
231
|
min-width: 0;
|
|
232
|
+
/* WCAG 2.5.5 (Enhanced) AAA — text input must clear 44×44. */
|
|
233
|
+
min-height: var(--hx-touch-target-min, 2.75rem);
|
|
221
234
|
padding: var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem);
|
|
222
235
|
border: var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-300, #b6bfb9);
|
|
223
236
|
border-radius: var(--hx-border-radius-sm, 0.25rem);
|