@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,301 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { OverlayConfig, } from '@angular/cdk/overlay';
|
|
3
|
+
import { TemplatePortal } from '@angular/cdk/portal';
|
|
4
|
+
import { Directive, EventEmitter, HostBinding, HostListener, InjectionToken, Injector, Input, Output, } from '@angular/core';
|
|
5
|
+
import { merge, Subject } from 'rxjs';
|
|
6
|
+
import { takeUntil } from 'rxjs/operators';
|
|
7
|
+
import { flip, toConnectedPosition } from '../../common/placement';
|
|
8
|
+
import { CoerceBoolean } from '../../common/coerce-boolean.decorator';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@angular/cdk/overlay";
|
|
11
|
+
export const POPOVER_TRIGGER = new InjectionToken('sp-popover-trigger');
|
|
12
|
+
// TODO(UC-2728): improve event handling when reusable press utility is added
|
|
13
|
+
export class PopoverTriggerDirective {
|
|
14
|
+
get getPopoverId() {
|
|
15
|
+
return this.overlayRef?.hostElement.querySelector('[role="dialog"]')?.id;
|
|
16
|
+
}
|
|
17
|
+
constructor(changeDetectorRef, cdkOverlay, viewContainerRef, elementRef, injector) {
|
|
18
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
19
|
+
this.cdkOverlay = cdkOverlay;
|
|
20
|
+
this.viewContainerRef = viewContainerRef;
|
|
21
|
+
this.elementRef = elementRef;
|
|
22
|
+
this.injector = injector;
|
|
23
|
+
this.placement = 'bottom';
|
|
24
|
+
this.templateRef = null;
|
|
25
|
+
/**
|
|
26
|
+
* Whether the popover should not block interaction with background.
|
|
27
|
+
*/
|
|
28
|
+
this.nonModal = false;
|
|
29
|
+
/**
|
|
30
|
+
* Whether the popover should be opened on press start.
|
|
31
|
+
*/
|
|
32
|
+
this.openOnPressStart = false;
|
|
33
|
+
/**
|
|
34
|
+
* Whether the popover should be closed when the container is scrolled.
|
|
35
|
+
* @default false
|
|
36
|
+
*/
|
|
37
|
+
this.closeOnScroll = false;
|
|
38
|
+
/**
|
|
39
|
+
* Can be used to disable toggling popover on clicks. Useful if `spPopoverTrigger`
|
|
40
|
+
* is applied on an element which doesn't support `disabled` property.
|
|
41
|
+
*/
|
|
42
|
+
this.disabled = false;
|
|
43
|
+
/** Emits when the attached popover is requested to open */
|
|
44
|
+
this.opened = new EventEmitter();
|
|
45
|
+
/** Emits when the attached popover is requested to close */
|
|
46
|
+
this.closed = new EventEmitter();
|
|
47
|
+
/** Emits when this trigger is destroyed. */
|
|
48
|
+
this.destroyed = new Subject();
|
|
49
|
+
/** A reference to the overlay which manages the triggered menu */
|
|
50
|
+
this.overlayRef = null;
|
|
51
|
+
this.isBeingPressed = false;
|
|
52
|
+
}
|
|
53
|
+
ngOnDestroy() {
|
|
54
|
+
this.destroyOverlay();
|
|
55
|
+
this.destroyed.next();
|
|
56
|
+
this.destroyed.complete();
|
|
57
|
+
}
|
|
58
|
+
/** Toggle the attached popover. */
|
|
59
|
+
toggle() {
|
|
60
|
+
this.isOpen() ? this.close() : this.open();
|
|
61
|
+
}
|
|
62
|
+
/** Open the attached popover. */
|
|
63
|
+
open() {
|
|
64
|
+
if (!this.isOpen() && this.templateRef != null && !this.disabled) {
|
|
65
|
+
this.opened.next();
|
|
66
|
+
if (!this.overlayRef) {
|
|
67
|
+
this.overlayRef = this.cdkOverlay.create(this.getOverlayConfig());
|
|
68
|
+
this.overlayRef.updatePositionStrategy(this.getOverlayPositionStrategy());
|
|
69
|
+
this.overlayRef.attach(this.getContentPortal());
|
|
70
|
+
this.overlayRef.detachments().subscribe(() => {
|
|
71
|
+
this.closed.next();
|
|
72
|
+
this.changeDetectorRef.detectChanges();
|
|
73
|
+
});
|
|
74
|
+
this.overlayRef
|
|
75
|
+
.outsidePointerEvents()
|
|
76
|
+
.pipe(takeUntil(merge(this.closed, this.destroyed)))
|
|
77
|
+
.subscribe((event) => {
|
|
78
|
+
if (
|
|
79
|
+
// If popover is opened on press start, an outside pointer event
|
|
80
|
+
// is emitted as the mouse is being released, which would immediately
|
|
81
|
+
// close the popover. Probably a bug in @angular/cdk/overlay.
|
|
82
|
+
!(this.openOnPressStart && this.isBeingPressed) &&
|
|
83
|
+
!this.elementRef.nativeElement.contains(event.target)) {
|
|
84
|
+
this.close();
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
this.overlayRef.attach(this.getContentPortal());
|
|
90
|
+
}
|
|
91
|
+
this.changeDetectorRef.detectChanges();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/** Close the opened popover. */
|
|
95
|
+
close() {
|
|
96
|
+
if (this.isOpen()) {
|
|
97
|
+
this.overlayRef?.detach();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/** Whether the popover is open. */
|
|
101
|
+
isOpen() {
|
|
102
|
+
return !!this.overlayRef?.hasAttached();
|
|
103
|
+
}
|
|
104
|
+
handleMousedown(event) {
|
|
105
|
+
this.isBeingPressed = true;
|
|
106
|
+
if (this.openOnPressStart) {
|
|
107
|
+
if (event.currentTarget instanceof HTMLElement) {
|
|
108
|
+
// We need to focus the trigger before opening. Otherwise, the focus restoration logic will
|
|
109
|
+
// be messed up, since the wrong element would have the focus when the popover is mounted.
|
|
110
|
+
event.currentTarget.focus();
|
|
111
|
+
event.preventDefault();
|
|
112
|
+
document.addEventListener('mouseup', () => {
|
|
113
|
+
setTimeout(() => {
|
|
114
|
+
this.isBeingPressed = false;
|
|
115
|
+
});
|
|
116
|
+
}, { once: true });
|
|
117
|
+
}
|
|
118
|
+
this.toggle();
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
handleClick() {
|
|
122
|
+
if (!this.openOnPressStart) {
|
|
123
|
+
this.toggle();
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* While onFocusout takes care of closing the popover when focus goes out, in the rare cases
|
|
128
|
+
* that there is no more focusable element between the trigger and the popover, the focus can
|
|
129
|
+
* go to the popover on pressing `Tab`. But the popover should be closed when tabbing on the
|
|
130
|
+
* trigger.
|
|
131
|
+
*/
|
|
132
|
+
handleTab() {
|
|
133
|
+
this.close();
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* In some use cases (e.g. in searchable select) popover trigger grabs the focus, right after
|
|
137
|
+
* the popover is opened. That requires popover trigger to detect when focus goes out of it
|
|
138
|
+
* and close the popover.
|
|
139
|
+
* Note: we can't use `blur` event since it won't bubble up, and the focus can be on an element
|
|
140
|
+
* inside the trigger, but not the trigger itself.
|
|
141
|
+
*
|
|
142
|
+
*/
|
|
143
|
+
onFocusout(event) {
|
|
144
|
+
if (event.relatedTarget === null &&
|
|
145
|
+
document.activeElement === event.target) {
|
|
146
|
+
// This happens on tab switch, without focus being actually moved.
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const focusReceivingElement = event.relatedTarget instanceof Element ? event.relatedTarget : null;
|
|
150
|
+
if (
|
|
151
|
+
// focus is going nowhere
|
|
152
|
+
!focusReceivingElement ||
|
|
153
|
+
// focus is going anywhere outside popover and popover trigger
|
|
154
|
+
!(this.elementRef?.nativeElement?.contains(focusReceivingElement) ||
|
|
155
|
+
// This is to not have the popover closed as soon as mouse is down on something inside the
|
|
156
|
+
// popover, if the focus is currently on the trigger
|
|
157
|
+
this.overlayRef?.overlayElement?.contains(focusReceivingElement))) {
|
|
158
|
+
this.close();
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
handleKeyDown(event) {
|
|
162
|
+
if (event.target === this.elementRef.nativeElement &&
|
|
163
|
+
!(this.elementRef.nativeElement instanceof HTMLButtonElement) &&
|
|
164
|
+
(event.key === 'Enter' || event.key === ' ')) {
|
|
165
|
+
event.preventDefault();
|
|
166
|
+
this.toggle();
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
destroyOverlay() {
|
|
170
|
+
if (this.overlayRef) {
|
|
171
|
+
this.overlayRef.dispose();
|
|
172
|
+
this.overlayRef = null;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/** Get the configuration object used to create the overlay. */
|
|
176
|
+
getOverlayConfig() {
|
|
177
|
+
return new OverlayConfig({
|
|
178
|
+
scrollStrategy: this.nonModal
|
|
179
|
+
? this.closeOnScroll
|
|
180
|
+
? this.cdkOverlay.scrollStrategies.close()
|
|
181
|
+
: this.cdkOverlay.scrollStrategies.reposition()
|
|
182
|
+
: this.cdkOverlay.scrollStrategies.block(),
|
|
183
|
+
// Including a transparent backdrop according to the latest decision of making popovers modal.
|
|
184
|
+
hasBackdrop: !this.nonModal,
|
|
185
|
+
backdropClass: 'cdk-overlay-transparent-backdrop',
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
getContentPortal() {
|
|
189
|
+
if (this.templateRef) {
|
|
190
|
+
return new TemplatePortal(this.templateRef, this.viewContainerRef, null, Injector.create({
|
|
191
|
+
providers: [{ provide: POPOVER_TRIGGER, useValue: this }],
|
|
192
|
+
parent: this.injector,
|
|
193
|
+
}));
|
|
194
|
+
}
|
|
195
|
+
return null;
|
|
196
|
+
}
|
|
197
|
+
getOverlayPositionStrategy() {
|
|
198
|
+
const placement = this.placement || 'bottom';
|
|
199
|
+
const hasHorizontallyCenteredAlignment = !placement.includes('start') && !placement.includes('end');
|
|
200
|
+
return (this.cdkOverlay
|
|
201
|
+
.position()
|
|
202
|
+
.flexibleConnectedTo(this.elementRef)
|
|
203
|
+
.withLockedPosition()
|
|
204
|
+
.withGrowAfterOpen()
|
|
205
|
+
/**
|
|
206
|
+
* Disabling pushing, to fix an issue in FlexibleConnectedPositionStrategy where the
|
|
207
|
+
* overlay's bottom grows past the top of the trigger element (aka origin).
|
|
208
|
+
* I.e., when the overlay is supposed to be placed above the trigger element, it can
|
|
209
|
+
* grow in height and cover the trigger element. This is more of an issue when the trigger
|
|
210
|
+
* element remains interactive after the overlay is opened, such as in searchable select.
|
|
211
|
+
* Note that this is not the case when the overlay is placed above the trigger element.
|
|
212
|
+
* In that case the overlay will not eat up all available viewport height, and is sized in
|
|
213
|
+
* a way that respects the preferred placement above the trigger element.
|
|
214
|
+
* Disabling push is not the ideal solution but prevents the issue.
|
|
215
|
+
* push is disabled only for overlays where the horizontal alignment is anchored to left
|
|
216
|
+
* or right of the trigger element, based on the fair assumption that the connected
|
|
217
|
+
* element is itself within the viewport, and we won't need to push the overlay horizontally
|
|
218
|
+
* to have it within the viewport. It should also be ok not to push vertically, since we
|
|
219
|
+
* allow for vertical flipping if needed.
|
|
220
|
+
**/
|
|
221
|
+
.withPush(hasHorizontallyCenteredAlignment)
|
|
222
|
+
.withPositions([
|
|
223
|
+
toConnectedPosition(placement),
|
|
224
|
+
toConnectedPosition(flip(placement)),
|
|
225
|
+
])
|
|
226
|
+
.withViewportMargin(placement.includes('end') ? 0 : 6));
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
PopoverTriggerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: PopoverTriggerDirective, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive });
|
|
230
|
+
PopoverTriggerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.0", type: PopoverTriggerDirective, selector: "[spPopoverTriggerFor]", inputs: { placement: ["spPopoverPlacement", "placement"], templateRef: ["spPopoverTriggerFor", "templateRef"], nonModal: ["spPopoverNonModal", "nonModal"], openOnPressStart: ["spPopoverTriggerOpenOnPressStart", "openOnPressStart"], closeOnScroll: ["spPopoverTriggerCloseOnScroll", "closeOnScroll"], disabled: ["spPopoverTriggerDisabled", "disabled"] }, outputs: { opened: "spPopoverTriggerOpened", closed: "spPopoverTriggerClosed" }, host: { listeners: { "mousedown": "handleMousedown($event)", "click": "handleClick($event)", "keydown.tab": "handleTab()", "focusout": "onFocusout($event)", "keydown": "handleKeyDown($event)" }, properties: { "class.is-active": "isOpen()", "attr.aria-expanded": "isOpen()", "attr.aria-controls": "this.getPopoverId" } }, providers: [
|
|
231
|
+
{ provide: POPOVER_TRIGGER, useExisting: PopoverTriggerDirective },
|
|
232
|
+
], exportAs: ["spPopoverTrigger"], ngImport: i0 });
|
|
233
|
+
__decorate([
|
|
234
|
+
CoerceBoolean
|
|
235
|
+
], PopoverTriggerDirective.prototype, "nonModal", void 0);
|
|
236
|
+
__decorate([
|
|
237
|
+
CoerceBoolean
|
|
238
|
+
], PopoverTriggerDirective.prototype, "openOnPressStart", void 0);
|
|
239
|
+
__decorate([
|
|
240
|
+
CoerceBoolean
|
|
241
|
+
], PopoverTriggerDirective.prototype, "closeOnScroll", void 0);
|
|
242
|
+
__decorate([
|
|
243
|
+
CoerceBoolean
|
|
244
|
+
], PopoverTriggerDirective.prototype, "disabled", void 0);
|
|
245
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: PopoverTriggerDirective, decorators: [{
|
|
246
|
+
type: Directive,
|
|
247
|
+
args: [{
|
|
248
|
+
selector: '[spPopoverTriggerFor]',
|
|
249
|
+
providers: [
|
|
250
|
+
{ provide: POPOVER_TRIGGER, useExisting: PopoverTriggerDirective },
|
|
251
|
+
],
|
|
252
|
+
host: {
|
|
253
|
+
'[class.is-active]': 'isOpen()',
|
|
254
|
+
'[attr.aria-expanded]': 'isOpen()',
|
|
255
|
+
},
|
|
256
|
+
exportAs: 'spPopoverTrigger',
|
|
257
|
+
}]
|
|
258
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }, { type: i0.Injector }]; }, propDecorators: { placement: [{
|
|
259
|
+
type: Input,
|
|
260
|
+
args: ['spPopoverPlacement']
|
|
261
|
+
}], templateRef: [{
|
|
262
|
+
type: Input,
|
|
263
|
+
args: ['spPopoverTriggerFor']
|
|
264
|
+
}], nonModal: [{
|
|
265
|
+
type: Input,
|
|
266
|
+
args: ['spPopoverNonModal']
|
|
267
|
+
}], openOnPressStart: [{
|
|
268
|
+
type: Input,
|
|
269
|
+
args: ['spPopoverTriggerOpenOnPressStart']
|
|
270
|
+
}], closeOnScroll: [{
|
|
271
|
+
type: Input,
|
|
272
|
+
args: ['spPopoverTriggerCloseOnScroll']
|
|
273
|
+
}], disabled: [{
|
|
274
|
+
type: Input,
|
|
275
|
+
args: ['spPopoverTriggerDisabled']
|
|
276
|
+
}], opened: [{
|
|
277
|
+
type: Output,
|
|
278
|
+
args: ['spPopoverTriggerOpened']
|
|
279
|
+
}], closed: [{
|
|
280
|
+
type: Output,
|
|
281
|
+
args: ['spPopoverTriggerClosed']
|
|
282
|
+
}], getPopoverId: [{
|
|
283
|
+
type: HostBinding,
|
|
284
|
+
args: ['attr.aria-controls']
|
|
285
|
+
}], handleMousedown: [{
|
|
286
|
+
type: HostListener,
|
|
287
|
+
args: ['mousedown', ['$event']]
|
|
288
|
+
}], handleClick: [{
|
|
289
|
+
type: HostListener,
|
|
290
|
+
args: ['click', ['$event']]
|
|
291
|
+
}], handleTab: [{
|
|
292
|
+
type: HostListener,
|
|
293
|
+
args: ['keydown.tab']
|
|
294
|
+
}], onFocusout: [{
|
|
295
|
+
type: HostListener,
|
|
296
|
+
args: ['focusout', ['$event']]
|
|
297
|
+
}], handleKeyDown: [{
|
|
298
|
+
type: HostListener,
|
|
299
|
+
args: ['keydown', ['$event']]
|
|
300
|
+
}] } });
|
|
301
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci10cmlnZ2VyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvcG9wb3Zlci9zcmMvcG9wb3Zlci10cmlnZ2VyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUdMLGFBQWEsR0FFZCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLGNBQWMsRUFDZCxRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sR0FHUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLElBQUksRUFBYSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTlFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7O0FBUXRFLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxJQUFJLGNBQWMsQ0FDL0Msb0JBQW9CLENBQ3JCLENBQUM7QUFFRiw2RUFBNkU7QUFhN0UsTUFBTSxPQUFPLHVCQUF1QjtJQXFEbEMsSUFDVyxZQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQzNFLENBQUM7SUFFRCxZQUNVLGlCQUFvQyxFQUNwQyxVQUFtQixFQUNuQixnQkFBa0MsRUFDbkMsVUFBbUMsRUFDbEMsUUFBa0I7UUFKbEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxlQUFVLEdBQVYsVUFBVSxDQUFTO1FBQ25CLHFCQUFn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QUFLO3VCQUFDLHFCQUFxQjtnQkFRNUIsUUFBUTtzQkFGUCxLQUFLO3VCQUFDLG1CQUFtQjtnQkFTMUIsZ0JBQWdCO3NCQUZmLEtBQUs7dUJBQUMsa0NBQWtDO2dCQVV6QyxhQUFhO3NCQUZaLEtBQUs7dUJBQUMsK0JBQStCO2dCQVV0QyxRQUFRO3NCQUZQLEtBQUs7dUJBQUMsMEJBQTBCO2dCQU14QixNQUFNO3NCQURkLE1BQU07dUJBQUMsd0JBQXdCO2dCQUt2QixNQUFNO3NCQURkLE1BQU07dUJBQUMsd0JBQXdCO2dCQVlyQixZQUFZO3NCQUR0QixXQUFXO3VCQUFDLG9CQUFvQjtnQkF5RXpCLGVBQWU7c0JBRHRCLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXdCN0IsV0FBVztzQkFEbEIsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBY3pCLFNBQVM7c0JBRGhCLFlBQVk7dUJBQUMsYUFBYTtnQkFjbkIsVUFBVTtzQkFEakIsWUFBWTt1QkFBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBMkI1QixhQUFhO3NCQURwQixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSxcbiAgT3ZlcmxheSxcbiAgT3ZlcmxheUNvbmZpZyxcbiAgT3ZlcmxheVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBtZXJnZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZmxpcCwgUGxhY2VtZW50LCB0b0Nvbm5lY3RlZFBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vY29tbW9uL3BsYWNlbWVudCc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgQ29lcmNlQm9vbGVhbiB9IGZyb20gJy4uLy4uL2NvbW1vbi9jb2VyY2UtYm9vbGVhbi5kZWNvcmF0b3InO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBvcG92ZXJUcmlnZ2VyIHtcbiAgdG9nZ2xlKCk6IHZvaWQ7XG4gIG9wZW4oKTogdm9pZDtcbiAgY2xvc2UoKTogdm9pZDtcbiAgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG59XG5leHBvcnQgY29uc3QgUE9QT1ZFUl9UUklHR0VSID0gbmV3IEluamVjdGlvblRva2VuPFBvcG92ZXJUcmlnZ2VyPihcbiAgJ3NwLXBvcG92ZXItdHJpZ2dlcidcbik7XG5cbi8vIFRPRE8oVUMtMjcyOCk6IGltcHJvdmUgZXZlbnQgaGFuZGxpbmcgd2hlbiByZXVzYWJsZSBwcmVzcyB1dGlsaXR5IGlzIGFkZGVkXG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tzcFBvcG92ZXJUcmlnZ2VyRm9yXScsXG4gIHByb3ZpZGVyczogW1xuICAgIHsgcHJvdmlkZTogUE9QT1ZFUl9UUklHR0VSLCB1c2VFeGlzdGluZzogUG9wb3ZlclRyaWdnZXJEaXJlY3RpdmUgfSxcbiAgXSxcbiAgaG9zdDoge1xuICAgICdbY2xhc3MuaXMtYWN0aXZlXSc6ICdpc09wZW4oKScsXG4gICAgJ1thdHRyLmFyaWEtZXhwYW5kZWRdJzogJ2lzT3BlbigpJyxcbiAgfSxcbiAgZXhwb3J0QXM6ICdzcFBvcG92ZXJUcmlnZ2VyJyxcbn0pXG5leHBvcnQgY2xhc3MgUG9wb3ZlclRyaWdnZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBQb3BvdmVyVHJpZ2dlciB7XG4gIEBJbnB1dCgnc3BQb3BvdmVyUGxhY2VtZW50JylcbiAgcHVibGljIHBsYWNlbWVudDogUGxhY2VtZW50ID0gJ2JvdHRvbSc7XG5cbiAgQElucHV0KCdzcFBvcG92ZXJUcmlnZ2VyRm9yJylcbiAgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHBvcG92ZXIgc2hvdWxkIG5vdCBibG9jayBpbnRlcmFjdGlvbiB3aXRoIGJhY2tncm91bmQuXG4gICAqL1xuICBASW5wdXQoJ3NwUG9wb3Zlck5vbk1vZGFsJylcbiAgQENvZXJjZUJvb2xlYW5cbiAgbm9uTW9kYWw6IEJvb2xlYW5JbnB1dCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBwb3BvdmVyIHNob3VsZCBiZSBvcGVuZWQgb24gcHJlc3Mgc3RhcnQuXG4gICAqL1xuICBASW5wdXQoJ3NwUG9wb3ZlclRyaWdnZXJPcGVuT25QcmVzc1N0YXJ0JylcbiAgQENvZXJjZUJvb2xlYW5cbiAgb3Blbk9uUHJlc3NTdGFydDogQm9vbGVhbklucHV0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHBvcG92ZXIgc2hvdWxkIGJlIGNsb3NlZCB3aGVuIHRoZSBjb250YWluZXIgaXMgc2Nyb2xsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoJ3NwUG9wb3ZlclRyaWdnZXJDbG9zZU9uU2Nyb2xsJylcbiAgQENvZXJjZUJvb2xlYW5cbiAgY2xvc2VPblNjcm9sbDogQm9vbGVhbklucHV0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIENhbiBiZSB1c2VkIHRvIGRpc2FibGUgdG9nZ2xpbmcgcG9wb3ZlciBvbiBjbGlja3MuIFVzZWZ1bCBpZiBgc3BQb3BvdmVyVHJpZ2dlcmBcbiAgICogaXMgYXBwbGllZCBvbiBhbiBlbGVtZW50IHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBgZGlzYWJsZWRgIHByb3BlcnR5LlxuICAgKi9cbiAgQElucHV0KCdzcFBvcG92ZXJUcmlnZ2VyRGlzYWJsZWQnKVxuICBAQ29lcmNlQm9vbGVhblxuICBkaXNhYmxlZDogQm9vbGVhbklucHV0ID0gZmFsc2U7XG5cbiAgLyoqIEVtaXRzIHdoZW4gdGhlIGF0dGFjaGVkIHBvcG92ZXIgaXMgcmVxdWVzdGVkIHRvIG9wZW4gKi9cbiAgQE91dHB1dCgnc3BQb3BvdmVyVHJpZ2dlck9wZW5lZCcpXG4gIHJlYWRvbmx5IG9wZW5lZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKiBFbWl0cyB3aGVuIHRoZSBhdHRhY2hlZCBwb3BvdmVyIGlzIHJlcXVlc3RlZCB0byBjbG9zZSAqL1xuICBAT3V0cHV0KCdzcFBvcG92ZXJUcmlnZ2VyQ2xvc2VkJylcbiAgcmVhZG9ubHkgY2xvc2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqIEVtaXRzIHdoZW4gdGhpcyB0cmlnZ2VyIGlzIGRlc3Ryb3llZC4gKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlc3Ryb3llZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgLyoqIEEgcmVmZXJlbmNlIHRvIHRoZSBvdmVybGF5IHdoaWNoIG1hbmFnZXMgdGhlIHRyaWdnZXJlZCBtZW51ICovXG4gIHByb3RlY3RlZCBvdmVybGF5UmVmOiBPdmVybGF5UmVmIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBpc0JlaW5nUHJlc3NlZCA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWNvbnRyb2xzJylcbiAgcHVibGljIGdldCBnZXRQb3BvdmVySWQoKSB7XG4gICAgcmV0dXJuIHRoaXMub3ZlcmxheVJlZj8uaG9zdEVsZW1lbnQucXVlcnlTZWxlY3RvcignW3JvbGU9XCJkaWFsb2dcIl0nKT8uaWQ7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGNka092ZXJsYXk6IE92ZXJsYXksXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvclxuICApIHt9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95T3ZlcmxheSgpO1xuXG4gICAgdGhpcy5kZXN0cm95ZWQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveWVkLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKiogVG9nZ2xlIHRoZSBhdHRhY2hlZCBwb3BvdmVyLiAqL1xuICB0b2dnbGUoKSB7XG4gICAgdGhpcy5pc09wZW4oKSA/IHRoaXMuY2xvc2UoKSA6IHRoaXMub3BlbigpO1xuICB9XG5cbiAgLyoqIE9wZW4gdGhlIGF0dGFjaGVkIHBvcG92ZXIuICovXG4gIG9wZW4oKSB7XG4gICAgaWYgKCF0aGlzLmlzT3BlbigpICYmIHRoaXMudGVtcGxhdGVSZWYgIT0gbnVsbCAmJiAhdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5vcGVuZWQubmV4dCgpO1xuICAgICAgaWYgKCF0aGlzLm92ZXJsYXlSZWYpIHtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5jZGtPdmVybGF5LmNyZWF0ZSh0aGlzLmdldE92ZXJsYXlDb25maWcoKSk7XG4gICAgICAgIHRoaXMub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvblN0cmF0ZWd5KFxuICAgICAgICAgIHRoaXMuZ2V0T3ZlcmxheVBvc2l0aW9uU3RyYXRlZ3koKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHRoaXMuZ2V0Q29udGVudFBvcnRhbCgpKTtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmLmRldGFjaG1lbnRzKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNsb3NlZC5uZXh0KCk7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWZcbiAgICAgICAgICAub3V0c2lkZVBvaW50ZXJFdmVudHMoKVxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbChtZXJnZSh0aGlzLmNsb3NlZCwgdGhpcy5kZXN0cm95ZWQpKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAvLyBJZiBwb3BvdmVyIGlzIG9wZW5lZCBvbiBwcmVzcyBzdGFydCwgYW4gb3V0c2lkZSBwb2ludGVyIGV2ZW50XG4gICAgICAgICAgICAgIC8vIGlzIGVtaXR0ZWQgYXMgdGhlIG1vdXNlIGlzIGJlaW5nIHJlbGVhc2VkLCB3aGljaCB3b3VsZCBpbW1lZGlhdGVseVxuICAgICAgICAgICAgICAvLyBjbG9zZSB0aGUgcG9wb3Zlci4gUHJvYmFibHkgYSBidWcgaW4gQGFuZ3VsYXIvY2RrL292ZXJsYXkuXG4gICAgICAgICAgICAgICEodGhpcy5vcGVuT25QcmVzc1N0YXJ0ICYmIHRoaXMuaXNCZWluZ1ByZXNzZWQpICYmXG4gICAgICAgICAgICAgICF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQgYXMgRWxlbWVudClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHRoaXMuZ2V0Q29udGVudFBvcnRhbCgpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDbG9zZSB0aGUgb3BlbmVkIHBvcG92ZXIuICovXG4gIGNsb3NlKCkge1xuICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgICB0aGlzLm92ZXJsYXlSZWY/LmRldGFjaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBwb3BvdmVyIGlzIG9wZW4uICovXG4gIGlzT3BlbigpIHtcbiAgICByZXR1cm4gISF0aGlzLm92ZXJsYXlSZWY/Lmhhc0F0dGFjaGVkKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCddKVxuICBwcml2YXRlIGhhbmRsZU1vdXNlZG93bihldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuaXNCZWluZ1ByZXNzZWQgPSB0cnVlO1xuICAgIGlmICh0aGlzLm9wZW5PblByZXNzU3RhcnQpIHtcbiAgICAgIGlmIChldmVudC5jdXJyZW50VGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBmb2N1cyB0aGUgdHJpZ2dlciBiZWZvcmUgb3BlbmluZy4gT3RoZXJ3aXNlLCB0aGUgZm9jdXMgcmVzdG9yYXRpb24gbG9naWMgd2lsbFxuICAgICAgICAvLyBiZSBtZXNzZWQgdXAsIHNpbmNlIHRoZSB3cm9uZyBlbGVtZW50IHdvdWxkIGhhdmUgdGhlIGZvY3VzIHdoZW4gdGhlIHBvcG92ZXIgaXMgbW91bnRlZC5cbiAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5mb2N1cygpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICdtb3VzZXVwJyxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5pc0JlaW5nUHJlc3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IG9uY2U6IHRydWUgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy50b2dnbGUoKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIHByaXZhdGUgaGFuZGxlQ2xpY2soKSB7XG4gICAgaWYgKCF0aGlzLm9wZW5PblByZXNzU3RhcnQpIHtcbiAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoaWxlIG9uRm9jdXNvdXQgdGFrZXMgY2FyZSBvZiBjbG9zaW5nIHRoZSBwb3BvdmVyIHdoZW4gZm9jdXMgZ29lcyBvdXQsIGluIHRoZSByYXJlIGNhc2VzXG4gICAqIHRoYXQgdGhlcmUgaXMgbm8gbW9yZSBmb2N1c2FibGUgZWxlbWVudCBiZXR3ZWVuIHRoZSB0cmlnZ2VyIGFuZCB0aGUgcG9wb3ZlciwgdGhlIGZvY3VzIGNhblxuICAgKiBnbyB0byB0aGUgcG9wb3ZlciBvbiBwcmVzc2luZyBgVGFiYC4gQnV0IHRoZSBwb3BvdmVyIHNob3VsZCBiZSBjbG9zZWQgd2hlbiB0YWJiaW5nIG9uIHRoZVxuICAgKiB0cmlnZ2VyLlxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi50YWInKVxuICBwcml2YXRlIGhhbmRsZVRhYigpIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICAvKipcbiAgICogSW4gc29tZSB1c2UgY2FzZXMgKGUuZy4gaW4gc2VhcmNoYWJsZSBzZWxlY3QpIHBvcG92ZXIgdHJpZ2dlciBncmFicyB0aGUgZm9jdXMsIHJpZ2h0IGFmdGVyXG4gICAqIHRoZSBwb3BvdmVyIGlzIG9wZW5lZC4gVGhhdCByZXF1aXJlcyBwb3BvdmVyIHRyaWdnZXIgdG8gZGV0ZWN0IHdoZW4gZm9jdXMgZ29lcyBvdXQgb2YgaXRcbiAgICogYW5kIGNsb3NlIHRoZSBwb3BvdmVyLlxuICAgKiBOb3RlOiB3ZSBjYW4ndCB1c2UgYGJsdXJgIGV2ZW50IHNpbmNlIGl0IHdvbid0IGJ1YmJsZSB1cCwgYW5kIHRoZSBmb2N1cyBjYW4gYmUgb24gYW4gZWxlbWVudFxuICAgKiBpbnNpZGUgdGhlIHRyaWdnZXIsIGJ1dCBub3QgdGhlIHRyaWdnZXIgaXRzZWxmLlxuICAgKlxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignZm9jdXNvdXQnLCBbJyRldmVudCddKVxuICBwcml2YXRlIG9uRm9jdXNvdXQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBpZiAoXG4gICAgICBldmVudC5yZWxhdGVkVGFyZ2V0ID09PSBudWxsICYmXG4gICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBldmVudC50YXJnZXRcbiAgICApIHtcbiAgICAgIC8vIFRoaXMgaGFwcGVucyBvbiB0YWIgc3dpdGNoLCB3aXRob3V0IGZvY3VzIGJlaW5nIGFjdHVhbGx5IG1vdmVkLlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmb2N1c1JlY2VpdmluZ0VsZW1lbnQgPVxuICAgICAgZXZlbnQucmVsYXRlZFRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQgPyBldmVudC5yZWxhdGVkVGFyZ2V0IDogbnVsbDtcbiAgICBpZiAoXG4gICAgICAvLyBmb2N1cyBpcyBnb2luZyBub3doZXJlXG4gICAgICAhZm9jdXNSZWNlaXZpbmdFbGVtZW50IHx8XG4gICAgICAvLyBmb2N1cyBpcyBnb2luZyBhbnl3aGVyZSBvdXRzaWRlIHBvcG92ZXIgYW5kIHBvcG92ZXIgdHJpZ2dlclxuICAgICAgIShcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50Py5jb250YWlucyhmb2N1c1JlY2VpdmluZ0VsZW1lbnQpIHx8XG4gICAgICAgIC8vIFRoaXMgaXMgdG8gbm90IGhhdmUgdGhlIHBvcG92ZXIgY2xvc2VkIGFzIHNvb24gYXMgbW91c2UgaXMgZG93biBvbiBzb21ldGhpbmcgaW5zaWRlIHRoZVxuICAgICAgICAvLyBwb3BvdmVyLCBpZiB0aGUgZm9jdXMgaXMgY3VycmVudGx5IG9uIHRoZSB0cmlnZ2VyXG4gICAgICAgIHRoaXMub3ZlcmxheVJlZj8ub3ZlcmxheUVsZW1lbnQ/LmNvbnRhaW5zKGZvY3VzUmVjZWl2aW5nRWxlbWVudClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgcHJpdmF0ZSBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKFxuICAgICAgZXZlbnQudGFyZ2V0ID09PSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCAmJlxuICAgICAgISh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KSAmJlxuICAgICAgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICcgJylcbiAgICApIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGVzdHJveU92ZXJsYXkoKSB7XG4gICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xuICAgICAgdGhpcy5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMub3ZlcmxheVJlZiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqIEdldCB0aGUgY29uZmlndXJhdGlvbiBvYmplY3QgdXNlZCB0byBjcmVhdGUgdGhlIG92ZXJsYXkuICovXG4gIHByaXZhdGUgZ2V0T3ZlcmxheUNvbmZpZygpIHtcbiAgICByZXR1cm4gbmV3IE92ZXJsYXlDb25maWcoe1xuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMubm9uTW9kYWxcbiAgICAgICAgPyB0aGlzLmNsb3NlT25TY3JvbGxcbiAgICAgICAgICA/IHRoaXMuY2RrT3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmNsb3NlKClcbiAgICAgICAgICA6IHRoaXMuY2RrT3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKVxuICAgICAgICA6IHRoaXMuY2RrT3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmJsb2NrKCksIC8vIHRvIG1hdGNoIHdoYXQgd2UgaGF2ZSBpbiByZWFjdFxuXG4gICAgICAvLyBJbmNsdWRpbmcgYSB0cmFuc3BhcmVudCBiYWNrZHJvcCBhY2NvcmRpbmcgdG8gdGhlIGxhdGVzdCBkZWNpc2lvbiBvZiBtYWtpbmcgcG9wb3ZlcnMgbW9kYWwuXG4gICAgICBoYXNCYWNrZHJvcDogIXRoaXMubm9uTW9kYWwsXG4gICAgICBiYWNrZHJvcENsYXNzOiAnY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AnLFxuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgZ2V0Q29udGVudFBvcnRhbCgpOiBUZW1wbGF0ZVBvcnRhbCB8IG51bGwge1xuICAgIGlmICh0aGlzLnRlbXBsYXRlUmVmKSB7XG4gICAgICByZXR1cm4gbmV3IFRlbXBsYXRlUG9ydGFsKFxuICAgICAgICB0aGlzLnRlbXBsYXRlUmVmLFxuICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIG51bGwsXG4gICAgICAgIEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBQT1BPVkVSX1RSSUdHRVIsIHVzZVZhbHVlOiB0aGlzIH1dLFxuICAgICAgICAgIHBhcmVudDogdGhpcy5pbmplY3RvcixcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPdmVybGF5UG9zaXRpb25TdHJhdGVneSgpOiBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3kge1xuICAgIGNvbnN0IHBsYWNlbWVudCA9IHRoaXMucGxhY2VtZW50IHx8ICdib3R0b20nO1xuICAgIGNvbnN0IGhhc0hvcml6b250YWxseUNlbnRlcmVkQWxpZ25tZW50ID1cbiAgICAgICFwbGFjZW1lbnQuaW5jbHVkZXMoJ3N0YXJ0JykgJiYgIXBsYWNlbWVudC5pbmNsdWRlcygnZW5kJyk7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY2RrT3ZlcmxheVxuICAgICAgICAucG9zaXRpb24oKVxuICAgICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLmVsZW1lbnRSZWYpXG4gICAgICAgIC53aXRoTG9ja2VkUG9zaXRpb24oKVxuICAgICAgICAud2l0aEdyb3dBZnRlck9wZW4oKVxuICAgICAgICAvKipcbiAgICAgICAgICogRGlzYWJsaW5nIHB1c2hpbmcsIHRvIGZpeCBhbiBpc3N1ZSBpbiBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3kgd2hlcmUgdGhlXG4gICAgICAgICAqIG92ZXJsYXkncyBib3R0b20gZ3Jvd3MgcGFzdCB0aGUgdG9wIG9mIHRoZSB0cmlnZ2VyIGVsZW1lbnQgKGFrYSBvcmlnaW4pLlxuICAgICAgICAgKiBJLmUuLCB3aGVuIHRoZSBvdmVybGF5IGlzIHN1cHBvc2VkIHRvIGJlIHBsYWNlZCBhYm92ZSB0aGUgdHJpZ2dlciBlbGVtZW50LCBpdCBjYW5cbiAgICAgICAgICogZ3JvdyBpbiBoZWlnaHQgYW5kIGNvdmVyIHRoZSB0cmlnZ2VyIGVsZW1lbnQuIFRoaXMgaXMgbW9yZSBvZiBhbiBpc3N1ZSB3aGVuIHRoZSB0cmlnZ2VyXG4gICAgICAgICAqIGVsZW1lbnQgcmVtYWlucyBpbnRlcmFjdGl2ZSBhZnRlciB0aGUgb3ZlcmxheSBpcyBvcGVuZWQsIHN1Y2ggYXMgaW4gc2VhcmNoYWJsZSBzZWxlY3QuXG4gICAgICAgICAqIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCB0aGUgY2FzZSB3aGVuIHRoZSBvdmVybGF5IGlzIHBsYWNlZCBhYm92ZSB0aGUgdHJpZ2dlciBlbGVtZW50LlxuICAgICAgICAgKiBJbiB0aGF0IGNhc2UgdGhlIG92ZXJsYXkgd2lsbCBub3QgZWF0IHVwIGFsbCBhdmFpbGFibGUgdmlld3BvcnQgaGVpZ2h0LCBhbmQgaXMgc2l6ZWQgaW5cbiAgICAgICAgICogYSB3YXkgdGhhdCByZXNwZWN0cyB0aGUgcHJlZmVycmVkIHBsYWNlbWVudCBhYm92ZSB0aGUgdHJpZ2dlciBlbGVtZW50LlxuICAgICAgICAgKiBEaXNhYmxpbmcgcHVzaCBpcyBub3QgdGhlIGlkZWFsIHNvbHV0aW9uIGJ1dCBwcmV2ZW50cyB0aGUgaXNzdWUuXG4gICAgICAgICAqIHB1c2ggaXMgZGlzYWJsZWQgb25seSBmb3Igb3ZlcmxheXMgd2hlcmUgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IGlzIGFuY2hvcmVkIHRvIGxlZnRcbiAgICAgICAgICogb3IgcmlnaHQgb2YgdGhlIHRyaWdnZXIgZWxlbWVudCwgYmFzZWQgb24gdGhlIGZhaXIgYXNzdW1wdGlvbiB0aGF0IHRoZSBjb25uZWN0ZWRcbiAgICAgICAgICogZWxlbWVudCBpcyBpdHNlbGYgd2l0aGluIHRoZSB2aWV3cG9ydCwgYW5kIHdlIHdvbid0IG5lZWQgdG8gcHVzaCB0aGUgb3ZlcmxheSBob3Jpem9udGFsbHlcbiAgICAgICAgICogdG8gaGF2ZSBpdCB3aXRoaW4gdGhlIHZpZXdwb3J0LiBJdCBzaG91bGQgYWxzbyBiZSBvayBub3QgdG8gcHVzaCB2ZXJ0aWNhbGx5LCBzaW5jZSB3ZVxuICAgICAgICAgKiBhbGxvdyBmb3IgdmVydGljYWwgZmxpcHBpbmcgaWYgbmVlZGVkLlxuICAgICAgICAgKiovXG4gICAgICAgIC53aXRoUHVzaChoYXNIb3Jpem9udGFsbHlDZW50ZXJlZEFsaWdubWVudClcbiAgICAgICAgLndpdGhQb3NpdGlvbnMoW1xuICAgICAgICAgIHRvQ29ubmVjdGVkUG9zaXRpb24ocGxhY2VtZW50KSxcbiAgICAgICAgICB0b0Nvbm5lY3RlZFBvc2l0aW9uKGZsaXAocGxhY2VtZW50KSksXG4gICAgICAgIF0pXG4gICAgICAgIC53aXRoVmlld3BvcnRNYXJnaW4ocGxhY2VtZW50LmluY2x1ZGVzKCdlbmQnKSA/IDAgOiA2KVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { Component, ContentChild, ElementRef, HostListener, Inject, Input, Optional, ViewChild, } from '@angular/core';
|
|
3
|
+
import { hasModifierKey } from '@angular/cdk/keycodes';
|
|
4
|
+
import { ThemeCheckDirective } from '../../theme/src/theme-check.directive';
|
|
5
|
+
import { CoerceBoolean } from '../../common/coerce-boolean.decorator';
|
|
6
|
+
import { POPOVER_TRIGGER } from './popover-trigger.directive';
|
|
7
|
+
import { PopoverTitleDirective } from './popover-title.directive';
|
|
8
|
+
import { UseComponentStylesOnHost } from '../../common/sapphire-view-encapsulation';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "../../theme/src/theme-check.directive";
|
|
11
|
+
import * as i2 from "../../common/sapphire-view-encapsulation";
|
|
12
|
+
import * as i3 from "@angular/cdk/a11y";
|
|
13
|
+
/**
|
|
14
|
+
* A generic popover component which lets you render arbitrary
|
|
15
|
+
* content in a popover overlay which is linked to a trigger, and is accessible
|
|
16
|
+
* as
|
|
17
|
+
* [dialog](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/dialog_role).
|
|
18
|
+
*/
|
|
19
|
+
export class PopoverComponent {
|
|
20
|
+
constructor(trigger) {
|
|
21
|
+
this.trigger = trigger;
|
|
22
|
+
this.ID = `sp-popover-${Math.floor(Math.random() * 1000000000)}`;
|
|
23
|
+
/**
|
|
24
|
+
* Keeps track of if the content is focused
|
|
25
|
+
*/
|
|
26
|
+
this.contentFocused = false;
|
|
27
|
+
}
|
|
28
|
+
ngAfterViewInit() {
|
|
29
|
+
if (!this.contentFocused) {
|
|
30
|
+
this.contentWrapper?.nativeElement.focus();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
handleEscape(event) {
|
|
34
|
+
if (!hasModifierKey(event)) {
|
|
35
|
+
event.preventDefault();
|
|
36
|
+
this.trigger?.close();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
_contentFocusChanged(origin) {
|
|
40
|
+
this.contentFocused = origin != null;
|
|
41
|
+
if (!this.contentFocused) {
|
|
42
|
+
// cdkFocusChange doesn't give access to the native event, so we can't figure out where the
|
|
43
|
+
// focus is going. So we asynchronously check if the focus is outside the trigger and close
|
|
44
|
+
// in that case.
|
|
45
|
+
setTimeout(() => {
|
|
46
|
+
if (!this.trigger?.elementRef.nativeElement.contains(document.activeElement)) {
|
|
47
|
+
this.trigger?.close();
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
PopoverComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: PopoverComponent, deps: [{ token: POPOVER_TRIGGER, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
54
|
+
PopoverComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.0", type: PopoverComponent, selector: "sp-popover", inputs: { noPadding: "noPadding", noMaxWidth: "noMaxWidth" }, host: { attributes: { "role": "presentation" }, listeners: { "keydown.Escape": "handleEscape($event)" }, properties: { "class.sapphire-popover": "true", "class.sapphire-popover--padded": "!noPadding", "class.sapphire-popover--max-width": "!noMaxWidth" } }, queries: [{ propertyName: "title", first: true, predicate: PopoverTitleDirective, descendants: true }], viewQueries: [{ propertyName: "contentWrapper", first: true, predicate: ["contentWrapper"], descendants: true, read: ElementRef }], hostDirectives: [{ directive: i1.ThemeCheckDirective }, { directive: i2.UseComponentStylesOnHost }], ngImport: i0, template: "<!--\nNOTE: cdkTrapFocus is required for cdkTrapFocusAutoCapture to work, which would be similar to\n <FocusScope autoFocus /> in react-aria. It does NOT prevent focus from going out of popover,\n which is good, as we want the popover to close on blur.\n -->\n<div\n #contentWrapper\n [id]=\"ID\"\n role=\"dialog\"\n tabindex=\"-1\"\n cdkMonitorSubtreeFocus\n cdkTrapFocus\n cdkTrapFocusAutoCapture\n class=\"dialog\"\n [attr.aria-labelledby]=\"title?.ID\"\n (cdkFocusChange)=\"_contentFocusChanged($event)\"\n>\n <ng-content></ng-content>\n</div>\n", styles: ["@keyframes fade-in{0%{opacity:0}to{opacity:1}}.sapphire-popover{box-sizing:border-box;background-color:var(--sapphire-popover-color-background);box-shadow:var(--sapphire-popover-shadow);animation:fade-in var(--sapphire-popover-time-transition) ease-in-out;border-radius:var(--sapphire-popover-size-radius);overflow:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.sapphire-popover--padded{padding:var(--sapphire-popover-size-spacing-padded)}.sapphire-popover--max-width{max-width:var(--sapphire-popover-size-max-width)}.dialog{outline:none}\n"], dependencies: [{ kind: "directive", type: i3.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: i3.CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }] });
|
|
55
|
+
__decorate([
|
|
56
|
+
CoerceBoolean
|
|
57
|
+
], PopoverComponent.prototype, "noPadding", void 0);
|
|
58
|
+
__decorate([
|
|
59
|
+
CoerceBoolean
|
|
60
|
+
], PopoverComponent.prototype, "noMaxWidth", void 0);
|
|
61
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: PopoverComponent, decorators: [{
|
|
62
|
+
type: Component,
|
|
63
|
+
args: [{ selector: 'sp-popover', host: {
|
|
64
|
+
'[class.sapphire-popover]': 'true',
|
|
65
|
+
'[class.sapphire-popover--padded]': '!noPadding',
|
|
66
|
+
'[class.sapphire-popover--max-width]': '!noMaxWidth',
|
|
67
|
+
role: 'presentation',
|
|
68
|
+
}, hostDirectives: [ThemeCheckDirective, UseComponentStylesOnHost], template: "<!--\nNOTE: cdkTrapFocus is required for cdkTrapFocusAutoCapture to work, which would be similar to\n <FocusScope autoFocus /> in react-aria. It does NOT prevent focus from going out of popover,\n which is good, as we want the popover to close on blur.\n -->\n<div\n #contentWrapper\n [id]=\"ID\"\n role=\"dialog\"\n tabindex=\"-1\"\n cdkMonitorSubtreeFocus\n cdkTrapFocus\n cdkTrapFocusAutoCapture\n class=\"dialog\"\n [attr.aria-labelledby]=\"title?.ID\"\n (cdkFocusChange)=\"_contentFocusChanged($event)\"\n>\n <ng-content></ng-content>\n</div>\n", styles: ["@keyframes fade-in{0%{opacity:0}to{opacity:1}}.sapphire-popover{box-sizing:border-box;background-color:var(--sapphire-popover-color-background);box-shadow:var(--sapphire-popover-shadow);animation:fade-in var(--sapphire-popover-time-transition) ease-in-out;border-radius:var(--sapphire-popover-size-radius);overflow:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.sapphire-popover--padded{padding:var(--sapphire-popover-size-spacing-padded)}.sapphire-popover--max-width{max-width:var(--sapphire-popover-size-max-width)}.dialog{outline:none}\n"] }]
|
|
69
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
70
|
+
type: Optional
|
|
71
|
+
}, {
|
|
72
|
+
type: Inject,
|
|
73
|
+
args: [POPOVER_TRIGGER]
|
|
74
|
+
}] }]; }, propDecorators: { noPadding: [{
|
|
75
|
+
type: Input
|
|
76
|
+
}], noMaxWidth: [{
|
|
77
|
+
type: Input
|
|
78
|
+
}], title: [{
|
|
79
|
+
type: ContentChild,
|
|
80
|
+
args: [PopoverTitleDirective]
|
|
81
|
+
}], contentWrapper: [{
|
|
82
|
+
type: ViewChild,
|
|
83
|
+
args: ['contentWrapper', { read: ElementRef }]
|
|
84
|
+
}], handleEscape: [{
|
|
85
|
+
type: HostListener,
|
|
86
|
+
args: ['keydown.Escape', ['$event']]
|
|
87
|
+
}] } });
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3BvcG92ZXIvc3JjL3BvcG92ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9wb3BvdmVyL3NyYy9wb3BvdmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsUUFBUSxFQUNSLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFJdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQWtCLE1BQU0sNkJBQTZCLENBQUM7QUFDOUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7O0FBRXBGOzs7OztHQUtHO0FBYUgsTUFBTSxPQUFPLGdCQUFnQjtJQXFCM0IsWUFDK0MsT0FBd0I7UUFBeEIsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7UUFSdkUsT0FBRSxHQUFXLGNBQWMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUVwRTs7V0FFRztRQUNLLG1CQUFjLEdBQUcsS0FBSyxDQUFDO0lBSTVCLENBQUM7SUFFSixlQUFlO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDNUM7SUFDSCxDQUFDO0lBR08sWUFBWSxDQUFDLEtBQW9CO1FBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7U0FDdkI7SUFDSCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsTUFBbUI7UUFDdEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLElBQUksSUFBSSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3hCLDJGQUEyRjtZQUMzRiwyRkFBMkY7WUFDM0YsZ0JBQWdCO1lBQ2hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFDRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQzlDLFFBQVEsQ0FBQyxhQUFhLENBQ3ZCLEVBQ0Q7b0JBQ0EsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztpQkFDdkI7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQzs7NkdBdkRVLGdCQUFnQixrQkFzQkwsZUFBZTtpR0F0QjFCLGdCQUFnQixvWkFTYixxQkFBcUIsNklBRUUsVUFBVSxrSUNsRGpELG1qQkFtQkE7QUR1QkU7SUFEQyxhQUFhO21EQUNVO0FBSXhCO0lBREMsYUFBYTtvREFDVzsyRkFQZCxnQkFBZ0I7a0JBWjVCLFNBQVM7K0JBQ0UsWUFBWSxRQUdoQjt3QkFDSiwwQkFBMEIsRUFBRSxNQUFNO3dCQUNsQyxrQ0FBa0MsRUFBRSxZQUFZO3dCQUNoRCxxQ0FBcUMsRUFBRSxhQUFhO3dCQUNwRCxJQUFJLEVBQUUsY0FBYztxQkFDckIsa0JBQ2UsQ0FBQyxtQkFBbUIsRUFBRSx3QkFBd0IsQ0FBQzs7MEJBd0I1RCxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGVBQWU7NENBbkJyQyxTQUFTO3NCQUZSLEtBQUs7Z0JBTU4sVUFBVTtzQkFGVCxLQUFLO2dCQUkrQixLQUFLO3NCQUF6QyxZQUFZO3VCQUFDLHFCQUFxQjtnQkFHM0IsY0FBYztzQkFEckIsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBcUJ6QyxZQUFZO3NCQURuQixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT3B0aW9uYWwsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBoYXNNb2RpZmllcktleSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBGb2N1c09yaWdpbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5cbmltcG9ydCB7IFRoZW1lQ2hlY2tEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi90aGVtZS9zcmMvdGhlbWUtY2hlY2suZGlyZWN0aXZlJztcbmltcG9ydCB7IENvZXJjZUJvb2xlYW4gfSBmcm9tICcuLi8uLi9jb21tb24vY29lcmNlLWJvb2xlYW4uZGVjb3JhdG9yJztcbmltcG9ydCB7IFBPUE9WRVJfVFJJR0dFUiwgUG9wb3ZlclRyaWdnZXIgfSBmcm9tICcuL3BvcG92ZXItdHJpZ2dlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUG9wb3ZlclRpdGxlRGlyZWN0aXZlIH0gZnJvbSAnLi9wb3BvdmVyLXRpdGxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBVc2VDb21wb25lbnRTdHlsZXNPbkhvc3QgfSBmcm9tICcuLi8uLi9jb21tb24vc2FwcGhpcmUtdmlldy1lbmNhcHN1bGF0aW9uJztcblxuLyoqXG4gKiBBIGdlbmVyaWMgcG9wb3ZlciBjb21wb25lbnQgd2hpY2ggbGV0cyB5b3UgcmVuZGVyIGFyYml0cmFyeVxuICogY29udGVudCBpbiBhIHBvcG92ZXIgb3ZlcmxheSB3aGljaCBpcyBsaW5rZWQgdG8gYSB0cmlnZ2VyLCBhbmQgaXMgYWNjZXNzaWJsZVxuICogYXNcbiAqIFtkaWFsb2ddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FjY2Vzc2liaWxpdHkvQVJJQS9Sb2xlcy9kaWFsb2dfcm9sZSkuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NwLXBvcG92ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vcG9wb3Zlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BvcG92ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgaG9zdDoge1xuICAgICdbY2xhc3Muc2FwcGhpcmUtcG9wb3Zlcl0nOiAndHJ1ZScsXG4gICAgJ1tjbGFzcy5zYXBwaGlyZS1wb3BvdmVyLS1wYWRkZWRdJzogJyFub1BhZGRpbmcnLFxuICAgICdbY2xhc3Muc2FwcGhpcmUtcG9wb3Zlci0tbWF4LXdpZHRoXSc6ICchbm9NYXhXaWR0aCcsXG4gICAgcm9sZTogJ3ByZXNlbnRhdGlvbicsXG4gIH0sXG4gIGhvc3REaXJlY3RpdmVzOiBbVGhlbWVDaGVja0RpcmVjdGl2ZSwgVXNlQ29tcG9uZW50U3R5bGVzT25Ib3N0XSxcbn0pXG5leHBvcnQgY2xhc3MgUG9wb3ZlckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKVxuICBAQ29lcmNlQm9vbGVhblxuICBub1BhZGRpbmc6IEJvb2xlYW5JbnB1dDtcblxuICBASW5wdXQoKVxuICBAQ29lcmNlQm9vbGVhblxuICBub01heFdpZHRoOiBCb29sZWFuSW5wdXQ7XG5cbiAgQENvbnRlbnRDaGlsZChQb3BvdmVyVGl0bGVEaXJlY3RpdmUpIHRpdGxlPzogUG9wb3ZlclRpdGxlRGlyZWN0aXZlO1xuXG4gIEBWaWV3Q2hpbGQoJ2NvbnRlbnRXcmFwcGVyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHByaXZhdGUgY29udGVudFdyYXBwZXI/OiBFbGVtZW50UmVmO1xuXG4gIElEOiBzdHJpbmcgPSBgc3AtcG9wb3Zlci0ke01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMDApfWA7XG5cbiAgLyoqXG4gICAqIEtlZXBzIHRyYWNrIG9mIGlmIHRoZSBjb250ZW50IGlzIGZvY3VzZWRcbiAgICovXG4gIHByaXZhdGUgY29udGVudEZvY3VzZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFBPUE9WRVJfVFJJR0dFUikgcHJpdmF0ZSB0cmlnZ2VyPzogUG9wb3ZlclRyaWdnZXJcbiAgKSB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29udGVudEZvY3VzZWQpIHtcbiAgICAgIHRoaXMuY29udGVudFdyYXBwZXI/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLkVzY2FwZScsIFsnJGV2ZW50J10pXG4gIHByaXZhdGUgaGFuZGxlRXNjYXBlKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKCFoYXNNb2RpZmllcktleShldmVudCkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnRyaWdnZXI/LmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgX2NvbnRlbnRGb2N1c0NoYW5nZWQob3JpZ2luOiBGb2N1c09yaWdpbikge1xuICAgIHRoaXMuY29udGVudEZvY3VzZWQgPSBvcmlnaW4gIT0gbnVsbDtcbiAgICBpZiAoIXRoaXMuY29udGVudEZvY3VzZWQpIHtcbiAgICAgIC8vIGNka0ZvY3VzQ2hhbmdlIGRvZXNuJ3QgZ2l2ZSBhY2Nlc3MgdG8gdGhlIG5hdGl2ZSBldmVudCwgc28gd2UgY2FuJ3QgZmlndXJlIG91dCB3aGVyZSB0aGVcbiAgICAgIC8vIGZvY3VzIGlzIGdvaW5nLiBTbyB3ZSBhc3luY2hyb25vdXNseSBjaGVjayBpZiB0aGUgZm9jdXMgaXMgb3V0c2lkZSB0aGUgdHJpZ2dlciBhbmQgY2xvc2VcbiAgICAgIC8vIGluIHRoYXQgY2FzZS5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXRoaXMudHJpZ2dlcj8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKFxuICAgICAgICAgICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudFxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyPy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjwhLS1cbk5PVEU6IGNka1RyYXBGb2N1cyBpcyByZXF1aXJlZCBmb3IgY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmUgdG8gd29yaywgd2hpY2ggd291bGQgYmUgc2ltaWxhciB0b1xuIDxGb2N1c1Njb3BlIGF1dG9Gb2N1cyAvPiBpbiByZWFjdC1hcmlhLiBJdCBkb2VzIE5PVCBwcmV2ZW50IGZvY3VzIGZyb20gZ29pbmcgb3V0IG9mIHBvcG92ZXIsXG4gd2hpY2ggaXMgZ29vZCwgYXMgd2Ugd2FudCB0aGUgcG9wb3ZlciB0byBjbG9zZSBvbiBibHVyLlxuICAtLT5cbjxkaXZcbiAgI2NvbnRlbnRXcmFwcGVyXG4gIFtpZF09XCJJRFwiXG4gIHJvbGU9XCJkaWFsb2dcIlxuICB0YWJpbmRleD1cIi0xXCJcbiAgY2RrTW9uaXRvclN1YnRyZWVGb2N1c1xuICBjZGtUcmFwRm9jdXNcbiAgY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmVcbiAgY2xhc3M9XCJkaWFsb2dcIlxuICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwidGl0bGU/LklEXCJcbiAgKGNka0ZvY3VzQ2hhbmdlKT1cIl9jb250ZW50Rm9jdXNDaGFuZ2VkKCRldmVudClcIlxuPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { A11yModule } from '@angular/cdk/a11y';
|
|
4
|
+
import { PopoverTriggerDirective } from './popover-trigger.directive';
|
|
5
|
+
import { PopoverComponent } from './popover.component';
|
|
6
|
+
import { PopoverCloseButtonDirective } from './popover-close-button.directive';
|
|
7
|
+
import { PopoverTitleDirective } from './popover-title.directive';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
export class SapphirePopoverModule {
|
|
10
|
+
}
|
|
11
|
+
SapphirePopoverModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: SapphirePopoverModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
12
|
+
SapphirePopoverModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.0", ngImport: i0, type: SapphirePopoverModule, declarations: [PopoverComponent,
|
|
13
|
+
PopoverTriggerDirective,
|
|
14
|
+
PopoverCloseButtonDirective,
|
|
15
|
+
PopoverTitleDirective], imports: [CommonModule, A11yModule], exports: [PopoverComponent,
|
|
16
|
+
PopoverTriggerDirective,
|
|
17
|
+
PopoverCloseButtonDirective,
|
|
18
|
+
PopoverTitleDirective] });
|
|
19
|
+
SapphirePopoverModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: SapphirePopoverModule, imports: [CommonModule, A11yModule] });
|
|
20
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: SapphirePopoverModule, decorators: [{
|
|
21
|
+
type: NgModule,
|
|
22
|
+
args: [{
|
|
23
|
+
declarations: [
|
|
24
|
+
PopoverComponent,
|
|
25
|
+
PopoverTriggerDirective,
|
|
26
|
+
PopoverCloseButtonDirective,
|
|
27
|
+
PopoverTitleDirective,
|
|
28
|
+
],
|
|
29
|
+
imports: [CommonModule, A11yModule],
|
|
30
|
+
exports: [
|
|
31
|
+
PopoverComponent,
|
|
32
|
+
PopoverTriggerDirective,
|
|
33
|
+
PopoverCloseButtonDirective,
|
|
34
|
+
PopoverTitleDirective,
|
|
35
|
+
],
|
|
36
|
+
}]
|
|
37
|
+
}] });
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3BvcG92ZXIvc3JjL3BvcG92ZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7QUFpQmxFLE1BQU0sT0FBTyxxQkFBcUI7O2tIQUFyQixxQkFBcUI7bUhBQXJCLHFCQUFxQixpQkFiOUIsZ0JBQWdCO1FBQ2hCLHVCQUF1QjtRQUN2QiwyQkFBMkI7UUFDM0IscUJBQXFCLGFBRWIsWUFBWSxFQUFFLFVBQVUsYUFFaEMsZ0JBQWdCO1FBQ2hCLHVCQUF1QjtRQUN2QiwyQkFBMkI7UUFDM0IscUJBQXFCO21IQUdaLHFCQUFxQixZQVJ0QixZQUFZLEVBQUUsVUFBVTsyRkFRdkIscUJBQXFCO2tCQWZqQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixnQkFBZ0I7d0JBQ2hCLHVCQUF1Qjt3QkFDdkIsMkJBQTJCO3dCQUMzQixxQkFBcUI7cUJBQ3RCO29CQUNELE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUM7b0JBQ25DLE9BQU8sRUFBRTt3QkFDUCxnQkFBZ0I7d0JBQ2hCLHVCQUF1Qjt3QkFDdkIsMkJBQTJCO3dCQUMzQixxQkFBcUI7cUJBQ3RCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBMTF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgUG9wb3ZlclRyaWdnZXJEaXJlY3RpdmUgfSBmcm9tICcuL3BvcG92ZXItdHJpZ2dlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJy4vcG9wb3Zlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9wb3ZlckNsb3NlQnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi9wb3BvdmVyLWNsb3NlLWJ1dHRvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUG9wb3ZlclRpdGxlRGlyZWN0aXZlIH0gZnJvbSAnLi9wb3BvdmVyLXRpdGxlLmRpcmVjdGl2ZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFBvcG92ZXJDb21wb25lbnQsXG4gICAgUG9wb3ZlclRyaWdnZXJEaXJlY3RpdmUsXG4gICAgUG9wb3ZlckNsb3NlQnV0dG9uRGlyZWN0aXZlLFxuICAgIFBvcG92ZXJUaXRsZURpcmVjdGl2ZSxcbiAgXSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQTExeU1vZHVsZV0sXG4gIGV4cG9ydHM6IFtcbiAgICBQb3BvdmVyQ29tcG9uZW50LFxuICAgIFBvcG92ZXJUcmlnZ2VyRGlyZWN0aXZlLFxuICAgIFBvcG92ZXJDbG9zZUJ1dHRvbkRpcmVjdGl2ZSxcbiAgICBQb3BvdmVyVGl0bGVEaXJlY3RpdmUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNhcHBoaXJlUG9wb3Zlck1vZHVsZSB7fVxuIl19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// We have separate public_api.ts file for each angular module, to have them
|
|
2
|
+
// exposed as separate entry points. The build is still not emitting separate
|
|
3
|
+
// entry points, which will be addressed in this task:
|
|
4
|
+
// WCCJ-838
|
|
5
|
+
export * from './src/radio.component';
|
|
6
|
+
export * from './src/radio-group.component';
|
|
7
|
+
export * from './src/radio.module';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmFkaW8vcHVibGljX2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0RUFBNEU7QUFDNUUsNkVBQTZFO0FBQzdFLHNEQUFzRDtBQUN0RCxXQUFXO0FBQ1gsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBXZSBoYXZlIHNlcGFyYXRlIHB1YmxpY19hcGkudHMgZmlsZSBmb3IgZWFjaCBhbmd1bGFyIG1vZHVsZSwgdG8gaGF2ZSB0aGVtXG4vLyBleHBvc2VkIGFzIHNlcGFyYXRlIGVudHJ5IHBvaW50cy4gVGhlIGJ1aWxkIGlzIHN0aWxsIG5vdCBlbWl0dGluZyBzZXBhcmF0ZVxuLy8gZW50cnkgcG9pbnRzLCB3aGljaCB3aWxsIGJlIGFkZHJlc3NlZCBpbiB0aGlzIHRhc2s6XG4vLyBXQ0NKLTgzOFxuZXhwb3J0ICogZnJvbSAnLi9zcmMvcmFkaW8uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL3JhZGlvLWdyb3VwLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9yYWRpby5tb2R1bGUnO1xuIl19
|