dap-design-system 0.62.4 → 0.63.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -1
- package/dist/common/utils.js +46 -46
- package/dist/common/utils.js.map +1 -1
- package/dist/components/accordion/accordion-base-element.js +15 -19
- package/dist/components/accordion/accordion-base-element.js.map +1 -1
- package/dist/components/accordion/accordion.component.d.ts +1 -0
- package/dist/components/accordion/accordion.component.js.map +1 -1
- package/dist/components/accordion-group/accordion-group.component.js +20 -24
- package/dist/components/accordion-group/accordion-group.component.js.map +1 -1
- package/dist/components/anchor-heading/anchor-heading.component.d.ts +1 -0
- package/dist/components/anchor-heading/anchor-heading.component.js +20 -23
- package/dist/components/anchor-heading/anchor-heading.component.js.map +1 -1
- package/dist/components/avatar/avatar.component.js +51 -55
- package/dist/components/avatar/avatar.component.js.map +1 -1
- package/dist/components/avatar-group/avatar-group.component.js +18 -22
- package/dist/components/avatar-group/avatar-group.component.js.map +1 -1
- package/dist/components/badge/badge.component.js +17 -20
- package/dist/components/badge/badge.component.js.map +1 -1
- package/dist/components/banner/banner.component.d.ts +1 -1
- package/dist/components/banner/banner.component.js +18 -24
- package/dist/components/banner/banner.component.js.map +1 -1
- package/dist/components/breadcrumb/breadcrumb.component.d.ts +2 -1
- package/dist/components/breadcrumb/breadcrumb.component.js +32 -32
- package/dist/components/breadcrumb/breadcrumb.component.js.map +1 -1
- package/dist/components/breadcrumb-item/breadcrumb-item.component.d.ts +8 -0
- package/dist/components/breadcrumb-item/breadcrumb-item.component.js +33 -28
- package/dist/components/breadcrumb-item/breadcrumb-item.component.js.map +1 -1
- package/dist/components/button/_styles/button.scss.js +1 -1
- package/dist/components/button/button.component.js +18 -22
- package/dist/components/button/button.component.js.map +1 -1
- package/dist/components/button-group/_styles/button-group-separator.scss.js +5 -0
- package/dist/components/button-group/_styles/button-group-separator.scss.js.map +1 -0
- package/dist/components/button-group/_styles/button-group-text.scss.js +5 -0
- package/dist/components/button-group/_styles/button-group-text.scss.js.map +1 -0
- package/dist/components/button-group/_styles/button-group.scss.js +5 -0
- package/dist/components/button-group/_styles/button-group.scss.js.map +1 -0
- package/dist/components/button-group/button-group-separator.component.d.ts +28 -0
- package/dist/components/button-group/button-group-separator.component.js +18 -0
- package/dist/components/button-group/button-group-separator.component.js.map +1 -0
- package/dist/components/button-group/button-group-separator.d.ts +8 -0
- package/dist/components/button-group/button-group-separator.js +6 -0
- package/dist/components/button-group/button-group-separator.js.map +1 -0
- package/dist/components/button-group/button-group-text.component.d.ts +33 -0
- package/dist/components/button-group/button-group-text.component.js +17 -0
- package/dist/components/button-group/button-group-text.component.js.map +1 -0
- package/dist/components/button-group/button-group-text.d.ts +8 -0
- package/dist/components/button-group/button-group-text.js +6 -0
- package/dist/components/button-group/button-group-text.js.map +1 -0
- package/dist/components/button-group/button-group.component.d.ts +52 -0
- package/dist/components/button-group/button-group.component.js +30 -0
- package/dist/components/button-group/button-group.component.js.map +1 -0
- package/dist/components/button-group/button-group.d.ts +8 -0
- package/dist/components/button-group/button-group.js +6 -0
- package/dist/components/button-group/button-group.js.map +1 -0
- package/dist/components/calendar/calendar-cell.component.js +26 -29
- package/dist/components/calendar/calendar-cell.component.js.map +1 -1
- package/dist/components/calendar/calendar.component.d.ts +10 -1
- package/dist/components/calendar/calendar.component.js +37 -46
- package/dist/components/calendar/calendar.component.js.map +1 -1
- package/dist/components/callout/callout.component.d.ts +4 -0
- package/dist/components/callout/callout.component.js +71 -69
- package/dist/components/callout/callout.component.js.map +1 -1
- package/dist/components/card/card-actions.component.js +8 -11
- package/dist/components/card/card-actions.component.js.map +1 -1
- package/dist/components/card/card-content.component.js +20 -23
- package/dist/components/card/card-content.component.js.map +1 -1
- package/dist/components/card/card-image.component.js +18 -21
- package/dist/components/card/card-image.component.js.map +1 -1
- package/dist/components/card/card-subtitle.component.js +18 -21
- package/dist/components/card/card-subtitle.component.js.map +1 -1
- package/dist/components/card/card-title.component.js +18 -21
- package/dist/components/card/card-title.component.js.map +1 -1
- package/dist/components/card/card.component.d.ts +1 -0
- package/dist/components/card/card.component.js +25 -28
- package/dist/components/card/card.component.js.map +1 -1
- package/dist/components/checkbox/_styles/checkbox.scss.js +1 -1
- package/dist/components/checkbox/checkbox.component.d.ts +7 -1
- package/dist/components/checkbox/checkbox.component.js +71 -74
- package/dist/components/checkbox/checkbox.component.js.map +1 -1
- package/dist/components/chip/chip.component.d.ts +1 -0
- package/dist/components/chip/chip.component.js +21 -26
- package/dist/components/chip/chip.component.js.map +1 -1
- package/dist/components/code-puncher/code-puncher-slot.component.js +34 -38
- package/dist/components/code-puncher/code-puncher-slot.component.js.map +1 -1
- package/dist/components/code-puncher/code-puncher.component.d.ts +4 -0
- package/dist/components/code-puncher/code-puncher.component.js +97 -102
- package/dist/components/code-puncher/code-puncher.component.js.map +1 -1
- package/dist/components/code-puncher/code-puncher.context.js +1 -1
- package/dist/components/code-puncher/code-puncher.context.js.map +1 -1
- package/dist/components/code-puncher/code-puncher.scss.js +1 -1
- package/dist/components/combobox/combobox.component.d.ts +9 -1
- package/dist/components/combobox/combobox.component.js.map +1 -1
- package/dist/components/combobox/combobox.scss.js +1 -1
- package/dist/components/combobox/comboboxBase.d.ts +21 -0
- package/dist/components/combobox/comboboxBase.js +176 -139
- package/dist/components/combobox/comboboxBase.js.map +1 -1
- package/dist/components/command/command-group.component.js +19 -23
- package/dist/components/command/command-group.component.js.map +1 -1
- package/dist/components/command/command-item.component.js +17 -22
- package/dist/components/command/command-item.component.js.map +1 -1
- package/dist/components/command/command.component.d.ts +3 -0
- package/dist/components/command/command.component.js +28 -33
- package/dist/components/command/command.component.js.map +1 -1
- package/dist/components/content-switcher/content-switcher-item.component.js +16 -19
- package/dist/components/content-switcher/content-switcher-item.component.js.map +1 -1
- package/dist/components/content-switcher/content-switcher.component.js +19 -22
- package/dist/components/content-switcher/content-switcher.component.js.map +1 -1
- package/dist/components/copybox-input/copybox-input.component.d.ts +11 -0
- package/dist/components/copybox-input/copybox-input.component.js +12 -16
- package/dist/components/copybox-input/copybox-input.component.js.map +1 -1
- package/dist/components/dap-badge/dap-badge.component.js +13 -18
- package/dist/components/dap-badge/dap-badge.component.js.map +1 -1
- package/dist/components/datatable/datatable.component.d.ts +17 -0
- package/dist/components/datatable/datatable.component.js +38 -42
- package/dist/components/datatable/datatable.component.js.map +1 -1
- package/dist/components/datatable/utils/cell-renderer.js +6 -8
- package/dist/components/datatable/utils/cell-renderer.js.map +1 -1
- package/dist/components/datepicker/datepicker.component.d.ts +8 -0
- package/dist/components/datepicker/datepicker.component.js +76 -81
- package/dist/components/datepicker/datepicker.component.js.map +1 -1
- package/dist/components/datepicker/datepicker.scss.js +1 -1
- package/dist/components/divider/divider.component.js +18 -21
- package/dist/components/divider/divider.component.js.map +1 -1
- package/dist/components/feedback/feedback.component.js +8 -11
- package/dist/components/feedback/feedback.component.js.map +1 -1
- package/dist/components/file-input/file-input-list-item.component.d.ts +1 -0
- package/dist/components/file-input/file-input-list-item.component.js +36 -40
- package/dist/components/file-input/file-input-list-item.component.js.map +1 -1
- package/dist/components/file-input/file-input-list.component.js +15 -20
- package/dist/components/file-input/file-input-list.component.js.map +1 -1
- package/dist/components/file-input/file-input-list.scss.js +1 -1
- package/dist/components/file-input/file-input.component.d.ts +3 -0
- package/dist/components/file-input/file-input.component.js +135 -142
- package/dist/components/file-input/file-input.component.js.map +1 -1
- package/dist/components/file-input/file-input.scss.js +1 -1
- package/dist/components/form/form-label/form-label.component.d.ts +1 -1
- package/dist/components/form/form-label/form-label.component.js +20 -23
- package/dist/components/form/form-label/form-label.component.js.map +1 -1
- package/dist/components/form/input-group/input-group.component.d.ts +4 -0
- package/dist/components/form/input-group/input-group.component.js +42 -42
- package/dist/components/form/input-group/input-group.component.js.map +1 -1
- package/dist/components/form/input-group/input-group.scss.js +2 -2
- package/dist/components/form/radio-group/radio-group.component.d.ts +5 -0
- package/dist/components/form/radio-group/radio-group.component.js +54 -55
- package/dist/components/form/radio-group/radio-group.component.js.map +1 -1
- package/dist/components/icon/icon.component.js +25 -28
- package/dist/components/icon/icon.component.js.map +1 -1
- package/dist/components/icon-button/icon-button.component.d.ts +1 -0
- package/dist/components/icon-button/icon-button.component.js +11 -14
- package/dist/components/icon-button/icon-button.component.js.map +1 -1
- package/dist/components/icon-button/icon-button.scss.js +1 -1
- package/dist/components/icons/arrows/arrows-arrow-down-line/arrows-arrow-down-line.component.js +9 -12
- package/dist/components/icons/arrows/arrows-arrow-down-line/arrows-arrow-down-line.component.js.map +1 -1
- package/dist/components/icons/arrows/arrows-arrow-down-s-fill/arrows-arrow-down-s-fill.component.js +7 -10
- package/dist/components/icons/arrows/arrows-arrow-down-s-fill/arrows-arrow-down-s-fill.component.js.map +1 -1
- package/dist/components/icons/arrows/arrows-arrow-down-s-line/arrows-arrow-down-s-line.component.js +12 -15
- package/dist/components/icons/arrows/arrows-arrow-down-s-line/arrows-arrow-down-s-line.component.js.map +1 -1
- package/dist/components/icons/arrows/arrows-arrow-left-down-line/arrows-arrow-left-down-line.component.js +8 -11
- package/dist/components/icons/arrows/arrows-arrow-left-down-line/arrows-arrow-left-down-line.component.js.map +1 -1
- package/dist/components/icons/arrows/arrows-arrow-left-l-line/arrows-arrow-left-l-line.component.js +15 -18
- package/dist/components/icons/arrows/arrows-arrow-left-l-line/arrows-arrow-left-l-line.component.js.map +1 -1
- package/dist/components/icons/arrows/arrows-arrow-left-line/arrows-arrow-left-line.component.js +7 -10
- package/dist/components/icons/arrows/arrows-arrow-left-line/arrows-arrow-left-line.component.js.map +1 -1
- package/dist/components/icons/arrows/arrows-arrow-left-s-fill/arrows-arrow-left-s-fill.component.js +10 -13
- package/dist/components/icons/arrows/arrows-arrow-left-s-fill/arrows-arrow-left-s-fill.component.js.map +1 -1
- package/dist/components/icons/arrows/arrows-arrow-left-s-line/arrows-arrow-left-s-line.component.js +7 -10
- package/dist/components/icons/arrows/arrows-arrow-left-s-line/arrows-arrow-left-s-line.component.js.map +1 -1
- package/dist/components/icons/arrows/arrows-arrow-left-up-line/arrows-arrow-left-up-line.component.js +6 -9
- package/dist/components/icons/arrows/arrows-arrow-left-up-line/arrows-arrow-left-up-line.component.js.map +1 -1
- package/dist/components/icons/arrows/arrows-arrow-right-down-line/arrows-arrow-right-down-line.component.js +18 -21
- package/dist/components/icons/arrows/arrows-arrow-right-down-line/arrows-arrow-right-down-line.component.js.map +1 -1
- package/dist/components/icons/arrows/arrows-arrow-right-l-line/arrows-arrow-right-l-line.component.js +15 -18
- package/dist/components/icons/arrows/arrows-arrow-right-l-line/arrows-arrow-right-l-line.component.js.map +1 -1
- package/dist/components/icons/arrows/arrows-arrow-right-line/arrows-arrow-right-line.component.js +17 -20
- package/dist/components/icons/arrows/arrows-arrow-right-line/arrows-arrow-right-line.component.js.map +1 -1
- package/dist/components/icons/arrows/arrows-arrow-right-s-fill/arrows-arrow-right-s-fill.component.js +17 -20
- package/dist/components/icons/arrows/arrows-arrow-right-s-fill/arrows-arrow-right-s-fill.component.js.map +1 -1
- package/dist/components/icons/arrows/arrows-arrow-right-s-line/arrows-arrow-right-s-line.component.js +17 -20
- package/dist/components/icons/arrows/arrows-arrow-right-s-line/arrows-arrow-right-s-line.component.js.map +1 -1
- package/dist/components/icons/arrows/arrows-arrow-right-up-line/arrows-arrow-right-up-line.component.js +18 -21
- package/dist/components/icons/arrows/arrows-arrow-right-up-line/arrows-arrow-right-up-line.component.js.map +1 -1
- package/dist/components/icons/arrows/arrows-arrow-up-line/arrows-arrow-up-line.component.js +9 -12
- package/dist/components/icons/arrows/arrows-arrow-up-line/arrows-arrow-up-line.component.js.map +1 -1
- package/dist/components/icons/arrows/arrows-arrow-up-s-fill/arrows-arrow-up-s-fill.component.js +8 -11
- package/dist/components/icons/arrows/arrows-arrow-up-s-fill/arrows-arrow-up-s-fill.component.js.map +1 -1
- package/dist/components/icons/arrows/arrows-arrow-up-s-line/arrows-arrow-up-s-line.component.js +9 -12
- package/dist/components/icons/arrows/arrows-arrow-up-s-line/arrows-arrow-up-s-line.component.js.map +1 -1
- package/dist/components/icons/arrows/arrows-expand-up-down-fill/arrows-expand-up-down-fill.component.js +11 -14
- package/dist/components/icons/arrows/arrows-expand-up-down-fill/arrows-expand-up-down-fill.component.js.map +1 -1
- package/dist/components/icons/buildings/buildings-home-6-line/buildings-home-6-line.component.js +10 -13
- package/dist/components/icons/buildings/buildings-home-6-line/buildings-home-6-line.component.js.map +1 -1
- package/dist/components/icons/business/business-calendar-line/business-calendar-line.component.js +11 -14
- package/dist/components/icons/business/business-calendar-line/business-calendar-line.component.js.map +1 -1
- package/dist/components/icons/design/design-edit-line/design-edit-line.component.js +6 -9
- package/dist/components/icons/design/design-edit-line/design-edit-line.component.js.map +1 -1
- package/dist/components/icons/design/design-tools-line/design-tools-line.component.js +12 -15
- package/dist/components/icons/design/design-tools-line/design-tools-line.component.js.map +1 -1
- package/dist/components/icons/device/device-computer-line/device-computer-line.component.js +16 -19
- package/dist/components/icons/device/device-computer-line/device-computer-line.component.js.map +1 -1
- package/dist/components/icons/document/document-clipboard-line/document-clipboard-line.component.js +11 -14
- package/dist/components/icons/document/document-clipboard-line/document-clipboard-line.component.js.map +1 -1
- package/dist/components/icons/document/document-file-copy-line/document-file-copy-line.component.js +10 -13
- package/dist/components/icons/document/document-file-copy-line/document-file-copy-line.component.js.map +1 -1
- package/dist/components/icons/document/document-file-image-line/document-file-image-line.component.js +11 -14
- package/dist/components/icons/document/document-file-image-line/document-file-image-line.component.js.map +1 -1
- package/dist/components/icons/document/document-file-music-line/document-file-music-line.component.js +11 -14
- package/dist/components/icons/document/document-file-music-line/document-file-music-line.component.js.map +1 -1
- package/dist/components/icons/document/document-file-text-line/document-file-text-line.component.js +10 -13
- package/dist/components/icons/document/document-file-text-line/document-file-text-line.component.js.map +1 -1
- package/dist/components/icons/document/document-file-video-line/document-file-video-line.component.js +11 -14
- package/dist/components/icons/document/document-file-video-line/document-file-video-line.component.js.map +1 -1
- package/dist/components/icons/document/document-folder-line/document-folder-line.component.js +11 -14
- package/dist/components/icons/document/document-folder-line/document-folder-line.component.js.map +1 -1
- package/dist/components/icons/document/document-folder-open-line/document-folder-open-line.component.js +10 -13
- package/dist/components/icons/document/document-folder-open-line/document-folder-open-line.component.js.map +1 -1
- package/dist/components/icons/editor/editor-separator/editor-separator.component.js +10 -13
- package/dist/components/icons/editor/editor-separator/editor-separator.component.js.map +1 -1
- package/dist/components/icons/health/health-heart-fill/health-heart-fill.component.js +8 -11
- package/dist/components/icons/health/health-heart-fill/health-heart-fill.component.js.map +1 -1
- package/dist/components/icons/health/health-heart-line/health-heart-line.component.js +10 -13
- package/dist/components/icons/health/health-heart-line/health-heart-line.component.js.map +1 -1
- package/dist/components/icons/others/others-cookie-line/others-cookie-line.component.js +6 -9
- package/dist/components/icons/others/others-cookie-line/others-cookie-line.component.js.map +1 -1
- package/dist/components/icons/system/system-add-line/system-add-line.component.js +11 -14
- package/dist/components/icons/system/system-add-line/system-add-line.component.js.map +1 -1
- package/dist/components/icons/system/system-alert-fill/system-alert-fill.component.js +9 -12
- package/dist/components/icons/system/system-alert-fill/system-alert-fill.component.js.map +1 -1
- package/dist/components/icons/system/system-alert-line/system-alert-line.component.js +11 -14
- package/dist/components/icons/system/system-alert-line/system-alert-line.component.js.map +1 -1
- package/dist/components/icons/system/system-check-line/system-check-line.component.js +9 -12
- package/dist/components/icons/system/system-check-line/system-check-line.component.js.map +1 -1
- package/dist/components/icons/system/system-check-line2/system-check-line2.component.js +11 -14
- package/dist/components/icons/system/system-check-line2/system-check-line2.component.js.map +1 -1
- package/dist/components/icons/system/system-checkbox-blank-circle-fill/system-checkbox-blank-circle-fill.component.js +9 -12
- package/dist/components/icons/system/system-checkbox-blank-circle-fill/system-checkbox-blank-circle-fill.component.js.map +1 -1
- package/dist/components/icons/system/system-checkbox-blank-circle-fill-check/system-checkbox-blank-circle-fill-check.component.js +12 -15
- package/dist/components/icons/system/system-checkbox-blank-circle-fill-check/system-checkbox-blank-circle-fill-check.component.js.map +1 -1
- package/dist/components/icons/system/system-checkbox-blank-circle-line/system-checkbox-blank-circle-line.component.js +13 -16
- package/dist/components/icons/system/system-checkbox-blank-circle-line/system-checkbox-blank-circle-line.component.js.map +1 -1
- package/dist/components/icons/system/system-checkbox-circle-fill/system-checkbox-circle-fill.component.js +11 -14
- package/dist/components/icons/system/system-checkbox-circle-fill/system-checkbox-circle-fill.component.js.map +1 -1
- package/dist/components/icons/system/system-checkbox-circle-line/system-checkbox-circle-line.component.js +11 -14
- package/dist/components/icons/system/system-checkbox-circle-line/system-checkbox-circle-line.component.js.map +1 -1
- package/dist/components/icons/system/system-close-circle-fill/system-close-circle-fill.component.js +11 -14
- package/dist/components/icons/system/system-close-circle-fill/system-close-circle-fill.component.js.map +1 -1
- package/dist/components/icons/system/system-close-circle-line/system-close-circle-line.component.js +7 -10
- package/dist/components/icons/system/system-close-circle-line/system-close-circle-line.component.js.map +1 -1
- package/dist/components/icons/system/system-close-fill/system-close-fill.component.js +11 -14
- package/dist/components/icons/system/system-close-fill/system-close-fill.component.js.map +1 -1
- package/dist/components/icons/system/system-close-line/system-close-line.component.js +11 -14
- package/dist/components/icons/system/system-close-line/system-close-line.component.js.map +1 -1
- package/dist/components/icons/system/system-delete-bin-fill/system-delete-bin-fill.component.js +7 -10
- package/dist/components/icons/system/system-delete-bin-fill/system-delete-bin-fill.component.js.map +1 -1
- package/dist/components/icons/system/system-delete-bin-line/system-delete-bin-line.component.js +9 -12
- package/dist/components/icons/system/system-delete-bin-line/system-delete-bin-line.component.js.map +1 -1
- package/dist/components/icons/system/system-download-line/system-download-line.component.js +9 -12
- package/dist/components/icons/system/system-download-line/system-download-line.component.js.map +1 -1
- package/dist/components/icons/system/system-error-warning-fill/system-error-warning-fill.component.js +7 -10
- package/dist/components/icons/system/system-error-warning-fill/system-error-warning-fill.component.js.map +1 -1
- package/dist/components/icons/system/system-error-warning-line/system-error-warning-line.component.js +11 -14
- package/dist/components/icons/system/system-error-warning-line/system-error-warning-line.component.js.map +1 -1
- package/dist/components/icons/system/system-external-link-line/system-external-link-line.component.js +9 -12
- package/dist/components/icons/system/system-external-link-line/system-external-link-line.component.js.map +1 -1
- package/dist/components/icons/system/system-eye-line/system-eye-line.component.js +11 -14
- package/dist/components/icons/system/system-eye-line/system-eye-line.component.js.map +1 -1
- package/dist/components/icons/system/system-eye-off-line/system-eye-off-line.component.js +6 -9
- package/dist/components/icons/system/system-eye-off-line/system-eye-off-line.component.js.map +1 -1
- package/dist/components/icons/system/system-forbid-fill/system-forbid-fill.component.js +9 -12
- package/dist/components/icons/system/system-forbid-fill/system-forbid-fill.component.js.map +1 -1
- package/dist/components/icons/system/system-information-2-fill/system-information-2-fill.component.js +9 -12
- package/dist/components/icons/system/system-information-2-fill/system-information-2-fill.component.js.map +1 -1
- package/dist/components/icons/system/system-information-fill/system-information-fill.component.js +9 -12
- package/dist/components/icons/system/system-information-fill/system-information-fill.component.js.map +1 -1
- package/dist/components/icons/system/system-information-line/system-information-line.component.js +9 -12
- package/dist/components/icons/system/system-information-line/system-information-line.component.js.map +1 -1
- package/dist/components/icons/system/system-lightbulb-fill/system-lightbulb-fill.component.js +9 -12
- package/dist/components/icons/system/system-lightbulb-fill/system-lightbulb-fill.component.js.map +1 -1
- package/dist/components/icons/system/system-loading-spinner/system-loading-spinner.component.js +9 -12
- package/dist/components/icons/system/system-loading-spinner/system-loading-spinner.component.js.map +1 -1
- package/dist/components/icons/system/system-lock-fill/system-lock-fill.component.js +13 -16
- package/dist/components/icons/system/system-lock-fill/system-lock-fill.component.js.map +1 -1
- package/dist/components/icons/system/system-lock-line/system-lock-line.component.js +10 -13
- package/dist/components/icons/system/system-lock-line/system-lock-line.component.js.map +1 -1
- package/dist/components/icons/system/system-menu-line/system-menu-line.component.js +9 -12
- package/dist/components/icons/system/system-menu-line/system-menu-line.component.js.map +1 -1
- package/dist/components/icons/system/system-menu-line-s/system-menu-line-s.component.js +9 -12
- package/dist/components/icons/system/system-menu-line-s/system-menu-line-s.component.js.map +1 -1
- package/dist/components/icons/system/system-more-2-line/system-more-2-line.component.js +10 -13
- package/dist/components/icons/system/system-more-2-line/system-more-2-line.component.js.map +1 -1
- package/dist/components/icons/system/system-more-line/system-more-line.component.js +16 -19
- package/dist/components/icons/system/system-more-line/system-more-line.component.js.map +1 -1
- package/dist/components/icons/system/system-search-line/system-search-line.component.js +11 -14
- package/dist/components/icons/system/system-search-line/system-search-line.component.js.map +1 -1
- package/dist/components/icons/system/system-share-line/system-share-line.component.js +9 -12
- package/dist/components/icons/system/system-share-line/system-share-line.component.js.map +1 -1
- package/dist/components/icons/system/system-shield-check-fill/system-shield-check-fill.component.js +8 -11
- package/dist/components/icons/system/system-shield-check-fill/system-shield-check-fill.component.js.map +1 -1
- package/dist/components/icons/system/system-shield-check-line/system-shield-check-line.component.js +6 -9
- package/dist/components/icons/system/system-shield-check-line/system-shield-check-line.component.js.map +1 -1
- package/dist/components/icons/system/system-star-fill/system-star-fill.component.js +13 -16
- package/dist/components/icons/system/system-star-fill/system-star-fill.component.js.map +1 -1
- package/dist/components/icons/system/system-subtract-line/system-subtract-line.component.js +11 -14
- package/dist/components/icons/system/system-subtract-line/system-subtract-line.component.js.map +1 -1
- package/dist/components/icons/system/system-subtract-line2/system-subtract-line2.component.js +7 -10
- package/dist/components/icons/system/system-subtract-line2/system-subtract-line2.component.js.map +1 -1
- package/dist/components/icons/system/system-time-fill/system-time-fill.component.js +11 -14
- package/dist/components/icons/system/system-time-fill/system-time-fill.component.js.map +1 -1
- package/dist/components/icons/system/system-time-line/system-time-line.component.js +11 -14
- package/dist/components/icons/system/system-time-line/system-time-line.component.js.map +1 -1
- package/dist/components/icons/system/system-upload-2-fill/system-upload-2-fill.component.js +5 -8
- package/dist/components/icons/system/system-upload-2-fill/system-upload-2-fill.component.js.map +1 -1
- package/dist/components/icons/system/system-upload-2-line/system-upload-2-line.component.js +7 -10
- package/dist/components/icons/system/system-upload-2-line/system-upload-2-line.component.js.map +1 -1
- package/dist/components/icons/system/system-upload-line/system-upload-line.component.js +9 -12
- package/dist/components/icons/system/system-upload-line/system-upload-line.component.js.map +1 -1
- package/dist/components/icons/system/system-zoom-in-line/system-zoom-in-line.component.js +9 -12
- package/dist/components/icons/system/system-zoom-in-line/system-zoom-in-line.component.js.map +1 -1
- package/dist/components/icons/system/system-zoom-out-line/system-zoom-out-line.component.js +11 -14
- package/dist/components/icons/system/system-zoom-out-line/system-zoom-out-line.component.js.map +1 -1
- package/dist/components/icons/user/user-account-circle-fill/user-account-circle-fill.component.js +16 -19
- package/dist/components/icons/user/user-account-circle-fill/user-account-circle-fill.component.js.map +1 -1
- package/dist/components/icons/user/user-account-circle-line/user-account-circle-line.component.js +13 -16
- package/dist/components/icons/user/user-account-circle-line/user-account-circle-line.component.js.map +1 -1
- package/dist/components/icons/user/user-user-fill/user-user-fill.component.js +8 -11
- package/dist/components/icons/user/user-user-fill/user-user-fill.component.js.map +1 -1
- package/dist/components/icons/user/user-user-line/user-user-line.component.js +11 -14
- package/dist/components/icons/user/user-user-line/user-user-line.component.js.map +1 -1
- package/dist/components/image-zoom/image-zoom.component.js +12 -17
- package/dist/components/image-zoom/image-zoom.component.js.map +1 -1
- package/dist/components/input/_styles/input.scss.js +1 -1
- package/dist/components/input/input-base-element.js +41 -47
- package/dist/components/input/input-base-element.js.map +1 -1
- package/dist/components/label/_styles/label.scss.js +1 -1
- package/dist/components/label/label.component.js +8 -11
- package/dist/components/label/label.component.js.map +1 -1
- package/dist/components/link/link.component.js +23 -27
- package/dist/components/link/link.component.js.map +1 -1
- package/dist/components/list-item/list-item.component.d.ts +2 -0
- package/dist/components/list-item/list-item.component.js +24 -29
- package/dist/components/list-item/list-item.component.js.map +1 -1
- package/dist/components/modal/modal-base-element.js +36 -42
- package/dist/components/modal/modal-base-element.js.map +1 -1
- package/dist/components/navigation-menu/navigation-menu-item.component.d.ts +9 -1
- package/dist/components/navigation-menu/navigation-menu-item.component.js +36 -31
- package/dist/components/navigation-menu/navigation-menu-item.component.js.map +1 -1
- package/dist/components/navigation-menu/navigation-menu.component.js +20 -24
- package/dist/components/navigation-menu/navigation-menu.component.js.map +1 -1
- package/dist/components/notification-badge/notification-badge.component.js +28 -32
- package/dist/components/notification-badge/notification-badge.component.js.map +1 -1
- package/dist/components/number-input/number-input.component.d.ts +7 -0
- package/dist/components/number-input/number-input.component.js +23 -29
- package/dist/components/number-input/number-input.component.js.map +1 -1
- package/dist/components/official-website-banner/official-website-banner.component.d.ts +1 -0
- package/dist/components/official-website-banner/official-website-banner.component.js +19 -24
- package/dist/components/official-website-banner/official-website-banner.component.js.map +1 -1
- package/dist/components/option-group/option-group.component.js +17 -20
- package/dist/components/option-group/option-group.component.js.map +1 -1
- package/dist/components/option-item/option-item.component.d.ts +10 -0
- package/dist/components/option-item/option-item.component.js +66 -60
- package/dist/components/option-item/option-item.component.js.map +1 -1
- package/dist/components/option-item/option-item.scss.js +1 -1
- package/dist/components/option-list/__test__/listbox-harness.d.ts +129 -0
- package/dist/components/option-list/listbox-state.d.ts +230 -0
- package/dist/components/option-list/listbox-state.js +312 -0
- package/dist/components/option-list/listbox-state.js.map +1 -0
- package/dist/components/option-list/option-data.d.ts +35 -0
- package/dist/components/option-list/option-data.js +34 -0
- package/dist/components/option-list/option-data.js.map +1 -0
- package/dist/components/option-list/option-list.component.d.ts +66 -14
- package/dist/components/option-list/option-list.component.js +381 -294
- package/dist/components/option-list/option-list.component.js.map +1 -1
- package/dist/components/overlay/overlay.component.js +10 -13
- package/dist/components/overlay/overlay.component.js.map +1 -1
- package/dist/components/pager/pager.component.js +31 -37
- package/dist/components/pager/pager.component.js.map +1 -1
- package/dist/components/password-input/password-input.component.d.ts +12 -5
- package/dist/components/password-input/password-input.component.js +24 -30
- package/dist/components/password-input/password-input.component.js.map +1 -1
- package/dist/components/popup/popup-base-element.js +21 -25
- package/dist/components/popup/popup-base-element.js.map +1 -1
- package/dist/components/progress/progress.component.js +17 -21
- package/dist/components/progress/progress.component.js.map +1 -1
- package/dist/components/radio-button/_styles/radio-button.scss.js +1 -1
- package/dist/components/radio-button/radio-button.component.d.ts +5 -0
- package/dist/components/radio-button/radio-button.component.js +58 -62
- package/dist/components/radio-button/radio-button.component.js.map +1 -1
- package/dist/components/rating/_styles/rating.scss.js +2 -2
- package/dist/components/rating/rating.component.js +37 -41
- package/dist/components/rating/rating.component.js.map +1 -1
- package/dist/components/scroll-area/scroll-area.component.d.ts +2 -1
- package/dist/components/scroll-area/scroll-area.component.js +25 -28
- package/dist/components/scroll-area/scroll-area.component.js.map +1 -1
- package/dist/components/scroll-progress/scroll-progress.component.js +13 -17
- package/dist/components/scroll-progress/scroll-progress.component.js.map +1 -1
- package/dist/components/search/search.component.d.ts +6 -1
- package/dist/components/search/search.component.js.map +1 -1
- package/dist/components/select/select.component.d.ts +47 -0
- package/dist/components/select/select.component.js +268 -157
- package/dist/components/select/select.component.js.map +1 -1
- package/dist/components/select/select.scss.js +1 -1
- package/dist/components/sidenav/sidenav-group.component.d.ts +1 -0
- package/dist/components/sidenav/sidenav-group.component.js +11 -14
- package/dist/components/sidenav/sidenav-group.component.js.map +1 -1
- package/dist/components/sidenav/sidenav-item.component.js +20 -23
- package/dist/components/sidenav/sidenav-item.component.js.map +1 -1
- package/dist/components/sidenav/sidenav.component.js +17 -20
- package/dist/components/sidenav/sidenav.component.js.map +1 -1
- package/dist/components/skeleton/skeleton.component.js +9 -12
- package/dist/components/skeleton/skeleton.component.js.map +1 -1
- package/dist/components/skip-link/skip-link.component.js +13 -16
- package/dist/components/skip-link/skip-link.component.js.map +1 -1
- package/dist/components/snackbar/snackbar-message.component.d.ts +3 -1
- package/dist/components/snackbar/snackbar-message.component.js +39 -44
- package/dist/components/snackbar/snackbar-message.component.js.map +1 -1
- package/dist/components/snackbar/snackbar.component.d.ts +0 -1
- package/dist/components/snackbar/snackbar.component.js +36 -42
- package/dist/components/snackbar/snackbar.component.js.map +1 -1
- package/dist/components/spinner/spinner.component.js +33 -38
- package/dist/components/spinner/spinner.component.js.map +1 -1
- package/dist/components/stack/stack.component.d.ts +2 -1
- package/dist/components/stack/stack.component.js +16 -19
- package/dist/components/stack/stack.component.js.map +1 -1
- package/dist/components/switch/switch.component.d.ts +6 -0
- package/dist/components/switch/switch.component.js +48 -51
- package/dist/components/switch/switch.component.js.map +1 -1
- package/dist/components/switch/switch.scss.js +1 -1
- package/dist/components/tab/tab-group.component.d.ts +8 -3
- package/dist/components/tab/tab-group.component.js +43 -33
- package/dist/components/tab/tab-group.component.js.map +1 -1
- package/dist/components/tab/tab.component.js +22 -25
- package/dist/components/tab/tab.component.js.map +1 -1
- package/dist/components/table/table-cell.component.d.ts +1 -1
- package/dist/components/table/table-cell.component.js +16 -19
- package/dist/components/table/table-cell.component.js.map +1 -1
- package/dist/components/table/table-header.component.js +21 -24
- package/dist/components/table/table-header.component.js.map +1 -1
- package/dist/components/table/table-row.component.js +15 -18
- package/dist/components/table/table-row.component.js.map +1 -1
- package/dist/components/table/table.component.d.ts +2 -0
- package/dist/components/table/table.component.js +18 -22
- package/dist/components/table/table.component.js.map +1 -1
- package/dist/components/textarea/textarea.component.d.ts +2 -0
- package/dist/components/textarea/textarea.component.js +42 -46
- package/dist/components/textarea/textarea.component.js.map +1 -1
- package/dist/components/textarea/textarea.scss.js +1 -1
- package/dist/components/timeline/timeline-item.component.js +7 -10
- package/dist/components/timeline/timeline-item.component.js.map +1 -1
- package/dist/components/timeline/timeline.component.js +5 -8
- package/dist/components/timeline/timeline.component.js.map +1 -1
- package/dist/components/timepicker/time-grid.component.d.ts +3 -0
- package/dist/components/timepicker/time-grid.component.js +12 -15
- package/dist/components/timepicker/time-grid.component.js.map +1 -1
- package/dist/components/timepicker/timepicker.component.d.ts +5 -0
- package/dist/components/timepicker/timepicker.component.js +90 -95
- package/dist/components/timepicker/timepicker.component.js.map +1 -1
- package/dist/components/timepicker/timepicker.scss.js +1 -1
- package/dist/components/toc/toc.component.d.ts +2 -0
- package/dist/components/toc/toc.component.js +58 -61
- package/dist/components/toc/toc.component.js.map +1 -1
- package/dist/components/toggle-button/toggle-button.component.js +9 -12
- package/dist/components/toggle-button/toggle-button.component.js.map +1 -1
- package/dist/components/tooltip/tooltip.component.d.ts +2 -0
- package/dist/components/tooltip/tooltip.component.js +16 -18
- package/dist/components/tooltip/tooltip.component.js.map +1 -1
- package/dist/components/tray/tray.component.d.ts +4 -1
- package/dist/components/tray/tray.component.js +13 -16
- package/dist/components/tray/tray.component.js.map +1 -1
- package/dist/components/typography/typography.component.js +38 -41
- package/dist/components/typography/typography.component.js.map +1 -1
- package/dist/components.d.ts +3 -0
- package/dist/components.js +204 -195
- package/dist/components.js.map +1 -1
- package/dist/components.native.css +5 -2
- package/dist/components.native.css.map +1 -1
- package/dist/dap-design-system.d.ts +3 -0
- package/dist/dds-preupgrade.css +57 -0
- package/dist/dds.js +383 -374
- package/dist/dds.js.map +1 -1
- package/dist/internal/dds-hu-element.d.ts +8 -0
- package/dist/internal/dds-hu-element.js +40 -41
- package/dist/internal/dds-hu-element.js.map +1 -1
- package/dist/internal/mixin/choiceElementMixin.js +7 -7
- package/dist/internal/mixin/feedbackMixin.js +13 -15
- package/dist/internal/mixin/feedbackMixin.js.map +1 -1
- package/dist/internal/mixin/focusableMixin.js +6 -6
- package/dist/internal/mixin/formElementMixin.js +1 -1
- package/dist/internal/mixin/labelPositionedMixin.js +1 -1
- package/dist/internal/mixin/labelableMixin.d.ts +1 -1
- package/dist/internal/mixin/labelableMixin.js +61 -63
- package/dist/internal/mixin/labelableMixin.js.map +1 -1
- package/dist/internal/mixin/sizedMixin.js +29 -27
- package/dist/internal/mixin/sizedMixin.js.map +1 -1
- package/dist/internal/templates/formLabel.d.ts +41 -0
- package/dist/internal/templates/formLabel.js +47 -0
- package/dist/internal/templates/formLabel.js.map +1 -0
- package/dist/localization/localization.d.ts +1 -2
- package/dist/localization/localization.js +77 -76
- package/dist/localization/localization.js.map +1 -1
- package/dist/localization/localize-controller.d.ts +12 -0
- package/dist/localization/localize-controller.js +51 -0
- package/dist/localization/localize-controller.js.map +1 -0
- package/dist/manifest/types/vue/index.d.ts +527 -312
- package/dist/manifest/vscode.html-custom-data.json +333 -279
- package/dist/manifest/web-types.json +723 -619
- package/dist/react/dap-ds-accordion/index.d.ts +1 -0
- package/dist/react/dap-ds-accordion/index.js.map +1 -1
- package/dist/react/dap-ds-anchor-heading/index.d.ts +1 -0
- package/dist/react/dap-ds-anchor-heading/index.js.map +1 -1
- package/dist/react/dap-ds-banner/index.d.ts +1 -1
- package/dist/react/dap-ds-banner/index.js.map +1 -1
- package/dist/react/dap-ds-breadcrumb/index.d.ts +1 -1
- package/dist/react/dap-ds-breadcrumb/index.js.map +1 -1
- package/dist/react/dap-ds-button-group/index.d.ts +45 -0
- package/dist/react/dap-ds-button-group/index.js +15 -0
- package/dist/react/dap-ds-button-group/index.js.map +1 -0
- package/dist/react/dap-ds-button-group-separator/index.d.ts +24 -0
- package/dist/react/dap-ds-button-group-separator/index.js +15 -0
- package/dist/react/dap-ds-button-group-separator/index.js.map +1 -0
- package/dist/react/dap-ds-button-group-text/index.d.ts +30 -0
- package/dist/react/dap-ds-button-group-text/index.js +15 -0
- package/dist/react/dap-ds-button-group-text/index.js.map +1 -0
- package/dist/react/dap-ds-calendar/index.d.ts +3 -0
- package/dist/react/dap-ds-calendar/index.js.map +1 -1
- package/dist/react/dap-ds-callout/index.d.ts +1 -0
- package/dist/react/dap-ds-callout/index.js.map +1 -1
- package/dist/react/dap-ds-card/index.d.ts +1 -0
- package/dist/react/dap-ds-card/index.js.map +1 -1
- package/dist/react/dap-ds-checkbox/index.d.ts +7 -1
- package/dist/react/dap-ds-checkbox/index.js.map +1 -1
- package/dist/react/dap-ds-chip/index.d.ts +1 -0
- package/dist/react/dap-ds-chip/index.js.map +1 -1
- package/dist/react/dap-ds-code-puncher/index.d.ts +4 -0
- package/dist/react/dap-ds-code-puncher/index.js.map +1 -1
- package/dist/react/dap-ds-combobox/index.d.ts +9 -1
- package/dist/react/dap-ds-combobox/index.js.map +1 -1
- package/dist/react/dap-ds-command/index.d.ts +3 -0
- package/dist/react/dap-ds-command/index.js.map +1 -1
- package/dist/react/dap-ds-copybox-input/index.d.ts +11 -0
- package/dist/react/dap-ds-copybox-input/index.js.map +1 -1
- package/dist/react/dap-ds-datatable/index.d.ts +17 -0
- package/dist/react/dap-ds-datatable/index.js.map +1 -1
- package/dist/react/dap-ds-datepicker/index.d.ts +8 -0
- package/dist/react/dap-ds-datepicker/index.js.map +1 -1
- package/dist/react/dap-ds-file-input/index.d.ts +3 -0
- package/dist/react/dap-ds-file-input/index.js.map +1 -1
- package/dist/react/dap-ds-file-input-list-item/index.d.ts +1 -0
- package/dist/react/dap-ds-file-input-list-item/index.js.map +1 -1
- package/dist/react/dap-ds-form-label/index.d.ts +1 -1
- package/dist/react/dap-ds-form-label/index.js.map +1 -1
- package/dist/react/dap-ds-icon-button/index.d.ts +1 -0
- package/dist/react/dap-ds-icon-button/index.js.map +1 -1
- package/dist/react/dap-ds-input-group/index.d.ts +4 -0
- package/dist/react/dap-ds-input-group/index.js.map +1 -1
- package/dist/react/dap-ds-list-item/index.d.ts +2 -0
- package/dist/react/dap-ds-list-item/index.js.map +1 -1
- package/dist/react/dap-ds-number-input/index.d.ts +7 -0
- package/dist/react/dap-ds-number-input/index.js.map +1 -1
- package/dist/react/dap-ds-official-website-banner/index.d.ts +1 -0
- package/dist/react/dap-ds-official-website-banner/index.js.map +1 -1
- package/dist/react/dap-ds-option-item/index.d.ts +1 -0
- package/dist/react/dap-ds-option-item/index.js.map +1 -1
- package/dist/react/dap-ds-option-list/index.d.ts +1 -1
- package/dist/react/dap-ds-option-list/index.js.map +1 -1
- package/dist/react/dap-ds-password-input/index.d.ts +12 -5
- package/dist/react/dap-ds-password-input/index.js.map +1 -1
- package/dist/react/dap-ds-radio-button/index.d.ts +5 -0
- package/dist/react/dap-ds-radio-button/index.js.map +1 -1
- package/dist/react/dap-ds-radio-group/index.d.ts +5 -0
- package/dist/react/dap-ds-radio-group/index.js.map +1 -1
- package/dist/react/dap-ds-scroll-area/index.d.ts +2 -1
- package/dist/react/dap-ds-scroll-area/index.js.map +1 -1
- package/dist/react/dap-ds-search/index.d.ts +6 -1
- package/dist/react/dap-ds-search/index.js.map +1 -1
- package/dist/react/dap-ds-select/index.d.ts +6 -0
- package/dist/react/dap-ds-select/index.js.map +1 -1
- package/dist/react/dap-ds-sidenav-group/index.d.ts +1 -0
- package/dist/react/dap-ds-sidenav-group/index.js.map +1 -1
- package/dist/react/dap-ds-snackbar/index.d.ts +0 -1
- package/dist/react/dap-ds-snackbar/index.js.map +1 -1
- package/dist/react/dap-ds-snackbar-message/index.d.ts +3 -1
- package/dist/react/dap-ds-snackbar-message/index.js.map +1 -1
- package/dist/react/dap-ds-stack/index.d.ts +2 -1
- package/dist/react/dap-ds-stack/index.js.map +1 -1
- package/dist/react/dap-ds-switch/index.d.ts +6 -0
- package/dist/react/dap-ds-switch/index.js.map +1 -1
- package/dist/react/dap-ds-tab-group/index.d.ts +4 -2
- package/dist/react/dap-ds-tab-group/index.js.map +1 -1
- package/dist/react/dap-ds-table/index.d.ts +2 -0
- package/dist/react/dap-ds-table/index.js.map +1 -1
- package/dist/react/dap-ds-table-cell/index.d.ts +1 -1
- package/dist/react/dap-ds-table-cell/index.js.map +1 -1
- package/dist/react/dap-ds-textarea/index.d.ts +2 -0
- package/dist/react/dap-ds-textarea/index.js.map +1 -1
- package/dist/react/dap-ds-time-grid/index.d.ts +3 -0
- package/dist/react/dap-ds-time-grid/index.js.map +1 -1
- package/dist/react/dap-ds-timepicker/index.d.ts +5 -0
- package/dist/react/dap-ds-timepicker/index.js.map +1 -1
- package/dist/react/dap-ds-toc/index.d.ts +2 -0
- package/dist/react/dap-ds-toc/index.js.map +1 -1
- package/dist/react/dap-ds-tooltip/index.d.ts +2 -0
- package/dist/react/dap-ds-tooltip/index.js.map +1 -1
- package/dist/react/dap-ds-tray/index.d.ts +4 -1
- package/dist/react/dap-ds-tray/index.js.map +1 -1
- package/dist/react/index.d.ts +11 -8
- package/dist/react-types.ts +11 -8
- package/dist/react.js +366 -360
- package/dist/react.js.map +1 -1
- package/package.json +14 -3
- package/dist/node_modules/@lit/context/lib/context-request-event.js +0 -14
- package/dist/node_modules/@lit/context/lib/context-request-event.js.map +0 -1
- package/dist/node_modules/@lit/context/lib/controllers/context-consumer.js +0 -31
- package/dist/node_modules/@lit/context/lib/controllers/context-consumer.js.map +0 -1
- package/dist/node_modules/@lit/context/lib/controllers/context-provider.js +0 -40
- package/dist/node_modules/@lit/context/lib/controllers/context-provider.js.map +0 -1
- package/dist/node_modules/@lit/context/lib/create-context.js +0 -12
- package/dist/node_modules/@lit/context/lib/create-context.js.map +0 -1
- package/dist/node_modules/@lit/context/lib/value-notifier.js +0 -37
- package/dist/node_modules/@lit/context/lib/value-notifier.js.map +0 -1
- package/dist/node_modules/@lit/reactive-element/css-tag.js +0 -51
- package/dist/node_modules/@lit/reactive-element/css-tag.js.map +0 -1
- package/dist/node_modules/@lit/reactive-element/decorators/base.js +0 -10
- package/dist/node_modules/@lit/reactive-element/decorators/base.js.map +0 -1
- package/dist/node_modules/@lit/reactive-element/decorators/property.js +0 -38
- package/dist/node_modules/@lit/reactive-element/decorators/property.js.map +0 -1
- package/dist/node_modules/@lit/reactive-element/decorators/query-all.js +0 -17
- package/dist/node_modules/@lit/reactive-element/decorators/query-all.js.map +0 -1
- package/dist/node_modules/@lit/reactive-element/decorators/query-assigned-elements.js +0 -20
- package/dist/node_modules/@lit/reactive-element/decorators/query-assigned-elements.js.map +0 -1
- package/dist/node_modules/@lit/reactive-element/decorators/query-assigned-nodes.js +0 -20
- package/dist/node_modules/@lit/reactive-element/decorators/query-assigned-nodes.js.map +0 -1
- package/dist/node_modules/@lit/reactive-element/decorators/query.js +0 -21
- package/dist/node_modules/@lit/reactive-element/decorators/query.js.map +0 -1
- package/dist/node_modules/@lit/reactive-element/decorators/state.js +0 -25
- package/dist/node_modules/@lit/reactive-element/decorators/state.js.map +0 -1
- package/dist/node_modules/@lit/reactive-element/reactive-element.js +0 -276
- package/dist/node_modules/@lit/reactive-element/reactive-element.js.map +0 -1
- package/dist/node_modules/lit-element/lit-element.js +0 -53
- package/dist/node_modules/lit-element/lit-element.js.map +0 -1
- package/dist/node_modules/lit-html/async-directive.js +0 -71
- package/dist/node_modules/lit-html/async-directive.js.map +0 -1
- package/dist/node_modules/lit-html/directive-helpers.js +0 -46
- package/dist/node_modules/lit-html/directive-helpers.js.map +0 -1
- package/dist/node_modules/lit-html/directive.js +0 -28
- package/dist/node_modules/lit-html/directive.js.map +0 -1
- package/dist/node_modules/lit-html/directives/if-defined.js +0 -11
- package/dist/node_modules/lit-html/directives/if-defined.js.map +0 -1
- package/dist/node_modules/lit-html/directives/map.js +0 -15
- package/dist/node_modules/lit-html/directives/map.js.map +0 -1
- package/dist/node_modules/lit-html/directives/repeat.js +0 -63
- package/dist/node_modules/lit-html/directives/repeat.js.map +0 -1
- package/dist/node_modules/lit-html/directives/style-map.js +0 -37
- package/dist/node_modules/lit-html/directives/style-map.js.map +0 -1
- package/dist/node_modules/lit-html/lit-html.js +0 -249
- package/dist/node_modules/lit-html/lit-html.js.map +0 -1
- package/dist/node_modules/lit-html/static.js +0 -34
- package/dist/node_modules/lit-html/static.js.map +0 -1
- package/dist/node_modules/lit-i18n/src/lit-i18n.js +0 -95
- package/dist/node_modules/lit-i18n/src/lit-i18n.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comboboxBase.js","sources":["../../../src/components/combobox/comboboxBase.ts"],"sourcesContent":["import clsx from 'clsx'\nimport { nothing, PropertyValueMap, unsafeCSS } from 'lit'\nimport { property, query, state } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { html } from 'lit/static-html.js'\n\nimport { PopupPlacement } from '@/common/types'\nimport { getValidityStateObject, idInScope } from '@/common/utils'\nimport { GenericFormElement } from '@/internal/mixin/genericFormElement'\nimport { t } from '@/localization/localization'\n\nimport DapDSOptionList from '../option-list/option-list.component'\nimport styles from './combobox.scss?inline'\n\nexport default class ComboboxBaseElement extends GenericFormElement {\n @query('input') readonly triggerInput: HTMLInputElement\n @query('dap-ds-option-list') readonly optionList: DapDSOptionList\n @property({ reflect: true }) placement: PopupPlacement = 'bottom-start'\n @property({ type: Boolean, reflect: true }) opened = false\n @property() searchMode: 'none' | 'typehead' | 'autocomplete' | 'manual' =\n 'autocomplete'\n @property({ type: Boolean }) search = false\n @property() clearButton?: string = 'true'\n @property() placeholder: string | null\n @property({ type: Boolean }) sync?: boolean\n @property({ type: Boolean }) allowManualInput?: boolean = false\n @property({ type: Boolean }) searchForText?: boolean = false\n @property({ type: String }) searchOnValueSet? = 'false'\n @property({ type: Boolean }) loading?: boolean = false\n @property({ type: String }) selectable?: string = 'true'\n @property({ type: Boolean }) noAnimation?: boolean = false\n @property({ type: Boolean }) textComplete?: boolean = false\n @property({ type: Boolean }) openOnEmpty?: boolean = false\n @property({ type: Boolean }) disableViewportAutoClose: boolean = false\n @property() searchButtonAriaLabel?: string\n @property({ type: Boolean }) subtle: boolean\n @property({ type: Boolean, reflect: true }) multiselect: boolean = false\n @property({ type: Number, reflect: true }) maxSelections?: number\n\n /** `data-testid` for the clear button. */\n @property() clearButtonTestId = 'combobox-clear-button'\n\n /** `data-testid` for the search button. */\n @property() searchButtonTestId = 'combobox-search-button'\n\n /**\n * When enabled, the search button (the trailing icon button in search mode) is\n * automatically disabled while the input is empty and re-enabled as soon as the\n * user types. Opt-in; does not affect the input itself, which stays editable.\n */\n @property({ type: Boolean }) disableSearchWhenEmpty = false\n\n /** True when the search input currently holds non-whitespace text. */\n private get hasSearchText(): boolean {\n const text = this.selectedText || this.selectedItemText || this.value || ''\n return text.trim().length > 0\n }\n\n @state() selectedItem: any\n\n /**\n * Display text of the selected item. `selectedItem` is either an option element\n * (has `optionText`) when set from `value`, or an option event detail (has `text`)\n * when picked by the user; reading `.text` alone yields \"undefined\" for the former.\n */\n private get selectedItemText(): string {\n return this.selectedItem?.text ?? this.selectedItem?.optionText ?? ''\n }\n @state() selectedItems: any[] = []\n @state() currentItem: any\n @state() selectedText: string\n\n private optionListObserver: MutationObserver | null = null\n private isUserInteraction: boolean = false\n private pendingInitialValues: string[] = []\n\n static readonly styles = unsafeCSS(styles)\n\n protected async firstUpdated(\n _changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>,\n ): Promise<void> {\n super.firstUpdated(_changedProperties)\n\n await this.optionList.updateComplete\n\n // Wait for next frame to ensure slotted options are available\n await new Promise(resolve => requestAnimationFrame(resolve))\n\n // Wait for all option items to complete their updates\n const options = this.getComboboxOptions()\n\n await Promise.all(options.map((opt: any) => opt.updateComplete))\n\n // Get the underlying value, not the computed value from the getter\n const underlyingValue = super.value\n\n if (underlyingValue) {\n if (this.multiselect) {\n // Handle multiselect mode - parse comma-separated values\n const values = underlyingValue\n .split(',')\n .map((v: string) => v.trim())\n .filter((v: string) => v)\n // Store initial values to process later when options are ready\n this.pendingInitialValues = values\n // Try to populate immediately if options are available\n this.updateMultipleSelectionsFromValues(values)\n } else {\n // Handle single-select mode\n // Try to find the selected item from available options\n this.selectedItem = this.optionList\n ?.getAllOptions()\n .find(option => option.value === underlyingValue)\n\n if (this.selectedItem) {\n this.selectedText = this.selectedItem.optionText || ''\n } else {\n // If no selected item found, leave selectedText empty\n // It will be updated when options are loaded via updateSelectionFromValue\n this.selectedText = ''\n }\n\n if (\n !this.selectedText &&\n (this.allowManualInput || this.searchMode === 'none')\n ) {\n this.selectedText = underlyingValue\n }\n }\n }\n\n // Set up MutationObserver to watch for dynamic option changes\n this.setupOptionListObserver()\n }\n\n protected updated(\n _changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>,\n ): void {\n super.updated(_changedProperties)\n\n // Handle value property changes from outside the component\n // Only process for combobox components, not search components\n // Skip multiselect mode as the setter already handles value updates\n if (\n _changedProperties.has('value') &&\n this.triggerInput &&\n !this.search &&\n !this.multiselect\n ) {\n const newValue = this.value\n if (newValue) {\n this.handleValueChange(newValue)\n } else {\n this.clearSelection()\n }\n }\n\n // Free-text search (searchMode 'none' or allowManualInput) has no option to\n // map onto, so the branch above skips it and the value never reaches the\n // uncontrolled input. Reflect an externally-set value straight into the field\n // so the search box is controllable (e.g. restoring a saved query). Typehead/\n // autocomplete search keeps its existing behaviour. The guard leaves the\n // input untouched when it already matches, so a keystroke — which set the\n // value in the first place — doesn't bounce the caret to the end.\n if (\n _changedProperties.has('value') &&\n this.triggerInput &&\n this.isFreeTextSearch\n ) {\n const newValue = this.value ?? ''\n if (this.triggerInput.value !== newValue) {\n this.triggerInput.value = newValue\n }\n this.selectedText = newValue\n }\n }\n\n private get isFreeTextSearch(): boolean {\n return (\n Boolean(this.search) &&\n (this.searchMode === 'none' || Boolean(this.allowManualInput))\n )\n }\n\n /**\n * Handles value changes from outside the component\n * This ensures the selection state is updated when the value is set programmatically\n */\n private handleValueChange(newValue: string): void {\n if (!newValue) return\n\n // Mark this as programmatic change, not user interaction\n this.isUserInteraction = false\n\n // Try to find the option with the new value\n const option = this.getComboboxOptions().find(opt => opt.value === newValue)\n\n if (option) {\n // Option found, update selection\n this.selectedItem = option\n this.selectedText = option.optionText || option.textContent || ''\n\n // Update the input value\n if (this.triggerInput) {\n this.triggerInput.value = this.selectedText\n }\n\n // Trigger re-render\n this.requestUpdate()\n } else {\n // Option not found yet (might be loading)\n this.selectedItem = null\n\n // For search components, preserve the selectedText to maintain search functionality\n // For combobox components, clear it to avoid showing raw values\n if (!this.search) {\n this.selectedText = ''\n\n // Clear input value\n if (this.triggerInput) {\n this.triggerInput.value = ''\n }\n }\n\n // Trigger re-render\n this.requestUpdate()\n }\n }\n\n private setupOptionListObserver(): void {\n if (!this.optionList) return\n\n // Disconnect existing observer if any\n if (this.optionListObserver) {\n this.optionListObserver.disconnect()\n }\n\n // Create new observer to watch for changes in the option list\n this.optionListObserver = new MutationObserver(mutations => {\n let shouldUpdateState = false\n\n mutations.forEach(mutation => {\n if (mutation.type === 'childList') {\n // Check if option items were added or removed\n const addedOptions = Array.from(mutation.addedNodes).some(\n node => node.nodeName === 'DAP-DS-OPTION-ITEM',\n )\n const removedOptions = Array.from(mutation.removedNodes).some(\n node => node.nodeName === 'DAP-DS-OPTION-ITEM',\n )\n\n if (addedOptions || removedOptions) {\n shouldUpdateState = true\n }\n }\n })\n\n if (shouldUpdateState) {\n // Update combobox state based on new option list\n this.updateComboboxState()\n }\n })\n\n // Start observing the combobox element itself for slot changes\n // This is needed because remote data is added directly to the combobox element\n this.optionListObserver.observe(this, {\n childList: true,\n subtree: true,\n })\n }\n\n private updateComboboxState(): void {\n // Wait for the next tick to ensure DOM is updated\n requestAnimationFrame(() => {\n // Wait one more tick to ensure options are fully initialized\n requestAnimationFrame(() => {\n const hasOptions = this.getComboboxOptions().length > 0\n const hasInputValue =\n this.triggerInput?.value && this.triggerInput.value.trim() !== ''\n\n // If we have options and the dropdown should be open, show it\n // For search components (this.search = true) or autocomplete mode\n // Only open if this is a user interaction, not programmatic value setting\n if (\n hasOptions &&\n hasInputValue &&\n (this.isAutoComplete || this.search) &&\n this.isUserInteraction\n ) {\n if (!this.opened) {\n this.showDropDown()\n }\n } else if (!hasOptions && !this.openOnEmpty && hasInputValue) {\n // If no options and we don't allow empty, hide the dropdown\n // But only if the user has actually typed something\n this.hideDropDown()\n }\n\n // Handle value restoration when options become available\n if (hasOptions) {\n if (this.multiselect) {\n // For multiselect, check if selectedItems needs to be populated\n if (\n this.selectedItems.length === 0 &&\n this.pendingInitialValues.length > 0\n ) {\n this.updateMultipleSelectionsFromValues(this.pendingInitialValues)\n }\n } else {\n // For single-select, check if selectedItem needs to be populated\n if (this.value && !this.selectedItem) {\n this.updateSelectionFromValue()\n }\n }\n }\n })\n })\n }\n\n /**\n * Updates the selection state based on the current value\n * This is useful when options are loaded asynchronously\n */\n private updateSelectionFromValue(): void {\n if (!this.value) return\n\n // Mark this as programmatic change, not user interaction\n this.isUserInteraction = false\n\n const option = this.getComboboxOptions().find(\n opt => opt.value === this.value,\n )\n\n if (option) {\n this.selectedItem = option\n this.selectedText = option.optionText || option.textContent || ''\n\n // Update the input value to show the selected text\n if (this.triggerInput) {\n this.triggerInput.value = this.selectedText\n }\n\n // Trigger re-render to update clear icon visibility\n this.requestUpdate()\n }\n }\n\n private cleanupOptionListObserver(): void {\n if (this.optionListObserver) {\n this.optionListObserver.disconnect()\n this.optionListObserver = null\n }\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback()\n this.cleanupOptionListObserver()\n }\n\n attributeChangedCallback(\n name: string,\n _old: string | null,\n value: string | null,\n ): void {\n if (name === 'value' && !value) {\n this.clearSelection()\n }\n\n super.attributeChangedCallback(name, _old, value)\n }\n\n get isAutoComplete() {\n return this.searchMode === 'autocomplete' || this.searchMode === 'manual'\n }\n\n /**\n * Get all option items directly from the combobox element\n * This is more reliable for dynamic updates than the option list component\n */\n private getComboboxOptions(): any[] {\n return Array.from(this.querySelectorAll('dap-ds-option-item'))\n }\n\n get isOpenOnEmpty() {\n return (\n this.openOnEmpty ||\n (!this.openOnEmpty && this.getComboboxOptions().length > 0)\n )\n }\n\n get isOpenOnAutocomplete() {\n return this.isAutoComplete && this.isOpenOnEmpty\n }\n\n get shouldHideClearIcon() {\n // Check if input is empty (cross-browser compatible)\n const inputValue = this.triggerInput?.value || ''\n const hasPlaceholder = this.placeholder && this.placeholder.trim() !== ''\n\n // Only apply JavaScript fallback when there's no placeholder\n // When there IS a placeholder, let CSS :placeholder-shown handle it\n if (hasPlaceholder) {\n return false // Let CSS handle it\n }\n\n // Hide clear icon when input is empty and has no placeholder\n return inputValue === ''\n }\n\n handleClick = () => {\n if (!this.getComboboxOptions().length && !this.openOnEmpty) {\n this.hideDropDown()\n } else {\n this.opened ? this.hideDropDown() : this.showDropDown()\n }\n }\n\n private async handleEnterKey(event: KeyboardEvent) {\n event.preventDefault()\n event.stopPropagation()\n\n if (this.allowManualInput) {\n return this.handleSearchEnter()\n }\n\n if (this.currentItem && this.opened) {\n return this.handleCurrentItemEnter()\n }\n\n if (this.search && !this.isAutoComplete) {\n return this.handleSearchEnter()\n }\n\n return this.handleDefaultEnter()\n }\n\n private async handleCurrentItemEnter() {\n if (this.currentItem.value === this.selectedItem?.value) {\n this.hideDropDown()\n this.triggerInput.value = this.selectedItemText\n this.triggerInput.focus()\n return\n }\n\n if (this.currentItem.value !== this.selectedItem?.value) {\n if (!this.searchForText) {\n await this.handleSelectedItemChange(this.currentItem)\n } else {\n await this.handleTextSearch(this.currentItem.text)\n }\n }\n }\n\n private async handleSearchEnter() {\n this.emit('dds-search', { search: this.selectedText })\n this.setValidity()\n return this.hideDropDown()\n }\n\n private async handleDefaultEnter() {\n if (this.opened) {\n return this.hideDropDown()\n } else {\n // For autocomplete mode, allow opening even without options initially\n // The MutationObserver will handle showing/hiding based on actual option availability\n return (\n (this.openOnEmpty ||\n this.getComboboxOptions().length ||\n this.isAutoComplete) &&\n this.showDropDown()\n )\n }\n }\n\n private async handleSelectedItemChange(item: any) {\n this.selectedItem = item\n this.emit('dds-change', {\n value: this.selectedItem.value,\n selectedItem: this.selectedItem,\n type: 'select',\n })\n await this.updateComplete\n this.value = this.selectedItem.value\n this.selectedText = this.currentItem.text\n this.triggerInput.value = this.currentItem.text\n this.triggerInput.focus()\n this.setValidity()\n // Close like a pick from the list does (handleSelectedChange); multiselect stays open\n if (!this.multiselect) {\n await this.hideDropDown()\n }\n }\n\n private async handleTextSearch(text: string) {\n this.value = text\n this.selectedText = text\n this.triggerInput.value = text\n this.triggerInput.focus()\n this.emit('dds-search', { search: text })\n this.setValidity()\n await this.hideDropDown()\n }\n\n private async handleArrowKeys(event: KeyboardEvent) {\n event.preventDefault()\n\n if (!this.opened) {\n // For autocomplete mode, allow opening even without options initially\n // The MutationObserver will handle showing/hiding based on actual option availability\n if (\n this.openOnEmpty ||\n this.getComboboxOptions().length ||\n this.isAutoComplete\n ) {\n this.showDropDown()\n } else {\n return // Don't proceed if we can't open dropdown\n }\n }\n\n await this.updateComplete\n this.optionList.captureFocus(event.key)\n }\n\n handleKeyDown = async (event: KeyboardEvent) => {\n if (event.key === 'Tab') {\n // Close the list so its options leave the tab order; Tab then moves on natively\n this.hideDropDown({ skipFocus: true })\n return\n }\n\n if (event.key === 'Enter') {\n return this.handleEnterKey(event)\n }\n\n if (event.key === 'Escape') {\n this.hideDropDown()\n return this.focus()\n }\n\n // Handle Backspace for chip removal in multiselect mode\n if (event.key === 'Backspace' && this.multiselect) {\n const inputValue = this.triggerInput?.value || ''\n // Only remove chip if input is empty\n if (inputValue === '' && this.selectedItems.length > 0) {\n event.preventDefault()\n const lastItem = this.selectedItems[this.selectedItems.length - 1]\n this.removeSelectedItem(lastItem)\n this.emit('dds-change', {\n value: this.selectedItems.map(item => item.value).join(','),\n selectedItems: this.selectedItems,\n type: 'remove',\n item: lastItem,\n })\n this.setValidity()\n return\n }\n }\n\n if (\n (event.key === 'ArrowDown' ||\n event.key === 'ArrowUp' ||\n event.key === 'ArrowLeft' ||\n event.key === 'ArrowRight') &&\n this.isAutoComplete\n ) {\n return this.handleArrowKeys(event)\n }\n\n // For autocomplete mode, only show dropdown if there are options OR if openOnEmpty is true\n if (this.isAutoComplete && this.triggerInput?.value && !this.opened) {\n const hasOptions = this.getComboboxOptions().length > 0\n if (this.openOnEmpty || hasOptions) {\n this.showDropDown()\n }\n }\n }\n\n handleInput = async (event: InputEvent) => {\n const input = this.triggerInput\n\n // Mark this as user interaction\n this.isUserInteraction = true\n if (\n event.inputType !== 'deleteContentBackward' ||\n (event.inputType === 'deleteContentBackward' && this.allowManualInput)\n ) {\n this.selectedText = input.value\n if (this.search) {\n this.value = input.value\n }\n } else if (this.search) {\n this.selectedText = input.value\n this.value = input.value\n } else if (\n input.value === '' &&\n event.inputType === 'deleteContentBackward'\n ) {\n this.clearSelection()\n }\n\n this.emit('dds-input', { input: input.value, originalEvent: event })\n this.setValidity()\n\n // Trigger re-render to update clear icon visibility\n this.requestUpdate()\n\n // For autocomplete mode, only show dropdown if there are options OR if openOnEmpty is true\n if (this.isAutoComplete && input.value && !this.opened) {\n const hasOptions = this.getComboboxOptions().length > 0\n if (this.openOnEmpty || hasOptions) {\n this.showDropDown()\n }\n }\n }\n\n async clearSelection() {\n // Mark this as programmatic change, not user interaction\n this.isUserInteraction = false\n\n // Was there anything to clear? Clearing an already-empty control (e.g. a\n // programmatic `value = ''` on mount) must stay silent — otherwise it fires\n // dds-change as if the user cleared a value, which a consumer reads as an\n // edit. A real clear (the × button on a filled field) still emits.\n const hadValue = Boolean(\n this.value || this.selectedText || this.triggerInput?.value,\n )\n\n if (this.triggerInput) {\n this.triggerInput.value = ''\n }\n this.selectedText = ''\n this.selectedItem = null\n\n this.value = undefined\n\n // Trigger re-render to update clear icon visibility\n this.requestUpdate()\n\n await this.updateComplete\n\n if (hadValue) {\n this.emit('dds-change', this.selectedItem)\n }\n }\n\n /**\n * Multiselect helper methods\n */\n private getSelectedValues(): string[] {\n return this.selectedItems.map(item => item.value)\n }\n\n private isMaxSelectionsReached(): boolean {\n if (!this.maxSelections) return false\n return this.selectedItems.length >= this.maxSelections\n }\n\n private addSelectedItem(item: any): void {\n if (!this.multiselect) return\n\n // Check if item is already selected\n const isAlreadySelected = this.selectedItems.some(\n selected => selected.value === item.value,\n )\n\n if (isAlreadySelected) return\n\n // Check max selections limit\n if (this.isMaxSelectionsReached()) return\n\n // Add item to selectedItems array\n this.selectedItems = [...this.selectedItems, item]\n\n // Update value to comma-separated string (use super to avoid setter loop)\n const newValue = this.getSelectedValues().join(',')\n super.value = newValue\n\n // Clear input text\n this.selectedText = ''\n if (this.triggerInput) {\n this.triggerInput.value = ''\n }\n\n // Trigger re-render\n this.requestUpdate()\n }\n\n private removeSelectedItem(item: any): void {\n if (!this.multiselect) return\n\n // Remove item from selectedItems array\n this.selectedItems = this.selectedItems.filter(\n selected => selected.value !== item.value,\n )\n\n // Update value to comma-separated string (use super to avoid setter loop)\n if (this.selectedItems.length === 0) {\n super.value = undefined\n } else {\n const newValue = this.getSelectedValues().join(',')\n super.value = newValue\n }\n\n // Trigger re-render\n this.requestUpdate()\n }\n\n private clearAllSelections(): void {\n if (!this.multiselect) return\n\n // Clear all selections\n this.selectedItems = []\n super.value = undefined\n this.selectedText = ''\n\n if (this.triggerInput) {\n this.triggerInput.value = ''\n }\n\n // Trigger re-render\n this.requestUpdate()\n }\n\n private updateMultipleSelectionsFromValues(values: string[]): void {\n if (!this.multiselect) return\n\n const options = this.getComboboxOptions()\n\n // Don't clear if we've already populated items\n const shouldClear = this.selectedItems.length === 0\n if (shouldClear) {\n this.selectedItems = []\n }\n\n let foundAny = false\n values.forEach(value => {\n // Check both property and attribute since elements might not be fully upgraded\n const option = options.find(\n opt => opt.value === value || opt.getAttribute('value') === value,\n )\n if (option) {\n // Check if already in selectedItems to avoid duplicates\n const exists = this.selectedItems.some(item => item.value === value)\n if (!exists) {\n this.selectedItems.push(option)\n foundAny = true\n }\n }\n })\n\n // Clear pending values if we successfully found items\n if (foundAny && this.pendingInitialValues.length > 0) {\n this.pendingInitialValues = []\n }\n\n // Trigger re-render\n this.requestUpdate()\n }\n\n /**\n * Override value getter/setter to handle multiselect mode\n */\n override get value(): string | undefined {\n if (this.multiselect) {\n const values = this.getSelectedValues()\n const result = values.length > 0 ? values.join(',') : undefined\n return result\n }\n return super.value\n }\n\n override set value(val: string | undefined) {\n if (this.multiselect) {\n // Parse comma-separated values\n const values = val\n ? val\n .split(',')\n .map((v: string) => v.trim())\n .filter((v: string) => v)\n : []\n\n // Store as pending if we have values and selectedItems is empty\n // This ensures initial values are processed even if set after component is created\n if (values.length > 0 && this.selectedItems.length === 0) {\n this.pendingInitialValues = values\n }\n\n this.updateMultipleSelectionsFromValues(values)\n\n // Update parent value\n super.value = val\n } else {\n // Single select mode - use parent implementation\n super.value = val\n }\n }\n\n handleListKeyDown = (event: CustomEvent) => {\n if (event.detail?.key === 'Tab') {\n // Move focus back to the input synchronously so the native Tab continues\n // from there and leaves the combobox instead of cycling inside the list.\n this.hideDropDown({ skipFocus: true })\n this.triggerInput.focus()\n return\n }\n\n if (event.detail?.key === 'Escape') {\n this.hideDropDown()\n this.currentItem = this.selectedItem\n this.selectedText = ''\n // Nothing selected yet (user only typed): keep the typed text\n if (this.selectedItem) {\n this.triggerInput.value = this.selectedItemText\n }\n this.triggerInput.focus()\n }\n }\n\n handleDocumentMouseDown = (event: MouseEvent) => {\n const path = event.composedPath()\n if (this && !path.includes(this)) {\n this.hideDropDown()\n }\n }\n\n private readonly handlePopupAutoClose = () => {\n this.hideDropDown({ skipFocus: true })\n }\n\n handleFocus = () => {\n this.emit('dds-focus')\n }\n\n handleBlur = () => {\n this.emit('dds-blur')\n }\n\n async showDropDown() {\n if (this.disabled || this.readonly || !this.isAutoComplete || this.opened) {\n return\n }\n\n // For autocomplete mode, allow opening even without options initially\n // The MutationObserver will handle showing/hiding based on actual option availability\n if (\n !this.openOnEmpty &&\n !this.getComboboxOptions().length &&\n !this.isAutoComplete\n ) {\n return\n }\n\n this.opened = true\n\n document.addEventListener('mousedown', this.handleDocumentMouseDown)\n }\n\n async hideDropDown(options?: { skipFocus?: boolean }) {\n if (!this.opened) {\n return\n }\n\n this.opened = false\n\n document.removeEventListener('mousedown', this.handleDocumentMouseDown)\n\n await this.updateComplete\n if (!options?.skipFocus) {\n this.focus()\n }\n this.clearSelectionRange()\n }\n\n public get focusElement() {\n return this.triggerInput\n }\n\n handleSelectedChange = async (event: CustomEvent) => {\n event.preventDefault()\n event.stopPropagation()\n\n if (this.searchForText) {\n this.selectedText = event.detail.text\n this.value = event.detail.text\n this.triggerInput.value = event.detail.text\n\n this.emit('dds-search', { search: this.selectedText })\n\n // Trigger re-render to update clear icon visibility\n this.requestUpdate()\n\n this.setValidity()\n } else if (this.multiselect) {\n // Multiselect mode - add item to selected items\n this.addSelectedItem(event.detail)\n this.emit('dds-change', {\n value: this.selectedItems.map(item => item.value).join(','),\n selectedItems: this.selectedItems,\n type: 'add',\n item: event.detail,\n })\n\n // Clear current item to prevent text completion from filling it back in\n this.currentItem = null\n\n // Wait for update to complete before focusing\n await this.updateComplete\n\n // Ensure input is cleared after render\n this.triggerInput.value = ''\n this.triggerInput.focus()\n this.setValidity()\n\n // Don't close dropdown in multiselect mode\n return\n } else {\n this.selectedItem = event.detail\n this.selectedText = event.detail.text\n\n if (this.value !== this.selectedItem?.value) {\n this.triggerInput.value = event.detail.text\n this.value = this.selectedItem.value\n this.emit('dds-change', {\n value: this.selectedItem.value,\n selectedItem: this.selectedItem,\n type: 'select',\n })\n\n // Trigger re-render to update clear icon visibility\n this.requestUpdate()\n\n await this.updateComplete\n\n if (this.currentItem) {\n this.triggerInput.value = this.currentItem.text\n }\n this.triggerInput.focus()\n this.setValidity()\n }\n }\n\n this.hideDropDown()\n }\n\n handleOptionDeselect = (event: CustomEvent) => {\n event.preventDefault()\n event.stopPropagation()\n\n this.selectedItem = null\n this.selectedText = ''\n this.value = undefined\n this.triggerInput.value = ''\n this.emit('dds-change', {\n value: undefined,\n selectedItem: null,\n type: 'deselect',\n })\n\n // Trigger re-render to update clear icon visibility\n this.requestUpdate()\n\n this.setValidity()\n }\n\n handleCurrentOptionChange = (event: CustomEvent) => {\n this.currentItem = event.detail\n\n // Skip text completion in multiselect mode\n if (this.multiselect) {\n return\n }\n\n if (event.detail) {\n if (\n this.textComplete &&\n this.searchMode !== 'manual' &&\n this.searchMode !== 'none'\n ) {\n this.triggerInput.value = event.detail.text\n }\n\n if (\n this.isAutoComplete &&\n this.selectedText &&\n this.selectedText !== '' &&\n !this.allowManualInput &&\n this.textComplete\n ) {\n this.triggerInput.value = event.detail.text\n this.setSelectionRange(\n this.selectedText.length,\n this.triggerInput.value.length,\n )\n }\n }\n }\n\n handleListChanged = (event: CustomEvent) => {\n if (!event.detail.elements.length && !this.openOnEmpty) {\n this.hideDropDown()\n }\n }\n\n handleClearClick = () => {\n if (!this.disabled) {\n if (this.multiselect) {\n this.clearAllSelections()\n } else {\n this.clearSelection()\n }\n\n this.triggerInput.focus()\n this.setValidity()\n\n if (!this.openOnEmpty) {\n this.hideDropDown()\n }\n\n this.emit('dds-clear')\n }\n }\n\n handleSearchClick = (event: MouseEvent) => {\n event.stopPropagation()\n event.preventDefault()\n\n this.setValidity()\n this.emit('dds-search', { search: this.selectedText })\n }\n\n private setSelectionRange(start: number, end: number) {\n this.triggerInput.setSelectionRange(start, end)\n }\n\n private clearSelectionRange() {\n const controlValueLength = this.triggerInput.value.length\n\n this.setSelectionRange(controlValueLength, controlValueLength)\n }\n\n getValidity() {\n if (this.multiselect) {\n return this.getMultiSelectValidity()\n }\n if (this.isAutoComplete) {\n return this.getAutoCompleteValidity()\n }\n return this.getBasicValidity()\n }\n\n formResetCallback() {\n this.internals.setValidity({})\n this.internals.setFormValue(this.defaultValue)\n this.value = this.defaultValue\n if (this.multiselect) {\n this.selectedItems = []\n } else {\n // Resolve to the option element; a bare value string has no value/text fields\n this.selectedItem =\n this.getComboboxOptions().find(\n option => option.value === this.defaultValue,\n ) ?? null\n }\n }\n\n private getMultiSelectValidity(): boolean {\n // Valid if not required OR has at least one selection\n return !this.required || this.selectedItems.length > 0\n }\n\n private getAutoCompleteValidity(): boolean {\n if (this.allowManualInput) {\n return this.getManualInputValidity()\n }\n if (this.searchForText) {\n return this.getSearchTextValidity()\n }\n return this.getSelectedItemValidity()\n }\n\n private getManualInputValidity(): boolean {\n return (\n this.triggerInput.value !== '' ||\n (this.selectedItem !== null && this.selectedItem !== undefined)\n )\n }\n\n private getSearchTextValidity(): boolean {\n return this.triggerInput.value !== ''\n }\n\n private getSelectedItemValidity(): boolean {\n return !!this.selectedItem\n }\n\n private getBasicValidity(): boolean {\n return this.triggerInput.value !== ''\n }\n\n // custom validation\n get validity(): ValidityState {\n if (this.internals.validity) {\n return this.internals.validity\n } else {\n return getValidityStateObject({\n valueMissing: this.required && !this.getValidity(),\n })\n }\n }\n\n get validationMessage(): string {\n return t('form.validationMessage.select')\n }\n\n checkValidity() {\n return this.required ? this.getValidity() : true\n }\n\n reportValidity() {\n return this.required ? this.checkValidity() : true\n }\n\n setValidity() {\n if (!this.checkValidity()) {\n this.internals.setValidity(\n {\n valueMissing: this.required && !this.getValidity(),\n },\n this.validationMessage,\n this.triggerInput,\n )\n } else {\n this.internals.setValidity({})\n }\n }\n\n handleInvalid(event: Event) {\n event.preventDefault()\n }\n\n /**\n * Screen-reader status for the highlighted option while focus stays in the input.\n * aria-activedescendant cannot reach options inside option-list's shadow root, so\n * the highlight (e.g. the first match after typing) is announced through a polite\n * live region instead. Once focus moves onto an option it is announced natively,\n * so the status is cleared to avoid a double announcement.\n */\n get activeOptionStatus(): string {\n if (\n !this.opened ||\n !this.currentItem ||\n this.shadowRoot?.activeElement !== this.triggerInput\n ) {\n return ''\n }\n\n const options = this.optionList?.getAllAvailabeOptions() ?? []\n const index = options.findIndex(\n option => option.value === this.currentItem.value,\n )\n if (index < 0) {\n return ''\n }\n\n return t('combobox.activeOption', {\n option: this.currentItem.text,\n position: index + 1,\n count: options.length,\n })\n }\n\n getActiveDescendant() {\n if (!this.opened) {\n return this.triggerInput\n }\n\n const activeOption = this.optionList?.getActiveOption()\n return activeOption\n }\n\n getSearchIconSize(size: string) {\n switch (size) {\n case 'sm':\n return 'md'\n case 'lg':\n return 'lg'\n case 'xs':\n return 'sm'\n default:\n return 'md'\n }\n }\n\n getInnerIconSize(size: string) {\n switch (size) {\n case 'sm':\n return 16\n case 'lg':\n return 16\n case 'xs':\n return 10\n default:\n return 16\n }\n }\n\n private handleChipRemove = (event: CustomEvent, item: any) => {\n event.stopPropagation()\n this.removeSelectedItem(item)\n this.emit('dds-change', {\n value: this.selectedItems.map(item => item.value).join(','),\n selectedItems: this.selectedItems,\n type: 'remove',\n item: item,\n })\n this.setValidity()\n\n // Focus input after removal\n this.triggerInput.focus()\n }\n\n private renderChip(item: any) {\n // Get text from the option element - prefer optionText getter, then textContent\n const text = item.optionText || item.textContent || item.text || ''\n\n return html`\n <dap-ds-chip\n size=\"sm\"\n removeable\n .value=${item.value}\n @dds-remove=${(e: CustomEvent) => this.handleChipRemove(e, item)}>\n ${text}\n </dap-ds-chip>\n `\n }\n\n private renderChips() {\n if (!this.multiselect || this.selectedItems.length === 0) {\n return nothing\n }\n\n return html`\n <div class=\"combobox__chips\" part=\"chips\">\n ${this.selectedItems.map(item => this.renderChip(item))}\n </div>\n `\n }\n\n private renderInput() {\n // In multiselect mode, only show selectedText (typing), never show selectedItem\n const inputValue = this.multiselect\n ? this.selectedText\n : this.selectedText !== ''\n ? this.selectedText\n : this.selectedItemText\n\n return html`<input\n id=\"input\"\n part=\"input\"\n role=\"combobox\"\n class=\"${clsx('input', `input--${this.size}`, {\n 'input--disabled': this.disabled,\n 'input--readonly': this.readonly,\n 'input--multiselect': this.multiselect,\n })}\"\n aria-expanded=${this.opened ? 'true' : 'false'}\n aria-haspopup=\"listbox\"\n aria-labelledby=\"label\"\n aria-describedby=\"description ${this.feedback ? 'feedback' : ''}\"\n aria-disabled=${this.disabled}\n aria-autocomplete=\"both\"\n aria-controls=\"option-list\"\n aria-activedescendant=${ifDefined(\n // Options render in option-list's shadow root, out of this scope; a\n // cross-scope IDREF is ignored by browsers, so only same-scope ids are set\n idInScope(this.shadowRoot, this.getActiveDescendant()),\n )}\n ?required=${this.required}\n ?readonly=${this.readonly}\n ?autofocus=${this.autofocus}\n autocomplete=${this.autocomplete as any}\n ?disabled=${this.disabled}\n value=${inputValue}\n placeholder=${ifDefined(this.placeholder ?? '')}\n type=${this.search ? 'search' : 'text'}\n @blur=${this.handleBlur}\n @focus=${this.handleFocus}\n @input=${this.handleInput}\n @keydown=${this.handleKeyDown}\n @click=${this.handleClick} />`\n }\n\n private renderClearButton() {\n if (this.clearButton !== 'true' || this.readonly) return nothing\n\n return html`<div\n class=\"${clsx('clear-icon', {\n 'clear-icon--hidden': this.shouldHideClearIcon,\n })}\">\n <dap-ds-icon-button\n icon=\"close-line\"\n data-testid=${this.clearButtonTestId}\n aria-label=${t('clear')}\n ?disabled=${this.disabled}\n @click=${this.handleClearClick}></dap-ds-icon-button>\n </div>`\n }\n\n private renderIndicatorIcon() {\n const isAutocompleteOrManual =\n this.searchMode === 'autocomplete' || this.searchMode === 'manual'\n const showLoadingSpinner = this.loading\n ? html`<dap-ds-icon-loading-spinner></dap-ds-icon-loading-spinner>`\n : null\n\n if (isAutocompleteOrManual && !this.search) {\n return html`<div\n class=\"${clsx('indicator-icon', {\n 'indicator-icon--loading': this.loading,\n })}\"\n part=\"indicator-icon\">\n ${showLoadingSpinner ||\n html`<slot name=\"indicator-icon\"\n ><dap-ds-icon-arrow-down-s-line\n aria-hidden=\"true\"\n @click=${this.handleClick}>\n </dap-ds-icon-arrow-down-s-line\n ></slot>`}\n </div>`\n }\n\n if (this.search) {\n return html`<div\n class=\"${clsx('indicator-icon', {\n 'indicator-icon--loading': this.loading,\n })}\">\n ${showLoadingSpinner ||\n html`<dap-ds-icon-button\n part=\"search-button\"\n size=${this.getSearchIconSize(this.size)}\n variant=${this.subtle ? 'neutral' : 'inverted-brand'}\n icon=\"search-line\"\n ?disabled=${this.disableSearchWhenEmpty && !this.hasSearchText}\n data-testid=${this.searchButtonTestId}\n iconSize=${this.getInnerIconSize(this.size)}\n aria-label=${this.searchButtonAriaLabel ?? t('search')}\n @click=${this.handleSearchClick}>\n </dap-ds-icon-button>`}\n </div>`\n }\n\n return nothing\n }\n\n private renderSelectActions() {\n return html`<div\n class=\"${clsx('select-action', `select-action--${this.size}`, {\n 'select-action--disabled': this.disabled,\n 'select-action--readonly': this.readonly,\n 'select-action--opened': this.opened,\n 'select-action--multiselect': this.multiselect,\n })}\">\n ${this.renderClearButton()} ${this.renderIndicatorIcon()}\n </div>`\n }\n\n private renderOptionList() {\n return html`<dap-ds-option-list\n class=\"option-list\"\n part=\"option-list\"\n id=\"option-list\"\n .search=${this.search}\n searchMode=${this.allowManualInput ? 'none' : this.searchMode}\n searchOnValueSet=${this.searchOnValueSet === 'true'}\n filterText=${this.selectedText}\n size=${ifDefined(this.size)}\n value=${ifDefined(this.value)}\n selectable=${ifDefined(this.selectable)}\n ?multiselectable=${this.multiselect}\n @dds-option-change=${this.handleSelectedChange}\n @dds-option-deselect=${this.handleOptionDeselect}\n @dds-keydown=${this.handleListKeyDown}\n @dds-current-change=${this.handleCurrentOptionChange}\n @dds-list-changed=${this.handleListChanged}>\n <slot></slot>\n </dap-ds-option-list>`\n }\n\n renderCombobox() {\n return html` ${(this, this.renderLabel())}\n <div>\n <dap-ds-popup\n part=\"base\"\n class=\"select-popup\"\n overflow\n ?opened=${this.opened}\n ?hasArrow=${false}\n placement=${this.placement}\n floatingStrategy=\"fixed\"\n offset=\"4\"\n ?sync=${this.sync}\n ?disableViewportAutoClose=${this.disableViewportAutoClose}\n @dds-close=${this.handlePopupAutoClose}\n @dds-closed=${this.hideDropDown}\n @dds-opened=${this.showDropDown}>\n <div\n slot=\"trigger\"\n part=\"trigger\"\n class=\"${clsx('select', `select--${this.size}`, {\n 'select--disabled': this.disabled,\n 'select--readonly': this.readonly,\n 'select--opened': this.opened,\n 'select--loading': this.loading,\n 'select--success': this.status === 'success',\n 'select--error': this.status === 'error',\n 'select--no-animation': this.noAnimation,\n 'select--multiselect': this.multiselect,\n })}\">\n ${this.renderChips()} ${this.renderInput()}\n ${this.renderSelectActions()}\n </div>\n ${this.renderOptionList()}\n </dap-ds-popup>\n <div\n class=\"sr-only active-option-status\"\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\">\n ${this.activeOptionStatus}\n </div>\n ${this.multiselect\n ? html`<div\n class=\"sr-only\"\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\">\n ${this.selectedItems.length > 0\n ? t('combobox.multiselect.selected', {\n count: this.selectedItems.length,\n })\n : ''}\n </div>`\n : nothing}\n ${this.feedback &&\n html`<dap-ds-feedback\n part=\"feedback\"\n feedbackType=${ifDefined(this.feedbackType)}\n feedbackSize=\"${ifDefined(this.size as 'lg' | 'sm' | 'xs')}\"\n id=\"feedback\">\n ${this.feedback}\n </dap-ds-feedback>`}\n </div>`\n }\n}\n"],"names":["_ComboboxBaseElement","GenericFormElement","event","__async","_a","lastItem","item","_b","hasOptions","input","path","_d","_c","_changedProperties","__superGet","resolve","options","opt","underlyingValue","values","v","option","newValue","mutations","shouldUpdateState","mutation","addedOptions","node","removedOptions","hasInputValue","name","_old","value","inputValue","text","hadValue","selected","foundAny","val","start","end","controlValueLength","getValidityStateObject","t","index","size","html","e","nothing","clsx","ifDefined","idInScope","isAutocompleteOrManual","showLoadingSpinner","unsafeCSS","styles","ComboboxBaseElement","__decorateClass","query","property","state"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"comboboxBase.js","sources":["../../../src/components/combobox/comboboxBase.ts"],"sourcesContent":["import clsx from 'clsx'\nimport { nothing, PropertyValueMap, unsafeCSS } from 'lit'\nimport { property, query, state } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { html } from 'lit/static-html.js'\n\nimport { PopupPlacement } from '@/common/types'\nimport { getValidityStateObject, idInScope } from '@/common/utils'\nimport { GenericFormElement } from '@/internal/mixin/genericFormElement'\nimport { t } from '@/localization/localization'\n\nimport { filterOptions } from '../option-list/listbox-state'\nimport {\n DapDSOptionData,\n DapDSOptionRenderer,\n optionElementsFor,\n optionItemsConverter,\n toOptionItems,\n} from '../option-list/option-data'\nimport DapDSOptionList from '../option-list/option-list.component'\nimport styles from './combobox.scss?inline'\n\nexport default class ComboboxBaseElement extends GenericFormElement {\n @query('input') readonly triggerInput: HTMLInputElement\n @query('dap-ds-option-list') readonly optionList: DapDSOptionList\n @property({ reflect: true }) placement: PopupPlacement = 'bottom-start'\n @property({ type: Boolean, reflect: true }) opened = false\n @property() searchMode: 'none' | 'typehead' | 'autocomplete' | 'manual' =\n 'autocomplete'\n @property({ type: Boolean }) search = false\n @property() clearButton?: string = 'true'\n @property() placeholder: string | null\n @property({ type: Boolean }) sync?: boolean\n @property({ type: Boolean }) allowManualInput?: boolean = false\n @property({ type: Boolean }) searchForText?: boolean = false\n @property({ type: String }) searchOnValueSet? = 'false'\n @property({ type: Boolean }) loading?: boolean = false\n @property({ type: String }) selectable?: string = 'true'\n @property({ type: Boolean }) noAnimation?: boolean = false\n @property({ type: Boolean }) textComplete?: boolean = false\n @property({ type: Boolean }) openOnEmpty?: boolean = false\n @property({ type: Boolean }) disableViewportAutoClose: boolean = false\n @property() searchButtonAriaLabel?: string\n @property({ type: Boolean }) subtle: boolean\n @property({ type: Boolean, reflect: true }) multiselect: boolean = false\n @property({ type: Number, reflect: true }) maxSelections?: number\n /** The options as data instead of `dap-ds-option-item` children; also accepted as a JSON attribute. */\n @property({ converter: optionItemsConverter })\n get items(): DapDSOptionData[] | undefined {\n return this._items\n }\n\n set items(value: DapDSOptionData[] | string | undefined) {\n this._items = toOptionItems(value)\n }\n\n private _items?: DapDSOptionData[]\n /** Renders the content of each option given in `items`; defaults to the label. */\n @property({ attribute: false }) renderOption?: DapDSOptionRenderer\n\n /** `data-testid` for the clear button. */\n @property() clearButtonTestId = 'combobox-clear-button'\n\n /** `data-testid` for the search button. */\n @property() searchButtonTestId = 'combobox-search-button'\n\n /**\n * When enabled, the search button (the trailing icon button in search mode) is\n * automatically disabled while the input is empty and re-enabled as soon as the\n * user types. Opt-in; does not affect the input itself, which stays editable.\n */\n @property({ type: Boolean }) disableSearchWhenEmpty = false\n\n /** True when the search input currently holds non-whitespace text. */\n private get hasSearchText(): boolean {\n const text = this.selectedText || this.selectedItemText || this.value || ''\n return text.trim().length > 0\n }\n\n @state() selectedItem: any\n\n /**\n * Display text of the selected item. `selectedItem` is either an option element\n * (has `optionText`) when set from `value`, or an option event detail (has `text`)\n * when picked by the user; reading `.text` alone yields \"undefined\" for the former.\n */\n private get selectedItemText(): string {\n return this.selectedItem?.text ?? this.selectedItem?.optionText ?? ''\n }\n @state() selectedItems: any[] = []\n @state() currentItem: any\n @state() selectedText: string\n\n /**\n * Whether the input text filters the list. Typing turns it on; opening turns\n * it off when the input just shows the selection, so reopening lists every\n * option instead of only those matching the selected text.\n */\n @state() private filtering = true\n\n private optionListObserver: MutationObserver | null = null\n private isUserInteraction: boolean = false\n private pendingInitialValues: string[] = []\n\n static readonly styles = unsafeCSS(styles)\n\n protected async firstUpdated(\n _changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>,\n ): Promise<void> {\n super.firstUpdated(_changedProperties)\n\n await this.optionList.updateComplete\n\n // Wait for next frame to ensure slotted options are available\n await new Promise(resolve => requestAnimationFrame(resolve))\n\n // Wait for all option items to complete their updates\n const options = this.getComboboxOptions()\n\n await Promise.all(options.map((opt: any) => opt.updateComplete))\n\n // Get the underlying value, not the computed value from the getter\n const underlyingValue = super.value\n\n if (underlyingValue) {\n if (this.multiselect) {\n // Handle multiselect mode - parse comma-separated values\n const values = underlyingValue\n .split(',')\n .map((v: string) => v.trim())\n .filter((v: string) => v)\n // Store initial values to process later when options are ready\n this.pendingInitialValues = values\n // Try to populate immediately if options are available\n this.updateMultipleSelectionsFromValues(values)\n } else {\n // Handle single-select mode\n // Try to find the selected item from available options\n this.selectedItem = this.optionList\n ?.getAllOptions()\n .find(option => option.value === underlyingValue)\n\n if (this.selectedItem) {\n this.selectedText = this.selectedItem.optionText || ''\n } else {\n // If no selected item found, leave selectedText empty\n // It will be updated when options are loaded via updateSelectionFromValue\n this.selectedText = ''\n }\n\n if (\n !this.selectedText &&\n (this.allowManualInput || this.searchMode === 'none')\n ) {\n this.selectedText = underlyingValue\n }\n }\n }\n\n // Set up MutationObserver to watch for dynamic option changes\n this.setupOptionListObserver()\n }\n\n protected updated(\n _changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>,\n ): void {\n super.updated(_changedProperties)\n\n // Focus stays in the input when the list opens, so nothing scrolls the\n // active (e.g. selected) option into view: ask the list to reveal it.\n if (_changedProperties.has('opened') && this.opened) {\n this.optionList?.revealActiveOption()\n }\n\n // New `items` (e.g. remote results) take the same path as option children\n // added to the light DOM, which the option MutationObserver handles.\n if (_changedProperties.has('items')) {\n this.updateComboboxState()\n }\n\n // Handle value property changes from outside the component\n // Only process for combobox components, not search components\n // Skip multiselect mode as the setter already handles value updates\n if (\n _changedProperties.has('value') &&\n this.triggerInput &&\n !this.search &&\n !this.multiselect\n ) {\n const newValue = this.value\n if (newValue) {\n this.handleValueChange(newValue)\n } else {\n this.clearSelection()\n }\n }\n\n // Free-text search (searchMode 'none' or allowManualInput) has no option to\n // map onto, so the branch above skips it and the value never reaches the\n // uncontrolled input. Reflect an externally-set value straight into the field\n // so the search box is controllable (e.g. restoring a saved query). Typehead/\n // autocomplete search keeps its existing behaviour. The guard leaves the\n // input untouched when it already matches, so a keystroke — which set the\n // value in the first place — doesn't bounce the caret to the end.\n if (\n _changedProperties.has('value') &&\n this.triggerInput &&\n this.isFreeTextSearch\n ) {\n // A value that came from picking an option shows that option's text,\n // not its raw value; any other value is the query text itself.\n const picked =\n this.selectedItem && this.selectedItem.value === this.value\n ? this.selectedItemText\n : ''\n const newValue = picked || (this.value ?? '')\n if (this.triggerInput.value !== newValue) {\n this.triggerInput.value = newValue\n }\n this.selectedText = newValue\n }\n }\n\n private get isFreeTextSearch(): boolean {\n return (\n Boolean(this.search) &&\n (this.searchMode === 'none' || Boolean(this.allowManualInput))\n )\n }\n\n /**\n * Handles value changes from outside the component\n * This ensures the selection state is updated when the value is set programmatically\n */\n private handleValueChange(newValue: string): void {\n if (!newValue) return\n\n // Mark this as programmatic change, not user interaction\n this.isUserInteraction = false\n\n // Try to find the option with the new value\n const option = this.findOptionForValue(newValue)\n\n if (option) {\n // Option found, update selection\n this.selectedItem = option\n this.selectedText = option.optionText || option.textContent || ''\n\n // Update the input value\n if (this.triggerInput) {\n this.triggerInput.value = this.selectedText\n }\n\n // Trigger re-render\n this.requestUpdate()\n } else {\n // Option not found yet (might be loading)\n this.selectedItem = null\n\n // For search components, preserve the selectedText to maintain search functionality\n // For combobox components, clear it to avoid showing raw values\n if (!this.search) {\n this.selectedText = ''\n\n // Clear input value\n if (this.triggerInput) {\n this.triggerInput.value = ''\n }\n }\n\n // Trigger re-render\n this.requestUpdate()\n }\n }\n\n private setupOptionListObserver(): void {\n if (!this.optionList) return\n\n // Disconnect existing observer if any\n if (this.optionListObserver) {\n this.optionListObserver.disconnect()\n }\n\n // Create new observer to watch for changes in the option list\n this.optionListObserver = new MutationObserver(mutations => {\n let shouldUpdateState = false\n\n mutations.forEach(mutation => {\n if (mutation.type === 'childList') {\n // Check if option items were added or removed\n const addedOptions = Array.from(mutation.addedNodes).some(\n node => node.nodeName === 'DAP-DS-OPTION-ITEM',\n )\n const removedOptions = Array.from(mutation.removedNodes).some(\n node => node.nodeName === 'DAP-DS-OPTION-ITEM',\n )\n\n if (addedOptions || removedOptions) {\n shouldUpdateState = true\n }\n }\n })\n\n if (shouldUpdateState) {\n // Update combobox state based on new option list\n this.updateComboboxState()\n }\n })\n\n // Start observing the combobox element itself for slot changes\n // This is needed because remote data is added directly to the combobox element\n this.optionListObserver.observe(this, {\n childList: true,\n subtree: true,\n })\n }\n\n private updateComboboxState(): void {\n // Wait for the next tick to ensure DOM is updated\n requestAnimationFrame(() => {\n // Wait one more tick to ensure options are fully initialized\n requestAnimationFrame(() => {\n const hasOptions = this.getComboboxOptions().length > 0\n const hasInputValue =\n this.triggerInput?.value && this.triggerInput.value.trim() !== ''\n\n // If we have options and the dropdown should be open, show it\n // For search components (this.search = true) or autocomplete mode\n // Only open if this is a user interaction, not programmatic value setting\n if (\n hasOptions &&\n hasInputValue &&\n (this.isAutoComplete || this.search) &&\n this.isUserInteraction\n ) {\n if (!this.opened) {\n this.showDropDown()\n }\n } else if (!hasOptions && !this.openOnEmpty && hasInputValue) {\n // If no options and we don't allow empty, hide the dropdown\n // But only if the user has actually typed something\n this.hideDropDown()\n }\n\n // Handle value restoration when options become available\n if (hasOptions) {\n if (this.multiselect) {\n // For multiselect, check if selectedItems needs to be populated\n if (\n this.selectedItems.length === 0 &&\n this.pendingInitialValues.length > 0\n ) {\n this.updateMultipleSelectionsFromValues(this.pendingInitialValues)\n }\n } else {\n // For single-select, check if selectedItem needs to be populated\n if (this.value && !this.selectedItem) {\n this.updateSelectionFromValue()\n }\n }\n }\n })\n })\n }\n\n /**\n * Updates the selection state based on the current value\n * This is useful when options are loaded asynchronously\n */\n private updateSelectionFromValue(): void {\n if (!this.value) return\n\n // Mark this as programmatic change, not user interaction\n this.isUserInteraction = false\n\n const option = this.findOptionForValue(this.value)\n\n if (option) {\n this.selectedItem = option\n this.selectedText = option.optionText || option.textContent || ''\n\n // Update the input value to show the selected text\n if (this.triggerInput) {\n this.triggerInput.value = this.selectedText\n }\n\n // Trigger re-render to update clear icon visibility\n this.requestUpdate()\n }\n }\n\n private cleanupOptionListObserver(): void {\n if (this.optionListObserver) {\n this.optionListObserver.disconnect()\n this.optionListObserver = null\n }\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback()\n this.cleanupOptionListObserver()\n }\n\n attributeChangedCallback(\n name: string,\n _old: string | null,\n value: string | null,\n ): void {\n if (name === 'value' && !value) {\n this.clearSelection()\n }\n\n super.attributeChangedCallback(name, _old, value)\n }\n\n get isAutoComplete() {\n return this.searchMode === 'autocomplete' || this.searchMode === 'manual'\n }\n\n /**\n * The option a value refers to. With `searchForText` a pick stores the\n * option's text as the value, so fall back to matching the text; otherwise\n * the pick is treated as an unknown value and the input gets cleared.\n */\n private findOptionForValue(value: string | undefined) {\n const options = this.getComboboxOptions()\n return (\n options.find(opt => opt.value === value) ??\n (this.searchForText\n ? options.find(opt => opt.optionText === value)\n : undefined)\n )\n }\n\n /** The option value the list should mark as selected. */\n private get listValue(): string | undefined {\n // searchForText stores the text; the list matches on the option value\n return this.searchForText\n ? (this.selectedItem?.value ?? this.value)\n : this.value\n }\n\n /**\n * Get all option items directly from the combobox element\n * This is more reliable for dynamic updates than the option list component\n */\n private getComboboxOptions(): any[] {\n if (this.items) {\n return optionElementsFor(this.items)\n }\n return Array.from(this.querySelectorAll('dap-ds-option-item'))\n }\n\n get isOpenOnEmpty() {\n return (\n this.openOnEmpty ||\n (!this.openOnEmpty && this.getComboboxOptions().length > 0)\n )\n }\n\n get isOpenOnAutocomplete() {\n return this.isAutoComplete && this.isOpenOnEmpty\n }\n\n get shouldHideClearIcon() {\n // Check if input is empty (cross-browser compatible)\n const inputValue = this.triggerInput?.value || ''\n const hasPlaceholder = this.placeholder && this.placeholder.trim() !== ''\n\n // Only apply JavaScript fallback when there's no placeholder\n // When there IS a placeholder, let CSS :placeholder-shown handle it\n if (hasPlaceholder) {\n return false // Let CSS handle it\n }\n\n // Hide clear icon when input is empty and has no placeholder\n return inputValue === ''\n }\n\n handleClick = () => {\n if (!this.getComboboxOptions().length && !this.openOnEmpty) {\n this.hideDropDown()\n } else {\n this.opened ? this.hideDropDown() : this.showDropDown()\n }\n }\n\n private async handleEnterKey(event: KeyboardEvent) {\n event.preventDefault()\n event.stopPropagation()\n\n if (this.allowManualInput) {\n return this.handleSearchEnter()\n }\n\n if (this.currentItem && this.opened) {\n return this.handleCurrentItemEnter()\n }\n\n if (this.search && !this.isAutoComplete) {\n return this.handleSearchEnter()\n }\n\n return this.handleDefaultEnter()\n }\n\n private async handleCurrentItemEnter() {\n if (this.currentItem.value === this.selectedItem?.value) {\n this.hideDropDown()\n this.triggerInput.value = this.selectedItemText\n this.triggerInput.focus()\n return\n }\n\n if (this.currentItem.value !== this.selectedItem?.value) {\n if (!this.searchForText) {\n await this.handleSelectedItemChange(this.currentItem)\n } else {\n await this.handleTextSearch(this.currentItem.text)\n }\n }\n }\n\n private async handleSearchEnter() {\n this.emit('dds-search', { search: this.selectedText })\n this.setValidity()\n return this.hideDropDown()\n }\n\n private async handleDefaultEnter() {\n if (this.opened) {\n return this.hideDropDown()\n } else {\n // For autocomplete mode, allow opening even without options initially\n // The MutationObserver will handle showing/hiding based on actual option availability\n return (\n (this.openOnEmpty ||\n this.getComboboxOptions().length ||\n this.isAutoComplete) &&\n this.showDropDown()\n )\n }\n }\n\n private async handleSelectedItemChange(item: any) {\n this.selectedItem = item\n this.emit('dds-change', {\n value: this.selectedItem.value,\n selectedItem: this.selectedItem,\n type: 'select',\n })\n await this.updateComplete\n this.value = this.selectedItem.value\n this.selectedText = this.currentItem.text\n this.triggerInput.value = this.currentItem.text\n this.triggerInput.focus()\n this.setValidity()\n // Close like a pick from the list does (handleSelectedChange); multiselect stays open\n if (!this.multiselect) {\n await this.hideDropDown()\n }\n }\n\n private async handleTextSearch(text: string) {\n this.value = text\n this.selectedText = text\n this.triggerInput.value = text\n this.triggerInput.focus()\n this.emit('dds-search', { search: text })\n this.setValidity()\n await this.hideDropDown()\n }\n\n private async handleArrowKeys(event: KeyboardEvent) {\n event.preventDefault()\n\n if (!this.opened) {\n // For autocomplete mode, allow opening even without options initially\n // The MutationObserver will handle showing/hiding based on actual option availability\n if (\n this.openOnEmpty ||\n this.getComboboxOptions().length ||\n this.isAutoComplete\n ) {\n this.showDropDown()\n } else {\n return // Don't proceed if we can't open dropdown\n }\n }\n\n await this.updateComplete\n this.optionList.captureFocus(event.key)\n }\n\n handleKeyDown = async (event: KeyboardEvent) => {\n if (event.key === 'Tab') {\n // Close the list so its options leave the tab order; Tab then moves on natively\n this.hideDropDown({ skipFocus: true })\n return\n }\n\n if (event.key === 'Enter') {\n return this.handleEnterKey(event)\n }\n\n if (event.key === 'Escape') {\n this.hideDropDown()\n return this.focus()\n }\n\n // Handle Backspace for chip removal in multiselect mode\n if (event.key === 'Backspace' && this.multiselect) {\n const inputValue = this.triggerInput?.value || ''\n // Only remove chip if input is empty\n if (inputValue === '' && this.selectedItems.length > 0) {\n event.preventDefault()\n const lastItem = this.selectedItems[this.selectedItems.length - 1]\n this.removeSelectedItem(lastItem)\n this.emit('dds-change', {\n value: this.selectedItems.map(item => item.value).join(','),\n selectedItems: this.selectedItems,\n type: 'remove',\n item: lastItem,\n })\n this.setValidity()\n return\n }\n }\n\n if (\n (event.key === 'ArrowDown' ||\n event.key === 'ArrowUp' ||\n event.key === 'ArrowLeft' ||\n event.key === 'ArrowRight') &&\n this.isAutoComplete\n ) {\n return this.handleArrowKeys(event)\n }\n\n // For autocomplete mode, only show dropdown if there are options OR if openOnEmpty is true\n if (this.isAutoComplete && this.triggerInput?.value && !this.opened) {\n const hasOptions = this.getComboboxOptions().length > 0\n if (this.openOnEmpty || hasOptions) {\n this.showDropDown()\n }\n }\n }\n\n handleInput = async (event: InputEvent) => {\n const input = this.triggerInput\n this.filtering = true\n\n // Mark this as user interaction\n this.isUserInteraction = true\n if (\n event.inputType !== 'deleteContentBackward' ||\n (event.inputType === 'deleteContentBackward' && this.allowManualInput)\n ) {\n this.selectedText = input.value\n if (this.search) {\n this.value = input.value\n }\n } else if (this.search) {\n this.selectedText = input.value\n this.value = input.value\n } else if (\n input.value === '' &&\n event.inputType === 'deleteContentBackward'\n ) {\n this.clearSelection()\n } else if (!this.textComplete) {\n // Deleting widens the filter to follow the input. With textComplete the\n // filter stays put: Backspace first removes the completed suffix, and\n // re-filtering would complete the text again straight away.\n this.selectedText = input.value\n }\n\n this.emit('dds-input', { input: input.value, originalEvent: event })\n this.setValidity()\n\n // Trigger re-render to update clear icon visibility\n this.requestUpdate()\n\n // For autocomplete mode, only show dropdown if there are options OR if openOnEmpty is true\n if (this.isAutoComplete && input.value && !this.opened) {\n const hasOptions = this.getComboboxOptions().length > 0\n if (this.openOnEmpty || hasOptions) {\n this.showDropDown()\n }\n }\n }\n\n async clearSelection() {\n // Mark this as programmatic change, not user interaction\n this.isUserInteraction = false\n\n // Was there anything to clear? Clearing an already-empty control (e.g. a\n // programmatic `value = ''` on mount) must stay silent — otherwise it fires\n // dds-change as if the user cleared a value, which a consumer reads as an\n // edit. A real clear (the × button on a filled field) still emits.\n const hadValue = Boolean(\n this.value || this.selectedText || this.triggerInput?.value,\n )\n\n if (this.triggerInput) {\n this.triggerInput.value = ''\n }\n this.selectedText = ''\n this.selectedItem = null\n\n this.value = undefined\n\n // Trigger re-render to update clear icon visibility\n this.requestUpdate()\n\n await this.updateComplete\n\n if (hadValue) {\n this.emit('dds-change', this.selectedItem)\n }\n }\n\n /**\n * Multiselect helper methods\n */\n private getSelectedValues(): string[] {\n return this.selectedItems.map(item => item.value)\n }\n\n private isMaxSelectionsReached(): boolean {\n if (!this.maxSelections) return false\n return this.selectedItems.length >= this.maxSelections\n }\n\n private addSelectedItem(item: any): void {\n if (!this.multiselect) return\n\n // Check if item is already selected\n const isAlreadySelected = this.selectedItems.some(\n selected => selected.value === item.value,\n )\n\n if (isAlreadySelected) return\n\n // Check max selections limit\n if (this.isMaxSelectionsReached()) return\n\n // Add item to selectedItems array\n this.selectedItems = [...this.selectedItems, item]\n\n // Update value to comma-separated string (use super to avoid setter loop)\n const newValue = this.getSelectedValues().join(',')\n super.value = newValue\n\n // Clear input text\n this.selectedText = ''\n if (this.triggerInput) {\n this.triggerInput.value = ''\n }\n\n // Trigger re-render\n this.requestUpdate()\n }\n\n private removeSelectedItem(item: any): void {\n if (!this.multiselect) return\n\n // Remove item from selectedItems array\n this.selectedItems = this.selectedItems.filter(\n selected => selected.value !== item.value,\n )\n\n // Update value to comma-separated string (use super to avoid setter loop)\n if (this.selectedItems.length === 0) {\n super.value = undefined\n } else {\n const newValue = this.getSelectedValues().join(',')\n super.value = newValue\n }\n\n // Trigger re-render\n this.requestUpdate()\n }\n\n private clearAllSelections(): void {\n if (!this.multiselect) return\n\n // Clear all selections\n this.selectedItems = []\n super.value = undefined\n this.selectedText = ''\n\n if (this.triggerInput) {\n this.triggerInput.value = ''\n }\n\n // Trigger re-render\n this.requestUpdate()\n }\n\n private updateMultipleSelectionsFromValues(values: string[]): void {\n if (!this.multiselect) return\n\n const options = this.getComboboxOptions()\n\n // Don't clear if we've already populated items\n const shouldClear = this.selectedItems.length === 0\n if (shouldClear) {\n this.selectedItems = []\n }\n\n let foundAny = false\n values.forEach(value => {\n // Check both property and attribute since elements might not be fully upgraded\n const option = options.find(\n opt => opt.value === value || opt.getAttribute('value') === value,\n )\n if (option) {\n // Check if already in selectedItems to avoid duplicates\n const exists = this.selectedItems.some(item => item.value === value)\n if (!exists) {\n this.selectedItems.push(option)\n foundAny = true\n }\n }\n })\n\n // Clear pending values if we successfully found items\n if (foundAny && this.pendingInitialValues.length > 0) {\n this.pendingInitialValues = []\n }\n\n // Trigger re-render\n this.requestUpdate()\n }\n\n /**\n * Override value getter/setter to handle multiselect mode\n */\n override get value(): string | undefined {\n if (this.multiselect) {\n const values = this.getSelectedValues()\n const result = values.length > 0 ? values.join(',') : undefined\n return result\n }\n return super.value\n }\n\n override set value(val: string | undefined) {\n if (this.multiselect) {\n // Parse comma-separated values\n const values = val\n ? val\n .split(',')\n .map((v: string) => v.trim())\n .filter((v: string) => v)\n : []\n\n // Store as pending if we have values and selectedItems is empty\n // This ensures initial values are processed even if set after component is created\n if (values.length > 0 && this.selectedItems.length === 0) {\n this.pendingInitialValues = values\n }\n\n this.updateMultipleSelectionsFromValues(values)\n\n // Update parent value\n super.value = val\n } else {\n // Single select mode - use parent implementation\n super.value = val\n }\n }\n\n handleListKeyDown = (event: CustomEvent) => {\n if (event.detail?.key === 'Tab') {\n // Move focus back to the input synchronously so the native Tab continues\n // from there and leaves the combobox instead of cycling inside the list.\n this.hideDropDown({ skipFocus: true })\n this.triggerInput.focus()\n return\n }\n\n if (event.detail?.key === 'Escape') {\n const typed = this.selectedText || ''\n this.hideDropDown()\n this.currentItem = this.selectedItem\n this.selectedText = ''\n if (this.selectedItem) {\n this.triggerInput.value = this.selectedItemText\n } else {\n // Nothing selected yet (user only typed): restore the typed text, which\n // textComplete may have replaced with the focused option's text.\n this.triggerInput.value = typed\n }\n this.triggerInput.focus()\n }\n }\n\n handleDocumentMouseDown = (event: MouseEvent) => {\n const path = event.composedPath()\n if (this && !path.includes(this)) {\n this.hideDropDown()\n }\n }\n\n private readonly handlePopupAutoClose = () => {\n this.hideDropDown({ skipFocus: true })\n }\n\n handleFocus = () => {\n this.emit('dds-focus')\n }\n\n handleBlur = () => {\n this.emit('dds-blur')\n }\n\n async showDropDown() {\n if (this.disabled || this.readonly || !this.isAutoComplete || this.opened) {\n return\n }\n\n // For autocomplete mode, allow opening even without options initially\n // The MutationObserver will handle showing/hiding based on actual option availability\n if (\n !this.openOnEmpty &&\n !this.getComboboxOptions().length &&\n !this.isAutoComplete\n ) {\n return\n }\n\n const text = this.triggerInput?.value ?? ''\n if (text && text === this.selectedItemText) {\n this.filtering = false\n }\n this.opened = true\n\n document.addEventListener('mousedown', this.handleDocumentMouseDown)\n }\n\n async hideDropDown(options?: { skipFocus?: boolean }) {\n if (!this.opened) {\n return\n }\n\n this.opened = false\n\n document.removeEventListener('mousedown', this.handleDocumentMouseDown)\n\n await this.updateComplete\n if (!options?.skipFocus) {\n this.focus()\n }\n this.clearSelectionRange()\n }\n\n public get focusElement() {\n return this.triggerInput\n }\n\n handleSelectedChange = async (event: CustomEvent) => {\n event.preventDefault()\n event.stopPropagation()\n\n if (this.searchForText) {\n this.selectedText = event.detail.text\n this.value = event.detail.text\n this.triggerInput.value = event.detail.text\n\n this.emit('dds-search', { search: this.selectedText })\n\n // Trigger re-render to update clear icon visibility\n this.requestUpdate()\n\n this.setValidity()\n } else if (this.multiselect) {\n // Multiselect mode - add item to selected items\n this.addSelectedItem(event.detail)\n this.emit('dds-change', {\n value: this.selectedItems.map(item => item.value).join(','),\n selectedItems: this.selectedItems,\n type: 'add',\n item: event.detail,\n })\n\n // Clear current item to prevent text completion from filling it back in\n this.currentItem = null\n\n // Wait for update to complete before focusing\n await this.updateComplete\n\n // Ensure input is cleared after render\n this.triggerInput.value = ''\n this.triggerInput.focus()\n this.setValidity()\n\n // Don't close dropdown in multiselect mode\n return\n } else {\n this.selectedItem = event.detail\n this.selectedText = event.detail.text\n\n if (this.value !== this.selectedItem?.value) {\n this.triggerInput.value = event.detail.text\n this.value = this.selectedItem.value\n this.emit('dds-change', {\n value: this.selectedItem.value,\n selectedItem: this.selectedItem,\n type: 'select',\n })\n\n // Trigger re-render to update clear icon visibility\n this.requestUpdate()\n\n await this.updateComplete\n\n if (this.currentItem) {\n this.triggerInput.value = this.currentItem.text\n }\n this.triggerInput.focus()\n this.setValidity()\n }\n }\n\n this.hideDropDown()\n }\n\n handleOptionDeselect = (event: CustomEvent) => {\n event.preventDefault()\n event.stopPropagation()\n\n this.selectedItem = null\n this.selectedText = ''\n this.value = undefined\n this.triggerInput.value = ''\n this.emit('dds-change', {\n value: undefined,\n selectedItem: null,\n type: 'deselect',\n })\n\n // Trigger re-render to update clear icon visibility\n this.requestUpdate()\n\n this.setValidity()\n }\n\n handleCurrentOptionChange = (event: CustomEvent) => {\n this.currentItem = event.detail\n\n // Skip text completion in multiselect mode\n if (this.multiselect) {\n return\n }\n\n if (event.detail) {\n // Complete only text the user has typed (or a selection's text): with an\n // empty input, highlighting an option (e.g. the first one on mount) must\n // not write it into the field as if it were chosen.\n if (\n this.textComplete &&\n this.selectedText &&\n this.searchMode !== 'manual' &&\n this.searchMode !== 'none'\n ) {\n this.triggerInput.value = event.detail.text\n }\n\n if (\n this.isAutoComplete &&\n this.selectedText &&\n this.selectedText !== '' &&\n !this.allowManualInput &&\n this.textComplete\n ) {\n this.triggerInput.value = event.detail.text\n this.setSelectionRange(\n this.selectedText.length,\n this.triggerInput.value.length,\n )\n }\n }\n }\n\n handleListChanged = (event: CustomEvent) => {\n // Before its first slotchange the list reports an empty list although the\n // combobox has options; that is not \"no matches\", so an `opened` combobox\n // must not close on mount.\n const filterText = this.filtering ? this.selectedText || '' : ''\n const listNotLoaded =\n this.searchMode !== 'manual' &&\n filterOptions(this.getComboboxOptions(), filterText).length > 0\n if (!event.detail.elements.length && !this.openOnEmpty && !listNotLoaded) {\n this.hideDropDown()\n } else if (this.opened && event.detail.elements.length) {\n // Options (re)loaded while open, e.g. an `opened` combobox on mount:\n // reveal the active option once the popup has laid them out.\n this.optionList?.revealActiveOption()\n }\n }\n\n handleClearClick = () => {\n if (!this.disabled) {\n if (this.multiselect) {\n this.clearAllSelections()\n } else {\n this.clearSelection()\n }\n\n this.triggerInput.focus()\n this.setValidity()\n\n if (!this.openOnEmpty) {\n this.hideDropDown()\n }\n\n this.emit('dds-clear')\n }\n }\n\n handleSearchClick = (event: MouseEvent) => {\n event.stopPropagation()\n event.preventDefault()\n\n this.setValidity()\n this.emit('dds-search', { search: this.selectedText })\n }\n\n private setSelectionRange(start: number, end: number) {\n this.triggerInput.setSelectionRange(start, end)\n }\n\n private clearSelectionRange() {\n const controlValueLength = this.triggerInput.value.length\n\n this.setSelectionRange(controlValueLength, controlValueLength)\n }\n\n getValidity() {\n if (this.multiselect) {\n return this.getMultiSelectValidity()\n }\n if (this.isAutoComplete) {\n return this.getAutoCompleteValidity()\n }\n return this.getBasicValidity()\n }\n\n formResetCallback() {\n this.internals.setValidity({})\n this.internals.setFormValue(this.defaultValue)\n this.value = this.defaultValue\n if (this.multiselect) {\n this.selectedItems = []\n } else {\n // Resolve to the option element; a bare value string has no value/text fields\n this.selectedItem =\n this.getComboboxOptions().find(\n option => option.value === this.defaultValue,\n ) ?? null\n }\n }\n\n private getMultiSelectValidity(): boolean {\n // Valid if not required OR has at least one selection\n return !this.required || this.selectedItems.length > 0\n }\n\n private getAutoCompleteValidity(): boolean {\n if (this.allowManualInput) {\n return this.getManualInputValidity()\n }\n if (this.searchForText) {\n return this.getSearchTextValidity()\n }\n return this.getSelectedItemValidity()\n }\n\n private getManualInputValidity(): boolean {\n return (\n this.triggerInput.value !== '' ||\n (this.selectedItem !== null && this.selectedItem !== undefined)\n )\n }\n\n private getSearchTextValidity(): boolean {\n return this.triggerInput.value !== ''\n }\n\n private getSelectedItemValidity(): boolean {\n return !!this.selectedItem\n }\n\n private getBasicValidity(): boolean {\n return this.triggerInput.value !== ''\n }\n\n // custom validation\n get validity(): ValidityState {\n if (this.internals.validity) {\n return this.internals.validity\n } else {\n return getValidityStateObject({\n valueMissing: this.required && !this.getValidity(),\n })\n }\n }\n\n get validationMessage(): string {\n return t('form.validationMessage.select')\n }\n\n checkValidity() {\n return this.required ? this.getValidity() : true\n }\n\n reportValidity() {\n return this.required ? this.checkValidity() : true\n }\n\n setValidity() {\n if (!this.checkValidity()) {\n this.internals.setValidity(\n {\n valueMissing: this.required && !this.getValidity(),\n },\n this.validationMessage,\n this.triggerInput,\n )\n } else {\n this.internals.setValidity({})\n }\n }\n\n handleInvalid(event: Event) {\n event.preventDefault()\n }\n\n /**\n * Screen-reader status for the highlighted option while focus stays in the input.\n * aria-activedescendant cannot reach options inside option-list's shadow root, so\n * the highlight (e.g. the first match after typing) is announced through a polite\n * live region instead. Once focus moves onto an option it is announced natively,\n * so the status is cleared to avoid a double announcement.\n */\n get activeOptionStatus(): string {\n if (\n !this.opened ||\n !this.currentItem ||\n this.shadowRoot?.activeElement !== this.triggerInput\n ) {\n return ''\n }\n\n const options = this.optionList?.getAllAvailabeOptions() ?? []\n const index = options.findIndex(\n option => option.value === this.currentItem.value,\n )\n if (index < 0) {\n return ''\n }\n\n return t('combobox.activeOption', {\n option: this.currentItem.text,\n position: index + 1,\n count: options.length,\n })\n }\n\n getActiveDescendant() {\n if (!this.opened) {\n return this.triggerInput\n }\n\n const activeOption = this.optionList?.getActiveOption()\n return activeOption\n }\n\n getSearchIconSize(size: string) {\n switch (size) {\n case 'sm':\n return 'md'\n case 'lg':\n return 'lg'\n case 'xs':\n return 'sm'\n default:\n return 'md'\n }\n }\n\n getInnerIconSize(size: string) {\n switch (size) {\n case 'sm':\n return 16\n case 'lg':\n return 16\n case 'xs':\n return 10\n default:\n return 16\n }\n }\n\n private handleChipRemove = (event: CustomEvent, item: any) => {\n event.stopPropagation()\n this.removeSelectedItem(item)\n this.emit('dds-change', {\n value: this.selectedItems.map(item => item.value).join(','),\n selectedItems: this.selectedItems,\n type: 'remove',\n item: item,\n })\n this.setValidity()\n\n // Focus input after removal\n this.triggerInput.focus()\n }\n\n private renderChip(item: any) {\n // Get text from the option element - prefer optionText getter, then textContent\n const text = item.optionText || item.textContent || item.text || ''\n\n return html`\n <dap-ds-chip\n size=\"sm\"\n removeable\n .value=${item.value}\n @dds-remove=${(e: CustomEvent) => this.handleChipRemove(e, item)}>\n ${text}\n </dap-ds-chip>\n `\n }\n\n private renderChips() {\n if (!this.multiselect || this.selectedItems.length === 0) {\n return nothing\n }\n\n return html`\n <div class=\"combobox__chips\" part=\"chips\">\n ${this.selectedItems.map(item => this.renderChip(item))}\n </div>\n `\n }\n\n private renderInput() {\n // In multiselect mode, only show selectedText (typing), never show selectedItem\n const inputValue = this.multiselect\n ? this.selectedText\n : this.selectedText !== ''\n ? this.selectedText\n : this.selectedItemText\n\n return html`<input\n id=\"input\"\n part=\"input\"\n role=\"combobox\"\n class=\"${clsx('input', `input--${this.size}`, {\n 'input--disabled': this.disabled,\n 'input--readonly': this.readonly,\n 'input--multiselect': this.multiselect,\n })}\"\n aria-expanded=${this.opened ? 'true' : 'false'}\n aria-haspopup=\"listbox\"\n aria-labelledby=\"label\"\n aria-describedby=\"description ${this.feedback ? 'feedback' : ''}\"\n aria-disabled=${this.disabled}\n aria-autocomplete=\"both\"\n aria-controls=\"option-list\"\n aria-activedescendant=${ifDefined(\n // Options render in option-list's shadow root, out of this scope; a\n // cross-scope IDREF is ignored by browsers, so only same-scope ids are set.\n // Closed: no active descendant (the input must not reference itself).\n this.opened\n ? idInScope(this.shadowRoot, this.getActiveDescendant())\n : undefined,\n )}\n ?required=${this.required}\n ?readonly=${this.readonly}\n ?autofocus=${this.autofocus}\n autocomplete=${this.autocomplete as any}\n ?disabled=${this.disabled}\n value=${inputValue}\n placeholder=${ifDefined(this.placeholder ?? '')}\n type=${this.search ? 'search' : 'text'}\n @blur=${this.handleBlur}\n @focus=${this.handleFocus}\n @input=${this.handleInput}\n @keydown=${this.handleKeyDown}\n @click=${this.handleClick} />`\n }\n\n private renderClearButton() {\n if (this.clearButton !== 'true' || this.readonly) return nothing\n\n return html`<div\n class=\"${clsx('clear-icon', {\n 'clear-icon--hidden': this.shouldHideClearIcon,\n })}\">\n <dap-ds-icon-button\n icon=\"close-line\"\n data-testid=${this.clearButtonTestId}\n aria-label=${t('clear')}\n ?disabled=${this.disabled}\n @click=${this.handleClearClick}></dap-ds-icon-button>\n </div>`\n }\n\n private renderIndicatorIcon() {\n const isAutocompleteOrManual =\n this.searchMode === 'autocomplete' || this.searchMode === 'manual'\n const showLoadingSpinner = this.loading\n ? html`<dap-ds-icon-loading-spinner></dap-ds-icon-loading-spinner>`\n : null\n\n if (isAutocompleteOrManual && !this.search) {\n return html`<div\n class=\"${clsx('indicator-icon', {\n 'indicator-icon--loading': this.loading,\n })}\"\n part=\"indicator-icon\">\n ${showLoadingSpinner ||\n html`<slot name=\"indicator-icon\"\n ><dap-ds-icon-arrow-down-s-line\n aria-hidden=\"true\"\n @click=${this.handleClick}>\n </dap-ds-icon-arrow-down-s-line\n ></slot>`}\n </div>`\n }\n\n if (this.search) {\n return html`<div\n class=\"${clsx('indicator-icon', {\n 'indicator-icon--loading': this.loading,\n })}\">\n ${showLoadingSpinner ||\n html`<dap-ds-icon-button\n part=\"search-button\"\n size=${this.getSearchIconSize(this.size)}\n variant=${this.subtle ? 'neutral' : 'inverted-brand'}\n icon=\"search-line\"\n ?disabled=${this.disableSearchWhenEmpty && !this.hasSearchText}\n data-testid=${this.searchButtonTestId}\n iconSize=${this.getInnerIconSize(this.size)}\n aria-label=${this.searchButtonAriaLabel ?? t('search')}\n @click=${this.handleSearchClick}>\n </dap-ds-icon-button>`}\n </div>`\n }\n\n return nothing\n }\n\n private renderSelectActions() {\n return html`<div\n class=\"${clsx('select-action', `select-action--${this.size}`, {\n 'select-action--disabled': this.disabled,\n 'select-action--readonly': this.readonly,\n 'select-action--opened': this.opened,\n 'select-action--multiselect': this.multiselect,\n })}\">\n ${this.renderClearButton()} ${this.renderIndicatorIcon()}\n </div>`\n }\n\n private renderOptionList() {\n return html`<dap-ds-option-list\n class=\"option-list\"\n part=\"option-list\"\n id=\"option-list\"\n .search=${this.search}\n searchMode=${this.allowManualInput ? 'none' : this.searchMode}\n searchOnValueSet=${this.searchOnValueSet === 'true'}\n filterText=${this.filtering ? this.selectedText : ''}\n size=${ifDefined(this.size)}\n value=${ifDefined(this.listValue)}\n selectable=${ifDefined(this.selectable)}\n ?multiselectable=${this.multiselect}\n .items=${this.items}\n .renderOption=${this.renderOption}\n @dds-option-change=${this.handleSelectedChange}\n @dds-option-deselect=${this.handleOptionDeselect}\n @dds-keydown=${this.handleListKeyDown}\n @dds-current-change=${this.handleCurrentOptionChange}\n @dds-list-changed=${this.handleListChanged}>\n <slot></slot>\n </dap-ds-option-list>`\n }\n\n renderCombobox() {\n return html` ${(this, this.renderLabel(undefined, 'input'))}\n <div>\n <dap-ds-popup\n part=\"base\"\n class=\"select-popup\"\n overflow\n ?opened=${this.opened}\n ?hasArrow=${false}\n placement=${this.placement}\n floatingStrategy=\"fixed\"\n offset=\"4\"\n ?sync=${this.sync}\n ?disableViewportAutoClose=${this.disableViewportAutoClose}\n @dds-close=${this.handlePopupAutoClose}\n @dds-closed=${this.hideDropDown}\n @dds-opened=${this.showDropDown}>\n <div\n slot=\"trigger\"\n part=\"trigger\"\n class=\"${clsx('select', `select--${this.size}`, {\n 'select--disabled': this.disabled,\n 'select--readonly': this.readonly,\n 'select--opened': this.opened,\n 'select--loading': this.loading,\n 'select--success': this.status === 'success',\n 'select--error': this.status === 'error',\n 'select--no-animation': this.noAnimation,\n 'select--multiselect': this.multiselect,\n })}\">\n ${this.renderChips()} ${this.renderInput()}\n ${this.renderSelectActions()}\n </div>\n ${this.renderOptionList()}\n </dap-ds-popup>\n <div\n class=\"sr-only active-option-status\"\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\">\n ${this.activeOptionStatus}\n </div>\n ${this.multiselect\n ? html`<div\n class=\"sr-only\"\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\">\n ${this.selectedItems.length > 0\n ? t('combobox.multiselect.selected', {\n count: this.selectedItems.length,\n })\n : ''}\n </div>`\n : nothing}\n ${this.feedback &&\n html`<dap-ds-feedback\n part=\"feedback\"\n feedbackType=${ifDefined(this.feedbackType)}\n feedbackSize=\"${ifDefined(this.size as 'lg' | 'sm' | 'xs')}\"\n id=\"feedback\">\n ${this.feedback}\n </dap-ds-feedback>`}\n </div>`\n }\n}\n"],"names":["_ComboboxBaseElement","GenericFormElement","event","__async","_a","lastItem","item","_b","hasOptions","input","typed","path","filterText","listNotLoaded","filterOptions","value","toOptionItems","_d","_c","_changedProperties","__superGet","resolve","options","opt","underlyingValue","values","v","option","newValue","mutations","shouldUpdateState","mutation","addedOptions","node","removedOptions","hasInputValue","name","_old","optionElementsFor","inputValue","text","hadValue","selected","foundAny","val","start","end","controlValueLength","getValidityStateObject","t","index","size","html","e","nothing","clsx","ifDefined","idInScope","isAutocompleteOrManual","showLoadingSpinner","unsafeCSS","styles","ComboboxBaseElement","__decorateClass","query","property","optionItemsConverter","state"],"mappings":"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"}
|
|
@@ -1,18 +1,14 @@
|
|
|
1
|
-
import "
|
|
2
|
-
import "
|
|
3
|
-
import "
|
|
4
|
-
import { property as n } from "../../node_modules/@lit/reactive-element/decorators/property.js";
|
|
5
|
-
import { state as p } from "../../node_modules/@lit/reactive-element/decorators/state.js";
|
|
6
|
-
import { html as d } from "../../node_modules/lit-html/static.js";
|
|
1
|
+
import { unsafeCSS as p } from "lit";
|
|
2
|
+
import { property as n, state as h } from "lit/decorators.js";
|
|
3
|
+
import { html as o } from "lit/static-html.js";
|
|
7
4
|
import { DdsElement as u } from "../../internal/dds-hu-element.js";
|
|
8
|
-
import
|
|
9
|
-
|
|
10
|
-
var
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
return e && f(s, l, e), e;
|
|
5
|
+
import v from "./command-group.scss.js";
|
|
6
|
+
var f = Object.defineProperty, d = (a, s, i, c) => {
|
|
7
|
+
for (var e = void 0, r = a.length - 1, m; r >= 0; r--)
|
|
8
|
+
(m = a[r]) && (e = m(s, i, e) || e);
|
|
9
|
+
return e && f(s, i, e), e;
|
|
14
10
|
};
|
|
15
|
-
const
|
|
11
|
+
const l = class l extends u {
|
|
16
12
|
constructor() {
|
|
17
13
|
super(...arguments), this.exclusive = !1, this._selectedItem = null;
|
|
18
14
|
}
|
|
@@ -30,13 +26,13 @@ const i = class i extends u {
|
|
|
30
26
|
}
|
|
31
27
|
_handleItemClick(s) {
|
|
32
28
|
if (!this.exclusive) return;
|
|
33
|
-
const
|
|
34
|
-
|
|
29
|
+
const c = s.target;
|
|
30
|
+
c !== this._selectedItem && (this._selectedItem && this._selectedItem.removeAttribute("selected"), this._selectedItem = c, this._selectedItem.setAttribute("selected", ""));
|
|
35
31
|
}
|
|
36
32
|
render() {
|
|
37
|
-
return
|
|
33
|
+
return o`
|
|
38
34
|
<div class="command-group" part="base">
|
|
39
|
-
${this.label ?
|
|
35
|
+
${this.label ? o`<div class="command-group__label" part="label">
|
|
40
36
|
${this.label}
|
|
41
37
|
</div>` : ""}
|
|
42
38
|
<div class="command-group__items" part="items">
|
|
@@ -46,16 +42,16 @@ const i = class i extends u {
|
|
|
46
42
|
`;
|
|
47
43
|
}
|
|
48
44
|
};
|
|
49
|
-
|
|
50
|
-
let t =
|
|
51
|
-
|
|
45
|
+
l.tagName = "dap-ds-command-group", l.styles = p(v);
|
|
46
|
+
let t = l;
|
|
47
|
+
d([
|
|
52
48
|
n({ type: String })
|
|
53
49
|
], t.prototype, "label");
|
|
54
|
-
|
|
50
|
+
d([
|
|
55
51
|
n({ type: Boolean })
|
|
56
52
|
], t.prototype, "exclusive");
|
|
57
|
-
|
|
58
|
-
|
|
53
|
+
d([
|
|
54
|
+
h()
|
|
59
55
|
], t.prototype, "_selectedItem");
|
|
60
56
|
export {
|
|
61
57
|
t as default
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-group.component.js","sources":["../../../src/components/command/command-group.component.ts"],"sourcesContent":["import { unsafeCSS } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { html } from 'lit/static-html.js'\n\nimport { DdsElement } from '../../internal/dds-hu-element'\nimport styles from './command-group.scss?inline'\n\n/**\n * `dap-ds-command-group`\n * @summary A command group is a group of command items.\n * @element dap-ds-command-group\n * @title - Command group\n * @group command\n *\n * @slot - The default slot for the command group.\n *\n * @csspart base - The base part of the command group.\n * @csspart label - The label part of the command group.\n * @csspart items - The items part of the command group.\n *\n * @cssproperty --dds-command-group-gap - The gap between command group elements. (default: var(--dds-spacing-100))\n * @cssproperty --dds-command-group-margin-bottom - The bottom margin of the command group. (default: var(--dds-spacing-200))\n * @cssproperty --dds-command-group-border-radius - The border radius of the command group. (default: var(--dds-radius-small))\n * @cssproperty --dds-command-group-label-font-weight - The font weight of the command group label. (default: var(--dds-font-weight-bold))\n * @cssproperty --dds-command-group-items-gap - The gap between command items. (default: var(--dds-spacing-100))\n */\nexport default class DapDSCommandGroup extends DdsElement {\n static tagName = 'dap-ds-command-group'\n\n static readonly styles = unsafeCSS(styles)\n\n /**\n * The label of the command group.\n */\n @property({ type: String })\n label?: string\n\n /**\n * Whether the command group is exclusive, only one item can be selected at a time.\n */\n @property({ type: Boolean })\n exclusive = false\n\n @state()\n private _selectedItem: HTMLElement | null = null\n\n connectedCallback() {\n super.connectedCallback()\n this.addEventListener(\n 'dds-command-item-click',\n this._handleItemClick as EventListener,\n )\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n this.removeEventListener(\n 'dds-command-item-click',\n this._handleItemClick as EventListener,\n )\n }\n\n private _handleItemClick(event: Event) {\n if (!this.exclusive) return\n\n const customEvent = event as CustomEvent\n const clickedItem = customEvent.target as HTMLElement\n if (clickedItem === this._selectedItem) return\n\n // Deselect previously selected item\n if (this._selectedItem) {\n this._selectedItem.removeAttribute('selected')\n }\n\n // Select new item\n this._selectedItem = clickedItem\n this._selectedItem.setAttribute('selected', '')\n }\n\n render() {\n return html`\n <div class=\"command-group\" part=\"base\">\n ${this.label\n ? html`<div class=\"command-group__label\" part=\"label\">\n ${this.label}\n </div>`\n : ''}\n <div class=\"command-group__items\" part=\"items\">\n <slot></slot>\n </div>\n </div>\n `\n }\n}\n"],"names":["_DapDSCommandGroup","DdsElement","event","clickedItem","html","unsafeCSS","styles","DapDSCommandGroup","__decorateClass","property","state"],"mappings":"
|
|
1
|
+
{"version":3,"file":"command-group.component.js","sources":["../../../src/components/command/command-group.component.ts"],"sourcesContent":["import { unsafeCSS } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { html } from 'lit/static-html.js'\n\nimport { DdsElement } from '../../internal/dds-hu-element'\nimport styles from './command-group.scss?inline'\n\n/**\n * `dap-ds-command-group`\n * @summary A command group is a group of command items.\n * @element dap-ds-command-group\n * @title - Command group\n * @group command\n *\n * @slot - The default slot for the command group.\n *\n * @csspart base - The base part of the command group.\n * @csspart label - The label part of the command group.\n * @csspart items - The items part of the command group.\n *\n * @cssproperty --dds-command-group-gap - The gap between command group elements. (default: var(--dds-spacing-100))\n * @cssproperty --dds-command-group-margin-bottom - The bottom margin of the command group. (default: var(--dds-spacing-200))\n * @cssproperty --dds-command-group-border-radius - The border radius of the command group. (default: var(--dds-radius-small))\n * @cssproperty --dds-command-group-label-font-weight - The font weight of the command group label. (default: var(--dds-font-weight-bold))\n * @cssproperty --dds-command-group-items-gap - The gap between command items. (default: var(--dds-spacing-100))\n */\nexport default class DapDSCommandGroup extends DdsElement {\n static tagName = 'dap-ds-command-group'\n\n static readonly styles = unsafeCSS(styles)\n\n /**\n * The label of the command group.\n */\n @property({ type: String })\n label?: string\n\n /**\n * Whether the command group is exclusive, only one item can be selected at a time.\n */\n @property({ type: Boolean })\n exclusive = false\n\n @state()\n private _selectedItem: HTMLElement | null = null\n\n connectedCallback() {\n super.connectedCallback()\n this.addEventListener(\n 'dds-command-item-click',\n this._handleItemClick as EventListener,\n )\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n this.removeEventListener(\n 'dds-command-item-click',\n this._handleItemClick as EventListener,\n )\n }\n\n private _handleItemClick(event: Event) {\n if (!this.exclusive) return\n\n const customEvent = event as CustomEvent\n const clickedItem = customEvent.target as HTMLElement\n if (clickedItem === this._selectedItem) return\n\n // Deselect previously selected item\n if (this._selectedItem) {\n this._selectedItem.removeAttribute('selected')\n }\n\n // Select new item\n this._selectedItem = clickedItem\n this._selectedItem.setAttribute('selected', '')\n }\n\n render() {\n return html`\n <div class=\"command-group\" part=\"base\">\n ${this.label\n ? html`<div class=\"command-group__label\" part=\"label\">\n ${this.label}\n </div>`\n : ''}\n <div class=\"command-group__items\" part=\"items\">\n <slot></slot>\n </div>\n </div>\n `\n }\n}\n"],"names":["_DapDSCommandGroup","DdsElement","event","clickedItem","html","unsafeCSS","styles","DapDSCommandGroup","__decorateClass","property","state"],"mappings":";;;;;;;;;;AA0BA,MAAqBA,IAArB,MAAqBA,UAA0BC,EAAW;AAAA,EAA1D,cAAA;AAAA,UAAA,GAAA,SAAA,GAec,KAAA,YAAA,IAGZ,KAAQ,gBAAoC;AAAA,EAAA;AAAA,EAE5C,oBAAoB;AAClB,UAAM,kBAAkB,GACnB,KAAA;AAAA,MACH;AAAA,MACA,KAAK;AAAA,IACP;AAAA,EAAA;AAAA,EAGF,uBAAuB;AACrB,UAAM,qBAAqB,GACtB,KAAA;AAAA,MACH;AAAA,MACA,KAAK;AAAA,IACP;AAAA,EAAA;AAAA,EAGM,iBAAiBC,GAAc;AACjC,QAAA,CAAC,KAAK,UAAW;AAGrB,UAAMC,IADcD,EACY;AAC5B,IAAAC,MAAgB,KAAK,kBAGrB,KAAK,iBACF,KAAA,cAAc,gBAAgB,UAAU,GAI/C,KAAK,gBAAgBA,GAChB,KAAA,cAAc,aAAa,YAAY,EAAE;AAAA,EAAA;AAAA,EAGhD,SAAS;AACA,WAAAC;AAAA;AAAA,UAED,KAAK,QACHA;AAAA,gBACI,KAAK,KAAK;AAAA,sBAEd,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAOd;AAlEEJ,EAAO,UAAU,wBAEDA,EAAA,SAASK,EAAUC,CAAM;AAH3C,IAAqBC,IAArBP;AASEQ,EAAA;AAAA,EADCC,EAAS,EAAE,MAAM,OAAQ,CAAA;AAAA,GARPF,EASnB,WAAA,OAAA;AAMAC,EAAA;AAAA,EADCC,EAAS,EAAE,MAAM,QAAS,CAAA;AAAA,GAdRF,EAenB,WAAA,WAAA;AAGQC,EAAA;AAAA,EADPE,EAAM;AAAA,GAjBYH,EAkBX,WAAA,eAAA;"}
|
|
@@ -1,22 +1,17 @@
|
|
|
1
1
|
import { clsx as p } from "../../node_modules/clsx/dist/clsx.js";
|
|
2
|
-
import "
|
|
3
|
-
import {
|
|
4
|
-
import "
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import { unsafeStatic as f, html as o } from "../../node_modules/lit-html/static.js";
|
|
10
|
-
import { DdsElement as b } from "../../internal/dds-hu-element.js";
|
|
11
|
-
import _ from "../icon/icon.component.js";
|
|
12
|
-
import g from "./command-item.scss.js";
|
|
13
|
-
import { unsafeCSS as $ } from "../../node_modules/@lit/reactive-element/css-tag.js";
|
|
2
|
+
import { unsafeCSS as m, nothing as u } from "lit";
|
|
3
|
+
import { query as y, property as i, state as b } from "lit/decorators.js";
|
|
4
|
+
import { ifDefined as h } from "lit/directives/if-defined.js";
|
|
5
|
+
import { unsafeStatic as f, html as o } from "lit/static-html.js";
|
|
6
|
+
import { DdsElement as _ } from "../../internal/dds-hu-element.js";
|
|
7
|
+
import g from "../icon/icon.component.js";
|
|
8
|
+
import $ from "./command-item.scss.js";
|
|
14
9
|
var S = Object.defineProperty, s = (c, e, d, k) => {
|
|
15
|
-
for (var
|
|
16
|
-
(n = c[
|
|
17
|
-
return
|
|
10
|
+
for (var l = void 0, r = c.length - 1, n; r >= 0; r--)
|
|
11
|
+
(n = c[r]) && (l = n(e, d, l) || l);
|
|
12
|
+
return l && S(e, d, l), l;
|
|
18
13
|
};
|
|
19
|
-
const
|
|
14
|
+
const a = class a extends _ {
|
|
20
15
|
constructor() {
|
|
21
16
|
super(...arguments), this.disabled = !1, this.target = "_self", this.rel = "noreferrer noopener", this.selectable = !1, this.selected = !1, this.closeOnSelect = "true", this._isSelected = !1;
|
|
22
17
|
}
|
|
@@ -66,17 +61,17 @@ const r = class r extends b {
|
|
|
66
61
|
><dap-ds-icon
|
|
67
62
|
name="check-line2"
|
|
68
63
|
aria-hidden="true"></dap-ds-icon
|
|
69
|
-
></slot>` : o`<span class="sr-only"></span>` :
|
|
64
|
+
></slot>` : o`<span class="sr-only"></span>` : u}
|
|
70
65
|
<span part="label" class="command-item__label"><slot></slot></span>
|
|
71
66
|
</span>
|
|
72
67
|
</${f(this.href ? "a" : "button")}
|
|
73
68
|
`;
|
|
74
69
|
}
|
|
75
70
|
};
|
|
76
|
-
|
|
77
|
-
"dap-ds-icon":
|
|
78
|
-
},
|
|
79
|
-
let t =
|
|
71
|
+
a.tagName = "dap-ds-command-item", a.dependencies = {
|
|
72
|
+
"dap-ds-icon": g
|
|
73
|
+
}, a.styles = m($);
|
|
74
|
+
let t = a;
|
|
80
75
|
s([
|
|
81
76
|
y("#trigger")
|
|
82
77
|
], t.prototype, "_trigger");
|
|
@@ -108,7 +103,7 @@ s([
|
|
|
108
103
|
i({ type: String })
|
|
109
104
|
], t.prototype, "closeOnSelect");
|
|
110
105
|
s([
|
|
111
|
-
|
|
106
|
+
b()
|
|
112
107
|
], t.prototype, "_isSelected");
|
|
113
108
|
export {
|
|
114
109
|
t as default
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-item.component.js","sources":["../../../src/components/command/command-item.component.ts"],"sourcesContent":["import clsx from 'clsx'\nimport { nothing, unsafeCSS } from 'lit'\nimport { property, query, state } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { html, unsafeStatic } from 'lit/static-html.js'\n\nimport { LinkTarget } from '@/dap-design-system'\n\nimport { DdsElement } from '../../internal/dds-hu-element'\nimport DapDSIcon from '../icon/icon.component'\nimport styles from './command-item.scss?inline'\n\n/**\n * `dap-ds-command-item`\n * @summary A command item is a command item that can be selected.\n * @element dap-ds-command-item\n * @title - Command item\n * @group command\n *\n * @event {{ value: string, closeOnSelect: boolean }} dds-command-item-click - Fired when the command item is clicked.\n *\n * @slot - The label of the command item.\n * @slot check - The check of the command item.\n *\n * @csspart base - The base part of the command item.\n * @csspart content - The content part of the command item.\n * @csspart label - The label part of the command item.\n *\n * @cssproperty --dds-command-item-padding - The padding of the command item (default: var(--dds-spacing-100) var(--dds-spacing-200))\n * @cssproperty --dds-command-item-background - The background color of the command item (default: none)\n * @cssproperty --dds-command-item-color - The text color of the command item (default: var(--dds-text-primary-base))\n * @cssproperty --dds-command-item-hover-background - The background color of the command item on hover (default: var(--dds-transparent-black-subtle))\n * @cssproperty --dds-command-item-selected-background - The background color of the selected command item (default: var(--dds-transparent-black-subtle))\n */\nexport default class DapDSCommandItem extends DdsElement {\n static tagName = 'dap-ds-command-item'\n\n static dependencies = {\n 'dap-ds-icon': DapDSIcon,\n }\n\n @query('#trigger')\n private readonly _trigger!: HTMLButtonElement\n\n static readonly styles = unsafeCSS(styles)\n\n /**\n * The value of the command item.\n */\n @property({ type: String })\n value?: string\n\n /**\n * Whether the command item is disabled.\n */\n @property({ type: Boolean })\n disabled = false\n\n /** The name of the button */\n @property() name: string\n\n /** The Href of the button. If this present the button will be rendered as an anchor `<a></a>` element. */\n @property() href: string\n\n /** The target of the button\n * @type { '_blank' | '_self' | '_parent' | '_top' }\n */\n @property() target: LinkTarget = '_self'\n\n /**\n * The rel of the button link. Default is `noreferrer noopener`.\n */\n @property() rel = 'noreferrer noopener'\n\n /**\n * Whether the command item is selectable.\n */\n @property({ type: Boolean })\n selectable = false\n\n /**\n * Whether the command item is selected.\n */\n @property({ type: Boolean })\n selected = false\n\n /**\n * Whether the command item should close the command when selected.\n */\n @property({ type: String })\n closeOnSelect = 'true'\n\n @state()\n private _isSelected = false\n\n connectedCallback() {\n super.connectedCallback()\n this._isSelected = this.selected\n }\n\n updated(changedProperties: Map<string, unknown>) {\n super.updated(changedProperties)\n if (changedProperties.has('selected')) {\n this._isSelected = this.selected\n }\n }\n\n private _handleClick(event: Event) {\n event.stopPropagation()\n\n if (this.disabled) return\n this._isSelected = !this._isSelected\n this.emit('dds-command-item-click', {\n value: this.value,\n closeOnSelect: this.closeOnSelect,\n })\n }\n\n private _handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Enter' || event.key === ' ') {\n if (!this.href) {\n event.preventDefault()\n this._handleClick(event)\n } else {\n event.stopPropagation()\n }\n }\n\n if (event.key === 'Escape') {\n event.preventDefault()\n this.emit('dds-close')\n }\n }\n\n public focus() {\n if (this._trigger) {\n this._trigger.focus()\n }\n }\n\n render() {\n return html`\n <${unsafeStatic(this.href ? 'a' : 'button')}\n part=\"base\"\n id=\"trigger\"\n class=${clsx('command-item', {\n 'command-item--disabled': this.disabled,\n 'command-item--selected': this.selectable && this._isSelected,\n })}\n .disabled=${this.disabled}\n aria-disabled=${this.disabled}\n aria-label=${ifDefined(this.ariaLabel) || ''}\n aria-pressed=${ifDefined(this.href ? undefined : this.selected)}\n href=${this.href}\n target=${this.target}\n rel=${this.rel}\n .autofocus=${this.autofocus}\n @click=${this._handleClick}\n @keydown=${this._handleKeyDown}>\n <span\n part=\"content\"\n class=${clsx('command-item__content', {\n 'command-item__content--selectable': this.selectable,\n })}>\n ${\n this.selectable\n ? this._isSelected\n ? html`<slot name=\"check\"\n ><dap-ds-icon\n name=\"check-line2\"\n aria-hidden=\"true\"></dap-ds-icon\n ></slot>`\n : html`<span class=\"sr-only\"></span>`\n : nothing\n }\n <span part=\"label\" class=\"command-item__label\"><slot></slot></span>\n </span>\n </${unsafeStatic(this.href ? 'a' : 'button')}\n `\n }\n}\n"],"names":["_DapDSCommandItem","DdsElement","changedProperties","event","html","unsafeStatic","clsx","ifDefined","nothing","DapDSIcon","unsafeCSS","styles","DapDSCommandItem","__decorateClass","query","property","state"],"mappings":"
|
|
1
|
+
{"version":3,"file":"command-item.component.js","sources":["../../../src/components/command/command-item.component.ts"],"sourcesContent":["import clsx from 'clsx'\nimport { nothing, unsafeCSS } from 'lit'\nimport { property, query, state } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { html, unsafeStatic } from 'lit/static-html.js'\n\nimport { LinkTarget } from '@/dap-design-system'\n\nimport { DdsElement } from '../../internal/dds-hu-element'\nimport DapDSIcon from '../icon/icon.component'\nimport styles from './command-item.scss?inline'\n\n/**\n * `dap-ds-command-item`\n * @summary A command item is a command item that can be selected.\n * @element dap-ds-command-item\n * @title - Command item\n * @group command\n *\n * @event {{ value: string, closeOnSelect: boolean }} dds-command-item-click - Fired when the command item is clicked.\n *\n * @slot - The label of the command item.\n * @slot check - The check of the command item.\n *\n * @csspart base - The base part of the command item.\n * @csspart content - The content part of the command item.\n * @csspart label - The label part of the command item.\n *\n * @cssproperty --dds-command-item-padding - The padding of the command item (default: var(--dds-spacing-100) var(--dds-spacing-200))\n * @cssproperty --dds-command-item-background - The background color of the command item (default: none)\n * @cssproperty --dds-command-item-color - The text color of the command item (default: var(--dds-text-primary-base))\n * @cssproperty --dds-command-item-hover-background - The background color of the command item on hover (default: var(--dds-transparent-black-subtle))\n * @cssproperty --dds-command-item-selected-background - The background color of the selected command item (default: var(--dds-transparent-black-subtle))\n */\nexport default class DapDSCommandItem extends DdsElement {\n static tagName = 'dap-ds-command-item'\n\n static dependencies = {\n 'dap-ds-icon': DapDSIcon,\n }\n\n @query('#trigger')\n private readonly _trigger!: HTMLButtonElement\n\n static readonly styles = unsafeCSS(styles)\n\n /**\n * The value of the command item.\n */\n @property({ type: String })\n value?: string\n\n /**\n * Whether the command item is disabled.\n */\n @property({ type: Boolean })\n disabled = false\n\n /** The name of the button */\n @property() name: string\n\n /** The Href of the button. If this present the button will be rendered as an anchor `<a></a>` element. */\n @property() href: string\n\n /** The target of the button\n * @type { '_blank' | '_self' | '_parent' | '_top' }\n */\n @property() target: LinkTarget = '_self'\n\n /**\n * The rel of the button link. Default is `noreferrer noopener`.\n */\n @property() rel = 'noreferrer noopener'\n\n /**\n * Whether the command item is selectable.\n */\n @property({ type: Boolean })\n selectable = false\n\n /**\n * Whether the command item is selected.\n */\n @property({ type: Boolean })\n selected = false\n\n /**\n * Whether the command item should close the command when selected.\n */\n @property({ type: String })\n closeOnSelect = 'true'\n\n @state()\n private _isSelected = false\n\n connectedCallback() {\n super.connectedCallback()\n this._isSelected = this.selected\n }\n\n updated(changedProperties: Map<string, unknown>) {\n super.updated(changedProperties)\n if (changedProperties.has('selected')) {\n this._isSelected = this.selected\n }\n }\n\n private _handleClick(event: Event) {\n event.stopPropagation()\n\n if (this.disabled) return\n this._isSelected = !this._isSelected\n this.emit('dds-command-item-click', {\n value: this.value,\n closeOnSelect: this.closeOnSelect,\n })\n }\n\n private _handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Enter' || event.key === ' ') {\n if (!this.href) {\n event.preventDefault()\n this._handleClick(event)\n } else {\n event.stopPropagation()\n }\n }\n\n if (event.key === 'Escape') {\n event.preventDefault()\n this.emit('dds-close')\n }\n }\n\n public focus() {\n if (this._trigger) {\n this._trigger.focus()\n }\n }\n\n render() {\n return html`\n <${unsafeStatic(this.href ? 'a' : 'button')}\n part=\"base\"\n id=\"trigger\"\n class=${clsx('command-item', {\n 'command-item--disabled': this.disabled,\n 'command-item--selected': this.selectable && this._isSelected,\n })}\n .disabled=${this.disabled}\n aria-disabled=${this.disabled}\n aria-label=${ifDefined(this.ariaLabel) || ''}\n aria-pressed=${ifDefined(this.href ? undefined : this.selected)}\n href=${this.href}\n target=${this.target}\n rel=${this.rel}\n .autofocus=${this.autofocus}\n @click=${this._handleClick}\n @keydown=${this._handleKeyDown}>\n <span\n part=\"content\"\n class=${clsx('command-item__content', {\n 'command-item__content--selectable': this.selectable,\n })}>\n ${\n this.selectable\n ? this._isSelected\n ? html`<slot name=\"check\"\n ><dap-ds-icon\n name=\"check-line2\"\n aria-hidden=\"true\"></dap-ds-icon\n ></slot>`\n : html`<span class=\"sr-only\"></span>`\n : nothing\n }\n <span part=\"label\" class=\"command-item__label\"><slot></slot></span>\n </span>\n </${unsafeStatic(this.href ? 'a' : 'button')}\n `\n }\n}\n"],"names":["_DapDSCommandItem","DdsElement","changedProperties","event","html","unsafeStatic","clsx","ifDefined","nothing","DapDSIcon","unsafeCSS","styles","DapDSCommandItem","__decorateClass","query","property","state"],"mappings":"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"}
|
|
@@ -10,6 +10,9 @@ import { default as DapDSPopup } from '../popup/popup.component.js';
|
|
|
10
10
|
*
|
|
11
11
|
* @slot trigger - The trigger element for the command dropdown.
|
|
12
12
|
* @slot - The command items.
|
|
13
|
+
*
|
|
14
|
+
* @csspart popup-base - The popup element of the command.
|
|
15
|
+
* @csspart popup - The popup container of the command.
|
|
13
16
|
*/
|
|
14
17
|
export default class DapDSCommand extends DapDSPopup {
|
|
15
18
|
static tagName: string;
|