@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
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { css as y, svg as g, html as u, nothing as
|
|
1
|
+
import { css as y, svg as g, html as u, nothing as b } from "lit";
|
|
2
2
|
import { property as x, state as k, customElement as w } from "lit/decorators.js";
|
|
3
3
|
import { classMap as m } from "lit/directives/class-map.js";
|
|
4
4
|
import { repeat as C } from "lit/directives/repeat.js";
|
|
5
|
-
import { f as
|
|
6
|
-
import { H as
|
|
7
|
-
const
|
|
5
|
+
import { f as A } from "./forced-colors-CTEDFRGa.js";
|
|
6
|
+
import { H as $ } from "./helix-element-BNEYeiys.js";
|
|
7
|
+
const I = y`
|
|
8
8
|
:host {
|
|
9
9
|
display: block;
|
|
10
10
|
font-family: var(--hx-nav-font-family, var(--hx-font-family-sans, sans-serif));
|
|
@@ -76,6 +76,16 @@ const O = y`
|
|
|
76
76
|
align-items: center;
|
|
77
77
|
gap: var(--hx-space-1, 0.25rem);
|
|
78
78
|
padding: var(--hx-nav-item-padding, var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem));
|
|
79
|
+
/*
|
|
80
|
+
* WCAG 2.5.5 (Enhanced) AAA — nav links rendered with default padding
|
|
81
|
+
* land at ~37 px tall (8 px + 1.5 line-height + 8 px). The link
|
|
82
|
+
* content is first-party (rendered via consumer-supplied props on
|
|
83
|
+
* <hx-nav-item>), so the slotted-content carve-out does not apply —
|
|
84
|
+
* this is a real component obligation. Bind --hx-nav-link-min-height
|
|
85
|
+
* to --hx-touch-target-min (2.75rem / 44 px) to grow the interactive
|
|
86
|
+
* area without enlarging the visible label.
|
|
87
|
+
*/
|
|
88
|
+
min-height: var(--hx-nav-link-min-height, var(--hx-touch-target-min, 2.75rem));
|
|
79
89
|
color: var(--hx-nav-link-color, var(--hx-color-neutral-100, #ebeee9));
|
|
80
90
|
text-decoration: none;
|
|
81
91
|
border-radius: var(--hx-nav-border-radius, var(--hx-border-radius-sm, 0.25rem));
|
|
@@ -104,8 +114,20 @@ const O = y`
|
|
|
104
114
|
}
|
|
105
115
|
|
|
106
116
|
.nav__link--active {
|
|
107
|
-
background-color: var(--hx-nav-link-active-bg, var(--hx-color-primary-
|
|
108
|
-
|
|
117
|
+
background-color: var(--hx-nav-link-active-bg, var(--hx-color-action-primary-bg, #0f6363));
|
|
118
|
+
/* Use --hx-color-text-on-primary so the active-link text inherits the
|
|
119
|
+
* action-surface AAA-strict pairing (white on primary-700 in default
|
|
120
|
+
* themes; black on lighter primary-700 in the high-contrast theme).
|
|
121
|
+
* Pre-3.4.0 this consumed --hx-color-primary-600 directly which
|
|
122
|
+
* resolved to Apex #0F7078 + white = 5.82:1 — AAA-large only, AAA
|
|
123
|
+
* normal fail under WCAG 1.4.6 for body-text-sized link labels. The
|
|
124
|
+
* Phase 4 Tier 3 chain shift moved action.primary.bg to primary-700
|
|
125
|
+
* (Apex 7.03:1 with white) and consuming the action semantic here
|
|
126
|
+
* picks up the AAA-strict pairing across the full 6-brand matrix.
|
|
127
|
+
* Hardcoding white previously failed AAA-large in high-contrast
|
|
128
|
+
* (ratio 2.54 vs. 4.5 floor); the on-primary token resolves correctly
|
|
129
|
+
* in HC mode. */
|
|
130
|
+
color: var(--hx-nav-link-active-color, var(--hx-color-text-on-primary, #ffffff));
|
|
109
131
|
}
|
|
110
132
|
|
|
111
133
|
/* ─── Chevron Icon ─── */
|
|
@@ -262,12 +284,12 @@ const O = y`
|
|
|
262
284
|
}
|
|
263
285
|
}
|
|
264
286
|
`;
|
|
265
|
-
var
|
|
266
|
-
for (var t =
|
|
267
|
-
(l = e[
|
|
268
|
-
return
|
|
287
|
+
var O = Object.defineProperty, E = Object.getOwnPropertyDescriptor, p = (e, n, r, i) => {
|
|
288
|
+
for (var t = i > 1 ? void 0 : i ? E(n, r) : n, o = e.length - 1, l; o >= 0; o--)
|
|
289
|
+
(l = e[o]) && (t = (i ? l(n, r, t) : l(t)) || t);
|
|
290
|
+
return i && t && O(n, r, t), t;
|
|
269
291
|
};
|
|
270
|
-
let c = class extends
|
|
292
|
+
let c = class extends $ {
|
|
271
293
|
constructor() {
|
|
272
294
|
super(...arguments), this.items = [], this.orientation = "horizontal", this.label = "Main navigation", this.labelOpenMenu = "Open navigation menu", this.labelCloseMenu = "Close navigation menu", this._mobileOpen = !1, this._expandedIndex = null, this._boundOutsideClick = this._handleOutsideClick.bind(this), this._boundFocusout = this._handleFocusout.bind(this);
|
|
273
295
|
}
|
|
@@ -294,8 +316,8 @@ let c = class extends I {
|
|
|
294
316
|
}
|
|
295
317
|
/** @internal */
|
|
296
318
|
_handleItemClick(e, n, r) {
|
|
297
|
-
var
|
|
298
|
-
r.preventDefault(), (
|
|
319
|
+
var i;
|
|
320
|
+
r.preventDefault(), (i = e.children) != null && i.length ? this._expandedIndex = this._expandedIndex === n ? null : n : (this._mobileOpen = !1, this._expandedIndex = null, this.dispatchEvent(
|
|
299
321
|
new CustomEvent("hx-nav-select", {
|
|
300
322
|
bubbles: !0,
|
|
301
323
|
composed: !0,
|
|
@@ -315,16 +337,16 @@ let c = class extends I {
|
|
|
315
337
|
}
|
|
316
338
|
/** @internal */
|
|
317
339
|
_handleKeydown(e, n, r) {
|
|
318
|
-
var l,
|
|
319
|
-
const
|
|
340
|
+
var l, h, d, a, f;
|
|
341
|
+
const i = (l = this.shadowRoot) == null ? void 0 : l.querySelectorAll(
|
|
320
342
|
'[part="list"] > [part="item"] > [part="link"]'
|
|
321
343
|
);
|
|
322
|
-
if (!
|
|
323
|
-
const t = Array.from(
|
|
344
|
+
if (!i) return;
|
|
345
|
+
const t = Array.from(i), o = t[n];
|
|
324
346
|
switch (e.key) {
|
|
325
347
|
case "ArrowRight":
|
|
326
348
|
case "ArrowDown": {
|
|
327
|
-
if (e.preventDefault(), (
|
|
349
|
+
if (e.preventDefault(), (h = r.children) != null && h.length && e.key === "ArrowDown" && this.orientation === "horizontal")
|
|
328
350
|
this._expandedIndex = n, this.updateComplete.then(() => {
|
|
329
351
|
var v;
|
|
330
352
|
const s = (v = this.shadowRoot) == null ? void 0 : v.querySelector(
|
|
@@ -346,7 +368,7 @@ let c = class extends I {
|
|
|
346
368
|
break;
|
|
347
369
|
}
|
|
348
370
|
case "Home": {
|
|
349
|
-
e.preventDefault(), (
|
|
371
|
+
e.preventDefault(), (d = t[0]) == null || d.focus();
|
|
350
372
|
break;
|
|
351
373
|
}
|
|
352
374
|
case "End": {
|
|
@@ -354,17 +376,17 @@ let c = class extends I {
|
|
|
354
376
|
break;
|
|
355
377
|
}
|
|
356
378
|
case "Escape": {
|
|
357
|
-
this._expandedIndex = null,
|
|
379
|
+
this._expandedIndex = null, o == null || o.focus();
|
|
358
380
|
break;
|
|
359
381
|
}
|
|
360
382
|
case "Enter":
|
|
361
383
|
case " ": {
|
|
362
|
-
if ((
|
|
384
|
+
if ((f = r.children) != null && f.length) {
|
|
363
385
|
e.preventDefault();
|
|
364
386
|
const s = this._expandedIndex === n;
|
|
365
387
|
this._expandedIndex = s ? null : n, s || this.updateComplete.then(() => {
|
|
366
|
-
var
|
|
367
|
-
const v = (
|
|
388
|
+
var _;
|
|
389
|
+
const v = (_ = this.shadowRoot) == null ? void 0 : _.querySelector(
|
|
368
390
|
'.nav__submenu:not([hidden]) [part="link"]'
|
|
369
391
|
);
|
|
370
392
|
v == null || v.focus();
|
|
@@ -376,31 +398,31 @@ let c = class extends I {
|
|
|
376
398
|
}
|
|
377
399
|
/** @internal */
|
|
378
400
|
_handleSubKeydown(e, n) {
|
|
379
|
-
var l,
|
|
401
|
+
var l, h, d;
|
|
380
402
|
const r = (l = this.shadowRoot) == null ? void 0 : l.querySelectorAll(
|
|
381
403
|
'.nav__submenu:not([hidden]) [part="link"]'
|
|
382
404
|
);
|
|
383
405
|
if (!r) return;
|
|
384
|
-
const
|
|
406
|
+
const i = Array.from(r), t = e.currentTarget ?? e.target, o = i.indexOf(t);
|
|
385
407
|
switch (e.key) {
|
|
386
408
|
case "ArrowDown": {
|
|
387
409
|
e.preventDefault();
|
|
388
|
-
const a = o
|
|
410
|
+
const a = i[o + 1] ?? i[0];
|
|
389
411
|
a == null || a.focus();
|
|
390
412
|
break;
|
|
391
413
|
}
|
|
392
414
|
case "ArrowUp": {
|
|
393
415
|
e.preventDefault();
|
|
394
|
-
const a = o
|
|
416
|
+
const a = i[o - 1] ?? i[i.length - 1];
|
|
395
417
|
a == null || a.focus();
|
|
396
418
|
break;
|
|
397
419
|
}
|
|
398
420
|
case "Escape": {
|
|
399
421
|
e.preventDefault(), this._expandedIndex = null;
|
|
400
|
-
const a = (
|
|
422
|
+
const a = (h = this.shadowRoot) == null ? void 0 : h.querySelectorAll(
|
|
401
423
|
'[part="list"] > [part="item"] > [part="link"]'
|
|
402
424
|
);
|
|
403
|
-
(
|
|
425
|
+
(d = a == null ? void 0 : a[n]) == null || d.focus();
|
|
404
426
|
break;
|
|
405
427
|
}
|
|
406
428
|
}
|
|
@@ -466,9 +488,9 @@ let c = class extends I {
|
|
|
466
488
|
}
|
|
467
489
|
/** @internal */
|
|
468
490
|
_renderSubMenu(e, n, r) {
|
|
469
|
-
const
|
|
491
|
+
const i = this._expandedIndex === n;
|
|
470
492
|
return u`
|
|
471
|
-
<ul class="nav__submenu" aria-label="${r} submenu" ?hidden=${!
|
|
493
|
+
<ul class="nav__submenu" aria-label="${r} submenu" ?hidden=${!i}>
|
|
472
494
|
${e.map(
|
|
473
495
|
(t) => u`
|
|
474
496
|
<li class="nav__submenu-item">
|
|
@@ -479,9 +501,9 @@ let c = class extends I {
|
|
|
479
501
|
nav__link: !0,
|
|
480
502
|
"nav__link--active": !!t.current
|
|
481
503
|
})}
|
|
482
|
-
aria-current=${t.current ? "page" :
|
|
483
|
-
@click=${(
|
|
484
|
-
@keydown=${(
|
|
504
|
+
aria-current=${t.current ? "page" : b}
|
|
505
|
+
@click=${(o) => this._handleSubItemClick(t, o)}
|
|
506
|
+
@keydown=${(o) => this._handleSubKeydown(o, n)}
|
|
485
507
|
>
|
|
486
508
|
${t.label}
|
|
487
509
|
</a>
|
|
@@ -493,18 +515,18 @@ let c = class extends I {
|
|
|
493
515
|
}
|
|
494
516
|
/** @internal */
|
|
495
517
|
_renderItem(e, n) {
|
|
496
|
-
var
|
|
497
|
-
const r = !!((
|
|
518
|
+
var h, d;
|
|
519
|
+
const r = !!((h = e.children) != null && h.length), i = this._expandedIndex === n, t = r && !!((d = e.children) != null && d.some((a) => a.current)), o = {
|
|
498
520
|
nav__link: !0,
|
|
499
521
|
"nav__link--active": !!e.current || t,
|
|
500
522
|
"nav__link--has-submenu": r,
|
|
501
|
-
"nav__link--expanded":
|
|
523
|
+
"nav__link--expanded": i
|
|
502
524
|
}, l = r ? u`
|
|
503
525
|
<button
|
|
504
526
|
part="link"
|
|
505
|
-
class=${m(
|
|
506
|
-
aria-expanded=${
|
|
507
|
-
aria-current=${t ? "true" :
|
|
527
|
+
class=${m(o)}
|
|
528
|
+
aria-expanded=${i ? "true" : "false"}
|
|
529
|
+
aria-current=${t ? "true" : b}
|
|
508
530
|
@click=${(a) => this._handleItemClick(e, n, a)}
|
|
509
531
|
@keydown=${(a) => this._handleKeydown(a, n, e)}
|
|
510
532
|
>
|
|
@@ -515,8 +537,8 @@ let c = class extends I {
|
|
|
515
537
|
<a
|
|
516
538
|
part="link"
|
|
517
539
|
href=${this._sanitizeHref(e.href)}
|
|
518
|
-
class=${m(
|
|
519
|
-
aria-current=${e.current ? "page" :
|
|
540
|
+
class=${m(o)}
|
|
541
|
+
aria-current=${e.current ? "page" : b}
|
|
520
542
|
@click=${(a) => this._handleItemClick(e, n, a)}
|
|
521
543
|
@keydown=${(a) => this._handleKeydown(a, n, e)}
|
|
522
544
|
>
|
|
@@ -555,7 +577,7 @@ let c = class extends I {
|
|
|
555
577
|
`;
|
|
556
578
|
}
|
|
557
579
|
};
|
|
558
|
-
c.styles = [
|
|
580
|
+
c.styles = [I, A];
|
|
559
581
|
p([
|
|
560
582
|
x({
|
|
561
583
|
type: Array,
|
|
@@ -596,4 +618,4 @@ c = p([
|
|
|
596
618
|
export {
|
|
597
619
|
c as H
|
|
598
620
|
};
|
|
599
|
-
//# sourceMappingURL=hx-nav-
|
|
621
|
+
//# sourceMappingURL=hx-nav-ChMTfn7o.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hx-nav-ChMTfn7o.js","sources":["../../src/components/hx-nav/hx-nav.styles.ts","../../src/components/hx-nav/hx-nav.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixNavStyles = css`\n :host {\n display: block;\n font-family: var(--hx-nav-font-family, var(--hx-font-family-sans, sans-serif));\n font-size: var(--hx-nav-font-size, var(--hx-font-size-sm, 0.875rem));\n }\n\n * {\n box-sizing: border-box;\n }\n\n /* ─── Nav Container ─── */\n\n [part='nav'] {\n position: relative;\n background-color: var(--hx-nav-bg, var(--hx-color-neutral-900, #0d1825));\n color: var(--hx-nav-color, var(--hx-color-neutral-100, #ebeee9));\n padding: var(--hx-nav-padding, var(--hx-space-2, 0.5rem) var(--hx-space-4, 1rem));\n }\n\n /* ─── Hamburger Toggle ─── */\n\n [part='toggle'] {\n display: none;\n align-items: center;\n justify-content: center;\n padding: var(--hx-space-2, 0.5rem);\n background: transparent;\n border: none;\n border-radius: var(--hx-nav-border-radius, var(--hx-border-radius-sm, 0.25rem));\n color: var(--hx-nav-color, var(--hx-color-neutral-100, #ebeee9));\n cursor: pointer;\n transition: background-color var(--hx-transition-fast, 150ms) ease;\n line-height: 0;\n }\n\n [part='toggle']:hover {\n background-color: var(--hx-nav-link-hover-bg, var(--hx-color-neutral-700, #313e4b));\n }\n\n [part='toggle']:focus-visible {\n outline: var(--hx-focus-ring-width, 2px) solid\n var(--hx-nav-focus-ring-color, var(--hx-focus-ring-color, #0f7078));\n outline-offset: var(--hx-focus-ring-offset, 2px);\n }\n\n /* ─── Navigation List ─── */\n\n [part='list'] {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n list-style: none;\n margin: 0;\n padding: 0;\n gap: var(--hx-space-1, 0.25rem);\n align-items: center;\n }\n\n /* ─── Nav Item ─── */\n\n [part='item'] {\n position: relative;\n }\n\n /* ─── Nav Link / Button ─── */\n\n .nav__link {\n display: inline-flex;\n align-items: center;\n gap: var(--hx-space-1, 0.25rem);\n padding: var(--hx-nav-item-padding, var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem));\n /*\n * WCAG 2.5.5 (Enhanced) AAA — nav links rendered with default padding\n * land at ~37 px tall (8 px + 1.5 line-height + 8 px). The link\n * content is first-party (rendered via consumer-supplied props on\n * <hx-nav-item>), so the slotted-content carve-out does not apply —\n * this is a real component obligation. Bind --hx-nav-link-min-height\n * to --hx-touch-target-min (2.75rem / 44 px) to grow the interactive\n * area without enlarging the visible label.\n */\n min-height: var(--hx-nav-link-min-height, var(--hx-touch-target-min, 2.75rem));\n color: var(--hx-nav-link-color, var(--hx-color-neutral-100, #ebeee9));\n text-decoration: none;\n border-radius: var(--hx-nav-border-radius, var(--hx-border-radius-sm, 0.25rem));\n border: none;\n background: transparent;\n cursor: pointer;\n font-family: inherit;\n font-size: inherit;\n font-weight: var(--hx-font-weight-medium, 500);\n line-height: var(--hx-line-height-normal, 1.5);\n white-space: nowrap;\n transition:\n background-color var(--hx-transition-fast, 150ms) ease,\n color var(--hx-transition-fast, 150ms) ease;\n }\n\n .nav__link:hover {\n background-color: var(--hx-nav-link-hover-bg, var(--hx-color-neutral-700, #313e4b));\n color: var(--hx-nav-link-hover-color, var(--hx-color-neutral-0, #ffffff));\n }\n\n .nav__link:focus-visible {\n outline: var(--hx-focus-ring-width, 2px) solid\n var(--hx-nav-focus-ring-color, var(--hx-focus-ring-color, #0f7078));\n outline-offset: var(--hx-focus-ring-offset, 2px);\n }\n\n .nav__link--active {\n background-color: var(--hx-nav-link-active-bg, var(--hx-color-action-primary-bg, #0f6363));\n /* Use --hx-color-text-on-primary so the active-link text inherits the\n * action-surface AAA-strict pairing (white on primary-700 in default\n * themes; black on lighter primary-700 in the high-contrast theme).\n * Pre-3.4.0 this consumed --hx-color-primary-600 directly which\n * resolved to Apex #0F7078 + white = 5.82:1 — AAA-large only, AAA\n * normal fail under WCAG 1.4.6 for body-text-sized link labels. The\n * Phase 4 Tier 3 chain shift moved action.primary.bg to primary-700\n * (Apex 7.03:1 with white) and consuming the action semantic here\n * picks up the AAA-strict pairing across the full 6-brand matrix.\n * Hardcoding white previously failed AAA-large in high-contrast\n * (ratio 2.54 vs. 4.5 floor); the on-primary token resolves correctly\n * in HC mode. */\n color: var(--hx-nav-link-active-color, var(--hx-color-text-on-primary, #ffffff));\n }\n\n /* ─── Chevron Icon ─── */\n\n .nav__chevron {\n transition: transform var(--hx-transition-normal, 200ms) ease;\n flex-shrink: 0;\n }\n\n .nav__link--expanded .nav__chevron {\n transform: rotate(180deg);\n }\n\n /* ─── Submenu ─── */\n\n .nav__submenu {\n position: absolute;\n top: calc(100% + var(--hx-space-1, 0.25rem));\n left: 0;\n min-width: var(--hx-nav-submenu-min-width, 12rem);\n list-style: none;\n margin: 0;\n padding: var(--hx-space-1, 0.25rem) 0;\n background-color: var(--hx-nav-submenu-bg, var(--hx-color-neutral-800, #202b39));\n border-radius: var(--hx-border-radius-md, 0.375rem);\n box-shadow: var(\n --hx-nav-shadow,\n var(--hx-shadow-md, 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1))\n );\n z-index: var(--hx-z-index-dropdown, 1000);\n }\n\n .nav__submenu[hidden] {\n display: none;\n }\n\n .nav__submenu .nav__link {\n display: block;\n width: 100%;\n text-align: start;\n border-radius: 0;\n padding: var(--hx-space-2, 0.5rem) var(--hx-space-4, 1rem);\n }\n\n /* ─── Vertical / Sidebar Orientation ─── */\n\n :host([orientation='vertical']) [part='nav'] {\n padding: var(--hx-space-4, 1rem) var(--hx-space-2, 0.5rem);\n }\n\n :host([orientation='vertical']) [part='list'] {\n flex-direction: column;\n align-items: stretch;\n gap: var(--hx-space-1, 0.25rem);\n }\n\n :host([orientation='vertical']) .nav__link {\n width: 100%;\n justify-content: flex-start;\n }\n\n :host([orientation='vertical']) .nav__submenu {\n position: static;\n box-shadow: none;\n border-radius: 0;\n background-color: transparent;\n padding: 0;\n padding-inline-start: var(--hx-space-4, 1rem);\n }\n\n :host([orientation='vertical']) .nav__submenu[hidden] {\n display: none;\n }\n\n :host([orientation='vertical']) .nav__submenu .nav__link {\n padding: var(--hx-space-1-5, 0.375rem) var(--hx-space-3, 0.75rem);\n font-size: var(--hx-font-size-xs, 0.75rem);\n color: var(--hx-nav-link-color, var(--hx-color-neutral-300, #b6bfb9));\n }\n\n /* ─── Mobile Responsive ─── */\n\n @media (max-width: 768px) {\n [part='nav'] {\n display: flex;\n flex-direction: column;\n padding: var(--hx-space-2, 0.5rem);\n }\n\n [part='toggle'] {\n display: inline-flex;\n align-self: flex-end;\n }\n\n [part='list'] {\n display: none;\n flex-direction: column;\n align-items: stretch;\n width: 100%;\n margin-top: var(--hx-space-2, 0.5rem);\n gap: var(--hx-space-1, 0.25rem);\n }\n\n [part='list'].nav__list--open {\n display: flex;\n }\n\n [part='item'] {\n width: 100%;\n }\n\n .nav__link {\n width: 100%;\n justify-content: flex-start;\n }\n\n .nav__submenu {\n position: static;\n box-shadow: none;\n border-radius: 0;\n padding-inline-start: var(--hx-space-4, 1rem);\n background-color: transparent;\n }\n\n .nav__submenu .nav__link {\n padding: var(--hx-space-1-5, 0.375rem) var(--hx-space-3, 0.75rem);\n }\n }\n\n /* ─── Reduced Motion ─── */\n\n @media (prefers-reduced-motion: reduce) {\n .nav__link,\n .nav__chevron,\n [part='toggle'] {\n transition: none;\n animation: none;\n }\n }\n\n /* ─── Forced Colors (Windows High Contrast) ─── */\n\n @media (forced-colors: active) {\n [part='nav'] {\n border: 1px solid CanvasText;\n }\n\n .nav__link--active {\n border: 1px solid Highlight;\n }\n\n .nav__submenu {\n border: 1px solid CanvasText;\n }\n }\n`;\n","import { html, nothing, svg } from 'lit';\nimport '../../utilities/document-token-adoption.js';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { repeat } from 'lit/directives/repeat.js';\nimport { HelixElement } from '../../base/index.js';\nimport { forcedColorsInteractive } from '../../styles/forced-colors.js';\nimport { helixNavStyles } from './hx-nav.styles.js';\n\n/** A single navigation item, optionally with nested children. */\nexport interface NavItem {\n /** Display label for the item. */\n label: string;\n /** Href for the item link. Required unless children are provided. */\n href?: string;\n /** Whether this item represents the current page. */\n current?: boolean;\n /** Nested sub-menu items. */\n children?: NavItem[];\n}\n\n/** Layout orientation for the navigation. */\ntype NavOrientation = 'horizontal' | 'vertical';\n\n/**\n * Primary and secondary navigation component.\n * Supports horizontal menu bar and vertical sidebar patterns.\n * Mobile responsive with hamburger toggle.\n *\n * @summary Navigation bar supporting horizontal and vertical layouts with nested submenus.\n *\n * @tag hx-nav\n *\n * @fires {CustomEvent<{item: NavItem}>} hx-nav-select - Dispatched when a nav item is activated.\n *\n * @csspart nav - The nav landmark element.\n * @csspart list - The top-level list element.\n * @csspart item - Each list item wrapper.\n * @csspart link - The anchor or button element inside each item.\n * @csspart toggle - The mobile hamburger toggle button.\n *\n * @cssprop [--hx-nav-bg=var(--hx-color-neutral-900)] - Navigation background color.\n * @cssprop [--hx-nav-color=var(--hx-color-neutral-100)] - Navigation text color.\n * @cssprop [--hx-nav-font-family=var(--hx-font-family-sans)] - Navigation font family.\n * @cssprop [--hx-nav-link-color=var(--hx-color-neutral-100)] - Link text color.\n * @cssprop [--hx-nav-link-hover-bg=var(--hx-color-neutral-700)] - Link hover background.\n * @cssprop [--hx-nav-link-hover-color=var(--hx-color-white)] - Link hover text color.\n * @cssprop [--hx-nav-link-active-bg=var(--hx-color-primary-600)] - Active link background.\n * @cssprop [--hx-nav-link-active-color=var(--hx-color-white)] - Active link text color.\n * @cssprop [--hx-nav-submenu-bg=var(--hx-color-neutral-800)] - Submenu background color.\n * @cssprop [--hx-nav-submenu-min-width=12rem] - Submenu minimum width.\n * @cssprop [--hx-nav-font-size=var(--hx-font-size-sm)] - Navigation font size.\n * @cssprop [--hx-nav-padding=var(--hx-space-2) var(--hx-space-4)] - Navigation padding.\n * @cssprop [--hx-nav-item-padding=var(--hx-space-2) var(--hx-space-3)] - Item padding.\n * @cssprop [--hx-nav-border-radius=var(--hx-border-radius-sm)] - Item border radius.\n * @cssprop [--hx-font-family-sans] - Font family.\n * @cssprop [--hx-font-size-sm] - Font size.\n * @cssprop [--hx-color-neutral-900] - Color.\n * @cssprop [--hx-color-neutral-100] - Color.\n * @cssprop [--hx-space-2] - Spacing token.\n * @cssprop [--hx-space-4] - Spacing token.\n * @cssprop [--hx-border-radius-sm] - CSS custom property.\n * @cssprop [--hx-transition-fast] - Transition timing.\n * @cssprop [--hx-color-neutral-700] - Color.\n * @cssprop [--hx-focus-ring-width] - Width.\n * @cssprop [--hx-color-primary-500] - Color.\n * @cssprop [--hx-focus-ring-color] - Color.\n * @cssprop [--hx-nav-focus-ring-color=var(--hx-focus-ring-color)] - Color.\n * @cssprop [--hx-focus-ring-offset] - CSS custom property.\n * @cssprop [--hx-space-1] - Spacing token.\n * @cssprop [--hx-space-3] - Spacing token.\n * @cssprop [--hx-font-weight-medium] - Font weight.\n * @cssprop [--hx-line-height-normal] - Line height.\n * @cssprop [--hx-color-neutral-0] - Color.\n * @cssprop [--hx-color-primary-600] - Color.\n * @cssprop [--hx-transition-normal] - Transition timing.\n * @cssprop [--hx-color-neutral-800] - Color.\n * @cssprop [--hx-border-radius-md] - CSS custom property.\n * @cssprop [--hx-nav-shadow] - CSS custom property.\n * @cssprop [--hx-shadow-md] - Box shadow.\n * @cssprop [--hx-z-index-dropdown] - Z-index layer.\n * @cssprop [--hx-space-1-5] - Spacing token.\n * @cssprop [--hx-font-size-xs] - Font size.\n * @cssprop [--hx-color-neutral-300] - Color.\n * @aaa-certified 2026-05-08\n * @aaa-criteria 1.4.6, 1.4.9, 2.1.3, 2.3.3, 2.4.12, 2.4.13, 2.5.5, 3.2.5, 3.3.6, forced-colors, apg-keyboard\n * @aaa-audit src/components/hx-nav/AAA-AUDIT.md\n * @keyboard-contract navigate=Arrow,Home,End; activate=Enter,Space\n * @aria-pattern navigation\n * @aria-pattern-source https://www.w3.org/WAI/ARIA/apg/patterns/landmarks/navigation.html\n * @forced-colors-supported true\n * @stability stable\n * @since 3.7.0\n * @form-associated false\n * @theme-aware true\n * @brand-aware true\n * @drupal-sdc-eligible true\n * @react-wrapper-status complete\n * @figma-component-name hx-nav\n * @priority-tier P0\n * @phi-handles false\n * @clinical-context none\n */\n@customElement('hx-nav')\nexport class HelixNav extends HelixElement {\n static override styles = [helixNavStyles, forcedColorsInteractive];\n\n // ─── Properties ───\n\n /**\n * Navigation items array.\n * @attr items\n */\n @property({\n type: Array,\n converter: {\n fromAttribute(value: string | null): NavItem[] {\n if (!value) return [];\n try {\n const parsed: unknown = JSON.parse(value);\n return Array.isArray(parsed) ? (parsed as NavItem[]) : [];\n } catch {\n return [];\n }\n },\n },\n })\n items: NavItem[] = [];\n\n /**\n * Layout orientation: 'horizontal' (menu bar) or 'vertical' (sidebar).\n * @attr orientation\n */\n @property({ type: String, reflect: true })\n orientation: NavOrientation = 'horizontal';\n\n /**\n * Accessible label for the nav landmark.\n * @attr label\n */\n @property({ type: String })\n label = 'Main navigation';\n\n /** Accessible label for the navigation toggle button when menu is closed. */\n @property({ type: String, attribute: 'label-open-menu' })\n labelOpenMenu = 'Open navigation menu';\n\n /** Accessible label for the navigation toggle button when menu is open. */\n @property({ type: String, attribute: 'label-close-menu' })\n labelCloseMenu = 'Close navigation menu';\n\n // ─── State ───\n\n /**\n * Tracks whether the mobile navigation menu is currently expanded.\n * @internal\n */\n @state() private _mobileOpen = false;\n /**\n * Index of the currently expanded top-level nav item with a submenu, or null if none is expanded.\n * @internal\n */\n @state() private _expandedIndex: number | null = null;\n\n // ─── Private: bound event handler reference ───\n\n /**\n * Stable bound reference to the outside-click handler, stored for addEventListener/removeEventListener symmetry.\n * @internal\n */\n private _boundOutsideClick: (e: MouseEvent) => void = this._handleOutsideClick.bind(this);\n\n /**\n * Stable bound reference to the focusout handler, stored for addEventListener/removeEventListener symmetry.\n * @internal\n */\n private _boundFocusout: (e: FocusEvent) => void = this._handleFocusout.bind(this);\n\n /**\n * Sanitizes a URL to prevent XSS via javascript: or data: URIs.\n * Only allows http:, https:, relative paths, and fragment-only links.\n */\n /** @internal */\n private _sanitizeHref(href: string | undefined): string {\n if (!href || href === '#') return '#';\n // Allow relative paths, fragments, and http(s)\n if (\n href.startsWith('/') ||\n href.startsWith('./') ||\n href.startsWith('../') ||\n href.startsWith('#')\n ) {\n return href;\n }\n if (typeof window === 'undefined') return href;\n try {\n const url = new URL(href, window.location.href);\n if (url.protocol === 'http:' || url.protocol === 'https:') {\n return href;\n }\n } catch {\n // Invalid URL — fall through to safe default\n }\n return '#';\n }\n\n // ─── Event Handling ───\n\n /** @internal */\n private _handleToggle(): void {\n this._mobileOpen = !this._mobileOpen;\n if (!this._mobileOpen) {\n this._expandedIndex = null;\n }\n }\n\n /** @internal */\n private _handleItemClick(item: NavItem, index: number, e: Event): void {\n e.preventDefault();\n if (item.children?.length) {\n this._expandedIndex = this._expandedIndex === index ? null : index;\n } else {\n this._mobileOpen = false;\n this._expandedIndex = null;\n this.dispatchEvent(\n new CustomEvent<{ item: NavItem }>('hx-nav-select', {\n bubbles: true,\n composed: true,\n detail: { item },\n }),\n );\n }\n }\n\n /** @internal */\n private _handleSubItemClick(item: NavItem, e: Event): void {\n e.preventDefault();\n this._mobileOpen = false;\n this._expandedIndex = null;\n this.dispatchEvent(\n new CustomEvent<{ item: NavItem }>('hx-nav-select', {\n bubbles: true,\n composed: true,\n detail: { item },\n }),\n );\n }\n\n /** @internal */\n private _handleKeydown(e: KeyboardEvent, index: number, item: NavItem): void {\n const items = this.shadowRoot?.querySelectorAll<HTMLElement>(\n '[part=\"list\"] > [part=\"item\"] > [part=\"link\"]',\n );\n if (!items) return;\n const itemsArr = Array.from(items);\n const current = itemsArr[index];\n\n switch (e.key) {\n case 'ArrowRight':\n case 'ArrowDown': {\n e.preventDefault();\n if (item.children?.length && e.key === 'ArrowDown' && this.orientation === 'horizontal') {\n // open submenu and focus first item\n this._expandedIndex = index;\n void this.updateComplete.then(() => {\n const firstSub = this.shadowRoot?.querySelector<HTMLElement>(\n `.nav__submenu [part=\"link\"]`,\n );\n firstSub?.focus();\n });\n } else {\n const next = itemsArr[index + 1] ?? itemsArr[0];\n next?.focus();\n }\n break;\n }\n case 'ArrowLeft':\n case 'ArrowUp': {\n e.preventDefault();\n const prev = itemsArr[index - 1] ?? itemsArr[itemsArr.length - 1];\n prev?.focus();\n break;\n }\n case 'Home': {\n e.preventDefault();\n itemsArr[0]?.focus();\n break;\n }\n case 'End': {\n e.preventDefault();\n itemsArr[itemsArr.length - 1]?.focus();\n break;\n }\n case 'Escape': {\n this._expandedIndex = null;\n current?.focus();\n break;\n }\n case 'Enter':\n case ' ': {\n if (item.children?.length) {\n e.preventDefault();\n const wasExpanded = this._expandedIndex === index;\n this._expandedIndex = wasExpanded ? null : index;\n if (!wasExpanded) {\n void this.updateComplete.then(() => {\n const firstSub = this.shadowRoot?.querySelector<HTMLElement>(\n `.nav__submenu:not([hidden]) [part=\"link\"]`,\n );\n firstSub?.focus();\n });\n }\n }\n break;\n }\n }\n }\n\n /** @internal */\n private _handleSubKeydown(e: KeyboardEvent, parentIndex: number): void {\n const subItems = this.shadowRoot?.querySelectorAll<HTMLElement>(\n `.nav__submenu:not([hidden]) [part=\"link\"]`,\n );\n if (!subItems) return;\n const arr = Array.from(subItems);\n const focused = (e.currentTarget ?? e.target) as HTMLElement;\n const currentIdx = arr.indexOf(focused);\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n const next = arr[currentIdx + 1] ?? arr[0];\n next?.focus();\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n const prev = arr[currentIdx - 1] ?? arr[arr.length - 1];\n prev?.focus();\n break;\n }\n case 'Escape': {\n e.preventDefault();\n this._expandedIndex = null;\n const parentLinks = this.shadowRoot?.querySelectorAll<HTMLElement>(\n '[part=\"list\"] > [part=\"item\"] > [part=\"link\"]',\n );\n parentLinks?.[parentIndex]?.focus();\n break;\n }\n }\n }\n\n /** @internal */\n private _handleOutsideClick(e: MouseEvent): void {\n const path = e.composedPath();\n if (!path.includes(this)) {\n this._expandedIndex = null;\n }\n }\n\n /**\n * hx-nav-008: Close expanded submenu when focus moves outside the component.\n * @internal\n */\n private _handleFocusout(e: FocusEvent): void {\n const relatedTarget = e.relatedTarget as Node | null;\n if (relatedTarget && this.contains(relatedTarget)) return;\n if (relatedTarget && this.shadowRoot?.contains(relatedTarget)) return;\n this._expandedIndex = null;\n }\n\n // ─── Lifecycle ───\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (typeof document !== 'undefined') {\n document.addEventListener('click', this._boundOutsideClick);\n }\n this.addEventListener('focusout', this._boundFocusout);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('click', this._boundOutsideClick);\n this.removeEventListener('focusout', this._boundFocusout);\n }\n\n // ─── Render Helpers ───\n\n /** @internal */\n private _renderHamburgerIcon() {\n return html`<svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n ${this._mobileOpen\n ? svg`<line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>`\n : svg`<line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"></line>\n <line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\"></line>\n <line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\"></line>`}\n </svg>`;\n }\n\n /** @internal */\n private _renderChevronIcon() {\n return html`<svg\n class=\"nav__chevron\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M4.5 6L8 9.5 11.5 6\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n fill=\"none\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>`;\n }\n\n /** @internal */\n private _renderSubMenu(children: NavItem[], parentIndex: number, parentLabel: string) {\n const isExpanded = this._expandedIndex === parentIndex;\n return html`\n <ul class=\"nav__submenu\" aria-label=\"${parentLabel} submenu\" ?hidden=${!isExpanded}>\n ${children.map(\n (child) => html`\n <li class=\"nav__submenu-item\">\n <a\n part=\"link\"\n href=${this._sanitizeHref(child.href)}\n class=${classMap({\n nav__link: true,\n 'nav__link--active': !!child.current,\n })}\n aria-current=${child.current ? 'page' : nothing}\n @click=${(e: Event) => this._handleSubItemClick(child, e)}\n @keydown=${(e: KeyboardEvent) => this._handleSubKeydown(e, parentIndex)}\n >\n ${child.label}\n </a>\n </li>\n `,\n )}\n </ul>\n `;\n }\n\n /** @internal */\n private _renderItem(item: NavItem, index: number) {\n const hasChildren = !!item.children?.length;\n const isExpanded = this._expandedIndex === index;\n const hasCurrentChild = hasChildren && !!item.children?.some((child) => child.current);\n\n const linkClasses = {\n nav__link: true,\n 'nav__link--active': !!item.current || hasCurrentChild,\n 'nav__link--has-submenu': hasChildren,\n 'nav__link--expanded': isExpanded,\n };\n\n const content = hasChildren\n ? html`\n <button\n part=\"link\"\n class=${classMap(linkClasses)}\n aria-expanded=${isExpanded ? 'true' : 'false'}\n aria-current=${hasCurrentChild ? 'true' : nothing}\n @click=${(e: Event) => this._handleItemClick(item, index, e)}\n @keydown=${(e: KeyboardEvent) => this._handleKeydown(e, index, item)}\n >\n ${item.label} ${this._renderChevronIcon()}\n </button>\n ${this._renderSubMenu(item.children ?? [], index, item.label)}\n `\n : html`\n <a\n part=\"link\"\n href=${this._sanitizeHref(item.href)}\n class=${classMap(linkClasses)}\n aria-current=${item.current ? 'page' : nothing}\n @click=${(e: Event) => this._handleItemClick(item, index, e)}\n @keydown=${(e: KeyboardEvent) => this._handleKeydown(e, index, item)}\n >\n ${item.label}\n </a>\n `;\n\n return html` <li part=\"item\" class=\"nav__item\">${content}</li> `;\n }\n\n // ─── Render ───\n\n override render() {\n const listClasses = {\n nav__list: true,\n 'nav__list--open': this._mobileOpen,\n };\n\n return html`\n <nav part=\"nav\" aria-label=${this.label}>\n <button\n part=\"toggle\"\n class=\"nav__toggle\"\n aria-expanded=${this._mobileOpen ? 'true' : 'false'}\n aria-controls=\"nav-list\"\n aria-label=${this._mobileOpen ? this.labelCloseMenu : this.labelOpenMenu}\n @click=${this._handleToggle}\n >\n ${this._renderHamburgerIcon()}\n </button>\n\n <ul part=\"list\" id=\"nav-list\" class=${classMap(listClasses)} role=\"list\">\n ${repeat(\n this.items,\n (_item, i) => i,\n (item, i) => this._renderItem(item, i),\n )}\n </ul>\n </nav>\n `;\n }\n}\n\n/** Canonical type alias for the hx-nav component. */\nexport type HxNav = HelixNav;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-nav': HelixNav;\n }\n}\n"],"names":["helixNavStyles","css","HelixNav","HelixElement","href","url","item","index","e","_a","items","itemsArr","current","_b","firstSub","next","prev","_c","_d","_e","wasExpanded","parentIndex","subItems","arr","focused","currentIdx","parentLinks","relatedTarget","html","svg","children","parentLabel","isExpanded","child","classMap","nothing","hasChildren","hasCurrentChild","linkClasses","content","listClasses","repeat","_item","i","forcedColorsInteractive","__decorateClass","property","value","parsed","state","customElement"],"mappings":";;;;;;AAEO,MAAMA,IAAiBC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;ACsGvB,IAAMC,IAAN,cAAuBC,EAAa;AAAA,EAApC,cAAA;AAAA,UAAA,GAAA,SAAA,GAuBL,KAAA,QAAmB,CAAA,GAOnB,KAAA,cAA8B,cAO9B,KAAA,QAAQ,mBAIR,KAAA,gBAAgB,wBAIhB,KAAA,iBAAiB,yBAQR,KAAQ,cAAc,IAKtB,KAAQ,iBAAgC,MAQjD,KAAQ,qBAA8C,KAAK,oBAAoB,KAAK,IAAI,GAMxF,KAAQ,iBAA0C,KAAK,gBAAgB,KAAK,IAAI;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOxE,cAAcC,GAAkC;AACtD,QAAI,CAACA,KAAQA,MAAS,IAAK,QAAO;AAUlC,QAPEA,EAAK,WAAW,GAAG,KACnBA,EAAK,WAAW,IAAI,KACpBA,EAAK,WAAW,KAAK,KACrBA,EAAK,WAAW,GAAG,KAIjB,OAAO,SAAW,IAAa,QAAOA;AAC1C,QAAI;AACF,YAAMC,IAAM,IAAI,IAAID,GAAM,OAAO,SAAS,IAAI;AAC9C,UAAIC,EAAI,aAAa,WAAWA,EAAI,aAAa;AAC/C,eAAOD;AAAA,IAEX,QAAQ;AAAA,IAER;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA,EAKQ,gBAAsB;AAC5B,SAAK,cAAc,CAAC,KAAK,aACpB,KAAK,gBACR,KAAK,iBAAiB;AAAA,EAE1B;AAAA;AAAA,EAGQ,iBAAiBE,GAAeC,GAAeC,GAAgB;;AACrE,IAAAA,EAAE,eAAA,IACEC,IAAAH,EAAK,aAAL,QAAAG,EAAe,SACjB,KAAK,iBAAiB,KAAK,mBAAmBF,IAAQ,OAAOA,KAE7D,KAAK,cAAc,IACnB,KAAK,iBAAiB,MACtB,KAAK;AAAA,MACH,IAAI,YAA+B,iBAAiB;AAAA,QAClD,SAAS;AAAA,QACT,UAAU;AAAA,QACV,QAAQ,EAAE,MAAAD,EAAA;AAAA,MAAK,CAChB;AAAA,IAAA;AAAA,EAGP;AAAA;AAAA,EAGQ,oBAAoBA,GAAeE,GAAgB;AACzD,IAAAA,EAAE,eAAA,GACF,KAAK,cAAc,IACnB,KAAK,iBAAiB,MACtB,KAAK;AAAA,MACH,IAAI,YAA+B,iBAAiB;AAAA,QAClD,SAAS;AAAA,QACT,UAAU;AAAA,QACV,QAAQ,EAAE,MAAAF,EAAA;AAAA,MAAK,CAChB;AAAA,IAAA;AAAA,EAEL;AAAA;AAAA,EAGQ,eAAe,GAAkBC,GAAeD,GAAqB;;AAC3E,UAAMI,KAAQD,IAAA,KAAK,eAAL,gBAAAA,EAAiB;AAAA,MAC7B;AAAA;AAEF,QAAI,CAACC,EAAO;AACZ,UAAMC,IAAW,MAAM,KAAKD,CAAK,GAC3BE,IAAUD,EAASJ,CAAK;AAE9B,YAAQ,EAAE,KAAA;AAAA,MACR,KAAK;AAAA,MACL,KAAK,aAAa;AAEhB,YADA,EAAE,eAAA,IACEM,IAAAP,EAAK,aAAL,QAAAO,EAAe,UAAU,EAAE,QAAQ,eAAe,KAAK,gBAAgB;AAEzE,eAAK,iBAAiBN,GACjB,KAAK,eAAe,KAAK,MAAM;;AAClC,kBAAMO,KAAWL,IAAA,KAAK,eAAL,gBAAAA,EAAiB;AAAA,cAChC;AAAA;AAEF,YAAAK,KAAA,QAAAA,EAAU;AAAA,UACZ,CAAC;AAAA,aACI;AACL,gBAAMC,IAAOJ,EAASJ,IAAQ,CAAC,KAAKI,EAAS,CAAC;AAC9C,UAAAI,KAAA,QAAAA,EAAM;AAAA,QACR;AACA;AAAA,MACF;AAAA,MACA,KAAK;AAAA,MACL,KAAK,WAAW;AACd,UAAE,eAAA;AACF,cAAMC,IAAOL,EAASJ,IAAQ,CAAC,KAAKI,EAASA,EAAS,SAAS,CAAC;AAChE,QAAAK,KAAA,QAAAA,EAAM;AACN;AAAA,MACF;AAAA,MACA,KAAK,QAAQ;AACX,UAAE,eAAA,IACFC,IAAAN,EAAS,CAAC,MAAV,QAAAM,EAAa;AACb;AAAA,MACF;AAAA,MACA,KAAK,OAAO;AACV,UAAE,eAAA,IACFC,IAAAP,EAASA,EAAS,SAAS,CAAC,MAA5B,QAAAO,EAA+B;AAC/B;AAAA,MACF;AAAA,MACA,KAAK,UAAU;AACb,aAAK,iBAAiB,MACtBN,KAAA,QAAAA,EAAS;AACT;AAAA,MACF;AAAA,MACA,KAAK;AAAA,MACL,KAAK,KAAK;AACR,aAAIO,IAAAb,EAAK,aAAL,QAAAa,EAAe,QAAQ;AACzB,YAAE,eAAA;AACF,gBAAMC,IAAc,KAAK,mBAAmBb;AAC5C,eAAK,iBAAiBa,IAAc,OAAOb,GACtCa,KACE,KAAK,eAAe,KAAK,MAAM;;AAClC,kBAAMN,KAAWL,IAAA,KAAK,eAAL,gBAAAA,EAAiB;AAAA,cAChC;AAAA;AAEF,YAAAK,KAAA,QAAAA,EAAU;AAAA,UACZ,CAAC;AAAA,QAEL;AACA;AAAA,MACF;AAAA,IAAA;AAAA,EAEJ;AAAA;AAAA,EAGQ,kBAAkB,GAAkBO,GAA2B;;AACrE,UAAMC,KAAWb,IAAA,KAAK,eAAL,gBAAAA,EAAiB;AAAA,MAChC;AAAA;AAEF,QAAI,CAACa,EAAU;AACf,UAAMC,IAAM,MAAM,KAAKD,CAAQ,GACzBE,IAAW,EAAE,iBAAiB,EAAE,QAChCC,IAAaF,EAAI,QAAQC,CAAO;AAEtC,YAAQ,EAAE,KAAA;AAAA,MACR,KAAK,aAAa;AAChB,UAAE,eAAA;AACF,cAAMT,IAAOQ,EAAIE,IAAa,CAAC,KAAKF,EAAI,CAAC;AACzC,QAAAR,KAAA,QAAAA,EAAM;AACN;AAAA,MACF;AAAA,MACA,KAAK,WAAW;AACd,UAAE,eAAA;AACF,cAAMC,IAAOO,EAAIE,IAAa,CAAC,KAAKF,EAAIA,EAAI,SAAS,CAAC;AACtD,QAAAP,KAAA,QAAAA,EAAM;AACN;AAAA,MACF;AAAA,MACA,KAAK,UAAU;AACb,UAAE,eAAA,GACF,KAAK,iBAAiB;AACtB,cAAMU,KAAcb,IAAA,KAAK,eAAL,gBAAAA,EAAiB;AAAA,UACnC;AAAA;AAEF,SAAAI,IAAAS,KAAA,gBAAAA,EAAcL,OAAd,QAAAJ,EAA4B;AAC5B;AAAA,MACF;AAAA,IAAA;AAAA,EAEJ;AAAA;AAAA,EAGQ,oBAAoB,GAAqB;AAE/C,IADa,EAAE,aAAA,EACL,SAAS,IAAI,MACrB,KAAK,iBAAiB;AAAA,EAE1B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,gBAAgB,GAAqB;;AAC3C,UAAMU,IAAgB,EAAE;AACxB,IAAIA,KAAiB,KAAK,SAASA,CAAa,KAC5CA,OAAiBlB,IAAA,KAAK,eAAL,QAAAA,EAAiB,SAASkB,QAC/C,KAAK,iBAAiB;AAAA,EACxB;AAAA;AAAA,EAIS,oBAA0B;AACjC,UAAM,kBAAA,GACF,OAAO,WAAa,OACtB,SAAS,iBAAiB,SAAS,KAAK,kBAAkB,GAE5D,KAAK,iBAAiB,YAAY,KAAK,cAAc;AAAA,EACvD;AAAA,EAES,uBAA6B;AACpC,UAAM,qBAAA,GACN,SAAS,oBAAoB,SAAS,KAAK,kBAAkB,GAC7D,KAAK,oBAAoB,YAAY,KAAK,cAAc;AAAA,EAC1D;AAAA;AAAA;AAAA,EAKQ,uBAAuB;AAC7B,WAAOC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAUH,KAAK,cACHC;AAAA,2DAEAA;AAAA;AAAA,yDAE+C;AAAA;AAAA,EAEvD;AAAA;AAAA,EAGQ,qBAAqB;AAC3B,WAAOD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBT;AAAA;AAAA,EAGQ,eAAeE,GAAqBT,GAAqBU,GAAqB;AACpF,UAAMC,IAAa,KAAK,mBAAmBX;AAC3C,WAAOO;AAAA,6CACkCG,CAAW,qBAAqB,CAACC,CAAU;AAAA,UAC9EF,EAAS;AAAA,MACT,CAACG,MAAUL;AAAA;AAAA;AAAA;AAAA,uBAIE,KAAK,cAAcK,EAAM,IAAI,CAAC;AAAA,wBAC7BC,EAAS;AAAA,QACf,WAAW;AAAA,QACX,qBAAqB,CAAC,CAACD,EAAM;AAAA,MAAA,CAC9B,CAAC;AAAA,+BACaA,EAAM,UAAU,SAASE,CAAO;AAAA,yBACtC,CAAC3B,MAAa,KAAK,oBAAoByB,GAAOzB,CAAC,CAAC;AAAA,2BAC9C,CAACA,MAAqB,KAAK,kBAAkBA,GAAGa,CAAW,CAAC;AAAA;AAAA,kBAErEY,EAAM,KAAK;AAAA;AAAA;AAAA;AAAA,IAAA,CAIpB;AAAA;AAAA;AAAA,EAGP;AAAA;AAAA,EAGQ,YAAY3B,GAAeC,GAAe;;AAChD,UAAM6B,IAAc,CAAC,GAAC3B,IAAAH,EAAK,aAAL,QAAAG,EAAe,SAC/BuB,IAAa,KAAK,mBAAmBzB,GACrC8B,IAAkBD,KAAe,CAAC,GAACvB,IAAAP,EAAK,aAAL,QAAAO,EAAe,KAAK,CAACoB,MAAUA,EAAM,WAExEK,IAAc;AAAA,MAClB,WAAW;AAAA,MACX,qBAAqB,CAAC,CAAChC,EAAK,WAAW+B;AAAA,MACvC,0BAA0BD;AAAA,MAC1B,uBAAuBJ;AAAA,IAAA,GAGnBO,IAAUH,IACZR;AAAA;AAAA;AAAA,oBAGYM,EAASI,CAAW,CAAC;AAAA,4BACbN,IAAa,SAAS,OAAO;AAAA,2BAC9BK,IAAkB,SAASF,CAAO;AAAA,qBACxC,CAAC3B,MAAa,KAAK,iBAAiBF,GAAMC,GAAOC,CAAC,CAAC;AAAA,uBACjD,CAACA,MAAqB,KAAK,eAAeA,GAAGD,GAAOD,CAAI,CAAC;AAAA;AAAA,cAElEA,EAAK,KAAK,IAAI,KAAK,oBAAoB;AAAA;AAAA,YAEzC,KAAK,eAAeA,EAAK,YAAY,CAAA,GAAIC,GAAOD,EAAK,KAAK,CAAC;AAAA,YAE/DsB;AAAA;AAAA;AAAA,mBAGW,KAAK,cAActB,EAAK,IAAI,CAAC;AAAA,oBAC5B4B,EAASI,CAAW,CAAC;AAAA,2BACdhC,EAAK,UAAU,SAAS6B,CAAO;AAAA,qBACrC,CAAC3B,MAAa,KAAK,iBAAiBF,GAAMC,GAAOC,CAAC,CAAC;AAAA,uBACjD,CAACA,MAAqB,KAAK,eAAeA,GAAGD,GAAOD,CAAI,CAAC;AAAA;AAAA,cAElEA,EAAK,KAAK;AAAA;AAAA;AAIpB,WAAOsB,uCAA0CW,CAAO;AAAA,EAC1D;AAAA;AAAA,EAIS,SAAS;AAChB,UAAMC,IAAc;AAAA,MAClB,WAAW;AAAA,MACX,mBAAmB,KAAK;AAAA,IAAA;AAG1B,WAAOZ;AAAA,mCACwB,KAAK,KAAK;AAAA;AAAA;AAAA;AAAA,0BAInB,KAAK,cAAc,SAAS,OAAO;AAAA;AAAA,uBAEtC,KAAK,cAAc,KAAK,iBAAiB,KAAK,aAAa;AAAA,mBAC/D,KAAK,aAAa;AAAA;AAAA,YAEzB,KAAK,sBAAsB;AAAA;AAAA;AAAA,8CAGOM,EAASM,CAAW,CAAC;AAAA,YACvDC;AAAA,MACA,KAAK;AAAA,MACL,CAACC,GAAOC,MAAMA;AAAA,MACd,CAACrC,GAAMqC,MAAM,KAAK,YAAYrC,GAAMqC,CAAC;AAAA,IAAA,CACtC;AAAA;AAAA;AAAA;AAAA,EAIT;AACF;AA9aazC,EACK,SAAS,CAACF,GAAgB4C,CAAuB;AAsBjEC,EAAA;AAAA,EAdCC,EAAS;AAAA,IACR,MAAM;AAAA,IACN,WAAW;AAAA,MACT,cAAcC,GAAiC;AAC7C,YAAI,CAACA,EAAO,QAAO,CAAA;AACnB,YAAI;AACF,gBAAMC,IAAkB,KAAK,MAAMD,CAAK;AACxC,iBAAO,MAAM,QAAQC,CAAM,IAAKA,IAAuB,CAAA;AAAA,QACzD,QAAQ;AACN,iBAAO,CAAA;AAAA,QACT;AAAA,MACF;AAAA,IAAA;AAAA,EACF,CACD;AAAA,GAtBU9C,EAuBX,WAAA,SAAA,CAAA;AAOA2C,EAAA;AAAA,EADCC,EAAS,EAAE,MAAM,QAAQ,SAAS,IAAM;AAAA,GA7B9B5C,EA8BX,WAAA,eAAA,CAAA;AAOA2C,EAAA;AAAA,EADCC,EAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GApCf5C,EAqCX,WAAA,SAAA,CAAA;AAIA2C,EAAA;AAAA,EADCC,EAAS,EAAE,MAAM,QAAQ,WAAW,mBAAmB;AAAA,GAxC7C5C,EAyCX,WAAA,iBAAA,CAAA;AAIA2C,EAAA;AAAA,EADCC,EAAS,EAAE,MAAM,QAAQ,WAAW,oBAAoB;AAAA,GA5C9C5C,EA6CX,WAAA,kBAAA,CAAA;AAQiB2C,EAAA;AAAA,EAAhBI,EAAA;AAAM,GArDI/C,EAqDM,WAAA,eAAA,CAAA;AAKA2C,EAAA;AAAA,EAAhBI,EAAA;AAAM,GA1DI/C,EA0DM,WAAA,kBAAA,CAAA;AA1DNA,IAAN2C,EAAA;AAAA,EADNK,EAAc,QAAQ;AAAA,GACVhD,CAAA;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { css as A, html as
|
|
1
|
+
import { css as A, html as c, nothing as h } from "lit";
|
|
2
2
|
import { property as p, customElement as T, state as $ } from "lit/decorators.js";
|
|
3
3
|
import { H as I } from "./helix-element-BNEYeiys.js";
|
|
4
4
|
import { c as E } from "./id-counter-DuX8vsui.js";
|
|
@@ -100,8 +100,15 @@ const S = A`
|
|
|
100
100
|
display: flex;
|
|
101
101
|
align-items: center;
|
|
102
102
|
justify-content: center;
|
|
103
|
+
/* Visual icon area stays 2rem (32px) — preserves the side-nav header
|
|
104
|
+
silhouette while the wrapping touch target grows to 44×44 to meet
|
|
105
|
+
WCAG 2.5.5 (Enhanced) AAA. min-width/min-height own the hit area;
|
|
106
|
+
width/height drive the visual painted area, but the button's
|
|
107
|
+
intrinsic size always matches the hit-area floor. */
|
|
103
108
|
width: var(--hx-space-8, 2rem);
|
|
104
109
|
height: var(--hx-space-8, 2rem);
|
|
110
|
+
min-width: var(--hx-touch-target-min, 2.75rem);
|
|
111
|
+
min-height: var(--hx-touch-target-min, 2.75rem);
|
|
105
112
|
margin-inline-start: auto;
|
|
106
113
|
flex-shrink: 0;
|
|
107
114
|
padding: 0;
|
|
@@ -207,10 +214,10 @@ const S = A`
|
|
|
207
214
|
}
|
|
208
215
|
}
|
|
209
216
|
`;
|
|
210
|
-
var H = Object.defineProperty, B = Object.getOwnPropertyDescriptor, u = (e,
|
|
211
|
-
for (var t = i > 1 ? void 0 : i ? B(
|
|
212
|
-
(n = e[l]) && (t = (i ? n(
|
|
213
|
-
return i && t && H(
|
|
217
|
+
var H = Object.defineProperty, B = Object.getOwnPropertyDescriptor, u = (e, r, a, i) => {
|
|
218
|
+
for (var t = i > 1 ? void 0 : i ? B(r, a) : r, l = e.length - 1, n; l >= 0; l--)
|
|
219
|
+
(n = e[l]) && (t = (i ? n(r, a, t) : n(t)) || t);
|
|
220
|
+
return i && t && H(r, a, t), t;
|
|
214
221
|
};
|
|
215
222
|
let x = class extends I {
|
|
216
223
|
constructor() {
|
|
@@ -231,8 +238,8 @@ let x = class extends I {
|
|
|
231
238
|
var a;
|
|
232
239
|
const e = (a = this.shadowRoot) == null ? void 0 : a.querySelector("slot:not([name])");
|
|
233
240
|
if (!e) return;
|
|
234
|
-
const
|
|
235
|
-
for (const i of
|
|
241
|
+
const r = e.assignedElements({ flatten: !0 }).filter((i) => i.tagName.toLowerCase() === "hx-nav-item");
|
|
242
|
+
for (const i of r)
|
|
236
243
|
i instanceof HTMLElement && (this.collapsed ? i.setAttribute("data-collapsed", "") : i.removeAttribute("data-collapsed"));
|
|
237
244
|
}
|
|
238
245
|
/**
|
|
@@ -252,18 +259,18 @@ let x = class extends I {
|
|
|
252
259
|
*/
|
|
253
260
|
/** @internal */
|
|
254
261
|
_handleKeydown(e) {
|
|
255
|
-
var _,
|
|
262
|
+
var _, w, y, k, C;
|
|
256
263
|
if (!["ArrowDown", "ArrowUp", "ArrowRight", "ArrowLeft", "Home", "End"].includes(e.key)) return;
|
|
257
264
|
const a = (_ = this.shadowRoot) == null ? void 0 : _.querySelector("slot:not([name])");
|
|
258
265
|
if (!a) return;
|
|
259
266
|
const i = a.assignedElements({ flatten: !0 }).filter(
|
|
260
|
-
(
|
|
267
|
+
(o) => o.tagName.toLowerCase() === "hx-nav-item" && !o.hasAttribute("disabled")
|
|
261
268
|
);
|
|
262
269
|
if (i.length === 0) return;
|
|
263
270
|
const t = [];
|
|
264
|
-
for (const
|
|
265
|
-
if (t.push(
|
|
266
|
-
const s = (
|
|
271
|
+
for (const o of i)
|
|
272
|
+
if (t.push(o), o.hasAttribute("expanded")) {
|
|
273
|
+
const s = (w = o.shadowRoot) == null ? void 0 : w.querySelector('slot[name="children"]');
|
|
267
274
|
if (s) {
|
|
268
275
|
const g = s.assignedElements({ flatten: !0 }).filter(
|
|
269
276
|
(m) => m.tagName.toLowerCase() === "hx-nav-item" && !m.hasAttribute("disabled")
|
|
@@ -274,22 +281,22 @@ let x = class extends I {
|
|
|
274
281
|
if (t.length === 0) return;
|
|
275
282
|
const l = document.activeElement;
|
|
276
283
|
let n = -1;
|
|
277
|
-
for (let
|
|
278
|
-
const s = t[
|
|
279
|
-
if (s && (s === l || s.contains(l) || ((
|
|
280
|
-
n =
|
|
284
|
+
for (let o = 0; o < t.length; o++) {
|
|
285
|
+
const s = t[o];
|
|
286
|
+
if (s && (s === l || s.contains(l) || ((y = s.shadowRoot) == null ? void 0 : y.contains(l)) === !0)) {
|
|
287
|
+
n = o;
|
|
281
288
|
break;
|
|
282
289
|
}
|
|
283
290
|
}
|
|
284
291
|
if (e.key === "ArrowRight" || e.key === "ArrowLeft") {
|
|
285
292
|
e.preventDefault();
|
|
286
|
-
const
|
|
287
|
-
if (!
|
|
293
|
+
const o = n >= 0 ? t[n] : null;
|
|
294
|
+
if (!o) return;
|
|
288
295
|
if (e.key === "ArrowRight") {
|
|
289
|
-
if (
|
|
290
|
-
|
|
291
|
-
else if (
|
|
292
|
-
const s = (k =
|
|
296
|
+
if (o.hasAttribute("expanded") === !1 && o.querySelector('[slot="children"]'))
|
|
297
|
+
o.setAttribute("expanded", ""), o.expanded = !0;
|
|
298
|
+
else if (o.hasAttribute("expanded")) {
|
|
299
|
+
const s = (k = o.shadowRoot) == null ? void 0 : k.querySelector('slot[name="children"]');
|
|
293
300
|
if (s) {
|
|
294
301
|
const g = s.assignedElements({ flatten: !0 }).find(
|
|
295
302
|
(m) => m.tagName.toLowerCase() === "hx-nav-item" && !m.hasAttribute("disabled")
|
|
@@ -300,10 +307,10 @@ let x = class extends I {
|
|
|
300
307
|
}
|
|
301
308
|
}
|
|
302
309
|
}
|
|
303
|
-
} else if (
|
|
304
|
-
|
|
310
|
+
} else if (o.hasAttribute("expanded"))
|
|
311
|
+
o.removeAttribute("expanded"), o.expanded = !1;
|
|
305
312
|
else {
|
|
306
|
-
const s =
|
|
313
|
+
const s = o.closest("hx-nav-item:not(:scope)") ?? ((C = o.parentElement) == null ? void 0 : C.closest("hx-nav-item")) ?? null;
|
|
307
314
|
s && !s.hasAttribute("disabled") && s.focus();
|
|
308
315
|
}
|
|
309
316
|
return;
|
|
@@ -334,14 +341,14 @@ let x = class extends I {
|
|
|
334
341
|
// ─── Render ───
|
|
335
342
|
/** @internal */
|
|
336
343
|
_renderToggleIcon() {
|
|
337
|
-
return
|
|
344
|
+
return c`<svg viewBox="0 0 20 20" aria-hidden="true">
|
|
338
345
|
<path
|
|
339
346
|
d="M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z"
|
|
340
347
|
/>
|
|
341
348
|
</svg>`;
|
|
342
349
|
}
|
|
343
350
|
render() {
|
|
344
|
-
return
|
|
351
|
+
return c`
|
|
345
352
|
<nav part="nav" class="side-nav" aria-label=${this.label}>
|
|
346
353
|
<div part="header" class="side-nav__header">
|
|
347
354
|
<slot name="header"></slot>
|
|
@@ -683,10 +690,10 @@ const D = A`
|
|
|
683
690
|
}
|
|
684
691
|
}
|
|
685
692
|
`;
|
|
686
|
-
var N = Object.defineProperty, j = Object.getOwnPropertyDescriptor, v = (e,
|
|
687
|
-
for (var t = i > 1 ? void 0 : i ? j(
|
|
688
|
-
(n = e[l]) && (t = (i ? n(
|
|
689
|
-
return i && t && N(
|
|
693
|
+
var N = Object.defineProperty, j = Object.getOwnPropertyDescriptor, v = (e, r, a, i) => {
|
|
694
|
+
for (var t = i > 1 ? void 0 : i ? j(r, a) : r, l = e.length - 1, n; l >= 0; l--)
|
|
695
|
+
(n = e[l]) && (t = (i ? n(r, a, t) : n(t)) || t);
|
|
696
|
+
return i && t && N(r, a, t), t;
|
|
690
697
|
};
|
|
691
698
|
const L = E("hx-nav-item");
|
|
692
699
|
let d = class extends I {
|
|
@@ -697,8 +704,8 @@ let d = class extends I {
|
|
|
697
704
|
static get observedAttributes() {
|
|
698
705
|
return [...super.observedAttributes, "data-collapsed"];
|
|
699
706
|
}
|
|
700
|
-
attributeChangedCallback(e,
|
|
701
|
-
super.attributeChangedCallback(e,
|
|
707
|
+
attributeChangedCallback(e, r, a) {
|
|
708
|
+
super.attributeChangedCallback(e, r, a), e === "data-collapsed" && (this._isCollapsed = a !== null);
|
|
702
709
|
}
|
|
703
710
|
// ─── Public API ───
|
|
704
711
|
/**
|
|
@@ -709,21 +716,21 @@ let d = class extends I {
|
|
|
709
716
|
*/
|
|
710
717
|
focus(e) {
|
|
711
718
|
var a;
|
|
712
|
-
const
|
|
713
|
-
|
|
719
|
+
const r = (a = this.shadowRoot) == null ? void 0 : a.querySelector('[part="link"]');
|
|
720
|
+
r ? r.focus(e) : super.focus(e);
|
|
714
721
|
}
|
|
715
722
|
// ─── Slot Change Handler ───
|
|
716
723
|
/** @internal */
|
|
717
724
|
_onChildrenSlotChange(e) {
|
|
718
|
-
const
|
|
719
|
-
this._hasChildren =
|
|
725
|
+
const r = e.target;
|
|
726
|
+
this._hasChildren = r.assignedNodes({ flatten: !0 }).length > 0;
|
|
720
727
|
}
|
|
721
728
|
// ─── Private Helpers ───
|
|
722
729
|
/** @internal */
|
|
723
730
|
_getDirectText() {
|
|
724
731
|
return Array.from(this.childNodes).filter((e) => e.nodeType === Node.TEXT_NODE).map((e) => {
|
|
725
|
-
var
|
|
726
|
-
return ((
|
|
732
|
+
var r;
|
|
733
|
+
return ((r = e.textContent) == null ? void 0 : r.trim()) ?? "";
|
|
727
734
|
}).filter(Boolean).join(" ");
|
|
728
735
|
}
|
|
729
736
|
/** @internal */
|
|
@@ -732,7 +739,7 @@ let d = class extends I {
|
|
|
732
739
|
}
|
|
733
740
|
/** @internal */
|
|
734
741
|
_renderExpandArrow() {
|
|
735
|
-
return
|
|
742
|
+
return c`<span class="nav-item__arrow" aria-hidden="true">
|
|
736
743
|
<svg viewBox="0 0 20 20">
|
|
737
744
|
<path
|
|
738
745
|
d="M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z"
|
|
@@ -742,7 +749,7 @@ let d = class extends I {
|
|
|
742
749
|
}
|
|
743
750
|
// ─── Render ───
|
|
744
751
|
render() {
|
|
745
|
-
const e = this._getDirectText(),
|
|
752
|
+
const e = this._getDirectText(), r = c`
|
|
746
753
|
<span part="icon" class="nav-item__icon">
|
|
747
754
|
<slot name="icon"></slot>
|
|
748
755
|
</span>
|
|
@@ -752,30 +759,30 @@ let d = class extends I {
|
|
|
752
759
|
<span part="badge" class="nav-item__badge">
|
|
753
760
|
<slot name="badge"></slot>
|
|
754
761
|
</span>
|
|
755
|
-
${this._hasChildren ? this._renderExpandArrow() :
|
|
756
|
-
${this._isCollapsed ?
|
|
757
|
-
`, a = this.href && !this._hasChildren ?
|
|
762
|
+
${this._hasChildren ? this._renderExpandArrow() : h}
|
|
763
|
+
${this._isCollapsed ? c`<span id=${this._tooltipId} class="nav-item__tooltip" role="tooltip">${e}</span>` : h}
|
|
764
|
+
`, a = this.href && !this._hasChildren ? c`<a
|
|
758
765
|
part="link"
|
|
759
766
|
class="nav-item__link"
|
|
760
767
|
href=${this.href}
|
|
761
|
-
aria-current=${this.active ? "page" :
|
|
762
|
-
aria-disabled=${this.disabled ? "true" :
|
|
763
|
-
aria-describedby=${this._isCollapsed ? this._tooltipId :
|
|
768
|
+
aria-current=${this.active ? "page" : h}
|
|
769
|
+
aria-disabled=${this.disabled ? "true" : h}
|
|
770
|
+
aria-describedby=${this._isCollapsed ? this._tooltipId : h}
|
|
764
771
|
tabindex=${this.disabled ? "-1" : "0"}
|
|
765
772
|
>
|
|
766
|
-
${
|
|
767
|
-
</a>` :
|
|
773
|
+
${r}
|
|
774
|
+
</a>` : c`<button
|
|
768
775
|
part="link"
|
|
769
776
|
class="nav-item__link"
|
|
770
|
-
aria-disabled=${this.disabled ? "true" :
|
|
771
|
-
aria-expanded=${this._hasChildren ? String(this.expanded) :
|
|
772
|
-
aria-describedby=${this._isCollapsed ? this._tooltipId :
|
|
777
|
+
aria-disabled=${this.disabled ? "true" : h}
|
|
778
|
+
aria-expanded=${this._hasChildren ? String(this.expanded) : h}
|
|
779
|
+
aria-describedby=${this._isCollapsed ? this._tooltipId : h}
|
|
773
780
|
tabindex=${this.disabled ? "-1" : "0"}
|
|
774
781
|
@click=${this._handleToggle}
|
|
775
782
|
>
|
|
776
|
-
${
|
|
783
|
+
${r}
|
|
777
784
|
</button>`;
|
|
778
|
-
return
|
|
785
|
+
return c`
|
|
779
786
|
<div class="nav-item">
|
|
780
787
|
${a}
|
|
781
788
|
<div part="children" class="nav-item__children" role="group">
|
|
@@ -813,4 +820,4 @@ export {
|
|
|
813
820
|
d as H,
|
|
814
821
|
x as a
|
|
815
822
|
};
|
|
816
|
-
//# sourceMappingURL=hx-nav-item-
|
|
823
|
+
//# sourceMappingURL=hx-nav-item-ClN17f1y.js.map
|