@helixui/library 0.1.0 → 0.1.3
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/README.md +174 -0
- package/custom-elements.json +9943 -9907
- package/dist/components/hx-accordion/hx-accordion.d.ts +1 -0
- package/dist/components/hx-accordion/hx-accordion.d.ts.map +1 -1
- package/dist/components/hx-accordion/index.js +1 -1
- package/dist/components/hx-action-bar/index.js +1 -1
- package/dist/components/hx-alert/index.js +1 -1
- package/dist/components/hx-avatar/index.js +1 -1
- package/dist/components/hx-badge/index.js +1 -1
- package/dist/components/hx-breadcrumb/index.js +1 -1
- package/dist/components/hx-button/index.js +1 -1
- package/dist/components/hx-button-group/index.js +1 -1
- package/dist/components/hx-card/index.js +1 -1
- package/dist/components/hx-carousel/hx-carousel-item.d.ts.map +1 -1
- package/dist/components/hx-carousel/index.js +1 -1
- package/dist/components/hx-checkbox/hx-checkbox.d.ts.map +1 -1
- package/dist/components/hx-checkbox/index.js +1 -1
- package/dist/components/hx-checkbox-group/index.js +1 -1
- package/dist/components/hx-code-snippet/index.js +1 -1
- package/dist/components/hx-color-picker/index.js +1 -1
- package/dist/components/hx-combobox/index.js +1 -1
- package/dist/components/hx-container/index.js +1 -1
- package/dist/components/hx-copy-button/index.js +1 -1
- package/dist/components/hx-data-table/index.js +1 -1
- package/dist/components/hx-date-picker/index.js +1 -1
- package/dist/components/hx-dialog/index.js +1 -1
- package/dist/components/hx-divider/index.js +1 -1
- package/dist/components/hx-drawer/index.js +1 -1
- package/dist/components/hx-dropdown/hx-dropdown.d.ts.map +1 -1
- package/dist/components/hx-dropdown/index.js +1 -1
- package/dist/components/hx-field/index.js +1 -1
- package/dist/components/hx-field-label/index.js +1 -1
- package/dist/components/hx-file-upload/index.js +1 -1
- package/dist/components/hx-format-date/index.js +1 -1
- package/dist/components/hx-grid/index.js +1 -1
- package/dist/components/hx-help-text/index.js +1 -1
- package/dist/components/hx-icon/index.js +1 -1
- package/dist/components/hx-image/index.js +1 -1
- package/dist/components/hx-link/index.js +1 -1
- package/dist/components/hx-list/index.js +1 -1
- package/dist/components/hx-menu/hx-menu.d.ts +1 -0
- package/dist/components/hx-menu/hx-menu.d.ts.map +1 -1
- package/dist/components/hx-menu/index.js +1 -1
- package/dist/components/hx-meter/index.js +1 -1
- package/dist/components/hx-nav/hx-nav.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.map +1 -1
- package/dist/components/hx-number-input/index.js +1 -1
- package/dist/components/hx-overflow-menu/index.js +1 -1
- package/dist/components/hx-pagination/index.js +1 -1
- package/dist/components/hx-popover/index.js +1 -1
- package/dist/components/hx-popup/index.js +1 -1
- package/dist/components/hx-progress-bar/index.js +1 -1
- package/dist/components/hx-progress-ring/index.js +1 -1
- package/dist/components/hx-radio-group/index.js +1 -1
- package/dist/components/hx-rating/index.js +1 -1
- package/dist/components/hx-select/index.js +1 -1
- package/dist/components/hx-side-nav/index.js +1 -1
- package/dist/components/hx-skeleton/index.js +1 -1
- package/dist/components/hx-slider/index.js +1 -1
- package/dist/components/hx-spinner/index.js +1 -1
- package/dist/components/hx-split-button/index.js +1 -1
- package/dist/components/hx-split-panel/index.js +1 -1
- package/dist/components/hx-stack/index.js +1 -1
- package/dist/components/hx-status-indicator/index.js +1 -1
- package/dist/components/hx-steps/index.js +1 -1
- package/dist/components/hx-structured-list/index.js +1 -1
- package/dist/components/hx-switch/index.js +1 -1
- package/dist/components/hx-tabs/hx-tabs.d.ts +2 -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-tag/index.js +1 -1
- package/dist/components/hx-text/index.js +1 -1
- package/dist/components/hx-text-input/index.js +1 -1
- package/dist/components/hx-textarea/hx-textarea.d.ts.map +1 -1
- package/dist/components/hx-textarea/index.js +1 -1
- package/dist/components/hx-theme/index.js +1 -1
- package/dist/components/hx-time-picker/index.js +1 -1
- package/dist/components/hx-toast/hx-toast.d.ts +1 -1
- package/dist/components/hx-toast/index.js +1 -1
- package/dist/components/hx-toggle-button/index.js +1 -1
- package/dist/components/hx-tooltip/index.js +1 -1
- 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/components/hx-tree-view/index.js +1 -1
- package/dist/components/hx-visually-hidden/index.js +1 -1
- package/dist/index.js +70 -70
- package/dist/shared/{hx-accordion-DUkYS5rZ.js → hx-accordion-C84oGPj7.js} +37 -28
- package/dist/shared/{hx-accordion-DUkYS5rZ.js.map → hx-accordion-C84oGPj7.js.map} +1 -1
- package/dist/shared/{hx-action-bar-CwIRFzBx.js → hx-action-bar-DxpGLABm.js} +2 -2
- package/dist/shared/{hx-action-bar-CwIRFzBx.js.map → hx-action-bar-DxpGLABm.js.map} +1 -1
- package/dist/shared/{hx-alert-C3Papw22.js → hx-alert-BQpT4gL3.js} +2 -2
- package/dist/shared/{hx-alert-C3Papw22.js.map → hx-alert-BQpT4gL3.js.map} +1 -1
- package/dist/shared/{hx-avatar-DoHGMrj7.js → hx-avatar-ekyZvOCm.js} +2 -2
- package/dist/shared/{hx-avatar-DoHGMrj7.js.map → hx-avatar-ekyZvOCm.js.map} +1 -1
- package/dist/shared/{hx-badge-BeCmOPr1.js → hx-badge-DYB1Pnym.js} +10 -10
- package/dist/shared/{hx-badge-BeCmOPr1.js.map → hx-badge-DYB1Pnym.js.map} +1 -1
- package/dist/shared/{hx-breadcrumb-item-BSBMWQHz.js → hx-breadcrumb-item-TKRcrMYc.js} +2 -2
- package/dist/shared/{hx-breadcrumb-item-BSBMWQHz.js.map → hx-breadcrumb-item-TKRcrMYc.js.map} +1 -1
- package/dist/shared/{hx-button-p_YAY9Nv.js → hx-button-DpFW7PO3.js} +2 -2
- package/dist/shared/{hx-button-p_YAY9Nv.js.map → hx-button-DpFW7PO3.js.map} +1 -1
- package/dist/shared/{hx-button-group-BbWEDMPb.js → hx-button-group-DxCwaWnu.js} +2 -2
- package/dist/shared/{hx-button-group-BbWEDMPb.js.map → hx-button-group-DxCwaWnu.js.map} +1 -1
- package/dist/shared/{hx-card-DfEGlbZR.js → hx-card-VdiB2Pc4.js} +2 -2
- package/dist/shared/{hx-card-DfEGlbZR.js.map → hx-card-VdiB2Pc4.js.map} +1 -1
- package/dist/shared/{hx-carousel-item-CymJHv1m.js → hx-carousel-item-C2yBnM0r.js} +12 -5
- package/dist/shared/{hx-carousel-item-CymJHv1m.js.map → hx-carousel-item-C2yBnM0r.js.map} +1 -1
- package/dist/shared/{hx-checkbox-CV5c6AE8.js → hx-checkbox-Dq2xXIvl.js} +14 -13
- package/dist/shared/{hx-checkbox-CV5c6AE8.js.map → hx-checkbox-Dq2xXIvl.js.map} +1 -1
- package/dist/shared/{hx-checkbox-group-ClGxYUi0.js → hx-checkbox-group-BLePVahw.js} +15 -15
- package/dist/shared/{hx-checkbox-group-ClGxYUi0.js.map → hx-checkbox-group-BLePVahw.js.map} +1 -1
- package/dist/shared/{hx-code-snippet-CoFaSyuB.js → hx-code-snippet-DjY96OY8.js} +2 -2
- package/dist/shared/{hx-code-snippet-CoFaSyuB.js.map → hx-code-snippet-DjY96OY8.js.map} +1 -1
- package/dist/shared/{hx-color-picker-BF7PA7zf.js → hx-color-picker-O4b_6QXT.js} +2 -2
- package/dist/shared/{hx-color-picker-BF7PA7zf.js.map → hx-color-picker-O4b_6QXT.js.map} +1 -1
- package/dist/shared/{hx-combobox-De4-pDn0.js → hx-combobox-DjMigccw.js} +2 -2
- package/dist/shared/{hx-combobox-De4-pDn0.js.map → hx-combobox-DjMigccw.js.map} +1 -1
- package/dist/shared/{hx-container-DWBtruk3.js → hx-container-COinHjxn.js} +2 -2
- package/dist/shared/{hx-container-DWBtruk3.js.map → hx-container-COinHjxn.js.map} +1 -1
- package/dist/shared/{hx-copy-button-BCy6VMwN.js → hx-copy-button-BXL1xkxb.js} +2 -2
- package/dist/shared/{hx-copy-button-BCy6VMwN.js.map → hx-copy-button-BXL1xkxb.js.map} +1 -1
- package/dist/shared/{hx-data-table-D5huonFo.js → hx-data-table-D3NZvc3P.js} +2 -2
- package/dist/shared/{hx-data-table-D5huonFo.js.map → hx-data-table-D3NZvc3P.js.map} +1 -1
- package/dist/shared/{hx-date-picker-Ckvm0yi9.js → hx-date-picker-CIHwx9b3.js} +2 -2
- package/dist/shared/{hx-date-picker-Ckvm0yi9.js.map → hx-date-picker-CIHwx9b3.js.map} +1 -1
- package/dist/shared/{hx-dialog-D_NXy5rB.js → hx-dialog-1VegS0l1.js} +2 -2
- package/dist/shared/{hx-dialog-D_NXy5rB.js.map → hx-dialog-1VegS0l1.js.map} +1 -1
- package/dist/shared/{hx-divider-BDMW3H-1.js → hx-divider-UdSFzALX.js} +2 -2
- package/dist/shared/{hx-divider-BDMW3H-1.js.map → hx-divider-UdSFzALX.js.map} +1 -1
- package/dist/shared/{hx-drawer-CESgUmre.js → hx-drawer-CenIAGuR.js} +2 -2
- package/dist/shared/{hx-drawer-CESgUmre.js.map → hx-drawer-CenIAGuR.js.map} +1 -1
- package/dist/shared/{hx-dropdown-AZLF-5t6.js → hx-dropdown-DnjLnkTj.js} +31 -31
- package/dist/shared/{hx-dropdown-AZLF-5t6.js.map → hx-dropdown-DnjLnkTj.js.map} +1 -1
- package/dist/shared/{hx-field-vWiKgWIy.js → hx-field-BMyp6hBx.js} +2 -2
- package/dist/shared/{hx-field-vWiKgWIy.js.map → hx-field-BMyp6hBx.js.map} +1 -1
- package/dist/shared/{hx-field-label-CPBvSn_r.js → hx-field-label-Bg-EWvqF.js} +2 -2
- package/dist/shared/{hx-field-label-CPBvSn_r.js.map → hx-field-label-Bg-EWvqF.js.map} +1 -1
- package/dist/shared/{hx-file-upload-Px6kRzAZ.js → hx-file-upload-DnYiIhyN.js} +2 -2
- package/dist/shared/{hx-file-upload-Px6kRzAZ.js.map → hx-file-upload-DnYiIhyN.js.map} +1 -1
- package/dist/shared/{hx-format-date-BIR66MeC.js → hx-format-date-BsVr8gpD.js} +2 -2
- package/dist/shared/{hx-format-date-BIR66MeC.js.map → hx-format-date-BsVr8gpD.js.map} +1 -1
- package/dist/shared/{hx-grid-Dgo7fnWu.js → hx-grid-BsDBCTbt.js} +2 -2
- package/dist/shared/{hx-grid-Dgo7fnWu.js.map → hx-grid-BsDBCTbt.js.map} +1 -1
- package/dist/shared/{hx-help-text-C3WCP11-.js → hx-help-text-DaOPN1iB.js} +2 -2
- package/dist/shared/{hx-help-text-C3WCP11-.js.map → hx-help-text-DaOPN1iB.js.map} +1 -1
- package/dist/shared/{hx-icon-CxOk7jZe.js → hx-icon--xsJztDh.js} +2 -2
- package/dist/shared/{hx-icon-CxOk7jZe.js.map → hx-icon--xsJztDh.js.map} +1 -1
- package/dist/shared/{hx-image-CZPw1AiF.js → hx-image-CzkOEeO4.js} +2 -2
- package/dist/shared/{hx-image-CZPw1AiF.js.map → hx-image-CzkOEeO4.js.map} +1 -1
- package/dist/shared/{hx-link-DObQ7eS4.js → hx-link-D73HP4Lq.js} +2 -2
- package/dist/shared/{hx-link-DObQ7eS4.js.map → hx-link-D73HP4Lq.js.map} +1 -1
- package/dist/shared/{hx-list-B6yPCAAW.js → hx-list-CF-AAnp-.js} +2 -2
- package/dist/shared/{hx-list-B6yPCAAW.js.map → hx-list-CF-AAnp-.js.map} +1 -1
- package/dist/shared/{hx-menu-divider-BgVoqte4.js → hx-menu-divider-Bds6Gn6b.js} +44 -36
- package/dist/shared/hx-menu-divider-Bds6Gn6b.js.map +1 -0
- package/dist/shared/{hx-meter-B5LOo0zD.js → hx-meter-qcXl0zCL.js} +2 -2
- package/dist/shared/{hx-meter-B5LOo0zD.js.map → hx-meter-qcXl0zCL.js.map} +1 -1
- package/dist/shared/{hx-nav-BhtMZCze.js → hx-nav-TK0mPfU6.js} +19 -19
- package/dist/shared/hx-nav-TK0mPfU6.js.map +1 -0
- package/dist/shared/{hx-nav-item-CbNibLuK.js → hx-nav-item-XvXQzMwc.js} +2 -2
- package/dist/shared/{hx-nav-item-CbNibLuK.js.map → hx-nav-item-XvXQzMwc.js.map} +1 -1
- package/dist/shared/{hx-number-input-DgHt4ggr.js → hx-number-input-BJ5XSvjL.js} +22 -19
- package/dist/shared/{hx-number-input-DgHt4ggr.js.map → hx-number-input-BJ5XSvjL.js.map} +1 -1
- package/dist/shared/{hx-overflow-menu-DkbrRDmB.js → hx-overflow-menu-CAS1Mlus.js} +2 -2
- package/dist/shared/{hx-overflow-menu-DkbrRDmB.js.map → hx-overflow-menu-CAS1Mlus.js.map} +1 -1
- package/dist/shared/{hx-pagination-VMEpaOXX.js → hx-pagination-DNFgXQm3.js} +2 -2
- package/dist/shared/{hx-pagination-VMEpaOXX.js.map → hx-pagination-DNFgXQm3.js.map} +1 -1
- package/dist/shared/{hx-popover-DTe00Q46.js → hx-popover-BjAyLbzp.js} +2 -2
- package/dist/shared/{hx-popover-DTe00Q46.js.map → hx-popover-BjAyLbzp.js.map} +1 -1
- package/dist/shared/{hx-popup-5O6q0jf1.js → hx-popup-CYf9Q5sj.js} +2 -2
- package/dist/shared/{hx-popup-5O6q0jf1.js.map → hx-popup-CYf9Q5sj.js.map} +1 -1
- package/dist/shared/{hx-progress-bar-vQnpJ-9N.js → hx-progress-bar-b3_m1hna.js} +2 -2
- package/dist/shared/{hx-progress-bar-vQnpJ-9N.js.map → hx-progress-bar-b3_m1hna.js.map} +1 -1
- package/dist/shared/{hx-progress-ring-DDSW677s.js → hx-progress-ring-QGg5fdis.js} +2 -2
- package/dist/shared/{hx-progress-ring-DDSW677s.js.map → hx-progress-ring-QGg5fdis.js.map} +1 -1
- package/dist/shared/{hx-radio-93uKku6B.js → hx-radio-CWzYFy-I.js} +2 -2
- package/dist/shared/{hx-radio-93uKku6B.js.map → hx-radio-CWzYFy-I.js.map} +1 -1
- package/dist/shared/{hx-rating-t4o150-R.js → hx-rating-C4kTOyHF.js} +2 -2
- package/dist/shared/{hx-rating-t4o150-R.js.map → hx-rating-C4kTOyHF.js.map} +1 -1
- package/dist/shared/{hx-select-DQks1zLJ.js → hx-select-D9bYJcDv.js} +2 -2
- package/dist/shared/{hx-select-DQks1zLJ.js.map → hx-select-D9bYJcDv.js.map} +1 -1
- package/dist/shared/{hx-skeleton-DQQ2SYxF.js → hx-skeleton-BHvALyd7.js} +2 -2
- package/dist/shared/{hx-skeleton-DQQ2SYxF.js.map → hx-skeleton-BHvALyd7.js.map} +1 -1
- package/dist/shared/{hx-slider-BRMWoKZk.js → hx-slider-BMofa55D.js} +2 -2
- package/dist/shared/{hx-slider-BRMWoKZk.js.map → hx-slider-BMofa55D.js.map} +1 -1
- package/dist/shared/{hx-spinner-CcbmN-u_.js → hx-spinner-BOApJ-g9.js} +2 -2
- package/dist/shared/{hx-spinner-CcbmN-u_.js.map → hx-spinner-BOApJ-g9.js.map} +1 -1
- package/dist/shared/{hx-split-button-hBPl-zRv.js → hx-split-button-DhncgAtZ.js} +2 -2
- package/dist/shared/{hx-split-button-hBPl-zRv.js.map → hx-split-button-DhncgAtZ.js.map} +1 -1
- package/dist/shared/{hx-split-panel-C9Sy7XVW.js → hx-split-panel-D9Jg5qKO.js} +2 -2
- package/dist/shared/{hx-split-panel-C9Sy7XVW.js.map → hx-split-panel-D9Jg5qKO.js.map} +1 -1
- package/dist/shared/{hx-stack-B_wODjQX.js → hx-stack-C3xUwi6-.js} +2 -2
- package/dist/shared/{hx-stack-B_wODjQX.js.map → hx-stack-C3xUwi6-.js.map} +1 -1
- package/dist/shared/{hx-status-indicator-CiTQuO5V.js → hx-status-indicator-Mv44COA-.js} +16 -16
- package/dist/shared/{hx-status-indicator-CiTQuO5V.js.map → hx-status-indicator-Mv44COA-.js.map} +1 -1
- package/dist/shared/{hx-step-m5RcyZ61.js → hx-step-nMT0fHEn.js} +2 -2
- package/dist/shared/{hx-step-m5RcyZ61.js.map → hx-step-nMT0fHEn.js.map} +1 -1
- package/dist/shared/{hx-structured-list-ClvSFleR.js → hx-structured-list-DKborM60.js} +2 -2
- package/dist/shared/{hx-structured-list-ClvSFleR.js.map → hx-structured-list-DKborM60.js.map} +1 -1
- package/dist/shared/{hx-switch-BFxgxal8.js → hx-switch-BPvIcDpM.js} +2 -2
- package/dist/shared/{hx-switch-BFxgxal8.js.map → hx-switch-BPvIcDpM.js.map} +1 -1
- package/dist/shared/{hx-tab-panel-8p6KfVzz.js → hx-tab-panel-C7h5lRpw.js} +97 -80
- package/dist/shared/hx-tab-panel-C7h5lRpw.js.map +1 -0
- package/dist/shared/{hx-tag-BP7HJ6_0.js → hx-tag-SJJtMlOS.js} +2 -2
- package/dist/shared/{hx-tag-BP7HJ6_0.js.map → hx-tag-SJJtMlOS.js.map} +1 -1
- package/dist/shared/{hx-text-DDSH1alC.js → hx-text-NjKoQATI.js} +2 -2
- package/dist/shared/{hx-text-DDSH1alC.js.map → hx-text-NjKoQATI.js.map} +1 -1
- package/dist/shared/{hx-text-input-Dv458950.js → hx-text-input-BUMgOQHX.js} +2 -2
- package/dist/shared/{hx-text-input-Dv458950.js.map → hx-text-input-BUMgOQHX.js.map} +1 -1
- package/dist/shared/{hx-textarea-BX8nCfDJ.js → hx-textarea-Bsq5aJf8.js} +14 -14
- package/dist/shared/hx-textarea-Bsq5aJf8.js.map +1 -0
- package/dist/shared/{hx-theme-Dc0nKH7V.js → hx-theme-6GDoUG8j.js} +19 -19
- package/dist/shared/{hx-theme-Dc0nKH7V.js.map → hx-theme-6GDoUG8j.js.map} +1 -1
- package/dist/shared/{hx-time-picker-CA58UCqx.js → hx-time-picker-a-BCkecJ.js} +2 -2
- package/dist/shared/{hx-time-picker-CA58UCqx.js.map → hx-time-picker-a-BCkecJ.js.map} +1 -1
- package/dist/shared/{hx-toast-BTqzF2VV.js → hx-toast-ikwh9Y03.js} +2 -2
- package/dist/shared/{hx-toast-BTqzF2VV.js.map → hx-toast-ikwh9Y03.js.map} +1 -1
- package/dist/shared/{hx-toggle-button-BkDaJgRS.js → hx-toggle-button---Z4zvmn.js} +2 -2
- package/dist/shared/{hx-toggle-button-BkDaJgRS.js.map → hx-toggle-button---Z4zvmn.js.map} +1 -1
- package/dist/shared/{hx-tooltip-wAQWzjlr.js → hx-tooltip-DN6lMlP5.js} +2 -2
- package/dist/shared/{hx-tooltip-wAQWzjlr.js.map → hx-tooltip-DN6lMlP5.js.map} +1 -1
- package/dist/shared/{hx-top-nav-CBxdfPqY.js → hx-top-nav-8lDKNZUj.js} +47 -40
- package/dist/shared/hx-top-nav-8lDKNZUj.js.map +1 -0
- package/dist/shared/{hx-tree-item-BySNNlrw.js → hx-tree-item-CIo3ek2M.js} +2 -2
- package/dist/shared/{hx-tree-item-BySNNlrw.js.map → hx-tree-item-CIo3ek2M.js.map} +1 -1
- package/dist/shared/{hx-visually-hidden-8ycpz6oY.js → hx-visually-hidden-CCTQTjbR.js} +2 -2
- package/dist/shared/{hx-visually-hidden-8ycpz6oY.js.map → hx-visually-hidden-CCTQTjbR.js.map} +1 -1
- package/package.json +20 -3
- package/dist/shared/hx-menu-divider-BgVoqte4.js.map +0 -1
- package/dist/shared/hx-nav-BhtMZCze.js.map +0 -1
- package/dist/shared/hx-tab-panel-8p6KfVzz.js.map +0 -1
- package/dist/shared/hx-textarea-BX8nCfDJ.js.map +0 -1
- package/dist/shared/hx-top-nav-CBxdfPqY.js.map +0 -1
- package/dist/shared/index-nHBAh0Cr.js +0 -74
- package/dist/shared/index-nHBAh0Cr.js.map +0 -1
- package/dist/shared/lit-Dpo7RLp4.js +0 -24
- package/dist/shared/lit-Dpo7RLp4.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hx-top-nav.d.ts","sourceRoot":"","sources":["../../../src/components/hx-top-nav/hx-top-nav.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"hx-top-nav.d.ts","sourceRoot":"","sources":["../../../src/components/hx-top-nav/hx-top-nav.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAM5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,qBACa,WAAY,SAAQ,UAAU;IACzC,OAAgB,MAAM,4BAAoC;IAI1D;;;OAGG;IAEH,MAAM,UAAS;IAEf;;;OAGG;IAEH,KAAK,SAAqB;IAI1B,6DAA6D;IACpD,OAAO,CAAC,WAAW,CAAS;IAI5B,iBAAiB,IAAI,IAAI;IAKzB,oBAAoB,IAAI,IAAI;IAOrC,OAAO,CAAC,mBAAmB;IA0B3B,OAAO,CAAC,cAAc,CAapB;IAIF,OAAO,CAAC,oBAAoB;IA4BnB,MAAM;CAwChB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,YAAY,EAAE,WAAW,CAAC;KAC3B;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hx-top-nav.styles.d.ts","sourceRoot":"","sources":["../../../src/components/hx-top-nav/hx-top-nav.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"hx-top-nav.styles.d.ts","sourceRoot":"","sources":["../../../src/components/hx-top-nav/hx-top-nav.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,yBA2M7B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
import { H as r, a as x } from "./shared/hx-accordion-
|
|
2
|
-
import { H as a } from "./shared/hx-action-bar-
|
|
3
|
-
import { H as i } from "./shared/hx-alert-
|
|
4
|
-
import { H as s } from "./shared/hx-avatar-
|
|
5
|
-
import { H as m } from "./shared/hx-badge-
|
|
6
|
-
import { H as n, a as u } from "./shared/hx-breadcrumb-item-
|
|
7
|
-
import { H as c } from "./shared/hx-button-
|
|
8
|
-
import { H as S } from "./shared/hx-button-group-
|
|
9
|
-
import { H as I } from "./shared/hx-card-
|
|
10
|
-
import { H as P, a as B } from "./shared/hx-carousel-item-
|
|
11
|
-
import { H as k } from "./shared/hx-checkbox-
|
|
12
|
-
import { H as D } from "./shared/hx-checkbox-group-
|
|
13
|
-
import { H as L } from "./shared/hx-code-snippet-
|
|
14
|
-
import { H as F } from "./shared/hx-color-picker-
|
|
15
|
-
import { H as M } from "./shared/hx-combobox-
|
|
16
|
-
import { H as R } from "./shared/hx-container-
|
|
17
|
-
import { H as y } from "./shared/hx-copy-button-
|
|
18
|
-
import { H as O } from "./shared/hx-data-table-
|
|
19
|
-
import { H as j } from "./shared/hx-date-picker-
|
|
20
|
-
import { H as z } from "./shared/hx-dialog-
|
|
21
|
-
import { H as J } from "./shared/hx-divider-
|
|
22
|
-
import { H as Q } from "./shared/hx-drawer-
|
|
23
|
-
import { H as X } from "./shared/hx-dropdown-
|
|
24
|
-
import { H as Z } from "./shared/hx-field-
|
|
25
|
-
import { H as $ } from "./shared/hx-field-label-
|
|
26
|
-
import { H as oe } from "./shared/hx-file-upload-
|
|
1
|
+
import { H as r, a as x } from "./shared/hx-accordion-C84oGPj7.js";
|
|
2
|
+
import { H as a } from "./shared/hx-action-bar-DxpGLABm.js";
|
|
3
|
+
import { H as i } from "./shared/hx-alert-BQpT4gL3.js";
|
|
4
|
+
import { H as s } from "./shared/hx-avatar-ekyZvOCm.js";
|
|
5
|
+
import { H as m } from "./shared/hx-badge-DYB1Pnym.js";
|
|
6
|
+
import { H as n, a as u } from "./shared/hx-breadcrumb-item-TKRcrMYc.js";
|
|
7
|
+
import { H as c } from "./shared/hx-button-DpFW7PO3.js";
|
|
8
|
+
import { H as S } from "./shared/hx-button-group-DxCwaWnu.js";
|
|
9
|
+
import { H as I } from "./shared/hx-card-VdiB2Pc4.js";
|
|
10
|
+
import { H as P, a as B } from "./shared/hx-carousel-item-C2yBnM0r.js";
|
|
11
|
+
import { H as k } from "./shared/hx-checkbox-Dq2xXIvl.js";
|
|
12
|
+
import { H as D } from "./shared/hx-checkbox-group-BLePVahw.js";
|
|
13
|
+
import { H as L } from "./shared/hx-code-snippet-DjY96OY8.js";
|
|
14
|
+
import { H as F } from "./shared/hx-color-picker-O4b_6QXT.js";
|
|
15
|
+
import { H as M } from "./shared/hx-combobox-DjMigccw.js";
|
|
16
|
+
import { H as R } from "./shared/hx-container-COinHjxn.js";
|
|
17
|
+
import { H as y } from "./shared/hx-copy-button-BXL1xkxb.js";
|
|
18
|
+
import { H as O } from "./shared/hx-data-table-D3NZvc3P.js";
|
|
19
|
+
import { H as j } from "./shared/hx-date-picker-CIHwx9b3.js";
|
|
20
|
+
import { H as z } from "./shared/hx-dialog-1VegS0l1.js";
|
|
21
|
+
import { H as J } from "./shared/hx-divider-UdSFzALX.js";
|
|
22
|
+
import { H as Q } from "./shared/hx-drawer-CenIAGuR.js";
|
|
23
|
+
import { H as X } from "./shared/hx-dropdown-DnjLnkTj.js";
|
|
24
|
+
import { H as Z } from "./shared/hx-field-BMyp6hBx.js";
|
|
25
|
+
import { H as $ } from "./shared/hx-field-label-Bg-EWvqF.js";
|
|
26
|
+
import { H as oe } from "./shared/hx-file-upload-DnYiIhyN.js";
|
|
27
27
|
import { H as xe } from "./shared/hx-form-BJeLK34m.js";
|
|
28
|
-
import { H as ae } from "./shared/hx-format-date-
|
|
29
|
-
import { H as ie, a as le } from "./shared/hx-grid-
|
|
30
|
-
import { H as pe } from "./shared/hx-help-text-
|
|
31
|
-
import { H as fe } from "./shared/hx-icon
|
|
32
|
-
import { H as ue } from "./shared/hx-image-
|
|
33
|
-
import { H as ce } from "./shared/hx-link-
|
|
34
|
-
import { H as Se, a as be } from "./shared/hx-list-
|
|
35
|
-
import { H as ge, a as Pe, b as Be } from "./shared/hx-menu-divider-
|
|
36
|
-
import { H as ke } from "./shared/hx-meter-
|
|
37
|
-
import { H as De } from "./shared/hx-nav-
|
|
38
|
-
import { H as Le } from "./shared/hx-number-input-
|
|
39
|
-
import { H as Fe } from "./shared/hx-overflow-menu-
|
|
40
|
-
import { H as Me } from "./shared/hx-pagination-
|
|
41
|
-
import { H as Re } from "./shared/hx-popover-
|
|
42
|
-
import { H as ye } from "./shared/hx-popup-
|
|
43
|
-
import { H as Oe } from "./shared/hx-progress-bar-
|
|
44
|
-
import { H as je } from "./shared/hx-progress-ring-
|
|
28
|
+
import { H as ae } from "./shared/hx-format-date-BsVr8gpD.js";
|
|
29
|
+
import { H as ie, a as le } from "./shared/hx-grid-BsDBCTbt.js";
|
|
30
|
+
import { H as pe } from "./shared/hx-help-text-DaOPN1iB.js";
|
|
31
|
+
import { H as fe } from "./shared/hx-icon--xsJztDh.js";
|
|
32
|
+
import { H as ue } from "./shared/hx-image-CzkOEeO4.js";
|
|
33
|
+
import { H as ce } from "./shared/hx-link-D73HP4Lq.js";
|
|
34
|
+
import { H as Se, a as be } from "./shared/hx-list-CF-AAnp-.js";
|
|
35
|
+
import { H as ge, a as Pe, b as Be } from "./shared/hx-menu-divider-Bds6Gn6b.js";
|
|
36
|
+
import { H as ke } from "./shared/hx-meter-qcXl0zCL.js";
|
|
37
|
+
import { H as De } from "./shared/hx-nav-TK0mPfU6.js";
|
|
38
|
+
import { H as Le } from "./shared/hx-number-input-BJ5XSvjL.js";
|
|
39
|
+
import { H as Fe } from "./shared/hx-overflow-menu-CAS1Mlus.js";
|
|
40
|
+
import { H as Me } from "./shared/hx-pagination-DNFgXQm3.js";
|
|
41
|
+
import { H as Re } from "./shared/hx-popover-BjAyLbzp.js";
|
|
42
|
+
import { H as ye } from "./shared/hx-popup-CYf9Q5sj.js";
|
|
43
|
+
import { H as Oe } from "./shared/hx-progress-bar-b3_m1hna.js";
|
|
44
|
+
import { H as je } from "./shared/hx-progress-ring-QGg5fdis.js";
|
|
45
45
|
import { H as ze } from "./shared/hx-prose-BUkZ8rB3.js";
|
|
46
|
-
import { H as Je, a as Ke } from "./shared/hx-radio-
|
|
47
|
-
import { H as We } from "./shared/hx-rating-
|
|
48
|
-
import { H as Ye } from "./shared/hx-select-
|
|
49
|
-
import { H as _e, a as $e } from "./shared/hx-nav-item-
|
|
50
|
-
import { H as oo } from "./shared/hx-skeleton-
|
|
51
|
-
import { H as xo } from "./shared/hx-slider-
|
|
52
|
-
import { H as ao } from "./shared/hx-spinner-
|
|
53
|
-
import { H as io } from "./shared/hx-split-button-
|
|
54
|
-
import { H as so } from "./shared/hx-split-panel-
|
|
55
|
-
import { H as mo } from "./shared/hx-stack-
|
|
56
|
-
import { H as no } from "./shared/hx-status-indicator-
|
|
57
|
-
import { H as co, a as To } from "./shared/hx-step-
|
|
58
|
-
import { H as bo, a as Io } from "./shared/hx-structured-list-
|
|
59
|
-
import { H as Po } from "./shared/hx-switch-
|
|
60
|
-
import { H as Co, a as ko, b as vo } from "./shared/hx-tab-panel-
|
|
61
|
-
import { H as wo } from "./shared/hx-tag-
|
|
62
|
-
import { H as Ao } from "./shared/hx-text-
|
|
63
|
-
import { H as Go } from "./shared/hx-text-input-
|
|
64
|
-
import { H as No } from "./shared/hx-textarea-
|
|
65
|
-
import { H as ho } from "./shared/hx-theme-
|
|
66
|
-
import { H as Vo } from "./shared/hx-time-picker-
|
|
67
|
-
import { H as Uo, a as jo, t as qo } from "./shared/hx-toast-
|
|
68
|
-
import { H as Eo } from "./shared/hx-toggle-button
|
|
69
|
-
import { H as Ko } from "./shared/hx-tooltip-
|
|
70
|
-
import { H as Wo } from "./shared/hx-top-nav-
|
|
71
|
-
import { H as Yo, a as Zo } from "./shared/hx-tree-item-
|
|
72
|
-
import { H as $o } from "./shared/hx-visually-hidden-
|
|
46
|
+
import { H as Je, a as Ke } from "./shared/hx-radio-CWzYFy-I.js";
|
|
47
|
+
import { H as We } from "./shared/hx-rating-C4kTOyHF.js";
|
|
48
|
+
import { H as Ye } from "./shared/hx-select-D9bYJcDv.js";
|
|
49
|
+
import { H as _e, a as $e } from "./shared/hx-nav-item-XvXQzMwc.js";
|
|
50
|
+
import { H as oo } from "./shared/hx-skeleton-BHvALyd7.js";
|
|
51
|
+
import { H as xo } from "./shared/hx-slider-BMofa55D.js";
|
|
52
|
+
import { H as ao } from "./shared/hx-spinner-BOApJ-g9.js";
|
|
53
|
+
import { H as io } from "./shared/hx-split-button-DhncgAtZ.js";
|
|
54
|
+
import { H as so } from "./shared/hx-split-panel-D9Jg5qKO.js";
|
|
55
|
+
import { H as mo } from "./shared/hx-stack-C3xUwi6-.js";
|
|
56
|
+
import { H as no } from "./shared/hx-status-indicator-Mv44COA-.js";
|
|
57
|
+
import { H as co, a as To } from "./shared/hx-step-nMT0fHEn.js";
|
|
58
|
+
import { H as bo, a as Io } from "./shared/hx-structured-list-DKborM60.js";
|
|
59
|
+
import { H as Po } from "./shared/hx-switch-BPvIcDpM.js";
|
|
60
|
+
import { H as Co, a as ko, b as vo } from "./shared/hx-tab-panel-C7h5lRpw.js";
|
|
61
|
+
import { H as wo } from "./shared/hx-tag-SJJtMlOS.js";
|
|
62
|
+
import { H as Ao } from "./shared/hx-text-NjKoQATI.js";
|
|
63
|
+
import { H as Go } from "./shared/hx-text-input-BUMgOQHX.js";
|
|
64
|
+
import { H as No } from "./shared/hx-textarea-Bsq5aJf8.js";
|
|
65
|
+
import { H as ho } from "./shared/hx-theme-6GDoUG8j.js";
|
|
66
|
+
import { H as Vo } from "./shared/hx-time-picker-a-BCkecJ.js";
|
|
67
|
+
import { H as Uo, a as jo, t as qo } from "./shared/hx-toast-ikwh9Y03.js";
|
|
68
|
+
import { H as Eo } from "./shared/hx-toggle-button---Z4zvmn.js";
|
|
69
|
+
import { H as Ko } from "./shared/hx-tooltip-DN6lMlP5.js";
|
|
70
|
+
import { H as Wo } from "./shared/hx-top-nav-8lDKNZUj.js";
|
|
71
|
+
import { H as Yo, a as Zo } from "./shared/hx-tree-item-CIo3ek2M.js";
|
|
72
|
+
import { H as $o } from "./shared/hx-visually-hidden-CCTQTjbR.js";
|
|
73
73
|
export {
|
|
74
74
|
r as HelixAccordion,
|
|
75
75
|
x as HelixAccordionItem,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { css as b, svg as S, LitElement as w, nothing as D, html as _ } from "lit";
|
|
2
2
|
import { property as m, customElement as E } from "lit/decorators.js";
|
|
3
|
-
import {
|
|
3
|
+
import { tokenStyles as k } from "@helixui/tokens/lit";
|
|
4
4
|
import { classMap as $ } from "lit/directives/class-map.js";
|
|
5
5
|
const A = b`
|
|
6
6
|
:host {
|
|
@@ -133,10 +133,10 @@ const A = b`
|
|
|
133
133
|
}
|
|
134
134
|
}
|
|
135
135
|
`;
|
|
136
|
-
var O = Object.defineProperty, P = Object.getOwnPropertyDescriptor, g = (e,
|
|
137
|
-
for (var
|
|
138
|
-
(a = e[i]) && (
|
|
139
|
-
return t &&
|
|
136
|
+
var O = Object.defineProperty, P = Object.getOwnPropertyDescriptor, g = (e, r, n, t) => {
|
|
137
|
+
for (var o = t > 1 ? void 0 : t ? P(r, n) : r, i = e.length - 1, a; i >= 0; i--)
|
|
138
|
+
(a = e[i]) && (o = (t ? a(r, n, o) : a(o)) || o);
|
|
139
|
+
return t && o && O(r, n, o), o;
|
|
140
140
|
};
|
|
141
141
|
const j = S`
|
|
142
142
|
<svg
|
|
@@ -165,12 +165,12 @@ let l = class extends w {
|
|
|
165
165
|
this.expanded = e, this._dispatchToggleEvent(e);
|
|
166
166
|
}
|
|
167
167
|
_dispatchToggleEvent(e) {
|
|
168
|
-
const
|
|
168
|
+
const r = { expanded: e, itemId: this.id || "" }, n = e ? "hx-expand" : "hx-collapse";
|
|
169
169
|
this.dispatchEvent(
|
|
170
170
|
new CustomEvent(n, {
|
|
171
171
|
bubbles: !0,
|
|
172
172
|
composed: !0,
|
|
173
|
-
detail:
|
|
173
|
+
detail: r
|
|
174
174
|
})
|
|
175
175
|
);
|
|
176
176
|
}
|
|
@@ -230,28 +230,28 @@ g([
|
|
|
230
230
|
l = g([
|
|
231
231
|
E("hx-accordion-item")
|
|
232
232
|
], l);
|
|
233
|
-
var
|
|
234
|
-
for (var
|
|
235
|
-
(a = e[i]) && (
|
|
236
|
-
return t &&
|
|
233
|
+
var L = Object.defineProperty, q = Object.getOwnPropertyDescriptor, C = (e, r, n, t) => {
|
|
234
|
+
for (var o = t > 1 ? void 0 : t ? q(r, n) : r, i = e.length - 1, a; i >= 0; i--)
|
|
235
|
+
(a = e[i]) && (o = (t ? a(r, n, o) : a(o)) || o);
|
|
236
|
+
return t && o && L(r, n, o), o;
|
|
237
237
|
};
|
|
238
238
|
let c = class extends w {
|
|
239
239
|
constructor() {
|
|
240
240
|
super(...arguments), this.mode = "single", this._handleKeyDown = (e) => {
|
|
241
|
-
var f, u,
|
|
241
|
+
var f, u, x, v;
|
|
242
242
|
if (this._getTriggers().length === 0) return;
|
|
243
243
|
const n = ((f = this.shadowRoot) == null ? void 0 : f.activeElement) ?? document.activeElement;
|
|
244
244
|
let t = null;
|
|
245
|
-
const
|
|
246
|
-
for (const d of
|
|
245
|
+
const o = Array.from(this.querySelectorAll("hx-accordion-item"));
|
|
246
|
+
for (const d of o) {
|
|
247
247
|
const y = (u = d.shadowRoot) == null ? void 0 : u.querySelector("summary");
|
|
248
|
-
if (y === n || ((
|
|
248
|
+
if (y === n || ((x = d.shadowRoot) == null ? void 0 : x.activeElement) === y) {
|
|
249
249
|
t = d;
|
|
250
250
|
break;
|
|
251
251
|
}
|
|
252
252
|
}
|
|
253
253
|
if (!t) return;
|
|
254
|
-
const i =
|
|
254
|
+
const i = o.filter((d) => !d.disabled), a = i.indexOf(t);
|
|
255
255
|
if (a === -1) return;
|
|
256
256
|
let s = -1;
|
|
257
257
|
switch (e.key) {
|
|
@@ -271,7 +271,7 @@ let c = class extends w {
|
|
|
271
271
|
return;
|
|
272
272
|
}
|
|
273
273
|
e.preventDefault();
|
|
274
|
-
const h = i[s], p = (
|
|
274
|
+
const h = i[s], p = (v = h == null ? void 0 : h.shadowRoot) == null ? void 0 : v.querySelector("summary");
|
|
275
275
|
p == null || p.focus();
|
|
276
276
|
};
|
|
277
277
|
}
|
|
@@ -289,31 +289,40 @@ let c = class extends w {
|
|
|
289
289
|
_enforceSingleMode() {
|
|
290
290
|
if (this.mode !== "single") return;
|
|
291
291
|
const e = this.querySelectorAll("hx-accordion-item");
|
|
292
|
-
let
|
|
292
|
+
let r = !1;
|
|
293
293
|
e.forEach((n) => {
|
|
294
|
-
n.expanded && (
|
|
294
|
+
n.expanded && (r ? n.expanded = !1 : r = !0);
|
|
295
295
|
});
|
|
296
296
|
}
|
|
297
297
|
_handleChildExpand(e) {
|
|
298
298
|
if (this.mode !== "single") return;
|
|
299
|
-
const
|
|
299
|
+
const r = e.composedPath()[0];
|
|
300
300
|
this.querySelectorAll("hx-accordion-item").forEach((t) => {
|
|
301
|
-
t !==
|
|
301
|
+
t !== r && t.expanded && (t.expanded = !1, t._dispatchToggleEvent(!1));
|
|
302
302
|
});
|
|
303
303
|
}
|
|
304
304
|
_getTriggers() {
|
|
305
|
-
const e = this.querySelectorAll("hx-accordion-item"),
|
|
305
|
+
const e = this.querySelectorAll("hx-accordion-item"), r = [];
|
|
306
306
|
return e.forEach((n) => {
|
|
307
|
-
var
|
|
308
|
-
const t = (
|
|
309
|
-
t &&
|
|
310
|
-
}),
|
|
307
|
+
var o;
|
|
308
|
+
const t = (o = n.shadowRoot) == null ? void 0 : o.querySelector("summary");
|
|
309
|
+
t && r.push(t);
|
|
310
|
+
}), r;
|
|
311
|
+
}
|
|
312
|
+
// ─── Slot validation ───
|
|
313
|
+
_handleSlotChange(e) {
|
|
314
|
+
const r = e.target;
|
|
315
|
+
if (!(r instanceof HTMLSlotElement)) return;
|
|
316
|
+
const n = r.assignedElements().filter((t) => t.tagName.toLowerCase() !== "hx-accordion-item");
|
|
317
|
+
n.length > 0 && console.warn(
|
|
318
|
+
`[hx-accordion] Default slot expects <hx-accordion-item> elements. Found unexpected: ${n.map((t) => `<${t.tagName.toLowerCase()}>`).join(", ")}`
|
|
319
|
+
);
|
|
311
320
|
}
|
|
312
321
|
// ─── Render ───
|
|
313
322
|
render() {
|
|
314
323
|
return _`
|
|
315
324
|
<div part="accordion" class="accordion">
|
|
316
|
-
<slot></slot>
|
|
325
|
+
<slot @slotchange=${this._handleSlotChange}></slot>
|
|
317
326
|
</div>
|
|
318
327
|
`;
|
|
319
328
|
}
|
|
@@ -329,4 +338,4 @@ export {
|
|
|
329
338
|
c as H,
|
|
330
339
|
l as a
|
|
331
340
|
};
|
|
332
|
-
//# sourceMappingURL=hx-accordion-
|
|
341
|
+
//# sourceMappingURL=hx-accordion-C84oGPj7.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hx-accordion-DUkYS5rZ.js","sources":["../../src/components/hx-accordion/hx-accordion.styles.ts","../../src/components/hx-accordion/hx-accordion-item.styles.ts","../../src/components/hx-accordion/hx-accordion-item.ts","../../src/components/hx-accordion/hx-accordion.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixAccordionStyles = css`\n :host {\n display: block;\n font-family: var(--hx-font-family-sans, sans-serif);\n }\n\n .accordion {\n border-radius: var(--hx-accordion-border-radius, var(--hx-border-radius-md, 0.375rem));\n overflow: hidden;\n }\n`;\n","import { css } from 'lit';\n\nexport const helixAccordionItemStyles = css`\n :host {\n display: block;\n }\n\n .item {\n border-bottom: var(--hx-border-width-thin, 1px) solid\n var(--hx-accordion-border-color, var(--hx-color-neutral-200, #dee2e6));\n font-family: var(--hx-font-family-sans, sans-serif);\n }\n\n :host(:first-child) .item {\n border-top: var(--hx-border-width-thin, 1px) solid\n var(--hx-accordion-border-color, var(--hx-color-neutral-200, #dee2e6));\n }\n\n /* Remove native details marker */\n .trigger {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--hx-space-3, 0.75rem);\n padding: var(--hx-accordion-trigger-padding, var(--hx-space-4, 1rem));\n cursor: pointer;\n list-style: none;\n font-size: var(--hx-font-size-md, 1rem);\n font-weight: var(--hx-font-weight-semibold, 600);\n color: var(--hx-accordion-trigger-color, var(--hx-color-neutral-800, #212529));\n background-color: var(--hx-accordion-trigger-bg, transparent);\n user-select: none;\n transition: background-color var(--hx-transition-fast, 150ms ease);\n }\n\n /* Hide the native details disclosure triangle */\n .trigger::-webkit-details-marker {\n display: none;\n }\n\n .trigger::marker {\n display: none;\n }\n\n .item--disabled .trigger {\n cursor: not-allowed;\n }\n\n :host(:not([disabled])) .trigger:hover {\n background-color: var(--hx-accordion-trigger-hover-bg, var(--hx-color-neutral-50, #f8f9fa));\n }\n\n .trigger:focus-visible {\n outline: var(--hx-focus-ring-width, 2px) solid\n var(--hx-focus-ring-color, var(--hx-color-primary-500, #2563eb));\n outline-offset: var(--hx-focus-ring-offset, -2px);\n }\n\n /* ─── Icon ─── */\n\n .icon {\n flex-shrink: 0;\n width: 1.25rem;\n height: 1.25rem;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--hx-accordion-icon-color, var(--hx-color-neutral-500, #6c757d));\n transition: transform var(--hx-transition-normal, 250ms ease);\n }\n\n .item--expanded .icon {\n transform: rotate(180deg);\n }\n\n /* ─── Content animation via CSS grid trick ─── */\n\n .content-wrapper {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows var(--hx-transition-normal, 250ms ease);\n overflow: hidden;\n }\n\n .item--expanded .content-wrapper,\n details[open]:not(.item--expanded) .content-wrapper {\n grid-template-rows: 1fr;\n }\n\n .content-inner {\n overflow: hidden;\n }\n\n .content {\n padding: var(--hx-accordion-content-padding, 0 var(--hx-space-4, 1rem) var(--hx-space-4, 1rem));\n font-size: var(--hx-font-size-md, 1rem);\n line-height: var(--hx-line-height-normal, 1.5);\n color: var(--hx-accordion-content-color, var(--hx-color-neutral-600, #495057));\n }\n\n /* ─── Disabled host ─── */\n\n :host([disabled]) {\n pointer-events: none;\n opacity: 0.5;\n }\n\n /* ─── Reduced motion ─── */\n\n @media (prefers-reduced-motion: reduce) {\n .trigger {\n transition: none;\n }\n\n .icon {\n transition: none;\n }\n\n .content-wrapper {\n transition: none;\n }\n }\n`;\n","import { LitElement, html, svg, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { tokenStyles } from '@helixui/tokens/lit';\nimport { helixAccordionItemStyles } from './hx-accordion-item.styles.js';\n\nconst chevronIcon = svg`\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n`;\n\n/**\n * An individual accordion item with collapsible content.\n *\n * @summary Collapsible panel that can be expanded or collapsed.\n *\n * @tag hx-accordion-item\n *\n * @slot trigger - The heading/trigger content for this item.\n * @slot - Default slot for the collapsible body content.\n *\n * @fires {CustomEvent<{expanded: boolean, itemId: string}>} hx-expand - Dispatched when the item is expanded.\n * @fires {CustomEvent<{expanded: boolean, itemId: string}>} hx-collapse - Dispatched when the item is collapsed.\n *\n * @csspart item - The outer details element container.\n * @csspart trigger - The summary/trigger element.\n * @csspart content - The collapsible content area.\n * @csspart icon - The expand/collapse icon.\n *\n * @cssprop [--hx-accordion-border-color=var(--hx-color-neutral-200)] - Border color between items.\n * @cssprop [--hx-accordion-trigger-padding=var(--hx-space-4)] - Trigger padding.\n * @cssprop [--hx-accordion-trigger-color=var(--hx-color-neutral-800)] - Trigger text color.\n * @cssprop [--hx-accordion-trigger-bg=transparent] - Trigger background color.\n * @cssprop [--hx-accordion-trigger-hover-bg=var(--hx-color-neutral-50)] - Trigger hover background.\n * @cssprop [--hx-accordion-icon-color=var(--hx-color-neutral-500)] - Icon color.\n * @cssprop [--hx-accordion-content-padding=0 var(--hx-space-4) var(--hx-space-4)] - Content padding.\n * @cssprop [--hx-accordion-content-color=var(--hx-color-neutral-600)] - Content text color.\n */\n@customElement('hx-accordion-item')\nexport class HelixAccordionItem extends LitElement {\n static override styles = [tokenStyles, helixAccordionItemStyles];\n\n /**\n * Whether this item is expanded.\n * @attr expanded\n */\n @property({ type: Boolean, reflect: true })\n expanded = false;\n\n /**\n * Whether this item is disabled (cannot be toggled).\n * @attr disabled\n */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n // ─── Toggle Logic ───\n\n private _toggle(): void {\n if (this.disabled) return;\n\n const willExpand = !this.expanded;\n this.expanded = willExpand;\n\n this._dispatchToggleEvent(willExpand);\n }\n\n _dispatchToggleEvent(expanded: boolean): void {\n const detail = { expanded, itemId: this.id || '' };\n const eventName = expanded ? 'hx-expand' : 'hx-collapse';\n\n this.dispatchEvent(\n new CustomEvent(eventName, {\n bubbles: true,\n composed: true,\n detail,\n }),\n );\n }\n\n // ─── Event Handlers ───\n\n private _handleSummaryClick(e: MouseEvent): void {\n e.preventDefault();\n this._toggle();\n }\n\n private _handleKeyDown(e: KeyboardEvent): void {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this._toggle();\n }\n }\n\n // ─── Render ───\n\n override render() {\n const itemClasses = {\n item: true,\n 'item--expanded': this.expanded,\n 'item--disabled': this.disabled,\n };\n\n return html`\n <details part=\"item\" class=${classMap(itemClasses)} ?open=${this.expanded}>\n <summary\n id=\"trigger\"\n part=\"trigger\"\n class=\"trigger\"\n tabindex=${this.disabled ? '-1' : '0'}\n aria-expanded=${this.expanded ? 'true' : 'false'}\n aria-disabled=${this.disabled ? 'true' : 'false'}\n @click=${this._handleSummaryClick}\n @keydown=${this._handleKeyDown}\n >\n <slot name=\"trigger\"></slot>\n <span part=\"icon\" class=\"icon\">${chevronIcon}</span>\n </summary>\n <div class=\"content-wrapper\">\n <div class=\"content-inner\">\n <div\n part=\"content\"\n class=\"content\"\n role=\"region\"\n aria-labelledby=\"trigger\"\n aria-hidden=${this.expanded ? nothing : 'true'}\n >\n <slot></slot>\n </div>\n </div>\n </div>\n </details>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-accordion-item': HelixAccordionItem;\n }\n}\n","import { LitElement, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { tokenStyles } from '@helixui/tokens/lit';\nimport { helixAccordionStyles } from './hx-accordion.styles.js';\nimport './hx-accordion-item.js';\nimport type { HelixAccordionItem } from './hx-accordion-item.js';\n\n/**\n * An accordion container that manages collapsible content sections.\n *\n * @summary Collapsible content sections with single or multi-expand modes.\n *\n * @tag hx-accordion\n *\n * @slot - Default slot for hx-accordion-item elements.\n *\n * @cssprop [--hx-accordion-border-radius=var(--hx-border-radius-md)] - Outer border radius.\n *\n * @example\n * ```html\n * <hx-accordion mode=\"single\">\n * <hx-accordion-item>\n * <span slot=\"trigger\">What is this?</span>\n * <p>Answer content here.</p>\n * </hx-accordion-item>\n * </hx-accordion>\n * ```\n */\n@customElement('hx-accordion')\nexport class HelixAccordion extends LitElement {\n static override styles = [tokenStyles, helixAccordionStyles];\n\n /**\n * Expansion mode: 'single' collapses all other items when one expands.\n * 'multi' allows multiple items open simultaneously.\n * @attr mode\n */\n @property({ type: String, reflect: true })\n mode: 'single' | 'multi' = 'single';\n\n // ─── Lifecycle ───\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('hx-expand', this._handleChildExpand as EventListener);\n this.addEventListener('keydown', this._handleKeyDown);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('hx-expand', this._handleChildExpand as EventListener);\n this.removeEventListener('keydown', this._handleKeyDown);\n }\n\n protected override firstUpdated(): void {\n this._enforceSingleMode();\n }\n\n // ─── Single-expand coordination ───\n\n private _enforceSingleMode(): void {\n if (this.mode !== 'single') return;\n\n const items = this.querySelectorAll<HelixAccordionItem>('hx-accordion-item');\n let foundExpanded = false;\n\n items.forEach((item) => {\n if (item.expanded) {\n if (foundExpanded) {\n item.expanded = false;\n } else {\n foundExpanded = true;\n }\n }\n });\n }\n\n private _handleChildExpand(e: CustomEvent<{ expanded: boolean; itemId: string }>): void {\n if (this.mode !== 'single') return;\n\n const expandedItem = e.composedPath()[0] as HelixAccordionItem;\n const items = this.querySelectorAll<HelixAccordionItem>('hx-accordion-item');\n\n items.forEach((item) => {\n if (item !== expandedItem && item.expanded) {\n item.expanded = false;\n item._dispatchToggleEvent(false);\n }\n });\n }\n\n // ─── Arrow key navigation (ARIA APG Accordion pattern) ───\n\n private _handleKeyDown = (e: KeyboardEvent): void => {\n const triggers = this._getTriggers();\n if (triggers.length === 0) return;\n\n const activeEl = this.shadowRoot?.activeElement ?? document.activeElement;\n let currentItem: HelixAccordionItem | null = null;\n\n const items = Array.from(this.querySelectorAll<HelixAccordionItem>('hx-accordion-item'));\n for (const item of items) {\n const summary = item.shadowRoot?.querySelector('summary');\n if (summary === activeEl || item.shadowRoot?.activeElement === summary) {\n currentItem = item;\n break;\n }\n }\n\n if (!currentItem) return;\n\n const enabledItems = items.filter((item) => !item.disabled);\n const currentIndex = enabledItems.indexOf(currentItem);\n if (currentIndex === -1) return;\n\n let targetIndex = -1;\n\n switch (e.key) {\n case 'ArrowDown':\n targetIndex = (currentIndex + 1) % enabledItems.length;\n break;\n case 'ArrowUp':\n targetIndex = (currentIndex - 1 + enabledItems.length) % enabledItems.length;\n break;\n case 'Home':\n targetIndex = 0;\n break;\n case 'End':\n targetIndex = enabledItems.length - 1;\n break;\n default:\n return;\n }\n\n e.preventDefault();\n const targetItem = enabledItems[targetIndex];\n const targetSummary = targetItem?.shadowRoot?.querySelector('summary');\n targetSummary?.focus();\n };\n\n private _getTriggers(): HTMLElement[] {\n const items = this.querySelectorAll<HelixAccordionItem>('hx-accordion-item');\n const triggers: HTMLElement[] = [];\n items.forEach((item) => {\n const summary = item.shadowRoot?.querySelector<HTMLElement>('summary');\n if (summary) triggers.push(summary);\n });\n return triggers;\n }\n\n // ─── Render ───\n\n override render() {\n return html`\n <div part=\"accordion\" class=\"accordion\">\n <slot></slot>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-accordion': HelixAccordion;\n }\n}\n"],"names":["helixAccordionStyles","css","helixAccordionItemStyles","chevronIcon","svg","HelixAccordionItem","LitElement","willExpand","expanded","detail","eventName","itemClasses","html","classMap","nothing","tokenStyles","__decorateClass","property","customElement","HelixAccordion","activeEl","_a","currentItem","items","item","summary","_b","_c","enabledItems","currentIndex","targetIndex","targetItem","targetSummary","_d","foundExpanded","expandedItem","triggers"],"mappings":";;;;AAEO,MAAMA,IAAuBC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GCAvBC,IAA2BD;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;;;;;;ACIxC,MAAME,IAAcC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6Cb,IAAMC,IAAN,cAAiCC,EAAW;AAAA,EAA5C,cAAA;AAAA,UAAA,GAAA,SAAA,GAQL,KAAA,WAAW,IAOX,KAAA,WAAW;AAAA,EAAA;AAAA;AAAA,EAIH,UAAgB;AACtB,QAAI,KAAK,SAAU;AAEnB,UAAMC,IAAa,CAAC,KAAK;AACzB,SAAK,WAAWA,GAEhB,KAAK,qBAAqBA,CAAU;AAAA,EACtC;AAAA,EAEA,qBAAqBC,GAAyB;AAC5C,UAAMC,IAAS,EAAE,UAAAD,GAAU,QAAQ,KAAK,MAAM,GAAA,GACxCE,IAAYF,IAAW,cAAc;AAE3C,SAAK;AAAA,MACH,IAAI,YAAYE,GAAW;AAAA,QACzB,SAAS;AAAA,QACT,UAAU;AAAA,QACV,QAAAD;AAAA,MAAA,CACD;AAAA,IAAA;AAAA,EAEL;AAAA;AAAA,EAIQ,oBAAoB,GAAqB;AAC/C,MAAE,eAAA,GACF,KAAK,QAAA;AAAA,EACP;AAAA,EAEQ,eAAe,GAAwB;AAC7C,KAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,SACjC,EAAE,eAAA,GACF,KAAK,QAAA;AAAA,EAET;AAAA;AAAA,EAIS,SAAS;AAChB,UAAME,IAAc;AAAA,MAClB,MAAM;AAAA,MACN,kBAAkB,KAAK;AAAA,MACvB,kBAAkB,KAAK;AAAA,IAAA;AAGzB,WAAOC;AAAA,mCACwBC,EAASF,CAAW,CAAC,UAAU,KAAK,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,qBAK1D,KAAK,WAAW,OAAO,GAAG;AAAA,0BACrB,KAAK,WAAW,SAAS,OAAO;AAAA,0BAChC,KAAK,WAAW,SAAS,OAAO;AAAA,mBACvC,KAAK,mBAAmB;AAAA,qBACtB,KAAK,cAAc;AAAA;AAAA;AAAA,2CAGGR,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAS1B,KAAK,WAAWW,IAAU,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ1D;AACF;AA/FaT,EACK,SAAS,CAACU,GAAab,CAAwB;AAO/Dc,EAAA;AAAA,EADCC,EAAS,EAAE,MAAM,SAAS,SAAS,IAAM;AAAA,GAP/BZ,EAQX,WAAA,YAAA,CAAA;AAOAW,EAAA;AAAA,EADCC,EAAS,EAAE,MAAM,SAAS,SAAS,IAAM;AAAA,GAd/BZ,EAeX,WAAA,YAAA,CAAA;AAfWA,IAANW,EAAA;AAAA,EADNE,EAAc,mBAAmB;AAAA,GACrBb,CAAA;;;;;;ACtBN,IAAMc,IAAN,cAA6Bb,EAAW;AAAA,EAAxC,cAAA;AAAA,UAAA,GAAA,SAAA,GASL,KAAA,OAA2B,UAuD3B,KAAQ,iBAAiB,CAAC,MAA2B;;AAEnD,UADiB,KAAK,aAAA,EACT,WAAW,EAAG;AAE3B,YAAMc,MAAWC,IAAA,KAAK,eAAL,gBAAAA,EAAiB,kBAAiB,SAAS;AAC5D,UAAIC,IAAyC;AAE7C,YAAMC,IAAQ,MAAM,KAAK,KAAK,iBAAqC,mBAAmB,CAAC;AACvF,iBAAWC,KAAQD,GAAO;AACxB,cAAME,KAAUC,IAAAF,EAAK,eAAL,gBAAAE,EAAiB,cAAc;AAC/C,YAAID,MAAYL,OAAYO,IAAAH,EAAK,eAAL,gBAAAG,EAAiB,mBAAkBF,GAAS;AACtE,UAAAH,IAAcE;AACd;AAAA,QACF;AAAA,MACF;AAEA,UAAI,CAACF,EAAa;AAElB,YAAMM,IAAeL,EAAM,OAAO,CAACC,MAAS,CAACA,EAAK,QAAQ,GACpDK,IAAeD,EAAa,QAAQN,CAAW;AACrD,UAAIO,MAAiB,GAAI;AAEzB,UAAIC,IAAc;AAElB,cAAQ,EAAE,KAAA;AAAA,QACR,KAAK;AACH,UAAAA,KAAeD,IAAe,KAAKD,EAAa;AAChD;AAAA,QACF,KAAK;AACH,UAAAE,KAAeD,IAAe,IAAID,EAAa,UAAUA,EAAa;AACtE;AAAA,QACF,KAAK;AACH,UAAAE,IAAc;AACd;AAAA,QACF,KAAK;AACH,UAAAA,IAAcF,EAAa,SAAS;AACpC;AAAA,QACF;AACE;AAAA,MAAA;AAGJ,QAAE,eAAA;AACF,YAAMG,IAAaH,EAAaE,CAAW,GACrCE,KAAgBC,IAAAF,KAAA,gBAAAA,EAAY,eAAZ,gBAAAE,EAAwB,cAAc;AAC5D,MAAAD,KAAA,QAAAA,EAAe;AAAA,IACjB;AAAA,EAAA;AAAA;AAAA,EAhGS,oBAA0B;AACjC,UAAM,kBAAA,GACN,KAAK,iBAAiB,aAAa,KAAK,kBAAmC,GAC3E,KAAK,iBAAiB,WAAW,KAAK,cAAc;AAAA,EACtD;AAAA,EAES,uBAA6B;AACpC,UAAM,qBAAA,GACN,KAAK,oBAAoB,aAAa,KAAK,kBAAmC,GAC9E,KAAK,oBAAoB,WAAW,KAAK,cAAc;AAAA,EACzD;AAAA,EAEmB,eAAqB;AACtC,SAAK,mBAAA;AAAA,EACP;AAAA;AAAA,EAIQ,qBAA2B;AACjC,QAAI,KAAK,SAAS,SAAU;AAE5B,UAAMT,IAAQ,KAAK,iBAAqC,mBAAmB;AAC3E,QAAIW,IAAgB;AAEpB,IAAAX,EAAM,QAAQ,CAACC,MAAS;AACtB,MAAIA,EAAK,aACHU,IACFV,EAAK,WAAW,KAEhBU,IAAgB;AAAA,IAGtB,CAAC;AAAA,EACH;AAAA,EAEQ,mBAAmB,GAA6D;AACtF,QAAI,KAAK,SAAS,SAAU;AAE5B,UAAMC,IAAe,EAAE,aAAA,EAAe,CAAC;AAGvC,IAFc,KAAK,iBAAqC,mBAAmB,EAErE,QAAQ,CAACX,MAAS;AACtB,MAAIA,MAASW,KAAgBX,EAAK,aAChCA,EAAK,WAAW,IAChBA,EAAK,qBAAqB,EAAK;AAAA,IAEnC,CAAC;AAAA,EACH;AAAA,EAmDQ,eAA8B;AACpC,UAAMD,IAAQ,KAAK,iBAAqC,mBAAmB,GACrEa,IAA0B,CAAA;AAChC,WAAAb,EAAM,QAAQ,CAACC,MAAS;;AACtB,YAAMC,KAAUJ,IAAAG,EAAK,eAAL,gBAAAH,EAAiB,cAA2B;AAC5D,MAAII,KAASW,EAAS,KAAKX,CAAO;AAAA,IACpC,CAAC,GACMW;AAAA,EACT;AAAA;AAAA,EAIS,SAAS;AAChB,WAAOxB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKT;AACF;AAlIaO,EACK,SAAS,CAACJ,GAAaf,CAAoB;AAQ3DgB,EAAA;AAAA,EADCC,EAAS,EAAE,MAAM,QAAQ,SAAS,IAAM;AAAA,GAR9BE,EASX,WAAA,QAAA,CAAA;AATWA,IAANH,EAAA;AAAA,EADNE,EAAc,cAAc;AAAA,GAChBC,CAAA;"}
|
|
1
|
+
{"version":3,"file":"hx-accordion-C84oGPj7.js","sources":["../../src/components/hx-accordion/hx-accordion.styles.ts","../../src/components/hx-accordion/hx-accordion-item.styles.ts","../../src/components/hx-accordion/hx-accordion-item.ts","../../src/components/hx-accordion/hx-accordion.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixAccordionStyles = css`\n :host {\n display: block;\n font-family: var(--hx-font-family-sans, sans-serif);\n }\n\n .accordion {\n border-radius: var(--hx-accordion-border-radius, var(--hx-border-radius-md, 0.375rem));\n overflow: hidden;\n }\n`;\n","import { css } from 'lit';\n\nexport const helixAccordionItemStyles = css`\n :host {\n display: block;\n }\n\n .item {\n border-bottom: var(--hx-border-width-thin, 1px) solid\n var(--hx-accordion-border-color, var(--hx-color-neutral-200, #dee2e6));\n font-family: var(--hx-font-family-sans, sans-serif);\n }\n\n :host(:first-child) .item {\n border-top: var(--hx-border-width-thin, 1px) solid\n var(--hx-accordion-border-color, var(--hx-color-neutral-200, #dee2e6));\n }\n\n /* Remove native details marker */\n .trigger {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--hx-space-3, 0.75rem);\n padding: var(--hx-accordion-trigger-padding, var(--hx-space-4, 1rem));\n cursor: pointer;\n list-style: none;\n font-size: var(--hx-font-size-md, 1rem);\n font-weight: var(--hx-font-weight-semibold, 600);\n color: var(--hx-accordion-trigger-color, var(--hx-color-neutral-800, #212529));\n background-color: var(--hx-accordion-trigger-bg, transparent);\n user-select: none;\n transition: background-color var(--hx-transition-fast, 150ms ease);\n }\n\n /* Hide the native details disclosure triangle */\n .trigger::-webkit-details-marker {\n display: none;\n }\n\n .trigger::marker {\n display: none;\n }\n\n .item--disabled .trigger {\n cursor: not-allowed;\n }\n\n :host(:not([disabled])) .trigger:hover {\n background-color: var(--hx-accordion-trigger-hover-bg, var(--hx-color-neutral-50, #f8f9fa));\n }\n\n .trigger:focus-visible {\n outline: var(--hx-focus-ring-width, 2px) solid\n var(--hx-focus-ring-color, var(--hx-color-primary-500, #2563eb));\n outline-offset: var(--hx-focus-ring-offset, -2px);\n }\n\n /* ─── Icon ─── */\n\n .icon {\n flex-shrink: 0;\n width: 1.25rem;\n height: 1.25rem;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--hx-accordion-icon-color, var(--hx-color-neutral-500, #6c757d));\n transition: transform var(--hx-transition-normal, 250ms ease);\n }\n\n .item--expanded .icon {\n transform: rotate(180deg);\n }\n\n /* ─── Content animation via CSS grid trick ─── */\n\n .content-wrapper {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows var(--hx-transition-normal, 250ms ease);\n overflow: hidden;\n }\n\n .item--expanded .content-wrapper,\n details[open]:not(.item--expanded) .content-wrapper {\n grid-template-rows: 1fr;\n }\n\n .content-inner {\n overflow: hidden;\n }\n\n .content {\n padding: var(--hx-accordion-content-padding, 0 var(--hx-space-4, 1rem) var(--hx-space-4, 1rem));\n font-size: var(--hx-font-size-md, 1rem);\n line-height: var(--hx-line-height-normal, 1.5);\n color: var(--hx-accordion-content-color, var(--hx-color-neutral-600, #495057));\n }\n\n /* ─── Disabled host ─── */\n\n :host([disabled]) {\n pointer-events: none;\n opacity: 0.5;\n }\n\n /* ─── Reduced motion ─── */\n\n @media (prefers-reduced-motion: reduce) {\n .trigger {\n transition: none;\n }\n\n .icon {\n transition: none;\n }\n\n .content-wrapper {\n transition: none;\n }\n }\n`;\n","import { LitElement, html, svg, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { tokenStyles } from '@helixui/tokens/lit';\nimport { helixAccordionItemStyles } from './hx-accordion-item.styles.js';\n\nconst chevronIcon = svg`\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n`;\n\n/**\n * An individual accordion item with collapsible content.\n *\n * @summary Collapsible panel that can be expanded or collapsed.\n *\n * @tag hx-accordion-item\n *\n * @slot trigger - The heading/trigger content for this item.\n * @slot - Default slot for the collapsible body content.\n *\n * @fires {CustomEvent<{expanded: boolean, itemId: string}>} hx-expand - Dispatched when the item is expanded.\n * @fires {CustomEvent<{expanded: boolean, itemId: string}>} hx-collapse - Dispatched when the item is collapsed.\n *\n * @csspart item - The outer details element container.\n * @csspart trigger - The summary/trigger element.\n * @csspart content - The collapsible content area.\n * @csspart icon - The expand/collapse icon.\n *\n * @cssprop [--hx-accordion-border-color=var(--hx-color-neutral-200)] - Border color between items.\n * @cssprop [--hx-accordion-trigger-padding=var(--hx-space-4)] - Trigger padding.\n * @cssprop [--hx-accordion-trigger-color=var(--hx-color-neutral-800)] - Trigger text color.\n * @cssprop [--hx-accordion-trigger-bg=transparent] - Trigger background color.\n * @cssprop [--hx-accordion-trigger-hover-bg=var(--hx-color-neutral-50)] - Trigger hover background.\n * @cssprop [--hx-accordion-icon-color=var(--hx-color-neutral-500)] - Icon color.\n * @cssprop [--hx-accordion-content-padding=0 var(--hx-space-4) var(--hx-space-4)] - Content padding.\n * @cssprop [--hx-accordion-content-color=var(--hx-color-neutral-600)] - Content text color.\n */\n@customElement('hx-accordion-item')\nexport class HelixAccordionItem extends LitElement {\n static override styles = [tokenStyles, helixAccordionItemStyles];\n\n /**\n * Whether this item is expanded.\n * @attr expanded\n */\n @property({ type: Boolean, reflect: true })\n expanded = false;\n\n /**\n * Whether this item is disabled (cannot be toggled).\n * @attr disabled\n */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n // ─── Toggle Logic ───\n\n private _toggle(): void {\n if (this.disabled) return;\n\n const willExpand = !this.expanded;\n this.expanded = willExpand;\n\n this._dispatchToggleEvent(willExpand);\n }\n\n _dispatchToggleEvent(expanded: boolean): void {\n const detail = { expanded, itemId: this.id || '' };\n const eventName = expanded ? 'hx-expand' : 'hx-collapse';\n\n this.dispatchEvent(\n new CustomEvent(eventName, {\n bubbles: true,\n composed: true,\n detail,\n }),\n );\n }\n\n // ─── Event Handlers ───\n\n private _handleSummaryClick(e: MouseEvent): void {\n e.preventDefault();\n this._toggle();\n }\n\n private _handleKeyDown(e: KeyboardEvent): void {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this._toggle();\n }\n }\n\n // ─── Render ───\n\n override render() {\n const itemClasses = {\n item: true,\n 'item--expanded': this.expanded,\n 'item--disabled': this.disabled,\n };\n\n return html`\n <details part=\"item\" class=${classMap(itemClasses)} ?open=${this.expanded}>\n <summary\n id=\"trigger\"\n part=\"trigger\"\n class=\"trigger\"\n tabindex=${this.disabled ? '-1' : '0'}\n aria-expanded=${this.expanded ? 'true' : 'false'}\n aria-disabled=${this.disabled ? 'true' : 'false'}\n @click=${this._handleSummaryClick}\n @keydown=${this._handleKeyDown}\n >\n <slot name=\"trigger\"></slot>\n <span part=\"icon\" class=\"icon\">${chevronIcon}</span>\n </summary>\n <div class=\"content-wrapper\">\n <div class=\"content-inner\">\n <div\n part=\"content\"\n class=\"content\"\n role=\"region\"\n aria-labelledby=\"trigger\"\n aria-hidden=${this.expanded ? nothing : 'true'}\n >\n <slot></slot>\n </div>\n </div>\n </div>\n </details>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-accordion-item': HelixAccordionItem;\n }\n}\n","import { LitElement, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { tokenStyles } from '@helixui/tokens/lit';\nimport { helixAccordionStyles } from './hx-accordion.styles.js';\nimport './hx-accordion-item.js';\nimport type { HelixAccordionItem } from './hx-accordion-item.js';\n\n/**\n * An accordion container that manages collapsible content sections.\n *\n * @summary Collapsible content sections with single or multi-expand modes.\n *\n * @tag hx-accordion\n *\n * @slot - Default slot for hx-accordion-item elements.\n *\n * @cssprop [--hx-accordion-border-radius=var(--hx-border-radius-md)] - Outer border radius.\n *\n * @example\n * ```html\n * <hx-accordion mode=\"single\">\n * <hx-accordion-item>\n * <span slot=\"trigger\">What is this?</span>\n * <p>Answer content here.</p>\n * </hx-accordion-item>\n * </hx-accordion>\n * ```\n */\n@customElement('hx-accordion')\nexport class HelixAccordion extends LitElement {\n static override styles = [tokenStyles, helixAccordionStyles];\n\n /**\n * Expansion mode: 'single' collapses all other items when one expands.\n * 'multi' allows multiple items open simultaneously.\n * @attr mode\n */\n @property({ type: String, reflect: true })\n mode: 'single' | 'multi' = 'single';\n\n // ─── Lifecycle ───\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('hx-expand', this._handleChildExpand as EventListener);\n this.addEventListener('keydown', this._handleKeyDown);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('hx-expand', this._handleChildExpand as EventListener);\n this.removeEventListener('keydown', this._handleKeyDown);\n }\n\n protected override firstUpdated(): void {\n this._enforceSingleMode();\n }\n\n // ─── Single-expand coordination ───\n\n private _enforceSingleMode(): void {\n if (this.mode !== 'single') return;\n\n const items = this.querySelectorAll<HelixAccordionItem>('hx-accordion-item');\n let foundExpanded = false;\n\n items.forEach((item) => {\n if (item.expanded) {\n if (foundExpanded) {\n item.expanded = false;\n } else {\n foundExpanded = true;\n }\n }\n });\n }\n\n private _handleChildExpand(e: CustomEvent<{ expanded: boolean; itemId: string }>): void {\n if (this.mode !== 'single') return;\n\n const expandedItem = e.composedPath()[0] as HelixAccordionItem;\n const items = this.querySelectorAll<HelixAccordionItem>('hx-accordion-item');\n\n items.forEach((item) => {\n if (item !== expandedItem && item.expanded) {\n item.expanded = false;\n item._dispatchToggleEvent(false);\n }\n });\n }\n\n // ─── Arrow key navigation (ARIA APG Accordion pattern) ───\n\n private _handleKeyDown = (e: KeyboardEvent): void => {\n const triggers = this._getTriggers();\n if (triggers.length === 0) return;\n\n const activeEl = this.shadowRoot?.activeElement ?? document.activeElement;\n let currentItem: HelixAccordionItem | null = null;\n\n const items = Array.from(this.querySelectorAll<HelixAccordionItem>('hx-accordion-item'));\n for (const item of items) {\n const summary = item.shadowRoot?.querySelector('summary');\n if (summary === activeEl || item.shadowRoot?.activeElement === summary) {\n currentItem = item;\n break;\n }\n }\n\n if (!currentItem) return;\n\n const enabledItems = items.filter((item) => !item.disabled);\n const currentIndex = enabledItems.indexOf(currentItem);\n if (currentIndex === -1) return;\n\n let targetIndex = -1;\n\n switch (e.key) {\n case 'ArrowDown':\n targetIndex = (currentIndex + 1) % enabledItems.length;\n break;\n case 'ArrowUp':\n targetIndex = (currentIndex - 1 + enabledItems.length) % enabledItems.length;\n break;\n case 'Home':\n targetIndex = 0;\n break;\n case 'End':\n targetIndex = enabledItems.length - 1;\n break;\n default:\n return;\n }\n\n e.preventDefault();\n const targetItem = enabledItems[targetIndex];\n const targetSummary = targetItem?.shadowRoot?.querySelector('summary');\n targetSummary?.focus();\n };\n\n private _getTriggers(): HTMLElement[] {\n const items = this.querySelectorAll<HelixAccordionItem>('hx-accordion-item');\n const triggers: HTMLElement[] = [];\n items.forEach((item) => {\n const summary = item.shadowRoot?.querySelector<HTMLElement>('summary');\n if (summary) triggers.push(summary);\n });\n return triggers;\n }\n\n // ─── Slot validation ───\n\n private _handleSlotChange(e: Event): void {\n const slot = e.target;\n if (!(slot instanceof HTMLSlotElement)) return;\n const invalid = slot\n .assignedElements()\n .filter((el) => el.tagName.toLowerCase() !== 'hx-accordion-item');\n if (invalid.length > 0) {\n console.warn(\n `[hx-accordion] Default slot expects <hx-accordion-item> elements. Found unexpected: ${invalid.map((el) => `<${el.tagName.toLowerCase()}>`).join(', ')}`,\n );\n }\n }\n\n // ─── Render ───\n\n override render() {\n return html`\n <div part=\"accordion\" class=\"accordion\">\n <slot @slotchange=${this._handleSlotChange}></slot>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-accordion': HelixAccordion;\n }\n}\n"],"names":["helixAccordionStyles","css","helixAccordionItemStyles","chevronIcon","svg","HelixAccordionItem","LitElement","willExpand","expanded","detail","eventName","itemClasses","html","classMap","nothing","tokenStyles","__decorateClass","property","customElement","HelixAccordion","activeEl","_a","currentItem","items","item","summary","_b","_c","enabledItems","currentIndex","targetIndex","targetItem","targetSummary","_d","foundExpanded","expandedItem","triggers","slot","invalid","el"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { css as d, LitElement as b, html as f } from "lit";
|
|
2
2
|
import { property as c, state as p, customElement as u } from "lit/decorators.js";
|
|
3
|
-
import {
|
|
3
|
+
import { tokenStyles as v } from "@helixui/tokens/lit";
|
|
4
4
|
const m = d`
|
|
5
5
|
:host {
|
|
6
6
|
display: block;
|
|
@@ -253,4 +253,4 @@ n = l([
|
|
|
253
253
|
export {
|
|
254
254
|
n as H
|
|
255
255
|
};
|
|
256
|
-
//# sourceMappingURL=hx-action-bar-
|
|
256
|
+
//# sourceMappingURL=hx-action-bar-DxpGLABm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hx-action-bar-CwIRFzBx.js","sources":["../../src/components/hx-action-bar/hx-action-bar.styles.ts","../../src/components/hx-action-bar/hx-action-bar.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixActionBarStyles = css`\n :host {\n display: block;\n }\n\n /* ─── Base ─── */\n\n .base {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: var(--hx-action-bar-gap, var(--hx-space-2, 0.5rem));\n padding: var(--hx-action-bar-padding, var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem));\n background: var(--hx-action-bar-bg, transparent);\n border: var(--hx-action-bar-border, none);\n box-sizing: border-box;\n width: 100%;\n }\n\n /* ─── Sticky (top) ─── */\n\n .base--sticky {\n position: sticky;\n top: 0;\n padding-top: max(var(--hx-action-bar-padding-block-start, 0px), env(safe-area-inset-top, 0px));\n z-index: var(--hx-action-bar-z-index, 10);\n /*\n * Consumers: when this bar is sticky, add scroll-padding-top to the scroll container\n * equal to the bar's rendered height so anchor targets are not hidden behind the bar.\n * Example: .scroll-container { scroll-padding-top: 2.5rem; }\n */\n }\n\n /* ─── Bottom sticky ─── */\n\n .base--bottom {\n position: sticky;\n bottom: 0;\n /*\n * Respect iOS home-indicator safe area on devices with notch/home bar.\n * Falls back to 0px on devices that do not support env().\n */\n padding-bottom: max(\n var(--hx-action-bar-padding-block-end, 0px),\n env(safe-area-inset-bottom, 0px)\n );\n z-index: var(--hx-action-bar-z-index, 10);\n }\n\n /* ─── Variant: outlined ─── */\n\n .base--outlined {\n background: var(--hx-action-bar-bg, var(--hx-color-neutral-0, #fff));\n border: var(\n --hx-action-bar-border,\n var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #e5e7eb)\n );\n border-radius: var(--hx-border-radius-md, 0.375rem);\n }\n\n /* ─── Variant: filled ─── */\n\n .base--filled {\n background: var(--hx-action-bar-bg, var(--hx-color-neutral-50, #f9fafb));\n border-radius: var(--hx-border-radius-md, 0.375rem);\n }\n\n /* ─── Size modifiers ─── */\n\n .base--sm {\n padding: var(--hx-action-bar-padding, var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem));\n gap: var(--hx-action-bar-gap, var(--hx-space-1, 0.25rem));\n min-height: var(--hx-size-8, 2rem);\n }\n\n .base--md {\n min-height: var(--hx-size-10, 2.5rem);\n }\n\n .base--lg {\n padding: var(--hx-action-bar-padding, var(--hx-space-3, 0.75rem) var(--hx-space-4, 1rem));\n gap: var(--hx-action-bar-gap, var(--hx-space-3, 0.75rem));\n min-height: var(--hx-size-12, 3rem);\n }\n\n /* ─── Sections ─── */\n\n .section {\n display: flex;\n align-items: center;\n gap: inherit;\n }\n\n /*\n * Equal flex-basis on start and end guarantees the center section is visually centered\n * within the full bar width, regardless of how wide start and end content are.\n */\n .section--start {\n flex: 1 1 0;\n justify-content: flex-start;\n }\n\n .section--center {\n flex: 0 0 auto;\n justify-content: center;\n }\n\n .section--end {\n flex: 1 1 0;\n justify-content: flex-end;\n }\n\n /* ─── Slotted content ─── */\n\n ::slotted(*) {\n flex-shrink: 0;\n }\n`;\n","import { LitElement, html } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { tokenStyles } from '@helixui/tokens/lit';\nimport { helixActionBarStyles } from './hx-action-bar.styles.js';\n\n/**\n * A horizontal toolbar container for grouping related action buttons and controls.\n * Implements the ARIA toolbar pattern with roving tabindex keyboard navigation.\n *\n * @summary Horizontal action bar for grouping related controls.\n *\n * @tag hx-action-bar\n *\n * @slot start - Left-aligned actions.\n * @slot - Center content (default slot).\n * @slot end - Right-aligned actions.\n * @slot overflow - Actions revealed when the bar is constrained for space.\n *\n * @csspart base - The root toolbar container element.\n * @csspart start - The start (left) slot wrapper.\n * @csspart center - The center (default) slot wrapper.\n * @csspart end - The end (right) slot wrapper.\n *\n * @cssprop [--hx-action-bar-bg=transparent] - Bar background color (default variant).\n * @cssprop [--hx-action-bar-border=none] - Bar border (default variant).\n * @cssprop [--hx-action-bar-padding=var(--hx-space-2,0.5rem) var(--hx-space-3,0.75rem)] - Inner padding.\n * @cssprop [--hx-action-bar-gap=var(--hx-space-2,0.5rem)] - Gap between slotted items.\n * @cssprop [--hx-action-bar-z-index=10] - Z-index when sticky or bottom position.\n *\n * @attr {string} aria-label - Required. Identifies the toolbar to assistive technology.\n * When multiple toolbars appear on the same page, each must have a unique, descriptive label.\n *\n * @example\n * ```html\n * <hx-action-bar aria-label=\"Patient actions\">\n * <hx-button slot=\"start\">Save</hx-button>\n * <hx-button slot=\"end\" variant=\"ghost\">Cancel</hx-button>\n * </hx-action-bar>\n * ```\n */\n@customElement('hx-action-bar')\nexport class HelixActionBar extends LitElement {\n static override styles = [tokenStyles, helixActionBarStyles];\n\n /**\n * Size of the action bar — propagated as a data attribute to slotted children.\n * @attr size\n */\n @property({ type: String, reflect: true })\n size: 'sm' | 'md' | 'lg' = 'md';\n\n /**\n * Visual variant controlling the bar background.\n * @attr variant\n */\n @property({ type: String, reflect: true })\n variant: 'default' | 'outlined' | 'filled' = 'default';\n\n /**\n * Position and sticky behavior of the action bar.\n * - `top` — normal flow (default)\n * - `sticky` — sticks to the top of the scroll container; add `scroll-padding-top` to the\n * scroll container equal to the bar height to prevent anchor targets from scrolling behind it\n * - `bottom` — sticks to the bottom of the scroll container with iOS safe-area-inset support\n * @attr position\n */\n @property({ type: String, reflect: true })\n position: 'top' | 'bottom' | 'sticky' = 'top';\n\n /**\n * @deprecated Use `position=\"sticky\"` instead.\n * When true, the bar sticks to the top of its scroll container.\n * @attr sticky\n */\n @property({ type: Boolean, reflect: true })\n sticky = false;\n\n /**\n * Accessible label for the toolbar.\n * Required when multiple toolbars appear on the same page.\n * @attr aria-label\n */\n @property({ attribute: 'aria-label' })\n ariaLabel: string = 'Actions';\n\n /** Cached list of focusable items — invalidated on slot change. */\n private _focusableCache: HTMLElement[] | null = null;\n\n /** Whether the overflow slot has assigned content. */\n @state()\n private _hasOverflow = false;\n\n // ─── Lifecycle ───\n\n /** Arrow function field — stable reference for add/removeEventListener. */\n private _handleKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'ArrowRight') {\n e.preventDefault();\n this._moveFocus('next');\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n this._moveFocus('prev');\n } else if (e.key === 'Home') {\n e.preventDefault();\n // Move directly to first item — do NOT call _moveFocus which would visit other items first.\n const items = this._getFocusableItems();\n if (items.length) {\n items.forEach((el, i) => el.setAttribute('tabindex', i === 0 ? '0' : '-1'));\n items[0]?.focus();\n }\n } else if (e.key === 'End') {\n e.preventDefault();\n const items = this._getFocusableItems();\n const last = items.length - 1;\n if (items.length) {\n items.forEach((el, i) => el.setAttribute('tabindex', i === last ? '0' : '-1'));\n items[last]?.focus();\n }\n }\n };\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('keydown', this._handleKeydown);\n }\n\n override firstUpdated(): void {\n // Slot assignments are complete by firstUpdated; initialize roving tabindex\n // immediately rather than waiting for the async slotchange event.\n this._initRovingTabindex();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('keydown', this._handleKeydown);\n }\n\n // ─── Focusable item discovery ───\n\n private _isFocusable(el: HTMLElement): boolean {\n // Check disabled via DOM attribute (native elements) or property (custom elements)\n if (el.hasAttribute('disabled')) return false;\n const elWithDisabled = el as HTMLElement & { disabled?: boolean };\n if (elWithDisabled.disabled === true) return false;\n\n // Use the IDL tabIndex property — covers both DOM attribute and ElementInternals settings.\n // Custom elements (e.g. hx-button) that set tabIndex via ElementInternals are discoverable.\n if (el.tabIndex >= 0) return true;\n\n const tag = el.tagName.toLowerCase();\n return tag === 'button' || tag === 'input' || tag === 'select' || tag === 'textarea';\n }\n\n private _getFocusableItems(): HTMLElement[] {\n if (this._focusableCache) return this._focusableCache;\n\n const slots = this.shadowRoot?.querySelectorAll('slot') ?? [];\n const items: HTMLElement[] = [];\n\n for (const slot of Array.from(slots)) {\n const assigned = (slot as HTMLSlotElement).assignedElements({ flatten: true });\n for (const el of assigned) {\n if (!(el instanceof HTMLElement)) continue;\n if (this._isFocusable(el)) {\n // Element is itself focusable — include it and do NOT also recurse into its children\n // to prevent double-counting compound components (e.g. <a><button>).\n items.push(el);\n } else {\n // Element is a non-focusable wrapper (e.g. <div>, <span>) — find focusable children.\n const descendants = el.querySelectorAll<HTMLElement>('*');\n for (const d of Array.from(descendants)) {\n if (this._isFocusable(d)) {\n items.push(d);\n }\n }\n }\n }\n }\n\n this._focusableCache = items;\n return items;\n }\n\n // ─── Roving tabindex helpers ───\n\n private _initRovingTabindex(): void {\n this._focusableCache = null; // invalidate cache on slot change\n const items = this._getFocusableItems();\n if (!items.length) return;\n const hasActive = items.some((el) => el.getAttribute('tabindex') === '0');\n items.forEach((el, i) => {\n el.setAttribute('tabindex', !hasActive && i === 0 ? '0' : '-1');\n });\n }\n\n private _moveFocus(direction: 'next' | 'prev'): void {\n const items = this._getFocusableItems();\n if (!items.length) return;\n\n const focused = document.activeElement as HTMLElement | null;\n const currentIndex = items.indexOf(focused as HTMLElement);\n\n let nextIndex: number;\n if (direction === 'next') {\n nextIndex = currentIndex < items.length - 1 ? currentIndex + 1 : 0;\n } else {\n nextIndex = currentIndex > 0 ? currentIndex - 1 : items.length - 1;\n }\n\n items.forEach((el, i) => {\n el.setAttribute('tabindex', i === nextIndex ? '0' : '-1');\n });\n\n items[nextIndex]?.focus();\n }\n\n // ─── Event Handlers ───\n\n private _handleSlotChange(e: Event): void {\n const slot = e.target as HTMLSlotElement;\n if (slot.name === 'overflow') {\n this._hasOverflow = slot.assignedElements({ flatten: true }).length > 0;\n }\n this._initRovingTabindex();\n }\n\n // ─── Render ───\n\n override render() {\n const isSticky = this.position === 'sticky' || this.sticky;\n const isBottom = this.position === 'bottom';\n const positionClass = isSticky ? ' base--sticky' : isBottom ? ' base--bottom' : '';\n\n return html`\n <div\n part=\"base\"\n role=\"toolbar\"\n aria-label=${this.ariaLabel}\n class=\"base base--${this.size} base--${this.variant}${positionClass}\"\n >\n <div part=\"start\" class=\"section section--start\">\n <slot name=\"start\" @slotchange=${this._handleSlotChange}></slot>\n </div>\n <div part=\"center\" class=\"section section--center\">\n <slot @slotchange=${this._handleSlotChange}></slot>\n </div>\n <div part=\"end\" class=\"section section--end\">\n <slot name=\"end\" @slotchange=${this._handleSlotChange}></slot>\n </div>\n <div class=\"section section--overflow\" ?hidden=${!this._hasOverflow}>\n <slot name=\"overflow\" @slotchange=${this._handleSlotChange}></slot>\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-action-bar': HelixActionBar;\n }\n}\n"],"names":["helixActionBarStyles","css","HelixActionBar","LitElement","items","el","i","_a","last","_b","tag","slots","slot","assigned","descendants","d","hasActive","direction","focused","currentIndex","nextIndex","isSticky","isBottom","positionClass","html","tokenStyles","__decorateClass","property","state","customElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hx-action-bar-DxpGLABm.js","sources":["../../src/components/hx-action-bar/hx-action-bar.styles.ts","../../src/components/hx-action-bar/hx-action-bar.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixActionBarStyles = css`\n :host {\n display: block;\n }\n\n /* ─── Base ─── */\n\n .base {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: var(--hx-action-bar-gap, var(--hx-space-2, 0.5rem));\n padding: var(--hx-action-bar-padding, var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem));\n background: var(--hx-action-bar-bg, transparent);\n border: var(--hx-action-bar-border, none);\n box-sizing: border-box;\n width: 100%;\n }\n\n /* ─── Sticky (top) ─── */\n\n .base--sticky {\n position: sticky;\n top: 0;\n padding-top: max(var(--hx-action-bar-padding-block-start, 0px), env(safe-area-inset-top, 0px));\n z-index: var(--hx-action-bar-z-index, 10);\n /*\n * Consumers: when this bar is sticky, add scroll-padding-top to the scroll container\n * equal to the bar's rendered height so anchor targets are not hidden behind the bar.\n * Example: .scroll-container { scroll-padding-top: 2.5rem; }\n */\n }\n\n /* ─── Bottom sticky ─── */\n\n .base--bottom {\n position: sticky;\n bottom: 0;\n /*\n * Respect iOS home-indicator safe area on devices with notch/home bar.\n * Falls back to 0px on devices that do not support env().\n */\n padding-bottom: max(\n var(--hx-action-bar-padding-block-end, 0px),\n env(safe-area-inset-bottom, 0px)\n );\n z-index: var(--hx-action-bar-z-index, 10);\n }\n\n /* ─── Variant: outlined ─── */\n\n .base--outlined {\n background: var(--hx-action-bar-bg, var(--hx-color-neutral-0, #fff));\n border: var(\n --hx-action-bar-border,\n var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #e5e7eb)\n );\n border-radius: var(--hx-border-radius-md, 0.375rem);\n }\n\n /* ─── Variant: filled ─── */\n\n .base--filled {\n background: var(--hx-action-bar-bg, var(--hx-color-neutral-50, #f9fafb));\n border-radius: var(--hx-border-radius-md, 0.375rem);\n }\n\n /* ─── Size modifiers ─── */\n\n .base--sm {\n padding: var(--hx-action-bar-padding, var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem));\n gap: var(--hx-action-bar-gap, var(--hx-space-1, 0.25rem));\n min-height: var(--hx-size-8, 2rem);\n }\n\n .base--md {\n min-height: var(--hx-size-10, 2.5rem);\n }\n\n .base--lg {\n padding: var(--hx-action-bar-padding, var(--hx-space-3, 0.75rem) var(--hx-space-4, 1rem));\n gap: var(--hx-action-bar-gap, var(--hx-space-3, 0.75rem));\n min-height: var(--hx-size-12, 3rem);\n }\n\n /* ─── Sections ─── */\n\n .section {\n display: flex;\n align-items: center;\n gap: inherit;\n }\n\n /*\n * Equal flex-basis on start and end guarantees the center section is visually centered\n * within the full bar width, regardless of how wide start and end content are.\n */\n .section--start {\n flex: 1 1 0;\n justify-content: flex-start;\n }\n\n .section--center {\n flex: 0 0 auto;\n justify-content: center;\n }\n\n .section--end {\n flex: 1 1 0;\n justify-content: flex-end;\n }\n\n /* ─── Slotted content ─── */\n\n ::slotted(*) {\n flex-shrink: 0;\n }\n`;\n","import { LitElement, html } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { tokenStyles } from '@helixui/tokens/lit';\nimport { helixActionBarStyles } from './hx-action-bar.styles.js';\n\n/**\n * A horizontal toolbar container for grouping related action buttons and controls.\n * Implements the ARIA toolbar pattern with roving tabindex keyboard navigation.\n *\n * @summary Horizontal action bar for grouping related controls.\n *\n * @tag hx-action-bar\n *\n * @slot start - Left-aligned actions.\n * @slot - Center content (default slot).\n * @slot end - Right-aligned actions.\n * @slot overflow - Actions revealed when the bar is constrained for space.\n *\n * @csspart base - The root toolbar container element.\n * @csspart start - The start (left) slot wrapper.\n * @csspart center - The center (default) slot wrapper.\n * @csspart end - The end (right) slot wrapper.\n *\n * @cssprop [--hx-action-bar-bg=transparent] - Bar background color (default variant).\n * @cssprop [--hx-action-bar-border=none] - Bar border (default variant).\n * @cssprop [--hx-action-bar-padding=var(--hx-space-2,0.5rem) var(--hx-space-3,0.75rem)] - Inner padding.\n * @cssprop [--hx-action-bar-gap=var(--hx-space-2,0.5rem)] - Gap between slotted items.\n * @cssprop [--hx-action-bar-z-index=10] - Z-index when sticky or bottom position.\n *\n * @attr {string} aria-label - Required. Identifies the toolbar to assistive technology.\n * When multiple toolbars appear on the same page, each must have a unique, descriptive label.\n *\n * @example\n * ```html\n * <hx-action-bar aria-label=\"Patient actions\">\n * <hx-button slot=\"start\">Save</hx-button>\n * <hx-button slot=\"end\" variant=\"ghost\">Cancel</hx-button>\n * </hx-action-bar>\n * ```\n */\n@customElement('hx-action-bar')\nexport class HelixActionBar extends LitElement {\n static override styles = [tokenStyles, helixActionBarStyles];\n\n /**\n * Size of the action bar — propagated as a data attribute to slotted children.\n * @attr size\n */\n @property({ type: String, reflect: true })\n size: 'sm' | 'md' | 'lg' = 'md';\n\n /**\n * Visual variant controlling the bar background.\n * @attr variant\n */\n @property({ type: String, reflect: true })\n variant: 'default' | 'outlined' | 'filled' = 'default';\n\n /**\n * Position and sticky behavior of the action bar.\n * - `top` — normal flow (default)\n * - `sticky` — sticks to the top of the scroll container; add `scroll-padding-top` to the\n * scroll container equal to the bar height to prevent anchor targets from scrolling behind it\n * - `bottom` — sticks to the bottom of the scroll container with iOS safe-area-inset support\n * @attr position\n */\n @property({ type: String, reflect: true })\n position: 'top' | 'bottom' | 'sticky' = 'top';\n\n /**\n * @deprecated Use `position=\"sticky\"` instead.\n * When true, the bar sticks to the top of its scroll container.\n * @attr sticky\n */\n @property({ type: Boolean, reflect: true })\n sticky = false;\n\n /**\n * Accessible label for the toolbar.\n * Required when multiple toolbars appear on the same page.\n * @attr aria-label\n */\n @property({ attribute: 'aria-label' })\n ariaLabel: string = 'Actions';\n\n /** Cached list of focusable items — invalidated on slot change. */\n private _focusableCache: HTMLElement[] | null = null;\n\n /** Whether the overflow slot has assigned content. */\n @state()\n private _hasOverflow = false;\n\n // ─── Lifecycle ───\n\n /** Arrow function field — stable reference for add/removeEventListener. */\n private _handleKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'ArrowRight') {\n e.preventDefault();\n this._moveFocus('next');\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n this._moveFocus('prev');\n } else if (e.key === 'Home') {\n e.preventDefault();\n // Move directly to first item — do NOT call _moveFocus which would visit other items first.\n const items = this._getFocusableItems();\n if (items.length) {\n items.forEach((el, i) => el.setAttribute('tabindex', i === 0 ? '0' : '-1'));\n items[0]?.focus();\n }\n } else if (e.key === 'End') {\n e.preventDefault();\n const items = this._getFocusableItems();\n const last = items.length - 1;\n if (items.length) {\n items.forEach((el, i) => el.setAttribute('tabindex', i === last ? '0' : '-1'));\n items[last]?.focus();\n }\n }\n };\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('keydown', this._handleKeydown);\n }\n\n override firstUpdated(): void {\n // Slot assignments are complete by firstUpdated; initialize roving tabindex\n // immediately rather than waiting for the async slotchange event.\n this._initRovingTabindex();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('keydown', this._handleKeydown);\n }\n\n // ─── Focusable item discovery ───\n\n private _isFocusable(el: HTMLElement): boolean {\n // Check disabled via DOM attribute (native elements) or property (custom elements)\n if (el.hasAttribute('disabled')) return false;\n const elWithDisabled = el as HTMLElement & { disabled?: boolean };\n if (elWithDisabled.disabled === true) return false;\n\n // Use the IDL tabIndex property — covers both DOM attribute and ElementInternals settings.\n // Custom elements (e.g. hx-button) that set tabIndex via ElementInternals are discoverable.\n if (el.tabIndex >= 0) return true;\n\n const tag = el.tagName.toLowerCase();\n return tag === 'button' || tag === 'input' || tag === 'select' || tag === 'textarea';\n }\n\n private _getFocusableItems(): HTMLElement[] {\n if (this._focusableCache) return this._focusableCache;\n\n const slots = this.shadowRoot?.querySelectorAll('slot') ?? [];\n const items: HTMLElement[] = [];\n\n for (const slot of Array.from(slots)) {\n const assigned = (slot as HTMLSlotElement).assignedElements({ flatten: true });\n for (const el of assigned) {\n if (!(el instanceof HTMLElement)) continue;\n if (this._isFocusable(el)) {\n // Element is itself focusable — include it and do NOT also recurse into its children\n // to prevent double-counting compound components (e.g. <a><button>).\n items.push(el);\n } else {\n // Element is a non-focusable wrapper (e.g. <div>, <span>) — find focusable children.\n const descendants = el.querySelectorAll<HTMLElement>('*');\n for (const d of Array.from(descendants)) {\n if (this._isFocusable(d)) {\n items.push(d);\n }\n }\n }\n }\n }\n\n this._focusableCache = items;\n return items;\n }\n\n // ─── Roving tabindex helpers ───\n\n private _initRovingTabindex(): void {\n this._focusableCache = null; // invalidate cache on slot change\n const items = this._getFocusableItems();\n if (!items.length) return;\n const hasActive = items.some((el) => el.getAttribute('tabindex') === '0');\n items.forEach((el, i) => {\n el.setAttribute('tabindex', !hasActive && i === 0 ? '0' : '-1');\n });\n }\n\n private _moveFocus(direction: 'next' | 'prev'): void {\n const items = this._getFocusableItems();\n if (!items.length) return;\n\n const focused = document.activeElement as HTMLElement | null;\n const currentIndex = items.indexOf(focused as HTMLElement);\n\n let nextIndex: number;\n if (direction === 'next') {\n nextIndex = currentIndex < items.length - 1 ? currentIndex + 1 : 0;\n } else {\n nextIndex = currentIndex > 0 ? currentIndex - 1 : items.length - 1;\n }\n\n items.forEach((el, i) => {\n el.setAttribute('tabindex', i === nextIndex ? '0' : '-1');\n });\n\n items[nextIndex]?.focus();\n }\n\n // ─── Event Handlers ───\n\n private _handleSlotChange(e: Event): void {\n const slot = e.target as HTMLSlotElement;\n if (slot.name === 'overflow') {\n this._hasOverflow = slot.assignedElements({ flatten: true }).length > 0;\n }\n this._initRovingTabindex();\n }\n\n // ─── Render ───\n\n override render() {\n const isSticky = this.position === 'sticky' || this.sticky;\n const isBottom = this.position === 'bottom';\n const positionClass = isSticky ? ' base--sticky' : isBottom ? ' base--bottom' : '';\n\n return html`\n <div\n part=\"base\"\n role=\"toolbar\"\n aria-label=${this.ariaLabel}\n class=\"base base--${this.size} base--${this.variant}${positionClass}\"\n >\n <div part=\"start\" class=\"section section--start\">\n <slot name=\"start\" @slotchange=${this._handleSlotChange}></slot>\n </div>\n <div part=\"center\" class=\"section section--center\">\n <slot @slotchange=${this._handleSlotChange}></slot>\n </div>\n <div part=\"end\" class=\"section section--end\">\n <slot name=\"end\" @slotchange=${this._handleSlotChange}></slot>\n </div>\n <div class=\"section section--overflow\" ?hidden=${!this._hasOverflow}>\n <slot name=\"overflow\" @slotchange=${this._handleSlotChange}></slot>\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-action-bar': HelixActionBar;\n }\n}\n"],"names":["helixActionBarStyles","css","HelixActionBar","LitElement","items","el","i","_a","last","_b","tag","slots","slot","assigned","descendants","d","hasActive","direction","focused","currentIndex","nextIndex","isSticky","isBottom","positionClass","html","tokenStyles","__decorateClass","property","state","customElement"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { css as v, LitElement as f, html as o, nothing as d } from "lit";
|
|
2
2
|
import { property as i, state as u, customElement as p } from "lit/decorators.js";
|
|
3
3
|
import { classMap as x } from "lit/directives/class-map.js";
|
|
4
|
-
import {
|
|
4
|
+
import { tokenStyles as g } from "@helixui/tokens/lit";
|
|
5
5
|
const b = v`
|
|
6
6
|
:host {
|
|
7
7
|
display: block;
|
|
@@ -361,4 +361,4 @@ r = a([
|
|
|
361
361
|
export {
|
|
362
362
|
r as H
|
|
363
363
|
};
|
|
364
|
-
//# sourceMappingURL=hx-alert-
|
|
364
|
+
//# sourceMappingURL=hx-alert-BQpT4gL3.js.map
|