@helixui/library 3.0.0-next.65 → 3.1.0-next.66
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 +6549 -318
- package/dist/components/hx-accordion/hx-accordion.d.ts +3 -0
- package/dist/components/hx-accordion/hx-accordion.d.ts.map +1 -1
- package/dist/components/hx-action-bar/hx-action-bar.d.ts +14 -0
- package/dist/components/hx-action-bar/hx-action-bar.d.ts.map +1 -1
- package/dist/components/hx-action-bar/index.js +1 -1
- package/dist/components/hx-alert/hx-alert.d.ts +36 -0
- package/dist/components/hx-alert/hx-alert.d.ts.map +1 -1
- package/dist/components/hx-avatar/hx-avatar.d.ts +17 -0
- package/dist/components/hx-avatar/hx-avatar.d.ts.map +1 -1
- package/dist/components/hx-badge/hx-badge.d.ts +35 -0
- package/dist/components/hx-badge/hx-badge.d.ts.map +1 -1
- package/dist/components/hx-banner/hx-banner.d.ts +34 -0
- package/dist/components/hx-banner/hx-banner.d.ts.map +1 -1
- package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts +3 -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.d.ts +42 -0
- package/dist/components/hx-button/hx-button.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 +2 -0
- package/dist/components/hx-button-group/hx-button-group.d.ts.map +1 -1
- package/dist/components/hx-card/hx-card.d.ts +28 -0
- package/dist/components/hx-card/hx-card.d.ts.map +1 -1
- package/dist/components/hx-card/index.js +1 -1
- package/dist/components/hx-carousel/hx-carousel.d.ts +25 -0
- package/dist/components/hx-carousel/hx-carousel.d.ts.map +1 -1
- package/dist/components/hx-checkbox/hx-checkbox.d.ts +31 -0
- 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/hx-checkbox-group.d.ts +14 -0
- package/dist/components/hx-checkbox-group/hx-checkbox-group.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 +37 -0
- package/dist/components/hx-clinical-status/hx-clinical-status.d.ts.map +1 -1
- package/dist/components/hx-code-snippet/hx-code-snippet.d.ts +35 -0
- package/dist/components/hx-code-snippet/hx-code-snippet.d.ts.map +1 -1
- package/dist/components/hx-color-picker/hx-color-picker.d.ts +29 -0
- package/dist/components/hx-color-picker/hx-color-picker.d.ts.map +1 -1
- package/dist/components/hx-combobox/hx-combobox.d.ts +49 -0
- package/dist/components/hx-combobox/hx-combobox.d.ts.map +1 -1
- package/dist/components/hx-combobox/index.js +1 -1
- package/dist/components/hx-container/hx-container.d.ts +5 -0
- package/dist/components/hx-container/hx-container.d.ts.map +1 -1
- package/dist/components/hx-copy-button/hx-copy-button.d.ts +24 -0
- package/dist/components/hx-copy-button/hx-copy-button.d.ts.map +1 -1
- package/dist/components/hx-counter/hx-counter.d.ts +7 -0
- package/dist/components/hx-counter/hx-counter.d.ts.map +1 -1
- package/dist/components/hx-data-table/hx-data-table.d.ts +29 -0
- package/dist/components/hx-data-table/hx-data-table.d.ts.map +1 -1
- package/dist/components/hx-data-table/hx-data-table.styles.d.ts.map +1 -1
- package/dist/components/hx-data-table/index.js +1 -1
- package/dist/components/hx-date-picker/hx-date-picker.d.ts +44 -0
- package/dist/components/hx-date-picker/hx-date-picker.d.ts.map +1 -1
- package/dist/components/hx-date-picker/index.js +1 -1
- package/dist/components/hx-dialog/hx-dialog.d.ts +31 -0
- package/dist/components/hx-dialog/hx-dialog.d.ts.map +1 -1
- package/dist/components/hx-dialog/index.js +1 -1
- package/dist/components/hx-divider/hx-divider.d.ts +9 -0
- package/dist/components/hx-divider/hx-divider.d.ts.map +1 -1
- package/dist/components/hx-divider/index.js +1 -1
- package/dist/components/hx-drawer/hx-drawer.d.ts +30 -0
- package/dist/components/hx-drawer/hx-drawer.d.ts.map +1 -1
- package/dist/components/hx-drawer/hx-drawer.styles.d.ts.map +1 -1
- package/dist/components/hx-drawer/index.js +1 -1
- package/dist/components/hx-dropdown/hx-dropdown.d.ts +6 -0
- 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/hx-field.d.ts +15 -0
- package/dist/components/hx-field/hx-field.d.ts.map +1 -1
- package/dist/components/hx-field/index.js +1 -1
- package/dist/components/hx-field-label/hx-field-label.d.ts +11 -0
- package/dist/components/hx-field-label/hx-field-label.d.ts.map +1 -1
- package/dist/components/hx-field-label/index.js +1 -1
- package/dist/components/hx-file-upload/hx-file-upload.d.ts +35 -0
- package/dist/components/hx-file-upload/hx-file-upload.d.ts.map +1 -1
- package/dist/components/hx-file-upload/index.js +1 -1
- package/dist/components/hx-grid/hx-grid.d.ts +5 -0
- package/dist/components/hx-grid/hx-grid.d.ts.map +1 -1
- package/dist/components/hx-help-text/hx-help-text.d.ts +8 -0
- package/dist/components/hx-help-text/hx-help-text.d.ts.map +1 -1
- package/dist/components/hx-help-text/index.js +1 -1
- package/dist/components/hx-icon/hx-icon.d.ts +5 -0
- package/dist/components/hx-icon/hx-icon.d.ts.map +1 -1
- package/dist/components/hx-icon-button/hx-icon-button.d.ts +27 -0
- package/dist/components/hx-icon-button/hx-icon-button.d.ts.map +1 -1
- package/dist/components/hx-icon-button/index.js +1 -1
- package/dist/components/hx-image/hx-image.d.ts +4 -0
- package/dist/components/hx-image/hx-image.d.ts.map +1 -1
- package/dist/components/hx-link/hx-link.d.ts +15 -0
- package/dist/components/hx-link/hx-link.d.ts.map +1 -1
- package/dist/components/hx-link/index.js +1 -1
- package/dist/components/hx-list/hx-list.d.ts +3 -0
- package/dist/components/hx-list/hx-list.d.ts.map +1 -1
- package/dist/components/hx-menu/hx-menu.d.ts +6 -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/hx-meter.d.ts +23 -0
- package/dist/components/hx-meter/hx-meter.d.ts.map +1 -1
- package/dist/components/hx-nav/hx-nav.d.ts +29 -0
- package/dist/components/hx-nav/hx-nav.d.ts.map +1 -1
- package/dist/components/hx-number-input/hx-number-input.d.ts +34 -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 +26 -0
- package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts.map +1 -1
- package/dist/components/hx-overflow-menu/index.js +1 -1
- package/dist/components/hx-pagination/hx-pagination.d.ts +21 -0
- package/dist/components/hx-pagination/hx-pagination.d.ts.map +1 -1
- package/dist/components/hx-pagination/index.js +1 -1
- package/dist/components/hx-patient-banner/hx-patient-banner.d.ts +23 -0
- package/dist/components/hx-patient-banner/hx-patient-banner.d.ts.map +1 -1
- package/dist/components/hx-phi-field/hx-phi-field.d.ts +14 -0
- package/dist/components/hx-phi-field/hx-phi-field.d.ts.map +1 -1
- package/dist/components/hx-phi-field/index.js +1 -1
- package/dist/components/hx-popover/hx-popover.d.ts +15 -0
- package/dist/components/hx-popover/hx-popover.d.ts.map +1 -1
- package/dist/components/hx-popover/index.js +1 -1
- package/dist/components/hx-popup/hx-popup.d.ts +1 -0
- package/dist/components/hx-popup/hx-popup.d.ts.map +1 -1
- package/dist/components/hx-progress-bar/hx-progress-bar.d.ts +17 -0
- package/dist/components/hx-progress-bar/hx-progress-bar.d.ts.map +1 -1
- package/dist/components/hx-progress-bar/index.js +1 -1
- package/dist/components/hx-progress-ring/hx-progress-ring.d.ts +15 -0
- package/dist/components/hx-progress-ring/hx-progress-ring.d.ts.map +1 -1
- package/dist/components/hx-prose/hx-prose.d.ts +2 -0
- package/dist/components/hx-prose/hx-prose.d.ts.map +1 -1
- package/dist/components/hx-radio-group/hx-radio-group.d.ts +14 -0
- package/dist/components/hx-radio-group/hx-radio-group.d.ts.map +1 -1
- package/dist/components/hx-radio-group/index.js +1 -1
- package/dist/components/hx-rating/hx-rating.d.ts +13 -0
- package/dist/components/hx-rating/hx-rating.d.ts.map +1 -1
- package/dist/components/hx-select/hx-select.d.ts +43 -0
- package/dist/components/hx-select/hx-select.d.ts.map +1 -1
- package/dist/components/hx-select/hx-select.styles.d.ts.map +1 -1
- package/dist/components/hx-select/index.js +1 -1
- package/dist/components/hx-side-nav/hx-nav-item.styles.d.ts.map +1 -1
- package/dist/components/hx-side-nav/hx-side-nav.d.ts +19 -0
- package/dist/components/hx-side-nav/hx-side-nav.d.ts.map +1 -1
- package/dist/components/hx-side-nav/index.js +1 -1
- package/dist/components/hx-skeleton/hx-skeleton.d.ts +5 -0
- package/dist/components/hx-skeleton/hx-skeleton.d.ts.map +1 -1
- package/dist/components/hx-slider/hx-slider.d.ts +38 -0
- package/dist/components/hx-slider/hx-slider.d.ts.map +1 -1
- package/dist/components/hx-slider/index.js +1 -1
- package/dist/components/hx-spinner/hx-spinner.d.ts +10 -0
- package/dist/components/hx-spinner/hx-spinner.d.ts.map +1 -1
- package/dist/components/hx-split-button/hx-split-button.d.ts +39 -0
- package/dist/components/hx-split-button/hx-split-button.d.ts.map +1 -1
- package/dist/components/hx-split-button/index.js +1 -1
- package/dist/components/hx-split-panel/hx-split-panel.d.ts +12 -0
- package/dist/components/hx-split-panel/hx-split-panel.d.ts.map +1 -1
- package/dist/components/hx-split-panel/index.js +1 -1
- package/dist/components/hx-stack/hx-stack.d.ts +5 -0
- package/dist/components/hx-stack/hx-stack.d.ts.map +1 -1
- package/dist/components/hx-stat/hx-stat.d.ts +24 -0
- package/dist/components/hx-stat/hx-stat.d.ts.map +1 -1
- package/dist/components/hx-status-indicator/hx-status-indicator.d.ts +13 -0
- package/dist/components/hx-status-indicator/hx-status-indicator.d.ts.map +1 -1
- package/dist/components/hx-steps/hx-steps.d.ts +15 -0
- package/dist/components/hx-steps/hx-steps.d.ts.map +1 -1
- package/dist/components/hx-structured-list/hx-structured-list.d.ts +7 -0
- package/dist/components/hx-structured-list/hx-structured-list.d.ts.map +1 -1
- package/dist/components/hx-switch/hx-switch.d.ts +42 -0
- package/dist/components/hx-switch/hx-switch.d.ts.map +1 -1
- package/dist/components/hx-switch/index.js +1 -1
- package/dist/components/hx-table/hx-table.d.ts +14 -0
- package/dist/components/hx-table/hx-table.d.ts.map +1 -1
- package/dist/components/hx-tabs/hx-tabs.d.ts +4 -0
- package/dist/components/hx-tabs/hx-tabs.d.ts.map +1 -1
- package/dist/components/hx-tag/hx-tag.d.ts +36 -0
- package/dist/components/hx-tag/hx-tag.d.ts.map +1 -1
- package/dist/components/hx-text/hx-text.d.ts +22 -0
- package/dist/components/hx-text/hx-text.d.ts.map +1 -1
- package/dist/components/hx-text-input/hx-text-input.d.ts +30 -0
- package/dist/components/hx-text-input/hx-text-input.d.ts.map +1 -1
- package/dist/components/hx-text-input/index.js +1 -1
- package/dist/components/hx-textarea/hx-textarea.d.ts +27 -0
- 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/hx-theme.d.ts +3 -0
- package/dist/components/hx-theme/hx-theme.d.ts.map +1 -1
- package/dist/components/hx-theme/index.js +1 -1
- package/dist/components/hx-time-picker/hx-time-picker.d.ts +32 -0
- package/dist/components/hx-time-picker/hx-time-picker.d.ts.map +1 -1
- package/dist/components/hx-time-picker/index.js +1 -1
- package/dist/components/hx-toast/hx-toast.d.ts +24 -0
- package/dist/components/hx-toast/hx-toast.d.ts.map +1 -1
- package/dist/components/hx-toggle-button/hx-toggle-button.d.ts +35 -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 +13 -0
- package/dist/components/hx-tooltip/hx-tooltip.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 +21 -0
- package/dist/components/hx-top-nav/hx-top-nav.d.ts.map +1 -1
- package/dist/components/hx-top-nav/index.js +1 -1
- package/dist/components/hx-tree-view/hx-tree-view.d.ts +6 -0
- package/dist/components/hx-tree-view/hx-tree-view.d.ts.map +1 -1
- package/dist/css/helix-all.css +263 -253
- package/dist/css/helix-core.css +26 -26
- package/dist/css/helix-data.css +8 -7
- package/dist/css/helix-feedback.css +2 -2
- package/dist/css/helix-forms.css +137 -131
- package/dist/css/helix-layout.css +3 -3
- package/dist/css/helix-navigation.css +35 -35
- package/dist/css/helix-overlay.css +32 -29
- package/dist/css/helix-tokens.css +12 -0
- package/dist/css/helix-utility.css +18 -18
- package/dist/css/hx-action-bar.css +3 -3
- package/dist/css/hx-button.css +10 -10
- package/dist/css/hx-card.css +6 -6
- package/dist/css/hx-checkbox-group.css +2 -2
- package/dist/css/hx-checkbox.css +5 -5
- package/dist/css/hx-combobox.css +13 -13
- package/dist/css/hx-data-table.css +8 -7
- package/dist/css/hx-date-picker.css +20 -20
- package/dist/css/hx-dialog.css +10 -10
- package/dist/css/hx-divider.css +2 -2
- package/dist/css/hx-drawer.css +12 -9
- package/dist/css/hx-dropdown.css +2 -2
- package/dist/css/hx-field-label.css +2 -2
- package/dist/css/hx-field.css +2 -2
- package/dist/css/hx-file-upload.css +11 -11
- package/dist/css/hx-help-text.css +2 -2
- package/dist/css/hx-icon-button.css +6 -6
- package/dist/css/hx-link.css +2 -2
- package/dist/css/hx-menu.css +2 -2
- package/dist/css/hx-number-input.css +12 -12
- package/dist/css/hx-overflow-menu.css +7 -7
- package/dist/css/hx-pagination.css +10 -10
- package/dist/css/hx-phi-field.css +2 -2
- package/dist/css/hx-popover.css +5 -5
- package/dist/css/hx-progress-bar.css +2 -2
- package/dist/css/hx-radio-group.css +2 -2
- package/dist/css/hx-select.css +11 -8
- package/dist/css/hx-side-nav.css +9 -9
- package/dist/css/hx-slider.css +9 -9
- package/dist/css/hx-split-button.css +15 -15
- package/dist/css/hx-split-panel.css +3 -3
- package/dist/css/hx-switch.css +4 -4
- package/dist/css/hx-text-input.css +7 -7
- package/dist/css/hx-textarea.css +7 -7
- package/dist/css/hx-time-picker.css +11 -11
- package/dist/css/hx-toggle-button.css +17 -14
- package/dist/css/hx-tooltip.css +3 -3
- package/dist/css/hx-top-nav.css +7 -7
- package/dist/css/index.css +1 -1
- package/dist/css/manifest.json +162 -163
- package/dist/index.js +40 -40
- package/dist/shared/hx-accordion-Wt52OOZD.js.map +1 -1
- package/dist/shared/{hx-action-bar-BKMADbHj.js → hx-action-bar-6UzmViHI.js} +4 -4
- package/dist/shared/hx-action-bar-6UzmViHI.js.map +1 -0
- package/dist/shared/hx-alert-D7n94HwI.js.map +1 -1
- package/dist/shared/hx-avatar-iLYzu8MJ.js.map +1 -1
- package/dist/shared/hx-badge-CVCmMPyW.js.map +1 -1
- package/dist/shared/hx-banner-C_He7Tr4.js.map +1 -1
- package/dist/shared/{hx-breadcrumb-item-CldCwD1d.js → hx-breadcrumb-item-BgG5RcmA.js} +3 -3
- package/dist/shared/hx-breadcrumb-item-BgG5RcmA.js.map +1 -0
- package/dist/shared/{hx-button-Ddl-T6T-.js → hx-button-CQZswjtQ.js} +15 -15
- package/dist/shared/hx-button-CQZswjtQ.js.map +1 -0
- package/dist/shared/hx-button-group-BJOGWoMa.js.map +1 -1
- package/dist/shared/{hx-card-ycveujjL.js → hx-card-Dy_FuLfS.js} +23 -23
- package/dist/shared/hx-card-Dy_FuLfS.js.map +1 -0
- package/dist/shared/hx-carousel-item-D_dCv61-.js.map +1 -1
- package/dist/shared/{hx-checkbox-DkkoWoye.js → hx-checkbox-ZKjOF7_3.js} +17 -17
- package/dist/shared/{hx-checkbox-DkkoWoye.js.map → hx-checkbox-ZKjOF7_3.js.map} +1 -1
- package/dist/shared/{hx-checkbox-group-C3poJ-Zw.js → hx-checkbox-group-XjOBHLiP.js} +3 -3
- package/dist/shared/hx-checkbox-group-XjOBHLiP.js.map +1 -0
- package/dist/shared/hx-clinical-status-BS5lcddT.js.map +1 -1
- package/dist/shared/hx-code-snippet-B7wUKzyb.js.map +1 -1
- package/dist/shared/hx-color-picker-DBaKTVLr.js.map +1 -1
- package/dist/shared/{hx-combobox-BmgYT7Ar.js → hx-combobox-DLwnvHVd.js} +17 -17
- package/dist/shared/hx-combobox-DLwnvHVd.js.map +1 -0
- package/dist/shared/hx-container-DVI7sxfX.js.map +1 -1
- package/dist/shared/hx-copy-button-8deNUdwP.js.map +1 -1
- package/dist/shared/hx-counter-CKfl_g8K.js.map +1 -1
- package/dist/shared/{hx-data-table-B6h0RPn0.js → hx-data-table-CnLxo9PH.js} +77 -76
- package/dist/shared/hx-data-table-CnLxo9PH.js.map +1 -0
- package/dist/shared/{hx-date-picker-Dq2Nb68_.js → hx-date-picker-D7H7CsVH.js} +21 -21
- package/dist/shared/hx-date-picker-D7H7CsVH.js.map +1 -0
- package/dist/shared/{hx-dialog-CvIlY0Tc.js → hx-dialog-BW-jetzN.js} +33 -33
- package/dist/shared/hx-dialog-BW-jetzN.js.map +1 -0
- package/dist/shared/{hx-divider-DwpOrzMW.js → hx-divider-CvyUVcp-.js} +13 -13
- package/dist/shared/hx-divider-CvyUVcp-.js.map +1 -0
- package/dist/shared/{hx-drawer-Cx2ZJhBe.js → hx-drawer-BT52I4tk.js} +13 -10
- package/dist/shared/hx-drawer-BT52I4tk.js.map +1 -0
- package/dist/shared/{hx-dropdown-BjDrPUq5.js → hx-dropdown-BpVpL6Dz.js} +3 -3
- package/dist/shared/{hx-dropdown-BjDrPUq5.js.map → hx-dropdown-BpVpL6Dz.js.map} +1 -1
- package/dist/shared/{hx-field-Dp3qQMut.js → hx-field-BX4zE3z5.js} +7 -7
- package/dist/shared/hx-field-BX4zE3z5.js.map +1 -0
- package/dist/shared/{hx-field-label-BC8QViXv.js → hx-field-label-DtJzb1r3.js} +8 -8
- package/dist/shared/hx-field-label-DtJzb1r3.js.map +1 -0
- package/dist/shared/{hx-file-upload-B6Yl1u0i.js → hx-file-upload-BNuepoGn.js} +34 -34
- package/dist/shared/hx-file-upload-BNuepoGn.js.map +1 -0
- package/dist/shared/hx-grid-CXZf3jeK.js.map +1 -1
- package/dist/shared/{hx-help-text-D7eytSim.js → hx-help-text-Br3igJv5.js} +7 -7
- package/dist/shared/hx-help-text-Br3igJv5.js.map +1 -0
- package/dist/shared/hx-icon-CcyDPDYY.js.map +1 -1
- package/dist/shared/{hx-icon-button-BHneqPCU.js → hx-icon-button-CqXH5Wwb.js} +7 -7
- package/dist/shared/hx-icon-button-CqXH5Wwb.js.map +1 -0
- package/dist/shared/hx-image-2gt14zZd.js.map +1 -1
- package/dist/shared/{hx-link-BESrWK8M.js → hx-link-Bem4Gn68.js} +8 -8
- package/dist/shared/hx-link-Bem4Gn68.js.map +1 -0
- package/dist/shared/hx-list-_9qVv02L.js.map +1 -1
- package/dist/shared/{hx-menu-divider-Ck-9Os1t.js → hx-menu-divider-DsHWyPHy.js} +37 -37
- package/dist/shared/hx-menu-divider-DsHWyPHy.js.map +1 -0
- package/dist/shared/hx-meter-TbROk-dw.js.map +1 -1
- package/dist/shared/hx-nav-BcYDmjf7.js.map +1 -1
- package/dist/shared/{hx-nav-item-pqPasRUm.js → hx-nav-item-BTMMQv6c.js} +34 -30
- package/dist/shared/hx-nav-item-BTMMQv6c.js.map +1 -0
- package/dist/shared/{hx-number-input-mOIZ3-46.js → hx-number-input-l6jeaGWW.js} +71 -71
- package/dist/shared/hx-number-input-l6jeaGWW.js.map +1 -0
- package/dist/shared/{hx-overflow-menu-Dprb9lnT.js → hx-overflow-menu-DJ4qpgmi.js} +12 -12
- package/dist/shared/hx-overflow-menu-DJ4qpgmi.js.map +1 -0
- package/dist/shared/{hx-pagination-AguTQjYC.js → hx-pagination-5FeVFIve.js} +64 -64
- package/dist/shared/hx-pagination-5FeVFIve.js.map +1 -0
- package/dist/shared/hx-patient-banner-uE6gqLpT.js.map +1 -1
- package/dist/shared/{hx-phi-field-BC_XowhC.js → hx-phi-field-DxeWcRm9.js} +3 -3
- package/dist/shared/hx-phi-field-DxeWcRm9.js.map +1 -0
- package/dist/shared/{hx-popover-B2_203ct.js → hx-popover-C05QcD9m.js} +6 -6
- package/dist/shared/hx-popover-C05QcD9m.js.map +1 -0
- package/dist/shared/hx-popup-DZXpsJ1R.js.map +1 -1
- package/dist/shared/{hx-progress-bar-KjEkEJLy.js → hx-progress-bar-CJdwAeDg.js} +11 -11
- package/dist/shared/hx-progress-bar-CJdwAeDg.js.map +1 -0
- package/dist/shared/hx-progress-ring-3zMwvrwD.js.map +1 -1
- package/dist/shared/hx-prose-BCtK7YL6.js.map +1 -1
- package/dist/shared/{hx-radio-BBC5qZgE.js → hx-radio-QHrhL908.js} +11 -11
- package/dist/shared/hx-radio-QHrhL908.js.map +1 -0
- package/dist/shared/hx-rating-C3E3ENJb.js.map +1 -1
- package/dist/shared/{hx-select-CixTo7jp.js → hx-select-BuMvRDkY.js} +47 -44
- package/dist/shared/hx-select-BuMvRDkY.js.map +1 -0
- package/dist/shared/hx-skeleton-LxkI0pxr.js.map +1 -1
- package/dist/shared/{hx-slider-DFHuzF3N.js → hx-slider-wcF_oyNJ.js} +41 -41
- package/dist/shared/hx-slider-wcF_oyNJ.js.map +1 -0
- package/dist/shared/hx-spinner-BKjuCdZB.js.map +1 -1
- package/dist/shared/{hx-split-button-CGcJMmCG.js → hx-split-button-CEkQqbF9.js} +32 -32
- package/dist/shared/hx-split-button-CEkQqbF9.js.map +1 -0
- package/dist/shared/{hx-split-panel-C-1R10Mc.js → hx-split-panel-BymHlV5e.js} +4 -4
- package/dist/shared/hx-split-panel-BymHlV5e.js.map +1 -0
- package/dist/shared/hx-stack-DGfcOfWJ.js.map +1 -1
- package/dist/shared/hx-stat-BTpykQAt.js.map +1 -1
- package/dist/shared/hx-status-indicator-X2QEWNFt.js.map +1 -1
- package/dist/shared/hx-step-CRNQlmSo.js.map +1 -1
- package/dist/shared/hx-structured-list-CqNbaEXg.js.map +1 -1
- package/dist/shared/{hx-switch-DqOD9JR7.js → hx-switch-CbunfMHW.js} +5 -5
- package/dist/shared/hx-switch-CbunfMHW.js.map +1 -0
- package/dist/shared/hx-tab-panel-BIzKfW5i.js.map +1 -1
- package/dist/shared/hx-tag-CgnrNnte.js.map +1 -1
- package/dist/shared/hx-td-Bra35cH4.js.map +1 -1
- package/dist/shared/hx-text-DMC2CPlL.js.map +1 -1
- package/dist/shared/{hx-text-input--q0GH78x.js → hx-text-input-eSPVURd5.js} +8 -8
- package/dist/shared/hx-text-input-eSPVURd5.js.map +1 -0
- package/dist/shared/{hx-textarea-CK621vSL.js → hx-textarea-C4DjRmo4.js} +12 -12
- package/dist/shared/hx-textarea-C4DjRmo4.js.map +1 -0
- package/dist/shared/{hx-theme-DfEy-SJA.js → hx-theme-DP4oPU1i.js} +44 -35
- package/dist/shared/hx-theme-DP4oPU1i.js.map +1 -0
- package/dist/shared/{hx-time-picker-tPUfgElQ.js → hx-time-picker-BtbHX7A4.js} +28 -28
- package/dist/shared/hx-time-picker-BtbHX7A4.js.map +1 -0
- package/dist/shared/{hx-toggle-button-L-uBJr-a.js → hx-toggle-button-FOvw-ebx.js} +26 -23
- package/dist/shared/hx-toggle-button-FOvw-ebx.js.map +1 -0
- package/dist/shared/{hx-tooltip-B_zfKvwc.js → hx-tooltip-BoZi2crX.js} +4 -4
- package/dist/shared/hx-tooltip-BoZi2crX.js.map +1 -0
- package/dist/shared/{hx-top-nav-CATbRvIv.js → hx-top-nav-Cd9zvv1B.js} +20 -20
- package/dist/shared/hx-top-nav-Cd9zvv1B.js.map +1 -0
- package/dist/shared/hx-tree-item-A45WCiBu.js.map +1 -1
- package/dist/shared/toast-factory-BPPnG3mM.js.map +1 -1
- package/figma-inventory.json +8526 -511
- package/package.json +2 -2
- package/dist/shared/hx-action-bar-BKMADbHj.js.map +0 -1
- package/dist/shared/hx-breadcrumb-item-CldCwD1d.js.map +0 -1
- package/dist/shared/hx-button-Ddl-T6T-.js.map +0 -1
- package/dist/shared/hx-card-ycveujjL.js.map +0 -1
- package/dist/shared/hx-checkbox-group-C3poJ-Zw.js.map +0 -1
- package/dist/shared/hx-combobox-BmgYT7Ar.js.map +0 -1
- package/dist/shared/hx-data-table-B6h0RPn0.js.map +0 -1
- package/dist/shared/hx-date-picker-Dq2Nb68_.js.map +0 -1
- package/dist/shared/hx-dialog-CvIlY0Tc.js.map +0 -1
- package/dist/shared/hx-divider-DwpOrzMW.js.map +0 -1
- package/dist/shared/hx-drawer-Cx2ZJhBe.js.map +0 -1
- package/dist/shared/hx-field-Dp3qQMut.js.map +0 -1
- package/dist/shared/hx-field-label-BC8QViXv.js.map +0 -1
- package/dist/shared/hx-file-upload-B6Yl1u0i.js.map +0 -1
- package/dist/shared/hx-help-text-D7eytSim.js.map +0 -1
- package/dist/shared/hx-icon-button-BHneqPCU.js.map +0 -1
- package/dist/shared/hx-link-BESrWK8M.js.map +0 -1
- package/dist/shared/hx-menu-divider-Ck-9Os1t.js.map +0 -1
- package/dist/shared/hx-nav-item-pqPasRUm.js.map +0 -1
- package/dist/shared/hx-number-input-mOIZ3-46.js.map +0 -1
- package/dist/shared/hx-overflow-menu-Dprb9lnT.js.map +0 -1
- package/dist/shared/hx-pagination-AguTQjYC.js.map +0 -1
- package/dist/shared/hx-phi-field-BC_XowhC.js.map +0 -1
- package/dist/shared/hx-popover-B2_203ct.js.map +0 -1
- package/dist/shared/hx-progress-bar-KjEkEJLy.js.map +0 -1
- package/dist/shared/hx-radio-BBC5qZgE.js.map +0 -1
- package/dist/shared/hx-select-CixTo7jp.js.map +0 -1
- package/dist/shared/hx-slider-DFHuzF3N.js.map +0 -1
- package/dist/shared/hx-split-button-CGcJMmCG.js.map +0 -1
- package/dist/shared/hx-split-panel-C-1R10Mc.js.map +0 -1
- package/dist/shared/hx-switch-DqOD9JR7.js.map +0 -1
- package/dist/shared/hx-text-input--q0GH78x.js.map +0 -1
- package/dist/shared/hx-textarea-CK621vSL.js.map +0 -1
- package/dist/shared/hx-theme-DfEy-SJA.js.map +0 -1
- package/dist/shared/hx-time-picker-tPUfgElQ.js.map +0 -1
- package/dist/shared/hx-toggle-button-L-uBJr-a.js.map +0 -1
- package/dist/shared/hx-tooltip-B_zfKvwc.js.map +0 -1
- package/dist/shared/hx-top-nav-CATbRvIv.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { css as f, html as
|
|
2
|
-
import { property as
|
|
1
|
+
import { css as f, html as d, nothing as p } from "lit";
|
|
2
|
+
import { property as c, state as b, customElement as m } from "lit/decorators.js";
|
|
3
3
|
import { repeat as x } from "lit/directives/repeat.js";
|
|
4
4
|
import { H as y } from "./helix-element-BNEYeiys.js";
|
|
5
5
|
const v = f`
|
|
@@ -29,14 +29,14 @@ const v = f`
|
|
|
29
29
|
/* ─── Head ─── */
|
|
30
30
|
|
|
31
31
|
thead {
|
|
32
|
-
background-color: var(--hx-data-table-header-bg, var(--hx-color-
|
|
32
|
+
background-color: var(--hx-data-table-header-bg, var(--hx-color-surface-raised, #f8fafc));
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
:host([sticky-header]) thead th {
|
|
36
36
|
position: sticky;
|
|
37
37
|
top: 0;
|
|
38
38
|
z-index: 1;
|
|
39
|
-
background-color: var(--hx-data-table-header-bg, var(--hx-color-
|
|
39
|
+
background-color: var(--hx-data-table-header-bg, var(--hx-color-surface-raised, #f8fafc));
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
/* ─── Cells ─── */
|
|
@@ -46,18 +46,18 @@ const v = f`
|
|
|
46
46
|
padding: var(--hx-space-3, 0.75rem) var(--hx-space-4, 1rem);
|
|
47
47
|
text-align: start;
|
|
48
48
|
border-bottom: var(--hx-border-width-thin, 1px) solid
|
|
49
|
-
var(--hx-data-table-border-color, var(--hx-color-
|
|
49
|
+
var(--hx-data-table-border-color, var(--hx-color-border-default, #e2e8f0));
|
|
50
50
|
vertical-align: middle;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
th {
|
|
54
54
|
font-weight: var(--hx-font-weight-semibold, 600);
|
|
55
|
-
color: var(--hx-data-table-header-color, var(--hx-color-
|
|
55
|
+
color: var(--hx-data-table-header-color, var(--hx-color-text-strong, #334155));
|
|
56
56
|
white-space: nowrap;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
td {
|
|
60
|
-
color: var(--hx-data-table-cell-color, var(--hx-color-
|
|
60
|
+
color: var(--hx-data-table-cell-color, var(--hx-color-text-primary, #0f172a));
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
/* ─── Checkbox Column ─── */
|
|
@@ -131,7 +131,7 @@ const v = f`
|
|
|
131
131
|
}
|
|
132
132
|
|
|
133
133
|
tbody tr:hover {
|
|
134
|
-
background-color: var(--hx-data-table-row-hover-bg, var(--hx-color-
|
|
134
|
+
background-color: var(--hx-data-table-row-hover-bg, var(--hx-color-surface-raised, #f8fafc));
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
tbody tr[aria-selected='true'] {
|
|
@@ -153,6 +153,7 @@ const v = f`
|
|
|
153
153
|
display: block;
|
|
154
154
|
height: 1em;
|
|
155
155
|
border-radius: var(--hx-border-radius-sm, 2px);
|
|
156
|
+
/* Skeleton shimmer: intentionally primitive so the animation reads the same across all modes. */
|
|
156
157
|
background: linear-gradient(
|
|
157
158
|
90deg,
|
|
158
159
|
var(--hx-color-neutral-200, #e2e8f0) 25%,
|
|
@@ -206,7 +207,7 @@ const v = f`
|
|
|
206
207
|
|
|
207
208
|
.empty-cell {
|
|
208
209
|
text-align: center;
|
|
209
|
-
color: var(--hx-data-table-empty-color, var(--hx-color-
|
|
210
|
+
color: var(--hx-data-table-empty-color, var(--hx-color-text-secondary, #475569));
|
|
210
211
|
padding: var(--hx-space-8, 2rem) var(--hx-space-4, 1rem);
|
|
211
212
|
}
|
|
212
213
|
|
|
@@ -233,10 +234,10 @@ const v = f`
|
|
|
233
234
|
}
|
|
234
235
|
}
|
|
235
236
|
`;
|
|
236
|
-
var w = Object.defineProperty, g = Object.getOwnPropertyDescriptor, n = (e, r, t,
|
|
237
|
-
for (var
|
|
238
|
-
(h = e[a]) && (
|
|
239
|
-
return
|
|
237
|
+
var w = Object.defineProperty, g = Object.getOwnPropertyDescriptor, n = (e, r, t, s) => {
|
|
238
|
+
for (var o = s > 1 ? void 0 : s ? g(r, t) : r, a = e.length - 1, h; a >= 0; a--)
|
|
239
|
+
(h = e[a]) && (o = (s ? h(r, t, o) : h(o)) || o);
|
|
240
|
+
return s && o && w(r, t, o), o;
|
|
240
241
|
};
|
|
241
242
|
let i = class extends y {
|
|
242
243
|
constructor() {
|
|
@@ -327,41 +328,41 @@ let i = class extends y {
|
|
|
327
328
|
r.querySelectorAll('[part~="td"],[part~="th"]')
|
|
328
329
|
));
|
|
329
330
|
const t = this._cachedCells;
|
|
330
|
-
let
|
|
331
|
-
if (!
|
|
332
|
-
if (t.indexOf(
|
|
333
|
-
let l =
|
|
331
|
+
let s = r.activeElement;
|
|
332
|
+
if (!s) return;
|
|
333
|
+
if (t.indexOf(s) === -1) {
|
|
334
|
+
let l = s.parentElement;
|
|
334
335
|
for (; l; ) {
|
|
335
336
|
if (t.includes(l)) {
|
|
336
|
-
|
|
337
|
+
s = l;
|
|
337
338
|
break;
|
|
338
339
|
}
|
|
339
340
|
l = l.parentElement;
|
|
340
341
|
}
|
|
341
342
|
}
|
|
342
|
-
const
|
|
343
|
+
const o = this._resolvedColumns.length + (this.selectable ? 1 : 0), a = t.indexOf(s);
|
|
343
344
|
if (a === -1) return;
|
|
344
345
|
let h = null;
|
|
345
346
|
if (e.key === "ArrowRight" && a + 1 < t.length)
|
|
346
347
|
h = t[a + 1] ?? null;
|
|
347
348
|
else if (e.key === "ArrowLeft" && a - 1 >= 0)
|
|
348
349
|
h = t[a - 1] ?? null;
|
|
349
|
-
else if (e.key === "ArrowDown" && a +
|
|
350
|
-
h = t[a +
|
|
351
|
-
else if (e.key === "ArrowUp" && a -
|
|
352
|
-
h = t[a -
|
|
350
|
+
else if (e.key === "ArrowDown" && a + o < t.length)
|
|
351
|
+
h = t[a + o] ?? null;
|
|
352
|
+
else if (e.key === "ArrowUp" && a - o >= 0)
|
|
353
|
+
h = t[a - o] ?? null;
|
|
353
354
|
else if (e.key === "Home") {
|
|
354
|
-
const l = a - a %
|
|
355
|
+
const l = a - a % o;
|
|
355
356
|
h = t[l] ?? null;
|
|
356
357
|
} else if (e.key === "End") {
|
|
357
|
-
const l = Math.min(a - a %
|
|
358
|
+
const l = Math.min(a - a % o + o - 1, t.length - 1);
|
|
358
359
|
h = t[l] ?? null;
|
|
359
|
-
} else if (e.key === " " && ((u =
|
|
360
|
-
const l = Number(
|
|
360
|
+
} else if (e.key === " " && ((u = s.getAttribute("part")) != null && u.includes("td"))) {
|
|
361
|
+
const l = Number(s.dataset.rowIndex);
|
|
361
362
|
this.selectable && !isNaN(l) && (e.preventDefault(), this._handleSelect(l, !this._selectedRows.has(l)));
|
|
362
363
|
return;
|
|
363
364
|
}
|
|
364
|
-
h && (e.preventDefault(), h.setAttribute("tabindex", "0"), h.focus(),
|
|
365
|
+
h && (e.preventDefault(), h.setAttribute("tabindex", "0"), h.focus(), s.setAttribute("tabindex", "-1"));
|
|
365
366
|
}
|
|
366
367
|
// ─── Render Helpers ───
|
|
367
368
|
/** @internal */
|
|
@@ -371,7 +372,7 @@ let i = class extends y {
|
|
|
371
372
|
r ? "sort-icon--active" : "",
|
|
372
373
|
r && this.sortDirection === "desc" ? "sort-icon--desc" : ""
|
|
373
374
|
].filter(Boolean).join(" ");
|
|
374
|
-
return
|
|
375
|
+
return d`
|
|
375
376
|
<span part="sort-icon" class=${t} aria-hidden="true">
|
|
376
377
|
<svg
|
|
377
378
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -411,20 +412,20 @@ let i = class extends y {
|
|
|
411
412
|
if (!["ArrowLeft", "ArrowRight", "Home", "End"].includes(e.key)) return;
|
|
412
413
|
const t = r.indexOf(this._focusedHeaderIndex);
|
|
413
414
|
if (t === -1) return;
|
|
414
|
-
let
|
|
415
|
-
e.key === "ArrowRight" ?
|
|
416
|
-
const
|
|
417
|
-
if (
|
|
418
|
-
e.preventDefault(), this._focusedHeaderIndex =
|
|
419
|
-
const a = (u = this.shadowRoot) == null ? void 0 : u.querySelectorAll("thead th[data-col-index]"), h = (a == null ? void 0 : a[
|
|
415
|
+
let s;
|
|
416
|
+
e.key === "ArrowRight" ? s = t === -1 ? 0 : Math.min(t + 1, r.length - 1) : e.key === "ArrowLeft" ? s = t <= 0 ? 0 : t - 1 : e.key === "Home" ? s = 0 : s = r.length - 1;
|
|
417
|
+
const o = r[s];
|
|
418
|
+
if (o === void 0) return;
|
|
419
|
+
e.preventDefault(), this._focusedHeaderIndex = o;
|
|
420
|
+
const a = (u = this.shadowRoot) == null ? void 0 : u.querySelectorAll("thead th[data-col-index]"), h = (a == null ? void 0 : a[o]) ?? null;
|
|
420
421
|
h && h.focus();
|
|
421
422
|
}
|
|
422
423
|
/** @internal */
|
|
423
424
|
_renderHeaderRow() {
|
|
424
425
|
const e = this._sortableIndices, r = this._focusedHeaderIndex >= 0 ? this._focusedHeaderIndex : e[0] ?? -1;
|
|
425
|
-
return
|
|
426
|
+
return d`
|
|
426
427
|
<tr part="tr" @keydown=${this._handleHeaderKeydown}>
|
|
427
|
-
${this.selectable ?
|
|
428
|
+
${this.selectable ? d`
|
|
428
429
|
<th part="th" class="col-checkbox" tabindex="0">
|
|
429
430
|
<input
|
|
430
431
|
type="checkbox"
|
|
@@ -437,18 +438,18 @@ let i = class extends y {
|
|
|
437
438
|
</th>
|
|
438
439
|
` : p}
|
|
439
440
|
${this._resolvedColumns.map(
|
|
440
|
-
(t,
|
|
441
|
+
(t, s) => d`
|
|
441
442
|
<th
|
|
442
443
|
part="th"
|
|
443
|
-
data-col-index=${
|
|
444
|
-
tabindex=${t.sortable &&
|
|
444
|
+
data-col-index=${s}
|
|
445
|
+
tabindex=${t.sortable && s === r ? "0" : "-1"}
|
|
445
446
|
style=${t.width ? `width: ${t.width}` : ""}
|
|
446
447
|
aria-sort=${t.sortable ? this.sortKey === t.key ? this.sortDirection === "asc" ? "ascending" : "descending" : "none" : p}
|
|
447
448
|
@focus=${t.sortable ? () => {
|
|
448
|
-
this._focusedHeaderIndex =
|
|
449
|
+
this._focusedHeaderIndex = s;
|
|
449
450
|
} : p}
|
|
450
451
|
>
|
|
451
|
-
${t.sortable ?
|
|
452
|
+
${t.sortable ? d`
|
|
452
453
|
<button
|
|
453
454
|
class="sort-btn"
|
|
454
455
|
@click=${() => this._handleSort(t.key)}
|
|
@@ -467,13 +468,13 @@ let i = class extends y {
|
|
|
467
468
|
_renderSkeletonRows() {
|
|
468
469
|
return Array.from(
|
|
469
470
|
{ length: 3 },
|
|
470
|
-
(e) =>
|
|
471
|
+
(e) => d`
|
|
471
472
|
<tr part="tr" aria-hidden="true">
|
|
472
|
-
${this.selectable ?
|
|
473
|
+
${this.selectable ? d`<td part="td" class="col-checkbox">
|
|
473
474
|
<span class="skeleton-cell" style="width:1rem;margin:auto"></span>
|
|
474
475
|
</td>` : p}
|
|
475
476
|
${this._resolvedColumns.map(
|
|
476
|
-
() =>
|
|
477
|
+
() => d`
|
|
477
478
|
<td part="td">
|
|
478
479
|
<span class="skeleton-cell"></span>
|
|
479
480
|
</td>
|
|
@@ -486,7 +487,7 @@ let i = class extends y {
|
|
|
486
487
|
/** @internal */
|
|
487
488
|
_renderEmptyRow() {
|
|
488
489
|
const e = this._resolvedColumns.length + (this.selectable ? 1 : 0);
|
|
489
|
-
return
|
|
490
|
+
return d`
|
|
490
491
|
<tr part="tr">
|
|
491
492
|
<td part="td" colspan=${e} class="empty-cell">
|
|
492
493
|
<slot name="empty">${this.emptyLabel}</slot>
|
|
@@ -505,32 +506,32 @@ let i = class extends y {
|
|
|
505
506
|
e,
|
|
506
507
|
(r, t) => this.pageSize > 0 ? (this.page - 1) * this.pageSize + t : t,
|
|
507
508
|
(r, t) => {
|
|
508
|
-
const
|
|
509
|
-
return
|
|
509
|
+
const s = this.pageSize > 0 ? (this.page - 1) * this.pageSize + t : t;
|
|
510
|
+
return d`
|
|
510
511
|
<tr
|
|
511
512
|
part="tr"
|
|
512
|
-
aria-selected=${this.selectable ? String(this._selectedRows.has(
|
|
513
|
-
@click=${() => this._handleRowClick(r,
|
|
514
|
-
@keydown=${(
|
|
515
|
-
(
|
|
513
|
+
aria-selected=${this.selectable ? String(this._selectedRows.has(s)) : p}
|
|
514
|
+
@click=${() => this._handleRowClick(r, s)}
|
|
515
|
+
@keydown=${(o) => {
|
|
516
|
+
(o.key === "Enter" || o.key === " ") && (o.preventDefault(), this._handleRowClick(r, s));
|
|
516
517
|
}}
|
|
517
518
|
>
|
|
518
|
-
${this.selectable ?
|
|
519
|
-
<td part="td" class="col-checkbox" tabindex="-1" data-row-index=${
|
|
519
|
+
${this.selectable ? d`
|
|
520
|
+
<td part="td" class="col-checkbox" tabindex="-1" data-row-index=${s}>
|
|
520
521
|
<input
|
|
521
522
|
type="checkbox"
|
|
522
523
|
part="checkbox"
|
|
523
|
-
aria-label=${`Select row ${
|
|
524
|
-
.checked=${this._selectedRows.has(
|
|
525
|
-
@click=${(
|
|
526
|
-
@change=${(
|
|
524
|
+
aria-label=${`Select row ${s + 1}`}
|
|
525
|
+
.checked=${this._selectedRows.has(s)}
|
|
526
|
+
@click=${(o) => o.stopPropagation()}
|
|
527
|
+
@change=${(o) => this._handleSelect(s, o.target.checked)}
|
|
527
528
|
/>
|
|
528
529
|
</td>
|
|
529
530
|
` : p}
|
|
530
531
|
${this._resolvedColumns.map(
|
|
531
|
-
(
|
|
532
|
-
<td part="td" tabindex="-1" data-row-index=${
|
|
533
|
-
${r[
|
|
532
|
+
(o) => d`
|
|
533
|
+
<td part="td" tabindex="-1" data-row-index=${s}>
|
|
534
|
+
${r[o.key] != null ? String(r[o.key]) : ""}
|
|
534
535
|
</td>
|
|
535
536
|
`
|
|
536
537
|
)}
|
|
@@ -541,7 +542,7 @@ let i = class extends y {
|
|
|
541
542
|
}
|
|
542
543
|
// ─── Render ───
|
|
543
544
|
render() {
|
|
544
|
-
return
|
|
545
|
+
return d`
|
|
545
546
|
<slot name="toolbar"></slot>
|
|
546
547
|
<div class="table-wrapper">
|
|
547
548
|
<table
|
|
@@ -555,7 +556,7 @@ let i = class extends y {
|
|
|
555
556
|
${this._renderHeaderRow()}
|
|
556
557
|
</thead>
|
|
557
558
|
<tbody part="tbody">
|
|
558
|
-
${this.loading ?
|
|
559
|
+
${this.loading ? d`<slot name="loading">${this._renderSkeletonRows()}</slot>` : this._resolvedRows.length === 0 ? this._renderEmptyRow() : this._renderDataRows()}
|
|
559
560
|
</tbody>
|
|
560
561
|
</table>
|
|
561
562
|
</div>
|
|
@@ -564,7 +565,7 @@ let i = class extends y {
|
|
|
564
565
|
};
|
|
565
566
|
i.styles = [v];
|
|
566
567
|
n([
|
|
567
|
-
|
|
568
|
+
c({
|
|
568
569
|
type: Array,
|
|
569
570
|
converter: {
|
|
570
571
|
fromAttribute(e) {
|
|
@@ -579,7 +580,7 @@ n([
|
|
|
579
580
|
})
|
|
580
581
|
], i.prototype, "columns", 2);
|
|
581
582
|
n([
|
|
582
|
-
|
|
583
|
+
c({
|
|
583
584
|
type: Array,
|
|
584
585
|
converter: {
|
|
585
586
|
fromAttribute(e) {
|
|
@@ -594,34 +595,34 @@ n([
|
|
|
594
595
|
})
|
|
595
596
|
], i.prototype, "rows", 2);
|
|
596
597
|
n([
|
|
597
|
-
|
|
598
|
+
c({ type: Boolean, reflect: !0 })
|
|
598
599
|
], i.prototype, "selectable", 2);
|
|
599
600
|
n([
|
|
600
|
-
|
|
601
|
+
c({ type: String, attribute: "sort-key" })
|
|
601
602
|
], i.prototype, "sortKey", 2);
|
|
602
603
|
n([
|
|
603
|
-
|
|
604
|
+
c({ type: String, attribute: "sort-direction" })
|
|
604
605
|
], i.prototype, "sortDirection", 2);
|
|
605
606
|
n([
|
|
606
|
-
|
|
607
|
+
c({ type: Boolean, reflect: !0 })
|
|
607
608
|
], i.prototype, "loading", 2);
|
|
608
609
|
n([
|
|
609
|
-
|
|
610
|
+
c({ type: String, attribute: "empty-label" })
|
|
610
611
|
], i.prototype, "emptyLabel", 2);
|
|
611
612
|
n([
|
|
612
|
-
|
|
613
|
+
c({ type: String })
|
|
613
614
|
], i.prototype, "label", 2);
|
|
614
615
|
n([
|
|
615
|
-
|
|
616
|
+
c({ attribute: "select-all-label" })
|
|
616
617
|
], i.prototype, "selectAllLabel", 2);
|
|
617
618
|
n([
|
|
618
|
-
|
|
619
|
+
c({ type: Boolean, reflect: !0, attribute: "sticky-header" })
|
|
619
620
|
], i.prototype, "stickyHeader", 2);
|
|
620
621
|
n([
|
|
621
|
-
|
|
622
|
+
c({ type: Number })
|
|
622
623
|
], i.prototype, "page", 2);
|
|
623
624
|
n([
|
|
624
|
-
|
|
625
|
+
c({ type: Number, attribute: "page-size" })
|
|
625
626
|
], i.prototype, "pageSize", 2);
|
|
626
627
|
n([
|
|
627
628
|
b()
|
|
@@ -641,4 +642,4 @@ i = n([
|
|
|
641
642
|
export {
|
|
642
643
|
i as H
|
|
643
644
|
};
|
|
644
|
-
//# sourceMappingURL=hx-data-table-
|
|
645
|
+
//# sourceMappingURL=hx-data-table-CnLxo9PH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hx-data-table-CnLxo9PH.js","sources":["../../src/components/hx-data-table/hx-data-table.styles.ts","../../src/components/hx-data-table/hx-data-table.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixDataTableStyles = css`\n :host {\n display: block;\n overflow-x: auto;\n font-family: var(--hx-data-table-font-family, var(--hx-font-family-sans, sans-serif));\n font-size: var(--hx-font-size-sm, 0.875rem);\n }\n\n /* ─── Scroll Wrapper ─── */\n\n .table-wrapper {\n min-width: 0;\n width: 100%;\n }\n\n /* ─── Table ─── */\n\n table {\n width: 100%;\n border-collapse: collapse;\n border-spacing: 0;\n min-width: var(--hx-data-table-min-width, 600px);\n }\n\n /* ─── Head ─── */\n\n thead {\n background-color: var(--hx-data-table-header-bg, var(--hx-color-surface-raised, #f8fafc));\n }\n\n :host([sticky-header]) thead th {\n position: sticky;\n top: 0;\n z-index: 1;\n background-color: var(--hx-data-table-header-bg, var(--hx-color-surface-raised, #f8fafc));\n }\n\n /* ─── Cells ─── */\n\n th,\n td {\n padding: var(--hx-space-3, 0.75rem) var(--hx-space-4, 1rem);\n text-align: start;\n border-bottom: var(--hx-border-width-thin, 1px) solid\n var(--hx-data-table-border-color, var(--hx-color-border-default, #e2e8f0));\n vertical-align: middle;\n }\n\n th {\n font-weight: var(--hx-font-weight-semibold, 600);\n color: var(--hx-data-table-header-color, var(--hx-color-text-strong, #334155));\n white-space: nowrap;\n }\n\n td {\n color: var(--hx-data-table-cell-color, var(--hx-color-text-primary, #0f172a));\n }\n\n /* ─── Checkbox Column ─── */\n\n th.col-checkbox,\n td.col-checkbox {\n /* WCAG 2.5.5 (healthcare mandate): minimum 44x44px touch target */\n width: var(--hx-touch-target-min, 2.75rem);\n min-width: var(--hx-touch-target-min, 2.75rem);\n padding-inline-end: var(--hx-space-2, 0.5rem);\n }\n\n th.col-checkbox {\n text-align: center;\n }\n\n td.col-checkbox {\n text-align: center;\n }\n\n /* ─── Sort Button ─── */\n\n .sort-btn {\n display: inline-flex;\n align-items: center;\n gap: var(--hx-space-1, 0.25rem);\n background: none;\n border: none;\n padding: 0;\n font: inherit;\n font-weight: inherit;\n color: inherit;\n cursor: pointer;\n white-space: nowrap;\n }\n\n .sort-btn: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 border-radius: var(--hx-border-radius-sm, 2px);\n }\n\n /* ─── Sort Icon ─── */\n\n .sort-icon {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n width: 1em;\n height: 1em;\n opacity: var(--hx-opacity-25, 0.25); /* sort icon inactive — intentionally subtle */\n transition:\n opacity var(--hx-transition-fast, 150ms ease),\n transform var(--hx-transition-fast, 150ms ease);\n }\n\n .sort-icon--active {\n opacity: var(--hx-opacity-100, 1);\n color: var(--hx-color-primary-500, #2563eb);\n }\n\n .sort-icon--desc {\n transform: rotate(180deg);\n }\n\n /* ─── Row States ─── */\n\n tbody tr {\n transition: background-color var(--hx-transition-fast, 150ms ease);\n }\n\n tbody tr:hover {\n background-color: var(--hx-data-table-row-hover-bg, var(--hx-color-surface-raised, #f8fafc));\n }\n\n tbody tr[aria-selected='true'] {\n background-color: var(--hx-data-table-row-selected-bg, var(--hx-color-primary-50, #eff6ff));\n }\n\n /* ─── Checkbox Input ─── */\n\n input[type='checkbox'] {\n width: var(--hx-size-4, 1rem);\n height: var(--hx-size-4, 1rem);\n cursor: pointer;\n accent-color: var(--hx-color-primary-500, #2563eb);\n }\n\n /* ─── Loading Skeleton ─── */\n\n .skeleton-cell {\n display: block;\n height: 1em;\n border-radius: var(--hx-border-radius-sm, 2px);\n /* Skeleton shimmer: intentionally primitive so the animation reads the same across all modes. */\n background: linear-gradient(\n 90deg,\n var(--hx-color-neutral-200, #e2e8f0) 25%,\n var(--hx-color-neutral-100, #f1f5f9) 50%,\n var(--hx-color-neutral-200, #e2e8f0) 75%\n );\n background-size: 200% 100%;\n animation: hx-shimmer var(--hx-data-table-shimmer-duration, 1.5s) infinite;\n }\n\n @keyframes hx-shimmer {\n 0% {\n background-position: 200% 0;\n }\n 100% {\n background-position: -200% 0;\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .skeleton-cell {\n animation: none;\n opacity: var(\n --hx-opacity-50,\n 0.5\n ); /* reduced from animation; approximate to available token */\n }\n\n .sort-icon {\n transition: none;\n }\n\n tbody tr {\n transition: none;\n }\n }\n\n /* ─── Cell Focus ─── */\n\n td:focus-visible,\n th:focus-visible,\n [part~='td']:focus-visible,\n [part~='th']: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 border-radius: var(--hx-border-radius-sm, 2px);\n }\n\n /* ─── Empty State ─── */\n\n .empty-cell {\n text-align: center;\n color: var(--hx-data-table-empty-color, var(--hx-color-text-secondary, #475569));\n padding: var(--hx-space-8, 2rem) var(--hx-space-4, 1rem);\n }\n\n /* ─── Forced Colors (Windows High Contrast) ─── */\n\n @media (forced-colors: active) {\n table {\n border: 1px solid CanvasText;\n }\n\n th,\n td {\n border-bottom-color: CanvasText;\n }\n\n tbody tr[aria-selected='true'] {\n outline: 2px solid Highlight;\n }\n\n .skeleton-cell {\n animation: none;\n border: 1px solid GrayText;\n background: none;\n }\n }\n`;\n","import { html, nothing, type PropertyValues } from 'lit';\nimport '../../utilities/document-token-adoption.js';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { repeat } from 'lit/directives/repeat.js';\nimport { HelixElement } from '../../base/index.js';\nimport { helixDataTableStyles } from './hx-data-table.styles.js';\nimport { devWarn } from '../../utils/dev-warn.js';\n\n/**\n * Column definition for `hx-data-table`.\n */\nexport interface HxDataTableColumn {\n key: string;\n label: string;\n sortable?: boolean;\n width?: string;\n}\n\n/**\n * Sort state exported for TypeScript consumers and CEM event types.\n */\nexport interface HxDataTableSortState {\n key: string;\n direction: 'asc' | 'desc';\n}\n\n/** Detail for the hx-select event dispatched by hx-data-table. */\nexport interface HxDataTableSelectDetail {\n selectedRows: Record<string, unknown>[];\n}\n\n/** Detail for the hx-row-click event dispatched by hx-data-table. */\nexport interface HxDataTableRowClickDetail {\n row: Record<string, unknown>;\n index: number;\n}\n\n/**\n * An enterprise data table with sorting, row selection, and keyboard navigation.\n *\n * @summary Enterprise data table with sorting, selection, and responsive scroll.\n *\n * @tag hx-data-table\n *\n * @slot toolbar - Content rendered above the table (e.g., search, actions).\n * @slot empty - Custom empty-state content rendered when `rows` is empty and not loading.\n * @slot loading - Custom loading content rendered when `loading` is true.\n *\n * @fires {CustomEvent<HxDataTableSortState>} hx-sort - Dispatched when a sortable column header is clicked.\n * @fires {CustomEvent<{selectedRows: Record<string, unknown>[]}>} hx-select - Dispatched when row selection changes.\n * @fires {CustomEvent<{row: Record<string, unknown>, index: number}>} hx-row-click - Dispatched when a data row is clicked.\n *\n * @csspart table - The `<table>` element.\n * @csspart thead - The `<thead>` element.\n * @csspart tbody - The `<tbody>` element.\n * @csspart tr - Each `<tr>` element.\n * @csspart th - Each `<th>` element.\n * @csspart td - Each `<td>` element.\n * @csspart sort-icon - The sort indicator icon `<span>` inside sortable headers.\n * @csspart checkbox - Each `<input type=\"checkbox\">` element.\n *\n * @cssprop [--hx-data-table-header-bg=var(--hx-color-neutral-50)] - Header background color.\n * @cssprop [--hx-data-table-header-color=var(--hx-color-neutral-700)] - Header text color.\n * @cssprop [--hx-data-table-cell-color=var(--hx-color-neutral-900)] - Cell text color.\n * @cssprop [--hx-data-table-border-color=var(--hx-color-neutral-200)] - Row border color.\n * @cssprop [--hx-data-table-row-hover-bg=var(--hx-color-neutral-50)] - Row hover background.\n * @cssprop [--hx-data-table-row-selected-bg=var(--hx-color-primary-50)] - Selected row background.\n * @cssprop [--hx-data-table-empty-color=var(--hx-color-neutral-600)] - Empty state text color.\n * @cssprop [--hx-data-table-min-width=600px] - Minimum table width before horizontal scrolling.\n * @cssprop [--hx-data-table-font-family=var(--hx-font-family-sans)] - CSS custom property.\n * @cssprop [--hx-data-table-shimmer-duration=1.5s] - CSS custom property.\n * @cssprop [--hx-font-family-sans] - Font family.\n * @cssprop [--hx-font-size-sm] - Font size.\n * @cssprop [--hx-space-3] - Spacing token.\n * @cssprop [--hx-space-4] - Spacing token.\n * @cssprop [--hx-border-width-thin] - Width.\n * @cssprop [--hx-font-weight-semibold] - Font weight.\n * @cssprop [--hx-touch-target-min] - Minimum touch target size.\n * @cssprop [--hx-space-2] - Spacing token.\n * @cssprop [--hx-space-1] - Spacing token.\n * @cssprop [--hx-focus-ring-width] - Width.\n * @cssprop [--hx-focus-ring-color] - Color.\n * @cssprop [--hx-focus-ring-offset] - CSS custom property.\n * @cssprop [--hx-border-radius-sm] - CSS custom property.\n * @cssprop [--hx-opacity-25] - Opacity.\n * @cssprop [--hx-transition-fast] - Transition timing.\n * @cssprop [--hx-opacity-100] - Opacity.\n * @cssprop [--hx-color-primary-500] - Color.\n * @cssprop [--hx-size-4] - Size token.\n * @cssprop [--hx-color-neutral-50] - Color.\n * @cssprop [--hx-color-neutral-200] - Color.\n * @cssprop [--hx-color-neutral-100] - Color.\n * @cssprop [--hx-color-neutral-700] - Color.\n * @cssprop [--hx-color-neutral-900] - Color.\n * @cssprop [--hx-color-neutral-600] - Color.\n * @cssprop [--hx-color-primary-50] - Color.\n * @cssprop [--hx-opacity-50] - Opacity.\n * @cssprop [--hx-space-8] - Spacing token.\n */\n@customElement('hx-data-table')\nexport class HelixDataTable extends HelixElement {\n static override styles = [helixDataTableStyles];\n\n // ─── Public Properties ───\n\n /**\n * Column definitions. Each item: `{ key, label, sortable?, width? }`.\n * Can be set as a JS array or a JSON string (e.g., from a Drupal Twig attribute).\n * @attr columns\n */\n @property({\n type: Array,\n converter: {\n fromAttribute(value: string | null) {\n if (!value) return [];\n try {\n return JSON.parse(value);\n } catch {\n return [];\n }\n },\n },\n })\n columns: HxDataTableColumn[] = [];\n\n /**\n * Row data. Each item is a plain object keyed by column `key` values.\n * Can be set as a JS array or a JSON string (e.g., from a Drupal Twig attribute).\n * @attr rows\n */\n @property({\n type: Array,\n converter: {\n fromAttribute(value: string | null) {\n if (!value) return [];\n try {\n return JSON.parse(value);\n } catch {\n return [];\n }\n },\n },\n })\n rows: Record<string, unknown>[] = [];\n\n /**\n * When true, renders a checkbox column for row selection.\n * @attr selectable\n */\n @property({ type: Boolean, reflect: true })\n selectable = false;\n\n /**\n * The column key currently used for sorting.\n * @attr sort-key\n */\n @property({ type: String, attribute: 'sort-key' })\n sortKey = '';\n\n /**\n * Current sort direction.\n * @attr sort-direction\n */\n @property({ type: String, attribute: 'sort-direction' })\n sortDirection: 'asc' | 'desc' = 'asc';\n\n /**\n * When true, renders a loading skeleton and sets `aria-busy=\"true\"` on the host.\n * @attr loading\n */\n @property({ type: Boolean, reflect: true })\n loading = false;\n\n /**\n * Text displayed in the default empty state when `rows` is empty and not loading.\n * @attr empty-label\n */\n @property({ type: String, attribute: 'empty-label' })\n emptyLabel = 'No data';\n\n /**\n * Accessible name for the table. Exposed via `aria-label` on the `<table>` element.\n * Required when the table has columns — a missing label is a WCAG 4.1.2 violation.\n * @attr label\n */\n @property({ type: String })\n label = '';\n\n /**\n * Accessible label for the \"select all rows\" checkbox in the table header.\n * @attr select-all-label\n */\n @property({ attribute: 'select-all-label' })\n selectAllLabel = 'Select all rows';\n\n /**\n * When true, the header row is sticky (position: sticky; top: 0).\n * @attr sticky-header\n */\n @property({ type: Boolean, reflect: true, attribute: 'sticky-header' })\n stickyHeader = false;\n\n /**\n * Current page (1-based). Set to 0 or leave at default (0) to disable pagination.\n * @attr page\n */\n @property({ type: Number })\n page = 1;\n\n /**\n * Number of rows per page. Set to 0 to disable pagination (show all rows).\n * @attr page-size\n */\n @property({ type: Number, attribute: 'page-size' })\n pageSize = 0;\n\n // ─── Internal State ───\n\n /** @internal */\n @state()\n private _selectedRows: Set<number> = new Set();\n\n /**\n * Cached flat list of all td/th cells in the shadow DOM.\n * Invalidated (set to null) whenever rows or columns change so the next keydown\n * re-queries the DOM and re-caches. Avoids repeated querySelectorAll on every keypress.\n * @internal\n */\n private _cachedCells: HTMLElement[] | null = null;\n\n /**\n * Index (within the columns array) of the sortable header that currently holds\n * roving tabindex focus. -1 means no sortable header has been focused yet;\n * the first sortable column will receive tabindex=\"0\" by default.\n * @internal\n */\n @state() private _focusedHeaderIndex = -1;\n\n /**\n * Resolved columns array. Computed in willUpdate from the public `columns`\n * property which may be a JSON string (Drupal/Twig path) or a JS array.\n * All internal reads use this field to avoid mutating reactive properties\n * inside willUpdate (which would trigger extra update cycles).\n * @internal\n */\n @state() private _resolvedColumns: HxDataTableColumn[] = [];\n\n /**\n * Resolved rows array. Computed in willUpdate from the public `rows`\n * property which may be a JSON string (Drupal/Twig path) or a JS array.\n * @internal\n */\n @state() private _resolvedRows: Record<string, unknown>[] = [];\n\n // ─── Lifecycle ───\n\n override willUpdate(changed: PropertyValues<this>): void {\n // Coerce JSON strings to arrays — this is the Drupal/Twig integration path.\n // Lit does not JSON-parse array attributes automatically, so we do it here.\n // Note: Lit's defaultConverter returns null (not a string) when JSON.parse fails for\n // type: Array — so we guard against both string and any non-array value.\n //\n // We write to private @state() resolved fields instead of mutating the public\n // reactive properties. Mutating @property fields inside willUpdate triggers an\n // additional update cycle; writing to separate @state fields does not because\n // Lit batches all changes within the same willUpdate into a single render.\n if (changed.has('columns')) {\n const rawColumns: unknown = this.columns;\n if (typeof rawColumns === 'string') {\n try {\n this._resolvedColumns = JSON.parse(rawColumns) as HxDataTableColumn[];\n } catch {\n this._resolvedColumns = [];\n }\n } else if (Array.isArray(this.columns)) {\n this._resolvedColumns = this.columns;\n } else {\n this._resolvedColumns = [];\n }\n }\n if (changed.has('rows')) {\n const rawRows: unknown = this.rows;\n if (typeof rawRows === 'string') {\n try {\n this._resolvedRows = JSON.parse(rawRows) as Record<string, unknown>[];\n } catch {\n this._resolvedRows = [];\n }\n } else if (Array.isArray(this.rows)) {\n this._resolvedRows = this.rows;\n } else {\n this._resolvedRows = [];\n }\n }\n // Only warn when rows actually changes to avoid noise on every property update.\n if (changed.has('rows') && this._resolvedRows.length > 500) {\n devWarn(\n 'hx-data-table',\n 'Rendering more than 500 rows may impact performance. Consider server-side pagination.',\n );\n }\n // WCAG 4.1.2: data tables must have an accessible name so screen readers can identify them.\n if (\n (changed.has('label') || changed.has('columns')) &&\n this._resolvedColumns.length > 0 &&\n !this.label\n ) {\n devWarn(\n 'hx-data-table',\n 'No accessible name provided. Set the `label` attribute so screen readers can identify this table (WCAG 4.1.2).',\n );\n }\n }\n\n override updated(changed: PropertyValues<this>): void {\n // Invalidate cell cache when rows or columns change so the next keyboard\n // navigation re-queries and re-caches the updated DOM. We check the public\n // properties because _resolvedColumns/_resolvedRows are derived from them\n // in willUpdate and always change in lockstep.\n if (changed.has('rows') || changed.has('columns')) {\n this._cachedCells = null;\n }\n }\n\n // ─── Event Handlers ───\n\n /** @internal */\n private _handleSort(key: string): void {\n const direction =\n this.sortKey === key ? (this.sortDirection === 'asc' ? 'desc' : 'asc') : 'asc';\n this.sortKey = key;\n this.sortDirection = direction;\n this.dispatchEvent(\n new CustomEvent<HxDataTableSortState>('hx-sort', {\n bubbles: true,\n composed: true,\n detail: { key, direction },\n }),\n );\n }\n\n /** @internal */\n private _handleRowClick(row: Record<string, unknown>, index: number): void {\n this.dispatchEvent(\n new CustomEvent<{ row: Record<string, unknown>; index: number }>('hx-row-click', {\n bubbles: true,\n composed: true,\n detail: { row, index },\n }),\n );\n }\n\n /** @internal */\n private _handleSelect(index: number, checked: boolean): void {\n const next = new Set(this._selectedRows);\n if (checked) {\n next.add(index);\n } else {\n next.delete(index);\n }\n this._selectedRows = next;\n this._dispatchSelect();\n }\n\n /** @internal */\n private _handleSelectAll(checked: boolean): void {\n this._selectedRows = checked ? new Set(this._resolvedRows.map((_, i) => i)) : new Set<number>();\n this._dispatchSelect();\n }\n\n /** @internal */\n private _dispatchSelect(): void {\n this.dispatchEvent(\n new CustomEvent<{ selectedRows: Record<string, unknown>[] }>('hx-select', {\n bubbles: true,\n composed: true,\n detail: {\n selectedRows: [...this._selectedRows].flatMap((i) => {\n const row = this._resolvedRows[i];\n return row !== undefined ? [row] : [];\n }),\n },\n }),\n );\n }\n\n // ─── Keyboard Navigation ───\n\n /** @internal */\n private _handleKeydown(e: KeyboardEvent): void {\n if (!['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'Home', 'End', ' '].includes(e.key))\n return;\n\n const root = this.shadowRoot;\n if (!root) return;\n\n // Use cached cell list; re-query only when invalidated by rows/columns change\n if (!this._cachedCells) {\n this._cachedCells = Array.from(\n root.querySelectorAll<HTMLElement>('[part~=\"td\"],[part~=\"th\"]'),\n );\n }\n const cells = this._cachedCells;\n\n // When focus is inside a child element (e.g., the sort <button> inside a <th>),\n // shadowRoot.activeElement returns the child, not the cell. Walk up to find the cell.\n let focused = root.activeElement as HTMLElement | null;\n if (!focused) return;\n\n if (cells.indexOf(focused) === -1) {\n let ancestor = focused.parentElement;\n while (ancestor) {\n if (cells.includes(ancestor as HTMLElement)) {\n focused = ancestor as HTMLElement;\n break;\n }\n ancestor = ancestor.parentElement;\n }\n }\n\n const colCount = this._resolvedColumns.length + (this.selectable ? 1 : 0);\n const idx = cells.indexOf(focused);\n if (idx === -1) return;\n\n let target: HTMLElement | null = null;\n\n if (e.key === 'ArrowRight' && idx + 1 < cells.length) {\n target = cells[idx + 1] ?? null;\n } else if (e.key === 'ArrowLeft' && idx - 1 >= 0) {\n target = cells[idx - 1] ?? null;\n } else if (e.key === 'ArrowDown' && idx + colCount < cells.length) {\n target = cells[idx + colCount] ?? null;\n } else if (e.key === 'ArrowUp' && idx - colCount >= 0) {\n target = cells[idx - colCount] ?? null;\n } else if (e.key === 'Home') {\n // First cell of the current row\n const rowStart = idx - (idx % colCount);\n target = cells[rowStart] ?? null;\n } else if (e.key === 'End') {\n // Last cell of the current row\n const rowEnd = Math.min(idx - (idx % colCount) + colCount - 1, cells.length - 1);\n target = cells[rowEnd] ?? null;\n } else if (e.key === ' ' && focused.getAttribute('part')?.includes('td')) {\n // Toggle selection on Space in a data row\n const rowIdx = Number(focused.dataset['rowIndex']);\n if (this.selectable && !isNaN(rowIdx)) {\n e.preventDefault();\n this._handleSelect(rowIdx, !this._selectedRows.has(rowIdx));\n }\n return;\n }\n\n if (target) {\n e.preventDefault();\n target.setAttribute('tabindex', '0');\n target.focus();\n focused.setAttribute('tabindex', '-1');\n }\n }\n\n // ─── Render Helpers ───\n\n /** @internal */\n private _renderSortIcon(key: string) {\n const isActive = this.sortKey === key;\n const iconClass = [\n 'sort-icon',\n isActive ? 'sort-icon--active' : '',\n isActive && this.sortDirection === 'desc' ? 'sort-icon--desc' : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n return html`\n <span part=\"sort-icon\" class=${iconClass} aria-hidden=\"true\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path d=\"M8 3L5 7h6L8 3zM8 13l3-4H5l3 4z\" fill-rule=\"evenodd\" />\n </svg>\n </span>\n `;\n }\n\n /**\n * Returns the indices (within the columns array) of all sortable columns.\n * @internal\n */\n private get _sortableIndices(): number[] {\n return this._resolvedColumns.reduce<number[]>((acc, col, i) => {\n if (col.sortable) acc.push(i);\n return acc;\n }, []);\n }\n\n /**\n * Handles keyboard navigation between sortable column headers using the\n * roving tabindex pattern (ARIA Grid specification). Supports ArrowLeft/Right\n * to move between sortable headers, Home/End to jump to first/last, and\n * Enter/Space to trigger sort on the focused sortable header.\n * @internal\n */\n private _handleHeaderKeydown(e: KeyboardEvent): void {\n const sortable = this._sortableIndices;\n if (sortable.length === 0) return;\n\n // Enter/Space on a sortable header triggers sort\n if (e.key === 'Enter' || e.key === ' ') {\n const col = this._resolvedColumns[this._focusedHeaderIndex];\n if (col?.sortable) {\n e.preventDefault();\n this._handleSort(col.key);\n }\n return;\n }\n\n if (!['ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(e.key)) return;\n\n // Determine which sortable position is currently focused.\n // If no sortable header is focused (currentPos === -1), let the\n // table-level _handleKeydown handle grid navigation instead.\n const currentPos = sortable.indexOf(this._focusedHeaderIndex);\n if (currentPos === -1) return;\n let nextPos: number;\n\n if (e.key === 'ArrowRight') {\n nextPos = currentPos === -1 ? 0 : Math.min(currentPos + 1, sortable.length - 1);\n } else if (e.key === 'ArrowLeft') {\n nextPos = currentPos <= 0 ? 0 : currentPos - 1;\n } else if (e.key === 'Home') {\n nextPos = 0;\n } else {\n // End\n nextPos = sortable.length - 1;\n }\n\n const nextIndex = sortable[nextPos];\n if (nextIndex === undefined) return;\n\n e.preventDefault();\n this._focusedHeaderIndex = nextIndex;\n\n // Focus the <th> element for the target column\n const headers = this.shadowRoot?.querySelectorAll<HTMLElement>('thead th[data-col-index]');\n const target = headers?.[nextIndex] ?? null;\n if (target) {\n target.focus();\n }\n }\n\n /** @internal */\n private _renderHeaderRow() {\n // Determine which sortable header gets tabindex=\"0\" (roving tabindex).\n // If _focusedHeaderIndex is -1 (initial), the first sortable column wins.\n const sortable = this._sortableIndices;\n const activeIndex =\n this._focusedHeaderIndex >= 0 ? this._focusedHeaderIndex : (sortable[0] ?? -1);\n\n return html`\n <tr part=\"tr\" @keydown=${this._handleHeaderKeydown}>\n ${this.selectable\n ? html`\n <th part=\"th\" class=\"col-checkbox\" tabindex=\"0\">\n <input\n type=\"checkbox\"\n part=\"checkbox\"\n aria-label=${this.selectAllLabel}\n .indeterminate=${this._selectedRows.size > 0 &&\n this._selectedRows.size < this._resolvedRows.length}\n .checked=${this._selectedRows.size === this._resolvedRows.length &&\n this._resolvedRows.length > 0}\n @change=${(e: Event) =>\n this._handleSelectAll((e.target as HTMLInputElement).checked)}\n />\n </th>\n `\n : nothing}\n ${this._resolvedColumns.map(\n (col, i) => html`\n <th\n part=\"th\"\n data-col-index=${i}\n tabindex=${col.sortable ? (i === activeIndex ? '0' : '-1') : '-1'}\n style=${col.width ? `width: ${col.width}` : ''}\n aria-sort=${col.sortable\n ? this.sortKey === col.key\n ? this.sortDirection === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none'\n : nothing}\n @focus=${col.sortable\n ? () => {\n this._focusedHeaderIndex = i;\n }\n : nothing}\n >\n ${col.sortable\n ? html`\n <button\n class=\"sort-btn\"\n @click=${() => this._handleSort(col.key)}\n aria-label=${this.sortKey === col.key\n ? `Sort by ${col.label}, currently sorted ${this.sortDirection === 'asc' ? 'ascending' : 'descending'}`\n : `Sort by ${col.label}`}\n >\n ${col.label} ${this._renderSortIcon(col.key)}\n </button>\n `\n : col.label}\n </th>\n `,\n )}\n </tr>\n `;\n }\n\n /** @internal */\n private _renderSkeletonRows() {\n return Array.from(\n { length: 3 },\n (_) => html`\n <tr part=\"tr\" aria-hidden=\"true\">\n ${this.selectable\n ? html`<td part=\"td\" class=\"col-checkbox\">\n <span class=\"skeleton-cell\" style=\"width:1rem;margin:auto\"></span>\n </td>`\n : nothing}\n ${this._resolvedColumns.map(\n () => html`\n <td part=\"td\">\n <span class=\"skeleton-cell\"></span>\n </td>\n `,\n )}\n </tr>\n `,\n );\n }\n\n /** @internal */\n private _renderEmptyRow() {\n const colSpan = this._resolvedColumns.length + (this.selectable ? 1 : 0);\n return html`\n <tr part=\"tr\">\n <td part=\"td\" colspan=${colSpan} class=\"empty-cell\">\n <slot name=\"empty\">${this.emptyLabel}</slot>\n </td>\n </tr>\n `;\n }\n\n /** @internal */\n private _renderDataRows() {\n let displayRows = this._resolvedRows;\n\n // Client-side pagination when pageSize > 0\n if (this.pageSize > 0) {\n const start = (this.page - 1) * this.pageSize;\n displayRows = this._resolvedRows.slice(start, start + this.pageSize);\n }\n\n return repeat(\n displayRows,\n (_row, pageIndex) => {\n const globalIndex =\n this.pageSize > 0 ? (this.page - 1) * this.pageSize + pageIndex : pageIndex;\n return globalIndex;\n },\n (row, pageIndex) => {\n // The global row index for selection and events\n const globalIndex =\n this.pageSize > 0 ? (this.page - 1) * this.pageSize + pageIndex : pageIndex;\n return html`\n <tr\n part=\"tr\"\n aria-selected=${this.selectable ? String(this._selectedRows.has(globalIndex)) : nothing}\n @click=${() => this._handleRowClick(row, globalIndex)}\n @keydown=${(e: KeyboardEvent) => {\n // WCAG 2.1.1: rows are keyboard-activatable via Enter and Space so that\n // the hx-row-click event fires equivalently for keyboard users.\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this._handleRowClick(row, globalIndex);\n }\n }}\n >\n ${this.selectable\n ? html`\n <td part=\"td\" class=\"col-checkbox\" tabindex=\"-1\" data-row-index=${globalIndex}>\n <input\n type=\"checkbox\"\n part=\"checkbox\"\n aria-label=${`Select row ${globalIndex + 1}`}\n .checked=${this._selectedRows.has(globalIndex)}\n @click=${(e: Event) => e.stopPropagation()}\n @change=${(e: Event) =>\n this._handleSelect(globalIndex, (e.target as HTMLInputElement).checked)}\n />\n </td>\n `\n : nothing}\n ${this._resolvedColumns.map(\n (col) => html`\n <td part=\"td\" tabindex=\"-1\" data-row-index=${globalIndex}>\n ${row[col.key] != null ? String(row[col.key]) : ''}\n </td>\n `,\n )}\n </tr>\n `;\n },\n );\n }\n\n // ─── Render ───\n\n override render() {\n return html`\n <slot name=\"toolbar\"></slot>\n <div class=\"table-wrapper\">\n <table\n part=\"table\"\n role=\"grid\"\n aria-label=${this.label.trim() || 'Table'}\n aria-busy=${this.loading ? 'true' : nothing}\n @keydown=${this._handleKeydown}\n >\n <thead part=\"thead\">\n ${this._renderHeaderRow()}\n </thead>\n <tbody part=\"tbody\">\n ${this.loading\n ? html`<slot name=\"loading\">${this._renderSkeletonRows()}</slot>`\n : this._resolvedRows.length === 0\n ? this._renderEmptyRow()\n : this._renderDataRows()}\n </tbody>\n </table>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-data-table': HelixDataTable;\n }\n}\n"],"names":["helixDataTableStyles","css","HelixDataTable","HelixElement","changed","rawColumns","rawRows","key","direction","row","index","checked","next","_","i","root","cells","focused","ancestor","colCount","idx","target","rowStart","rowEnd","_a","rowIdx","isActive","iconClass","html","acc","col","sortable","currentPos","nextPos","nextIndex","headers","activeIndex","e","nothing","colSpan","displayRows","start","repeat","_row","pageIndex","globalIndex","__decorateClass","property","value","state","customElement"],"mappings":";;;;AAEO,MAAMA,IAAuBC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;ACkG7B,IAAMC,IAAN,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"}
|
|
@@ -46,7 +46,7 @@ const C = D`
|
|
|
46
46
|
gap: var(--hx-space-1, 0.25rem);
|
|
47
47
|
font-size: var(--hx-font-size-sm, 0.875rem);
|
|
48
48
|
font-weight: var(--hx-font-weight-medium, 500);
|
|
49
|
-
color: var(--hx-date-picker-label-color, var(--hx-color-
|
|
49
|
+
color: var(--hx-date-picker-label-color, var(--hx-color-text-strong, #334155));
|
|
50
50
|
line-height: var(--hx-line-height-normal, 1.5);
|
|
51
51
|
}
|
|
52
52
|
|
|
@@ -63,9 +63,9 @@ const C = D`
|
|
|
63
63
|
display: flex;
|
|
64
64
|
align-items: stretch;
|
|
65
65
|
border: var(--hx-border-width-thin, 1px) solid
|
|
66
|
-
var(--hx-date-picker-border-color, var(--hx-color-
|
|
66
|
+
var(--hx-date-picker-border-color, var(--hx-color-border-strong, #cbd5e1));
|
|
67
67
|
border-radius: var(--hx-date-picker-border-radius, var(--hx-border-radius-md, 0.375rem));
|
|
68
|
-
background-color: var(--hx-date-picker-bg, var(--hx-color-
|
|
68
|
+
background-color: var(--hx-date-picker-bg, var(--hx-color-surface-default, #ffffff));
|
|
69
69
|
transition:
|
|
70
70
|
border-color var(--hx-transition-fast, 150ms ease),
|
|
71
71
|
box-shadow var(--hx-transition-fast, 150ms ease);
|
|
@@ -116,7 +116,7 @@ const C = D`
|
|
|
116
116
|
padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);
|
|
117
117
|
font-family: inherit;
|
|
118
118
|
font-size: var(--hx-font-size-md, 1rem);
|
|
119
|
-
color: var(--hx-date-picker-color, var(--hx-color-
|
|
119
|
+
color: var(--hx-date-picker-color, var(--hx-color-text-strong, #1e293b));
|
|
120
120
|
line-height: var(--hx-line-height-normal, 1.5);
|
|
121
121
|
min-height: var(--hx-size-10, 2.5rem);
|
|
122
122
|
width: 100%;
|
|
@@ -124,7 +124,7 @@ const C = D`
|
|
|
124
124
|
}
|
|
125
125
|
|
|
126
126
|
.field__input::placeholder {
|
|
127
|
-
color: var(--hx-color-
|
|
127
|
+
color: var(--hx-color-text-placeholder, #94a3b8);
|
|
128
128
|
}
|
|
129
129
|
|
|
130
130
|
.field__input:disabled {
|
|
@@ -142,9 +142,9 @@ const C = D`
|
|
|
142
142
|
padding: 0 var(--hx-space-3, 0.75rem);
|
|
143
143
|
border: none;
|
|
144
144
|
border-left: var(--hx-border-width-thin, 1px) solid
|
|
145
|
-
var(--hx-date-picker-border-color, var(--hx-color-
|
|
145
|
+
var(--hx-date-picker-border-color, var(--hx-color-border-strong, #cbd5e1));
|
|
146
146
|
background: transparent;
|
|
147
|
-
color: var(--hx-date-picker-trigger-color, var(--hx-color-
|
|
147
|
+
color: var(--hx-date-picker-trigger-color, var(--hx-color-text-muted, #64748b));
|
|
148
148
|
cursor: pointer;
|
|
149
149
|
flex-shrink: 0;
|
|
150
150
|
transition: color var(--hx-transition-fast, 150ms ease);
|
|
@@ -168,7 +168,7 @@ const C = D`
|
|
|
168
168
|
}
|
|
169
169
|
|
|
170
170
|
.field__trigger:hover:not(:disabled) {
|
|
171
|
-
color: var(--hx-date-picker-trigger-hover-color, var(--hx-color-
|
|
171
|
+
color: var(--hx-date-picker-trigger-hover-color, var(--hx-color-text-strong, #334155));
|
|
172
172
|
background-color: color-mix(in srgb, var(--hx-color-neutral-900, #0f172a) 4%, transparent);
|
|
173
173
|
}
|
|
174
174
|
|
|
@@ -186,9 +186,9 @@ const C = D`
|
|
|
186
186
|
left: 0;
|
|
187
187
|
z-index: var(--hx-z-index-dropdown, 1000);
|
|
188
188
|
min-width: var(--hx-date-picker-calendar-min-width, 18rem);
|
|
189
|
-
background-color: var(--hx-date-picker-calendar-bg, var(--hx-color-
|
|
189
|
+
background-color: var(--hx-date-picker-calendar-bg, var(--hx-color-surface-default, #ffffff));
|
|
190
190
|
border: var(--hx-border-width-thin, 1px) solid
|
|
191
|
-
var(--hx-date-picker-calendar-border-color, var(--hx-color-
|
|
191
|
+
var(--hx-date-picker-calendar-border-color, var(--hx-color-border-default, #e2e8f0));
|
|
192
192
|
border-radius: var(--hx-date-picker-calendar-border-radius, var(--hx-border-radius-lg, 0.5rem));
|
|
193
193
|
box-shadow: var(
|
|
194
194
|
--hx-date-picker-calendar-shadow,
|
|
@@ -247,14 +247,14 @@ const C = D`
|
|
|
247
247
|
}
|
|
248
248
|
|
|
249
249
|
.calendar__nav-btn {
|
|
250
|
-
color: var(--hx-color-
|
|
250
|
+
color: var(--hx-color-text-secondary, #475569);
|
|
251
251
|
font-size: var(--hx-font-size-lg, 1.125rem);
|
|
252
252
|
line-height: 1;
|
|
253
253
|
}
|
|
254
254
|
|
|
255
255
|
.calendar__nav-btn:hover {
|
|
256
|
-
background-color: var(--hx-color-
|
|
257
|
-
color: var(--hx-color-
|
|
256
|
+
background-color: var(--hx-color-surface-sunken, #f1f5f9);
|
|
257
|
+
color: var(--hx-color-text-primary, #0f172a);
|
|
258
258
|
}
|
|
259
259
|
|
|
260
260
|
:is(.calendar__nav-btn, .calendar__day):focus-visible {
|
|
@@ -275,7 +275,7 @@ const C = D`
|
|
|
275
275
|
.calendar__month-label {
|
|
276
276
|
font-size: var(--hx-font-size-sm, 0.875rem);
|
|
277
277
|
font-weight: var(--hx-font-weight-semibold, 600);
|
|
278
|
-
color: var(--hx-color-
|
|
278
|
+
color: var(--hx-color-text-strong, #1e293b);
|
|
279
279
|
flex: 1;
|
|
280
280
|
text-align: center;
|
|
281
281
|
}
|
|
@@ -300,7 +300,7 @@ const C = D`
|
|
|
300
300
|
height: var(--hx-size-8, 2rem);
|
|
301
301
|
font-size: var(--hx-font-size-xs, 0.75rem);
|
|
302
302
|
font-weight: var(--hx-font-weight-semibold, 600);
|
|
303
|
-
color: var(--hx-color-
|
|
303
|
+
color: var(--hx-color-text-muted, #64748b);
|
|
304
304
|
text-transform: uppercase;
|
|
305
305
|
letter-spacing: 0.05em;
|
|
306
306
|
}
|
|
@@ -310,20 +310,20 @@ const C = D`
|
|
|
310
310
|
============================================================ */
|
|
311
311
|
|
|
312
312
|
.calendar__day {
|
|
313
|
-
color: var(--hx-color-
|
|
313
|
+
color: var(--hx-color-text-strong, #1e293b);
|
|
314
314
|
font-size: var(--hx-font-size-sm, 0.875rem);
|
|
315
315
|
font-family: inherit;
|
|
316
316
|
position: relative;
|
|
317
317
|
}
|
|
318
318
|
|
|
319
319
|
.calendar__day:hover:not(.calendar__day--disabled):not(.calendar__day--selected) {
|
|
320
|
-
background-color: var(--hx-color-
|
|
321
|
-
color: var(--hx-color-
|
|
320
|
+
background-color: var(--hx-color-surface-sunken, #f1f5f9);
|
|
321
|
+
color: var(--hx-color-text-primary, #0f172a);
|
|
322
322
|
}
|
|
323
323
|
|
|
324
324
|
.calendar__day--selected {
|
|
325
325
|
background-color: var(--hx-date-picker-selected-bg, var(--hx-color-primary-500, #2563eb));
|
|
326
|
-
color: var(--hx-date-picker-selected-color, var(--hx-color-
|
|
326
|
+
color: var(--hx-date-picker-selected-color, var(--hx-color-text-on-primary, #ffffff));
|
|
327
327
|
font-weight: var(--hx-font-weight-semibold, 600);
|
|
328
328
|
}
|
|
329
329
|
|
|
@@ -381,7 +381,7 @@ const C = D`
|
|
|
381
381
|
}
|
|
382
382
|
|
|
383
383
|
.field__help-text {
|
|
384
|
-
color: var(--hx-color-
|
|
384
|
+
color: var(--hx-color-text-muted, #64748b);
|
|
385
385
|
}
|
|
386
386
|
|
|
387
387
|
.field__error {
|
|
@@ -1074,4 +1074,4 @@ s = n([
|
|
|
1074
1074
|
export {
|
|
1075
1075
|
s as H
|
|
1076
1076
|
};
|
|
1077
|
-
//# sourceMappingURL=hx-date-picker-
|
|
1077
|
+
//# sourceMappingURL=hx-date-picker-D7H7CsVH.js.map
|