@danske/sapphire-angular 1.12.4
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/LICENSE +7 -0
- package/README.md +25 -0
- package/esm2020/danske-sapphire-angular.mjs +5 -0
- package/esm2020/lib/badge/public_api.mjs +3 -0
- package/esm2020/lib/badge/src/badge.component.mjs +66 -0
- package/esm2020/lib/badge/src/badge.module.mjs +18 -0
- package/esm2020/lib/button/public_api.mjs +12 -0
- package/esm2020/lib/button/src/button-group.component.mjs +57 -0
- package/esm2020/lib/button/src/button-icon.directive.mjs +13 -0
- package/esm2020/lib/button/src/button.component.mjs +100 -0
- package/esm2020/lib/button/src/button.module.mjs +48 -0
- package/esm2020/lib/button/src/icon-button.component.mjs +95 -0
- package/esm2020/lib/button/src/toggle-button-required-validator.mjs +27 -0
- package/esm2020/lib/button/src/toggle-button.component.mjs +124 -0
- package/esm2020/lib/checkbox/public_api.mjs +8 -0
- package/esm2020/lib/checkbox/src/checkbox-required-validator.mjs +26 -0
- package/esm2020/lib/checkbox/src/checkbox.component.mjs +264 -0
- package/esm2020/lib/checkbox/src/checkbox.module.mjs +21 -0
- package/esm2020/lib/common/auto-id.decorator.mjs +24 -0
- package/esm2020/lib/common/coerce-boolean.decorator.mjs +32 -0
- package/esm2020/lib/common/constructor.mjs +2 -0
- package/esm2020/lib/common/disabled.mjs +16 -0
- package/esm2020/lib/common/focused.directive.mjs +64 -0
- package/esm2020/lib/common/placement.mjs +60 -0
- package/esm2020/lib/common/platform.mjs +45 -0
- package/esm2020/lib/common/pressed.directive.mjs +55 -0
- package/esm2020/lib/common/public_api.mjs +4 -0
- package/esm2020/lib/common/sapphire-view-encapsulation.mjs +83 -0
- package/esm2020/lib/common/scroll-monitor.directive.mjs +63 -0
- package/esm2020/lib/common/tabindex.mjs +19 -0
- package/esm2020/lib/common/visually-hidden.directive.mjs +32 -0
- package/esm2020/lib/contextual-help/public_api.mjs +3 -0
- package/esm2020/lib/contextual-help/src/contextual-help.component.mjs +112 -0
- package/esm2020/lib/contextual-help/src/contextual-help.module.mjs +33 -0
- package/esm2020/lib/core.module.mjs +179 -0
- package/esm2020/lib/field/public_api.mjs +8 -0
- package/esm2020/lib/field/src/field-control.mjs +17 -0
- package/esm2020/lib/field/src/field-error.directive.mjs +20 -0
- package/esm2020/lib/field/src/field-label.directive.mjs +17 -0
- package/esm2020/lib/field/src/field-note-suffix.directive.mjs +28 -0
- package/esm2020/lib/field/src/field-note.directive.mjs +17 -0
- package/esm2020/lib/field/src/field.component.mjs +153 -0
- package/esm2020/lib/field/src/field.module.mjs +49 -0
- package/esm2020/lib/icon/public_api.mjs +4 -0
- package/esm2020/lib/icon/src/icon-size-provider.mjs +18 -0
- package/esm2020/lib/icon/src/icon.component.mjs +67 -0
- package/esm2020/lib/icon/src/icon.module.mjs +18 -0
- package/esm2020/lib/label/public_api.mjs +6 -0
- package/esm2020/lib/label/src/label.component.mjs +61 -0
- package/esm2020/lib/link/public_api.mjs +7 -0
- package/esm2020/lib/link/src/link.component.mjs +62 -0
- package/esm2020/lib/link/src/link.module.mjs +16 -0
- package/esm2020/lib/listbox/public_api.mjs +10 -0
- package/esm2020/lib/listbox/src/cdk-option-scroll-issue-patch.mjs +30 -0
- package/esm2020/lib/listbox/src/listbox-child.mjs +7 -0
- package/esm2020/lib/listbox/src/listbox-input.directive.mjs +42 -0
- package/esm2020/lib/listbox/src/listbox-item.component.mjs +49 -0
- package/esm2020/lib/listbox/src/listbox.component.mjs +273 -0
- package/esm2020/lib/listbox/src/listbox.module.mjs +81 -0
- package/esm2020/lib/listbox/src/option-icon.directive.mjs +22 -0
- package/esm2020/lib/listbox/src/option-primary-text.directive.mjs +25 -0
- package/esm2020/lib/listbox/src/option-secondary-text.directive.mjs +22 -0
- package/esm2020/lib/listbox/src/option.component.mjs +58 -0
- package/esm2020/lib/listbox/src/section.directive.mjs +46 -0
- package/esm2020/lib/menu/public_api.mjs +10 -0
- package/esm2020/lib/menu/src/menu-item.component.mjs +45 -0
- package/esm2020/lib/menu/src/menu-section.component.mjs +27 -0
- package/esm2020/lib/menu/src/menu-trigger.directive.mjs +149 -0
- package/esm2020/lib/menu/src/menu.component.mjs +33 -0
- package/esm2020/lib/menu/src/menu.module.mjs +39 -0
- package/esm2020/lib/modal/public_api.mjs +19 -0
- package/esm2020/lib/modal/src/dialog/confirmation-dialog.component.mjs +61 -0
- package/esm2020/lib/modal/src/dialog/danger-dialog.component.mjs +62 -0
- package/esm2020/lib/modal/src/dialog/dialog-close-button.directive.mjs +18 -0
- package/esm2020/lib/modal/src/dialog/dialog-content.directive.mjs +29 -0
- package/esm2020/lib/modal/src/dialog/dialog-footer.component.mjs +43 -0
- package/esm2020/lib/modal/src/dialog/dialog-header.component.mjs +65 -0
- package/esm2020/lib/modal/src/dialog/dialog-trigger.directive.mjs +37 -0
- package/esm2020/lib/modal/src/dialog/dialog.component.mjs +60 -0
- package/esm2020/lib/modal/src/modal-base.component.mjs +89 -0
- package/esm2020/lib/modal/src/modal-close-button.directive.mjs +28 -0
- package/esm2020/lib/modal/src/modal-trigger.directive.mjs +42 -0
- package/esm2020/lib/modal/src/modal.module.mjs +143 -0
- package/esm2020/lib/modal/src/modal.service.mjs +58 -0
- package/esm2020/lib/modal/src/panel/inline-panel.component.mjs +15 -0
- package/esm2020/lib/modal/src/panel/panel-back-button.directive.mjs +13 -0
- package/esm2020/lib/modal/src/panel/panel-close-button.directive.mjs +16 -0
- package/esm2020/lib/modal/src/panel/panel-content.component.mjs +38 -0
- package/esm2020/lib/modal/src/panel/panel-footer.component.mjs +38 -0
- package/esm2020/lib/modal/src/panel/panel-header.component.mjs +68 -0
- package/esm2020/lib/modal/src/panel/panel-trigger.directive.mjs +37 -0
- package/esm2020/lib/modal/src/panel/panel.component.mjs +37 -0
- package/esm2020/lib/notification-badge/public_api.mjs +3 -0
- package/esm2020/lib/notification-badge/src/notification-badge.component.mjs +28 -0
- package/esm2020/lib/notification-badge/src/notification-badge.module.mjs +18 -0
- package/esm2020/lib/pagination/public_api.mjs +3 -0
- package/esm2020/lib/pagination/src/pagination.component.mjs +85 -0
- package/esm2020/lib/pagination/src/pagination.module.mjs +36 -0
- package/esm2020/lib/popover/public_api.mjs +10 -0
- package/esm2020/lib/popover/src/popover-close-button.directive.mjs +32 -0
- package/esm2020/lib/popover/src/popover-title.directive.mjs +24 -0
- package/esm2020/lib/popover/src/popover-trigger.directive.mjs +301 -0
- package/esm2020/lib/popover/src/popover.component.mjs +88 -0
- package/esm2020/lib/popover/src/popover.module.mjs +38 -0
- package/esm2020/lib/radio/public_api.mjs +8 -0
- package/esm2020/lib/radio/src/radio-group.component.mjs +195 -0
- package/esm2020/lib/radio/src/radio.component.mjs +279 -0
- package/esm2020/lib/radio/src/radio.module.mjs +22 -0
- package/esm2020/lib/segmented-tabs/public_api.mjs +6 -0
- package/esm2020/lib/segmented-tabs/src/segmented-tab-content.directive.mjs +15 -0
- package/esm2020/lib/segmented-tabs/src/segmented-tab-label.directive.mjs +20 -0
- package/esm2020/lib/segmented-tabs/src/segmented-tab.component.mjs +69 -0
- package/esm2020/lib/segmented-tabs/src/segmented-tabs.component.mjs +215 -0
- package/esm2020/lib/segmented-tabs/src/segmented-tabs.module.mjs +39 -0
- package/esm2020/lib/select/public_api.mjs +10 -0
- package/esm2020/lib/select/src/basic-select/basic-select.component.mjs +127 -0
- package/esm2020/lib/select/src/common/hidden-select.component.mjs +33 -0
- package/esm2020/lib/select/src/common/select-component-base.mjs +267 -0
- package/esm2020/lib/select/src/common/select-value-holder.mjs +86 -0
- package/esm2020/lib/select/src/select/searchable-select.directive.mjs +90 -0
- package/esm2020/lib/select/src/select/select.component.mjs +351 -0
- package/esm2020/lib/select/src/select/select.module.mjs +113 -0
- package/esm2020/lib/select/src/select/selection-text.directive.mjs +19 -0
- package/esm2020/lib/skeleton/public_api.mjs +6 -0
- package/esm2020/lib/skeleton/src/skeleton-block.directive.mjs +16 -0
- package/esm2020/lib/skeleton/src/skeleton-circle.directive.mjs +16 -0
- package/esm2020/lib/skeleton/src/skeleton-text.directive.mjs +43 -0
- package/esm2020/lib/skeleton/src/skeleton.component.mjs +29 -0
- package/esm2020/lib/skeleton/src/skeleton.module.mjs +37 -0
- package/esm2020/lib/skeleton/src/util.mjs +2 -0
- package/esm2020/lib/surface/public_api.mjs +7 -0
- package/esm2020/lib/surface/src/surface.component.mjs +25 -0
- package/esm2020/lib/surface/src/surface.module.mjs +16 -0
- package/esm2020/lib/switch/public_api.mjs +4 -0
- package/esm2020/lib/switch/src/switch-required-validator.mjs +27 -0
- package/esm2020/lib/switch/src/switch.component.mjs +216 -0
- package/esm2020/lib/switch/src/switch.module.mjs +19 -0
- package/esm2020/lib/table/public_api.mjs +15 -0
- package/esm2020/lib/table/src/table-body.directive.mjs +20 -0
- package/esm2020/lib/table/src/table-cell.directive.mjs +87 -0
- package/esm2020/lib/table/src/table-head-cell.component.mjs +57 -0
- package/esm2020/lib/table/src/table-head.directive.mjs +32 -0
- package/esm2020/lib/table/src/table-row.directive.mjs +48 -0
- package/esm2020/lib/table/src/table-sort-header.directive.mjs +44 -0
- package/esm2020/lib/table/src/table-sort.directive.mjs +26 -0
- package/esm2020/lib/table/src/table.component.mjs +82 -0
- package/esm2020/lib/table/src/table.directive.mjs +20 -0
- package/esm2020/lib/table/src/table.module.mjs +74 -0
- package/esm2020/lib/text-field/public_api.mjs +12 -0
- package/esm2020/lib/text-field/src/text-field-affix.directive.mjs +26 -0
- package/esm2020/lib/text-field/src/text-field-input.directive.mjs +51 -0
- package/esm2020/lib/text-field/src/text-field-postfix.directive.mjs +13 -0
- package/esm2020/lib/text-field/src/text-field-prefix.directive.mjs +13 -0
- package/esm2020/lib/text-field/src/text-field-textarea-autosize.directive.mjs +73 -0
- package/esm2020/lib/text-field/src/text-field.component.mjs +78 -0
- package/esm2020/lib/text-field/src/text-field.module.mjs +67 -0
- package/esm2020/lib/theme/public_api.mjs +34 -0
- package/esm2020/lib/theme/src/sapphire-overlay-container.service.mjs +38 -0
- package/esm2020/lib/theme/src/theme-base.directive.mjs +87 -0
- package/esm2020/lib/theme/src/theme-check.directive.mjs +29 -0
- package/esm2020/lib/theme/src/theme-root.directive.mjs +23 -0
- package/esm2020/lib/theme/src/theme.module.mjs +32 -0
- package/esm2020/lib/theme/src/themes.mjs +27 -0
- package/esm2020/lib/theme/src/top-level-theme-ref.service.mjs +21 -0
- package/esm2020/lib/tooltip/public_api.mjs +5 -0
- package/esm2020/lib/tooltip/src/tooltip.component.mjs +47 -0
- package/esm2020/lib/tooltip/src/tooltip.directive.mjs +223 -0
- package/esm2020/lib/tooltip/src/tooltip.module.mjs +30 -0
- package/esm2020/lib/tooltip/src/truncated-with-tooltip.directive.mjs +56 -0
- package/esm2020/lib/typography/public_api.mjs +8 -0
- package/esm2020/lib/typography/src/heading.component.mjs +44 -0
- package/esm2020/lib/typography/src/paragraph.component.mjs +24 -0
- package/esm2020/lib/typography/src/typography.module.mjs +19 -0
- package/esm2020/public-api.mjs +30 -0
- package/fesm2015/danske-sapphire-angular.mjs +8010 -0
- package/fesm2015/danske-sapphire-angular.mjs.map +1 -0
- package/fesm2020/danske-sapphire-angular.mjs +7890 -0
- package/fesm2020/danske-sapphire-angular.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/badge/public_api.d.ts +2 -0
- package/lib/badge/src/badge.component.d.ts +35 -0
- package/lib/badge/src/badge.module.d.ts +8 -0
- package/lib/button/public_api.d.ts +7 -0
- package/lib/button/src/button-group.component.d.ts +26 -0
- package/lib/button/src/button-icon.directive.d.ts +5 -0
- package/lib/button/src/button.component.d.ts +31 -0
- package/lib/button/src/button.module.d.ts +14 -0
- package/lib/button/src/icon-button.component.d.ts +26 -0
- package/lib/button/src/toggle-button-required-validator.d.ts +10 -0
- package/lib/button/src/toggle-button.component.d.ts +39 -0
- package/lib/checkbox/public_api.d.ts +3 -0
- package/lib/checkbox/src/checkbox-required-validator.d.ts +10 -0
- package/lib/checkbox/src/checkbox.component.d.ts +112 -0
- package/lib/checkbox/src/checkbox.module.d.ts +11 -0
- package/lib/common/auto-id.decorator.d.ts +7 -0
- package/lib/common/coerce-boolean.decorator.d.ts +7 -0
- package/lib/common/constructor.d.ts +2 -0
- package/lib/common/disabled.d.ts +9 -0
- package/lib/common/focused.directive.d.ts +30 -0
- package/lib/common/placement.d.ts +11 -0
- package/lib/common/platform.d.ts +9 -0
- package/lib/common/pressed.directive.d.ts +27 -0
- package/lib/common/public_api.d.ts +2 -0
- package/lib/common/sapphire-view-encapsulation.d.ts +37 -0
- package/lib/common/scroll-monitor.directive.d.ts +23 -0
- package/lib/common/tabindex.d.ts +12 -0
- package/lib/common/visually-hidden.directive.d.ts +11 -0
- package/lib/contextual-help/public_api.d.ts +2 -0
- package/lib/contextual-help/src/contextual-help.component.d.ts +50 -0
- package/lib/contextual-help/src/contextual-help.module.d.ts +7 -0
- package/lib/core.module.d.ts +30 -0
- package/lib/field/public_api.d.ts +7 -0
- package/lib/field/src/field-control.d.ts +16 -0
- package/lib/field/src/field-error.directive.d.ts +8 -0
- package/lib/field/src/field-label.directive.d.ts +8 -0
- package/lib/field/src/field-note-suffix.directive.d.ts +15 -0
- package/lib/field/src/field-note.directive.d.ts +8 -0
- package/lib/field/src/field.component.d.ts +77 -0
- package/lib/field/src/field.module.d.ts +14 -0
- package/lib/icon/public_api.d.ts +3 -0
- package/lib/icon/src/icon-size-provider.d.ts +23 -0
- package/lib/icon/src/icon.component.d.ts +18 -0
- package/lib/icon/src/icon.module.d.ts +8 -0
- package/lib/label/public_api.d.ts +5 -0
- package/lib/label/src/label.component.d.ts +43 -0
- package/lib/link/public_api.d.ts +2 -0
- package/lib/link/src/link.component.d.ts +13 -0
- package/lib/link/src/link.module.d.ts +7 -0
- package/lib/listbox/public_api.d.ts +9 -0
- package/lib/listbox/src/cdk-option-scroll-issue-patch.d.ts +17 -0
- package/lib/listbox/src/listbox-child.d.ts +6 -0
- package/lib/listbox/src/listbox-input.directive.d.ts +16 -0
- package/lib/listbox/src/listbox-item.component.d.ts +21 -0
- package/lib/listbox/src/listbox.component.d.ts +127 -0
- package/lib/listbox/src/listbox.module.d.ts +22 -0
- package/lib/listbox/src/option-icon.directive.d.ts +10 -0
- package/lib/listbox/src/option-primary-text.directive.d.ts +14 -0
- package/lib/listbox/src/option-secondary-text.directive.d.ts +10 -0
- package/lib/listbox/src/option.component.d.ts +21 -0
- package/lib/listbox/src/section.directive.d.ts +14 -0
- package/lib/menu/public_api.d.ts +5 -0
- package/lib/menu/src/menu-item.component.d.ts +12 -0
- package/lib/menu/src/menu-section.component.d.ts +12 -0
- package/lib/menu/src/menu-trigger.directive.d.ts +34 -0
- package/lib/menu/src/menu.component.d.ts +10 -0
- package/lib/menu/src/menu.module.d.ts +13 -0
- package/lib/modal/public_api.d.ts +18 -0
- package/lib/modal/src/dialog/confirmation-dialog.component.d.ts +43 -0
- package/lib/modal/src/dialog/danger-dialog.component.d.ts +44 -0
- package/lib/modal/src/dialog/dialog-close-button.directive.d.ts +7 -0
- package/lib/modal/src/dialog/dialog-content.directive.d.ts +13 -0
- package/lib/modal/src/dialog/dialog-footer.component.d.ts +20 -0
- package/lib/modal/src/dialog/dialog-header.component.d.ts +25 -0
- package/lib/modal/src/dialog/dialog-trigger.directive.d.ts +13 -0
- package/lib/modal/src/dialog/dialog.component.d.ts +33 -0
- package/lib/modal/src/modal-base.component.d.ts +33 -0
- package/lib/modal/src/modal-close-button.directive.d.ts +9 -0
- package/lib/modal/src/modal-trigger.directive.d.ts +24 -0
- package/lib/modal/src/modal.module.d.ts +30 -0
- package/lib/modal/src/modal.service.d.ts +26 -0
- package/lib/modal/src/panel/inline-panel.component.d.ts +6 -0
- package/lib/modal/src/panel/panel-back-button.directive.d.ts +5 -0
- package/lib/modal/src/panel/panel-close-button.directive.d.ts +6 -0
- package/lib/modal/src/panel/panel-content.component.d.ts +14 -0
- package/lib/modal/src/panel/panel-footer.component.d.ts +21 -0
- package/lib/modal/src/panel/panel-header.component.d.ts +26 -0
- package/lib/modal/src/panel/panel-trigger.directive.d.ts +13 -0
- package/lib/modal/src/panel/panel.component.d.ts +18 -0
- package/lib/notification-badge/public_api.d.ts +2 -0
- package/lib/notification-badge/src/notification-badge.component.d.ts +10 -0
- package/lib/notification-badge/src/notification-badge.module.d.ts +8 -0
- package/lib/pagination/public_api.d.ts +2 -0
- package/lib/pagination/src/pagination.component.d.ts +32 -0
- package/lib/pagination/src/pagination.module.d.ts +12 -0
- package/lib/popover/public_api.d.ts +5 -0
- package/lib/popover/src/popover-close-button.directive.d.ts +13 -0
- package/lib/popover/src/popover-title.directive.d.ts +11 -0
- package/lib/popover/src/popover-trigger.directive.d.ts +86 -0
- package/lib/popover/src/popover.component.d.ts +32 -0
- package/lib/popover/src/popover.module.d.ts +12 -0
- package/lib/radio/public_api.d.ts +3 -0
- package/lib/radio/src/radio-group.component.d.ts +65 -0
- package/lib/radio/src/radio.component.d.ts +99 -0
- package/lib/radio/src/radio.module.d.ts +12 -0
- package/lib/segmented-tabs/public_api.d.ts +5 -0
- package/lib/segmented-tabs/src/segmented-tab-content.directive.d.ts +6 -0
- package/lib/segmented-tabs/src/segmented-tab-label.directive.d.ts +6 -0
- package/lib/segmented-tabs/src/segmented-tab.component.d.ts +27 -0
- package/lib/segmented-tabs/src/segmented-tabs.component.d.ts +48 -0
- package/lib/segmented-tabs/src/segmented-tabs.module.d.ts +13 -0
- package/lib/select/public_api.d.ts +5 -0
- package/lib/select/src/basic-select/basic-select.component.d.ts +50 -0
- package/lib/select/src/common/hidden-select.component.d.ts +19 -0
- package/lib/select/src/common/select-component-base.d.ts +109 -0
- package/lib/select/src/common/select-value-holder.d.ts +54 -0
- package/lib/select/src/select/searchable-select.directive.d.ts +40 -0
- package/lib/select/src/select/select.component.d.ts +80 -0
- package/lib/select/src/select/select.module.d.ts +26 -0
- package/lib/select/src/select/selection-text.directive.d.ts +11 -0
- package/lib/skeleton/public_api.d.ts +5 -0
- package/lib/skeleton/src/skeleton-block.directive.d.ts +5 -0
- package/lib/skeleton/src/skeleton-circle.directive.d.ts +5 -0
- package/lib/skeleton/src/skeleton-text.directive.d.ts +13 -0
- package/lib/skeleton/src/skeleton.component.d.ts +13 -0
- package/lib/skeleton/src/skeleton.module.d.ts +11 -0
- package/lib/skeleton/src/util.d.ts +1 -0
- package/lib/surface/public_api.d.ts +2 -0
- package/lib/surface/src/surface.component.d.ts +11 -0
- package/lib/surface/src/surface.module.d.ts +7 -0
- package/lib/switch/public_api.d.ts +3 -0
- package/lib/switch/src/switch-required-validator.d.ts +10 -0
- package/lib/switch/src/switch.component.d.ts +91 -0
- package/lib/switch/src/switch.module.d.ts +9 -0
- package/lib/table/public_api.d.ts +10 -0
- package/lib/table/src/table-body.directive.d.ts +7 -0
- package/lib/table/src/table-cell.directive.d.ts +30 -0
- package/lib/table/src/table-head-cell.component.d.ts +19 -0
- package/lib/table/src/table-head.directive.d.ts +10 -0
- package/lib/table/src/table-row.directive.d.ts +16 -0
- package/lib/table/src/table-sort-header.directive.d.ts +11 -0
- package/lib/table/src/table-sort.directive.d.ts +13 -0
- package/lib/table/src/table.component.d.ts +37 -0
- package/lib/table/src/table.directive.d.ts +7 -0
- package/lib/table/src/table.module.d.ts +19 -0
- package/lib/text-field/public_api.d.ts +7 -0
- package/lib/text-field/src/text-field-affix.directive.d.ts +10 -0
- package/lib/text-field/src/text-field-input.directive.d.ts +16 -0
- package/lib/text-field/src/text-field-postfix.directive.d.ts +5 -0
- package/lib/text-field/src/text-field-prefix.directive.d.ts +5 -0
- package/lib/text-field/src/text-field-textarea-autosize.directive.d.ts +20 -0
- package/lib/text-field/src/text-field.component.d.ts +23 -0
- package/lib/text-field/src/text-field.module.d.ts +17 -0
- package/lib/theme/public_api.d.ts +24 -0
- package/lib/theme/src/sapphire-overlay-container.service.d.ts +14 -0
- package/lib/theme/src/theme-base.directive.d.ts +14 -0
- package/lib/theme/src/theme-check.directive.d.ts +14 -0
- package/lib/theme/src/theme-root.directive.d.ts +13 -0
- package/lib/theme/src/theme.module.d.ts +14 -0
- package/lib/theme/src/themes.d.ts +16 -0
- package/lib/theme/src/top-level-theme-ref.service.d.ts +13 -0
- package/lib/tooltip/public_api.d.ts +4 -0
- package/lib/tooltip/src/tooltip.component.d.ts +10 -0
- package/lib/tooltip/src/tooltip.directive.d.ts +39 -0
- package/lib/tooltip/src/tooltip.module.d.ts +11 -0
- package/lib/tooltip/src/truncated-with-tooltip.directive.d.ts +26 -0
- package/lib/typography/public_api.d.ts +3 -0
- package/lib/typography/src/heading.component.d.ts +17 -0
- package/lib/typography/src/paragraph.component.d.ts +8 -0
- package/lib/typography/src/typography.module.d.ts +9 -0
- package/package.json +45 -0
- package/public-api.d.ts +26 -0
- package/src/lib/listbox/src/README.md +67 -0
- package/theme-assets/default-dark.css +1 -0
- package/theme-assets/default.css +1 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { isMobile } from '../../../common/platform';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./select-component-base";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
import * as i3 from "@angular/forms";
|
|
7
|
+
import * as i4 from "../../../common/visually-hidden.directive";
|
|
8
|
+
import * as i5 from "../../../common/sapphire-view-encapsulation";
|
|
9
|
+
/**
|
|
10
|
+
* Hidden native select to be rendered in sapphire select components. It does two things:
|
|
11
|
+
* - Takes care of form accessibility and autofilling by rendering native select/input
|
|
12
|
+
* - Opens the native select dropdown instead of the custom dropdown, when possible.
|
|
13
|
+
*
|
|
14
|
+
* The latter proved to be a questionable, and we may rethink it at some point.
|
|
15
|
+
*
|
|
16
|
+
* @internal
|
|
17
|
+
*/
|
|
18
|
+
export class HiddenSelectComponent {
|
|
19
|
+
constructor(_select) {
|
|
20
|
+
this._select = _select;
|
|
21
|
+
this._isMobile = isMobile();
|
|
22
|
+
}
|
|
23
|
+
_onNativeSelectChange(e) {
|
|
24
|
+
this._select.listboxValue = [e.target.value];
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
HiddenSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: HiddenSelectComponent, deps: [{ token: i1.SelectComponentBase }], target: i0.ɵɵFactoryTarget.Component });
|
|
28
|
+
HiddenSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.0", type: HiddenSelectComponent, selector: "sp-hidden-select", ngImport: i0, template: "<ng-container *ngIf=\"_select._initialized\">\n <select\n *ngIf=\"_isMobile && !_select.multiple\"\n class=\"sapphire-select__native-select\"\n _spUseComponentStyles\n [disabled]=\"_select.disabled\"\n [attr.name]=\"_select.name\"\n (change)=\"_onNativeSelectChange($event)\"\n >\n <option\n *ngFor=\"let option of _select.options\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n <div\n *ngIf=\"!_isMobile || _select.multiple\"\n aria-hidden=\"true\"\n spVisuallyHidden\n >\n <input\n type=\"text\"\n style=\"font-size: 16px\"\n [disabled]=\"_select.disabled\"\n [tabIndex]=\"_select.isFocused() || _select.isOpen() ? -1 : 0\"\n (focus)=\"_select.focus('keyboard')\"\n />\n <label>\n {{ _select.getLabelText() }}\n <select\n [attr.size]=\"_select.multiple ? _select.options.length : null\"\n [disabled]=\"_select.disabled\"\n tabindex=\"-1\"\n [multiple]=\"_select.multiple\"\n (change)=\"_onNativeSelectChange($event)\"\n [attr.name]=\"_select.name\"\n >\n <option\n *ngFor=\"let option of _select.options\"\n [value]=\"option.value\"\n [selected]=\"_select.listboxValue.includes(option.value)\"\n [disabled]=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n </label>\n </div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.VisuallyHiddenDirective, selector: "[spVisuallyHidden]", inputs: ["spVisuallyHidden"] }, { kind: "directive", type: i5.UseComponentStyles, selector: "[_spUseComponentStyles]" }] });
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: HiddenSelectComponent, decorators: [{
|
|
30
|
+
type: Component,
|
|
31
|
+
args: [{ selector: 'sp-hidden-select', template: "<ng-container *ngIf=\"_select._initialized\">\n <select\n *ngIf=\"_isMobile && !_select.multiple\"\n class=\"sapphire-select__native-select\"\n _spUseComponentStyles\n [disabled]=\"_select.disabled\"\n [attr.name]=\"_select.name\"\n (change)=\"_onNativeSelectChange($event)\"\n >\n <option\n *ngFor=\"let option of _select.options\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n <div\n *ngIf=\"!_isMobile || _select.multiple\"\n aria-hidden=\"true\"\n spVisuallyHidden\n >\n <input\n type=\"text\"\n style=\"font-size: 16px\"\n [disabled]=\"_select.disabled\"\n [tabIndex]=\"_select.isFocused() || _select.isOpen() ? -1 : 0\"\n (focus)=\"_select.focus('keyboard')\"\n />\n <label>\n {{ _select.getLabelText() }}\n <select\n [attr.size]=\"_select.multiple ? _select.options.length : null\"\n [disabled]=\"_select.disabled\"\n tabindex=\"-1\"\n [multiple]=\"_select.multiple\"\n (change)=\"_onNativeSelectChange($event)\"\n [attr.name]=\"_select.name\"\n >\n <option\n *ngFor=\"let option of _select.options\"\n [value]=\"option.value\"\n [selected]=\"_select.listboxValue.includes(option.value)\"\n [disabled]=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n </label>\n </div>\n</ng-container>\n" }]
|
|
32
|
+
}], ctorParameters: function () { return [{ type: i1.SelectComponentBase }]; } });
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlkZGVuLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlbGVjdC9zcmMvY29tbW9uL2hpZGRlbi1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZWxlY3Qvc3JjL2NvbW1vbi9oaWRkZW4tc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7O0FBR3BEOzs7Ozs7OztHQVFHO0FBS0gsTUFBTSxPQUFPLHFCQUFxQjtJQUdoQyxZQUFtQixPQUE0QjtRQUE1QixZQUFPLEdBQVAsT0FBTyxDQUFxQjtRQUYvQyxjQUFTLEdBQUcsUUFBUSxFQUFFLENBQUM7SUFFMkIsQ0FBQztJQUVuRCxxQkFBcUIsQ0FBQyxDQUFNO1FBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxDQUFDOztrSEFQVSxxQkFBcUI7c0dBQXJCLHFCQUFxQix3RENqQmxDLHMrQ0FtREE7MkZEbENhLHFCQUFxQjtrQkFKakMsU0FBUzsrQkFDRSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3BsYXRmb3JtJztcbmltcG9ydCB7IFNlbGVjdENvbXBvbmVudEJhc2UgfSBmcm9tICcuL3NlbGVjdC1jb21wb25lbnQtYmFzZSc7XG5cbi8qKlxuICogSGlkZGVuIG5hdGl2ZSBzZWxlY3QgdG8gYmUgcmVuZGVyZWQgaW4gc2FwcGhpcmUgc2VsZWN0IGNvbXBvbmVudHMuIEl0IGRvZXMgdHdvIHRoaW5nczpcbiAqIC0gVGFrZXMgY2FyZSBvZiBmb3JtIGFjY2Vzc2liaWxpdHkgYW5kIGF1dG9maWxsaW5nIGJ5IHJlbmRlcmluZyBuYXRpdmUgc2VsZWN0L2lucHV0XG4gKiAtIE9wZW5zIHRoZSBuYXRpdmUgc2VsZWN0IGRyb3Bkb3duIGluc3RlYWQgb2YgdGhlIGN1c3RvbSBkcm9wZG93biwgd2hlbiBwb3NzaWJsZS5cbiAqXG4gKiBUaGUgbGF0dGVyIHByb3ZlZCB0byBiZSBhIHF1ZXN0aW9uYWJsZSwgYW5kIHdlIG1heSByZXRoaW5rIGl0IGF0IHNvbWUgcG9pbnQuXG4gKlxuICogQGludGVybmFsXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NwLWhpZGRlbi1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vaGlkZGVuLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIEhpZGRlblNlbGVjdENvbXBvbmVudCB7XG4gIF9pc01vYmlsZSA9IGlzTW9iaWxlKCk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIF9zZWxlY3Q6IFNlbGVjdENvbXBvbmVudEJhc2UpIHt9XG5cbiAgX29uTmF0aXZlU2VsZWN0Q2hhbmdlKGU6IGFueSkge1xuICAgIHRoaXMuX3NlbGVjdC5saXN0Ym94VmFsdWUgPSBbZS50YXJnZXQudmFsdWVdO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiX3NlbGVjdC5faW5pdGlhbGl6ZWRcIj5cbiAgPHNlbGVjdFxuICAgICpuZ0lmPVwiX2lzTW9iaWxlICYmICFfc2VsZWN0Lm11bHRpcGxlXCJcbiAgICBjbGFzcz1cInNhcHBoaXJlLXNlbGVjdF9fbmF0aXZlLXNlbGVjdFwiXG4gICAgX3NwVXNlQ29tcG9uZW50U3R5bGVzXG4gICAgW2Rpc2FibGVkXT1cIl9zZWxlY3QuZGlzYWJsZWRcIlxuICAgIFthdHRyLm5hbWVdPVwiX3NlbGVjdC5uYW1lXCJcbiAgICAoY2hhbmdlKT1cIl9vbk5hdGl2ZVNlbGVjdENoYW5nZSgkZXZlbnQpXCJcbiAgPlxuICAgIDxvcHRpb25cbiAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgX3NlbGVjdC5vcHRpb25zXCJcbiAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxuICAgICAgW2Rpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZFwiXG4gICAgPlxuICAgICAge3sgb3B0aW9uLmxhYmVsIH19XG4gICAgPC9vcHRpb24+XG4gIDwvc2VsZWN0PlxuICA8ZGl2XG4gICAgKm5nSWY9XCIhX2lzTW9iaWxlIHx8IF9zZWxlY3QubXVsdGlwbGVcIlxuICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgc3BWaXN1YWxseUhpZGRlblxuICA+XG4gICAgPGlucHV0XG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMTZweFwiXG4gICAgICBbZGlzYWJsZWRdPVwiX3NlbGVjdC5kaXNhYmxlZFwiXG4gICAgICBbdGFiSW5kZXhdPVwiX3NlbGVjdC5pc0ZvY3VzZWQoKSB8fCBfc2VsZWN0LmlzT3BlbigpID8gLTEgOiAwXCJcbiAgICAgIChmb2N1cyk9XCJfc2VsZWN0LmZvY3VzKCdrZXlib2FyZCcpXCJcbiAgICAvPlxuICAgIDxsYWJlbD5cbiAgICAgIHt7IF9zZWxlY3QuZ2V0TGFiZWxUZXh0KCkgfX1cbiAgICAgIDxzZWxlY3RcbiAgICAgICAgW2F0dHIuc2l6ZV09XCJfc2VsZWN0Lm11bHRpcGxlID8gX3NlbGVjdC5vcHRpb25zLmxlbmd0aCA6IG51bGxcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiX3NlbGVjdC5kaXNhYmxlZFwiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICBbbXVsdGlwbGVdPVwiX3NlbGVjdC5tdWx0aXBsZVwiXG4gICAgICAgIChjaGFuZ2UpPVwiX29uTmF0aXZlU2VsZWN0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICBbYXR0ci5uYW1lXT1cIl9zZWxlY3QubmFtZVwiXG4gICAgICA+XG4gICAgICAgIDxvcHRpb25cbiAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIF9zZWxlY3Qub3B0aW9uc1wiXG4gICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgW3NlbGVjdGVkXT1cIl9zZWxlY3QubGlzdGJveFZhbHVlLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSlcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJvcHRpb24uZGlzYWJsZWRcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XG4gICAgICAgIDwvb3B0aW9uPlxuICAgICAgPC9zZWxlY3Q+XG4gICAgPC9sYWJlbD5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { CoerceBoolean } from '../../../common/coerce-boolean.decorator';
|
|
3
|
+
import { ListboxChild, OptionComponent, } from '../../../listbox/public_api';
|
|
4
|
+
import { ChangeDetectorRef, ContentChild, ContentChildren, Directive, EventEmitter, inject, Input, Output, QueryList, } from '@angular/core';
|
|
5
|
+
import { AutoId } from '../../../common/auto-id.decorator';
|
|
6
|
+
import { ListKeyManager, } from '@angular/cdk/a11y';
|
|
7
|
+
import { MultiSelectDirectiveBase, } from './select-value-holder';
|
|
8
|
+
import { SelectionTextDirective } from '../select/selection-text.directive';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "./select-value-holder";
|
|
11
|
+
export class SelectComponentBase {
|
|
12
|
+
set listboxValue(value) {
|
|
13
|
+
this.valueHolder.setFromListboxValue(value);
|
|
14
|
+
this.controlValueAccessorChangeFn(this.valueHolder.value);
|
|
15
|
+
}
|
|
16
|
+
get listboxValue() {
|
|
17
|
+
return this.valueHolder.getListboxValue();
|
|
18
|
+
}
|
|
19
|
+
get selectedOptions() {
|
|
20
|
+
return this.options?.filter((option) => this.listboxValue.includes(option.value));
|
|
21
|
+
}
|
|
22
|
+
constructor(valueHolder) {
|
|
23
|
+
this.valueHolder = valueHolder;
|
|
24
|
+
/** A unique id for the select. If none is supplied, it will be auto-generated. */
|
|
25
|
+
this.id = '';
|
|
26
|
+
/**
|
|
27
|
+
* Emitted when the popover is opened
|
|
28
|
+
*/
|
|
29
|
+
this.opened = new EventEmitter();
|
|
30
|
+
/**
|
|
31
|
+
* Emitted when the popover is closed
|
|
32
|
+
*/
|
|
33
|
+
this.closed = new EventEmitter();
|
|
34
|
+
this.options = new QueryList();
|
|
35
|
+
this.listboxChildren = new QueryList();
|
|
36
|
+
/**
|
|
37
|
+
* Emits whenever the dropdown is closed as a result of an option (already
|
|
38
|
+
* selected or not) being selected.
|
|
39
|
+
*/
|
|
40
|
+
this.selected = new EventEmitter();
|
|
41
|
+
this.ariaLabel = null;
|
|
42
|
+
this.ariaLabelledby = null;
|
|
43
|
+
/**
|
|
44
|
+
* Used to work around ExpressionChangedAfterItHasBeenCheckedError error thrown from HiddenSelect,
|
|
45
|
+
* when the select component is rendered from a template (e.g. with *ngIf). It's set to true
|
|
46
|
+
* asynchronously after content is initialized, to delay rendering of things that depend on
|
|
47
|
+
* options. It's not clear why the issue happens, and it only happens when select is used with
|
|
48
|
+
* *ngIf, or generally in a template.
|
|
49
|
+
*/
|
|
50
|
+
this._initialized = false;
|
|
51
|
+
this.changeDetectorRef = inject(ChangeDetectorRef);
|
|
52
|
+
this.controlValueAccessorChangeFn = () => { };
|
|
53
|
+
this.onTouched = () => { };
|
|
54
|
+
}
|
|
55
|
+
handleKeyDown($event) {
|
|
56
|
+
if ($event.target !== this.triggerElementRef?.nativeElement) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
switch ($event.key) {
|
|
60
|
+
case 'ArrowDown':
|
|
61
|
+
this.triggerRef?.open();
|
|
62
|
+
break;
|
|
63
|
+
case 'ArrowUp':
|
|
64
|
+
this.triggerRef?.open();
|
|
65
|
+
// we need to delay it a little, since the listbox will autofocus
|
|
66
|
+
// the first item.
|
|
67
|
+
setTimeout(() => {
|
|
68
|
+
if (this.options?.last && this.listboxValue.length === 0) {
|
|
69
|
+
this.listbox?.setActiveOption(this.options?.last.value);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
break;
|
|
73
|
+
case 'ArrowRight':
|
|
74
|
+
case 'ArrowLeft':
|
|
75
|
+
if (this.multiple) {
|
|
76
|
+
this.triggerRef?.open();
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
const option = this.getNextEnabledOptionValue($event.key === 'ArrowLeft' ? 'left' : 'right');
|
|
80
|
+
if (option) {
|
|
81
|
+
this.listboxValue = [option];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
break;
|
|
85
|
+
default:
|
|
86
|
+
this.keyManager?.onKeydown($event);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
getSelectionText() {
|
|
90
|
+
const selectedOptions = this.selectedOptions;
|
|
91
|
+
if (selectedOptions.length === 0) {
|
|
92
|
+
return '';
|
|
93
|
+
}
|
|
94
|
+
if (selectedOptions.length === 1) {
|
|
95
|
+
return selectedOptions[0]?.label;
|
|
96
|
+
}
|
|
97
|
+
return `${selectedOptions.length === this.options.length
|
|
98
|
+
? 'All'
|
|
99
|
+
: selectedOptions.length} selected`;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Whether multiple selection is allowed.
|
|
103
|
+
*/
|
|
104
|
+
get multiple() {
|
|
105
|
+
return this.valueHolder instanceof MultiSelectDirectiveBase;
|
|
106
|
+
}
|
|
107
|
+
ngAfterContentInit() {
|
|
108
|
+
this.initKeyManager();
|
|
109
|
+
this.options.changes.subscribe(() => {
|
|
110
|
+
this.initKeyManager();
|
|
111
|
+
});
|
|
112
|
+
Promise.resolve().then(() => {
|
|
113
|
+
this._initialized = true;
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
ngAfterViewInit() {
|
|
117
|
+
/**
|
|
118
|
+
* This is to avoid an NG0100 ExpressionChangedAfter... error when there is an initial value
|
|
119
|
+
* The issue is probably due to the fact that options are defined withing the **content**
|
|
120
|
+
* (sp-option elements), so the listbox value can change after the view of select is checked,
|
|
121
|
+
* if there is a default value. And that leads to the error, since we have bindings in the
|
|
122
|
+
* template, such as `getSelectionText()`, that depend on the listbox value.
|
|
123
|
+
*/
|
|
124
|
+
if (this.listboxValue.length > 0) {
|
|
125
|
+
this.changeDetectorRef.detectChanges();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
ngOnDestroy() {
|
|
129
|
+
this.keyManager?.destroy();
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Called when an item in the listbox is selected.
|
|
133
|
+
*/
|
|
134
|
+
_handleSelected() {
|
|
135
|
+
if (!this.multiple) {
|
|
136
|
+
this.triggerRef?.close();
|
|
137
|
+
}
|
|
138
|
+
this.selected.emit();
|
|
139
|
+
}
|
|
140
|
+
isOpen() {
|
|
141
|
+
return this.triggerRef?.isOpen() ?? false;
|
|
142
|
+
}
|
|
143
|
+
open() {
|
|
144
|
+
this.triggerRef?.open();
|
|
145
|
+
}
|
|
146
|
+
close() {
|
|
147
|
+
this.triggerRef?.close();
|
|
148
|
+
}
|
|
149
|
+
toggle() {
|
|
150
|
+
this.triggerRef?.open();
|
|
151
|
+
}
|
|
152
|
+
getLabelText() {
|
|
153
|
+
return (this.getFieldLabel?.() ?? this.ariaLabel)?.trim();
|
|
154
|
+
}
|
|
155
|
+
_onOpen() {
|
|
156
|
+
this.opened.emit();
|
|
157
|
+
}
|
|
158
|
+
_onClose() {
|
|
159
|
+
this.closed.emit();
|
|
160
|
+
this.onTouched();
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Implemented as part of ControlValueAccessor.
|
|
164
|
+
*/
|
|
165
|
+
registerOnChange(fn) {
|
|
166
|
+
this.controlValueAccessorChangeFn = fn;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Implemented as part of ControlValueAccessor.
|
|
170
|
+
*/
|
|
171
|
+
registerOnTouched(fn) {
|
|
172
|
+
this.onTouched = fn;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Implemented as part of ControlValueAccessor.
|
|
176
|
+
*/
|
|
177
|
+
setDisabledState(isDisabled) {
|
|
178
|
+
this.disabled = isDisabled;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Implemented as part of ControlValueAccessor.
|
|
182
|
+
*/
|
|
183
|
+
writeValue(value) {
|
|
184
|
+
this.valueHolder.value = value;
|
|
185
|
+
}
|
|
186
|
+
getNextEnabledOptionValue(direction = 'right') {
|
|
187
|
+
const optionsArray = this.options?.toArray() || [];
|
|
188
|
+
let nextNonDisabledOption;
|
|
189
|
+
const selectedOption = this.selectedOptions[0];
|
|
190
|
+
const currentOptionIndex = (selectedOption && optionsArray.indexOf(selectedOption)) ?? -1;
|
|
191
|
+
const notDisabled = (o) => !o.disabled;
|
|
192
|
+
if (currentOptionIndex === -1) {
|
|
193
|
+
nextNonDisabledOption = optionsArray.find(notDisabled);
|
|
194
|
+
}
|
|
195
|
+
else if (direction === 'left') {
|
|
196
|
+
nextNonDisabledOption = optionsArray
|
|
197
|
+
.slice(0, currentOptionIndex)
|
|
198
|
+
.reverse()
|
|
199
|
+
.find(notDisabled);
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
nextNonDisabledOption = optionsArray
|
|
203
|
+
.slice(currentOptionIndex + 1, optionsArray.length)
|
|
204
|
+
.find(notDisabled);
|
|
205
|
+
}
|
|
206
|
+
const nextNonDisabledOptionIndex = nextNonDisabledOption
|
|
207
|
+
? optionsArray.indexOf(nextNonDisabledOption)
|
|
208
|
+
: currentOptionIndex;
|
|
209
|
+
return this.options?.get(nextNonDisabledOptionIndex)?.value;
|
|
210
|
+
}
|
|
211
|
+
initKeyManager() {
|
|
212
|
+
// destroy any existing key manager
|
|
213
|
+
this.keyManager?.destroy();
|
|
214
|
+
this.keyManager = new ListKeyManager(this.options.map((option) => ({
|
|
215
|
+
value: option.value,
|
|
216
|
+
getLabel: () => option.label,
|
|
217
|
+
disabled: !!option.disabled,
|
|
218
|
+
}))).withTypeAhead();
|
|
219
|
+
this.keyManager.change.subscribe(() => {
|
|
220
|
+
const selectedOption = this.options?.find((option) => this.keyManager?.activeItem?.value === option.value);
|
|
221
|
+
if (selectedOption) {
|
|
222
|
+
this.listboxValue = [selectedOption.value];
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
SelectComponentBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: SelectComponentBase, deps: [{ token: i1.SelectValueHolder }], target: i0.ɵɵFactoryTarget.Directive });
|
|
228
|
+
SelectComponentBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.0", type: SelectComponentBase, inputs: { disabled: "disabled", id: "id", name: "name", placeholder: "placeholder", ariaLabel: ["aria-label", "ariaLabel"], ariaLabelledby: ["aria-labelledby", "ariaLabelledby"] }, outputs: { opened: "opened", closed: "closed", selected: "selected" }, queries: [{ propertyName: "selectionText", first: true, predicate: SelectionTextDirective, descendants: true }, { propertyName: "options", predicate: OptionComponent, descendants: true }, { propertyName: "listboxChildren", predicate: ListboxChild }], ngImport: i0 });
|
|
229
|
+
__decorate([
|
|
230
|
+
CoerceBoolean
|
|
231
|
+
], SelectComponentBase.prototype, "disabled", void 0);
|
|
232
|
+
__decorate([
|
|
233
|
+
AutoId()
|
|
234
|
+
], SelectComponentBase.prototype, "id", void 0);
|
|
235
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: SelectComponentBase, decorators: [{
|
|
236
|
+
type: Directive
|
|
237
|
+
}], ctorParameters: function () { return [{ type: i1.SelectValueHolder }]; }, propDecorators: { disabled: [{
|
|
238
|
+
type: Input
|
|
239
|
+
}], id: [{
|
|
240
|
+
type: Input
|
|
241
|
+
}], name: [{
|
|
242
|
+
type: Input
|
|
243
|
+
}], placeholder: [{
|
|
244
|
+
type: Input
|
|
245
|
+
}], opened: [{
|
|
246
|
+
type: Output
|
|
247
|
+
}], closed: [{
|
|
248
|
+
type: Output
|
|
249
|
+
}], options: [{
|
|
250
|
+
type: ContentChildren,
|
|
251
|
+
args: [OptionComponent, { descendants: true }]
|
|
252
|
+
}], listboxChildren: [{
|
|
253
|
+
type: ContentChildren,
|
|
254
|
+
args: [ListboxChild]
|
|
255
|
+
}], selected: [{
|
|
256
|
+
type: Output
|
|
257
|
+
}], ariaLabel: [{
|
|
258
|
+
type: Input,
|
|
259
|
+
args: ['aria-label']
|
|
260
|
+
}], ariaLabelledby: [{
|
|
261
|
+
type: Input,
|
|
262
|
+
args: ['aria-labelledby']
|
|
263
|
+
}], selectionText: [{
|
|
264
|
+
type: ContentChild,
|
|
265
|
+
args: [SelectionTextDirective]
|
|
266
|
+
}] } });
|
|
267
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWNvbXBvbmVudC1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZWxlY3Qvc3JjL2NvbW1vbi9zZWxlY3QtY29tcG9uZW50LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUV6RSxPQUFPLEVBQ0wsWUFBWSxFQUVaLGVBQWUsR0FDaEIsTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUVULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzNELE9BQU8sRUFFTCxjQUFjLEdBRWYsTUFBTSxtQkFBbUIsQ0FBQztBQUUzQixPQUFPLEVBQ0wsd0JBQXdCLEdBRXpCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7OztBQUc1RSxNQUFNLE9BQWdCLG1CQUFtQjtJQXlFdkMsSUFBSSxZQUFZLENBQUMsS0FBd0I7UUFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBQ0QsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFDRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ3JD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QUs7dUJBQUMsaUJBQWlCO2dCQUl4QixhQUFhO3NCQURaLFlBQVk7dUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29lcmNlQm9vbGVhbiB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb2VyY2UtYm9vbGVhbi5kZWNvcmF0b3InO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gIExpc3Rib3hDaGlsZCxcbiAgTGlzdGJveENvbXBvbmVudCxcbiAgT3B0aW9uQ29tcG9uZW50LFxufSBmcm9tICcuLi8uLi8uLi9saXN0Ym94L3B1YmxpY19hcGknO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEF1dG9JZCB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9hdXRvLWlkLmRlY29yYXRvcic7XG5pbXBvcnQge1xuICBGb2N1c09yaWdpbixcbiAgTGlzdEtleU1hbmFnZXIsXG4gIExpc3RLZXlNYW5hZ2VyT3B0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBQb3BvdmVyVHJpZ2dlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL3BvcG92ZXIvc3JjL3BvcG92ZXItdHJpZ2dlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHtcbiAgTXVsdGlTZWxlY3REaXJlY3RpdmVCYXNlLFxuICBTZWxlY3RWYWx1ZUhvbGRlcixcbn0gZnJvbSAnLi9zZWxlY3QtdmFsdWUtaG9sZGVyJztcbmltcG9ydCB7IFNlbGVjdGlvblRleHREaXJlY3RpdmUgfSBmcm9tICcuLi9zZWxlY3Qvc2VsZWN0aW9uLXRleHQuZGlyZWN0aXZlJztcblxuQERpcmVjdGl2ZSgpIC8vIFRoaXMgaXMgbmVlZGVkIGZvciBkZWNvcmF0b3JzIGxpa2UgSW5wdXQgdG8gd29ya1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNlbGVjdENvbXBvbmVudEJhc2VcbiAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95XG57XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBAQ29lcmNlQm9vbGVhblxuICBkaXNhYmxlZDogQm9vbGVhbklucHV0O1xuXG4gIC8qKiBBIHVuaXF1ZSBpZCBmb3IgdGhlIHNlbGVjdC4gSWYgbm9uZSBpcyBzdXBwbGllZCwgaXQgd2lsbCBiZSBhdXRvLWdlbmVyYXRlZC4gKi9cbiAgQElucHV0KClcbiAgQEF1dG9JZCgpXG4gIGlkID0gJyc7XG5cbiAgLyoqIFRoZSBuYW1lIG9mIHRoZSBpbnB1dCwgdXNlZCB3aGVuIHN1Ym1pdHRpbmcgYW4gSFRNTCBmb3JtLiAqL1xuICBASW5wdXQoKVxuICBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQbGFjZWhvbGRlciB0byBiZSBzaG93biBpZiBubyB2YWx1ZSBoYXMgYmVlbiBzZWxlY3RlZC5cbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gdGhlIHBvcG92ZXIgaXMgb3BlbmVkXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgb3BlbmVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiB0aGUgcG9wb3ZlciBpcyBjbG9zZWRcbiAgICovXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSBjbG9zZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAQ29udGVudENoaWxkcmVuKE9wdGlvbkNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBwdWJsaWMgb3B0aW9uczogUXVlcnlMaXN0PE9wdGlvbkNvbXBvbmVudD4gPSBuZXcgUXVlcnlMaXN0PE9wdGlvbkNvbXBvbmVudD4oKTtcblxuICBAQ29udGVudENoaWxkcmVuKExpc3Rib3hDaGlsZClcbiAgcHVibGljIGxpc3Rib3hDaGlsZHJlbjogUXVlcnlMaXN0PExpc3Rib3hDaGlsZD4gPSBuZXcgUXVlcnlMaXN0PExpc3Rib3hDaGlsZD4oKTtcblxuICAvKipcbiAgICogTWFuYWdlcyBrZXlib2FyZCBldmVudHMgZm9yIG9wdGlvbnMgaW4gdGhlIHBhbmVsLlxuICAgKi9cbiAgcHJvdGVjdGVkIGtleU1hbmFnZXI6XG4gICAgfCBMaXN0S2V5TWFuYWdlcjx7IHZhbHVlOiBzdHJpbmcgfSAmIExpc3RLZXlNYW5hZ2VyT3B0aW9uPlxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBFbWl0cyB3aGVuZXZlciB0aGUgZHJvcGRvd24gaXMgY2xvc2VkIGFzIGEgcmVzdWx0IG9mIGFuIG9wdGlvbiAoYWxyZWFkeVxuICAgKiBzZWxlY3RlZCBvciBub3QpIGJlaW5nIHNlbGVjdGVkLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBJbnB1dCgnYXJpYS1sYWJlbCcpXG4gIGFyaWFMYWJlbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgnYXJpYS1sYWJlbGxlZGJ5JylcbiAgYXJpYUxhYmVsbGVkYnk/OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBAQ29udGVudENoaWxkKFNlbGVjdGlvblRleHREaXJlY3RpdmUpXG4gIHNlbGVjdGlvblRleHQ/OiBTZWxlY3Rpb25UZXh0RGlyZWN0aXZlO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIHdvcmsgYXJvdW5kIEV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkRXJyb3IgZXJyb3IgdGhyb3duIGZyb20gSGlkZGVuU2VsZWN0LFxuICAgKiB3aGVuIHRoZSBzZWxlY3QgY29tcG9uZW50IGlzIHJlbmRlcmVkIGZyb20gYSB0ZW1wbGF0ZSAoZS5nLiB3aXRoICpuZ0lmKS4gSXQncyBzZXQgdG8gdHJ1ZVxuICAgKiBhc3luY2hyb25vdXNseSBhZnRlciBjb250ZW50IGlzIGluaXRpYWxpemVkLCB0byBkZWxheSByZW5kZXJpbmcgb2YgdGhpbmdzIHRoYXQgZGVwZW5kIG9uXG4gICAqIG9wdGlvbnMuIEl0J3Mgbm90IGNsZWFyIHdoeSB0aGUgaXNzdWUgaGFwcGVucywgYW5kIGl0IG9ubHkgaGFwcGVucyB3aGVuIHNlbGVjdCBpcyB1c2VkIHdpdGhcbiAgICogKm5nSWYsIG9yIGdlbmVyYWxseSBpbiBhIHRlbXBsYXRlLlxuICAgKi9cbiAgX2luaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgc2V0IGxpc3Rib3hWYWx1ZSh2YWx1ZTogcmVhZG9ubHkgc3RyaW5nW10pIHtcbiAgICB0aGlzLnZhbHVlSG9sZGVyLnNldEZyb21MaXN0Ym94VmFsdWUodmFsdWUpO1xuICAgIHRoaXMuY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbih0aGlzLnZhbHVlSG9sZGVyLnZhbHVlKTtcbiAgfVxuICBnZXQgbGlzdGJveFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlSG9sZGVyLmdldExpc3Rib3hWYWx1ZSgpO1xuICB9XG4gIGdldCBzZWxlY3RlZE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucz8uZmlsdGVyKChvcHRpb24pID0+XG4gICAgICB0aGlzLmxpc3Rib3hWYWx1ZS5pbmNsdWRlcyhvcHRpb24udmFsdWUpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCB2YWx1ZUhvbGRlcjogU2VsZWN0VmFsdWVIb2xkZXIpIHt9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHRyaWdnZXJSZWY6IFBvcG92ZXJUcmlnZ2VyRGlyZWN0aXZlIHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgdHJpZ2dlckVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgbGlzdGJveDogTGlzdGJveENvbXBvbmVudCB8IHVuZGVmaW5lZDtcbiAgcHVibGljIGFic3RyYWN0IGZvY3VzKGZvY3VzT3JpZ2luOiBGb2N1c09yaWdpbik6IHZvaWQ7XG4gIHB1YmxpYyBhYnN0cmFjdCBpc0ZvY3VzZWQoKTogYm9vbGVhbjtcblxuICBoYW5kbGVLZXlEb3duKCRldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICgkZXZlbnQudGFyZ2V0ICE9PSB0aGlzLnRyaWdnZXJFbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN3aXRjaCAoJGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgdGhpcy50cmlnZ2VyUmVmPy5vcGVuKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIHRoaXMudHJpZ2dlclJlZj8ub3BlbigpO1xuICAgICAgICAvLyB3ZSBuZWVkIHRvIGRlbGF5IGl0IGEgbGl0dGxlLCBzaW5jZSB0aGUgbGlzdGJveCB3aWxsIGF1dG9mb2N1c1xuICAgICAgICAvLyB0aGUgZmlyc3QgaXRlbS5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucz8ubGFzdCAmJiB0aGlzLmxpc3Rib3hWYWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMubGlzdGJveD8uc2V0QWN0aXZlT3B0aW9uKHRoaXMub3B0aW9ucz8ubGFzdC52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyUmVmPy5vcGVuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5nZXROZXh0RW5hYmxlZE9wdGlvblZhbHVlKFxuICAgICAgICAgICAgJGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcgPyAnbGVmdCcgOiAncmlnaHQnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3Rib3hWYWx1ZSA9IFtvcHRpb25dO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMua2V5TWFuYWdlcj8ub25LZXlkb3duKCRldmVudCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0U2VsZWN0aW9uVGV4dCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9ucyA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zO1xuICAgIGlmIChzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGlmIChzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gc2VsZWN0ZWRPcHRpb25zWzBdPy5sYWJlbDtcbiAgICB9XG4gICAgcmV0dXJuIGAke1xuICAgICAgc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA9PT0gdGhpcy5vcHRpb25zLmxlbmd0aFxuICAgICAgICA/ICdBbGwnXG4gICAgICAgIDogc2VsZWN0ZWRPcHRpb25zLmxlbmd0aFxuICAgIH0gc2VsZWN0ZWRgO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgbXVsdGlwbGUgc2VsZWN0aW9uIGlzIGFsbG93ZWQuXG4gICAqL1xuICBnZXQgbXVsdGlwbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVIb2xkZXIgaW5zdGFuY2VvZiBNdWx0aVNlbGVjdERpcmVjdGl2ZUJhc2U7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0S2V5TWFuYWdlcigpO1xuXG4gICAgdGhpcy5vcHRpb25zLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuaW5pdEtleU1hbmFnZXIoKTtcbiAgICB9KTtcbiAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHRvIGF2b2lkIGFuIE5HMDEwMCBFeHByZXNzaW9uQ2hhbmdlZEFmdGVyLi4uIGVycm9yIHdoZW4gdGhlcmUgaXMgYW4gaW5pdGlhbCB2YWx1ZVxuICAgICAqIFRoZSBpc3N1ZSBpcyBwcm9iYWJseSBkdWUgdG8gdGhlIGZhY3QgdGhhdCBvcHRpb25zIGFyZSBkZWZpbmVkIHdpdGhpbmcgdGhlICoqY29udGVudCoqXG4gICAgICogKHNwLW9wdGlvbiBlbGVtZW50cyksIHNvIHRoZSBsaXN0Ym94IHZhbHVlIGNhbiBjaGFuZ2UgYWZ0ZXIgdGhlIHZpZXcgb2Ygc2VsZWN0IGlzIGNoZWNrZWQsXG4gICAgICogaWYgdGhlcmUgaXMgYSBkZWZhdWx0IHZhbHVlLiBBbmQgdGhhdCBsZWFkcyB0byB0aGUgZXJyb3IsIHNpbmNlIHdlIGhhdmUgYmluZGluZ3MgaW4gdGhlXG4gICAgICogdGVtcGxhdGUsIHN1Y2ggYXMgYGdldFNlbGVjdGlvblRleHQoKWAsIHRoYXQgZGVwZW5kIG9uIHRoZSBsaXN0Ym94IHZhbHVlLlxuICAgICAqL1xuICAgIGlmICh0aGlzLmxpc3Rib3hWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmtleU1hbmFnZXI/LmRlc3Ryb3koKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBhbiBpdGVtIGluIHRoZSBsaXN0Ym94IGlzIHNlbGVjdGVkLlxuICAgKi9cbiAgX2hhbmRsZVNlbGVjdGVkKCkge1xuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy50cmlnZ2VyUmVmPy5jbG9zZSgpO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkLmVtaXQoKTtcbiAgfVxuXG4gIGlzT3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50cmlnZ2VyUmVmPy5pc09wZW4oKSA/PyBmYWxzZTtcbiAgfVxuXG4gIG9wZW4oKSB7XG4gICAgdGhpcy50cmlnZ2VyUmVmPy5vcGVuKCk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLnRyaWdnZXJSZWY/LmNsb3NlKCk7XG4gIH1cblxuICB0b2dnbGUoKSB7XG4gICAgdGhpcy50cmlnZ2VyUmVmPy5vcGVuKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RmllbGRMYWJlbD8oKTogc3RyaW5nO1xuXG4gIGdldExhYmVsVGV4dCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAodGhpcy5nZXRGaWVsZExhYmVsPy4oKSA/PyB0aGlzLmFyaWFMYWJlbCk/LnRyaW0oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICBwdWJsaWMgb25Ub3VjaGVkOiAoKSA9PiBhbnkgPSAoKSA9PiB7fTtcblxuICBwdWJsaWMgX29uT3BlbigpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5lZC5lbWl0KCk7XG4gIH1cblxuICBwdWJsaWMgX29uQ2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZWQuZW1pdCgpO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICovXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbiA9IGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAqL1xuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgKi9cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICovXG4gIHdyaXRlVmFsdWUodmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlSG9sZGVyLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TmV4dEVuYWJsZWRPcHRpb25WYWx1ZShkaXJlY3Rpb246ICdsZWZ0JyB8ICdyaWdodCcgPSAncmlnaHQnKSB7XG4gICAgY29uc3Qgb3B0aW9uc0FycmF5ID0gdGhpcy5vcHRpb25zPy50b0FycmF5KCkgfHwgW107XG4gICAgbGV0IG5leHROb25EaXNhYmxlZE9wdGlvbjtcbiAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zWzBdO1xuXG4gICAgY29uc3QgY3VycmVudE9wdGlvbkluZGV4ID1cbiAgICAgIChzZWxlY3RlZE9wdGlvbiAmJiBvcHRpb25zQXJyYXkuaW5kZXhPZihzZWxlY3RlZE9wdGlvbikpID8/IC0xO1xuICAgIGNvbnN0IG5vdERpc2FibGVkID0gKG86IE9wdGlvbkNvbXBvbmVudCkgPT4gIW8uZGlzYWJsZWQ7XG5cbiAgICBpZiAoY3VycmVudE9wdGlvbkluZGV4ID09PSAtMSkge1xuICAgICAgbmV4dE5vbkRpc2FibGVkT3B0aW9uID0gb3B0aW9uc0FycmF5LmZpbmQobm90RGlzYWJsZWQpO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgIG5leHROb25EaXNhYmxlZE9wdGlvbiA9IG9wdGlvbnNBcnJheVxuICAgICAgICAuc2xpY2UoMCwgY3VycmVudE9wdGlvbkluZGV4KVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5maW5kKG5vdERpc2FibGVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dE5vbkRpc2FibGVkT3B0aW9uID0gb3B0aW9uc0FycmF5XG4gICAgICAgIC5zbGljZShjdXJyZW50T3B0aW9uSW5kZXggKyAxLCBvcHRpb25zQXJyYXkubGVuZ3RoKVxuICAgICAgICAuZmluZChub3REaXNhYmxlZCk7XG4gICAgfVxuXG4gICAgY29uc3QgbmV4dE5vbkRpc2FibGVkT3B0aW9uSW5kZXggPSBuZXh0Tm9uRGlzYWJsZWRPcHRpb25cbiAgICAgID8gb3B0aW9uc0FycmF5LmluZGV4T2YobmV4dE5vbkRpc2FibGVkT3B0aW9uKVxuICAgICAgOiBjdXJyZW50T3B0aW9uSW5kZXg7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucz8uZ2V0KG5leHROb25EaXNhYmxlZE9wdGlvbkluZGV4KT8udmFsdWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdEtleU1hbmFnZXIoKTogdm9pZCB7XG4gICAgLy8gZGVzdHJveSBhbnkgZXhpc3Rpbmcga2V5IG1hbmFnZXJcbiAgICB0aGlzLmtleU1hbmFnZXI/LmRlc3Ryb3koKTtcblxuICAgIHRoaXMua2V5TWFuYWdlciA9IG5ldyBMaXN0S2V5TWFuYWdlcjxcbiAgICAgIHsgdmFsdWU6IHN0cmluZyB9ICYgTGlzdEtleU1hbmFnZXJPcHRpb25cbiAgICA+KFxuICAgICAgdGhpcy5vcHRpb25zLm1hcCgob3B0aW9uKSA9PiAoe1xuICAgICAgICB2YWx1ZTogb3B0aW9uLnZhbHVlLFxuICAgICAgICBnZXRMYWJlbDogKCkgPT4gb3B0aW9uLmxhYmVsLFxuICAgICAgICBkaXNhYmxlZDogISFvcHRpb24uZGlzYWJsZWQsXG4gICAgICB9KSlcbiAgICApLndpdGhUeXBlQWhlYWQoKTtcblxuICAgIHRoaXMua2V5TWFuYWdlci5jaGFuZ2Uuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5vcHRpb25zPy5maW5kKFxuICAgICAgICAob3B0aW9uKSA9PiB0aGlzLmtleU1hbmFnZXI/LmFjdGl2ZUl0ZW0/LnZhbHVlID09PSBvcHRpb24udmFsdWVcbiAgICAgICk7XG5cbiAgICAgIGlmIChzZWxlY3RlZE9wdGlvbikge1xuICAgICAgICB0aGlzLmxpc3Rib3hWYWx1ZSA9IFtzZWxlY3RlZE9wdGlvbi52YWx1ZV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { Directive, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* A common base class to handle value for single and multiple selection.
|
|
5
|
+
* {@link MultiSelectDirectiveBase} and {@link SingleSelectDirectiveBase} implement and
|
|
6
|
+
* provide this interface. Note that the main purpose for such design is **not**
|
|
7
|
+
* to abstract out selection behavior. But to have accurate `value` and `valueChange`
|
|
8
|
+
* type for single and multiple selection mode. It would be possible to fully abstract out
|
|
9
|
+
* the selection behavior, and have Select component not know anything about selection being
|
|
10
|
+
* multiple or not, but it doesn't seem such a clear abstraction, and also not worth the additional
|
|
11
|
+
* complexity.
|
|
12
|
+
*
|
|
13
|
+
* At least one directive has to be defined for each select component to provide SelectValueHolder,
|
|
14
|
+
* extending either {@link MultiSelectDirectiveBase} or {@link SingleSelectDirectiveBase}
|
|
15
|
+
*/
|
|
16
|
+
export class SelectValueHolder {
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Enables multiple selection. When present, `value` will be of type `string[]`, and `valueChange`
|
|
20
|
+
* will emit `string[]`.
|
|
21
|
+
*
|
|
22
|
+
* Each select component can define a directive with the right selector (usually based on
|
|
23
|
+
* the presence of `multiple` attribute) to enable multiple selection.
|
|
24
|
+
*/
|
|
25
|
+
export class MultiSelectDirectiveBase extends SelectValueHolder {
|
|
26
|
+
constructor() {
|
|
27
|
+
super(...arguments);
|
|
28
|
+
this.value = [];
|
|
29
|
+
this.valueChange = new EventEmitter();
|
|
30
|
+
}
|
|
31
|
+
setFromListboxValue(value) {
|
|
32
|
+
this.value = value;
|
|
33
|
+
this.valueChange.emit(this.value);
|
|
34
|
+
}
|
|
35
|
+
getListboxValue() {
|
|
36
|
+
return this.value || [];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
MultiSelectDirectiveBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: MultiSelectDirectiveBase, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
40
|
+
MultiSelectDirectiveBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.0", type: MultiSelectDirectiveBase, inputs: { value: "value" }, outputs: { valueChange: "valueChange" }, usesInheritance: true, ngImport: i0 });
|
|
41
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: MultiSelectDirectiveBase, decorators: [{
|
|
42
|
+
type: Directive
|
|
43
|
+
}], propDecorators: { value: [{
|
|
44
|
+
type: Input
|
|
45
|
+
}], valueChange: [{
|
|
46
|
+
type: Output
|
|
47
|
+
}] } });
|
|
48
|
+
/**
|
|
49
|
+
* Enables single selection, the default behavior of select.
|
|
50
|
+
* When present, `value` will be of type `string`, and `valueChange` will emit `string`.
|
|
51
|
+
*
|
|
52
|
+
* Each select component has to define a directive with the right selector (usually based on
|
|
53
|
+
* the absence of `multiple` attribute) to enable single selection.
|
|
54
|
+
*/
|
|
55
|
+
export class SingleSelectDirectiveBase extends SelectValueHolder {
|
|
56
|
+
constructor() {
|
|
57
|
+
super(...arguments);
|
|
58
|
+
this._value = '';
|
|
59
|
+
this.values = [];
|
|
60
|
+
this.valueChange = new EventEmitter();
|
|
61
|
+
}
|
|
62
|
+
get value() {
|
|
63
|
+
return this._value;
|
|
64
|
+
}
|
|
65
|
+
set value(value) {
|
|
66
|
+
this._value = value;
|
|
67
|
+
this.values = value ? [value] : [];
|
|
68
|
+
}
|
|
69
|
+
setFromListboxValue(value) {
|
|
70
|
+
this.value = value[0];
|
|
71
|
+
this.valueChange.emit(this._value);
|
|
72
|
+
}
|
|
73
|
+
getListboxValue() {
|
|
74
|
+
return this.values;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
SingleSelectDirectiveBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: SingleSelectDirectiveBase, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
78
|
+
SingleSelectDirectiveBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.0", type: SingleSelectDirectiveBase, inputs: { value: "value" }, outputs: { valueChange: "valueChange" }, usesInheritance: true, ngImport: i0 });
|
|
79
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: SingleSelectDirectiveBase, decorators: [{
|
|
80
|
+
type: Directive
|
|
81
|
+
}], propDecorators: { value: [{
|
|
82
|
+
type: Input
|
|
83
|
+
}], valueChange: [{
|
|
84
|
+
type: Output
|
|
85
|
+
}] } });
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXZhbHVlLWhvbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VsZWN0L3NyYy9jb21tb24vc2VsZWN0LXZhbHVlLWhvbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUV2RTs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLE9BQWdCLGlCQUFpQjtDQU90QztBQUVEOzs7Ozs7R0FNRztBQUVILE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxpQkFBMkI7SUFEekU7O1FBR0UsVUFBSyxHQUFhLEVBQUUsQ0FBQztRQUdyQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7S0FTNUM7SUFQQyxtQkFBbUIsQ0FBQyxLQUFlO1FBQ2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQzs7cUhBYlUsd0JBQXdCO3lHQUF4Qix3QkFBd0I7MkZBQXhCLHdCQUF3QjtrQkFEcEMsU0FBUzs4QkFHUixLQUFLO3NCQURKLEtBQUs7Z0JBSU4sV0FBVztzQkFEVixNQUFNOztBQVlUOzs7Ozs7R0FNRztBQUVILE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxpQkFBeUI7SUFEeEU7O1FBVVUsV0FBTSxHQUFXLEVBQUUsQ0FBQztRQUVwQixXQUFNLEdBQWEsRUFBRSxDQUFDO1FBRzlCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztLQVUxQztJQXZCQyxJQUNJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLEtBQWE7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBUUQsbUJBQW1CLENBQUMsS0FBZTtRQUNqQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQzs7c0hBdkJVLHlCQUF5QjswR0FBekIseUJBQXlCOzJGQUF6Qix5QkFBeUI7a0JBRHJDLFNBQVM7OEJBR0osS0FBSztzQkFEUixLQUFLO2dCQWFOLFdBQVc7c0JBRFYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQSBjb21tb24gYmFzZSBjbGFzcyB0byBoYW5kbGUgdmFsdWUgZm9yIHNpbmdsZSBhbmQgbXVsdGlwbGUgc2VsZWN0aW9uLlxuICoge0BsaW5rIE11bHRpU2VsZWN0RGlyZWN0aXZlQmFzZX0gYW5kIHtAbGluayBTaW5nbGVTZWxlY3REaXJlY3RpdmVCYXNlfSBpbXBsZW1lbnQgYW5kXG4gKiBwcm92aWRlIHRoaXMgaW50ZXJmYWNlLiBOb3RlIHRoYXQgdGhlIG1haW4gcHVycG9zZSBmb3Igc3VjaCBkZXNpZ24gaXMgKipub3QqKlxuICogdG8gYWJzdHJhY3Qgb3V0IHNlbGVjdGlvbiBiZWhhdmlvci4gQnV0IHRvIGhhdmUgYWNjdXJhdGUgYHZhbHVlYCBhbmQgYHZhbHVlQ2hhbmdlYFxuICogdHlwZSBmb3Igc2luZ2xlIGFuZCBtdWx0aXBsZSBzZWxlY3Rpb24gbW9kZS4gSXQgd291bGQgYmUgcG9zc2libGUgdG8gZnVsbHkgYWJzdHJhY3Qgb3V0XG4gKiB0aGUgc2VsZWN0aW9uIGJlaGF2aW9yLCBhbmQgaGF2ZSBTZWxlY3QgY29tcG9uZW50IG5vdCBrbm93IGFueXRoaW5nIGFib3V0IHNlbGVjdGlvbiBiZWluZ1xuICogbXVsdGlwbGUgb3Igbm90LCBidXQgaXQgZG9lc24ndCBzZWVtIHN1Y2ggYSBjbGVhciBhYnN0cmFjdGlvbiwgYW5kIGFsc28gbm90IHdvcnRoIHRoZSBhZGRpdGlvbmFsXG4gKiBjb21wbGV4aXR5LlxuICpcbiAqIEF0IGxlYXN0IG9uZSBkaXJlY3RpdmUgaGFzIHRvIGJlIGRlZmluZWQgZm9yIGVhY2ggc2VsZWN0IGNvbXBvbmVudCB0byBwcm92aWRlIFNlbGVjdFZhbHVlSG9sZGVyLFxuICogZXh0ZW5kaW5nIGVpdGhlciB7QGxpbmsgTXVsdGlTZWxlY3REaXJlY3RpdmVCYXNlfSBvciB7QGxpbmsgU2luZ2xlU2VsZWN0RGlyZWN0aXZlQmFzZX1cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNlbGVjdFZhbHVlSG9sZGVyPFQgPSB1bmtub3duPiB7XG4gIGFic3RyYWN0IHZhbHVlOiBUO1xuICBhYnN0cmFjdCB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPFQ+O1xuXG4gIGFic3RyYWN0IHNldEZyb21MaXN0Ym94VmFsdWUodmFsdWU6IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZDtcblxuICBhYnN0cmFjdCBnZXRMaXN0Ym94VmFsdWUoKTogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbi8qKlxuICogRW5hYmxlcyBtdWx0aXBsZSBzZWxlY3Rpb24uIFdoZW4gcHJlc2VudCwgYHZhbHVlYCB3aWxsIGJlIG9mIHR5cGUgYHN0cmluZ1tdYCwgYW5kIGB2YWx1ZUNoYW5nZWBcbiAqIHdpbGwgZW1pdCBgc3RyaW5nW11gLlxuICpcbiAqIEVhY2ggc2VsZWN0IGNvbXBvbmVudCBjYW4gZGVmaW5lIGEgZGlyZWN0aXZlIHdpdGggdGhlIHJpZ2h0IHNlbGVjdG9yICh1c3VhbGx5IGJhc2VkIG9uXG4gKiB0aGUgcHJlc2VuY2Ugb2YgYG11bHRpcGxlYCBhdHRyaWJ1dGUpIHRvIGVuYWJsZSBtdWx0aXBsZSBzZWxlY3Rpb24uXG4gKi9cbkBEaXJlY3RpdmUoKSAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgZGVjb3JhdG9ycyBsaWtlIElucHV0IHRvIHdvcmtcbmV4cG9ydCBjbGFzcyBNdWx0aVNlbGVjdERpcmVjdGl2ZUJhc2UgZXh0ZW5kcyBTZWxlY3RWYWx1ZUhvbGRlcjxzdHJpbmdbXT4ge1xuICBASW5wdXQoKVxuICB2YWx1ZTogc3RyaW5nW10gPSBbXTtcblxuICBAT3V0cHV0KClcbiAgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpO1xuXG4gIHNldEZyb21MaXN0Ym94VmFsdWUodmFsdWU6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgfVxuICBnZXRMaXN0Ym94VmFsdWUoKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlIHx8IFtdO1xuICB9XG59XG5cbi8qKlxuICogRW5hYmxlcyBzaW5nbGUgc2VsZWN0aW9uLCB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBzZWxlY3QuXG4gKiBXaGVuIHByZXNlbnQsIGB2YWx1ZWAgd2lsbCBiZSBvZiB0eXBlIGBzdHJpbmdgLCBhbmQgYHZhbHVlQ2hhbmdlYCB3aWxsIGVtaXQgYHN0cmluZ2AuXG4gKlxuICogRWFjaCBzZWxlY3QgY29tcG9uZW50IGhhcyB0byBkZWZpbmUgYSBkaXJlY3RpdmUgd2l0aCB0aGUgcmlnaHQgc2VsZWN0b3IgKHVzdWFsbHkgYmFzZWQgb25cbiAqIHRoZSBhYnNlbmNlIG9mIGBtdWx0aXBsZWAgYXR0cmlidXRlKSB0byBlbmFibGUgc2luZ2xlIHNlbGVjdGlvbi5cbiAqL1xuQERpcmVjdGl2ZSgpIC8vIFRoaXMgaXMgbmVlZGVkIGZvciBkZWNvcmF0b3JzIGxpa2UgSW5wdXQgdG8gd29ya1xuZXhwb3J0IGNsYXNzIFNpbmdsZVNlbGVjdERpcmVjdGl2ZUJhc2UgZXh0ZW5kcyBTZWxlY3RWYWx1ZUhvbGRlcjxzdHJpbmc+IHtcbiAgQElucHV0KClcbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG4gIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnZhbHVlcyA9IHZhbHVlID8gW3ZhbHVlXSA6IFtdO1xuICB9XG4gIHByaXZhdGUgX3ZhbHVlOiBzdHJpbmcgPSAnJztcblxuICBwcml2YXRlIHZhbHVlczogc3RyaW5nW10gPSBbXTtcblxuICBAT3V0cHV0KClcbiAgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBzZXRGcm9tTGlzdGJveFZhbHVlKHZhbHVlOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZVswXTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5fdmFsdWUpO1xuICB9XG5cbiAgZ2V0TGlzdGJveFZhbHVlKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXM7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { Directive, EventEmitter, Input, Output } from '@angular/core';
|
|
3
|
+
import { CoerceBoolean } from '../../../common/coerce-boolean.decorator';
|
|
4
|
+
import { OptionComponent } from '../../../listbox/src/option.component';
|
|
5
|
+
import { section, SectionDirective, } from '../../../listbox/src/section.directive';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
/**
|
|
8
|
+
* Marks sp-select as searchable. When used, a search input is rendered inside select trigger
|
|
9
|
+
* which allows filtering options, in a more convenient way than the default typeahead search.
|
|
10
|
+
* By default, rendered `sp-option`s are filtered based on the search value, but `searchValue`
|
|
11
|
+
* and `searchValueChange` can be used to control the search value and filter the `sp-options`
|
|
12
|
+
* upfront.
|
|
13
|
+
*/
|
|
14
|
+
export class SearchableSelectDirective {
|
|
15
|
+
constructor() {
|
|
16
|
+
/**
|
|
17
|
+
* Filtering function to be applied on each item. The default filter function
|
|
18
|
+
* does a case-insensitive search on optionComponent.label.
|
|
19
|
+
* The built-in filtering can be disabled by passing `null`. That's useful
|
|
20
|
+
* when filtering is fully controlled by filtering input sp-options based on
|
|
21
|
+
* {@property searchValue}.
|
|
22
|
+
*/
|
|
23
|
+
this.filter = (optionComponent, searchQuery) => optionComponent.label.toLowerCase().includes(searchQuery?.toLowerCase());
|
|
24
|
+
this.searchValueChange = new EventEmitter();
|
|
25
|
+
}
|
|
26
|
+
get searchValue() {
|
|
27
|
+
return this._searchValue ?? '';
|
|
28
|
+
}
|
|
29
|
+
set searchValue(value) {
|
|
30
|
+
this._searchValue = value;
|
|
31
|
+
}
|
|
32
|
+
filterListboxItems(items, filter) {
|
|
33
|
+
const filteredOutOptions = [];
|
|
34
|
+
const filteredChildren = Array.from(items)
|
|
35
|
+
?.map((item) => {
|
|
36
|
+
if (item instanceof OptionComponent) {
|
|
37
|
+
const isMatch = filter(item);
|
|
38
|
+
if (!isMatch) {
|
|
39
|
+
filteredOutOptions.push(item);
|
|
40
|
+
}
|
|
41
|
+
return isMatch ? item : null;
|
|
42
|
+
}
|
|
43
|
+
if (item instanceof SectionDirective) {
|
|
44
|
+
const { filteredChildren: sectionFilteredChildren, filteredOutOptions: sectionFilteredOutOptions, } = this.filterListboxItems(item.children, filter);
|
|
45
|
+
filteredOutOptions.push(...sectionFilteredOutOptions);
|
|
46
|
+
if (sectionFilteredChildren.length > 0) {
|
|
47
|
+
return section(sectionFilteredChildren.filter((item) => item instanceof OptionComponent), item.ariaLabel);
|
|
48
|
+
}
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
})
|
|
53
|
+
.filter(notNull);
|
|
54
|
+
return { filteredChildren, filteredOutOptions };
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Used when search value is updated via UI, and searchValueChange output should be emitted.
|
|
58
|
+
* @internal
|
|
59
|
+
*/
|
|
60
|
+
setSearchValue(searchValue) {
|
|
61
|
+
this._searchValue = searchValue;
|
|
62
|
+
this.searchValueChange.emit(searchValue);
|
|
63
|
+
}
|
|
64
|
+
defaultFilter(optionComponent, searchQuery) {
|
|
65
|
+
return optionComponent.label
|
|
66
|
+
.toLowerCase()
|
|
67
|
+
.includes(searchQuery?.toLowerCase());
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
SearchableSelectDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: SearchableSelectDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
71
|
+
SearchableSelectDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.0", type: SearchableSelectDirective, selector: "sp-select[searchable]", inputs: { searchValue: "searchValue", filter: "filter", selectTextOnOpen: "selectTextOnOpen" }, outputs: { searchValueChange: "searchValueChange" }, ngImport: i0 });
|
|
72
|
+
__decorate([
|
|
73
|
+
CoerceBoolean
|
|
74
|
+
], SearchableSelectDirective.prototype, "selectTextOnOpen", void 0);
|
|
75
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: SearchableSelectDirective, decorators: [{
|
|
76
|
+
type: Directive,
|
|
77
|
+
args: [{
|
|
78
|
+
selector: 'sp-select[searchable]',
|
|
79
|
+
}]
|
|
80
|
+
}], propDecorators: { searchValue: [{
|
|
81
|
+
type: Input
|
|
82
|
+
}], filter: [{
|
|
83
|
+
type: Input
|
|
84
|
+
}], selectTextOnOpen: [{
|
|
85
|
+
type: Input
|
|
86
|
+
}], searchValueChange: [{
|
|
87
|
+
type: Output
|
|
88
|
+
}] } });
|
|
89
|
+
export const notNull = (item) => item != null;
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoYWJsZS1zZWxlY3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZWxlY3Qvc3JjL3NlbGVjdC9zZWFyY2hhYmxlLXNlbGVjdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBR3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RSxPQUFPLEVBQ0wsT0FBTyxFQUNQLGdCQUFnQixHQUNqQixNQUFNLHdDQUF3QyxDQUFDOztBQUVoRDs7Ozs7O0dBTUc7QUFJSCxNQUFNLE9BQU8seUJBQXlCO0lBSHRDO1FBYUU7Ozs7OztXQU1HO1FBRUgsV0FBTSxHQUVxRSxDQUN6RSxlQUFnQyxFQUNoQyxXQUFtQixFQUNuQixFQUFFLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFPOUUsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztLQXdEaEQ7SUFyRkMsSUFDSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsSUFBSSxXQUFXLENBQUMsS0FBeUI7UUFDdkMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQXlCRCxrQkFBa0IsQ0FDaEIsS0FBNkIsRUFDN0IsTUFBNEM7UUFLNUMsTUFBTSxrQkFBa0IsR0FBc0IsRUFBRSxDQUFDO1FBQ2pELE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDeEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQXVCLEVBQUU7WUFDbEMsSUFBSSxJQUFJLFlBQVksZUFBZSxFQUFFO2dCQUNuQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQ1osa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUMvQjtnQkFDRCxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7YUFDOUI7WUFDRCxJQUFJLElBQUksWUFBWSxnQkFBZ0IsRUFBRTtnQkFDcEMsTUFBTSxFQUNKLGdCQUFnQixFQUFFLHVCQUF1QixFQUN6QyxrQkFBa0IsRUFBRSx5QkFBeUIsR0FDOUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDbkQsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcseUJBQXlCLENBQUMsQ0FBQztnQkFDdEQsSUFBSSx1QkFBdUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUN0QyxPQUFPLE9BQU8sQ0FDWix1QkFBdUIsQ0FBQyxNQUFNLENBQzVCLENBQUMsSUFBSSxFQUEyQixFQUFFLENBQ2hDLElBQUksWUFBWSxlQUFlLENBQ2xDLEVBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FDZixDQUFDO2lCQUNIO2dCQUNELE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQzthQUNELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsY0FBYyxDQUFDLFdBQW1CO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGFBQWEsQ0FBQyxlQUFnQyxFQUFFLFdBQW1CO1FBQ2pFLE9BQU8sZUFBZSxDQUFDLEtBQUs7YUFDekIsV0FBVyxFQUFFO2FBQ2IsUUFBUSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7O3NIQXJGVSx5QkFBeUI7MEdBQXpCLHlCQUF5QjtBQTJCcEM7SUFEQyxhQUFhO21FQUNrQjsyRkEzQnJCLHlCQUF5QjtrQkFIckMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsdUJBQXVCO2lCQUNsQzs4QkFHSyxXQUFXO3NCQURkLEtBQUs7Z0JBaUJOLE1BQU07c0JBREwsS0FBSztnQkFVTixnQkFBZ0I7c0JBRmYsS0FBSztnQkFLTixpQkFBaUI7c0JBRGhCLE1BQU07O0FBMkRULE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUNyQixJQUEwQixFQUNGLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvZXJjZUJvb2xlYW4gfSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29lcmNlLWJvb2xlYW4uZGVjb3JhdG9yJztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBMaXN0Ym94Q2hpbGQgfSBmcm9tICcuLi8uLi8uLi9saXN0Ym94L3NyYy9saXN0Ym94LWNoaWxkJztcbmltcG9ydCB7IE9wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2xpc3Rib3gvc3JjL29wdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgc2VjdGlvbixcbiAgU2VjdGlvbkRpcmVjdGl2ZSxcbn0gZnJvbSAnLi4vLi4vLi4vbGlzdGJveC9zcmMvc2VjdGlvbi5kaXJlY3RpdmUnO1xuXG4vKipcbiAqIE1hcmtzIHNwLXNlbGVjdCBhcyBzZWFyY2hhYmxlLiBXaGVuIHVzZWQsIGEgc2VhcmNoIGlucHV0IGlzIHJlbmRlcmVkIGluc2lkZSBzZWxlY3QgdHJpZ2dlclxuICogd2hpY2ggYWxsb3dzIGZpbHRlcmluZyBvcHRpb25zLCBpbiBhIG1vcmUgY29udmVuaWVudCB3YXkgdGhhbiB0aGUgZGVmYXVsdCB0eXBlYWhlYWQgc2VhcmNoLlxuICogQnkgZGVmYXVsdCwgcmVuZGVyZWQgYHNwLW9wdGlvbmBzIGFyZSBmaWx0ZXJlZCBiYXNlZCBvbiB0aGUgc2VhcmNoIHZhbHVlLCBidXQgYHNlYXJjaFZhbHVlYFxuICogYW5kIGBzZWFyY2hWYWx1ZUNoYW5nZWAgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgc2VhcmNoIHZhbHVlIGFuZCBmaWx0ZXIgdGhlIGBzcC1vcHRpb25zYFxuICogdXBmcm9udC5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnc3Atc2VsZWN0W3NlYXJjaGFibGVdJyxcbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoYWJsZVNlbGVjdERpcmVjdGl2ZSB7XG4gIEBJbnB1dCgpXG4gIGdldCBzZWFyY2hWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoVmFsdWUgPz8gJyc7XG4gIH1cbiAgc2V0IHNlYXJjaFZhbHVlKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9zZWFyY2hWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIHByaXZhdGUgX3NlYXJjaFZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEZpbHRlcmluZyBmdW5jdGlvbiB0byBiZSBhcHBsaWVkIG9uIGVhY2ggaXRlbS4gVGhlIGRlZmF1bHQgZmlsdGVyIGZ1bmN0aW9uXG4gICAqIGRvZXMgYSBjYXNlLWluc2Vuc2l0aXZlIHNlYXJjaCBvbiBvcHRpb25Db21wb25lbnQubGFiZWwuXG4gICAqIFRoZSBidWlsdC1pbiBmaWx0ZXJpbmcgY2FuIGJlIGRpc2FibGVkIGJ5IHBhc3NpbmcgYG51bGxgLiBUaGF0J3MgdXNlZnVsXG4gICAqIHdoZW4gZmlsdGVyaW5nIGlzIGZ1bGx5IGNvbnRyb2xsZWQgYnkgZmlsdGVyaW5nIGlucHV0IHNwLW9wdGlvbnMgYmFzZWQgb25cbiAgICoge0Bwcm9wZXJ0eSBzZWFyY2hWYWx1ZX0uXG4gICAqL1xuICBASW5wdXQoKVxuICBmaWx0ZXI/OlxuICAgIHwgbnVsbFxuICAgIHwgKChvcHRpb25Db21wb25lbnQ6IE9wdGlvbkNvbXBvbmVudCwgc2VhcmNoUXVlcnk6IHN0cmluZykgPT4gYm9vbGVhbikgPSAoXG4gICAgb3B0aW9uQ29tcG9uZW50OiBPcHRpb25Db21wb25lbnQsXG4gICAgc2VhcmNoUXVlcnk6IHN0cmluZ1xuICApID0+IG9wdGlvbkNvbXBvbmVudC5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFF1ZXJ5Py50b0xvd2VyQ2FzZSgpKTtcblxuICBASW5wdXQoKVxuICBAQ29lcmNlQm9vbGVhblxuICBzZWxlY3RUZXh0T25PcGVuPzogQm9vbGVhbklucHV0O1xuXG4gIEBPdXRwdXQoKVxuICBzZWFyY2hWYWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIGZpbHRlckxpc3Rib3hJdGVtcyhcbiAgICBpdGVtczogSXRlcmFibGU8TGlzdGJveENoaWxkPixcbiAgICBmaWx0ZXI6IChvcHRpb246IE9wdGlvbkNvbXBvbmVudCkgPT4gYm9vbGVhblxuICApOiB7XG4gICAgZmlsdGVyZWRDaGlsZHJlbjogTGlzdGJveENoaWxkW107XG4gICAgZmlsdGVyZWRPdXRPcHRpb25zOiBPcHRpb25Db21wb25lbnRbXTtcbiAgfSB7XG4gICAgY29uc3QgZmlsdGVyZWRPdXRPcHRpb25zOiBPcHRpb25Db21wb25lbnRbXSA9IFtdO1xuICAgIGNvbnN0IGZpbHRlcmVkQ2hpbGRyZW4gPSBBcnJheS5mcm9tKGl0ZW1zKVxuICAgICAgPy5tYXAoKGl0ZW0pOiBMaXN0Ym94Q2hpbGQgfCBudWxsID0+IHtcbiAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBPcHRpb25Db21wb25lbnQpIHtcbiAgICAgICAgICBjb25zdCBpc01hdGNoID0gZmlsdGVyKGl0ZW0pO1xuICAgICAgICAgIGlmICghaXNNYXRjaCkge1xuICAgICAgICAgICAgZmlsdGVyZWRPdXRPcHRpb25zLnB1c2goaXRlbSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpc01hdGNoID8gaXRlbSA6IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBTZWN0aW9uRGlyZWN0aXZlKSB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgZmlsdGVyZWRDaGlsZHJlbjogc2VjdGlvbkZpbHRlcmVkQ2hpbGRyZW4sXG4gICAgICAgICAgICBmaWx0ZXJlZE91dE9wdGlvbnM6IHNlY3Rpb25GaWx0ZXJlZE91dE9wdGlvbnMsXG4gICAgICAgICAgfSA9IHRoaXMuZmlsdGVyTGlzdGJveEl0ZW1zKGl0ZW0uY2hpbGRyZW4sIGZpbHRlcik7XG4gICAgICAgICAgZmlsdGVyZWRPdXRPcHRpb25zLnB1c2goLi4uc2VjdGlvbkZpbHRlcmVkT3V0T3B0aW9ucyk7XG4gICAgICAgICAgaWYgKHNlY3Rpb25GaWx0ZXJlZENoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBzZWN0aW9uKFxuICAgICAgICAgICAgICBzZWN0aW9uRmlsdGVyZWRDaGlsZHJlbi5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGl0ZW0pOiBpdGVtIGlzIE9wdGlvbkNvbXBvbmVudCA9PlxuICAgICAgICAgICAgICAgICAgaXRlbSBpbnN0YW5jZW9mIE9wdGlvbkNvbXBvbmVudFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBpdGVtLmFyaWFMYWJlbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihub3ROdWxsKTtcbiAgICByZXR1cm4geyBmaWx0ZXJlZENoaWxkcmVuLCBmaWx0ZXJlZE91dE9wdGlvbnMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIHdoZW4gc2VhcmNoIHZhbHVlIGlzIHVwZGF0ZWQgdmlhIFVJLCBhbmQgc2VhcmNoVmFsdWVDaGFuZ2Ugb3V0cHV0IHNob3VsZCBiZSBlbWl0dGVkLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHNldFNlYXJjaFZhbHVlKHNlYXJjaFZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZWFyY2hWYWx1ZSA9IHNlYXJjaFZhbHVlO1xuICAgIHRoaXMuc2VhcmNoVmFsdWVDaGFuZ2UuZW1pdChzZWFyY2hWYWx1ZSk7XG4gIH1cblxuICBkZWZhdWx0RmlsdGVyKG9wdGlvbkNvbXBvbmVudDogT3B0aW9uQ29tcG9uZW50LCBzZWFyY2hRdWVyeTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG9wdGlvbkNvbXBvbmVudC5sYWJlbFxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC5pbmNsdWRlcyhzZWFyY2hRdWVyeT8udG9Mb3dlckNhc2UoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IG5vdE51bGwgPSA8VD4oXG4gIGl0ZW06IFQgfCB1bmRlZmluZWQgfCBudWxsXG4pOiBpdGVtIGlzIE5vbk51bGxhYmxlPFQ+ID0+IGl0ZW0gIT0gbnVsbDtcbiJdfQ==
|