@helixui/library 3.3.1 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +340 -71
- package/dist/components/hx-accordion/hx-accordion-item.d.ts +35 -0
- package/dist/components/hx-accordion/hx-accordion-item.d.ts.map +1 -1
- package/dist/components/hx-alert/hx-alert.d.ts +11 -0
- package/dist/components/hx-alert/hx-alert.d.ts.map +1 -1
- package/dist/components/hx-alert/hx-alert.styles.d.ts.map +1 -1
- package/dist/components/hx-alert/index.js +1 -1
- package/dist/components/hx-badge/hx-badge.styles.d.ts.map +1 -1
- package/dist/components/hx-badge/index.js +1 -1
- package/dist/components/hx-banner/hx-banner.d.ts +9 -1
- package/dist/components/hx-banner/hx-banner.d.ts.map +1 -1
- package/dist/components/hx-banner/index.js +1 -1
- package/dist/components/hx-button/hx-button.d.ts +11 -1
- 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 +13 -0
- package/dist/components/hx-button-group/hx-button-group.d.ts.map +1 -1
- package/dist/components/hx-button-group/index.js +1 -1
- package/dist/components/hx-checkbox/hx-checkbox.d.ts +153 -1
- package/dist/components/hx-checkbox/hx-checkbox.d.ts.map +1 -1
- package/dist/components/hx-checkbox/hx-checkbox.styles.d.ts.map +1 -1
- package/dist/components/hx-checkbox/index.js +1 -1
- package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts +151 -2
- 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-color-picker/hx-color-picker.d.ts +163 -1
- package/dist/components/hx-color-picker/hx-color-picker.d.ts.map +1 -1
- package/dist/components/hx-color-picker/hx-color-picker.styles.d.ts.map +1 -1
- package/dist/components/hx-color-picker/index.js +1 -1
- package/dist/components/hx-combobox/hx-combobox.d.ts +311 -2
- 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-data-table/hx-data-table.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 +182 -56
- package/dist/components/hx-date-picker/hx-date-picker.d.ts.map +1 -1
- package/dist/components/hx-date-picker/hx-date-picker.styles.d.ts.map +1 -1
- package/dist/components/hx-date-picker/index.js +1 -1
- package/dist/components/hx-dialog/hx-dialog.d.ts +240 -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-drawer/hx-drawer.d.ts +201 -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 +168 -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 +109 -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-icon-button/hx-icon-button.d.ts +16 -3
- package/dist/components/hx-icon-button/hx-icon-button.d.ts.map +1 -1
- package/dist/components/hx-icon-button/hx-icon-button.styles.d.ts.map +1 -1
- package/dist/components/hx-icon-button/index.js +1 -1
- package/dist/components/hx-link/hx-link.d.ts +10 -1
- 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-item.d.ts +27 -1
- package/dist/components/hx-list/hx-list-item.d.ts.map +1 -1
- package/dist/components/hx-list/hx-list.d.ts +28 -0
- package/dist/components/hx-list/hx-list.d.ts.map +1 -1
- package/dist/components/hx-list/index.js +1 -1
- package/dist/components/hx-menu/hx-menu-divider.d.ts +10 -0
- package/dist/components/hx-menu/hx-menu-divider.d.ts.map +1 -1
- package/dist/components/hx-menu/hx-menu-item.d.ts +99 -2
- package/dist/components/hx-menu/hx-menu-item.d.ts.map +1 -1
- package/dist/components/hx-menu/hx-menu-item.styles.d.ts.map +1 -1
- package/dist/components/hx-menu/hx-menu.d.ts +117 -2
- 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 +39 -0
- package/dist/components/hx-meter/hx-meter.d.ts.map +1 -1
- package/dist/components/hx-meter/hx-meter.styles.d.ts.map +1 -1
- package/dist/components/hx-meter/index.js +1 -1
- package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts +132 -1
- 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-phi-field/hx-phi-field.d.ts +0 -1
- package/dist/components/hx-phi-field/hx-phi-field.d.ts.map +1 -1
- package/dist/components/hx-popover/hx-popover.d.ts +91 -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-progress-bar/hx-progress-bar.d.ts +33 -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-radio-group/hx-radio-group.d.ts +152 -1
- package/dist/components/hx-radio-group/hx-radio-group.d.ts.map +1 -1
- package/dist/components/hx-radio-group/hx-radio.d.ts +14 -0
- package/dist/components/hx-radio-group/hx-radio.d.ts.map +1 -1
- package/dist/components/hx-radio-group/index.js +1 -1
- package/dist/components/hx-select/hx-select.d.ts +304 -2
- 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/index.js +1 -1
- package/dist/components/hx-spinner/hx-spinner.d.ts +14 -0
- package/dist/components/hx-spinner/hx-spinner.d.ts.map +1 -1
- package/dist/components/hx-spinner/index.js +1 -1
- package/dist/components/hx-split-button/hx-split-button.d.ts +94 -7
- 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-stat/hx-stat.d.ts +28 -0
- package/dist/components/hx-stat/hx-stat.d.ts.map +1 -1
- package/dist/components/hx-stat/index.js +1 -1
- package/dist/components/hx-switch/hx-switch.d.ts +78 -1
- package/dist/components/hx-switch/hx-switch.d.ts.map +1 -1
- package/dist/components/hx-switch/hx-switch.styles.d.ts.map +1 -1
- package/dist/components/hx-switch/index.js +1 -1
- package/dist/components/hx-table/hx-td.d.ts +30 -3
- package/dist/components/hx-table/hx-td.d.ts.map +1 -1
- package/dist/components/hx-table/hx-th.d.ts +39 -3
- package/dist/components/hx-table/hx-th.d.ts.map +1 -1
- package/dist/components/hx-table/hx-tr.d.ts +26 -0
- package/dist/components/hx-table/hx-tr.d.ts.map +1 -1
- package/dist/components/hx-table/index.js +1 -1
- package/dist/components/hx-tabs/hx-tab-panel.d.ts +34 -0
- package/dist/components/hx-tabs/hx-tab-panel.d.ts.map +1 -1
- package/dist/components/hx-tabs/hx-tab.d.ts +45 -2
- package/dist/components/hx-tabs/hx-tab.d.ts.map +1 -1
- package/dist/components/hx-tabs/hx-tab.styles.d.ts.map +1 -1
- package/dist/components/hx-tabs/hx-tabs.d.ts +32 -2
- 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/hx-tag.styles.d.ts.map +1 -1
- package/dist/components/hx-tag/index.js +1 -1
- package/dist/components/hx-theme/hx-theme.d.ts +10 -5
- package/dist/components/hx-theme/hx-theme.d.ts.map +1 -1
- package/dist/components/hx-time-picker/hx-time-picker.d.ts +210 -2
- package/dist/components/hx-time-picker/hx-time-picker.d.ts.map +1 -1
- package/dist/components/hx-time-picker/hx-time-picker.styles.d.ts.map +1 -1
- package/dist/components/hx-time-picker/index.js +1 -1
- package/dist/components/hx-toast/hx-toast-stack.d.ts +14 -0
- package/dist/components/hx-toast/hx-toast-stack.d.ts.map +1 -1
- package/dist/components/hx-toast/hx-toast.d.ts +22 -3
- package/dist/components/hx-toast/hx-toast.d.ts.map +1 -1
- package/dist/components/hx-toast/index.js +1 -1
- package/dist/components/hx-toast/toast-factory.d.ts.map +1 -1
- package/dist/components/hx-toggle-button/hx-toggle-button.d.ts +110 -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 +52 -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-tree-view/hx-tree-item.d.ts +117 -12
- package/dist/components/hx-tree-view/hx-tree-item.d.ts.map +1 -1
- package/dist/components/hx-tree-view/hx-tree-view.d.ts +87 -7
- package/dist/components/hx-tree-view/hx-tree-view.d.ts.map +1 -1
- package/dist/components/hx-tree-view/index.js +1 -1
- package/dist/css/helix-all.css +221 -1
- package/dist/css/helix-core.css +81 -0
- package/dist/css/helix-feedback.css +14 -0
- package/dist/css/helix-forms.css +109 -1
- package/dist/css/helix-overlay.css +17 -0
- package/dist/css/hx-alert.css +9 -0
- package/dist/css/hx-badge.css +28 -0
- package/dist/css/hx-checkbox.css +18 -0
- package/dist/css/hx-color-picker.css +25 -0
- package/dist/css/hx-date-picker.css +2 -1
- package/dist/css/hx-drawer.css +17 -0
- package/dist/css/hx-icon-button.css +30 -0
- package/dist/css/hx-meter.css +5 -0
- package/dist/css/hx-select.css +19 -0
- package/dist/css/hx-switch.css +17 -0
- package/dist/css/hx-tag.css +23 -0
- package/dist/css/hx-time-picker.css +11 -0
- package/dist/css/hx-toggle-button.css +17 -0
- package/dist/css/index.css +1 -1
- package/dist/css/manifest.json +4 -1
- package/dist/index.js +38 -38
- package/dist/shared/aria-flatten-DY6v2vah.js +22 -0
- package/dist/shared/aria-flatten-DY6v2vah.js.map +1 -0
- package/dist/shared/aria-idref-CxvyzfQS.js +126 -0
- package/dist/shared/aria-idref-CxvyzfQS.js.map +1 -0
- package/dist/shared/hx-accordion-ZVzgDzTG.js.map +1 -1
- package/dist/shared/{hx-alert-CLn7CstP.js → hx-alert-Bto8-TIi.js} +55 -37
- package/dist/shared/hx-alert-Bto8-TIi.js.map +1 -0
- package/dist/shared/{hx-badge-CQXgOXJM.js → hx-badge-JlFtAdxS.js} +37 -9
- package/dist/shared/hx-badge-JlFtAdxS.js.map +1 -0
- package/dist/shared/{hx-banner-D3DzpfcP.js → hx-banner-fpRnciIO.js} +13 -5
- package/dist/shared/hx-banner-fpRnciIO.js.map +1 -0
- package/dist/shared/{hx-button-DPY6SPVT.js → hx-button-BOwAEcF1.js} +108 -85
- package/dist/shared/{hx-button-DPY6SPVT.js.map → hx-button-BOwAEcF1.js.map} +1 -1
- package/dist/shared/{hx-button-group-BI-QBqmO.js → hx-button-group-DcHP5MBv.js} +15 -16
- package/dist/shared/{hx-button-group-BI-QBqmO.js.map → hx-button-group-DcHP5MBv.js.map} +1 -1
- package/dist/shared/hx-checkbox-C48KYKFq.js +696 -0
- package/dist/shared/hx-checkbox-C48KYKFq.js.map +1 -0
- package/dist/shared/hx-checkbox-group-BJIAX3zU.js +496 -0
- package/dist/shared/hx-checkbox-group-BJIAX3zU.js.map +1 -0
- package/dist/shared/hx-color-picker-Dk4cBwYQ.js +1221 -0
- package/dist/shared/hx-color-picker-Dk4cBwYQ.js.map +1 -0
- package/dist/shared/hx-combobox-BTLO9qiK.js +1359 -0
- package/dist/shared/hx-combobox-BTLO9qiK.js.map +1 -0
- package/dist/shared/{hx-data-table-CLqVqdxr.js → hx-data-table-Ct3gQ6ya.js} +3 -2
- package/dist/shared/{hx-data-table-CLqVqdxr.js.map → hx-data-table-Ct3gQ6ya.js.map} +1 -1
- package/dist/shared/{hx-date-picker-2iRG1p74.js → hx-date-picker-CiR7FVnR.js} +542 -206
- package/dist/shared/hx-date-picker-CiR7FVnR.js.map +1 -0
- package/dist/shared/hx-dialog-AOZpHSuF.js +717 -0
- package/dist/shared/hx-dialog-AOZpHSuF.js.map +1 -0
- package/dist/shared/{hx-drawer-Y1Ui2IWJ.js → hx-drawer-DH6CdAN1.js} +300 -98
- package/dist/shared/hx-drawer-DH6CdAN1.js.map +1 -0
- package/dist/shared/hx-dropdown-DiLd40Lm.js +401 -0
- package/dist/shared/hx-dropdown-DiLd40Lm.js.map +1 -0
- package/dist/shared/{hx-field-B3Qo8OLS.js → hx-field-zw0U1KVi.js} +99 -38
- package/dist/shared/hx-field-zw0U1KVi.js.map +1 -0
- package/dist/shared/{hx-icon-button-CGNdQSFM.js → hx-icon-button-a6OpeQz5.js} +149 -68
- package/dist/shared/hx-icon-button-a6OpeQz5.js.map +1 -0
- package/dist/shared/{hx-link-C-O6vq0Q.js → hx-link-CMnZRUtQ.js} +55 -43
- package/dist/shared/hx-link-CMnZRUtQ.js.map +1 -0
- package/dist/shared/{hx-list-MyEhh8c7.js → hx-list-De66EtAP.js} +163 -107
- package/dist/shared/hx-list-De66EtAP.js.map +1 -0
- package/dist/shared/hx-menu-divider-BjiRIWKq.js +797 -0
- package/dist/shared/hx-menu-divider-BjiRIWKq.js.map +1 -0
- package/dist/shared/{hx-meter-BPscsw5t.js → hx-meter-BJdh6nrF.js} +105 -64
- package/dist/shared/hx-meter-BJdh6nrF.js.map +1 -0
- package/dist/shared/{hx-nav-item-xqRPOCWX.js → hx-nav-item-CODtUlew.js} +13 -9
- package/dist/shared/{hx-nav-item-xqRPOCWX.js.map → hx-nav-item-CODtUlew.js.map} +1 -1
- package/dist/shared/hx-overflow-menu-BQ4fiMYu.js +492 -0
- package/dist/shared/hx-overflow-menu-BQ4fiMYu.js.map +1 -0
- package/dist/shared/hx-phi-field-C19oxlrr.js.map +1 -1
- package/dist/shared/{hx-popover-B-FP3-wW.js → hx-popover-B9W8-tC0.js} +123 -66
- package/dist/shared/hx-popover-B9W8-tC0.js.map +1 -0
- package/dist/shared/hx-progress-bar-C8nDMdYa.js +290 -0
- package/dist/shared/hx-progress-bar-C8nDMdYa.js.map +1 -0
- package/dist/shared/hx-radio-Z1lV1zTO.js +822 -0
- package/dist/shared/hx-radio-Z1lV1zTO.js.map +1 -0
- package/dist/shared/hx-select-D18CnJ0e.js +1089 -0
- package/dist/shared/hx-select-D18CnJ0e.js.map +1 -0
- package/dist/shared/{hx-spinner-DL5AYr16.js → hx-spinner-BB0h2hKZ.js} +62 -34
- package/dist/shared/hx-spinner-BB0h2hKZ.js.map +1 -0
- package/dist/shared/{hx-split-button-Djnc5Aeg.js → hx-split-button-BoABoEm5.js} +153 -82
- package/dist/shared/hx-split-button-BoABoEm5.js.map +1 -0
- package/dist/shared/{hx-stat-WOcNV1Ry.js → hx-stat-Dtf9lz-O.js} +77 -47
- package/dist/shared/hx-stat-Dtf9lz-O.js.map +1 -0
- package/dist/shared/hx-switch-B6kr-EwE.js +540 -0
- package/dist/shared/hx-switch-B6kr-EwE.js.map +1 -0
- package/dist/shared/{hx-tab-panel-DspCrKqo.js → hx-tab-panel-BQtBXKLD.js} +255 -131
- package/dist/shared/hx-tab-panel-BQtBXKLD.js.map +1 -0
- package/dist/shared/{hx-tag-CNSmdyaK.js → hx-tag-C5aCUpVi.js} +63 -40
- package/dist/shared/hx-tag-C5aCUpVi.js.map +1 -0
- package/dist/shared/{hx-td-DnnEMIuA.js → hx-td-BGkFOJEK.js} +267 -123
- package/dist/shared/hx-td-BGkFOJEK.js.map +1 -0
- package/dist/shared/hx-theme-BsefFWTO.js.map +1 -1
- package/dist/shared/hx-time-picker-iwCD7rzW.js +1038 -0
- package/dist/shared/hx-time-picker-iwCD7rzW.js.map +1 -0
- package/dist/shared/{hx-toggle-button-iLiYrMbD.js → hx-toggle-button-BQ81EDkl.js} +226 -65
- package/dist/shared/hx-toggle-button-BQ81EDkl.js.map +1 -0
- package/dist/shared/{hx-tooltip-nYOv9OLu.js → hx-tooltip-DVqtKPCD.js} +68 -46
- package/dist/shared/hx-tooltip-DVqtKPCD.js.map +1 -0
- package/dist/shared/hx-tree-item-CHrUhuZL.js +925 -0
- package/dist/shared/hx-tree-item-CHrUhuZL.js.map +1 -0
- package/dist/shared/menu-roving-DmMnzJhn.js +14 -0
- package/dist/shared/menu-roving-DmMnzJhn.js.map +1 -0
- package/dist/shared/menu-tree-BNM0SYYq.js +42 -0
- package/dist/shared/menu-tree-BNM0SYYq.js.map +1 -0
- package/dist/shared/{toast-factory-YSznocIV.js → toast-factory-CL2BzdSB.js} +128 -77
- package/dist/shared/toast-factory-CL2BzdSB.js.map +1 -0
- package/dist/utils/aria-flatten.d.ts +56 -0
- package/dist/utils/aria-flatten.d.ts.map +1 -0
- package/dist/utils/aria-idref.d.ts +127 -0
- package/dist/utils/aria-idref.d.ts.map +1 -0
- package/dist/utils/menu-label.d.ts +18 -0
- package/dist/utils/menu-label.d.ts.map +1 -0
- package/dist/utils/menu-roving.d.ts +28 -0
- package/dist/utils/menu-roving.d.ts.map +1 -0
- package/dist/utils/menu-tree.d.ts +41 -0
- package/dist/utils/menu-tree.d.ts.map +1 -0
- package/dist/utils/tree-walk.d.ts +53 -0
- package/dist/utils/tree-walk.d.ts.map +1 -0
- package/figma-inventory.json +132 -20
- package/package.json +1 -1
- package/dist/shared/hx-alert-CLn7CstP.js.map +0 -1
- package/dist/shared/hx-badge-CQXgOXJM.js.map +0 -1
- package/dist/shared/hx-banner-D3DzpfcP.js.map +0 -1
- package/dist/shared/hx-checkbox-D7xma9YH.js +0 -524
- package/dist/shared/hx-checkbox-D7xma9YH.js.map +0 -1
- package/dist/shared/hx-checkbox-group-C9n315Ju.js +0 -323
- package/dist/shared/hx-checkbox-group-C9n315Ju.js.map +0 -1
- package/dist/shared/hx-color-picker-uRc865FJ.js +0 -882
- package/dist/shared/hx-color-picker-uRc865FJ.js.map +0 -1
- package/dist/shared/hx-combobox-DDzqNKEW.js +0 -924
- package/dist/shared/hx-combobox-DDzqNKEW.js.map +0 -1
- package/dist/shared/hx-date-picker-2iRG1p74.js.map +0 -1
- package/dist/shared/hx-dialog-DRN_1-Y-.js +0 -514
- package/dist/shared/hx-dialog-DRN_1-Y-.js.map +0 -1
- package/dist/shared/hx-drawer-Y1Ui2IWJ.js.map +0 -1
- package/dist/shared/hx-dropdown-LyaRc8Rf.js +0 -263
- package/dist/shared/hx-dropdown-LyaRc8Rf.js.map +0 -1
- package/dist/shared/hx-field-B3Qo8OLS.js.map +0 -1
- package/dist/shared/hx-icon-button-CGNdQSFM.js.map +0 -1
- package/dist/shared/hx-link-C-O6vq0Q.js.map +0 -1
- package/dist/shared/hx-list-MyEhh8c7.js.map +0 -1
- package/dist/shared/hx-menu-divider-C2omnPtj.js +0 -558
- package/dist/shared/hx-menu-divider-C2omnPtj.js.map +0 -1
- package/dist/shared/hx-meter-BPscsw5t.js.map +0 -1
- package/dist/shared/hx-overflow-menu-DCLsdIBy.js +0 -374
- package/dist/shared/hx-overflow-menu-DCLsdIBy.js.map +0 -1
- package/dist/shared/hx-popover-B-FP3-wW.js.map +0 -1
- package/dist/shared/hx-progress-bar-Bn3JEPUf.js +0 -258
- package/dist/shared/hx-progress-bar-Bn3JEPUf.js.map +0 -1
- package/dist/shared/hx-radio-CJvNU2yP.js +0 -621
- package/dist/shared/hx-radio-CJvNU2yP.js.map +0 -1
- package/dist/shared/hx-select-C8fEHQhC.js +0 -807
- package/dist/shared/hx-select-C8fEHQhC.js.map +0 -1
- package/dist/shared/hx-spinner-DL5AYr16.js.map +0 -1
- package/dist/shared/hx-split-button-Djnc5Aeg.js.map +0 -1
- package/dist/shared/hx-stat-WOcNV1Ry.js.map +0 -1
- package/dist/shared/hx-switch-BrZFaRue.js +0 -420
- package/dist/shared/hx-switch-BrZFaRue.js.map +0 -1
- package/dist/shared/hx-tab-panel-DspCrKqo.js.map +0 -1
- package/dist/shared/hx-tag-CNSmdyaK.js.map +0 -1
- package/dist/shared/hx-td-DnnEMIuA.js.map +0 -1
- package/dist/shared/hx-time-picker-BoEIZwzv.js +0 -688
- package/dist/shared/hx-time-picker-BoEIZwzv.js.map +0 -1
- package/dist/shared/hx-toggle-button-iLiYrMbD.js.map +0 -1
- package/dist/shared/hx-tooltip-nYOv9OLu.js.map +0 -1
- package/dist/shared/hx-tree-item-C2CiWuDE.js +0 -703
- package/dist/shared/hx-tree-item-C2CiWuDE.js.map +0 -1
- package/dist/shared/toast-factory-YSznocIV.js.map +0 -1
package/custom-elements.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"declarations": [
|
|
9
9
|
{
|
|
10
10
|
"kind": "class",
|
|
11
|
-
"description": "An individual accordion item with collapsible content.",
|
|
11
|
+
"description": "An individual accordion item with collapsible content.\n\n## Architecture Note: Slot Projection vs. Host-Canonical (group-4 round-1)\n\n`hx-accordion-item` deliberately does NOT participate in the\nhost-canonical / `internals.ariaLabelledByElements` pattern used by every\nother group-2/3/4 component. Rationale:\n\n 1. The trigger label comes from `<slot name=\"trigger\">` — consumer\n light-DOM projected directly into the `<summary>` element. AT reads\n the slot-projected text natively because slot projection preserves\n accessible name (the `<summary>` IS the heading and consumes the\n slotted text in its own accessible name computation).\n 2. `aria-labelledby=\"${_uid}-trigger\"` on the inner content region and\n `aria-controls=\"${_uid}-content\"` on the summary BOTH resolve\n same-shadow-root, which works correctly across every AT — these\n IDREFs never cross a shadow boundary.\n 3. Pushing these ids through `internals.ariaLabelledByElements` would\n either duplicate the wiring (heading announced twice) or break the\n native `<details>/<summary>` toggle semantics (the host carrying\n `role=\"heading\"` would shadow the summary's own heading projection).\n\n`role=\"heading\"` on `<summary>` (with `aria-level=N`) is the APG-canonical\nAccordion pattern. Per the APG note, `<summary>` MUST be a direct child\nof `<details>` for the native toggle to function — wrapping it in an\n`<h3>` would forfeit native disclosure. The role-on-summary approach is\nthe authoritative compromise. NVDA, JAWS, and VoiceOver all announce the\nsummary as a heading at the configured level when this pattern is used.\n\n`aria-controls` on the summary points at the shadow-internal content\nregion; APG marks the relationship as implicit via the heading + region\nstructure, so AT not following the IDREF still announces correctly. The\nIDREF is a hint, not a requirement — and because both ids are in the\nsame shadow root, it resolves cleanly when AT does follow it. This\nmatches the popover/dropdown intentional `aria-controls` omission for\nthe cross-shadow case (see those components' code comments).",
|
|
12
12
|
"name": "HelixAccordionItem",
|
|
13
13
|
"cssProperties": [
|
|
14
14
|
{
|
|
@@ -4856,6 +4856,13 @@
|
|
|
4856
4856
|
"description": "Accessible label for the checkbox when no visible label text is provided.\nUse when embedding a checkbox in a context where a label element is not practical.\n\nAccepts both `accessible-label` and the standard `aria-label` HTML attribute.\n`accessible-label` takes precedence when both are set.\nWhen set, replaces the visible label as the input's accessible name. Cannot be combined\nwith a visible label — set either `accessible-label` or the `label` slot, not both.",
|
|
4857
4857
|
"attribute": "accessible-label"
|
|
4858
4858
|
},
|
|
4859
|
+
{
|
|
4860
|
+
"kind": "field",
|
|
4861
|
+
"name": "_groupedSuppress",
|
|
4862
|
+
"type": {
|
|
4863
|
+
"text": "boolean"
|
|
4864
|
+
}
|
|
4865
|
+
},
|
|
4859
4866
|
{
|
|
4860
4867
|
"kind": "field",
|
|
4861
4868
|
"name": "form",
|
|
@@ -4952,7 +4959,7 @@
|
|
|
4952
4959
|
}
|
|
4953
4960
|
}
|
|
4954
4961
|
],
|
|
4955
|
-
"description": "Moves focus to the checkbox input
|
|
4962
|
+
"description": "Moves focus to the announced checkbox surface. Codex round-1 finding #1\nrelocated the focus target from the inner `<input>` to the host on\nmodern engines so AT only sees one announced widget. Round-7 finding #3\nextends that contract to the no-IDL-ref fallback: when the host is\ndemoted (`tabindex=-1`, role/state cleared on `internals`) the inner\n`<input>` owns the announced semantics and tab order, so programmatic\n`focus()` must redirect there — otherwise scripted focus and error\nrecovery land on the demoted host on unsupported engines."
|
|
4956
4963
|
}
|
|
4957
4964
|
],
|
|
4958
4965
|
"events": [
|
|
@@ -6898,12 +6905,36 @@
|
|
|
6898
6905
|
{
|
|
6899
6906
|
"description": "The text input area.",
|
|
6900
6907
|
"name": "input"
|
|
6908
|
+
},
|
|
6909
|
+
{
|
|
6910
|
+
"description": "The visible label container above the trigger.",
|
|
6911
|
+
"name": "label"
|
|
6912
|
+
},
|
|
6913
|
+
{
|
|
6914
|
+
"description": "The help-text container rendered below the trigger.",
|
|
6915
|
+
"name": "help-text"
|
|
6916
|
+
},
|
|
6917
|
+
{
|
|
6918
|
+
"description": "The error-message container rendered below help text.",
|
|
6919
|
+
"name": "error"
|
|
6901
6920
|
}
|
|
6902
6921
|
],
|
|
6903
6922
|
"slots": [
|
|
6904
6923
|
{
|
|
6905
6924
|
"description": "Custom trigger element. Default: a color swatch button.",
|
|
6906
6925
|
"name": "trigger"
|
|
6926
|
+
},
|
|
6927
|
+
{
|
|
6928
|
+
"description": "Visible label projected above the trigger; aggregated text contributes to the host's accessible name when no stronger naming source (aria-labelledby/aria-label/accessible-label/label) is supplied.",
|
|
6929
|
+
"name": "label"
|
|
6930
|
+
},
|
|
6931
|
+
{
|
|
6932
|
+
"description": "Help text rendered below the trigger and joined into the host's announced description channel.",
|
|
6933
|
+
"name": "help-text"
|
|
6934
|
+
},
|
|
6935
|
+
{
|
|
6936
|
+
"description": "Error message rendered below help text. When present, marks the trigger as aria-invalid and is announced via a polite live region.",
|
|
6937
|
+
"name": "error"
|
|
6907
6938
|
}
|
|
6908
6939
|
],
|
|
6909
6940
|
"members": [
|
|
@@ -7074,13 +7105,55 @@
|
|
|
7074
7105
|
"description": "Accessible label for the color picker dialog/panel.",
|
|
7075
7106
|
"attribute": "label-picker"
|
|
7076
7107
|
},
|
|
7108
|
+
{
|
|
7109
|
+
"kind": "field",
|
|
7110
|
+
"name": "label",
|
|
7111
|
+
"type": {
|
|
7112
|
+
"text": "string | undefined"
|
|
7113
|
+
},
|
|
7114
|
+
"default": "undefined",
|
|
7115
|
+
"description": "Visible label rendered above the trigger. When set this becomes the\nannounced name of the trigger surface unless a stronger source\n(`aria-labelledby`, `aria-label`, or `accessible-label`) is supplied.",
|
|
7116
|
+
"attribute": "label",
|
|
7117
|
+
"reflects": true
|
|
7118
|
+
},
|
|
7119
|
+
{
|
|
7120
|
+
"kind": "field",
|
|
7121
|
+
"name": "accessibleLabel",
|
|
7122
|
+
"type": {
|
|
7123
|
+
"text": "string | undefined"
|
|
7124
|
+
},
|
|
7125
|
+
"default": "undefined",
|
|
7126
|
+
"description": "Visually-hidden accessible name. Highest-priority self-naming source —\noutranks `label`, slotted label content, and the generated trigger label,\nbut defers to consumer `aria-labelledby` (effective) and `aria-label`.",
|
|
7127
|
+
"attribute": "accessible-label"
|
|
7128
|
+
},
|
|
7129
|
+
{
|
|
7130
|
+
"kind": "field",
|
|
7131
|
+
"name": "helpText",
|
|
7132
|
+
"type": {
|
|
7133
|
+
"text": "string | undefined"
|
|
7134
|
+
},
|
|
7135
|
+
"default": "undefined",
|
|
7136
|
+
"description": "Help text rendered below the trigger and joined into the host's\nannounced description channel.",
|
|
7137
|
+
"attribute": "help-text"
|
|
7138
|
+
},
|
|
7139
|
+
{
|
|
7140
|
+
"kind": "field",
|
|
7141
|
+
"name": "error",
|
|
7142
|
+
"type": {
|
|
7143
|
+
"text": "string | undefined"
|
|
7144
|
+
},
|
|
7145
|
+
"default": "undefined",
|
|
7146
|
+
"description": "Error message. When non-empty, marks the trigger surface as `aria-invalid`\nand joins the host's announced description channel via a live alert.",
|
|
7147
|
+
"attribute": "error",
|
|
7148
|
+
"reflects": true
|
|
7149
|
+
},
|
|
7077
7150
|
{
|
|
7078
7151
|
"kind": "field",
|
|
7079
7152
|
"name": "labelTrigger",
|
|
7080
7153
|
"type": {
|
|
7081
7154
|
"text": "(color: string) => string"
|
|
7082
7155
|
},
|
|
7083
|
-
"description": "Generates the accessible label for the trigger button.",
|
|
7156
|
+
"description": "Generates the accessible label for the trigger button when no other\nnaming source is provided.",
|
|
7084
7157
|
"parameters": [
|
|
7085
7158
|
{
|
|
7086
7159
|
"description": "current color value string",
|
|
@@ -7186,6 +7259,46 @@
|
|
|
7186
7259
|
"fieldName": "required",
|
|
7187
7260
|
"attribute": "required"
|
|
7188
7261
|
},
|
|
7262
|
+
{
|
|
7263
|
+
"name": "label",
|
|
7264
|
+
"type": {
|
|
7265
|
+
"text": "string | undefined"
|
|
7266
|
+
},
|
|
7267
|
+
"default": "undefined",
|
|
7268
|
+
"description": "Visible label rendered above the trigger. When set this becomes the\nannounced name of the trigger surface unless a stronger source\n(`aria-labelledby`, `aria-label`, or `accessible-label`) is supplied.",
|
|
7269
|
+
"fieldName": "label",
|
|
7270
|
+
"attribute": "label"
|
|
7271
|
+
},
|
|
7272
|
+
{
|
|
7273
|
+
"name": "accessible-label",
|
|
7274
|
+
"type": {
|
|
7275
|
+
"text": "string | undefined"
|
|
7276
|
+
},
|
|
7277
|
+
"default": "undefined",
|
|
7278
|
+
"description": "Visually-hidden accessible name. Highest-priority self-naming source —\noutranks `label`, slotted label content, and the generated trigger label,\nbut defers to consumer `aria-labelledby` (effective) and `aria-label`.",
|
|
7279
|
+
"fieldName": "accessibleLabel",
|
|
7280
|
+
"attribute": "accessible-label"
|
|
7281
|
+
},
|
|
7282
|
+
{
|
|
7283
|
+
"name": "help-text",
|
|
7284
|
+
"type": {
|
|
7285
|
+
"text": "string | undefined"
|
|
7286
|
+
},
|
|
7287
|
+
"default": "undefined",
|
|
7288
|
+
"description": "Help text rendered below the trigger and joined into the host's\nannounced description channel.",
|
|
7289
|
+
"fieldName": "helpText",
|
|
7290
|
+
"attribute": "help-text"
|
|
7291
|
+
},
|
|
7292
|
+
{
|
|
7293
|
+
"name": "error",
|
|
7294
|
+
"type": {
|
|
7295
|
+
"text": "string | undefined"
|
|
7296
|
+
},
|
|
7297
|
+
"default": "undefined",
|
|
7298
|
+
"description": "Error message. When non-empty, marks the trigger surface as `aria-invalid`\nand joins the host's announced description channel via a live alert.",
|
|
7299
|
+
"fieldName": "error",
|
|
7300
|
+
"attribute": "error"
|
|
7301
|
+
},
|
|
7189
7302
|
{
|
|
7190
7303
|
"name": "label-gradient",
|
|
7191
7304
|
"type": {
|
|
@@ -7807,7 +7920,7 @@
|
|
|
7807
7920
|
"text": "string | null"
|
|
7808
7921
|
},
|
|
7809
7922
|
"default": "null",
|
|
7810
|
-
"description": "Accessible name for screen readers, if different from the visible label.\nUses `accessible-label` attribute instead of `aria-label` to avoid\nARIAMixin shadowing on the host element.\n\nNote: `mixinDelegatesAria` is not applied to this component because form\ninputs with associated labels delegate accessible naming via `<label>`\nassociation and `aria-labelledby`, not host-level ARIA delegation. The\n`accessible-label` attribute is a fallback for label-free usage. The value is forwarded to the\
|
|
7923
|
+
"description": "Accessible name for screen readers, if different from the visible label.\nUses `accessible-label` attribute instead of `aria-label` to avoid\nARIAMixin shadowing on the host element.\n\nNote: `mixinDelegatesAria` is not applied to this component because form\ninputs with associated labels delegate accessible naming via `<label>`\nassociation and `aria-labelledby`, not host-level ARIA delegation. The\n`accessible-label` attribute is a fallback for label-free usage. The value is forwarded to the\nhost's `internals.ariaLabel` on the modern path.",
|
|
7811
7924
|
"attribute": "accessible-label"
|
|
7812
7925
|
},
|
|
7813
7926
|
{
|
|
@@ -7844,6 +7957,16 @@
|
|
|
7844
7957
|
}
|
|
7845
7958
|
]
|
|
7846
7959
|
},
|
|
7960
|
+
{
|
|
7961
|
+
"kind": "method",
|
|
7962
|
+
"name": "_syncHostAriaSemantics",
|
|
7963
|
+
"privacy": "private",
|
|
7964
|
+
"return": {
|
|
7965
|
+
"type": {
|
|
7966
|
+
"text": "void"
|
|
7967
|
+
}
|
|
7968
|
+
}
|
|
7969
|
+
},
|
|
7847
7970
|
{
|
|
7848
7971
|
"kind": "method",
|
|
7849
7972
|
"name": "focus",
|
|
@@ -7861,7 +7984,7 @@
|
|
|
7861
7984
|
}
|
|
7862
7985
|
}
|
|
7863
7986
|
],
|
|
7864
|
-
"description": "
|
|
7987
|
+
"description": "Routes programmatic focus to the inner text input. Per W3C APG editable\ncombobox pattern, the inner `<input>` carries `role=\"combobox\"` (replacing\nits implicit textbox role) so it IS the canonical announced + focused\nsurface. Shadow DOM focus causes `document.activeElement` to report the\nhost externally, but the input retains focus inside the shadow root and\nAT announces its role/state."
|
|
7865
7988
|
}
|
|
7866
7989
|
],
|
|
7867
7990
|
"events": [
|
|
@@ -8038,7 +8161,7 @@
|
|
|
8038
8161
|
"text": "string | null"
|
|
8039
8162
|
},
|
|
8040
8163
|
"default": "null",
|
|
8041
|
-
"description": "Accessible name for screen readers, if different from the visible label.\nUses `accessible-label` attribute instead of `aria-label` to avoid\nARIAMixin shadowing on the host element.\n\nNote: `mixinDelegatesAria` is not applied to this component because form\ninputs with associated labels delegate accessible naming via `<label>`\nassociation and `aria-labelledby`, not host-level ARIA delegation. The\n`accessible-label` attribute is a fallback for label-free usage. The value is forwarded to the\
|
|
8164
|
+
"description": "Accessible name for screen readers, if different from the visible label.\nUses `accessible-label` attribute instead of `aria-label` to avoid\nARIAMixin shadowing on the host element.\n\nNote: `mixinDelegatesAria` is not applied to this component because form\ninputs with associated labels delegate accessible naming via `<label>`\nassociation and `aria-labelledby`, not host-level ARIA delegation. The\n`accessible-label` attribute is a fallback for label-free usage. The value is forwarded to the\nhost's `internals.ariaLabel` on the modern path.",
|
|
8042
8165
|
"fieldName": "accessibleLabel",
|
|
8043
8166
|
"attribute": "accessible-label"
|
|
8044
8167
|
},
|
|
@@ -10046,6 +10169,16 @@
|
|
|
10046
10169
|
"description": "Accessible label for the next month navigation button.",
|
|
10047
10170
|
"attribute": "next-month-label"
|
|
10048
10171
|
},
|
|
10172
|
+
{
|
|
10173
|
+
"kind": "field",
|
|
10174
|
+
"name": "accessibleLabel",
|
|
10175
|
+
"type": {
|
|
10176
|
+
"text": "string | null"
|
|
10177
|
+
},
|
|
10178
|
+
"default": "null",
|
|
10179
|
+
"description": "Accessible name for screen readers, if different from the visible label.\nUses `accessible-label` attribute instead of `aria-label` to avoid\nARIAMixin shadowing on the host element. Highest-precedence naming source.",
|
|
10180
|
+
"attribute": "accessible-label"
|
|
10181
|
+
},
|
|
10049
10182
|
{
|
|
10050
10183
|
"kind": "field",
|
|
10051
10184
|
"name": "_handleDocumentClick",
|
|
@@ -10250,6 +10383,16 @@
|
|
|
10250
10383
|
"description": "Accessible label for the next month navigation button.",
|
|
10251
10384
|
"fieldName": "nextMonthLabel",
|
|
10252
10385
|
"attribute": "next-month-label"
|
|
10386
|
+
},
|
|
10387
|
+
{
|
|
10388
|
+
"name": "accessible-label",
|
|
10389
|
+
"type": {
|
|
10390
|
+
"text": "string | null"
|
|
10391
|
+
},
|
|
10392
|
+
"default": "null",
|
|
10393
|
+
"description": "Accessible name for screen readers, if different from the visible label.\nUses `accessible-label` attribute instead of `aria-label` to avoid\nARIAMixin shadowing on the host element. Highest-precedence naming source.",
|
|
10394
|
+
"fieldName": "accessibleLabel",
|
|
10395
|
+
"attribute": "accessible-label"
|
|
10253
10396
|
}
|
|
10254
10397
|
],
|
|
10255
10398
|
"mixins": [
|
|
@@ -10315,7 +10458,7 @@
|
|
|
10315
10458
|
"declarations": [
|
|
10316
10459
|
{
|
|
10317
10460
|
"kind": "class",
|
|
10318
|
-
"description": "A modal and non-modal dialog component built on the native HTML `<dialog>` element.\nProvides focus trapping, backdrop interaction, keyboard navigation, and full\nARIA labelling for enterprise healthcare accessibility requirements.",
|
|
10461
|
+
"description": "A modal and non-modal dialog component built on the native HTML `<dialog>` element.\nProvides focus trapping, backdrop interaction, keyboard navigation, and full\nARIA labelling for enterprise healthcare accessibility requirements.\n\n## Architecture Note: Host-Canonical ARIA (group-4a round-1, Path A — native-dialog adaptation)\n\nUnlike `hx-drawer` (which uses an inner `<div role=\"dialog\">` and can fully\nhost-canonicalize the role), `hx-dialog` is built on the native\n`<dialog>` HTMLDialogElement. The native element has an **implicit\n`role=\"dialog\"`** baked in by the browser that **cannot be stripped**, so\nfull host-canonical role takeover would create nested-dialog announcements.\n\n**Path A (adopted):** the host owns label / description projection via\n`ElementInternals` (`internals.ariaLabelledByElements`,\n`internals.ariaDescribedByElements`, `internals.ariaLabel`) but **does NOT**\nset `internals.role`. The native inner `<dialog>` continues to be the\nannounced surface. Consumer light-DOM IDREFs project across the shadow\nboundary via `internals.aria*Elements` on the host.\n\n**Hybrid fallback (always-on belt-and-suspenders):** because some assistive\ntechnologies may walk the native `<dialog>` first and ignore host\n`internals.aria*Elements`, the resolved label / description text is **also**\nserialized into `aria-label` / `aria-describedby` on the inner native\n`<dialog>` element. Consumers therefore get name/description on every AT,\nwith the IDL-ref path providing live DOM-text-update tracking when the AT\nhonours it. This forfeits live-text tracking on the inner-dialog fallback\n(the serialized text is recomputed on every sync, which is good enough since\nmutation observers re-fire `_syncHostAriaSemantics` on consumer text edits).\n\nWhy we do NOT set `internals.role = 'alertdialog'` either: setting role on\nthe host while the native `<dialog>` keeps `role=\"dialog\"` would announce\nBOTH a host alertdialog AND an inner dialog. Instead, the alertdialog\nvariant continues to write `role=\"alertdialog\"` directly on the inner\n`<dialog>` element (the platform allows overriding the implicit `dialog`\nrole with the more specific `alertdialog`).\n\nNaming precedence (W3C AccName 1.2 §4.3.1):\n\n 1. Consumer `aria-labelledby` on the host — IDREFs resolved across the\n shadow boundary via `resolveIdrefTokens` (closest scope first, then\n ancestor shadow hosts, then owner document).\n 2. Consumer `aria-label` on the host.\n 3. `<slot name=\"header\">` text content (multi-node aggregation per\n AccName 1.2 §4.3.10 — decorative `aria-hidden` / `[hidden]` subtrees\n contribute zero to the name).\n 4. `heading` property — explicit author-provided heading text.\n 5. Hard-coded literal `\"Dialog\"` (last-resort accessible name).\n\nDescription channel: the host's `internals.ariaDescribedByElements` carries\nthe resolved IDREF chain on the modern path. The inner native `<dialog>` ALSO\nreceives a serialized `aria-describedby` chain — when a consumer description\nresolves, a synthesized in-shadow `<span id=\"${id}-consumer-desc\">` is\nappended to the existing `description` span (if any) and the inner\n`<dialog>`'s `aria-describedby` references both same-root ids. `aria-description`\nis intentionally NEVER written — W3C AccName ignores it whenever\n`aria-describedby` is also present.\n\nSlot mutation observers track:\n 1. The header slot's text content (in-place i18n re-renders).\n 2. Consumer-resolved external IDREF targets (so a consumer mutating\n `<label id=\"x\">Patient</label>` in place re-flows the name).\n 3. Host attribute mutations (delegated to `installAriaIdrefMirror`,\n which also catches late-inserted IDREF targets and id renames in\n every relevant root).\n 4. Authentic consumer `aria-describedby` retraction (oldValue !== null &&\n newValue === null) via a dedicated `attributeOldValue: true` observer.\n\n**First-paint slot state seeding intentionally omitted:** seeding\n`_hasHeaderSlot` / `_headerSlotText` from `firstUpdated()` would schedule an\nextra Lit re-render that subtly reorders the open-dialog promise chain\n(`updateComplete.then(...) → showModal() → updateComplete.then(...) →\nfocus first focusable`). On Chromium, that reordering interleaves the\nnative dialog's modal activation with the focus-restore step and causes\nfocus-trap test failures. The slotchange handler runs one microtask later\nand `_syncHostAriaSemantics()` from `updated()` picks up the resolved state\non the next paint — close enough that AT never observes the unnamed window.\nMirrors the same intentional decision documented in hx-drawer round-1.\n\nFocus trap, ESC dismiss with `hx-cancel` BEFORE `hx-close`, focus-restore\nvia `_triggerElement`, and native `showModal()` semantics are unchanged\nfrom the pre-host-canonical implementation.",
|
|
10319
10462
|
"name": "HelixDialog",
|
|
10320
10463
|
"cssProperties": [
|
|
10321
10464
|
{
|
|
@@ -11034,7 +11177,7 @@
|
|
|
11034
11177
|
"declarations": [
|
|
11035
11178
|
{
|
|
11036
11179
|
"kind": "class",
|
|
11037
|
-
"description": "A slide-in drawer panel that can appear from any edge of the viewport.\nSupports focus trapping, overlay backdrop, keyboard navigation, and full\nARIA labelling for enterprise healthcare accessibility requirements.\n\n## Architecture Note: Native `<dialog>` Migration\n\nThis component currently uses `role=\"dialog\"` + `aria-modal=\"true\"` on a\n`<div>` rather than the native `<dialog>` element. This is intentional for\nthe current release because:\n\n1. **SSR compatibility**: Native `<dialog>` requires `showModal()` to activate\n its modal behavior (focus trapping, backdrop, top-layer). This JavaScript\n call is not available during server-side rendering, which is a primary\n consumption pattern for Drupal/Twig templates.\n\n2. **Contained mode**: The `contained` property constrains the drawer to a\n positioned parent. Native `<dialog>` in modal mode renders in the top layer\n and cannot be constrained to a parent element.\n\n3. **Animation control**: The current CSS transition approach provides precise\n control over slide-in/slide-out animations. Native `<dialog>` `::backdrop`\n animations have inconsistent cross-browser support.\n\nMigration to native `<dialog>` is tracked as a future enhancement. When browser\nsupport for `CloseWatcher`, `::backdrop` transitions, and declarative dialog\nopening stabilizes, this component will be migrated to native semantics.",
|
|
11180
|
+
"description": "A slide-in drawer panel that can appear from any edge of the viewport.\nSupports focus trapping, overlay backdrop, keyboard navigation, and full\nARIA labelling for enterprise healthcare accessibility requirements.\n\n## Architecture Note: Host-Canonical ARIA (group-4 round-1, Path A)\n\nThe host carries the announced dialog semantics via `ElementInternals`:\n\n - `internals.role = 'dialog'` (the host IS the dialog surface)\n - `internals.ariaModal = 'true'` (modality declared on host)\n - `internals.ariaLabelledByElements` / `internals.ariaDescribedByElements`\n project consumer light-DOM IDREFs across the shadow boundary.\n - `internals.ariaLabel` carries the resolved fallback name when no\n IDREF chain or slotted title exists.\n\nThe inner `<div part=\"overlay\">` no longer carries `role`, `aria-modal`,\n`aria-labelledby`, or `aria-label` — those would create a nested-dialog\nannouncement above the host's canonical surface. Belt-and-suspenders\nfallback: when the runtime does NOT expose IDL element references on\n`ElementInternals` (older Firefox / Safari builds), the resolved label\ntext is text-flattened and written to the inner overlay's `aria-label`\nso AT walking down from the host still finds an announceable name.\n\nNaming precedence (W3C AccName 1.2 §4.3.1):\n\n 1. Consumer `aria-labelledby` on the host — IDREFs resolved across the\n shadow boundary via `resolveIdrefTokens` (same scope walk used by\n every host-canonical hx-* control: own root → ancestor shadow hosts\n → owner document → slot owners).\n 2. Consumer `aria-label` on the host.\n 3. `<slot name=\"label\">` text content (multi-node aggregation per\n AccName 1.2 §4.3.10 — decorative `aria-hidden` / `[hidden]` subtrees\n contribute zero to the name).\n 4. `label` property — explicit author fallback string.\n 5. Hard-coded literal `\"Drawer\"` (last-resort accessible name).\n\nDescription channel: a synthesized `<span id=\"${id}-consumer-desc\">` is\nrendered inside the shadow root and updated to mirror consumer-resolved\ndescription text. The host's `internals.ariaDescribedByElements` carries\nthe live element references on the modern path; the in-shadow span is the\nfallback target for AT that does not walk IDL refs. `aria-description` is\nintentionally NEVER written — the W3C AccName algorithm ignores it\nwhenever `aria-describedby` is also present.\n\nSlot mutation observers track:\n 1. The label slot's text content (in-place i18n re-renders).\n 2. Consumer-resolved external IDREF targets (so a consumer mutating\n `<label id=\"x\">Patient</label>` in place re-flows the name).\n 3. Host attribute mutations (delegated to `installAriaIdrefMirror`,\n which also catches late-inserted IDREF targets and id renames in\n every relevant root).\n\nFocus trap, ESC dismiss, focus-restore, and the inert-outside-content\nsibling-walk are unchanged from the pre-host-canonical implementation —\nthey operate against the shadow-internal panel which is still the focus\ntarget for keyboard users.\n\n## Architecture Note: Native `<dialog>` Migration\n\nThis component currently uses `role=\"dialog\"` + `aria-modal=\"true\"` on a\n`<div>` rather than the native `<dialog>` element. This is intentional for\nthe current release because:\n\n1. **SSR compatibility**: Native `<dialog>` requires `showModal()` to activate\n its modal behavior (focus trapping, backdrop, top-layer). This JavaScript\n call is not available during server-side rendering, which is a primary\n consumption pattern for Drupal/Twig templates.\n\n2. **Contained mode**: The `contained` property constrains the drawer to a\n positioned parent. Native `<dialog>` in modal mode renders in the top layer\n and cannot be constrained to a parent element.\n\n3. **Animation control**: The current CSS transition approach provides precise\n control over slide-in/slide-out animations. Native `<dialog>` `::backdrop`\n animations have inconsistent cross-browser support.\n\nMigration to native `<dialog>` is tracked as a future enhancement. When browser\nsupport for `CloseWatcher`, `::backdrop` transitions, and declarative dialog\nopening stabilizes, this component will be migrated to native semantics.",
|
|
11038
11181
|
"name": "HelixDrawer",
|
|
11039
11182
|
"cssProperties": [
|
|
11040
11183
|
{
|
|
@@ -11539,7 +11682,7 @@
|
|
|
11539
11682
|
"declarations": [
|
|
11540
11683
|
{
|
|
11541
11684
|
"kind": "class",
|
|
11542
|
-
"description": "A dropdown component — a button that opens a floating panel on click.",
|
|
11685
|
+
"description": "A dropdown component — a button that opens a floating panel on click.\n\n## Architecture Note: Host-Attribute Label Mirror (group-4 round-1)\n\nThe announced surface is the inner `[part=\"panel\"]` element, which carries\n`role=\"menu\"`. The host wraps a slotted trigger and the floating panel and\ndoes NOT claim a role itself (apart from the round-35-style host\n`aria-expanded` fallback used only when the trigger slot is empty).\n\nBecause the panel lives in shadow DOM and `ElementInternals` IDL refs on\nthe host project semantics OUTWARD (host → AT) rather than INWARD\n(host → shadow descendant), we use the **host-attribute mirror** pattern:\nresolve consumer `aria-labelledby` IDREFs against the host's composed-tree\nroots, text-flatten via `flattenAccName`, and write the result to the\npanel's `aria-label`. Host `aria-label` outranks the `label` property in\nthe same precedence used by every host-canonical hx-* control.\n\nNaming precedence (W3C AccName 1.2 §4.3.1):\n 1. Host `aria-labelledby` (resolved IDREFs, text-flattened)\n 2. Host `aria-label`\n 3. `label` property\n 4. Hard-coded literal `\"Menu\"` (last-resort accessible name)\n\n**Group 4b → Group 5b boundary:** Group 4b added the host-attribute\nlabel mirror **only** — additive on top of the existing dropdown\nbehaviour. Group 5b (this commit) adds the composite-navigation\nportion that 4b explicitly deferred:\n - **Roving tabindex** inside the panel (`_applyRovingTabIndex` +\n `_rovingIndex`). Only the focused item carries `tabindex=0`.\n - **First-character typeahead** with 500ms timeout (`_handleTypeahead`)\n matching `hx-menu`, `hx-overflow-menu`, `hx-split-button`.\n - Submenu auto-handling is delegated to slotted `hx-menu` /\n `hx-menu-item` (whose `hx-item-submenu-open` / `hx-item-submenu-close`\n events are auto-handled by the parent `hx-menu` after Group 5b).\n\nThe panel's inner-div `role=\"menu\"` is intentionally NOT migrated to\nthe host: the host wraps a slotted consumer trigger AND the panel,\nso it cannot canonically carry the menu role. Slotted `hx-menu-item`\nchildren carry `role=\"menuitem\"` on their HOST after Group 5b's menu\nmigration, which fixes the cross-shadow walk concern from the\nconsumer's perspective.\n\n`aria-controls` is intentionally omitted on the trigger: the panel lives\nin shadow DOM and IDREF values cannot be resolved across shadow\nboundaries by assistive technology (axe-core flags this as a critical\nviolation if attempted). See `_setupTriggerAria` for the inline note.",
|
|
11543
11686
|
"name": "HelixDropdown",
|
|
11544
11687
|
"cssProperties": [
|
|
11545
11688
|
{
|
|
@@ -11804,7 +11947,7 @@
|
|
|
11804
11947
|
"declarations": [
|
|
11805
11948
|
{
|
|
11806
11949
|
"kind": "class",
|
|
11807
|
-
"description": "Layout wrapper providing consistent label + input + help text + validation\nmessage structure for any form control. Use this when wrapping non-HELiX\nform controls or native HTML elements in the HELiX form field pattern.\n\nThis component is NOT form-associated — it is a pure visual layout wrapper.\n\n**Light DOM side effect:** This component injects a visually-hidden `<span>`\ninto its light DOM children for ARIA describedby linkage across the shadow\nDOM boundary. This span has `id=\"${fieldId}-desc\"` and is removed on\n`disconnectedCallback`. This is an intentional, documented accessibility\nmechanism.",
|
|
11950
|
+
"description": "Layout wrapper providing consistent label + input + help text + validation\nmessage structure for any form control. Use this when wrapping non-HELiX\nform controls or native HTML elements in the HELiX form field pattern.\n\nThis component is NOT form-associated — it is a pure visual layout wrapper.\n\n**Light DOM side effect:** This component injects a visually-hidden `<span>`\ninto its light DOM children for ARIA describedby linkage across the shadow\nDOM boundary. This span has `id=\"${fieldId}-desc\"` and is removed on\n`disconnectedCallback`. This is an intentional, documented accessibility\nmechanism.\n\n**`aria-label` ownership model:** When `label` is set and no shadow `<label>`\nis rendered, hx-field writes `aria-label` to the slotted control and stamps\na `data-hx-owns-label=\"true\"` ownership marker.\n\nConsumers have two ways to keep their value safe from hx-field's writes:\n (a) **Suspend** all ARIA bridging by setting `data-aria-managed` on the\n control. While present, hx-field skips every aria-* mutation and\n leaves any existing marker/snapshot in place — removing\n `data-aria-managed` later may resume host ownership of an `aria-label`\n value that still matches the snapshot.\n (b) **Release** ownership permanently by overwriting `aria-label` to a\n different value than the one hx-field last wrote. The mismatch\n triggers `_releaseHostOwnedAriaLabel`, which strips the marker and\n clears the snapshot, transferring ownership to the consumer.\n\n**Limitation:** because release detection is snapshot-based, a consumer\nrewrite to the *exact same value* hx-field last wrote is invisible. To\ngenuinely take ownership in that case the consumer must write a different\nvalue (even briefly), or remove the `data-hx-owns-label` marker themselves.",
|
|
11808
11951
|
"name": "HelixField",
|
|
11809
11952
|
"cssProperties": [
|
|
11810
11953
|
{
|
|
@@ -14470,6 +14613,10 @@
|
|
|
14470
14613
|
{
|
|
14471
14614
|
"description": "The icon container span wrapping the default slot.",
|
|
14472
14615
|
"name": "icon"
|
|
14616
|
+
},
|
|
14617
|
+
{
|
|
14618
|
+
"description": "The loading spinner SVG element shown when `loading` is true.",
|
|
14619
|
+
"name": "spinner"
|
|
14473
14620
|
}
|
|
14474
14621
|
],
|
|
14475
14622
|
"slots": [
|
|
@@ -14532,6 +14679,17 @@
|
|
|
14532
14679
|
"attribute": "disabled",
|
|
14533
14680
|
"reflects": true
|
|
14534
14681
|
},
|
|
14682
|
+
{
|
|
14683
|
+
"kind": "field",
|
|
14684
|
+
"name": "loading",
|
|
14685
|
+
"type": {
|
|
14686
|
+
"text": "boolean"
|
|
14687
|
+
},
|
|
14688
|
+
"default": "false",
|
|
14689
|
+
"description": "Whether the button is in a loading state. Shows the spinner, prevents\nactivation, and sets `aria-busy=\"true\"` on the inner element. Does NOT\nset the native `disabled` attribute (loading is transient; disabled is\npersistent, and AT announces them differently).",
|
|
14690
|
+
"attribute": "loading",
|
|
14691
|
+
"reflects": true
|
|
14692
|
+
},
|
|
14535
14693
|
{
|
|
14536
14694
|
"kind": "field",
|
|
14537
14695
|
"name": "href",
|
|
@@ -14641,6 +14799,16 @@
|
|
|
14641
14799
|
"fieldName": "disabled",
|
|
14642
14800
|
"attribute": "disabled"
|
|
14643
14801
|
},
|
|
14802
|
+
{
|
|
14803
|
+
"name": "loading",
|
|
14804
|
+
"type": {
|
|
14805
|
+
"text": "boolean"
|
|
14806
|
+
},
|
|
14807
|
+
"default": "false",
|
|
14808
|
+
"description": "Whether the button is in a loading state. Shows the spinner, prevents\nactivation, and sets `aria-busy=\"true\"` on the inner element. Does NOT\nset the native `disabled` attribute (loading is transient; disabled is\npersistent, and AT announces them differently).",
|
|
14809
|
+
"fieldName": "loading",
|
|
14810
|
+
"attribute": "loading"
|
|
14811
|
+
},
|
|
14644
14812
|
{
|
|
14645
14813
|
"name": "href",
|
|
14646
14814
|
"type": {
|
|
@@ -14672,6 +14840,12 @@
|
|
|
14672
14840
|
"attribute": "value"
|
|
14673
14841
|
}
|
|
14674
14842
|
],
|
|
14843
|
+
"mixins": [
|
|
14844
|
+
{
|
|
14845
|
+
"name": "mixinDelegatesAria",
|
|
14846
|
+
"module": "/src/mixins/index.js"
|
|
14847
|
+
}
|
|
14848
|
+
],
|
|
14675
14849
|
"superclass": {
|
|
14676
14850
|
"name": "HelixElement",
|
|
14677
14851
|
"module": "/src/base/index.js"
|
|
@@ -15312,6 +15486,16 @@
|
|
|
15312
15486
|
"default": "undefined",
|
|
15313
15487
|
"description": "Relationship between the current document and the linked URL.\nAutomatically set to \"noopener noreferrer\" when target=\"_blank\".",
|
|
15314
15488
|
"attribute": "rel"
|
|
15489
|
+
},
|
|
15490
|
+
{
|
|
15491
|
+
"kind": "field",
|
|
15492
|
+
"name": "externalLabel",
|
|
15493
|
+
"type": {
|
|
15494
|
+
"text": "string"
|
|
15495
|
+
},
|
|
15496
|
+
"default": "'(opens in new tab)'",
|
|
15497
|
+
"description": "Localised announcement text appended (visually hidden) to the link's\naccessible name when `target=\"_blank\"`. Defaults to English. Override\nfor i18n contexts so AT users hear the new-tab notice in their locale.",
|
|
15498
|
+
"attribute": "external-label"
|
|
15315
15499
|
}
|
|
15316
15500
|
],
|
|
15317
15501
|
"events": [
|
|
@@ -15383,6 +15567,22 @@
|
|
|
15383
15567
|
"description": "Relationship between the current document and the linked URL.\nAutomatically set to \"noopener noreferrer\" when target=\"_blank\".",
|
|
15384
15568
|
"fieldName": "rel",
|
|
15385
15569
|
"attribute": "rel"
|
|
15570
|
+
},
|
|
15571
|
+
{
|
|
15572
|
+
"name": "external-label",
|
|
15573
|
+
"type": {
|
|
15574
|
+
"text": "string"
|
|
15575
|
+
},
|
|
15576
|
+
"default": "'(opens in new tab)'",
|
|
15577
|
+
"description": "Localised announcement text appended (visually hidden) to the link's\naccessible name when `target=\"_blank\"`. Defaults to English. Override\nfor i18n contexts so AT users hear the new-tab notice in their locale.",
|
|
15578
|
+
"fieldName": "externalLabel",
|
|
15579
|
+
"attribute": "external-label"
|
|
15580
|
+
}
|
|
15581
|
+
],
|
|
15582
|
+
"mixins": [
|
|
15583
|
+
{
|
|
15584
|
+
"name": "mixinDelegatesAria",
|
|
15585
|
+
"module": "/src/mixins/index.js"
|
|
15386
15586
|
}
|
|
15387
15587
|
],
|
|
15388
15588
|
"superclass": {
|
|
@@ -15442,7 +15642,7 @@
|
|
|
15442
15642
|
"declarations": [
|
|
15443
15643
|
{
|
|
15444
15644
|
"kind": "class",
|
|
15445
|
-
"description": "A rich list item for use inside `hx-list
|
|
15645
|
+
"description": "A rich list item for use inside `hx-list`.\n\nGroup 7 host-canonical: `role=\"option\"` (interactive listbox mode) is\nmirrored onto the **host** via `_internals.role` AND the legacy\nsetAttribute('role',...) path. The dual-surface pattern preserves the\nexisting imperative host-attribute behaviour (so consumers querying\n`host.getAttribute('role')` still work) while adding cross-shadow IDREF\nwiring through `internals.ariaLabelledByElements` for engines that\nsupport it.",
|
|
15446
15646
|
"name": "HelixListItem",
|
|
15447
15647
|
"cssProperties": [
|
|
15448
15648
|
{
|
|
@@ -15687,7 +15887,7 @@
|
|
|
15687
15887
|
"declarations": [
|
|
15688
15888
|
{
|
|
15689
15889
|
"kind": "class",
|
|
15690
|
-
"description": "A styled list container supporting plain, bulleted, numbered, description, and interactive variants.",
|
|
15890
|
+
"description": "A styled list container supporting plain, bulleted, numbered, description, and interactive variants.\n\nGroup 7 host-canonical: `role=\"list\"` (or `role=\"listbox\"` in interactive\nmode) lives on the **host** via `_internals.role`, harmonizing with\n`hx-structured-list` (the gold-standard exemplar for Group 7). The `<dl>`\ndescription variant keeps native semantics — no host role assigned, since\n`<dl>` IS the semantic surface and AT walks it directly.",
|
|
15691
15891
|
"name": "HelixList",
|
|
15692
15892
|
"cssProperties": [
|
|
15693
15893
|
{
|
|
@@ -15857,7 +16057,7 @@
|
|
|
15857
16057
|
"declarations": [
|
|
15858
16058
|
{
|
|
15859
16059
|
"kind": "class",
|
|
15860
|
-
"description": "A visual separator for grouping items within an `hx-menu`.",
|
|
16060
|
+
"description": "A visual separator for grouping items within an `hx-menu`.\n\nGroup 5b host-canonical: `role=\"separator\"` lives on the **host** via\n`_internals.role` so the parent `<hx-menu>` (`role=\"menu\"`) sees the\nseparator as a direct child. `aria-orientation` is mirrored onto the host\nvia `internals.ariaOrientation`. The inner div is presentational on the\nmodern path and stripped of its role; the legacy fallback keeps the\ninner role for engines without ElementInternals IDL accessors.",
|
|
15861
16061
|
"name": "HelixMenuDivider",
|
|
15862
16062
|
"cssProperties": [
|
|
15863
16063
|
{
|
|
@@ -15907,7 +16107,7 @@
|
|
|
15907
16107
|
"declarations": [
|
|
15908
16108
|
{
|
|
15909
16109
|
"kind": "class",
|
|
15910
|
-
"description": "A single interactive item for use inside `hx-menu`. Supports normal, checkbox,\nand radio types, loading state, prefix/suffix slots, and submenu nesting.\
|
|
16110
|
+
"description": "A single interactive item for use inside `hx-menu`. Supports normal, checkbox,\nand radio types, loading state, prefix/suffix slots, and submenu nesting.\n\nGroup 5b host-canonical: `role=\"menuitem\"` (or `menuitemcheckbox` /\n`menuitemradio` based on `type`) lives on the **host** via\n`_internals.role`. The roving tabindex is written to the host, so the host\nis the focusable surface and lands directly under the parent `<hx-menu>`\n(which carries `role=\"menu\"`) in the AT walked tree. The inner element is\npresentational on the modern path — no role, no aria-* attributes — and\ncarries only click/keyboard event handlers. Keyboard activation\n(Enter/Space) is owned by the host's `keydown` handler.\n\nCross-shadow naming: consumer-supplied `aria-label` / `aria-labelledby` on\nthe host project to `internals.ariaLabel` / `internals.ariaLabelledByElements`\nvia the shared IDREF mirror. The slotted text content is used as the default\naccessible name when no override is set (AT walks slotted children\nautomatically through the host's role).",
|
|
15911
16111
|
"name": "HelixMenuItem",
|
|
15912
16112
|
"cssProperties": [
|
|
15913
16113
|
{
|
|
@@ -16055,7 +16255,7 @@
|
|
|
16055
16255
|
}
|
|
16056
16256
|
}
|
|
16057
16257
|
],
|
|
16058
|
-
"description": "Focus the inner
|
|
16258
|
+
"description": "Focus the menu item. On the modern host-canonical path, focus lands on\nthe host (which carries the roving tabindex and announced role). On the\nlegacy fallback path, focus delegates to the inner element which still\ncarries the role."
|
|
16059
16259
|
}
|
|
16060
16260
|
],
|
|
16061
16261
|
"events": [
|
|
@@ -16067,18 +16267,18 @@
|
|
|
16067
16267
|
"description": "Dispatched when the item is activated via click, Enter, or Space."
|
|
16068
16268
|
},
|
|
16069
16269
|
{
|
|
16070
|
-
"name": "hx-item-submenu-open",
|
|
16071
16270
|
"type": {
|
|
16072
16271
|
"text": "CustomEvent<{item: HelixMenuItem}>"
|
|
16073
16272
|
},
|
|
16074
|
-
"description": "Dispatched when ArrowRight is pressed on an item with a submenu."
|
|
16273
|
+
"description": "Dispatched when ArrowRight is pressed on an item with a submenu.",
|
|
16274
|
+
"name": "hx-item-submenu-open"
|
|
16075
16275
|
},
|
|
16076
16276
|
{
|
|
16077
|
-
"name": "hx-item-submenu-close",
|
|
16078
16277
|
"type": {
|
|
16079
16278
|
"text": "CustomEvent<{item: HelixMenuItem}>"
|
|
16080
16279
|
},
|
|
16081
|
-
"description": "Dispatched when ArrowLeft is pressed on an item, signaling the parent to close the submenu and return focus."
|
|
16280
|
+
"description": "Dispatched when ArrowLeft is pressed on an item, signaling the parent to close the submenu and return focus.",
|
|
16281
|
+
"name": "hx-item-submenu-close"
|
|
16082
16282
|
}
|
|
16083
16283
|
],
|
|
16084
16284
|
"attributes": [
|
|
@@ -16167,7 +16367,7 @@
|
|
|
16167
16367
|
"declarations": [
|
|
16168
16368
|
{
|
|
16169
16369
|
"kind": "class",
|
|
16170
|
-
"description": "A menu container that manages keyboard navigation over a list of menu items.\nUse with `hx-menu-item` and `hx-menu-divider`.",
|
|
16370
|
+
"description": "A menu container that manages keyboard navigation over a list of menu items.\nUse with `hx-menu-item` and `hx-menu-divider`.\n\nGroup 5b host-canonical: `role=\"menu\"` lives on the **host** via\n`_internals.role`. The host carries the announced surface so AT walks\n`<hx-menu>` (role=menu) → slotted `<hx-menu-item>` (role=menuitem on host)\ndirectly without two layers of indirection. Consumer-supplied\n`aria-label` / `aria-labelledby` on the host are resolved via the shared\nIDREF mirror; cross-shadow naming uses `ariaLabelledByElements` (modern)\nwith a flattened-string fallback (legacy).\n\nSubmenu coordination: when an `hx-menu-item` emits `hx-item-submenu-open`\nor `hx-item-submenu-close`, the parent menu auto-handles the toggle by\ncalling `setSubmenuOpen()` on the item — UNLESS the consumer has called\n`event.preventDefault()` on the bubbled event, signaling that they own the\nsubmenu lifecycle. This matches APG-mandated behaviour while leaving an\nopt-out for advanced consumers.",
|
|
16171
16371
|
"name": "HelixMenu",
|
|
16172
16372
|
"cssProperties": [
|
|
16173
16373
|
{
|
|
@@ -16244,7 +16444,7 @@
|
|
|
16244
16444
|
"text": "string"
|
|
16245
16445
|
},
|
|
16246
16446
|
"default": "''",
|
|
16247
|
-
"description": "Accessible label for the menu.
|
|
16447
|
+
"description": "Accessible label for the menu. Used as a fallback when no consumer-supplied\n`aria-label` / `aria-labelledby` is present on the host. On the modern\nhost-canonical path this projects onto `internals.ariaLabel`; on the\nlegacy fallback path it appears as `aria-label` on the inner div.",
|
|
16248
16448
|
"attribute": "label",
|
|
16249
16449
|
"reflects": true
|
|
16250
16450
|
},
|
|
@@ -16292,7 +16492,7 @@
|
|
|
16292
16492
|
"text": "string"
|
|
16293
16493
|
},
|
|
16294
16494
|
"default": "''",
|
|
16295
|
-
"description": "Accessible label for the menu.
|
|
16495
|
+
"description": "Accessible label for the menu. Used as a fallback when no consumer-supplied\n`aria-label` / `aria-labelledby` is present on the host. On the modern\nhost-canonical path this projects onto `internals.ariaLabel`; on the\nlegacy fallback path it appears as `aria-label` on the inner div.",
|
|
16296
16496
|
"fieldName": "label",
|
|
16297
16497
|
"attribute": "label"
|
|
16298
16498
|
}
|
|
@@ -16362,7 +16562,7 @@
|
|
|
16362
16562
|
"declarations": [
|
|
16363
16563
|
{
|
|
16364
16564
|
"kind": "class",
|
|
16365
|
-
"description": "A scalar measurement within a known range — e.g., disk usage, health score,\nor any numeric value with defined min/max bounds. Supports low/high/optimum\nthreshold markers for semantic color feedback.",
|
|
16565
|
+
"description": "A scalar measurement within a known range — e.g., disk usage, health score,\nor any numeric value with defined min/max bounds. Supports low/high/optimum\nthreshold markers for semantic color feedback.\n\nGroup 7 host-canonical: `role=\"meter\"` is mirrored onto the **host** via\n`_internals.role` AND kept on the inner `[role=\"meter\"]` element. The dual\nsurface is the hx-progress-ring pattern (Group 7 gold-standard exemplar):\nthe host carries the cross-shadow IDREF wiring (`ariaLabelledByElements`\nresolves through the shared mirror) while the inner element keeps its\nexisting role/state surface so legacy AT and consumer queries continue to\nwork. AccName 1.2 §4.3.1 precedence is implemented uniformly: consumer\nhost `aria-labelledby` (flattened) > consumer host `aria-label` >\n`label` property / slotted label > derived value-text fallback.",
|
|
16366
16566
|
"name": "HelixMeter",
|
|
16367
16567
|
"cssProperties": [
|
|
16368
16568
|
{
|
|
@@ -17766,7 +17966,7 @@
|
|
|
17766
17966
|
"declarations": [
|
|
17767
17967
|
{
|
|
17768
17968
|
"kind": "class",
|
|
17769
|
-
"description": "An overflow menu (kebab/meatball menu) that reveals hidden actions via a\nfloating panel. Composed from a trigger button and a slotted menu panel.",
|
|
17969
|
+
"description": "An overflow menu (kebab/meatball menu) that reveals hidden actions via a\nfloating panel. Composed from a trigger button and a slotted menu panel.\n\n## Architecture Note: Host-Attribute Trigger Label Mirror (group-5b)\n\nThe composite has TWO ARIA-bearing surfaces inside its shadow DOM: the\ntrigger button (`role` defaulted from `<button>`, with `aria-haspopup`,\n`aria-expanded`, `aria-controls`) and the panel (`role=\"menu\"` on the\ninner div). The host wraps both — it cannot carry either canonical role\nitself, so role placement remains on the inner elements.\n\nWhat Group 5b adds:\n- **Roving tabindex** on slotted menu items (only the focused item has\n tabindex=0; arrow keys move focus and rewrite tabindex). Closing-Tab\n path is preserved (Tab moves focus past the menu and closes it).\n- **First-character typeahead** with 500ms timeout matching `hx-menu`.\n- **Host-attribute label mirror**: consumer-supplied `aria-label` /\n `aria-labelledby` on the host flow to the trigger button's\n `aria-label` (the trigger is the announced surface of the disclosure\n pattern; consumer override wins over the `label` property). The panel\n continues to use `labelMenu` for its own slot label.",
|
|
17770
17970
|
"name": "HelixOverflowMenu",
|
|
17771
17971
|
"cssProperties": [
|
|
17772
17972
|
{
|
|
@@ -17985,7 +18185,7 @@
|
|
|
17985
18185
|
"text": "string"
|
|
17986
18186
|
},
|
|
17987
18187
|
"default": "'More actions'",
|
|
17988
|
-
"description": "Accessible label for the trigger button.",
|
|
18188
|
+
"description": "Accessible label for the trigger button. Used as a fallback when no\nconsumer-supplied `aria-label` / `aria-labelledby` is present on the\nhost. Consumer host attributes win in the AccName 1.2 §4.3.1 cascade.",
|
|
17989
18189
|
"attribute": "label",
|
|
17990
18190
|
"reflects": true
|
|
17991
18191
|
},
|
|
@@ -18071,7 +18271,7 @@
|
|
|
18071
18271
|
"text": "string"
|
|
18072
18272
|
},
|
|
18073
18273
|
"default": "'More actions'",
|
|
18074
|
-
"description": "Accessible label for the trigger button.",
|
|
18274
|
+
"description": "Accessible label for the trigger button. Used as a fallback when no\nconsumer-supplied `aria-label` / `aria-labelledby` is present on the\nhost. Consumer host attributes win in the AccName 1.2 §4.3.1 cascade.",
|
|
18075
18275
|
"fieldName": "label",
|
|
18076
18276
|
"attribute": "label"
|
|
18077
18277
|
},
|
|
@@ -19191,11 +19391,6 @@
|
|
|
19191
19391
|
"name": "--hx-phi-field-disabled-opacity",
|
|
19192
19392
|
"default": "var(--hx-opacity-50,0.5)"
|
|
19193
19393
|
},
|
|
19194
|
-
{
|
|
19195
|
-
"description": "Color for auto-hide countdown warning (future use).",
|
|
19196
|
-
"name": "--hx-phi-field-auto-hide-warning-color",
|
|
19197
|
-
"default": "var(--hx-color-warning-500,#C2711C)"
|
|
19198
|
-
},
|
|
19199
19394
|
{
|
|
19200
19395
|
"description": "Spacing token.",
|
|
19201
19396
|
"name": "--hx-space-2"
|
|
@@ -19469,7 +19664,7 @@
|
|
|
19469
19664
|
"declarations": [
|
|
19470
19665
|
{
|
|
19471
19666
|
"kind": "class",
|
|
19472
|
-
"description": "A popover that displays rich floating content attached to a trigger element.",
|
|
19667
|
+
"description": "A popover that displays rich floating content attached to a trigger element.\n\n## Architecture Note: Host-Attribute Label Mirror (group-4 round-1)\n\nUnlike modal dialogs (`hx-dialog` / `hx-drawer`) where the HOST is the\nannounced surface and `ElementInternals` projects consumer IDREFs across\nthe shadow boundary, `hx-popover`'s announced surface is the inner\n`[part=\"body\"]` element which carries `role=\"dialog\"`. The host does not\nclaim a role — it is a structural wrapper around an anchor slot and a\nseparate floating panel.\n\nIDL element references on `internals.ariaLabelledByElements` therefore\ncannot help: AT walks the inner body's accessibility node, and IDL refs\ndeclared on the host are not visible from a shadow-internal descendant\nlooking up. The viable cross-shadow path is the host-attribute mirror:\n\n 1. The host observes `aria-label` / `aria-labelledby` mutations.\n 2. On every sync, `aria-labelledby` IDREFs are resolved via\n `resolveIdrefTokens` (composed-tree walk: host root → ancestor\n shadow hosts → owner document) and **text-flattened** via\n `flattenAccName` (AccName 1.2 §4.3.10 hidden-aware).\n 3. The flattened name is written to the inner body's `aria-label`,\n overriding the `label` property only when consumer naming is set.\n\nNaming precedence (W3C AccName 1.2 §4.3.1):\n\n 1. Host `aria-labelledby` (resolved IDREFs, text-flattened)\n 2. Host `aria-label`\n 3. `label` property\n 4. Hard-coded literal `\"Popover\"` (last-resort accessible name)\n\nThe text-flatten approach forfeits live IDL-ref tracking (mutating a\nreferenced element's text re-fires through the shared root observer; see\n`installAriaIdrefMirror`). `aria-controls` is intentionally omitted on\nthe trigger — the body lives in shadow DOM and consumer IDREFs cannot\nresolve cross-root from light-DOM (axe-core flags this as a critical\nviolation if attempted; see line documenting this exception below).\n\nSlotted label support (e.g. `<slot name=\"title\">`) is deliberately NOT\nadded in this round — it would expand the public API surface and is\ntracked as a follow-up enhancement.",
|
|
19473
19668
|
"name": "HelixPopover",
|
|
19474
19669
|
"cssProperties": [
|
|
19475
19670
|
{
|
|
@@ -20240,7 +20435,7 @@
|
|
|
20240
20435
|
"declarations": [
|
|
20241
20436
|
{
|
|
20242
20437
|
"kind": "class",
|
|
20243
|
-
"description": "A linear progress indicator for determinate and indeterminate states.",
|
|
20438
|
+
"description": "A linear progress indicator for determinate and indeterminate states.\n\nGroup 7 host-canonical: `role=\"progressbar\"` is mirrored onto the **host**\nvia `_internals.role` (cross-shadow IDREF wiring) AND kept on the inner\n`[role=\"progressbar\"]` track for legacy AT and consumer queries. This is\nthe hx-progress-ring dual-surface pattern (Group 7 gold-standard).\nConsumer-supplied `aria-labelledby` / `aria-describedby` on the host\nresolves through the shared IDREF mirror so cross-shadow naming reaches\nthe announced surface even when the labels live in another shadow tree.\n\nThe internal `aria-live=\"polite\"` announcer for the \"Complete\" milestone\nis preserved (`role=\"progressbar\"` does NOT imply a live region — an\nexplicit live announcer is required for value-update announcements).",
|
|
20244
20439
|
"name": "HelixProgressBar",
|
|
20245
20440
|
"cssProperties": [
|
|
20246
20441
|
{
|
|
@@ -21477,6 +21672,13 @@
|
|
|
21477
21672
|
"description": "Whether this radio is checked. Managed by the parent group.",
|
|
21478
21673
|
"attribute": "checked",
|
|
21479
21674
|
"reflects": true
|
|
21675
|
+
},
|
|
21676
|
+
{
|
|
21677
|
+
"kind": "field",
|
|
21678
|
+
"name": "_groupedSuppress",
|
|
21679
|
+
"type": {
|
|
21680
|
+
"text": "boolean"
|
|
21681
|
+
}
|
|
21480
21682
|
}
|
|
21481
21683
|
],
|
|
21482
21684
|
"attributes": [
|
|
@@ -22535,7 +22737,7 @@
|
|
|
22535
22737
|
}
|
|
22536
22738
|
}
|
|
22537
22739
|
],
|
|
22538
|
-
"description": "Moves focus to the
|
|
22740
|
+
"description": "Moves focus to the host. Round-3 finding 1: the host is the canonical\ncombobox surface (`role=\"combobox\"`, `tabindex=\"0\"`), so programmatic\nfocus must land there to match where AT routes focus and where\n`setValidity()` anchors recovery."
|
|
22539
22741
|
}
|
|
22540
22742
|
],
|
|
22541
22743
|
"events": [
|
|
@@ -22545,6 +22747,13 @@
|
|
|
22545
22747
|
"text": "CustomEvent<{value: string}>"
|
|
22546
22748
|
},
|
|
22547
22749
|
"description": "Dispatched when the selected option changes."
|
|
22750
|
+
},
|
|
22751
|
+
{
|
|
22752
|
+
"type": {
|
|
22753
|
+
"text": "Event"
|
|
22754
|
+
},
|
|
22755
|
+
"description": "Platform constraint-validation event fired when checkValidity() / reportValidity() determine the value is invalid (form-associated component contract via ElementInternals.setValidity).",
|
|
22756
|
+
"name": "invalid"
|
|
22548
22757
|
}
|
|
22549
22758
|
],
|
|
22550
22759
|
"attributes": [
|
|
@@ -24283,7 +24492,7 @@
|
|
|
24283
24492
|
"declarations": [
|
|
24284
24493
|
{
|
|
24285
24494
|
"kind": "class",
|
|
24286
|
-
"description": "A split button combining a primary action button with an attached dropdown\nmenu for secondary actions. Implements the ARIA menu button pattern for\nfull keyboard and screen reader support.",
|
|
24495
|
+
"description": "A split button combining a primary action button with an attached dropdown\nmenu for secondary actions. Implements the ARIA menu button pattern for\nfull keyboard and screen reader support.\n\n## Architecture Note: Composite host with two interactive children (Group 5b)\n\nThe host wraps a primary `<button>`, a dropdown trigger `<button>`, and a\npanel `<div role=\"menu\">` — three ARIA-bearing surfaces that cannot all\ncollapse onto the host. Group 5b keeps role placement on the inner\nelements (consistent with `hx-overflow-menu`). The host carries no role.\n\nWhat Group 5b adds:\n- **Host-attribute label mirror** via `installAriaIdrefMirror`: consumer\n `aria-label` / `aria-labelledby` on the host flow to the inner primary\n button's `aria-label`. Replaces the legacy `accessible-label` shim,\n which was a workaround for ARIAMixin shadowing on the host. The shim\n is preserved with a one-time devWarn for one minor version of back-\n compat; new code should use the standard `aria-label` attribute.\n- **Roving tabindex** on slotted `hx-menu-item` children inside the\n panel. Only the focused item carries `tabindex=0`; arrow key\n navigation rewrites the tabindex map via `_applyRovingTabIndex()`.\n `setRovingTabIndex` is the same setter used by `hx-menu` for cross-\n family pattern alignment.\n- **First-character typeahead** with 500ms timeout matching `hx-menu`.",
|
|
24287
24496
|
"name": "HelixSplitButton",
|
|
24288
24497
|
"cssProperties": [
|
|
24289
24498
|
{
|
|
@@ -24582,7 +24791,7 @@
|
|
|
24582
24791
|
"text": "string"
|
|
24583
24792
|
},
|
|
24584
24793
|
"default": "''",
|
|
24585
|
-
"
|
|
24794
|
+
"deprecated": "Use the standard host `aria-label` attribute instead. Group\n5b replaces the `accessible-label` shim with a host-attribute mirror\ndriven by `installAriaIdrefMirror` — consumer host `aria-label` /\n`aria-labelledby` flow to the inner primary button's `aria-label`,\nwhich is the same composed-tree result as the legacy shim without\nthe ARIAMixin shadowing concern.\n\nThe attribute remains observed for one minor version so existing\nconsumers do not regress; setting it logs a devWarn pointing them to\nthe standard `aria-label` path.",
|
|
24586
24795
|
"attribute": "accessible-label"
|
|
24587
24796
|
},
|
|
24588
24797
|
{
|
|
@@ -24669,7 +24878,7 @@
|
|
|
24669
24878
|
"text": "string"
|
|
24670
24879
|
},
|
|
24671
24880
|
"default": "''",
|
|
24672
|
-
"
|
|
24881
|
+
"deprecated": "Use the standard host `aria-label` attribute instead. Group\n5b replaces the `accessible-label` shim with a host-attribute mirror\ndriven by `installAriaIdrefMirror` — consumer host `aria-label` /\n`aria-labelledby` flow to the inner primary button's `aria-label`,\nwhich is the same composed-tree result as the legacy shim without\nthe ARIAMixin shadowing concern.\n\nThe attribute remains observed for one minor version so existing\nconsumers do not regress; setting it logs a devWarn pointing them to\nthe standard `aria-label` path.",
|
|
24673
24882
|
"fieldName": "accessibleLabel",
|
|
24674
24883
|
"attribute": "accessible-label"
|
|
24675
24884
|
},
|
|
@@ -25357,7 +25566,7 @@
|
|
|
25357
25566
|
"declarations": [
|
|
25358
25567
|
{
|
|
25359
25568
|
"kind": "class",
|
|
25360
|
-
"description": "A static stat display component for presenting key metrics in a healthcare dashboard.",
|
|
25569
|
+
"description": "A static stat display component for presenting key metrics in a healthcare dashboard.\n\nGroup 7 host-canonical: `role=\"group\"` lives on the **host** via\n`_internals.role`. The host carries the resolved accessible name so AT\nwalks `<hx-stat>` (role=group, label=\"value: label\") directly. The\ninternal `aria-live=\"polite\"` announcer remains in the shadow tree —\n`role=\"group\"` does NOT imply a live region, so the announcer is required\nfor value/label/trend update announcements.",
|
|
25361
25570
|
"name": "HelixStat",
|
|
25362
25571
|
"cssProperties": [
|
|
25363
25572
|
{
|
|
@@ -27336,7 +27545,7 @@
|
|
|
27336
27545
|
}
|
|
27337
27546
|
}
|
|
27338
27547
|
],
|
|
27339
|
-
"description": "Moves focus to the switch
|
|
27548
|
+
"description": "Moves focus to the announced switch surface. Codex round-1 finding #1\nrelocated the focus target to the host so AT announces a single widget;\nthe host carries the canonical role/state on modern engines. Round-7\nfinding #7 extends that contract to the no-IDL-ref fallback: when the\nhost is demoted (`tabindex=-1`, role/state cleared on `internals`) the\ninner `<button role=switch>` owns the announced semantics and tab order,\nso programmatic `focus()` must redirect there — otherwise scripted focus\nand error recovery land on the demoted host on unsupported engines."
|
|
27340
27549
|
}
|
|
27341
27550
|
],
|
|
27342
27551
|
"events": [
|
|
@@ -27822,7 +28031,7 @@
|
|
|
27822
28031
|
"declarations": [
|
|
27823
28032
|
{
|
|
27824
28033
|
"kind": "class",
|
|
27825
|
-
"description": "Semantic table data cell. Must be a child of `hx-tr`.",
|
|
28034
|
+
"description": "Semantic table data cell. Must be a child of `hx-tr`.\n\nGroup 7 host-canonical: `role=\"cell\"` lives on the **host** via\n`_internals.role`. The host carries the cell's accessible name (resolved\nfrom the `label` property — fixing audit B-A1, where mobile screen reader\nusers lost column context because `data-label` was visual-only).",
|
|
27826
28035
|
"name": "HelixTableCell",
|
|
27827
28036
|
"cssProperties": [
|
|
27828
28037
|
{
|
|
@@ -27882,7 +28091,7 @@
|
|
|
27882
28091
|
"text": "string"
|
|
27883
28092
|
},
|
|
27884
28093
|
"default": "''",
|
|
27885
|
-
"description": "Column header label for this cell. Forwarded as `data-label` on the native
|
|
28094
|
+
"description": "Column header label for this cell. Forwarded as `data-label` on the native\n`<td>` for the mobile card layout (`td::before { content: attr(data-label) }`)\nAND projected to `aria-label` so screen readers identify the column when\nthe header row is hidden via the mobile breakpoint. Group 7 audit B-A1\nfix: prior to migration, the JSDoc claimed aria-label projection but the\nimplementation only set `data-label` — `::before { content: attr(...) }`\nis not reliably announced by VoiceOver / NVDA across versions.",
|
|
27886
28095
|
"attribute": "label"
|
|
27887
28096
|
}
|
|
27888
28097
|
],
|
|
@@ -27923,7 +28132,7 @@
|
|
|
27923
28132
|
"text": "string"
|
|
27924
28133
|
},
|
|
27925
28134
|
"default": "''",
|
|
27926
|
-
"description": "Column header label for this cell. Forwarded as `data-label` on the native
|
|
28135
|
+
"description": "Column header label for this cell. Forwarded as `data-label` on the native\n`<td>` for the mobile card layout (`td::before { content: attr(data-label) }`)\nAND projected to `aria-label` so screen readers identify the column when\nthe header row is hidden via the mobile breakpoint. Group 7 audit B-A1\nfix: prior to migration, the JSDoc claimed aria-label projection but the\nimplementation only set `data-label` — `::before { content: attr(...) }`\nis not reliably announced by VoiceOver / NVDA across versions.",
|
|
27927
28136
|
"fieldName": "label",
|
|
27928
28137
|
"attribute": "label"
|
|
27929
28138
|
}
|
|
@@ -28011,7 +28220,7 @@
|
|
|
28011
28220
|
"declarations": [
|
|
28012
28221
|
{
|
|
28013
28222
|
"kind": "class",
|
|
28014
|
-
"description": "Semantic table header cell. Must be a child of `hx-tr`.\nSupports sortable columns with accessible sort state.",
|
|
28223
|
+
"description": "Semantic table header cell. Must be a child of `hx-tr`.\nSupports sortable columns with accessible sort state.\n\nGroup 7 host-canonical: `role=\"columnheader\"` lives on the **host** via\n`_internals.role`. The host carries `aria-sort` reflecting the current\nsort direction (when `sortable` is true). The sort `<button>` aria-label\nincorporates the slotted column text so AT users hear \"Sort by Patient\nname, currently sorted ascending\" rather than just \"Sort ascending\".",
|
|
28015
28224
|
"name": "HelixTableHeader",
|
|
28016
28225
|
"cssParts": [
|
|
28017
28226
|
{
|
|
@@ -28227,7 +28436,7 @@
|
|
|
28227
28436
|
"declarations": [
|
|
28228
28437
|
{
|
|
28229
28438
|
"kind": "class",
|
|
28230
|
-
"description": "Semantic table row. Must be a child of `hx-thead`, `hx-tbody`, or `hx-tfoot`.\nContains `hx-th` or `hx-td` cells.",
|
|
28439
|
+
"description": "Semantic table row. Must be a child of `hx-thead`, `hx-tbody`, or `hx-tfoot`.\nContains `hx-th` or `hx-td` cells.\n\nGroup 7 host-canonical: `role=\"row\"` lives on the **host** via\n`_internals.role`. The host carries `aria-selected` / `aria-disabled`\nmirroring `selected` / `disabled` reflected attributes. Consumer-supplied\n`aria-label` / `aria-labelledby` on the host project to the host's\nannounced surface so AT walks `<hx-tr>` (role=row) directly. Fallback\npath keeps the inner `<tr role=\"row\">` as the announced surface for\nengines without IDL element references.",
|
|
28231
28440
|
"name": "HelixTableRow",
|
|
28232
28441
|
"cssParts": [
|
|
28233
28442
|
{
|
|
@@ -28392,7 +28601,7 @@
|
|
|
28392
28601
|
"declarations": [
|
|
28393
28602
|
{
|
|
28394
28603
|
"kind": "class",
|
|
28395
|
-
"description": "A content panel associated with an `<hx-tab>`, managed by a parent `<hx-tabs
|
|
28604
|
+
"description": "A content panel associated with an `<hx-tab>`, managed by a parent `<hx-tabs>`.\nGroup 5a host-canonical: `role=\"tabpanel\"` lives on the host via\n`_internals.role`. The host carries the canonical AT surface — consumer\n`aria-labelledby` / `aria-describedby` on the host resolve through the\nshared IDREF mirror. The parent `hx-tabs` writes `internals.ariaLabelledByElements`\nreferencing the corresponding `<hx-tab>` host so cross-shadow naming works\nvia IDL element references (the modern path) without serializing tab text.",
|
|
28396
28605
|
"name": "HelixTabPanel",
|
|
28397
28606
|
"cssProperties": [
|
|
28398
28607
|
{
|
|
@@ -28482,7 +28691,7 @@
|
|
|
28482
28691
|
"declarations": [
|
|
28483
28692
|
{
|
|
28484
28693
|
"kind": "class",
|
|
28485
|
-
"description": "An individual tab button, designed to be used inside an `<hx-tabs>` container.\nMust be placed in the `tab` named slot of `<hx-tabs
|
|
28694
|
+
"description": "An individual tab button, designed to be used inside an `<hx-tabs>` container.\nMust be placed in the `tab` named slot of `<hx-tabs>`.\n\nGroup 5a host-canonical: `role=\"tab\"` lives on the **host** via\n`_internals.role`. The host is the focusable surface (carries the roving\ntabindex); the inner `<button>` retains click activation semantics\n(Enter/Space and pointer events) but is no longer the AT-announced surface\n— its role and ARIA state are stripped on the modern path so the host's\ncanonical surface wins. `internals.ariaSelected`, `ariaDisabled`, and\n`ariaControlsElements` mirror reactive state. The host `aria-label` /\n`aria-labelledby` resolved via the shared IDREF mirror name the tab\ncross-shadow.",
|
|
28486
28695
|
"name": "HelixTab",
|
|
28487
28696
|
"cssProperties": [
|
|
28488
28697
|
{
|
|
@@ -28675,7 +28884,7 @@
|
|
|
28675
28884
|
"declarations": [
|
|
28676
28885
|
{
|
|
28677
28886
|
"kind": "class",
|
|
28678
|
-
"description": "A tabbed content organizer that manages a set of `<hx-tab>` and `<hx-tab-panel>` children.\nSupports horizontal and vertical orientations, automatic and manual activation modes,\nand full keyboard navigation per the ARIA Authoring Practices Guide.",
|
|
28887
|
+
"description": "A tabbed content organizer that manages a set of `<hx-tab>` and `<hx-tab-panel>` children.\nSupports horizontal and vertical orientations, automatic and manual activation modes,\nand full keyboard navigation per the ARIA Authoring Practices Guide.\n\nGroup 5a host-canonical: `role=\"tablist\"` lives on the host via\n`_internals.role`. `aria-orientation`, `aria-label`, and consumer\n`aria-labelledby` resolve through the host. Per-tab `role=\"tab\"` and\nper-panel `role=\"tabpanel\"` likewise live on their respective hosts.\n\nActivation defaults to **manual** per healthcare patterns — keyboard arrow\nkeys move focus only; Enter/Space activates. APG explicitly allows both\nautomatic and manual activation; manual is safer when panels are heavy or\nannounce changes via live regions.",
|
|
28679
28888
|
"name": "HelixTabs",
|
|
28680
28889
|
"cssProperties": [
|
|
28681
28890
|
{
|
|
@@ -28824,8 +29033,8 @@
|
|
|
28824
29033
|
"type": {
|
|
28825
29034
|
"text": "'manual' | 'automatic'"
|
|
28826
29035
|
},
|
|
28827
|
-
"default": "'
|
|
28828
|
-
"description": "Controls how keyboard navigation activates tabs.\nIn `automatic` mode, focus also activates the tab.\nIn `manual` mode, focus moves independently; Space or Enter activates.",
|
|
29036
|
+
"default": "'manual'",
|
|
29037
|
+
"description": "Controls how keyboard navigation activates tabs.\nIn `automatic` mode, focus also activates the tab.\nIn `manual` mode, focus moves independently; Space or Enter activates.\n\nGroup 5a default: `manual` — safer for healthcare patterns where panel\ncontent may be heavy or announce updates via live regions. APG explicitly\nallows both modes; manual avoids disorienting auto-activation when users\nscan tabs with arrow keys.",
|
|
28829
29038
|
"attribute": "activation",
|
|
28830
29039
|
"reflects": true
|
|
28831
29040
|
},
|
|
@@ -28836,7 +29045,7 @@
|
|
|
28836
29045
|
"text": "string"
|
|
28837
29046
|
},
|
|
28838
29047
|
"default": "''",
|
|
28839
|
-
"description": "Accessible label for the tablist.
|
|
29048
|
+
"description": "Accessible label for the tablist. Drives the host `internals.ariaLabel`.\nProvide a brief description of what the tabs represent (e.g., \"Patient\nrecord sections\"). Consumer `aria-label` / `aria-labelledby` on the host\noverride this property when present.",
|
|
28840
29049
|
"attribute": "label",
|
|
28841
29050
|
"reflects": true
|
|
28842
29051
|
},
|
|
@@ -28877,8 +29086,8 @@
|
|
|
28877
29086
|
"type": {
|
|
28878
29087
|
"text": "'manual' | 'automatic'"
|
|
28879
29088
|
},
|
|
28880
|
-
"default": "'
|
|
28881
|
-
"description": "Controls how keyboard navigation activates tabs.\nIn `automatic` mode, focus also activates the tab.\nIn `manual` mode, focus moves independently; Space or Enter activates.",
|
|
29089
|
+
"default": "'manual'",
|
|
29090
|
+
"description": "Controls how keyboard navigation activates tabs.\nIn `automatic` mode, focus also activates the tab.\nIn `manual` mode, focus moves independently; Space or Enter activates.\n\nGroup 5a default: `manual` — safer for healthcare patterns where panel\ncontent may be heavy or announce updates via live regions. APG explicitly\nallows both modes; manual avoids disorienting auto-activation when users\nscan tabs with arrow keys.",
|
|
28882
29091
|
"fieldName": "activation",
|
|
28883
29092
|
"attribute": "activation"
|
|
28884
29093
|
},
|
|
@@ -28888,7 +29097,7 @@
|
|
|
28888
29097
|
"text": "string"
|
|
28889
29098
|
},
|
|
28890
29099
|
"default": "''",
|
|
28891
|
-
"description": "Accessible label for the tablist.
|
|
29100
|
+
"description": "Accessible label for the tablist. Drives the host `internals.ariaLabel`.\nProvide a brief description of what the tabs represent (e.g., \"Patient\nrecord sections\"). Consumer `aria-label` / `aria-labelledby` on the host\noverride this property when present.",
|
|
28892
29101
|
"fieldName": "label",
|
|
28893
29102
|
"attribute": "label"
|
|
28894
29103
|
}
|
|
@@ -30985,25 +31194,37 @@
|
|
|
30985
31194
|
"name": "HelixTheme",
|
|
30986
31195
|
"cssProperties": [
|
|
30987
31196
|
{
|
|
30988
|
-
"description": "
|
|
30989
|
-
"name": "--hx
|
|
31197
|
+
"description": "Primary text color (theme-injected).",
|
|
31198
|
+
"name": "--hx-color-text-primary"
|
|
30990
31199
|
},
|
|
30991
31200
|
{
|
|
30992
|
-
"description": "
|
|
30993
|
-
"name": "--hx-color-
|
|
31201
|
+
"description": "Base surface background (theme-injected).",
|
|
31202
|
+
"name": "--hx-color-surface-base"
|
|
30994
31203
|
},
|
|
30995
31204
|
{
|
|
30996
|
-
"description": "
|
|
31205
|
+
"description": "Default border color (theme-injected).",
|
|
31206
|
+
"name": "--hx-color-border-default"
|
|
31207
|
+
},
|
|
31208
|
+
{
|
|
31209
|
+
"description": "Spacing token (theme-injected).",
|
|
30997
31210
|
"name": "--hx-space-4"
|
|
30998
31211
|
},
|
|
30999
31212
|
{
|
|
31000
|
-
"description": "Animation duration.",
|
|
31213
|
+
"description": "Animation duration (theme-injected).",
|
|
31001
31214
|
"name": "--hx-duration-fast"
|
|
31215
|
+
},
|
|
31216
|
+
{
|
|
31217
|
+
"description": "Medium border-radius (theme-injected).",
|
|
31218
|
+
"name": "--hx-radius-md"
|
|
31219
|
+
},
|
|
31220
|
+
{
|
|
31221
|
+
"description": "Body font family (theme-injected).",
|
|
31222
|
+
"name": "--hx-font-family-body"
|
|
31002
31223
|
}
|
|
31003
31224
|
],
|
|
31004
31225
|
"cssParts": [
|
|
31005
31226
|
{
|
|
31006
|
-
"description": "The inner slot wrapper element. `display: contents` — no layout effect.",
|
|
31227
|
+
"description": "The inner slot wrapper element. `display: contents` — no layout effect. Theme-injected CSS custom properties (semantic surface — full token catalog lives in `@helixui/tokens`; the wildcard `--hx-*` was previously documented here but the CEM cssProperties[] surface requires explicit names).",
|
|
31007
31228
|
"name": "base"
|
|
31008
31229
|
}
|
|
31009
31230
|
],
|
|
@@ -31587,6 +31808,16 @@
|
|
|
31587
31808
|
"attribute": "format",
|
|
31588
31809
|
"reflects": true
|
|
31589
31810
|
},
|
|
31811
|
+
{
|
|
31812
|
+
"kind": "field",
|
|
31813
|
+
"name": "accessibleLabel",
|
|
31814
|
+
"type": {
|
|
31815
|
+
"text": "string | null"
|
|
31816
|
+
},
|
|
31817
|
+
"default": "null",
|
|
31818
|
+
"description": "Accessible name for screen readers, if different from the visible label.\nUses `accessible-label` attribute instead of `aria-label` to avoid\nARIAMixin shadowing on the host element. Highest-precedence naming source.",
|
|
31819
|
+
"attribute": "accessible-label"
|
|
31820
|
+
},
|
|
31590
31821
|
{
|
|
31591
31822
|
"kind": "field",
|
|
31592
31823
|
"name": "_id",
|
|
@@ -31722,6 +31953,16 @@
|
|
|
31722
31953
|
"description": "Display format for the time input. '12h' shows AM/PM; '24h' is bare HH:MM.",
|
|
31723
31954
|
"fieldName": "format",
|
|
31724
31955
|
"attribute": "format"
|
|
31956
|
+
},
|
|
31957
|
+
{
|
|
31958
|
+
"name": "accessible-label",
|
|
31959
|
+
"type": {
|
|
31960
|
+
"text": "string | null"
|
|
31961
|
+
},
|
|
31962
|
+
"default": "null",
|
|
31963
|
+
"description": "Accessible name for screen readers, if different from the visible label.\nUses `accessible-label` attribute instead of `aria-label` to avoid\nARIAMixin shadowing on the host element. Highest-precedence naming source.",
|
|
31964
|
+
"fieldName": "accessibleLabel",
|
|
31965
|
+
"attribute": "accessible-label"
|
|
31725
31966
|
}
|
|
31726
31967
|
],
|
|
31727
31968
|
"mixins": [
|
|
@@ -31791,7 +32032,7 @@
|
|
|
31791
32032
|
"name": "HelixToastStack",
|
|
31792
32033
|
"cssProperties": [
|
|
31793
32034
|
{
|
|
31794
|
-
"description": "Z-index for the fixed stack.",
|
|
32035
|
+
"description": "Z-index for the fixed stack. ─── ARIA scope (group-6 §3.2 / §5.9) ───────────────────────────────────── `hx-toast-stack` deliberately has NO `role`, `aria-live`, `aria-atomic`, or `aria-relevant` on its host or inner container. Each child `hx-toast` is its own live region (role=alert/status via ElementInternals). Wrapping those toasts in a second live region (e.g. `role=\"log\"` on the stack) would create nested live regions, which causes older NVDA/JAWS to announce every toast TWICE — once for the toast's own role, once for the surrounding log region. The stack is purely a positional/z-index container; it is invisible to the AT tree. Do NOT add a container role unless this entire architecture is rewritten so individual toasts no longer carry their own roles.",
|
|
31795
32036
|
"name": "--hx-z-index-toast",
|
|
31796
32037
|
"default": "9000"
|
|
31797
32038
|
}
|
|
@@ -32683,6 +32924,25 @@
|
|
|
32683
32924
|
},
|
|
32684
32925
|
"description": "Reports validity and shows the browser's constraint validation UI."
|
|
32685
32926
|
},
|
|
32927
|
+
{
|
|
32928
|
+
"kind": "method",
|
|
32929
|
+
"name": "focus",
|
|
32930
|
+
"return": {
|
|
32931
|
+
"type": {
|
|
32932
|
+
"text": "void"
|
|
32933
|
+
}
|
|
32934
|
+
},
|
|
32935
|
+
"parameters": [
|
|
32936
|
+
{
|
|
32937
|
+
"name": "options",
|
|
32938
|
+
"optional": true,
|
|
32939
|
+
"type": {
|
|
32940
|
+
"text": "FocusOptions"
|
|
32941
|
+
}
|
|
32942
|
+
}
|
|
32943
|
+
],
|
|
32944
|
+
"description": "Moves focus to the announced toggle-button surface. Codex round-1 finding\n`#1` made the host the canonical focus target on modern engines so AT\nannounces a single widget. Round-7 finding `#9` extends that contract to\nthe no-IDL-ref fallback: when the host is demoted (`tabindex=-1`,\nrole/state cleared on `internals`) the inner `<button>` owns the announced\nsemantics and tab order, so programmatic `focus()` must redirect there —\notherwise scripted focus and error recovery land on the demoted host on\nunsupported engines."
|
|
32945
|
+
},
|
|
32686
32946
|
{
|
|
32687
32947
|
"kind": "method",
|
|
32688
32948
|
"name": "_onFormReset",
|
|
@@ -32884,7 +33144,7 @@
|
|
|
32884
33144
|
"declarations": [
|
|
32885
33145
|
{
|
|
32886
33146
|
"kind": "class",
|
|
32887
|
-
"description": "A tooltip that displays contextual help text on hover or focus.",
|
|
33147
|
+
"description": "A tooltip that displays contextual help text on hover or focus.\n\n## Architecture Note: Light-DOM Description Shim (group-4 round-1)\n\n`aria-describedby` IDREFs cannot resolve across the Shadow DOM boundary —\nthe trigger lives in the consumer's light DOM and references a tooltip\nwhose body is in this component's shadow root. The tooltip text must\ntherefore be exposed in DOCUMENT scope.\n\nThe shim is a single visually-hidden `<span>` appended to `document.body`\nwith the `_tooltipId` as its `id`. The trigger's `aria-describedby` points\nat this span. The text content is mirrored from the slotted `content`\nslot on every relevant signal:\n\n 1. `firstUpdated` (initial wiring)\n 2. `slotchange` on the default slot AND the `content` slot (the slotted\n element list changes)\n 3. **Text-content mutations on the assigned `content` slot elements**\n (round-23 P2 pattern). Without this observer a framework that\n rewrites the slotted `<span slot=\"content\">` `textContent` IN PLACE\n (Vue / React keyed text rerender) would leave the shim stale.\n\nCleanup: `disconnectedCallback` removes the shim from `document.body`,\ndisconnects the slot-text observer, and clears the timers. SSR is\nsidestepped by guarding `document` access — the shim is created lazily\nthe first time `_setupTriggerAria()` runs in a browser environment.\n\n`role=\"tooltip\"` is the correct APG role and is NEVER promoted to\n`role=\"dialog\"` — APG explicitly forbids tooltips from holding focus and\nthe tooltip body is not a focus target. No host-canonical `_internals`\nwork is owed: the trigger is the announced surface, and it correctly\nreferences the tooltip via `aria-describedby`.",
|
|
32888
33148
|
"name": "HelixTooltip",
|
|
32889
33149
|
"cssProperties": [
|
|
32890
33150
|
{
|
|
@@ -33390,7 +33650,7 @@
|
|
|
33390
33650
|
"declarations": [
|
|
33391
33651
|
{
|
|
33392
33652
|
"kind": "class",
|
|
33393
|
-
"description": "A tree item used within an hx-tree-view component.\nSupports expand/collapse, selection, keyboard navigation, and icon/children slots.",
|
|
33653
|
+
"description": "A tree item used within an hx-tree-view component.\nSupports expand/collapse, selection, keyboard navigation, and icon/children slots.\n\nGroup 5c host-canonical: `role=\"treeitem\"` lives on the **host** via\n`_internals.role`. The roving tabindex is written to the host on the\nmodern path so the host is the focusable surface and lands directly\nunder the parent `<hx-tree-view>` (which carries `role=\"tree\"`) in the\nAT-walked tree. The inner `.item-row` is presentational on the modern\npath — no role, no aria-* attributes — and carries only click/keyboard\nevent handlers. Keyboard activation (Enter/Space) and expand/collapse\n(ArrowLeft/Right at the leaf level) are owned by the host's `keydown`\nhandler; ArrowUp/Down/Home/End and typeahead bubble to the parent\n`<hx-tree-view>` for navigation.\n\nThe nested `[role=\"group\"]` element that wraps the `slot=\"children\"`\nstays in the inner shadow DOM regardless of path — that group is a\nseparate sub-surface for the children, not a duplicate of the\ntreeitem role.\n\nOn the legacy fallback path the inner `.item-row` carries\n`role=\"treeitem\"` + aria-* state, the host role is suppressed, and the\nroving tabindex is written to the inner element so there is only ONE\nfocusable surface per item (mirrors hx-menu-item round-8).",
|
|
33394
33654
|
"name": "HelixTreeItem",
|
|
33395
33655
|
"cssProperties": [
|
|
33396
33656
|
{
|
|
@@ -33435,7 +33695,7 @@
|
|
|
33435
33695
|
"name": "item"
|
|
33436
33696
|
},
|
|
33437
33697
|
{
|
|
33438
|
-
"description": "The interactive item row (
|
|
33698
|
+
"description": "The interactive item row (presentational on the modern path; carries role=\"treeitem\" + aria-* on the legacy fallback).",
|
|
33439
33699
|
"name": "row"
|
|
33440
33700
|
},
|
|
33441
33701
|
{
|
|
@@ -33447,7 +33707,7 @@
|
|
|
33447
33707
|
"name": "label"
|
|
33448
33708
|
},
|
|
33449
33709
|
{
|
|
33450
|
-
"description": "The children container.",
|
|
33710
|
+
"description": "The children container (always carries role=\"group\").",
|
|
33451
33711
|
"name": "children"
|
|
33452
33712
|
}
|
|
33453
33713
|
],
|
|
@@ -33538,7 +33798,7 @@
|
|
|
33538
33798
|
}
|
|
33539
33799
|
}
|
|
33540
33800
|
],
|
|
33541
|
-
"description": "Sets the roving tabindex state for this item.\nWhen `active` is true, the
|
|
33801
|
+
"description": "Sets the roving tabindex state for this item.\nWhen `active` is true, the host (modern) or inner row (fallback) gets\n`tabindex=\"0\"` making it the Tab-reachable surface in the tree. All\nother items should be set to false. Called by the parent hx-tree-view\nto manage the roving tabindex pattern."
|
|
33542
33802
|
},
|
|
33543
33803
|
{
|
|
33544
33804
|
"kind": "method",
|
|
@@ -33548,7 +33808,16 @@
|
|
|
33548
33808
|
"text": "void"
|
|
33549
33809
|
}
|
|
33550
33810
|
},
|
|
33551
|
-
"
|
|
33811
|
+
"parameters": [
|
|
33812
|
+
{
|
|
33813
|
+
"name": "options",
|
|
33814
|
+
"optional": true,
|
|
33815
|
+
"type": {
|
|
33816
|
+
"text": "FocusOptions"
|
|
33817
|
+
}
|
|
33818
|
+
}
|
|
33819
|
+
],
|
|
33820
|
+
"description": "Focus this item. On the modern host-canonical path, focus lands on the\nhost (which carries the roving tabindex and announced role). On the\nlegacy fallback path, focus delegates to the inner `.item-row` which\nstill carries the role."
|
|
33552
33821
|
}
|
|
33553
33822
|
],
|
|
33554
33823
|
"events": [
|
|
@@ -33626,7 +33895,7 @@
|
|
|
33626
33895
|
"declarations": [
|
|
33627
33896
|
{
|
|
33628
33897
|
"kind": "class",
|
|
33629
|
-
"description": "A hierarchical tree component for navigating nested data structures.\nUsed in healthcare applications for org charts, ICD-10 code hierarchies, and department navigation.\n\
|
|
33898
|
+
"description": "A hierarchical tree component for navigating nested data structures.\nUsed in healthcare applications for org charts, ICD-10 code hierarchies, and department navigation.\n\nGroup 5c host-canonical: `role=\"tree\"` lives on the **host** via\n`_internals.role` on the modern path. The host carries the announced\nsurface so AT walks `<hx-tree-view>` (role=tree) → slotted\n`<hx-tree-item>` (role=treeitem on host) directly without two layers of\nindirection. Consumer-supplied `aria-label` / `aria-labelledby` on the\nhost are resolved via the shared IDREF mirror; cross-shadow naming uses\n`ariaLabelledByElements` (modern) with a flattened-string fallback\n(legacy). On the legacy fallback path the inner `[role=\"tree\"]` carries\nthe role + accessible name and the host role is suppressed so AT only\nsees one tree per logical surface (mirrors `hx-menu` round-8).\n\nFull keyboard navigation: Arrow keys for movement, Enter/Space for\nselection, Home/End for first/last item, ArrowRight/Left for\nexpand/collapse + parent/child traversal, typeahead.\n\n## Scale Limits\n\nThis component renders all tree items simultaneously in the DOM. It is suitable for\ntrees with up to ~500 visible items. For large taxonomies (e.g., ICD-10 with 70,000+\ncodes), use async/lazy loading: only render top-level nodes initially and populate\nchild nodes on `hx-select` or expand events. The component exposes the `expanded`\nproperty on `hx-tree-item` for programmatic control of subtrees, enabling consumer-level\nvirtualization strategies without requiring changes to this component.",
|
|
33630
33899
|
"name": "HelixTreeView",
|
|
33631
33900
|
"cssProperties": [
|
|
33632
33901
|
{
|
|
@@ -33661,7 +33930,7 @@
|
|
|
33661
33930
|
],
|
|
33662
33931
|
"cssParts": [
|
|
33663
33932
|
{
|
|
33664
|
-
"description": "The tree container element with role=\"tree\".",
|
|
33933
|
+
"description": "The tree container element with role=\"tree\" (legacy fallback path) or the inner shadow surface (modern path; role lives on the host).",
|
|
33665
33934
|
"name": "tree"
|
|
33666
33935
|
}
|
|
33667
33936
|
],
|
|
@@ -33679,7 +33948,7 @@
|
|
|
33679
33948
|
"text": "string"
|
|
33680
33949
|
},
|
|
33681
33950
|
"default": "''",
|
|
33682
|
-
"description": "Accessible label for the tree.
|
|
33951
|
+
"description": "Accessible label for the tree. Used as a fallback when no\nconsumer-supplied `aria-label` / `aria-labelledby` is present on the\nhost. On the modern host-canonical path this projects onto\n`internals.ariaLabel`; on the legacy fallback path it appears as\n`aria-label` on the inner `[role=\"tree\"]` element.",
|
|
33683
33952
|
"attribute": "label",
|
|
33684
33953
|
"reflects": true
|
|
33685
33954
|
},
|
|
@@ -33711,7 +33980,7 @@
|
|
|
33711
33980
|
"text": "string"
|
|
33712
33981
|
},
|
|
33713
33982
|
"default": "''",
|
|
33714
|
-
"description": "Accessible label for the tree.
|
|
33983
|
+
"description": "Accessible label for the tree. Used as a fallback when no\nconsumer-supplied `aria-label` / `aria-labelledby` is present on the\nhost. On the modern host-canonical path this projects onto\n`internals.ariaLabel`; on the legacy fallback path it appears as\n`aria-label` on the inner `[role=\"tree\"]` element.",
|
|
33715
33984
|
"fieldName": "label",
|
|
33716
33985
|
"attribute": "label"
|
|
33717
33986
|
},
|