@helixui/library 2.1.2-next.52 → 2.1.2-next.54
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 +1110 -1249
- package/dist/base/helix-element.d.ts +20 -8
- package/dist/base/helix-element.d.ts.map +1 -1
- package/dist/components/hx-accordion/hx-accordion-item.d.ts +7 -4
- package/dist/components/hx-accordion/hx-accordion-item.d.ts.map +1 -1
- package/dist/components/hx-accordion/hx-accordion-item.styles.d.ts.map +1 -1
- package/dist/components/hx-accordion/hx-accordion.d.ts +3 -2
- package/dist/components/hx-accordion/hx-accordion.d.ts.map +1 -1
- package/dist/components/hx-accordion/hx-accordion.styles.d.ts.map +1 -1
- package/dist/components/hx-accordion/index.d.ts +1 -0
- package/dist/components/hx-accordion/index.d.ts.map +1 -1
- package/dist/components/hx-accordion/index.js +1 -1
- package/dist/components/hx-action-bar/hx-action-bar.d.ts +2 -11
- package/dist/components/hx-action-bar/hx-action-bar.d.ts.map +1 -1
- package/dist/components/hx-action-bar/hx-action-bar.styles.d.ts.map +1 -1
- package/dist/components/hx-action-bar/index.js +1 -1
- package/dist/components/hx-alert/hx-alert.d.ts +7 -2
- 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.d.ts +1 -0
- package/dist/components/hx-alert/index.d.ts.map +1 -1
- package/dist/components/hx-alert/index.js +1 -1
- package/dist/components/hx-avatar/hx-avatar.d.ts +3 -2
- package/dist/components/hx-avatar/hx-avatar.d.ts.map +1 -1
- package/dist/components/hx-avatar/index.js +1 -1
- package/dist/components/hx-badge/hx-badge.d.ts +2 -9
- package/dist/components/hx-badge/hx-badge.d.ts.map +1 -1
- package/dist/components/hx-badge/hx-badge.styles.d.ts.map +1 -1
- package/dist/components/hx-badge/index.d.ts +1 -1
- package/dist/components/hx-badge/index.d.ts.map +1 -1
- package/dist/components/hx-badge/index.js +1 -1
- package/dist/components/hx-banner/hx-banner.d.ts +3 -2
- package/dist/components/hx-banner/hx-banner.d.ts.map +1 -1
- package/dist/components/hx-banner/hx-banner.styles.d.ts.map +1 -1
- package/dist/components/hx-banner/index.js +1 -1
- package/dist/components/hx-breadcrumb/hx-breadcrumb-item.d.ts +2 -2
- package/dist/components/hx-breadcrumb/hx-breadcrumb-item.d.ts.map +1 -1
- package/dist/components/hx-breadcrumb/hx-breadcrumb-item.styles.d.ts.map +1 -1
- package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts +9 -19
- package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts.map +1 -1
- package/dist/components/hx-breadcrumb/hx-breadcrumb.styles.d.ts.map +1 -1
- package/dist/components/hx-breadcrumb/index.js +1 -1
- package/dist/components/hx-button/hx-button.d.ts +31 -9
- package/dist/components/hx-button/hx-button.d.ts.map +1 -1
- package/dist/components/hx-button/hx-button.styles.d.ts.map +1 -1
- package/dist/components/hx-button/index.d.ts +1 -0
- package/dist/components/hx-button/index.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 +4 -6
- package/dist/components/hx-button-group/hx-button-group.d.ts.map +1 -1
- package/dist/components/hx-button-group/hx-button-group.styles.d.ts.map +1 -1
- package/dist/components/hx-button-group/index.js +1 -1
- package/dist/components/hx-card/hx-card.d.ts +19 -2
- package/dist/components/hx-card/hx-card.d.ts.map +1 -1
- package/dist/components/hx-card/hx-card.styles.d.ts.map +1 -1
- package/dist/components/hx-card/index.js +1 -1
- package/dist/components/hx-carousel/hx-carousel-item.d.ts +2 -2
- package/dist/components/hx-carousel/hx-carousel-item.d.ts.map +1 -1
- package/dist/components/hx-carousel/hx-carousel-item.styles.d.ts.map +1 -1
- package/dist/components/hx-carousel/hx-carousel.d.ts +2 -2
- package/dist/components/hx-carousel/hx-carousel.d.ts.map +1 -1
- package/dist/components/hx-carousel/hx-carousel.styles.d.ts.map +1 -1
- package/dist/components/hx-carousel/index.js +1 -1
- package/dist/components/hx-checkbox/hx-checkbox.d.ts +52 -5
- 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.d.ts +1 -0
- package/dist/components/hx-checkbox/index.d.ts.map +1 -1
- package/dist/components/hx-checkbox/index.js +1 -1
- package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts +14 -20
- package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts.map +1 -1
- package/dist/components/hx-checkbox-group/hx-checkbox-group.styles.d.ts.map +1 -1
- package/dist/components/hx-checkbox-group/index.d.ts +1 -0
- package/dist/components/hx-checkbox-group/index.d.ts.map +1 -1
- package/dist/components/hx-checkbox-group/index.js +1 -1
- package/dist/components/hx-clinical-status/hx-clinical-status.d.ts +0 -7
- package/dist/components/hx-clinical-status/hx-clinical-status.d.ts.map +1 -1
- package/dist/components/hx-clinical-status/hx-clinical-status.styles.d.ts.map +1 -1
- package/dist/components/hx-clinical-status/index.js +1 -1
- package/dist/components/hx-code-snippet/hx-code-snippet.styles.d.ts.map +1 -1
- package/dist/components/hx-code-snippet/index.js +1 -1
- package/dist/components/hx-color-picker/hx-color-picker.d.ts +8 -11
- 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.d.ts +1 -0
- package/dist/components/hx-color-picker/index.d.ts.map +1 -1
- package/dist/components/hx-color-picker/index.js +1 -1
- package/dist/components/hx-combobox/hx-combobox.d.ts +45 -22
- package/dist/components/hx-combobox/hx-combobox.d.ts.map +1 -1
- package/dist/components/hx-combobox/hx-combobox.styles.d.ts.map +1 -1
- package/dist/components/hx-combobox/index.d.ts +1 -0
- package/dist/components/hx-combobox/index.d.ts.map +1 -1
- package/dist/components/hx-combobox/index.js +1 -1
- package/dist/components/hx-container/hx-container.d.ts +2 -4
- package/dist/components/hx-container/hx-container.d.ts.map +1 -1
- package/dist/components/hx-container/hx-container.styles.d.ts.map +1 -1
- package/dist/components/hx-container/index.d.ts +0 -1
- package/dist/components/hx-container/index.d.ts.map +1 -1
- package/dist/components/hx-container/index.js +1 -1
- package/dist/components/hx-copy-button/hx-copy-button.d.ts +2 -2
- package/dist/components/hx-copy-button/hx-copy-button.d.ts.map +1 -1
- package/dist/components/hx-copy-button/hx-copy-button.styles.d.ts.map +1 -1
- package/dist/components/hx-copy-button/index.js +1 -1
- package/dist/components/hx-counter/hx-counter.d.ts +3 -2
- package/dist/components/hx-counter/hx-counter.d.ts.map +1 -1
- package/dist/components/hx-counter/hx-counter.styles.d.ts.map +1 -1
- package/dist/components/hx-counter/index.js +1 -1
- package/dist/components/hx-data-table/hx-data-table.d.ts +46 -2
- package/dist/components/hx-data-table/hx-data-table.d.ts.map +1 -1
- package/dist/components/hx-data-table/hx-data-table.styles.d.ts.map +1 -1
- package/dist/components/hx-data-table/index.d.ts +1 -0
- package/dist/components/hx-data-table/index.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 +35 -35
- 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.d.ts +1 -0
- package/dist/components/hx-date-picker/index.d.ts.map +1 -1
- package/dist/components/hx-date-picker/index.js +1 -1
- package/dist/components/hx-dialog/hx-dialog.d.ts +44 -5
- package/dist/components/hx-dialog/hx-dialog.d.ts.map +1 -1
- package/dist/components/hx-dialog/hx-dialog.styles.d.ts.map +1 -1
- package/dist/components/hx-dialog/index.js +1 -1
- package/dist/components/hx-divider/hx-divider.d.ts +3 -4
- package/dist/components/hx-divider/hx-divider.d.ts.map +1 -1
- package/dist/components/hx-divider/hx-divider.styles.d.ts.map +1 -1
- package/dist/components/hx-divider/index.d.ts +0 -1
- package/dist/components/hx-divider/index.d.ts.map +1 -1
- package/dist/components/hx-divider/index.js +1 -1
- package/dist/components/hx-drawer/hx-drawer.d.ts +39 -2
- 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 +11 -7
- package/dist/components/hx-dropdown/hx-dropdown.d.ts.map +1 -1
- package/dist/components/hx-dropdown/hx-dropdown.styles.d.ts.map +1 -1
- package/dist/components/hx-dropdown/index.js +1 -1
- package/dist/components/hx-field/hx-field.d.ts +4 -3
- package/dist/components/hx-field/hx-field.d.ts.map +1 -1
- package/dist/components/hx-field/hx-field.styles.d.ts.map +1 -1
- package/dist/components/hx-field/index.js +1 -1
- package/dist/components/hx-field-label/hx-field-label.d.ts +2 -2
- package/dist/components/hx-field-label/hx-field-label.d.ts.map +1 -1
- package/dist/components/hx-field-label/hx-field-label.styles.d.ts.map +1 -1
- package/dist/components/hx-field-label/index.js +1 -1
- package/dist/components/hx-file-upload/hx-file-upload.d.ts +39 -21
- package/dist/components/hx-file-upload/hx-file-upload.d.ts.map +1 -1
- package/dist/components/hx-file-upload/index.d.ts +1 -0
- package/dist/components/hx-file-upload/index.d.ts.map +1 -1
- package/dist/components/hx-file-upload/index.js +1 -1
- package/dist/components/hx-form/hx-form.d.ts +2 -2
- package/dist/components/hx-form/hx-form.d.ts.map +1 -1
- package/dist/components/hx-form/hx-form.styles.d.ts +8 -0
- package/dist/components/hx-form/hx-form.styles.d.ts.map +1 -1
- package/dist/components/hx-form/index.js +1 -1
- package/dist/components/hx-format-date/hx-format-date.d.ts +2 -2
- package/dist/components/hx-format-date/hx-format-date.d.ts.map +1 -1
- package/dist/components/hx-format-date/hx-format-date.styles.d.ts.map +1 -1
- package/dist/components/hx-format-date/index.js +1 -1
- package/dist/components/hx-grid/hx-grid.d.ts +4 -3
- package/dist/components/hx-grid/hx-grid.d.ts.map +1 -1
- package/dist/components/hx-grid/hx-grid.styles.d.ts.map +1 -1
- package/dist/components/hx-grid/index.js +1 -1
- package/dist/components/hx-help-text/hx-help-text.d.ts +2 -4
- package/dist/components/hx-help-text/hx-help-text.d.ts.map +1 -1
- package/dist/components/hx-help-text/hx-help-text.styles.d.ts.map +1 -1
- package/dist/components/hx-help-text/index.js +1 -1
- package/dist/components/hx-icon/hx-icon.d.ts +17 -2
- package/dist/components/hx-icon/hx-icon.d.ts.map +1 -1
- package/dist/components/hx-icon/hx-icon.styles.d.ts.map +1 -1
- package/dist/components/hx-icon/index.js +1 -1
- package/dist/components/hx-icon-button/hx-icon-button.d.ts +10 -14
- 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-image/hx-image.d.ts +2 -2
- package/dist/components/hx-image/hx-image.d.ts.map +1 -1
- package/dist/components/hx-image/hx-image.styles.d.ts.map +1 -1
- package/dist/components/hx-image/index.js +1 -1
- package/dist/components/hx-link/hx-link.d.ts +2 -2
- package/dist/components/hx-link/hx-link.d.ts.map +1 -1
- package/dist/components/hx-link/hx-link.styles.d.ts.map +1 -1
- package/dist/components/hx-link/index.js +1 -1
- package/dist/components/hx-list/hx-list-item.d.ts +3 -2
- package/dist/components/hx-list/hx-list-item.d.ts.map +1 -1
- package/dist/components/hx-list/hx-list.d.ts +3 -2
- package/dist/components/hx-list/hx-list.d.ts.map +1 -1
- package/dist/components/hx-list/hx-list.styles.d.ts.map +1 -1
- package/dist/components/hx-list/index.js +1 -1
- package/dist/components/hx-menu/hx-menu-divider.d.ts +2 -2
- package/dist/components/hx-menu/hx-menu-divider.d.ts.map +1 -1
- package/dist/components/hx-menu/hx-menu-divider.styles.d.ts.map +1 -1
- package/dist/components/hx-menu/hx-menu-item.d.ts +2 -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 +2 -2
- package/dist/components/hx-menu/hx-menu.d.ts.map +1 -1
- package/dist/components/hx-menu/hx-menu.styles.d.ts.map +1 -1
- package/dist/components/hx-menu/index.js +1 -1
- package/dist/components/hx-meter/hx-meter.d.ts +3 -4
- 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-nav/hx-nav.d.ts +2 -4
- package/dist/components/hx-nav/hx-nav.d.ts.map +1 -1
- package/dist/components/hx-nav/hx-nav.styles.d.ts.map +1 -1
- package/dist/components/hx-nav/index.d.ts +1 -1
- package/dist/components/hx-nav/index.d.ts.map +1 -1
- package/dist/components/hx-nav/index.js +1 -1
- package/dist/components/hx-number-input/hx-number-input.d.ts +14 -20
- package/dist/components/hx-number-input/hx-number-input.d.ts.map +1 -1
- package/dist/components/hx-number-input/hx-number-input.styles.d.ts.map +1 -1
- package/dist/components/hx-number-input/index.d.ts +1 -0
- package/dist/components/hx-number-input/index.d.ts.map +1 -1
- package/dist/components/hx-number-input/index.js +1 -1
- package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts +2 -2
- package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts.map +1 -1
- package/dist/components/hx-overflow-menu/hx-overflow-menu.styles.d.ts.map +1 -1
- package/dist/components/hx-overflow-menu/index.js +1 -1
- package/dist/components/hx-pagination/hx-pagination.d.ts +10 -2
- package/dist/components/hx-pagination/hx-pagination.d.ts.map +1 -1
- package/dist/components/hx-pagination/index.d.ts +1 -0
- package/dist/components/hx-pagination/index.d.ts.map +1 -1
- package/dist/components/hx-pagination/index.js +1 -1
- package/dist/components/hx-patient-banner/hx-patient-banner.d.ts +47 -5
- package/dist/components/hx-patient-banner/hx-patient-banner.d.ts.map +1 -1
- package/dist/components/hx-patient-banner/hx-patient-banner.styles.d.ts.map +1 -1
- package/dist/components/hx-patient-banner/index.js +1 -1
- package/dist/components/hx-phi-field/hx-phi-field.d.ts +85 -5
- package/dist/components/hx-phi-field/hx-phi-field.d.ts.map +1 -1
- package/dist/components/hx-phi-field/hx-phi-field.styles.d.ts.map +1 -1
- package/dist/components/hx-phi-field/index.js +1 -1
- package/dist/components/hx-popover/hx-popover.d.ts +4 -2
- package/dist/components/hx-popover/hx-popover.d.ts.map +1 -1
- package/dist/components/hx-popover/hx-popover.styles.d.ts.map +1 -1
- package/dist/components/hx-popover/index.js +1 -1
- package/dist/components/hx-popup/hx-popup.d.ts +7 -2
- package/dist/components/hx-popup/hx-popup.d.ts.map +1 -1
- package/dist/components/hx-popup/hx-popup.styles.d.ts.map +1 -1
- package/dist/components/hx-popup/index.js +1 -1
- package/dist/components/hx-progress-bar/hx-progress-bar.d.ts +3 -4
- package/dist/components/hx-progress-bar/hx-progress-bar.d.ts.map +1 -1
- package/dist/components/hx-progress-bar/index.js +1 -1
- package/dist/components/hx-progress-ring/hx-progress-ring.d.ts +3 -2
- package/dist/components/hx-progress-ring/hx-progress-ring.d.ts.map +1 -1
- package/dist/components/hx-progress-ring/hx-progress-ring.styles.d.ts.map +1 -1
- package/dist/components/hx-progress-ring/index.js +1 -1
- package/dist/components/hx-prose/hx-prose.d.ts +3 -2
- package/dist/components/hx-prose/hx-prose.d.ts.map +1 -1
- package/dist/components/hx-prose/hx-prose.styles.d.ts +8 -0
- package/dist/components/hx-prose/hx-prose.styles.d.ts.map +1 -1
- package/dist/components/hx-prose/index.js +1 -1
- package/dist/components/hx-radio-group/hx-radio-group.d.ts +14 -39
- package/dist/components/hx-radio-group/hx-radio-group.d.ts.map +1 -1
- package/dist/components/hx-radio-group/hx-radio-group.styles.d.ts.map +1 -1
- package/dist/components/hx-radio-group/hx-radio.d.ts +19 -4
- package/dist/components/hx-radio-group/hx-radio.d.ts.map +1 -1
- package/dist/components/hx-radio-group/hx-radio.styles.d.ts.map +1 -1
- package/dist/components/hx-radio-group/index.d.ts +1 -0
- package/dist/components/hx-radio-group/index.d.ts.map +1 -1
- package/dist/components/hx-radio-group/index.js +1 -1
- package/dist/components/hx-rating/hx-rating.d.ts +9 -20
- package/dist/components/hx-rating/hx-rating.d.ts.map +1 -1
- package/dist/components/hx-rating/hx-rating.styles.d.ts.map +1 -1
- package/dist/components/hx-rating/index.d.ts +1 -0
- package/dist/components/hx-rating/index.d.ts.map +1 -1
- package/dist/components/hx-rating/index.js +1 -1
- package/dist/components/hx-select/hx-select.d.ts +26 -17
- 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.d.ts +1 -0
- package/dist/components/hx-select/index.d.ts.map +1 -1
- package/dist/components/hx-select/index.js +1 -1
- package/dist/components/hx-side-nav/hx-nav-item.d.ts +2 -5
- package/dist/components/hx-side-nav/hx-nav-item.d.ts.map +1 -1
- package/dist/components/hx-side-nav/hx-nav-item.styles.d.ts.map +1 -1
- package/dist/components/hx-side-nav/hx-side-nav.d.ts +3 -2
- package/dist/components/hx-side-nav/hx-side-nav.d.ts.map +1 -1
- package/dist/components/hx-side-nav/hx-side-nav.styles.d.ts.map +1 -1
- package/dist/components/hx-side-nav/index.js +1 -1
- package/dist/components/hx-skeleton/hx-skeleton.d.ts +3 -2
- package/dist/components/hx-skeleton/hx-skeleton.d.ts.map +1 -1
- package/dist/components/hx-skeleton/hx-skeleton.styles.d.ts.map +1 -1
- package/dist/components/hx-skeleton/index.js +1 -1
- package/dist/components/hx-slider/hx-slider.d.ts +18 -22
- package/dist/components/hx-slider/hx-slider.d.ts.map +1 -1
- package/dist/components/hx-slider/hx-slider.styles.d.ts.map +1 -1
- package/dist/components/hx-slider/index.d.ts +1 -0
- package/dist/components/hx-slider/index.d.ts.map +1 -1
- package/dist/components/hx-slider/index.js +1 -1
- package/dist/components/hx-spinner/hx-spinner.d.ts +2 -2
- package/dist/components/hx-spinner/hx-spinner.d.ts.map +1 -1
- package/dist/components/hx-spinner/hx-spinner.styles.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 +10 -4
- package/dist/components/hx-split-button/hx-split-button.d.ts.map +1 -1
- package/dist/components/hx-split-button/hx-split-button.styles.d.ts.map +1 -1
- package/dist/components/hx-split-button/index.js +1 -1
- package/dist/components/hx-split-panel/hx-split-panel.d.ts +12 -2
- package/dist/components/hx-split-panel/hx-split-panel.d.ts.map +1 -1
- package/dist/components/hx-split-panel/hx-split-panel.styles.d.ts.map +1 -1
- package/dist/components/hx-split-panel/index.js +1 -1
- package/dist/components/hx-stack/hx-stack.d.ts +2 -2
- package/dist/components/hx-stack/hx-stack.d.ts.map +1 -1
- package/dist/components/hx-stack/hx-stack.styles.d.ts.map +1 -1
- package/dist/components/hx-stack/index.js +1 -1
- package/dist/components/hx-stat/hx-stat.d.ts +4 -3
- 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-status-indicator/hx-status-indicator.d.ts +3 -2
- package/dist/components/hx-status-indicator/hx-status-indicator.d.ts.map +1 -1
- package/dist/components/hx-status-indicator/hx-status-indicator.styles.d.ts.map +1 -1
- package/dist/components/hx-status-indicator/index.js +1 -1
- package/dist/components/hx-steps/hx-step.d.ts +3 -2
- package/dist/components/hx-steps/hx-step.d.ts.map +1 -1
- package/dist/components/hx-steps/hx-step.styles.d.ts.map +1 -1
- package/dist/components/hx-steps/hx-steps.d.ts +11 -4
- package/dist/components/hx-steps/hx-steps.d.ts.map +1 -1
- package/dist/components/hx-steps/hx-steps.styles.d.ts.map +1 -1
- package/dist/components/hx-steps/index.js +1 -1
- package/dist/components/hx-structured-list/hx-structured-list.d.ts +3 -3
- package/dist/components/hx-structured-list/hx-structured-list.d.ts.map +1 -1
- package/dist/components/hx-structured-list/hx-structured-list.styles.d.ts.map +1 -1
- package/dist/components/hx-structured-list/index.js +1 -1
- package/dist/components/hx-style-scope/hx-style-scope.d.ts +3 -2
- package/dist/components/hx-style-scope/hx-style-scope.d.ts.map +1 -1
- package/dist/components/hx-style-scope/hx-style-scope.styles.d.ts.map +1 -1
- package/dist/components/hx-style-scope/index.js +1 -1
- package/dist/components/hx-switch/hx-switch.d.ts +25 -29
- 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.d.ts +2 -1
- package/dist/components/hx-switch/index.d.ts.map +1 -1
- package/dist/components/hx-switch/index.js +1 -1
- package/dist/components/hx-table/hx-table.d.ts +3 -2
- package/dist/components/hx-table/hx-table.d.ts.map +1 -1
- package/dist/components/hx-table/hx-table.styles.d.ts.map +1 -1
- package/dist/components/hx-table/hx-tbody.d.ts +2 -2
- package/dist/components/hx-table/hx-tbody.d.ts.map +1 -1
- package/dist/components/hx-table/hx-td.d.ts +2 -2
- package/dist/components/hx-table/hx-td.d.ts.map +1 -1
- package/dist/components/hx-table/hx-tfoot.d.ts +2 -2
- package/dist/components/hx-table/hx-tfoot.d.ts.map +1 -1
- package/dist/components/hx-table/hx-th.d.ts +2 -2
- package/dist/components/hx-table/hx-th.d.ts.map +1 -1
- package/dist/components/hx-table/hx-thead.d.ts +2 -2
- package/dist/components/hx-table/hx-thead.d.ts.map +1 -1
- package/dist/components/hx-table/hx-tr.d.ts +2 -2
- 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 +2 -2
- package/dist/components/hx-tabs/hx-tab-panel.d.ts.map +1 -1
- package/dist/components/hx-tabs/hx-tab-panel.styles.d.ts.map +1 -1
- package/dist/components/hx-tabs/hx-tab.d.ts +2 -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 +14 -2
- package/dist/components/hx-tabs/hx-tabs.d.ts.map +1 -1
- package/dist/components/hx-tabs/hx-tabs.styles.d.ts.map +1 -1
- package/dist/components/hx-tabs/index.d.ts +1 -0
- package/dist/components/hx-tabs/index.d.ts.map +1 -1
- package/dist/components/hx-tabs/index.js +1 -1
- package/dist/components/hx-tag/hx-tag.d.ts +2 -4
- package/dist/components/hx-tag/hx-tag.d.ts.map +1 -1
- package/dist/components/hx-tag/hx-tag.styles.d.ts.map +1 -1
- package/dist/components/hx-tag/index.d.ts +0 -2
- package/dist/components/hx-tag/index.d.ts.map +1 -1
- package/dist/components/hx-tag/index.js +1 -1
- package/dist/components/hx-text/hx-text.d.ts +2 -2
- package/dist/components/hx-text/hx-text.d.ts.map +1 -1
- package/dist/components/hx-text/hx-text.styles.d.ts.map +1 -1
- package/dist/components/hx-text/index.js +1 -1
- package/dist/components/hx-text-input/hx-text-input.d.ts +34 -7
- package/dist/components/hx-text-input/hx-text-input.d.ts.map +1 -1
- package/dist/components/hx-text-input/hx-text-input.styles.d.ts.map +1 -1
- package/dist/components/hx-text-input/index.d.ts +1 -0
- package/dist/components/hx-text-input/index.d.ts.map +1 -1
- package/dist/components/hx-text-input/index.js +1 -1
- package/dist/components/hx-textarea/hx-textarea.d.ts +41 -25
- package/dist/components/hx-textarea/hx-textarea.d.ts.map +1 -1
- package/dist/components/hx-textarea/hx-textarea.styles.d.ts.map +1 -1
- package/dist/components/hx-textarea/index.d.ts +1 -0
- package/dist/components/hx-textarea/index.d.ts.map +1 -1
- package/dist/components/hx-textarea/index.js +1 -1
- package/dist/components/hx-theme/hx-theme.d.ts +3 -11
- package/dist/components/hx-theme/hx-theme.d.ts.map +1 -1
- package/dist/components/hx-theme/hx-theme.styles.d.ts.map +1 -1
- package/dist/components/hx-theme/index.d.ts +0 -2
- package/dist/components/hx-theme/index.d.ts.map +1 -1
- package/dist/components/hx-theme/index.js +1 -1
- package/dist/components/hx-time-picker/hx-time-picker.d.ts +13 -31
- 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.d.ts +1 -0
- package/dist/components/hx-time-picker/index.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 +2 -2
- package/dist/components/hx-toast/hx-toast-stack.d.ts.map +1 -1
- package/dist/components/hx-toast/hx-toast.d.ts +3 -2
- package/dist/components/hx-toast/hx-toast.d.ts.map +1 -1
- package/dist/components/hx-toast/hx-toast.styles.d.ts.map +1 -1
- package/dist/components/hx-toast/index.js +1 -1
- package/dist/components/hx-toggle-button/hx-toggle-button.d.ts +10 -13
- 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.d.ts +1 -0
- package/dist/components/hx-toggle-button/index.d.ts.map +1 -1
- package/dist/components/hx-toggle-button/index.js +1 -1
- package/dist/components/hx-tooltip/hx-tooltip.d.ts +2 -2
- package/dist/components/hx-tooltip/hx-tooltip.d.ts.map +1 -1
- package/dist/components/hx-tooltip/hx-tooltip.styles.d.ts.map +1 -1
- package/dist/components/hx-tooltip/index.js +1 -1
- package/dist/components/hx-top-nav/hx-top-nav.d.ts +2 -2
- package/dist/components/hx-top-nav/hx-top-nav.d.ts.map +1 -1
- package/dist/components/hx-top-nav/hx-top-nav.styles.d.ts.map +1 -1
- package/dist/components/hx-top-nav/index.js +1 -1
- package/dist/components/hx-tree-view/hx-tree-item.d.ts +2 -4
- package/dist/components/hx-tree-view/hx-tree-item.d.ts.map +1 -1
- package/dist/components/hx-tree-view/hx-tree-item.styles.d.ts.map +1 -1
- package/dist/components/hx-tree-view/hx-tree-view.d.ts +2 -4
- package/dist/components/hx-tree-view/hx-tree-view.d.ts.map +1 -1
- package/dist/components/hx-tree-view/hx-tree-view.styles.d.ts.map +1 -1
- package/dist/components/hx-tree-view/index.d.ts +0 -4
- package/dist/components/hx-tree-view/index.d.ts.map +1 -1
- package/dist/components/hx-tree-view/index.js +1 -1
- package/dist/components/hx-visually-hidden/hx-visually-hidden.d.ts +2 -2
- package/dist/components/hx-visually-hidden/hx-visually-hidden.d.ts.map +1 -1
- package/dist/components/hx-visually-hidden/hx-visually-hidden.styles.d.ts.map +1 -1
- package/dist/components/hx-visually-hidden/index.js +1 -1
- package/dist/css/helix-all.css +3600 -790
- package/dist/css/helix-core.css +244 -50
- package/dist/css/helix-data.css +86 -7
- package/dist/css/helix-feedback.css +159 -61
- package/dist/css/helix-forms.css +2054 -105
- package/dist/css/helix-layout.css +53 -1
- package/dist/css/helix-media.css +40 -16
- package/dist/css/helix-navigation.css +209 -48
- package/dist/css/helix-overlay.css +99 -12
- package/dist/css/helix-tokens.css +30 -11
- package/dist/css/helix-utility.css +118 -9
- package/dist/css/hx-accordion.css +9 -1
- package/dist/css/hx-action-bar.css +17 -3
- package/dist/css/hx-alert.css +39 -18
- package/dist/css/hx-avatar.css +1 -1
- package/dist/css/hx-badge.css +31 -15
- package/dist/css/hx-banner.css +35 -18
- package/dist/css/hx-breadcrumb.css +27 -0
- package/dist/css/hx-button-group.css +13 -0
- package/dist/css/hx-button.css +6 -3
- package/dist/css/hx-card.css +18 -6
- package/dist/css/hx-carousel.css +40 -16
- package/dist/css/hx-checkbox-group.css +36 -4
- package/dist/css/hx-checkbox.css +74 -8
- package/dist/css/hx-clinical-status.css +46 -23
- package/dist/css/hx-code-snippet.css +25 -3
- package/dist/css/hx-color-picker.css +276 -1
- package/dist/css/hx-combobox.css +391 -1
- package/dist/css/hx-container.css +10 -0
- package/dist/css/hx-copy-button.css +31 -3
- package/dist/css/hx-counter.css +11 -1
- package/dist/css/hx-data-table.css +24 -1
- package/dist/css/hx-date-picker.css +437 -1
- package/dist/css/hx-dialog.css +23 -2
- package/dist/css/hx-divider.css +8 -0
- package/dist/css/hx-drawer.css +22 -1
- package/dist/css/hx-dropdown.css +10 -1
- package/dist/css/hx-field-label.css +18 -2
- package/dist/css/hx-field.css +39 -3
- package/dist/css/hx-file-upload.css +12 -12
- package/dist/css/hx-format-date.css +11 -0
- package/dist/css/hx-grid.css +10 -0
- package/dist/css/hx-help-text.css +25 -5
- package/dist/css/hx-icon-button.css +27 -0
- package/dist/css/hx-icon.css +8 -0
- package/dist/css/hx-image.css +11 -3
- package/dist/css/hx-link.css +23 -5
- package/dist/css/hx-list.css +10 -0
- package/dist/css/hx-menu.css +10 -2
- package/dist/css/hx-meter.css +22 -9
- package/dist/css/hx-nav.css +27 -12
- package/dist/css/hx-number-input.css +78 -0
- package/dist/css/hx-overflow-menu.css +41 -10
- package/dist/css/hx-pagination.css +13 -13
- package/dist/css/hx-patient-banner.css +30 -10
- package/dist/css/hx-phi-field.css +5 -2
- package/dist/css/hx-popover.css +16 -4
- package/dist/css/hx-popup.css +12 -0
- package/dist/css/hx-progress-bar.css +1 -1
- package/dist/css/hx-progress-ring.css +23 -1
- package/dist/css/hx-radio-group.css +35 -3
- package/dist/css/hx-rating.css +45 -4
- package/dist/css/hx-select.css +89 -7
- package/dist/css/hx-side-nav.css +26 -0
- package/dist/css/hx-skeleton.css +12 -0
- package/dist/css/hx-slider.css +16 -11
- package/dist/css/hx-spinner.css +12 -0
- package/dist/css/hx-split-button.css +37 -2
- package/dist/css/hx-split-panel.css +14 -0
- package/dist/css/hx-stack.css +10 -0
- package/dist/css/hx-stat.css +5 -5
- package/dist/css/hx-status-indicator.css +15 -2
- package/dist/css/hx-steps.css +12 -0
- package/dist/css/hx-structured-list.css +18 -2
- package/dist/css/hx-style-scope.css +11 -0
- package/dist/css/hx-switch.css +66 -4
- package/dist/css/hx-table.css +9 -1
- package/dist/css/hx-tabs.css +15 -3
- package/dist/css/hx-tag.css +24 -12
- package/dist/css/hx-text-input.css +71 -9
- package/dist/css/hx-text.css +38 -5
- package/dist/css/hx-textarea.css +71 -15
- package/dist/css/hx-theme.css +11 -0
- package/dist/css/hx-time-picker.css +224 -1
- package/dist/css/hx-toast.css +19 -7
- package/dist/css/hx-toggle-button.css +41 -4
- package/dist/css/hx-tooltip.css +16 -4
- package/dist/css/hx-top-nav.css +29 -8
- package/dist/css/hx-tree-view.css +9 -0
- package/dist/css/hx-visually-hidden.css +12 -0
- package/dist/css/index.css +1 -1
- package/dist/css/manifest.json +42 -9
- package/dist/form-test-utils.d.ts +45 -0
- package/dist/form-test-utils.d.ts.map +1 -0
- package/dist/index.d.ts +28 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +189 -177
- package/dist/index.js.map +1 -1
- package/dist/mixins/FormMixin.d.ts +24 -5
- package/dist/mixins/FormMixin.d.ts.map +1 -1
- package/dist/mixins/aria-delegation.d.ts +1 -1
- package/dist/mixins/aria-delegation.d.ts.map +1 -1
- package/dist/mixins/index.d.ts +3 -1
- package/dist/mixins/index.d.ts.map +1 -1
- package/dist/shared/{FormMixin-Bjvw20G5.js → FormMixin-B8PXk5RQ.js} +31 -14
- package/dist/shared/FormMixin-B8PXk5RQ.js.map +1 -0
- package/dist/shared/{aria-delegation-CBP9eQ0M.js → aria-delegation-Doq6RRUy.js} +6 -6
- package/dist/shared/aria-delegation-Doq6RRUy.js.map +1 -0
- package/dist/shared/{helix-element-CZvaIEQP.js → helix-element-BNEYeiys.js} +30 -27
- package/dist/shared/helix-element-BNEYeiys.js.map +1 -0
- package/dist/shared/{hx-accordion-CpfO0YQo.js → hx-accordion-Wt52OOZD.js} +127 -80
- package/dist/shared/hx-accordion-Wt52OOZD.js.map +1 -0
- package/dist/shared/{hx-action-bar-CNLYufVd.js → hx-action-bar-BKMADbHj.js} +89 -85
- package/dist/shared/hx-action-bar-BKMADbHj.js.map +1 -0
- package/dist/shared/{hx-alert-CHOjTBds.js → hx-alert-D7n94HwI.js} +47 -26
- package/dist/shared/hx-alert-D7n94HwI.js.map +1 -0
- package/dist/shared/{hx-avatar-an-WsuLl.js → hx-avatar-iLYzu8MJ.js} +10 -10
- package/dist/shared/hx-avatar-iLYzu8MJ.js.map +1 -0
- package/dist/shared/{hx-badge-RPzd-t5l.js → hx-badge-CVCmMPyW.js} +43 -27
- package/dist/shared/hx-badge-CVCmMPyW.js.map +1 -0
- package/dist/shared/{hx-banner-B-WEDiq7.js → hx-banner-C_He7Tr4.js} +60 -43
- package/dist/shared/hx-banner-C_He7Tr4.js.map +1 -0
- package/dist/shared/{hx-breadcrumb-item-jLAKK038.js → hx-breadcrumb-item-CldCwD1d.js} +123 -83
- package/dist/shared/hx-breadcrumb-item-CldCwD1d.js.map +1 -0
- package/dist/shared/{hx-button-DoN8jjQT.js → hx-button-Ddl-T6T-.js} +117 -92
- package/dist/shared/hx-button-Ddl-T6T-.js.map +1 -0
- package/dist/shared/{hx-button-group-BXlMQTt_.js → hx-button-group-BJOGWoMa.js} +33 -21
- package/dist/shared/hx-button-group-BJOGWoMa.js.map +1 -0
- package/dist/shared/{hx-card-BgXZXDuc.js → hx-card-ycveujjL.js} +64 -38
- package/dist/shared/hx-card-ycveujjL.js.map +1 -0
- package/dist/shared/{hx-carousel-item-Dwt9Pphz.js → hx-carousel-item-D_dCv61-.js} +76 -41
- package/dist/shared/hx-carousel-item-D_dCv61-.js.map +1 -0
- package/dist/shared/{hx-checkbox-C82GjRXe.js → hx-checkbox-DkkoWoye.js} +163 -80
- package/dist/shared/hx-checkbox-DkkoWoye.js.map +1 -0
- package/dist/shared/{hx-checkbox-group-DThZeN5d.js → hx-checkbox-group-C3poJ-Zw.js} +105 -79
- package/dist/shared/hx-checkbox-group-C3poJ-Zw.js.map +1 -0
- package/dist/shared/{hx-clinical-status-BjtT5c0M.js → hx-clinical-status-BS5lcddT.js} +60 -38
- package/dist/shared/hx-clinical-status-BS5lcddT.js.map +1 -0
- package/dist/shared/{hx-code-snippet-DcVENSuC.js → hx-code-snippet-B7wUKzyb.js} +32 -11
- package/dist/shared/hx-code-snippet-B7wUKzyb.js.map +1 -0
- package/dist/shared/{hx-color-picker-C6EIuS9t.js → hx-color-picker-DBaKTVLr.js} +380 -119
- package/dist/shared/hx-color-picker-DBaKTVLr.js.map +1 -0
- package/dist/shared/hx-combobox-BmgYT7Ar.js +929 -0
- package/dist/shared/hx-combobox-BmgYT7Ar.js.map +1 -0
- package/dist/shared/{hx-container-BwWbMPTH.js → hx-container-DVI7sxfX.js} +25 -15
- package/dist/shared/hx-container-DVI7sxfX.js.map +1 -0
- package/dist/shared/{hx-copy-button-BoM0WsMd.js → hx-copy-button-8deNUdwP.js} +68 -40
- package/dist/shared/hx-copy-button-8deNUdwP.js.map +1 -0
- package/dist/shared/{hx-counter-B5NgKlw4.js → hx-counter-CKfl_g8K.js} +32 -22
- package/dist/shared/hx-counter-CKfl_g8K.js.map +1 -0
- package/dist/shared/{hx-data-table-D5Ne-goy.js → hx-data-table-B6h0RPn0.js} +203 -132
- package/dist/shared/hx-data-table-B6h0RPn0.js.map +1 -0
- package/dist/shared/hx-date-picker-Dq2Nb68_.js +1077 -0
- package/dist/shared/hx-date-picker-Dq2Nb68_.js.map +1 -0
- package/dist/shared/{hx-dialog-D4ubstxx.js → hx-dialog-CvIlY0Tc.js} +85 -52
- package/dist/shared/hx-dialog-CvIlY0Tc.js.map +1 -0
- package/dist/shared/{hx-divider-BBtOLHRP.js → hx-divider-DwpOrzMW.js} +23 -15
- package/dist/shared/hx-divider-DwpOrzMW.js.map +1 -0
- package/dist/shared/{hx-drawer--WDLuWtS.js → hx-drawer-Cx2ZJhBe.js} +101 -66
- package/dist/shared/hx-drawer-Cx2ZJhBe.js.map +1 -0
- package/dist/shared/{hx-dropdown-n5-XSmiV.js → hx-dropdown-BjDrPUq5.js} +55 -46
- package/dist/shared/hx-dropdown-BjDrPUq5.js.map +1 -0
- package/dist/shared/{hx-field-CwT9tki1.js → hx-field-Dp3qQMut.js} +61 -25
- package/dist/shared/hx-field-Dp3qQMut.js.map +1 -0
- package/dist/shared/{hx-field-label-CcOK9VU3.js → hx-field-label-BC8QViXv.js} +41 -25
- package/dist/shared/hx-field-label-BC8QViXv.js.map +1 -0
- package/dist/shared/{hx-file-upload-Di_vpQaG.js → hx-file-upload-B6Yl1u0i.js} +110 -102
- package/dist/shared/hx-file-upload-B6Yl1u0i.js.map +1 -0
- package/dist/shared/{hx-form-BM6PHsw3.js → hx-form-ButQFt9A.js} +12 -11
- package/dist/shared/hx-form-ButQFt9A.js.map +1 -0
- package/dist/shared/{hx-format-date-B7L9odbA.js → hx-format-date-CKnlQOmV.js} +20 -9
- package/dist/shared/hx-format-date-CKnlQOmV.js.map +1 -0
- package/dist/shared/{hx-grid-BIAR5h9m.js → hx-grid-CXZf3jeK.js} +28 -18
- package/dist/shared/hx-grid-CXZf3jeK.js.map +1 -0
- package/dist/shared/{hx-help-text-Bmb80bP4.js → hx-help-text-D7eytSim.js} +45 -25
- package/dist/shared/hx-help-text-D7eytSim.js.map +1 -0
- package/dist/shared/{hx-icon-BKHs3OLu.js → hx-icon-CcyDPDYY.js} +104 -62
- package/dist/shared/hx-icon-CcyDPDYY.js.map +1 -0
- package/dist/shared/{hx-icon-button-CJuy9xbw.js → hx-icon-button-BHneqPCU.js} +58 -42
- package/dist/shared/hx-icon-button-BHneqPCU.js.map +1 -0
- package/dist/shared/{hx-image-ztiXumZB.js → hx-image-2gt14zZd.js} +34 -26
- package/dist/shared/hx-image-2gt14zZd.js.map +1 -0
- package/dist/shared/{hx-link-CN7AvGOW.js → hx-link-BESrWK8M.js} +51 -33
- package/dist/shared/hx-link-BESrWK8M.js.map +1 -0
- package/dist/shared/{hx-list-Dnei26t4.js → hx-list-_9qVv02L.js} +32 -22
- package/dist/shared/hx-list-_9qVv02L.js.map +1 -0
- package/dist/shared/{hx-menu-divider-DRT8yHRZ.js → hx-menu-divider-Ck-9Os1t.js} +103 -60
- package/dist/shared/hx-menu-divider-Ck-9Os1t.js.map +1 -0
- package/dist/shared/{hx-meter-BcVC9yrt.js → hx-meter-TbROk-dw.js} +57 -43
- package/dist/shared/hx-meter-TbROk-dw.js.map +1 -0
- package/dist/shared/{hx-nav-l0Rp7WPW.js → hx-nav-BcYDmjf7.js} +71 -56
- package/dist/shared/hx-nav-BcYDmjf7.js.map +1 -0
- package/dist/shared/{hx-nav-item-CJN4VDrf.js → hx-nav-item-pqPasRUm.js} +67 -23
- package/dist/shared/hx-nav-item-pqPasRUm.js.map +1 -0
- package/dist/shared/{hx-number-input-0Waw7Z7u.js → hx-number-input-mOIZ3-46.js} +169 -96
- package/dist/shared/hx-number-input-mOIZ3-46.js.map +1 -0
- package/dist/shared/{hx-overflow-menu-DElwFSCd.js → hx-overflow-menu-Dprb9lnT.js} +70 -38
- package/dist/shared/hx-overflow-menu-Dprb9lnT.js.map +1 -0
- package/dist/shared/{hx-pagination-BNtx-LG6.js → hx-pagination-AguTQjYC.js} +35 -35
- package/dist/shared/hx-pagination-AguTQjYC.js.map +1 -0
- package/dist/shared/{hx-patient-banner-BKiN7nIE.js → hx-patient-banner-uE6gqLpT.js} +67 -47
- package/dist/shared/hx-patient-banner-uE6gqLpT.js.map +1 -0
- package/dist/shared/{hx-phi-field-DD1qcBSO.js → hx-phi-field-BC_XowhC.js} +138 -56
- package/dist/shared/hx-phi-field-BC_XowhC.js.map +1 -0
- package/dist/shared/{hx-popover-CydNuVkT.js → hx-popover-B2_203ct.js} +44 -30
- package/dist/shared/hx-popover-B2_203ct.js.map +1 -0
- package/dist/shared/{hx-popup-DbzezTOd.js → hx-popup-DZXpsJ1R.js} +89 -64
- package/dist/shared/hx-popup-DZXpsJ1R.js.map +1 -0
- package/dist/shared/{hx-progress-bar-Cm0VihTN.js → hx-progress-bar-KjEkEJLy.js} +21 -20
- package/dist/shared/hx-progress-bar-KjEkEJLy.js.map +1 -0
- package/dist/shared/{hx-progress-ring-Cs0WgWDJ.js → hx-progress-ring-3zMwvrwD.js} +53 -31
- package/dist/shared/hx-progress-ring-3zMwvrwD.js.map +1 -0
- package/dist/shared/{hx-prose-Ml_L2zje.js → hx-prose-BCtK7YL6.js} +48 -15
- package/dist/shared/{hx-prose-Ml_L2zje.js.map → hx-prose-BCtK7YL6.js.map} +1 -1
- package/dist/shared/{hx-radio-f8c5ggHG.js → hx-radio-BBC5qZgE.js} +202 -123
- package/dist/shared/hx-radio-BBC5qZgE.js.map +1 -0
- package/dist/shared/{hx-rating-qRJZXskm.js → hx-rating-C3E3ENJb.js} +92 -69
- package/dist/shared/hx-rating-C3E3ENJb.js.map +1 -0
- package/dist/shared/{hx-select-CgcgsHU5.js → hx-select-CixTo7jp.js} +206 -135
- package/dist/shared/hx-select-CixTo7jp.js.map +1 -0
- package/dist/shared/{hx-skeleton-tiYvKO-t.js → hx-skeleton-LxkI0pxr.js} +39 -27
- package/dist/shared/hx-skeleton-LxkI0pxr.js.map +1 -0
- package/dist/shared/{hx-slider-BvXtvxmN.js → hx-slider-DFHuzF3N.js} +79 -91
- package/dist/shared/hx-slider-DFHuzF3N.js.map +1 -0
- package/dist/shared/{hx-spinner-D6nzuGmj.js → hx-spinner-BKjuCdZB.js} +32 -20
- package/dist/shared/hx-spinner-BKjuCdZB.js.map +1 -0
- package/dist/shared/{hx-split-button-CPndTJlC.js → hx-split-button-CGcJMmCG.js} +59 -22
- package/dist/shared/hx-split-button-CGcJMmCG.js.map +1 -0
- package/dist/shared/{hx-split-panel-Dx72NaET.js → hx-split-panel-C-1R10Mc.js} +71 -47
- package/dist/shared/hx-split-panel-C-1R10Mc.js.map +1 -0
- package/dist/shared/{hx-stack-B76_1O6g.js → hx-stack-DGfcOfWJ.js} +21 -11
- package/dist/shared/hx-stack-DGfcOfWJ.js.map +1 -0
- package/dist/shared/{hx-stat-DKlyBL_K.js → hx-stat-BTpykQAt.js} +14 -14
- package/dist/shared/hx-stat-BTpykQAt.js.map +1 -0
- package/dist/shared/{hx-status-indicator-ClWpK6zz.js → hx-status-indicator-X2QEWNFt.js} +36 -23
- package/dist/shared/hx-status-indicator-X2QEWNFt.js.map +1 -0
- package/dist/shared/{hx-step-C2Jk4mHa.js → hx-step-CRNQlmSo.js} +83 -32
- package/dist/shared/hx-step-CRNQlmSo.js.map +1 -0
- package/dist/shared/{hx-structured-list-DKlrv7kS.js → hx-structured-list-CqNbaEXg.js} +32 -16
- package/dist/shared/hx-structured-list-CqNbaEXg.js.map +1 -0
- package/dist/shared/hx-style-scope-TDnR8H4O.js +251 -0
- package/dist/shared/hx-style-scope-TDnR8H4O.js.map +1 -0
- package/dist/shared/{hx-switch-BzMN37PV.js → hx-switch-DqOD9JR7.js} +122 -81
- package/dist/shared/hx-switch-DqOD9JR7.js.map +1 -0
- package/dist/shared/{hx-tab-panel-J58zOSjq.js → hx-tab-panel-BIzKfW5i.js} +156 -102
- package/dist/shared/hx-tab-panel-BIzKfW5i.js.map +1 -0
- package/dist/shared/{hx-tag-F0ZcYj9b.js → hx-tag-CgnrNnte.js} +30 -18
- package/dist/shared/hx-tag-CgnrNnte.js.map +1 -0
- package/dist/shared/{hx-td-CNCvzBwY.js → hx-td-Bra35cH4.js} +55 -47
- package/dist/shared/hx-td-Bra35cH4.js.map +1 -0
- package/dist/shared/{hx-text-DcWBqZwx.js → hx-text-DMC2CPlL.js} +74 -41
- package/dist/shared/hx-text-DMC2CPlL.js.map +1 -0
- package/dist/shared/{hx-text-input-Zuodg9s_.js → hx-text-input--q0GH78x.js} +123 -62
- package/dist/shared/hx-text-input--q0GH78x.js.map +1 -0
- package/dist/shared/{hx-textarea-BfSJJtA1.js → hx-textarea-CK621vSL.js} +124 -89
- package/dist/shared/hx-textarea-CK621vSL.js.map +1 -0
- package/dist/shared/{hx-theme-pc1V7dyL.js → hx-theme-DfEy-SJA.js} +72 -64
- package/dist/shared/hx-theme-DfEy-SJA.js.map +1 -0
- package/dist/shared/{hx-time-picker-CZvmihHD.js → hx-time-picker-tPUfgElQ.js} +300 -82
- package/dist/shared/hx-time-picker-tPUfgElQ.js.map +1 -0
- package/dist/shared/{hx-toggle-button-BZUQUULm.js → hx-toggle-button-L-uBJr-a.js} +72 -42
- package/dist/shared/hx-toggle-button-L-uBJr-a.js.map +1 -0
- package/dist/shared/{hx-tooltip-Ny4i1Idj.js → hx-tooltip-B_zfKvwc.js} +44 -31
- package/dist/shared/hx-tooltip-B_zfKvwc.js.map +1 -0
- package/dist/shared/{hx-top-nav-CC4FW2Hp.js → hx-top-nav-CATbRvIv.js} +53 -30
- package/dist/shared/hx-top-nav-CATbRvIv.js.map +1 -0
- package/dist/shared/{hx-tree-item-CPQ9dJiK.js → hx-tree-item-A45WCiBu.js} +37 -9
- package/dist/shared/hx-tree-item-A45WCiBu.js.map +1 -0
- package/dist/shared/hx-visually-hidden-0bZKOWgT.js +66 -0
- package/dist/shared/hx-visually-hidden-0bZKOWgT.js.map +1 -0
- package/dist/shared/id-counter-DuX8vsui.js +11 -0
- package/dist/shared/{id-counter-PTgF-zcG.js.map → id-counter-DuX8vsui.js.map} +1 -1
- package/dist/shared/{toast-factory-CEMNOt1T.js → toast-factory-BPPnG3mM.js} +58 -46
- package/dist/shared/toast-factory-BPPnG3mM.js.map +1 -0
- package/dist/utilities/injectLightStyles.d.ts.map +1 -1
- package/dist/utilities/sanitizeCss.d.ts +43 -0
- package/dist/utilities/sanitizeCss.d.ts.map +1 -0
- package/package.json +29 -13
- package/dist/shared/FormMixin-Bjvw20G5.js.map +0 -1
- package/dist/shared/aria-delegation-CBP9eQ0M.js.map +0 -1
- package/dist/shared/document-token-adoption-DuYNKd4k.js +0 -21
- package/dist/shared/document-token-adoption-DuYNKd4k.js.map +0 -1
- package/dist/shared/helix-element-CZvaIEQP.js.map +0 -1
- package/dist/shared/hx-accordion-CpfO0YQo.js.map +0 -1
- package/dist/shared/hx-action-bar-CNLYufVd.js.map +0 -1
- package/dist/shared/hx-alert-CHOjTBds.js.map +0 -1
- package/dist/shared/hx-avatar-an-WsuLl.js.map +0 -1
- package/dist/shared/hx-badge-RPzd-t5l.js.map +0 -1
- package/dist/shared/hx-banner-B-WEDiq7.js.map +0 -1
- package/dist/shared/hx-breadcrumb-item-jLAKK038.js.map +0 -1
- package/dist/shared/hx-button-DoN8jjQT.js.map +0 -1
- package/dist/shared/hx-button-group-BXlMQTt_.js.map +0 -1
- package/dist/shared/hx-card-BgXZXDuc.js.map +0 -1
- package/dist/shared/hx-carousel-item-Dwt9Pphz.js.map +0 -1
- package/dist/shared/hx-checkbox-C82GjRXe.js.map +0 -1
- package/dist/shared/hx-checkbox-group-DThZeN5d.js.map +0 -1
- package/dist/shared/hx-clinical-status-BjtT5c0M.js.map +0 -1
- package/dist/shared/hx-code-snippet-DcVENSuC.js.map +0 -1
- package/dist/shared/hx-color-picker-C6EIuS9t.js.map +0 -1
- package/dist/shared/hx-combobox-BJ4lQocO.js +0 -544
- package/dist/shared/hx-combobox-BJ4lQocO.js.map +0 -1
- package/dist/shared/hx-container-BwWbMPTH.js.map +0 -1
- package/dist/shared/hx-copy-button-BoM0WsMd.js.map +0 -1
- package/dist/shared/hx-counter-B5NgKlw4.js.map +0 -1
- package/dist/shared/hx-data-table-D5Ne-goy.js.map +0 -1
- package/dist/shared/hx-date-picker-Cd3I3WkX.js +0 -627
- package/dist/shared/hx-date-picker-Cd3I3WkX.js.map +0 -1
- package/dist/shared/hx-dialog-D4ubstxx.js.map +0 -1
- package/dist/shared/hx-divider-BBtOLHRP.js.map +0 -1
- package/dist/shared/hx-drawer--WDLuWtS.js.map +0 -1
- package/dist/shared/hx-dropdown-n5-XSmiV.js.map +0 -1
- package/dist/shared/hx-field-CwT9tki1.js.map +0 -1
- package/dist/shared/hx-field-label-CcOK9VU3.js.map +0 -1
- package/dist/shared/hx-file-upload-Di_vpQaG.js.map +0 -1
- package/dist/shared/hx-form-BM6PHsw3.js.map +0 -1
- package/dist/shared/hx-format-date-B7L9odbA.js.map +0 -1
- package/dist/shared/hx-grid-BIAR5h9m.js.map +0 -1
- package/dist/shared/hx-help-text-Bmb80bP4.js.map +0 -1
- package/dist/shared/hx-icon-BKHs3OLu.js.map +0 -1
- package/dist/shared/hx-icon-button-CJuy9xbw.js.map +0 -1
- package/dist/shared/hx-image-ztiXumZB.js.map +0 -1
- package/dist/shared/hx-link-CN7AvGOW.js.map +0 -1
- package/dist/shared/hx-list-Dnei26t4.js.map +0 -1
- package/dist/shared/hx-menu-divider-DRT8yHRZ.js.map +0 -1
- package/dist/shared/hx-meter-BcVC9yrt.js.map +0 -1
- package/dist/shared/hx-nav-item-CJN4VDrf.js.map +0 -1
- package/dist/shared/hx-nav-l0Rp7WPW.js.map +0 -1
- package/dist/shared/hx-number-input-0Waw7Z7u.js.map +0 -1
- package/dist/shared/hx-overflow-menu-DElwFSCd.js.map +0 -1
- package/dist/shared/hx-pagination-BNtx-LG6.js.map +0 -1
- package/dist/shared/hx-patient-banner-BKiN7nIE.js.map +0 -1
- package/dist/shared/hx-phi-field-DD1qcBSO.js.map +0 -1
- package/dist/shared/hx-popover-CydNuVkT.js.map +0 -1
- package/dist/shared/hx-popup-DbzezTOd.js.map +0 -1
- package/dist/shared/hx-progress-bar-Cm0VihTN.js.map +0 -1
- package/dist/shared/hx-progress-ring-Cs0WgWDJ.js.map +0 -1
- package/dist/shared/hx-radio-f8c5ggHG.js.map +0 -1
- package/dist/shared/hx-rating-qRJZXskm.js.map +0 -1
- package/dist/shared/hx-select-CgcgsHU5.js.map +0 -1
- package/dist/shared/hx-skeleton-tiYvKO-t.js.map +0 -1
- package/dist/shared/hx-slider-BvXtvxmN.js.map +0 -1
- package/dist/shared/hx-spinner-D6nzuGmj.js.map +0 -1
- package/dist/shared/hx-split-button-CPndTJlC.js.map +0 -1
- package/dist/shared/hx-split-panel-Dx72NaET.js.map +0 -1
- package/dist/shared/hx-stack-B76_1O6g.js.map +0 -1
- package/dist/shared/hx-stat-DKlyBL_K.js.map +0 -1
- package/dist/shared/hx-status-indicator-ClWpK6zz.js.map +0 -1
- package/dist/shared/hx-step-C2Jk4mHa.js.map +0 -1
- package/dist/shared/hx-structured-list-DKlrv7kS.js.map +0 -1
- package/dist/shared/hx-style-scope-CsQ2Phf_.js +0 -126
- package/dist/shared/hx-style-scope-CsQ2Phf_.js.map +0 -1
- package/dist/shared/hx-switch-BzMN37PV.js.map +0 -1
- package/dist/shared/hx-tab-panel-J58zOSjq.js.map +0 -1
- package/dist/shared/hx-tag-F0ZcYj9b.js.map +0 -1
- package/dist/shared/hx-td-CNCvzBwY.js.map +0 -1
- package/dist/shared/hx-text-DcWBqZwx.js.map +0 -1
- package/dist/shared/hx-text-input-Zuodg9s_.js.map +0 -1
- package/dist/shared/hx-textarea-BfSJJtA1.js.map +0 -1
- package/dist/shared/hx-theme-pc1V7dyL.js.map +0 -1
- package/dist/shared/hx-time-picker-CZvmihHD.js.map +0 -1
- package/dist/shared/hx-toggle-button-BZUQUULm.js.map +0 -1
- package/dist/shared/hx-tooltip-Ny4i1Idj.js.map +0 -1
- package/dist/shared/hx-top-nav-CC4FW2Hp.js.map +0 -1
- package/dist/shared/hx-tree-item-CPQ9dJiK.js.map +0 -1
- package/dist/shared/hx-visually-hidden-vKX8QjeX.js +0 -54
- package/dist/shared/hx-visually-hidden-vKX8QjeX.js.map +0 -1
- package/dist/shared/id-counter-PTgF-zcG.js +0 -15
- package/dist/shared/toast-factory-CEMNOt1T.js.map +0 -1
- package/dist/tools/cem-a11y-analyzer/analyzers/aria-analyzer.d.ts +0 -12
- package/dist/tools/cem-a11y-analyzer/analyzers/aria-analyzer.d.ts.map +0 -1
- package/dist/tools/cem-a11y-analyzer/analyzers/focus-analyzer.d.ts +0 -13
- package/dist/tools/cem-a11y-analyzer/analyzers/focus-analyzer.d.ts.map +0 -1
- package/dist/tools/cem-a11y-analyzer/analyzers/form-analyzer.d.ts +0 -13
- package/dist/tools/cem-a11y-analyzer/analyzers/form-analyzer.d.ts.map +0 -1
- package/dist/tools/cem-a11y-analyzer/analyzers/keyboard-analyzer.d.ts +0 -12
- package/dist/tools/cem-a11y-analyzer/analyzers/keyboard-analyzer.d.ts.map +0 -1
- package/dist/tools/cem-a11y-analyzer/analyzers/label-analyzer.d.ts +0 -13
- package/dist/tools/cem-a11y-analyzer/analyzers/label-analyzer.d.ts.map +0 -1
- package/dist/tools/cem-a11y-analyzer/analyzers/motion-analyzer.d.ts +0 -12
- package/dist/tools/cem-a11y-analyzer/analyzers/motion-analyzer.d.ts.map +0 -1
- package/dist/tools/cem-a11y-analyzer/index.d.ts +0 -14
- package/dist/tools/cem-a11y-analyzer/index.d.ts.map +0 -1
- package/dist/tools/cem-a11y-analyzer/reporter.d.ts +0 -6
- package/dist/tools/cem-a11y-analyzer/reporter.d.ts.map +0 -1
- package/dist/tools/cem-a11y-analyzer/scorer.d.ts +0 -22
- package/dist/tools/cem-a11y-analyzer/scorer.d.ts.map +0 -1
- package/dist/tools/cem-a11y-analyzer/types.d.ts +0 -171
- package/dist/tools/cem-a11y-analyzer/types.d.ts.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/base/styles.ts","../src/controllers/helix-audit-controller.ts"],"sourcesContent":["import { type CSSResultOrNative } from 'lit';\n\n/**\n * Merges token CSS custom properties into component styles.\n *\n * Accepts either a single style or an array for each argument and returns\n * a flat merged array suitable for use as `static override styles`.\n *\n * @deprecated Use document-level adopted stylesheets instead. Import\n * `'@helixui/library'` (which auto-adopts tokens) or call\n * `ensureDocumentTokens()` directly. Per-component token merging is no\n * longer necessary because tokens are now adopted at the document level\n * and cascade into Shadow DOM via CSS inheritance.\n *\n * @param componentStyles - The component's own styles\n * @param tokenStyles - Additional token CSS to merge in\n * @returns Merged styles array\n * @public\n *\n * @example\n * ```ts\n * // Preferred: tokens are auto-adopted at the document level\n * import '@helixui/library';\n *\n * // Legacy usage (deprecated):\n * static override styles = mergeTokenStyles(myStyles, extraStyles);\n * ```\n */\nexport function mergeTokenStyles(\n componentStyles: CSSResultOrNative | CSSResultOrNative[],\n tokenStyles: CSSResultOrNative | CSSResultOrNative[],\n): CSSResultOrNative[] {\n const base = Array.isArray(componentStyles) ? componentStyles : [componentStyles];\n const tokens = Array.isArray(tokenStyles) ? tokenStyles : [tokenStyles];\n return [...base, ...tokens];\n}\n","/**\n * @module HelixAuditController\n *\n * A Lit ReactiveController that captures `hx-*` CustomEvents on the host\n * element and re-dispatches them as enriched `hx-audit` events that bubble to\n * the document level. Designed for HIPAA audit-trail infrastructure in\n * enterprise healthcare deployments.\n *\n * @example\n * ```ts\n * import { HelixAuditController } from '../controllers/helix-audit-controller.js';\n *\n * class MyElement extends LitElement {\n * private _audit = new HelixAuditController(this, {\n * userId: 'user-123',\n * patientContextId: 'patient-456',\n * encounterId: 'encounter-789',\n * });\n * }\n * ```\n *\n * At the application boundary, wire a single document-level listener to forward\n * events to your HIPAA audit log infrastructure:\n *\n * ```ts\n * document.addEventListener('hx-audit', (e) => {\n * const detail = (e as CustomEvent<AuditEventDetail>).detail;\n * auditLogService.record(detail);\n * });\n * ```\n */\nimport type { ReactiveController, ReactiveControllerHost } from 'lit';\n\n/**\n * The structured payload carried in every `hx-audit` CustomEvent.\n */\nexport interface AuditEventDetail {\n /** Stable correlation ID generated once per controller instance. */\n sessionId: string;\n /** ISO-8601 timestamp at the moment of capture. */\n timestamp: string;\n /** Lowercase tag name of the host element (e.g. `\"hx-button\"`). */\n tagName: string;\n /** The original `hx-*` event type that triggered this audit record. */\n sourceEventType: string;\n /** The original event's `detail` payload, preserved verbatim. */\n sourceEventDetail: unknown;\n /** Optional user identifier for the authenticated session. */\n userId?: string;\n /** Optional patient context identifier for clinical audit trails. */\n patientContextId?: string;\n /** Optional encounter/visit identifier for clinical audit trails. */\n encounterId?: string;\n /** Additional caller-supplied key/value metadata. */\n [key: string]: unknown;\n}\n\n/**\n * Options accepted by `HelixAuditController` at construction time and via\n * `updateMetadata()`.\n */\nexport interface AuditControllerOptions {\n /** Authenticated user identifier. */\n userId?: string;\n /** Patient context identifier. */\n patientContextId?: string;\n /** Clinical encounter / visit identifier. */\n encounterId?: string;\n /** Arbitrary additional metadata to merge into every audit record. */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * All `hx-*` event types defined in the HELiX component library that should\n * be captured for audit. When a new event is added to the library, adding it\n * here ensures automatic audit coverage with zero other changes required.\n *\n * The DOM event model does not support wildcard subscriptions, so we maintain\n * this explicit list and attach/detach one listener per type — a single bound\n * handler object is reused across all registrations for memory efficiency.\n */\nconst HX_EVENT_TYPES = [\n 'hx-click',\n 'hx-input',\n 'hx-change',\n 'hx-open',\n 'hx-close',\n 'hx-select',\n 'hx-submit',\n 'hx-reset',\n 'hx-sort',\n 'hx-filter',\n 'hx-page-change',\n 'hx-tab-change',\n 'hx-expand',\n 'hx-collapse',\n 'hx-copy',\n 'hx-upload',\n 'hx-remove',\n 'hx-rate',\n 'hx-toggle',\n 'hx-dismiss',\n 'hx-phi-access',\n] as const;\n\n/**\n * Generates a unique session correlation ID. Uses `crypto.randomUUID()` when\n * available and falls back to a timestamp-seeded pseudo-random string for\n * environments that do not expose the Web Crypto API (e.g. SSR, jsdom without\n * the crypto polyfill).\n */\nfunction generateSessionId(): string {\n if (typeof crypto !== 'undefined' && typeof (crypto as Crypto).randomUUID === 'function') {\n return (crypto as Crypto).randomUUID();\n }\n // Fallback: formatted as a UUID v4 lookalike so downstream parsers that\n // expect that shape don't break.\n const t = Date.now().toString(16).padStart(12, '0');\n const r1 = Math.random().toString(16).slice(2, 10).padStart(8, '0');\n const r2 = Math.random().toString(16).slice(2, 14).padStart(12, '0');\n return `${t.slice(0, 8)}-${t.slice(8)}-4${r1.slice(0, 3)}-${r2.slice(0, 4)}-${r2.slice(4)}`;\n}\n\n/**\n * Attaches to a Lit `ReactiveControllerHost` (any `LitElement`) and silently\n * captures all `hx-*` events, enriching them with session, timestamp, and\n * optional clinical metadata before re-dispatching as `hx-audit` events.\n *\n * Because all HELiX component events are dispatched with\n * `bubbles: true, composed: true`, they propagate from inside the shadow DOM\n * up to the host element — where this controller's listeners are registered —\n * and then continue bubbling to `document`, making the `hx-audit` event\n * observable anywhere in the page without requiring a global listener.\n */\nexport class HelixAuditController implements ReactiveController {\n private readonly _host: ReactiveControllerHost & EventTarget;\n private readonly _sessionId: string;\n private _options: AuditControllerOptions;\n\n /**\n * A single `EventListenerObject` reused across all event-type registrations.\n * Using the object form (rather than a bound function) avoids creating a new\n * closure per event type while still keeping `this` bound correctly.\n */\n private readonly _listener: EventListenerObject;\n\n constructor(host: ReactiveControllerHost & EventTarget, options: AuditControllerOptions = {}) {\n this._host = host;\n this._sessionId = generateSessionId();\n this._options = options;\n this._listener = { handleEvent: this._onHxEvent.bind(this) };\n this._host.addController(this);\n }\n\n /**\n * Updates the metadata attached to future audit records. Useful when the\n * authenticated user, patient context, or encounter changes after the\n * component is connected (e.g. patient context switch within a session).\n */\n updateMetadata(options: AuditControllerOptions): void {\n this._options = { ...this._options, ...options };\n }\n\n hostConnected(): void {\n for (const type of HX_EVENT_TYPES) {\n this._host.addEventListener(type, this._listener);\n }\n }\n\n hostDisconnected(): void {\n for (const type of HX_EVENT_TYPES) {\n this._host.removeEventListener(type, this._listener);\n }\n }\n\n private _onHxEvent(event: Event): void {\n // Guard: only process events whose type starts with 'hx-'.\n if (!event.type.startsWith('hx-')) return;\n // Guard: prevent recursion — never audit the audit event itself.\n if (event.type === 'hx-audit') return;\n\n const sourceDetail = event instanceof CustomEvent ? event.detail : undefined;\n\n const tagName = this._host instanceof Element ? this._host.tagName.toLowerCase() : 'unknown';\n\n const { userId, patientContextId, encounterId, metadata } = this._options;\n\n const detail: AuditEventDetail = {\n sessionId: this._sessionId,\n timestamp: new Date().toISOString(),\n tagName,\n sourceEventType: event.type,\n sourceEventDetail: sourceDetail,\n ...(userId !== undefined ? { userId } : {}),\n ...(patientContextId !== undefined ? { patientContextId } : {}),\n ...(encounterId !== undefined ? { encounterId } : {}),\n ...metadata,\n };\n\n this._host.dispatchEvent(\n new CustomEvent<AuditEventDetail>('hx-audit', {\n bubbles: true,\n composed: true,\n detail,\n }),\n );\n }\n}\n"],"names":["mergeTokenStyles","componentStyles","tokenStyles","base","tokens","HX_EVENT_TYPES","generateSessionId","r1","r2","HelixAuditController","host","options","type","event","sourceDetail","tagName","userId","patientContextId","encounterId","metadata","detail"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BO,SAASA,EACdC,GACAC,GACqB;AACrB,QAAMC,IAAO,MAAM,QAAQF,CAAe,IAAIA,IAAkB,CAACA,CAAe,GAC1EG,IAAS,MAAM,QAAQF,CAAW,IAAIA,IAAc,CAACA,CAAW;AACtE,SAAO,CAAC,GAAGC,GAAM,GAAGC,CAAM;AAC5B;AC8CA,MAAMC,IAAiB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAQA,SAASC,IAA4B;AACnC,MAAI,OAAO,SAAW,OAAe,OAAQ,OAAkB,cAAe;AAC5E,WAAQ,OAAkB,WAAA;AAI5B,QAAM,IAAI,KAAK,MAAM,SAAS,EAAE,EAAE,SAAS,IAAI,GAAG,GAC5CC,IAAK,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,MAAM,GAAG,EAAE,EAAE,SAAS,GAAG,GAAG,GAC5DC,IAAK,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,MAAM,GAAG,EAAE,EAAE,SAAS,IAAI,GAAG;AACnE,SAAO,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAKD,EAAG,MAAM,GAAG,CAAC,CAAC,IAAIC,EAAG,MAAM,GAAG,CAAC,CAAC,IAAIA,EAAG,MAAM,CAAC,CAAC;AAC3F;AAaO,MAAMC,EAAmD;AAAA,EAY9D,YAAYC,GAA4CC,IAAkC,IAAI;AAC5F,SAAK,QAAQD,GACb,KAAK,aAAaJ,EAAA,GAClB,KAAK,WAAWK,GAChB,KAAK,YAAY,EAAE,aAAa,KAAK,WAAW,KAAK,IAAI,EAAA,GACzD,KAAK,MAAM,cAAc,IAAI;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAeA,GAAuC;AACpD,SAAK,WAAW,EAAE,GAAG,KAAK,UAAU,GAAGA,EAAA;AAAA,EACzC;AAAA,EAEA,gBAAsB;AACpB,eAAWC,KAAQP;AACjB,WAAK,MAAM,iBAAiBO,GAAM,KAAK,SAAS;AAAA,EAEpD;AAAA,EAEA,mBAAyB;AACvB,eAAWA,KAAQP;AACjB,WAAK,MAAM,oBAAoBO,GAAM,KAAK,SAAS;AAAA,EAEvD;AAAA,EAEQ,WAAWC,GAAoB;AAIrC,QAFI,CAACA,EAAM,KAAK,WAAW,KAAK,KAE5BA,EAAM,SAAS,WAAY;AAE/B,UAAMC,IAAeD,aAAiB,cAAcA,EAAM,SAAS,QAE7DE,IAAU,KAAK,iBAAiB,UAAU,KAAK,MAAM,QAAQ,gBAAgB,WAE7E,EAAE,QAAAC,GAAQ,kBAAAC,GAAkB,aAAAC,GAAa,UAAAC,EAAA,IAAa,KAAK,UAE3DC,IAA2B;AAAA,MAC/B,WAAW,KAAK;AAAA,MAChB,YAAW,oBAAI,KAAA,GAAO,YAAA;AAAA,MACtB,SAAAL;AAAA,MACA,iBAAiBF,EAAM;AAAA,MACvB,mBAAmBC;AAAA,MACnB,GAAIE,MAAW,SAAY,EAAE,QAAAA,EAAA,IAAW,CAAA;AAAA,MACxC,GAAIC,MAAqB,SAAY,EAAE,kBAAAA,EAAA,IAAqB,CAAA;AAAA,MAC5D,GAAIC,MAAgB,SAAY,EAAE,aAAAA,EAAA,IAAgB,CAAA;AAAA,MAClD,GAAGC;AAAA,IAAA;AAGL,SAAK,MAAM;AAAA,MACT,IAAI,YAA8B,YAAY;AAAA,QAC5C,SAAS;AAAA,QACT,UAAU;AAAA,QACV,QAAAC;AAAA,MAAA,CACD;AAAA,IAAA;AAAA,EAEL;AACF;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/utilities/document-token-adoption.ts","../src/controllers/helix-audit-controller.ts"],"sourcesContent":["/**\n * @module document-token-adoption\n *\n * Adopts HELiX design tokens into `document.adoptedStyleSheets` exactly once,\n * so that every Shadow DOM component can reference `var(--hx-*)` tokens via\n * CSS inheritance rather than declaring them on each component's `:host`.\n *\n * This is the correct architecture for theme provider compatibility:\n * - Tokens declared at the document level provide fallback values\n * - `hx-theme` overrides tokens on its `:host`, which flow down via inheritance\n * - Components simply consume `var(--hx-*)` in their styles without redeclaring\n *\n * Inspired by @phase2/outline-adopted-stylesheets-controller.\n *\n * Limitation: tokens are adopted into the current `document` only. Components\n * rendered inside iframes or cross-document contexts will need their own\n * `ensureDocumentTokens()` call against the appropriate document.\n *\n * @example\n * ```ts\n * // Auto-registers on first import — no API call needed\n * import '../utilities/document-token-adoption.js';\n * ```\n */\nimport { lightTokenCss } from '@helixui/tokens';\n\n/** Cross-bundle marker — Symbol.for ensures all copies share the same key */\nconst MARKER = Symbol.for('hx-tokens-adopted');\n\n/**\n * Adopts the full set of HELiX design tokens into `document.adoptedStyleSheets`.\n * Safe to call multiple times — only the first invocation has any effect.\n * Uses a document-level Symbol marker to survive multiple bundled copies of the library.\n *\n * The tokens are declared on `:root` so they participate in CSS inheritance\n * and can be overridden by `hx-theme` (which declares on its `:host`).\n */\nexport function ensureDocumentTokens(): void {\n if (\n typeof document === 'undefined' ||\n typeof CSSStyleSheet === 'undefined' ||\n typeof CSSStyleSheet.prototype.replaceSync !== 'function'\n ) {\n return;\n }\n\n const doc = document as unknown as Record<symbol, unknown>;\n if (doc[MARKER]) return;\n\n try {\n const cssText = `:root {\\n${lightTokenCss}\\n}`;\n\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(cssText);\n\n document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];\n doc[MARKER] = MARKER;\n } catch (e: unknown) {\n console.warn('[HELiX] Could not adopt document-level token styles:', e);\n }\n}\n\n// Auto-execute on import so bare `import './document-token-adoption.js'` works\n// in browser components. The SSR guard inside ensureDocumentTokens() makes this\n// safe in Node/Deno/SSR environments where `document` is not defined.\n//\n// PERF: This top-level side effect intentionally runs on every per-component import.\n// Without it, components would render without design tokens until a consumer manually\n// calls ensureDocumentTokens(). This trade-off is acceptable because:\n// 1. The function is idempotent (Symbol.for marker prevents duplicate adoption)\n// 2. The CSSStyleSheet is shared across all components (~2KB overhead, not per-component)\n// 3. Tree-shakers correctly identify this file via the package.json sideEffects array\n// 4. SSR environments are guarded by the typeof document check\n//\n// To use components without auto-adoption (e.g., in a custom shadow root without\n// document-level tokens), import the component directly from its module path and\n// call ensureDocumentTokens() manually when ready.\nif (typeof document !== 'undefined') {\n ensureDocumentTokens();\n}\n","/**\n * @module HelixAuditController\n *\n * A Lit ReactiveController that captures `hx-*` CustomEvents on the host\n * element and re-dispatches them as enriched `hx-audit` events that bubble to\n * the document level. Designed for HIPAA audit-trail infrastructure in\n * enterprise healthcare deployments.\n *\n * @example\n * ```ts\n * import { HelixAuditController } from '../controllers/helix-audit-controller.js';\n *\n * class MyElement extends LitElement {\n * private _audit = new HelixAuditController(this, {\n * userId: 'user-123',\n * patientContextId: 'patient-456',\n * encounterId: 'encounter-789',\n * });\n * }\n * ```\n *\n * At the application boundary, wire a single document-level listener to forward\n * events to your HIPAA audit log infrastructure:\n *\n * ```ts\n * document.addEventListener('hx-audit', (e) => {\n * const detail = (e as CustomEvent<AuditEventDetail>).detail;\n * auditLogService.record(detail);\n * });\n * ```\n */\nimport type { ReactiveController, ReactiveControllerHost } from 'lit';\n\n/**\n * The structured payload carried in every `hx-audit` CustomEvent.\n */\nexport interface AuditEventDetail {\n /** Stable correlation ID generated once per controller instance. */\n sessionId: string;\n /** ISO-8601 timestamp at the moment of capture. */\n timestamp: string;\n /** Lowercase tag name of the host element (e.g. `\"hx-button\"`). */\n tagName: string;\n /** The original `hx-*` event type that triggered this audit record. */\n sourceEventType: string;\n /** The original event's `detail` payload, preserved verbatim. */\n sourceEventDetail: unknown;\n /** Optional user identifier for the authenticated session. */\n userId?: string;\n /** Optional patient context identifier for clinical audit trails. */\n patientContextId?: string;\n /** Optional encounter/visit identifier for clinical audit trails. */\n encounterId?: string;\n /** Additional caller-supplied key/value metadata. */\n [key: string]: unknown;\n}\n\n/**\n * Options accepted by `HelixAuditController` at construction time and via\n * `updateMetadata()`.\n */\nexport interface AuditControllerOptions {\n /** Authenticated user identifier. */\n userId?: string;\n /** Patient context identifier. */\n patientContextId?: string;\n /** Clinical encounter / visit identifier. */\n encounterId?: string;\n /** Arbitrary additional metadata to merge into every audit record. */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * All `hx-*` event types defined in the HELiX component library that should\n * be captured for audit. When a new event is added to the library, adding it\n * here ensures automatic audit coverage with zero other changes required.\n *\n * The DOM event model does not support wildcard subscriptions, so we maintain\n * this explicit list and attach/detach one listener per type — a single bound\n * handler object is reused across all registrations for memory efficiency.\n */\nconst HX_EVENT_TYPES = [\n 'hx-click',\n 'hx-input',\n 'hx-change',\n 'hx-open',\n 'hx-close',\n 'hx-select',\n 'hx-submit',\n 'hx-reset',\n 'hx-sort',\n 'hx-filter',\n 'hx-page-change',\n 'hx-tab-change',\n 'hx-expand',\n 'hx-collapse',\n 'hx-copy',\n 'hx-upload',\n 'hx-remove',\n 'hx-rate',\n 'hx-toggle',\n 'hx-dismiss',\n 'hx-phi-access',\n] as const;\n\n/**\n * Generates a unique session correlation ID. Uses `crypto.randomUUID()` when\n * available and falls back to a timestamp-seeded pseudo-random string for\n * environments that do not expose the Web Crypto API (e.g. SSR, jsdom without\n * the crypto polyfill).\n */\nfunction generateSessionId(): string {\n if (typeof crypto !== 'undefined' && typeof (crypto as Crypto).randomUUID === 'function') {\n return (crypto as Crypto).randomUUID();\n }\n // Fallback: formatted as a UUID v4 lookalike so downstream parsers that\n // expect that shape don't break.\n const t = Date.now().toString(16).padStart(12, '0');\n const r1 = Math.random().toString(16).slice(2, 10).padStart(8, '0');\n const r2 = Math.random().toString(16).slice(2, 14).padStart(12, '0');\n return `${t.slice(0, 8)}-${t.slice(8)}-4${r1.slice(0, 3)}-${r2.slice(0, 4)}-${r2.slice(4)}`;\n}\n\n/**\n * Attaches to a Lit `ReactiveControllerHost` (any `LitElement`) and silently\n * captures all `hx-*` events, enriching them with session, timestamp, and\n * optional clinical metadata before re-dispatching as `hx-audit` events.\n *\n * Because all HELiX component events are dispatched with\n * `bubbles: true, composed: true`, they propagate from inside the shadow DOM\n * up to the host element — where this controller's listeners are registered —\n * and then continue bubbling to `document`, making the `hx-audit` event\n * observable anywhere in the page without requiring a global listener.\n */\nexport class HelixAuditController implements ReactiveController {\n private readonly _host: ReactiveControllerHost & EventTarget;\n private readonly _sessionId: string;\n private _options: AuditControllerOptions;\n\n /**\n * A single `EventListenerObject` reused across all event-type registrations.\n * Using the object form (rather than a bound function) avoids creating a new\n * closure per event type while still keeping `this` bound correctly.\n */\n private readonly _listener: EventListenerObject;\n\n constructor(host: ReactiveControllerHost & EventTarget, options: AuditControllerOptions = {}) {\n this._host = host;\n this._sessionId = generateSessionId();\n this._options = options;\n this._listener = { handleEvent: this._onHxEvent.bind(this) };\n this._host.addController(this);\n }\n\n /**\n * Updates the metadata attached to future audit records. Useful when the\n * authenticated user, patient context, or encounter changes after the\n * component is connected (e.g. patient context switch within a session).\n */\n updateMetadata(options: AuditControllerOptions): void {\n this._options = { ...this._options, ...options };\n }\n\n hostConnected(): void {\n for (const type of HX_EVENT_TYPES) {\n this._host.addEventListener(type, this._listener);\n }\n }\n\n hostDisconnected(): void {\n for (const type of HX_EVENT_TYPES) {\n this._host.removeEventListener(type, this._listener);\n }\n }\n\n private _onHxEvent(event: Event): void {\n // Guard: only process events whose type starts with 'hx-'.\n if (!event.type.startsWith('hx-')) return;\n // Guard: prevent recursion — never audit the audit event itself.\n if (event.type === 'hx-audit') return;\n\n const sourceDetail = event instanceof CustomEvent ? event.detail : undefined;\n\n const tagName = this._host instanceof Element ? this._host.tagName.toLowerCase() : 'unknown';\n\n const { userId, patientContextId, encounterId, metadata } = this._options;\n\n const detail: AuditEventDetail = {\n sessionId: this._sessionId,\n timestamp: new Date().toISOString(),\n tagName,\n sourceEventType: event.type,\n sourceEventDetail: sourceDetail,\n ...(userId !== undefined ? { userId } : {}),\n ...(patientContextId !== undefined ? { patientContextId } : {}),\n ...(encounterId !== undefined ? { encounterId } : {}),\n ...metadata,\n };\n\n this._host.dispatchEvent(\n new CustomEvent<AuditEventDetail>('hx-audit', {\n bubbles: true,\n composed: true,\n detail,\n }),\n );\n }\n}\n"],"names":["MARKER","ensureDocumentTokens","doc","cssText","lightTokenCss","sheet","HX_EVENT_TYPES","generateSessionId","r1","r2","HelixAuditController","host","options","type","event","sourceDetail","tagName","userId","patientContextId","encounterId","metadata","detail"],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ import { HelixElement } from '../base/helix-element.js';
|
|
|
6
6
|
type Constructor<T = object> = new (...args: any[]) => T;
|
|
7
7
|
/**
|
|
8
8
|
* The public interface that FormMixin adds to any host element.
|
|
9
|
+
* Contains only the API that external consumers may access.
|
|
9
10
|
*
|
|
10
11
|
* @public
|
|
11
12
|
*/
|
|
@@ -20,21 +21,39 @@ export interface FormMixinInterface {
|
|
|
20
21
|
checkValidity(): boolean;
|
|
21
22
|
/** Delegates to ElementInternals.reportValidity(). */
|
|
22
23
|
reportValidity(): boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Protected subclassing hooks provided by FormMixin.
|
|
27
|
+
*
|
|
28
|
+
* These are part of the stable subclassing contract (breaking changes gated
|
|
29
|
+
* to major releases) but are NOT exposed as public consumer API.
|
|
30
|
+
* They are accessible only from within FormMixin subclasses.
|
|
31
|
+
*
|
|
32
|
+
* @protected
|
|
33
|
+
*/
|
|
34
|
+
export interface FormMixinProtectedHooks {
|
|
23
35
|
/**
|
|
24
36
|
* Advance `dirty` state. Call from the native input's `input` event handler.
|
|
25
|
-
* @
|
|
37
|
+
* @protected
|
|
26
38
|
*/
|
|
27
39
|
_handleInteractionInput(): void;
|
|
28
40
|
/**
|
|
29
41
|
* Advance `touched` state. Call from the native input's `blur` event handler.
|
|
30
|
-
* @
|
|
42
|
+
* @protected
|
|
31
43
|
*/
|
|
32
44
|
_handleInteractionBlur(): void;
|
|
33
45
|
/**
|
|
34
46
|
* Reset interaction flags. Call from `_onFormReset()` in the host component.
|
|
35
|
-
* @
|
|
47
|
+
* @protected
|
|
36
48
|
*/
|
|
37
49
|
_resetInteractionState(): void;
|
|
50
|
+
/**
|
|
51
|
+
* Override in the host component to run constraint validation logic.
|
|
52
|
+
* Called automatically by `updated()`. Use `this._internals.setValidity()`
|
|
53
|
+
* inside this method.
|
|
54
|
+
* @protected
|
|
55
|
+
*/
|
|
56
|
+
_updateValidity(...args: unknown[]): void;
|
|
38
57
|
}
|
|
39
58
|
/**
|
|
40
59
|
* FormMixin adds shared form infrastructure to any HelixElement subclass:
|
|
@@ -49,7 +68,7 @@ export interface FormMixinInterface {
|
|
|
49
68
|
* @example
|
|
50
69
|
* ```ts
|
|
51
70
|
* class HxTextInput extends FormMixin(HelixElement) {
|
|
52
|
-
*
|
|
71
|
+
* override _updateValidity(): void {
|
|
53
72
|
* if (this.required && !this.value) {
|
|
54
73
|
* this._internals.setValidity({ valueMissing: true }, 'Required', this._inputEl);
|
|
55
74
|
* } else {
|
|
@@ -64,6 +83,6 @@ export interface FormMixinInterface {
|
|
|
64
83
|
*
|
|
65
84
|
* @public
|
|
66
85
|
*/
|
|
67
|
-
export declare function FormMixin<TBase extends Constructor<HelixElement>>(superClass: TBase): TBase & Constructor<FormMixinInterface>;
|
|
86
|
+
export declare function FormMixin<TBase extends Constructor<HelixElement>>(superClass: TBase): TBase & Constructor<FormMixinInterface & FormMixinProtectedHooks>;
|
|
68
87
|
export {};
|
|
69
88
|
//# sourceMappingURL=FormMixin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormMixin.d.ts","sourceRoot":"","sources":["../../src/mixins/FormMixin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD;;;GAGG;AAEH,KAAK,WAAW,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAEzD
|
|
1
|
+
{"version":3,"file":"FormMixin.d.ts","sourceRoot":"","sources":["../../src/mixins/FormMixin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD;;;GAGG;AAEH,KAAK,WAAW,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,sEAAsE;IACtE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE3B,qDAAqD;IACrD,aAAa,IAAI,OAAO,CAAC;IACzB,sDAAsD;IACtD,cAAc,IAAI,OAAO,CAAC;CAC3B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,uBAAuB,IAAI,IAAI,CAAC;IAEhC;;;OAGG;IACH,sBAAsB,IAAI,IAAI,CAAC;IAE/B;;;OAGG;IACH,sBAAsB,IAAI,IAAI,CAAC;IAE/B;;;;;OAKG;IACH,eAAe,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CAC3C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,SAAS,CAAC,KAAK,SAAS,WAAW,CAAC,YAAY,CAAC,EAC/D,UAAU,EAAE,KAAK,GAChB,KAAK,GAAG,WAAW,CAAC,kBAAkB,GAAG,uBAAuB,CAAC,CAiInE"}
|
|
@@ -12,7 +12,7 @@ type LitElementConstructor = new (...args: any[]) => LitElement;
|
|
|
12
12
|
* JS property accessors for all intercepted ARIA attributes, reading from
|
|
13
13
|
* `data-aria-*` storage rather than `aria-*` attributes on the host.
|
|
14
14
|
*/
|
|
15
|
-
export interface
|
|
15
|
+
export interface AriaDelegationMixinInterface {
|
|
16
16
|
ariaActiveDescendant: string | null;
|
|
17
17
|
ariaAtomic: string | null;
|
|
18
18
|
ariaAutoComplete: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aria-delegation.d.ts","sourceRoot":"","sources":["../../src/mixins/aria-delegation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAEtC;;;GAGG;AACH,QAAA,MAAM,eAAe,25BAqDX,CAAC;AAEX,0DAA0D;AAC1D,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAI7D,KAAK,qBAAqB,GAAG,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,UAAU,CAAC;AAEhE;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"aria-delegation.d.ts","sourceRoot":"","sources":["../../src/mixins/aria-delegation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAEtC;;;GAGG;AACH,QAAA,MAAM,eAAe,25BAqDX,CAAC;AAEX,0DAA0D;AAC1D,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAI7D,KAAK,qBAAqB,GAAG,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,UAAU,CAAC;AAEhE;;;;GAIG;AAEH,MAAM,WAAW,4BAA4B;IAC3C,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,0BAA0B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,qBAAqB,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAqF9E"}
|
package/dist/mixins/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { mixinDelegatesAria } from './aria-delegation.js';
|
|
2
|
-
export type {
|
|
2
|
+
export type { AriaDelegationMixinInterface, AriaAttribute } from './aria-delegation.js';
|
|
3
3
|
export { FocusMixin } from './FocusMixin.js';
|
|
4
4
|
export type { FocusMixinInterface } from './FocusMixin.js';
|
|
5
|
+
export { FormMixin } from './FormMixin.js';
|
|
6
|
+
export type { FormMixinInterface } from './FormMixin.js';
|
|
5
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mixins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mixins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,4BAA4B,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
function
|
|
2
|
-
class
|
|
1
|
+
function d(e) {
|
|
2
|
+
class i extends e {
|
|
3
3
|
constructor() {
|
|
4
4
|
super(...arguments), this._dirty = !1, this._touched = !1;
|
|
5
5
|
}
|
|
@@ -44,45 +44,62 @@ function s(t) {
|
|
|
44
44
|
* Calls `_updateValidity()` after every Lit update cycle.
|
|
45
45
|
* @internal
|
|
46
46
|
*/
|
|
47
|
-
updated(
|
|
48
|
-
super.updated(
|
|
47
|
+
updated(t) {
|
|
48
|
+
super.updated(t), this._updateValidity();
|
|
49
49
|
}
|
|
50
50
|
// ─── Hook Methods ────────────────────────────────────────────────────────
|
|
51
51
|
/**
|
|
52
52
|
* Override in the host component to run constraint validation logic.
|
|
53
53
|
* Called automatically by `updated()`. Use `this._internals.setValidity()`
|
|
54
54
|
* inside this method.
|
|
55
|
-
*
|
|
55
|
+
*
|
|
56
|
+
* Part of the FormMixin subclassing contract — compiler-enforced protected;
|
|
57
|
+
* do not call from outside a subclass.
|
|
56
58
|
*/
|
|
57
59
|
_updateValidity() {
|
|
58
60
|
}
|
|
59
61
|
// ─── Interaction State Helpers ───────────────────────────────────────────
|
|
60
62
|
/**
|
|
61
63
|
* Advance `dirty` state. Call from the native input's `input` event.
|
|
62
|
-
*
|
|
64
|
+
*
|
|
65
|
+
* Part of the FormMixin subclassing contract — compiler-enforced protected;
|
|
66
|
+
* do not call from outside a subclass.
|
|
63
67
|
*/
|
|
64
68
|
_handleInteractionInput() {
|
|
65
|
-
|
|
69
|
+
if (!this._dirty) {
|
|
70
|
+
const t = this._dirty;
|
|
71
|
+
this._dirty = !0, this.requestUpdate("_dirty", t);
|
|
72
|
+
}
|
|
66
73
|
}
|
|
67
74
|
/**
|
|
68
75
|
* Advance `touched` state. Call from the native input's `blur` event.
|
|
69
|
-
*
|
|
76
|
+
*
|
|
77
|
+
* Part of the FormMixin subclassing contract — compiler-enforced protected;
|
|
78
|
+
* do not call from outside a subclass.
|
|
70
79
|
*/
|
|
71
80
|
_handleInteractionBlur() {
|
|
72
|
-
|
|
81
|
+
if (!this._touched) {
|
|
82
|
+
const t = this._touched;
|
|
83
|
+
this._touched = !0, this.requestUpdate("_touched", t);
|
|
84
|
+
}
|
|
73
85
|
}
|
|
74
86
|
/**
|
|
75
87
|
* Reset interaction state to initial values.
|
|
76
88
|
* Call from `_onFormReset()` in the host component.
|
|
77
|
-
*
|
|
89
|
+
*
|
|
90
|
+
* Part of the FormMixin subclassing contract — compiler-enforced protected;
|
|
91
|
+
* do not call from outside a subclass.
|
|
78
92
|
*/
|
|
79
93
|
_resetInteractionState() {
|
|
80
|
-
(this._dirty || this._touched)
|
|
94
|
+
if (this._dirty || this._touched) {
|
|
95
|
+
const t = this._dirty, r = this._touched;
|
|
96
|
+
this._dirty = !1, this._touched = !1, this.requestUpdate("_dirty", t), this.requestUpdate("_touched", r);
|
|
97
|
+
}
|
|
81
98
|
}
|
|
82
99
|
}
|
|
83
|
-
return
|
|
100
|
+
return i;
|
|
84
101
|
}
|
|
85
102
|
export {
|
|
86
|
-
|
|
103
|
+
d as F
|
|
87
104
|
};
|
|
88
|
-
//# sourceMappingURL=FormMixin-
|
|
105
|
+
//# sourceMappingURL=FormMixin-B8PXk5RQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormMixin-B8PXk5RQ.js","sources":["../../src/mixins/FormMixin.ts"],"sourcesContent":["import type { PropertyValues } from 'lit';\nimport { HelixElement } from '../base/helix-element.js';\n\n/**\n * Constructor type for the mixin pattern.\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Constructor<T = object> = new (...args: any[]) => T;\n\n/**\n * The public interface that FormMixin adds to any host element.\n * Contains only the API that external consumers may access.\n *\n * @public\n */\nexport interface FormMixinInterface {\n /** True after the user has modified the field value at least once. */\n readonly dirty: boolean;\n /** True after the field has received and lost focus at least once. */\n readonly touched: boolean;\n /** True while the field has never been modified (opposite of dirty). */\n readonly pristine: boolean;\n\n /** Delegates to ElementInternals.checkValidity(). */\n checkValidity(): boolean;\n /** Delegates to ElementInternals.reportValidity(). */\n reportValidity(): boolean;\n}\n\n/**\n * Protected subclassing hooks provided by FormMixin.\n *\n * These are part of the stable subclassing contract (breaking changes gated\n * to major releases) but are NOT exposed as public consumer API.\n * They are accessible only from within FormMixin subclasses.\n *\n * @protected\n */\nexport interface FormMixinProtectedHooks {\n /**\n * Advance `dirty` state. Call from the native input's `input` event handler.\n * @protected\n */\n _handleInteractionInput(): void;\n\n /**\n * Advance `touched` state. Call from the native input's `blur` event handler.\n * @protected\n */\n _handleInteractionBlur(): void;\n\n /**\n * Reset interaction flags. Call from `_onFormReset()` in the host component.\n * @protected\n */\n _resetInteractionState(): void;\n\n /**\n * Override in the host component to run constraint validation logic.\n * Called automatically by `updated()`. Use `this._internals.setValidity()`\n * inside this method.\n * @protected\n */\n _updateValidity(...args: unknown[]): void;\n}\n\n/**\n * FormMixin adds shared form infrastructure to any HelixElement subclass:\n *\n * - Interaction state tracking: `dirty`, `touched`, `pristine`\n * - `checkValidity()` / `reportValidity()` delegation to `ElementInternals`\n * - A `_updateValidity()` lifecycle hook called automatically after every\n * `updated()` cycle — subclasses override this to run constraint checks\n * - `_handleInteractionBlur()` and `_handleInteractionInput()` helpers that\n * components wire to their native inputs to advance interaction state\n *\n * @example\n * ```ts\n * class HxTextInput extends FormMixin(HelixElement) {\n * override _updateValidity(): void {\n * if (this.required && !this.value) {\n * this._internals.setValidity({ valueMissing: true }, 'Required', this._inputEl);\n * } else {\n * this._internals.setValidity({});\n * }\n * }\n * }\n * ```\n *\n * @param superClass - A HelixElement-derived constructor to mix into\n * @returns The mixed class constructor with form interaction state tracking\n *\n * @public\n */\nexport function FormMixin<TBase extends Constructor<HelixElement>>(\n superClass: TBase,\n): TBase & Constructor<FormMixinInterface & FormMixinProtectedHooks> {\n class FormMixinClass extends (superClass as Constructor<HelixElement>) {\n // ─── Interaction State ───────────────────────────────────────────────────\n\n /** @internal */\n private _dirty = false;\n\n /** @internal */\n private _touched = false;\n\n // ─── Public Getters ──────────────────────────────────────────────────────\n\n /**\n * True after the user has modified the field value at least once.\n * Resets to false on form reset.\n */\n get dirty(): boolean {\n return this._dirty;\n }\n\n /**\n * True after the field has received and lost focus at least once.\n * Resets to false on form reset.\n */\n get touched(): boolean {\n return this._touched;\n }\n\n /**\n * True while the field has never been modified. Opposite of `dirty`.\n */\n get pristine(): boolean {\n return !this._dirty;\n }\n\n // ─── Validity Delegation ─────────────────────────────────────────────────\n\n /**\n * Delegates to `ElementInternals.checkValidity()`.\n * The host element must have `static formAssociated = true`.\n */\n checkValidity(): boolean {\n return this._internals.checkValidity();\n }\n\n /**\n * Delegates to `ElementInternals.reportValidity()`.\n * The host element must have `static formAssociated = true`.\n */\n reportValidity(): boolean {\n return this._internals.reportValidity();\n }\n\n // ─── Lifecycle ───────────────────────────────────────────────────────────\n\n /**\n * Calls `_updateValidity()` after every Lit update cycle.\n * @internal\n */\n override updated(changedProperties: PropertyValues): void {\n super.updated(changedProperties);\n this._updateValidity();\n }\n\n // ─── Hook Methods ────────────────────────────────────────────────────────\n\n /**\n * Override in the host component to run constraint validation logic.\n * Called automatically by `updated()`. Use `this._internals.setValidity()`\n * inside this method.\n *\n * Part of the FormMixin subclassing contract — compiler-enforced protected;\n * do not call from outside a subclass.\n */\n protected _updateValidity(): void {\n // Default: valid. Subclasses override to apply constraints.\n }\n\n // ─── Interaction State Helpers ───────────────────────────────────────────\n\n /**\n * Advance `dirty` state. Call from the native input's `input` event.\n *\n * Part of the FormMixin subclassing contract — compiler-enforced protected;\n * do not call from outside a subclass.\n */\n protected _handleInteractionInput(): void {\n if (!this._dirty) {\n const prev = this._dirty;\n this._dirty = true;\n this.requestUpdate('_dirty', prev);\n }\n }\n\n /**\n * Advance `touched` state. Call from the native input's `blur` event.\n *\n * Part of the FormMixin subclassing contract — compiler-enforced protected;\n * do not call from outside a subclass.\n */\n protected _handleInteractionBlur(): void {\n if (!this._touched) {\n const prev = this._touched;\n this._touched = true;\n this.requestUpdate('_touched', prev);\n }\n }\n\n /**\n * Reset interaction state to initial values.\n * Call from `_onFormReset()` in the host component.\n *\n * Part of the FormMixin subclassing contract — compiler-enforced protected;\n * do not call from outside a subclass.\n */\n protected _resetInteractionState(): void {\n if (this._dirty || this._touched) {\n const prevDirty = this._dirty;\n const prevTouched = this._touched;\n this._dirty = false;\n this._touched = false;\n this.requestUpdate('_dirty', prevDirty);\n this.requestUpdate('_touched', prevTouched);\n }\n }\n }\n\n return FormMixinClass as unknown as TBase &\n Constructor<FormMixinInterface & FormMixinProtectedHooks>;\n}\n"],"names":["FormMixin","superClass","FormMixinClass","changedProperties","prev","prevDirty","prevTouched"],"mappings":"AA+FO,SAASA,EACdC,GACmE;AAAA,EACnE,MAAMC,UAAwBD,EAAyC;AAAA,IAAvE,cAAA;AAAA,YAAA,GAAA,SAAA,GAIE,KAAQ,SAAS,IAGjB,KAAQ,WAAW;AAAA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQnB,IAAI,QAAiB;AACnB,aAAO,KAAK;AAAA,IACd;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,IAAI,UAAmB;AACrB,aAAO,KAAK;AAAA,IACd;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,WAAoB;AACtB,aAAO,CAAC,KAAK;AAAA,IACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,gBAAyB;AACvB,aAAO,KAAK,WAAW,cAAA;AAAA,IACzB;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,iBAA0B;AACxB,aAAO,KAAK,WAAW,eAAA;AAAA,IACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQS,QAAQE,GAAyC;AACxD,YAAM,QAAQA,CAAiB,GAC/B,KAAK,gBAAA;AAAA,IACP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAYU,kBAAwB;AAAA,IAElC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUU,0BAAgC;AACxC,UAAI,CAAC,KAAK,QAAQ;AAChB,cAAMC,IAAO,KAAK;AAClB,aAAK,SAAS,IACd,KAAK,cAAc,UAAUA,CAAI;AAAA,MACnC;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQU,yBAA+B;AACvC,UAAI,CAAC,KAAK,UAAU;AAClB,cAAMA,IAAO,KAAK;AAClB,aAAK,WAAW,IAChB,KAAK,cAAc,YAAYA,CAAI;AAAA,MACrC;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASU,yBAA+B;AACvC,UAAI,KAAK,UAAU,KAAK,UAAU;AAChC,cAAMC,IAAY,KAAK,QACjBC,IAAc,KAAK;AACzB,aAAK,SAAS,IACd,KAAK,WAAW,IAChB,KAAK,cAAc,UAAUD,CAAS,GACtC,KAAK,cAAc,YAAYC,CAAW;AAAA,MAC5C;AAAA,IACF;AAAA,EAAA;AAGF,SAAOJ;AAET;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
var
|
|
1
|
+
var u = (e) => {
|
|
2
2
|
throw TypeError(e);
|
|
3
3
|
};
|
|
4
|
-
var h = (e, a, r) => a.has(e) ||
|
|
5
|
-
var c = (e, a, r) => (h(e, a, "read from private field"), r ? r.call(e) : a.get(e)), b = (e, a, r) => a.has(e) ?
|
|
4
|
+
var h = (e, a, r) => a.has(e) || u("Cannot " + r);
|
|
5
|
+
var c = (e, a, r) => (h(e, a, "read from private field"), r ? r.call(e) : a.get(e)), b = (e, a, r) => a.has(e) ? u("Cannot add the same private member more than once") : a instanceof WeakSet ? a.add(e) : a.set(e, r);
|
|
6
6
|
const n = [
|
|
7
7
|
"aria-activedescendant",
|
|
8
8
|
"aria-atomic",
|
|
@@ -83,8 +83,8 @@ function v(e) {
|
|
|
83
83
|
r = new WeakMap();
|
|
84
84
|
let a = o;
|
|
85
85
|
for (const s of n) {
|
|
86
|
-
const
|
|
87
|
-
Object.defineProperty(a.prototype,
|
|
86
|
+
const d = s === "role" ? "role" : A(s), t = `data-${s}`;
|
|
87
|
+
Object.defineProperty(a.prototype, d, {
|
|
88
88
|
get() {
|
|
89
89
|
return this.getAttribute(t);
|
|
90
90
|
},
|
|
@@ -104,4 +104,4 @@ function A(e) {
|
|
|
104
104
|
export {
|
|
105
105
|
v as m
|
|
106
106
|
};
|
|
107
|
-
//# sourceMappingURL=aria-delegation-
|
|
107
|
+
//# sourceMappingURL=aria-delegation-Doq6RRUy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aria-delegation-Doq6RRUy.js","sources":["../../src/mixins/aria-delegation.ts"],"sourcesContent":["import type { LitElement } from 'lit';\n\n/**\n * All standard ARIA attributes intercepted by this mixin.\n * Extend as needed, but keep the list minimal.\n */\nconst ARIA_ATTRIBUTES = [\n 'aria-activedescendant',\n 'aria-atomic',\n 'aria-autocomplete',\n 'aria-braillelabel',\n 'aria-brailleroledescription',\n 'aria-busy',\n 'aria-checked',\n 'aria-colcount',\n 'aria-colindex',\n 'aria-colindextext',\n 'aria-colspan',\n 'aria-controls',\n 'aria-current',\n 'aria-describedby',\n 'aria-description',\n 'aria-details',\n 'aria-disabled',\n 'aria-errormessage',\n 'aria-expanded',\n 'aria-flowto',\n 'aria-haspopup',\n 'aria-hidden',\n 'aria-invalid',\n 'aria-keyshortcuts',\n 'aria-label',\n 'aria-labelledby',\n 'aria-level',\n 'aria-live',\n 'aria-modal',\n 'aria-multiline',\n 'aria-multiselectable',\n 'aria-orientation',\n 'aria-owns',\n 'aria-placeholder',\n 'aria-posinset',\n 'aria-pressed',\n 'aria-readonly',\n 'aria-relevant',\n 'aria-required',\n 'aria-roledescription',\n 'aria-rowcount',\n 'aria-rowindex',\n 'aria-rowindextext',\n 'aria-rowspan',\n 'aria-selected',\n 'aria-setsize',\n 'aria-sort',\n 'aria-valuemax',\n 'aria-valuemin',\n 'aria-valuenow',\n 'aria-valuetext',\n 'role',\n] as const;\n\n/** Union type of all intercepted ARIA attribute names. */\nexport type AriaAttribute = (typeof ARIA_ATTRIBUTES)[number];\n\n// TypeScript mixin constraint: constructors must accept `any[]`.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype LitElementConstructor = new (...args: any[]) => LitElement;\n\n/**\n * The public interface added to any class by `mixinDelegatesAria`.\n * JS property accessors for all intercepted ARIA attributes, reading from\n * `data-aria-*` storage rather than `aria-*` attributes on the host.\n */\n\nexport interface AriaDelegationMixinInterface {\n ariaActiveDescendant: string | null;\n ariaAtomic: string | null;\n ariaAutoComplete: string | null;\n ariaBrailleLabel: string | null;\n ariaBrailleRoleDescription: string | null;\n ariaBusy: string | null;\n ariaChecked: string | null;\n ariaColCount: string | null;\n ariaColIndex: string | null;\n ariaColIndexText: string | null;\n ariaColSpan: string | null;\n ariaControls: string | null;\n ariaCurrent: string | null;\n ariaDescribedBy: string | null;\n ariaDescription: string | null;\n ariaDetails: string | null;\n ariaDisabled: string | null;\n ariaErrorMessage: string | null;\n ariaExpanded: string | null;\n ariaFlowTo: string | null;\n ariaHasPopup: string | null;\n ariaHidden: string | null;\n ariaInvalid: string | null;\n ariaKeyShortcuts: string | null;\n ariaLabel: string | null;\n ariaLabelledBy: string | null;\n ariaLevel: string | null;\n ariaLive: string | null;\n ariaModal: string | null;\n ariaMultiLine: string | null;\n ariaMultiSelectable: string | null;\n ariaOrientation: string | null;\n ariaOwns: string | null;\n ariaPlaceholder: string | null;\n ariaPosInSet: string | null;\n ariaPressed: string | null;\n ariaReadOnly: string | null;\n ariaRelevant: string | null;\n ariaRequired: string | null;\n ariaRoleDescription: string | null;\n ariaRowCount: string | null;\n ariaRowIndex: string | null;\n ariaRowIndexText: string | null;\n ariaRowSpan: string | null;\n ariaSelected: string | null;\n ariaSetSize: string | null;\n ariaSort: string | null;\n ariaValueMax: string | null;\n ariaValueMin: string | null;\n ariaValueNow: string | null;\n ariaValueText: string | null;\n role: string | null;\n}\n\n/**\n * Mixin that delegates ARIA attributes from the host element to data-aria-* storage,\n * preventing Shadow DOM double-announcement by screen readers.\n *\n * When a custom element uses `delegatesFocus: true`, the focus delegate (inner element)\n * and the host are both in the a11y tree. Setting `aria-label` on the host causes the\n * label to be announced twice — once for the host, once for the focused inner element.\n *\n * This mixin intercepts `attributeChangedCallback` for all ARIA attributes:\n * - Shifts the value from `aria-*` to `data-aria-*` on the host\n * - Provides JS property accessors that read from `data-aria-*`\n * - The host element no longer has `aria-*` attributes visible in the a11y tree\n * - Components read ARIA values via property accessors and apply them to inner elements\n *\n * @example\n * ```ts\n * class HxButton extends mixinDelegatesAria(LitElement) {\n * render() {\n * return html`<button aria-label=${this.ariaLabel ?? nothing}></button>`;\n * }\n * }\n * ```\n *\n * @param Base - A LitElement subclass constructor\n * @returns A new constructor extending Base with ARIA delegation behaviour\n */\nexport function mixinDelegatesAria<T extends LitElementConstructor>(Base: T): T {\n class AriaDelegationMixin extends Base {\n // Per-instance guard: tracks which aria attributes are mid-processing so\n // that the recursive attributeChangedCallback triggered by our own\n // removeAttribute(name) call does not erroneously clear data-aria-*.\n #processingAria = new Set<string>();\n\n static get observedAttributes(): string[] {\n // Reflect.get with `this` as the receiver passes the concrete subclass\n // (e.g. HelixButton) through to Lit's ReactiveElement getter, so it\n // returns @property attribute names for that specific class.\n // TypeScript cannot infer static members on `T`, so we use Reflect.get\n // rather than `super.observedAttributes` to avoid TS2339.\n const parent: object = Object.getPrototypeOf(AriaDelegationMixin);\n const superAttrs: string[] =\n (Reflect.get(parent, 'observedAttributes', this) as string[] | undefined) ?? [];\n // Append any ARIA attributes not already in the list.\n const ariaAttrs = ARIA_ATTRIBUTES.filter((a) => !superAttrs.includes(a));\n return [...superAttrs, ...ariaAttrs];\n }\n\n attributeChangedCallback(name: string, old: string | null, next: string | null): void {\n if ((ARIA_ATTRIBUTES as readonly string[]).includes(name)) {\n // Guard: if we're already processing this attribute, we're in the\n // recursive callback triggered by our own removeAttribute(name) below.\n // Do not process it again — that would clear data-aria-* incorrectly.\n if (this.#processingAria.has(name)) return;\n\n // Intercept: store as data-aria-*, do not propagate aria-* to the host.\n if (next !== null) {\n // data-aria-* is not in observedAttributes — no recursive loop here.\n this.setAttribute(`data-${name}`, next);\n } else {\n this.removeAttribute(`data-${name}`);\n }\n\n // Remove the aria-* attribute from the host so it is absent from the\n // a11y tree and cannot cause double announcements. Guard while doing so.\n this.#processingAria.add(name);\n if (this.hasAttribute(name)) {\n this.removeAttribute(name); // synchronously re-enters attributeChangedCallback; guard catches it\n }\n this.#processingAria.delete(name);\n\n // Trigger Lit update so render() re-reads the delegated value.\n this.requestUpdate();\n return;\n }\n super.attributeChangedCallback(name, old, next);\n }\n }\n\n // Add JS property accessors for each ARIA attribute, reading from data-aria-*\n for (const attr of ARIA_ATTRIBUTES) {\n // Convert 'aria-label' → 'ariaLabel', 'role' → 'role'\n const propName: string = attr === 'role' ? 'role' : ariaAttrToProp(attr);\n const dataAttr = `data-${attr}`;\n\n Object.defineProperty(AriaDelegationMixin.prototype, propName, {\n get(this: Element): string | null {\n return this.getAttribute(dataAttr);\n },\n set(this: LitElement, value: string | null) {\n if (value === null || value === undefined) {\n this.removeAttribute(dataAttr);\n this.removeAttribute(attr);\n } else {\n this.setAttribute(dataAttr, value);\n // Ensure aria-* is NOT present on the host.\n if (this.hasAttribute(attr)) {\n this.removeAttribute(attr);\n }\n }\n // Trigger Lit reactive update.\n this.requestUpdate();\n },\n configurable: true,\n enumerable: false,\n });\n }\n\n // Cast to T to satisfy the declared return type. The AriaDelegationMixinInterface\n // instance members are added at runtime via Object.defineProperty above; callers\n // that need the typed accessors should cast the instance or use the interface directly.\n return AriaDelegationMixin as unknown as T;\n}\n\n/**\n * Converts 'aria-label' → 'ariaLabel', 'aria-busy' → 'ariaBusy', etc.\n * Removes the 'aria-' prefix, capitalizes the first letter of the remainder,\n * then camelCases any additional hyphen-separated segments.\n */\nfunction ariaAttrToProp(attr: string): string {\n const rest = attr.replace(/^aria-/, '');\n return (\n 'aria' +\n rest.charAt(0).toUpperCase() +\n rest.slice(1).replace(/-([a-z])/g, (_, c: string) => c.toUpperCase())\n );\n}\n"],"names":["ARIA_ATTRIBUTES","mixinDelegatesAria","Base","_processingAria","_AriaDelegationMixin","__privateAdd","parent","superAttrs","ariaAttrs","a","name","old","next","__privateGet","AriaDelegationMixin","attr","propName","ariaAttrToProp","dataAttr","value","rest","_","c"],"mappings":";;;;;AAMA,MAAMA,IAAkB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAgGO,SAASC,EAAoDC,GAAY;AArJhF,MAAAC;AAsJE,QAAMC,IAAN,MAAMA,UAA4BF,EAAK;AAAA,IAAvC;AAAA;AAIE;AAAA;AAAA;AAAA,MAAAG,EAAA,MAAAF,uBAAsB,IAAA;AAAA;AAAA,IAEtB,WAAW,qBAA+B;AAMxC,YAAMG,IAAiB,OAAO,eAAeF,CAAmB,GAC1DG,IACH,QAAQ,IAAID,GAAQ,sBAAsB,IAAI,KAA8B,CAAA,GAEzEE,IAAYR,EAAgB,OAAO,CAACS,MAAM,CAACF,EAAW,SAASE,CAAC,CAAC;AACvE,aAAO,CAAC,GAAGF,GAAY,GAAGC,CAAS;AAAA,IACrC;AAAA,IAEA,yBAAyBE,GAAcC,GAAoBC,GAA2B;AACpF,UAAKZ,EAAsC,SAASU,CAAI,GAAG;AAIzD,YAAIG,EAAA,MAAKV,GAAgB,IAAIO,CAAI,EAAG;AAGpC,QAAIE,MAAS,OAEX,KAAK,aAAa,QAAQF,CAAI,IAAIE,CAAI,IAEtC,KAAK,gBAAgB,QAAQF,CAAI,EAAE,GAKrCG,EAAA,MAAKV,GAAgB,IAAIO,CAAI,GACzB,KAAK,aAAaA,CAAI,KACxB,KAAK,gBAAgBA,CAAI,GAE3BG,EAAA,MAAKV,GAAgB,OAAOO,CAAI,GAGhC,KAAK,cAAA;AACL;AAAA,MACF;AACA,YAAM,yBAAyBA,GAAMC,GAAKC,CAAI;AAAA,IAChD;AAAA,EAAA;AA5CA,EAAAT,IAAA;AAJF,MAAMW,IAANV;AAoDA,aAAWW,KAAQf,GAAiB;AAElC,UAAMgB,IAAmBD,MAAS,SAAS,SAASE,EAAeF,CAAI,GACjEG,IAAW,QAAQH,CAAI;AAE7B,WAAO,eAAeD,EAAoB,WAAWE,GAAU;AAAA,MAC7D,MAAkC;AAChC,eAAO,KAAK,aAAaE,CAAQ;AAAA,MACnC;AAAA,MACA,IAAsBC,GAAsB;AAC1C,QAAIA,KAAU,QACZ,KAAK,gBAAgBD,CAAQ,GAC7B,KAAK,gBAAgBH,CAAI,MAEzB,KAAK,aAAaG,GAAUC,CAAK,GAE7B,KAAK,aAAaJ,CAAI,KACxB,KAAK,gBAAgBA,CAAI,IAI7B,KAAK,cAAA;AAAA,MACP;AAAA,MACA,cAAc;AAAA,MACd,YAAY;AAAA,IAAA,CACb;AAAA,EACH;AAKA,SAAOD;AACT;AAOA,SAASG,EAAeF,GAAsB;AAC5C,QAAMK,IAAOL,EAAK,QAAQ,UAAU,EAAE;AACtC,SACE,SACAK,EAAK,OAAO,CAAC,EAAE,YAAA,IACfA,EAAK,MAAM,CAAC,EAAE,QAAQ,aAAa,CAACC,GAAGC,MAAcA,EAAE,aAAa;AAExE;"}
|
|
@@ -1,35 +1,31 @@
|
|
|
1
1
|
var a = (s) => {
|
|
2
2
|
throw TypeError(s);
|
|
3
3
|
};
|
|
4
|
-
var
|
|
5
|
-
var
|
|
6
|
-
import { LitElement as
|
|
7
|
-
var
|
|
8
|
-
const
|
|
4
|
+
var n = (s, r, t) => r.has(s) || a("Cannot " + t);
|
|
5
|
+
var l = (s, r, t) => (n(s, r, "read from private field"), t ? t.call(s) : r.get(s)), c = (s, r, t) => r.has(s) ? a("Cannot add the same private member more than once") : r instanceof WeakSet ? r.add(s) : r.set(s, t), d = (s, r, t, e) => (n(s, r, "write to private field"), e ? e.call(s, t) : r.set(s, t), t);
|
|
6
|
+
import { LitElement as f } from "lit";
|
|
7
|
+
var o;
|
|
8
|
+
const i = class i extends f {
|
|
9
9
|
constructor() {
|
|
10
10
|
super(...arguments);
|
|
11
|
-
|
|
11
|
+
c(this, o);
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
14
14
|
* Lazy accessor for `ElementInternals`. Calls `attachInternals()` on first
|
|
15
15
|
* access and caches the result.
|
|
16
16
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
17
|
+
* Available to ALL components — not just form-associated ones.
|
|
18
|
+
* `ElementInternals` is also the standard mechanism for setting ARIA roles,
|
|
19
|
+
* states, and properties from within Shadow DOM (e.g., `this._internals.role`).
|
|
19
20
|
*
|
|
20
|
-
* @throws {Error} If accessed on a component where `formAssociated` is `false`
|
|
21
21
|
* @internal
|
|
22
22
|
*/
|
|
23
23
|
get _internals() {
|
|
24
|
-
|
|
25
|
-
throw new Error(
|
|
26
|
-
`[HelixElement] _internals accessed on <${this.tagName.toLowerCase()}> but static formAssociated is not set to true on ${this.constructor.name}.`
|
|
27
|
-
);
|
|
28
|
-
const t = i(this, r);
|
|
24
|
+
const t = l(this, o);
|
|
29
25
|
if (t !== void 0)
|
|
30
26
|
return t;
|
|
31
27
|
const e = this.attachInternals();
|
|
32
|
-
return d(this,
|
|
28
|
+
return d(this, o, e), e;
|
|
33
29
|
}
|
|
34
30
|
// ─── Browser Form Callbacks (delegate to hook methods) ───
|
|
35
31
|
/**
|
|
@@ -65,23 +61,33 @@ const n = class n extends h {
|
|
|
65
61
|
* Override in subclass to react to the element being disabled or enabled
|
|
66
62
|
* via a parent `<fieldset>`.
|
|
67
63
|
*
|
|
64
|
+
* Part of the HelixElement subclassing contract (stable across minor/patch
|
|
65
|
+
* releases; breaking changes gated to major releases).
|
|
66
|
+
*
|
|
68
67
|
* @param _disabled - `true` when the element is being disabled
|
|
69
|
-
* @
|
|
68
|
+
* @protected
|
|
70
69
|
*/
|
|
71
70
|
_onFormDisabled(t) {
|
|
72
71
|
}
|
|
73
72
|
/**
|
|
74
73
|
* Override in subclass to reset component state when the owning form resets.
|
|
75
|
-
*
|
|
74
|
+
*
|
|
75
|
+
* Part of the HelixElement subclassing contract (stable across minor/patch
|
|
76
|
+
* releases; breaking changes gated to major releases).
|
|
77
|
+
*
|
|
78
|
+
* @protected
|
|
76
79
|
*/
|
|
77
80
|
_onFormReset() {
|
|
78
81
|
}
|
|
79
82
|
/**
|
|
80
83
|
* Override in subclass to restore component state from saved form state.
|
|
81
84
|
*
|
|
85
|
+
* Part of the HelixElement subclassing contract (stable across minor/patch
|
|
86
|
+
* releases; breaking changes gated to major releases).
|
|
87
|
+
*
|
|
82
88
|
* @param _state - The saved state value, or `null` if none
|
|
83
89
|
* @param _mode - `'restore'` for bfcache navigation, `'autocomplete'` for autofill
|
|
84
|
-
* @
|
|
90
|
+
* @protected
|
|
85
91
|
*/
|
|
86
92
|
_onFormStateRestore(t, e) {
|
|
87
93
|
}
|
|
@@ -96,8 +102,7 @@ const n = class n extends h {
|
|
|
96
102
|
* @internal
|
|
97
103
|
*/
|
|
98
104
|
get form() {
|
|
99
|
-
|
|
100
|
-
return !this.constructor.formAssociated || t === void 0 ? null : t.form;
|
|
105
|
+
return this.constructor.formAssociated ? this._internals.form : null;
|
|
101
106
|
}
|
|
102
107
|
/**
|
|
103
108
|
* The current `ValidityState` for this element, or `null` if not
|
|
@@ -109,8 +114,7 @@ const n = class n extends h {
|
|
|
109
114
|
* @internal
|
|
110
115
|
*/
|
|
111
116
|
get validity() {
|
|
112
|
-
|
|
113
|
-
return !this.constructor.formAssociated || t === void 0 ? null : t.validity;
|
|
117
|
+
return this.constructor.formAssociated ? this._internals.validity : null;
|
|
114
118
|
}
|
|
115
119
|
/**
|
|
116
120
|
* The current validation message, or an empty string if not form-associated
|
|
@@ -119,13 +123,12 @@ const n = class n extends h {
|
|
|
119
123
|
* @internal
|
|
120
124
|
*/
|
|
121
125
|
get validationMessage() {
|
|
122
|
-
|
|
123
|
-
return !this.constructor.formAssociated || t === void 0 ? "" : t.validationMessage;
|
|
126
|
+
return this.constructor.formAssociated ? this._internals.validationMessage : "";
|
|
124
127
|
}
|
|
125
128
|
};
|
|
126
|
-
|
|
127
|
-
let m =
|
|
129
|
+
o = new WeakMap(), i.formAssociated = !1;
|
|
130
|
+
let m = i;
|
|
128
131
|
export {
|
|
129
132
|
m as H
|
|
130
133
|
};
|
|
131
|
-
//# sourceMappingURL=helix-element-
|
|
134
|
+
//# sourceMappingURL=helix-element-BNEYeiys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helix-element-BNEYeiys.js","sources":["../../src/base/helix-element.ts"],"sourcesContent":["import { LitElement } from 'lit';\n\n/**\n * `HelixElement` extends `LitElement` with shared infrastructure for all HELiX\n * components: lazy `ElementInternals` access, form lifecycle hook delegation,\n * and convenience validity getters.\n *\n * All subclasses get a lazy `_internals` accessor that calls\n * `attachInternals()` on first access — useful for both form participation\n * and ARIA role/state management via `ElementInternals`.\n *\n * Form association is opt-in via `static formAssociated = true` on the subclass.\n *\n * Form components should also override the `_onForm*` hook methods rather than\n * re-declaring the raw browser callbacks (`formResetCallback`, etc.).\n *\n * @example Non-form component — no configuration required:\n * ```ts\n * class HxCard extends HelixElement {\n * // no formAssociated needed\n * }\n * ```\n *\n * @example Form-associated component:\n * ```ts\n * class HxTextInput extends HelixElement {\n * static override formAssociated = true;\n *\n * override _onFormReset(): void {\n * this.value = '';\n * this._internals.setFormValue('');\n * }\n *\n * override _onFormDisabled(disabled: boolean): void {\n * this.disabled = disabled;\n * }\n * }\n * ```\n *\n * @public\n */\nexport class HelixElement extends LitElement {\n /**\n * Set to `true` on the subclass to enable ElementInternals form association.\n *\n * IMPORTANT: This MUST be redeclared as `static override formAssociated = true`\n * on each form-associated subclass. The browser's form association mechanism\n * inspects `formAssociated` on the *registered* custom element class, not\n * on ancestor classes.\n *\n * @internal\n */\n static formAssociated = false;\n\n #internals: ElementInternals | undefined;\n\n /**\n * Lazy accessor for `ElementInternals`. Calls `attachInternals()` on first\n * access and caches the result.\n *\n * Available to ALL components — not just form-associated ones.\n * `ElementInternals` is also the standard mechanism for setting ARIA roles,\n * states, and properties from within Shadow DOM (e.g., `this._internals.role`).\n *\n * @internal\n */\n get _internals(): ElementInternals {\n const cached = this.#internals;\n if (cached !== undefined) {\n return cached;\n }\n const internals = this.attachInternals();\n this.#internals = internals;\n return internals;\n }\n\n // ─── Browser Form Callbacks (delegate to hook methods) ───\n\n /**\n * Called by the browser when the element's form-associated disabled state\n * changes (e.g., a parent `<fieldset disabled>` is toggled).\n *\n * Delegates to `_onFormDisabled`. Override that method in subclasses.\n * @internal\n */\n formDisabledCallback(disabled: boolean): void {\n this._onFormDisabled(disabled);\n }\n\n /**\n * Called by the browser when the owning form is reset.\n *\n * Delegates to `_onFormReset`. Override that method in subclasses.\n * @internal\n */\n formResetCallback(): void {\n this._onFormReset();\n }\n\n /**\n * Called by the browser to restore form state (e.g., back/forward cache).\n *\n * Delegates to `_onFormStateRestore`. Override that method in subclasses.\n * @internal\n */\n formStateRestoreCallback(\n state: File | string | FormData | null,\n mode: 'restore' | 'autocomplete',\n ): void {\n this._onFormStateRestore(state, mode);\n }\n\n // ─── Hook Methods (override in subclasses) ───\n\n /**\n * Override in subclass to react to the element being disabled or enabled\n * via a parent `<fieldset>`.\n *\n * Part of the HelixElement subclassing contract (stable across minor/patch\n * releases; breaking changes gated to major releases).\n *\n * @param _disabled - `true` when the element is being disabled\n * @protected\n */\n protected _onFormDisabled(_disabled: boolean): void {}\n\n /**\n * Override in subclass to reset component state when the owning form resets.\n *\n * Part of the HelixElement subclassing contract (stable across minor/patch\n * releases; breaking changes gated to major releases).\n *\n * @protected\n */\n protected _onFormReset(): void {}\n\n /**\n * Override in subclass to restore component state from saved form state.\n *\n * Part of the HelixElement subclassing contract (stable across minor/patch\n * releases; breaking changes gated to major releases).\n *\n * @param _state - The saved state value, or `null` if none\n * @param _mode - `'restore'` for bfcache navigation, `'autocomplete'` for autofill\n * @protected\n */\n protected _onFormStateRestore(\n _state: File | string | FormData | null,\n _mode: 'restore' | 'autocomplete',\n ): void {}\n\n // ─── Convenience Getters ───\n\n /**\n * The associated form element, or `null` if not form-associated or not yet\n * connected to a form.\n *\n * Form-associated subclasses that need a guaranteed non-null return type\n * should redeclare this getter and delegate to `this._internals.form`.\n *\n * @internal\n */\n get form(): HTMLFormElement | null {\n if (!(this.constructor as typeof HelixElement).formAssociated) {\n return null;\n }\n return this._internals.form;\n }\n\n /**\n * The current `ValidityState` for this element, or `null` if not\n * form-associated.\n *\n * Form-associated subclasses that need a guaranteed `ValidityState` return\n * should redeclare this getter and delegate to `this._internals.validity`.\n *\n * @internal\n */\n get validity(): ValidityState | null {\n if (!(this.constructor as typeof HelixElement).formAssociated) {\n return null;\n }\n return this._internals.validity;\n }\n\n /**\n * The current validation message, or an empty string if not form-associated\n * or if the element is valid.\n *\n * @internal\n */\n get validationMessage(): string {\n if (!(this.constructor as typeof HelixElement).formAssociated) {\n return '';\n }\n return this._internals.validationMessage;\n }\n}\n"],"names":["_HelixElement","LitElement","__privateAdd","_internals","cached","__privateGet","internals","__privateSet","disabled","state","mode","_disabled","_state","_mode","HelixElement"],"mappings":";;;;;;;AAyCO,MAAMA,IAAN,MAAMA,UAAqBC,EAAW;AAAA,EAAtC;AAAA;AAaL,IAAAC,EAAA,MAAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,IAAI,aAA+B;AACjC,UAAMC,IAASC,EAAA,MAAKF;AACpB,QAAIC,MAAW;AACb,aAAOA;AAET,UAAME,IAAY,KAAK,gBAAA;AACvB,WAAAC,EAAA,MAAKJ,GAAaG,IACXA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,qBAAqBE,GAAyB;AAC5C,SAAK,gBAAgBA,CAAQ;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,oBAA0B;AACxB,SAAK,aAAA;AAAA,EACP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,yBACEC,GACAC,GACM;AACN,SAAK,oBAAoBD,GAAOC,CAAI;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcU,gBAAgBC,GAA0B;AAAA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAU3C,eAAqB;AAAA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYtB,oBACRC,GACAC,GACM;AAAA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaT,IAAI,OAA+B;AACjC,WAAM,KAAK,YAAoC,iBAGxC,KAAK,WAAW,OAFd;AAAA,EAGX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,IAAI,WAAiC;AACnC,WAAM,KAAK,YAAoC,iBAGxC,KAAK,WAAW,WAFd;AAAA,EAGX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,oBAA4B;AAC9B,WAAM,KAAK,YAAoC,iBAGxC,KAAK,WAAW,oBAFd;AAAA,EAGX;AACF;AA/IEV,IAAA,eAFAH,EAAO,iBAAiB;AAXnB,IAAMc,IAANd;"}
|