cmat 0.0.6 → 0.0.8
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/components/adapter/dayjs-datetime-adapter.d.ts +1 -1
- package/components/breadcrumb/breadcrumb.service.d.ts +1 -1
- package/components/breadcrumb/public-api.d.ts +2 -0
- package/components/card/card.component.d.ts +1 -1
- package/components/card/public-api.d.ts +1 -0
- package/components/cascade/cascade-list/cascade-list.component.d.ts +45 -21
- package/components/cascade/public-api.d.ts +1 -0
- package/components/chip-input/chip-input.component.d.ts +39 -12
- package/components/custom-formly/extension/addons.extension.d.ts +2 -0
- package/components/custom-formly/index.d.ts +5 -0
- package/components/custom-formly/public-api.d.ts +21 -0
- package/components/custom-formly/types/button/button.component.d.ts +18 -0
- package/components/custom-formly/types/checklist/checklist.component.d.ts +41 -0
- package/components/custom-formly/types/chips/chips.component.d.ts +27 -0
- package/components/custom-formly/types/multicheckbox/multicheckbox.component.d.ts +44 -0
- package/components/custom-formly/types/number/number.component.d.ts +20 -0
- package/components/custom-formly/types/radio/radio.component.d.ts +44 -0
- package/components/custom-formly/types/rating/rating.component.d.ts +24 -0
- package/components/custom-formly/types/repeat/repeat.component.d.ts +16 -0
- package/components/custom-formly/types/select/select.component.d.ts +54 -0
- package/components/custom-formly/types/select-tree/select-tree.component.d.ts +43 -0
- package/components/custom-formly/types/stepper/horizontal/stepper.component.d.ts +9 -0
- package/components/custom-formly/types/stepper/stepper.type.d.ts +6 -0
- package/components/custom-formly/types/stepper/vertical/stepper.component.d.ts +9 -0
- package/components/custom-formly/types/table/table.component.d.ts +43 -0
- package/components/custom-formly/types/tabs/tab.component.d.ts +8 -0
- package/components/custom-formly/types/tags/tags.component.d.ts +41 -0
- package/components/custom-formly/types/textarea/textarea.component.d.ts +13 -0
- package/components/custom-formly/wrappers/addons/addons.component.d.ts +10 -0
- package/components/custom-formly/wrappers/card/card.component.d.ts +6 -0
- package/components/custom-formly/wrappers/expansion/expansion.component.d.ts +6 -0
- package/components/custom-formly/wrappers/panel/panel.component.d.ts +6 -0
- package/components/date-range/date-range.component.d.ts +8 -6
- package/components/drawer/drawer.component.d.ts +2 -2
- package/components/fullscreen/fullscreen.component.d.ts +2 -9
- package/components/fullscreen/public-api.d.ts +0 -1
- package/components/material-color-picker/material-color-picker.component.d.ts +8 -4
- package/components/material-datetimepicker/calendar.d.ts +2 -2
- package/components/material-datetimepicker/clock.d.ts +1 -1
- package/components/material-datetimepicker/datetimepicker-input.d.ts +1 -1
- package/components/material-datetimepicker/datetimepicker-toggle.d.ts +1 -1
- package/components/material-datetimepicker/datetimepicker.d.ts +5 -10
- package/components/material-datetimepicker/month-view.d.ts +1 -2
- package/components/material-datetimepicker/multi-year-view.d.ts +1 -1
- package/components/material-datetimepicker/public-api.d.ts +1 -0
- package/components/material-datetimepicker/time.d.ts +2 -2
- package/components/material-datetimepicker/year-view.d.ts +1 -1
- package/components/navigation/horizontal/components/basic/basic.component.d.ts +1 -1
- package/components/navigation/horizontal/components/branch/branch.component.d.ts +1 -1
- package/components/navigation/horizontal/horizontal.component.d.ts +2 -2
- package/components/navigation/vertical/components/aside/aside.component.d.ts +1 -1
- package/components/navigation/vertical/components/basic/basic.component.d.ts +1 -7
- package/components/navigation/vertical/components/collapsable/collapsable.component.d.ts +1 -1
- package/components/navigation/vertical/components/group/group.component.d.ts +1 -1
- package/components/navigation/vertical/vertical.component.d.ts +5 -5
- package/components/pagination/public-api.d.ts +1 -0
- package/components/popover/popover-trigger.d.ts +121 -0
- package/components/popover/popover.component.d.ts +3 -3
- package/components/popover/popover.target.d.ts +8 -0
- package/components/popover/public-api.d.ts +3 -0
- package/components/rating/rating.component.d.ts +38 -9
- package/components/select-search/select-search.component.d.ts +4 -4
- package/components/select-tree/public-api.d.ts +2 -0
- package/components/select-tree/select-tree.component.d.ts +50 -21
- package/components/toast/public-api.d.ts +4 -0
- package/components/toast/toast.component.d.ts +4 -4
- package/components/transfer-picker/filter/filter.component.d.ts +1 -1
- package/components/transfer-picker/transfer-picker-source/transfer-picker-source.component.d.ts +2 -2
- package/components/transfer-picker/transfer-picker.component.d.ts +1 -1
- package/components/upload/files.type.d.ts +22 -0
- package/components/upload/files.util.service.d.ts +20 -0
- package/components/upload/index.d.ts +5 -0
- package/components/upload/public-api.d.ts +4 -0
- package/components/upload/upload-queue/upload-queue.component.d.ts +39 -0
- package/components/upload/upload.component.d.ts +32 -0
- package/esm2022/animations/public-api.mjs +2 -2
- package/esm2022/components/adapter/dayjs-date-adapter.mjs +6 -6
- package/esm2022/components/adapter/dayjs-datetime-adapter.mjs +5 -5
- package/esm2022/components/adapter/native-datetime-adapter.mjs +3 -3
- package/esm2022/components/breadcrumb/breadcrumb-item.directive.mjs +3 -3
- package/esm2022/components/breadcrumb/breadcrumb.component.mjs +6 -6
- package/esm2022/components/breadcrumb/breadcrumb.service.mjs +5 -5
- package/esm2022/components/breadcrumb/public-api.mjs +3 -1
- package/esm2022/components/card/card.component.mjs +5 -5
- package/esm2022/components/card/public-api.mjs +2 -1
- package/esm2022/components/cascade/cascade-bottom-sheet/cascade-bottom-sheet.component.mjs +7 -7
- package/esm2022/components/cascade/cascade-list/cascade-list.component.mjs +207 -114
- package/esm2022/components/cascade/cascade-menu/cascade-menu.component.mjs +4 -4
- package/esm2022/components/cascade/public-api.mjs +2 -1
- package/esm2022/components/chip-input/chip-input.component.mjs +152 -49
- package/esm2022/components/custom-formly/cmat-components-custom-formly.mjs +5 -0
- package/esm2022/components/custom-formly/extension/addons.extension.mjs +13 -0
- package/esm2022/components/custom-formly/public-api.mjs +22 -0
- package/esm2022/components/custom-formly/types/button/button.component.mjs +39 -0
- package/esm2022/components/custom-formly/types/checklist/checklist.component.mjs +161 -0
- package/esm2022/components/custom-formly/types/chips/chips.component.mjs +55 -0
- package/esm2022/components/custom-formly/types/multicheckbox/multicheckbox.component.mjs +89 -0
- package/esm2022/components/custom-formly/types/number/number.component.mjs +27 -0
- package/esm2022/components/custom-formly/types/radio/radio.component.mjs +88 -0
- package/esm2022/components/custom-formly/types/rating/rating.component.mjs +27 -0
- package/esm2022/components/custom-formly/types/repeat/repeat.component.mjs +28 -0
- package/esm2022/components/custom-formly/types/select/select.component.mjs +169 -0
- package/esm2022/components/custom-formly/types/select-tree/select-tree.component.mjs +66 -0
- package/esm2022/components/custom-formly/types/stepper/horizontal/stepper.component.mjs +31 -0
- package/esm2022/components/custom-formly/types/stepper/stepper.type.mjs +2 -0
- package/esm2022/components/custom-formly/types/stepper/vertical/stepper.component.mjs +31 -0
- package/esm2022/components/custom-formly/types/table/table.component.mjs +116 -0
- package/esm2022/components/custom-formly/types/tabs/tab.component.mjs +19 -0
- package/esm2022/components/custom-formly/types/tags/tags.component.mjs +149 -0
- package/esm2022/components/custom-formly/types/textarea/textarea.component.mjs +25 -0
- package/esm2022/components/custom-formly/wrappers/addons/addons.component.mjs +92 -0
- package/esm2022/components/custom-formly/wrappers/card/card.component.mjs +14 -0
- package/esm2022/components/custom-formly/wrappers/expansion/expansion.component.mjs +14 -0
- package/esm2022/components/custom-formly/wrappers/panel/panel.component.mjs +12 -0
- package/esm2022/components/date-range/date-range.component.mjs +26 -17
- package/esm2022/components/drawer/drawer.component.mjs +5 -5
- package/esm2022/components/drawer/drawer.service.mjs +3 -3
- package/esm2022/components/fullscreen/fullscreen.component.mjs +16 -73
- package/esm2022/components/fullscreen/public-api.mjs +1 -2
- package/esm2022/components/highlight/highlight.component.mjs +5 -5
- package/esm2022/components/highlight/highlight.service.mjs +3 -3
- package/esm2022/components/json-editor/json-editor.component.mjs +3 -3
- package/esm2022/components/masonry/masonry.component.mjs +5 -5
- package/esm2022/components/material-color-picker/material-color-picker.component.mjs +22 -12
- package/esm2022/components/material-datetimepicker/calendar-body.mjs +3 -3
- package/esm2022/components/material-datetimepicker/calendar.mjs +11 -12
- package/esm2022/components/material-datetimepicker/clock.mjs +5 -5
- package/esm2022/components/material-datetimepicker/datetimepicker-input.mjs +4 -5
- package/esm2022/components/material-datetimepicker/datetimepicker-intl.mjs +3 -3
- package/esm2022/components/material-datetimepicker/datetimepicker-toggle.mjs +9 -9
- package/esm2022/components/material-datetimepicker/datetimepicker.mjs +17 -22
- package/esm2022/components/material-datetimepicker/month-view.mjs +5 -6
- package/esm2022/components/material-datetimepicker/multi-year-view.mjs +7 -8
- package/esm2022/components/material-datetimepicker/public-api.mjs +2 -1
- package/esm2022/components/material-datetimepicker/time.mjs +8 -8
- package/esm2022/components/material-datetimepicker/year-view.mjs +7 -8
- package/esm2022/components/navigation/horizontal/components/basic/basic.component.mjs +8 -8
- package/esm2022/components/navigation/horizontal/components/branch/branch.component.mjs +8 -8
- package/esm2022/components/navigation/horizontal/components/divider/divider.component.mjs +5 -5
- package/esm2022/components/navigation/horizontal/components/spacer/spacer.component.mjs +6 -6
- package/esm2022/components/navigation/horizontal/horizontal.component.mjs +6 -6
- package/esm2022/components/navigation/navigation.service.mjs +3 -3
- package/esm2022/components/navigation/vertical/components/aside/aside.component.mjs +11 -11
- package/esm2022/components/navigation/vertical/components/basic/basic.component.mjs +7 -24
- package/esm2022/components/navigation/vertical/components/collapsable/collapsable.component.mjs +10 -10
- package/esm2022/components/navigation/vertical/components/divider/divider.component.mjs +5 -5
- package/esm2022/components/navigation/vertical/components/group/group.component.mjs +9 -9
- package/esm2022/components/navigation/vertical/components/spacer/spacer.component.mjs +6 -6
- package/esm2022/components/navigation/vertical/vertical.component.mjs +11 -11
- package/esm2022/components/pagination/pagination.component.mjs +10 -10
- package/esm2022/components/pagination/pagination.directive.mjs +4 -4
- package/esm2022/components/pagination/pagination.pipe.mjs +4 -4
- package/esm2022/components/pagination/pagination.service.mjs +3 -3
- package/esm2022/components/pagination/public-api.mjs +2 -1
- package/esm2022/components/password-strength/mat-pass-toggle-visibility/mat-pass-toggle-visibility.component.mjs +6 -6
- package/esm2022/components/password-strength/mat-password-strength/mat-password-strength.component.mjs +5 -5
- package/esm2022/components/password-strength/mat-password-strength-info/mat-password-strength-info.component.mjs +6 -6
- package/esm2022/components/popover/popover-trigger.mjs +444 -0
- package/esm2022/components/popover/popover.component.mjs +8 -9
- package/esm2022/components/popover/popover.target.mjs +18 -0
- package/esm2022/components/popover/public-api.mjs +4 -1
- package/esm2022/components/progress-bar/progress-bar.component.mjs +6 -6
- package/esm2022/components/rating/rating.component.mjs +122 -23
- package/esm2022/components/select-search/select-no-entries-found.directive.mjs +3 -3
- package/esm2022/components/select-search/select-search-clear.directive.mjs +3 -3
- package/esm2022/components/select-search/select-search.component.mjs +15 -15
- package/esm2022/components/select-tree/public-api.mjs +3 -1
- package/esm2022/components/select-tree/select-tree.component.mjs +281 -157
- package/esm2022/components/timeline/timeline-item/timeline-item.component.mjs +9 -9
- package/esm2022/components/timeline/timeline.component.mjs +5 -5
- package/esm2022/components/toast/public-api.mjs +5 -1
- package/esm2022/components/toast/toast-modal.component.mjs +5 -5
- package/esm2022/components/toast/toast.component.mjs +6 -6
- package/esm2022/components/toast/toast.service.mjs +3 -3
- package/esm2022/components/transfer-picker/filter/filter.component.mjs +9 -9
- package/esm2022/components/transfer-picker/search/search.component.mjs +6 -6
- package/esm2022/components/transfer-picker/transfer-picker-source/transfer-picker-source.component.mjs +11 -11
- package/esm2022/components/transfer-picker/transfer-picker-target/transfer-picker-target.component.mjs +5 -5
- package/esm2022/components/transfer-picker/transfer-picker.component.mjs +7 -7
- package/esm2022/components/transfer-picker/transfer-picker.service.mjs +4 -4
- package/esm2022/components/upload/cmat-components-upload.mjs +5 -0
- package/esm2022/components/upload/files.type.mjs +2 -0
- package/esm2022/components/upload/files.util.service.mjs +100 -0
- package/esm2022/components/upload/public-api.mjs +5 -0
- package/esm2022/components/upload/upload-queue/upload-queue.component.mjs +154 -0
- package/esm2022/components/upload/upload.component.mjs +118 -0
- package/esm2022/directives/animate-on-scroll/animate-on-scroll.directive.mjs +3 -3
- package/esm2022/directives/animate-on-scroll/scroll.service.mjs +3 -3
- package/esm2022/directives/autofocus/autofocus.directive.mjs +3 -3
- package/esm2022/directives/debounce/abstract-debounce.directive.mjs +3 -3
- package/esm2022/directives/debounce/debounce-click.directive.mjs +3 -3
- package/esm2022/directives/debounce/debounce-keyup.directive.mjs +3 -3
- package/esm2022/directives/digit-only/digit-only.directive.mjs +3 -3
- package/esm2022/directives/digit-only/mask.directive.mjs +3 -3
- package/esm2022/directives/equal-validator/equal-validator.directive.mjs +3 -3
- package/esm2022/lib/mock-api/mock-api.interceptor.mjs +5 -5
- package/esm2022/lib/mock-api/mock-api.service.mjs +3 -3
- package/esm2022/pipes/bytes/bytes.pipe.mjs +3 -3
- package/esm2022/pipes/date-format/date-format.pipe.mjs +3 -3
- package/esm2022/pipes/find-by-key/find-by-key.pipe.mjs +3 -3
- package/esm2022/pipes/group-by/group-by.pipe.mjs +3 -3
- package/esm2022/pipes/keys/keys.pipe.mjs +3 -3
- package/esm2022/pipes/secure/secure-pipe.mjs +5 -5
- package/esm2022/pipes/uppercase/uppercase.pipe.mjs +3 -3
- package/esm2022/public-api.mjs +1 -1
- package/esm2022/services/alert/alert.service.mjs +7 -7
- package/esm2022/services/alert/enum.mjs +2 -2
- package/esm2022/services/config/config.service.mjs +5 -5
- package/esm2022/services/config/urlStateConfig.service.mjs +5 -5
- package/esm2022/services/confirmation/confirmation.service.mjs +5 -5
- package/esm2022/services/confirmation/dialog/dialog.component.mjs +7 -7
- package/esm2022/services/data/data.service.mjs +5 -5
- package/esm2022/services/loading/loading.interceptor.mjs +4 -4
- package/esm2022/services/loading/loading.service.mjs +3 -3
- package/esm2022/services/local-storage/local-storage.service.mjs +3 -3
- package/esm2022/services/media-watcher/media-watcher.service.mjs +5 -5
- package/esm2022/services/platform/platform.service.mjs +4 -4
- package/esm2022/services/splash-screen/splash-screen.service.mjs +6 -6
- package/esm2022/services/title/title.service.mjs +4 -4
- package/esm2022/services/translation/translation.service.mjs +3 -3
- package/esm2022/services/utils/utils.service.mjs +54 -9
- package/fesm2022/cmat-animations.mjs +15 -15
- package/fesm2022/cmat-animations.mjs.map +1 -1
- package/fesm2022/cmat-components-adapter.mjs +11 -11
- package/fesm2022/cmat-components-adapter.mjs.map +1 -1
- package/fesm2022/cmat-components-breadcrumb.mjs +11 -11
- package/fesm2022/cmat-components-breadcrumb.mjs.map +1 -1
- package/fesm2022/cmat-components-card.mjs +4 -4
- package/fesm2022/cmat-components-card.mjs.map +1 -1
- package/fesm2022/cmat-components-cascade.mjs +215 -123
- package/fesm2022/cmat-components-cascade.mjs.map +1 -1
- package/fesm2022/cmat-components-chip-input.mjs +153 -50
- package/fesm2022/cmat-components-chip-input.mjs.map +1 -1
- package/fesm2022/cmat-components-custom-formly.mjs +1141 -0
- package/fesm2022/cmat-components-custom-formly.mjs.map +1 -0
- package/fesm2022/cmat-components-date-range.mjs +27 -18
- package/fesm2022/cmat-components-date-range.mjs.map +1 -1
- package/fesm2022/cmat-components-drawer.mjs +8 -8
- package/fesm2022/cmat-components-drawer.mjs.map +1 -1
- package/fesm2022/cmat-components-fullscreen.mjs +16 -73
- package/fesm2022/cmat-components-fullscreen.mjs.map +1 -1
- package/fesm2022/cmat-components-highlight.mjs +7 -7
- package/fesm2022/cmat-components-highlight.mjs.map +1 -1
- package/fesm2022/cmat-components-json-editor.mjs +3 -3
- package/fesm2022/cmat-components-masonry.mjs +4 -4
- package/fesm2022/cmat-components-masonry.mjs.map +1 -1
- package/fesm2022/cmat-components-material-color-picker.mjs +21 -11
- package/fesm2022/cmat-components-material-color-picker.mjs.map +1 -1
- package/fesm2022/cmat-components-material-datetimepicker.mjs +189 -195
- package/fesm2022/cmat-components-material-datetimepicker.mjs.map +1 -1
- package/fesm2022/cmat-components-navigation.mjs +166 -183
- package/fesm2022/cmat-components-navigation.mjs.map +1 -1
- package/fesm2022/cmat-components-pagination.mjs +20 -20
- package/fesm2022/cmat-components-pagination.mjs.map +1 -1
- package/fesm2022/cmat-components-password-strength.mjs +13 -13
- package/fesm2022/cmat-components-password-strength.mjs.map +1 -1
- package/fesm2022/cmat-components-popover.mjs +464 -10
- package/fesm2022/cmat-components-popover.mjs.map +1 -1
- package/fesm2022/cmat-components-progress-bar.mjs +6 -6
- package/fesm2022/cmat-components-progress-bar.mjs.map +1 -1
- package/fesm2022/cmat-components-rating.mjs +121 -22
- package/fesm2022/cmat-components-rating.mjs.map +1 -1
- package/fesm2022/cmat-components-select-search.mjs +41 -41
- package/fesm2022/cmat-components-select-search.mjs.map +1 -1
- package/fesm2022/cmat-components-select-tree.mjs +285 -158
- package/fesm2022/cmat-components-select-tree.mjs.map +1 -1
- package/fesm2022/cmat-components-timeline.mjs +12 -12
- package/fesm2022/cmat-components-timeline.mjs.map +1 -1
- package/fesm2022/cmat-components-toast.mjs +12 -12
- package/fesm2022/cmat-components-toast.mjs.map +1 -1
- package/fesm2022/cmat-components-transfer-picker.mjs +33 -33
- package/fesm2022/cmat-components-transfer-picker.mjs.map +1 -1
- package/fesm2022/cmat-components-upload.mjs +366 -0
- package/fesm2022/cmat-components-upload.mjs.map +1 -0
- package/fesm2022/cmat-directives-animate-on-scroll.mjs +6 -6
- package/fesm2022/cmat-directives-autofocus.mjs +3 -3
- package/fesm2022/cmat-directives-debounce.mjs +9 -9
- package/fesm2022/cmat-directives-digit-only.mjs +6 -6
- package/fesm2022/cmat-directives-equal-validator.mjs +3 -3
- package/fesm2022/cmat-lib-mock-api.mjs +6 -6
- package/fesm2022/cmat-lib-mock-api.mjs.map +1 -1
- package/fesm2022/cmat-pipes-bytes.mjs +3 -3
- package/fesm2022/cmat-pipes-date-format.mjs +3 -3
- package/fesm2022/cmat-pipes-find-by-key.mjs +3 -3
- package/fesm2022/cmat-pipes-group-by.mjs +3 -3
- package/fesm2022/cmat-pipes-keys.mjs +3 -3
- package/fesm2022/cmat-pipes-secure.mjs +4 -4
- package/fesm2022/cmat-pipes-secure.mjs.map +1 -1
- package/fesm2022/cmat-pipes-uppercase.mjs +3 -3
- package/fesm2022/cmat-services-alert.mjs +6 -6
- package/fesm2022/cmat-services-alert.mjs.map +1 -1
- package/fesm2022/cmat-services-config.mjs +7 -7
- package/fesm2022/cmat-services-config.mjs.map +1 -1
- package/fesm2022/cmat-services-confirmation.mjs +11 -11
- package/fesm2022/cmat-services-confirmation.mjs.map +1 -1
- package/fesm2022/cmat-services-data.mjs +5 -5
- package/fesm2022/cmat-services-data.mjs.map +1 -1
- package/fesm2022/cmat-services-loading.mjs +6 -6
- package/fesm2022/cmat-services-loading.mjs.map +1 -1
- package/fesm2022/cmat-services-local-storage.mjs +3 -3
- package/fesm2022/cmat-services-media-watcher.mjs +4 -4
- package/fesm2022/cmat-services-media-watcher.mjs.map +1 -1
- package/fesm2022/cmat-services-platform.mjs +3 -3
- package/fesm2022/cmat-services-platform.mjs.map +1 -1
- package/fesm2022/cmat-services-splash-screen.mjs +5 -5
- package/fesm2022/cmat-services-splash-screen.mjs.map +1 -1
- package/fesm2022/cmat-services-title.mjs +3 -3
- package/fesm2022/cmat-services-title.mjs.map +1 -1
- package/fesm2022/cmat-services-translation.mjs +3 -3
- package/fesm2022/cmat-services-utils.mjs +53 -8
- package/fesm2022/cmat-services-utils.mjs.map +1 -1
- package/package.json +75 -63
- package/pipes/secure/secure-pipe.d.ts +1 -1
- package/services/alert/enum.d.ts +1 -1
- package/services/confirmation/confirmation.service.d.ts +1 -1
- package/services/data/data.service.d.ts +1 -1
- package/services/media-watcher/media-watcher.service.d.ts +1 -1
- package/services/title/title.service.d.ts +1 -1
- package/services/utils/utils.service.d.ts +1 -0
- package/styles/components/bundle.scss +18 -5
- package/styles/overrides/angular-material.scss +51 -52
- package/styles/tailwind.scss +2 -8
- package/styles/themes.scss +7 -7
- package/styles/user-themes.scss +1 -1
- package/tailwind/plugins/utilities.js +1 -1
- package/components/fullscreen/fullscreen.types.d.ts +0 -13
- package/esm2022/components/fullscreen/fullscreen.types.mjs +0 -2
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
import { isFakeMousedownFromScreenReader } from '@angular/cdk/a11y';
|
|
2
|
+
import { OverlayConfig, } from '@angular/cdk/overlay';
|
|
3
|
+
import { TemplatePortal } from '@angular/cdk/portal';
|
|
4
|
+
import { Directive, EventEmitter, HostBinding, HostListener, Input, Optional, Output, } from '@angular/core';
|
|
5
|
+
import { Subject } from 'rxjs';
|
|
6
|
+
import { takeUntil } from 'rxjs/operators';
|
|
7
|
+
import { throwCmatPopoverMissingError } from './popover.errors';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@angular/cdk/overlay";
|
|
10
|
+
import * as i2 from "@angular/cdk/bidi";
|
|
11
|
+
/**
|
|
12
|
+
* This directive is intended to be used in conjunction with an cmat-popover tag. It is
|
|
13
|
+
* responsible for toggling the display of the provided popover instance.
|
|
14
|
+
*/
|
|
15
|
+
export class CmatPopoverTriggerDirective {
|
|
16
|
+
constructor(_overlay, _elementRef, _viewContainerRef, _dir, _changeDetectorRef) {
|
|
17
|
+
this._overlay = _overlay;
|
|
18
|
+
this._elementRef = _elementRef;
|
|
19
|
+
this._viewContainerRef = _viewContainerRef;
|
|
20
|
+
this._dir = _dir;
|
|
21
|
+
this._changeDetectorRef = _changeDetectorRef;
|
|
22
|
+
this.ariaHaspopup = true;
|
|
23
|
+
/** Event emitted when the associated popover is opened. */
|
|
24
|
+
this.popoverOpened = new EventEmitter();
|
|
25
|
+
/** Event emitted when the associated popover is closed. */
|
|
26
|
+
this.popoverClosed = new EventEmitter();
|
|
27
|
+
this.popoverOpened$ = new Subject();
|
|
28
|
+
this.popoverClosed$ = new Subject();
|
|
29
|
+
this._overlayRef = null;
|
|
30
|
+
this._popoverOpen = false;
|
|
31
|
+
this._halt = false;
|
|
32
|
+
// tracking input type is necessary so it's possible to only auto-focus
|
|
33
|
+
// the first item of the list when the popover is opened via the keyboard
|
|
34
|
+
this._openedByMouse = false;
|
|
35
|
+
this._onDestroy = new Subject();
|
|
36
|
+
}
|
|
37
|
+
/** Whether the popover is open. */
|
|
38
|
+
get popoverOpen() {
|
|
39
|
+
return this._popoverOpen;
|
|
40
|
+
}
|
|
41
|
+
/** The text direction of the containing app. */
|
|
42
|
+
get dir() {
|
|
43
|
+
return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';
|
|
44
|
+
}
|
|
45
|
+
onClick() {
|
|
46
|
+
if (this.popover.triggerEvent === 'click') {
|
|
47
|
+
this.togglePopover();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
onMouseEnter() {
|
|
51
|
+
this._halt = false;
|
|
52
|
+
if (this.popover.triggerEvent === 'hover') {
|
|
53
|
+
this._mouseoverTimer = setTimeout(() => {
|
|
54
|
+
this.openPopover();
|
|
55
|
+
}, this.popover.enterDelay);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
onMouseLeave() {
|
|
59
|
+
if (this.popover.triggerEvent === 'hover') {
|
|
60
|
+
if (this._mouseoverTimer) {
|
|
61
|
+
clearTimeout(this._mouseoverTimer);
|
|
62
|
+
this._mouseoverTimer = null;
|
|
63
|
+
}
|
|
64
|
+
if (this._popoverOpen) {
|
|
65
|
+
setTimeout(() => {
|
|
66
|
+
if (!this.popover.closeDisabled) {
|
|
67
|
+
this.closePopover();
|
|
68
|
+
}
|
|
69
|
+
}, this.popover.leaveDelay);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
this._halt = true;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
handleMousedown(event) {
|
|
77
|
+
if (event && !isFakeMousedownFromScreenReader(event)) {
|
|
78
|
+
this._openedByMouse = true;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
ngAfterViewInit() {
|
|
82
|
+
this._checkPopover();
|
|
83
|
+
this._setCurrentConfig();
|
|
84
|
+
this.popover.closed.subscribe(() => this.closePopover());
|
|
85
|
+
}
|
|
86
|
+
ngOnDestroy() {
|
|
87
|
+
this.destroyPopover();
|
|
88
|
+
}
|
|
89
|
+
/** Toggles the popover between the open and closed states. */
|
|
90
|
+
togglePopover() {
|
|
91
|
+
return this._popoverOpen ? this.closePopover() : this.openPopover();
|
|
92
|
+
}
|
|
93
|
+
/** Opens the popover. */
|
|
94
|
+
openPopover() {
|
|
95
|
+
if (!this._popoverOpen && !this._halt) {
|
|
96
|
+
this._createOverlay().attach(this._portal);
|
|
97
|
+
this._subscribeToBackdrop();
|
|
98
|
+
this._subscribeToDetachments();
|
|
99
|
+
this._initPopover();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/** Closes the popover. */
|
|
103
|
+
closePopover() {
|
|
104
|
+
if (this._overlayRef) {
|
|
105
|
+
this._overlayRef.detach();
|
|
106
|
+
this._resetPopover();
|
|
107
|
+
}
|
|
108
|
+
this.destroyPopover();
|
|
109
|
+
}
|
|
110
|
+
/** Removes the popover from the DOM. */
|
|
111
|
+
destroyPopover() {
|
|
112
|
+
if (this._mouseoverTimer) {
|
|
113
|
+
clearTimeout(this._mouseoverTimer);
|
|
114
|
+
this._mouseoverTimer = null;
|
|
115
|
+
}
|
|
116
|
+
if (this._overlayRef) {
|
|
117
|
+
this._overlayRef.dispose();
|
|
118
|
+
this._overlayRef = null;
|
|
119
|
+
this._cleanUpSubscriptions();
|
|
120
|
+
}
|
|
121
|
+
this._onDestroy.next();
|
|
122
|
+
this._onDestroy.complete();
|
|
123
|
+
}
|
|
124
|
+
/** Focuses the popover trigger. */
|
|
125
|
+
focus() {
|
|
126
|
+
this._elementRef.nativeElement.focus();
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* This method ensures that the popover closes when the overlay backdrop is clicked.
|
|
130
|
+
* We do not use first() here because doing so would not catch clicks from within
|
|
131
|
+
* the popover, and it would fail to unsubscribe properly. Instead, we unsubscribe
|
|
132
|
+
* explicitly when the popover is closed or destroyed.
|
|
133
|
+
*/
|
|
134
|
+
_subscribeToBackdrop() {
|
|
135
|
+
if (this._overlayRef) {
|
|
136
|
+
/** Only subscribe to backdrop if trigger event is click */
|
|
137
|
+
if (this.triggerEvent === 'click' && this.popover.closeOnBackdropClick === true) {
|
|
138
|
+
this._overlayRef
|
|
139
|
+
.backdropClick()
|
|
140
|
+
.pipe(takeUntil(this.popoverClosed$), takeUntil(this._onDestroy))
|
|
141
|
+
.subscribe(() => {
|
|
142
|
+
this.popover.emitCloseEvent();
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
_subscribeToDetachments() {
|
|
148
|
+
if (this._overlayRef) {
|
|
149
|
+
this._overlayRef
|
|
150
|
+
.detachments()
|
|
151
|
+
.pipe(takeUntil(this.popoverClosed$), takeUntil(this._onDestroy))
|
|
152
|
+
.subscribe(() => {
|
|
153
|
+
this._setPopoverClosed();
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* This method sets the popover state to open and focuses the first item if
|
|
159
|
+
* the popover was opened via the keyboard.
|
|
160
|
+
*/
|
|
161
|
+
_initPopover() {
|
|
162
|
+
this._setPopoverOpened();
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* This method resets the popover when it's closed, most importantly restoring
|
|
166
|
+
* focus to the popover trigger if the popover was opened via the keyboard.
|
|
167
|
+
*/
|
|
168
|
+
_resetPopover() {
|
|
169
|
+
this._setPopoverClosed();
|
|
170
|
+
// Focus only needs to be reset to the host element if the popover was opened
|
|
171
|
+
// by the keyboard and manually shifted to the first popover item.
|
|
172
|
+
if (!this._openedByMouse) {
|
|
173
|
+
this.focus();
|
|
174
|
+
}
|
|
175
|
+
this._openedByMouse = false;
|
|
176
|
+
}
|
|
177
|
+
/** set state rather than toggle to support triggers sharing a popover */
|
|
178
|
+
_setPopoverOpened() {
|
|
179
|
+
if (!this._popoverOpen) {
|
|
180
|
+
this._popoverOpen = true;
|
|
181
|
+
this.popoverOpened$.next();
|
|
182
|
+
this.popoverOpened.emit();
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/** set state rather than toggle to support triggers sharing a popover */
|
|
186
|
+
_setPopoverClosed() {
|
|
187
|
+
if (this._popoverOpen) {
|
|
188
|
+
this._popoverOpen = false;
|
|
189
|
+
this.popoverClosed$.next();
|
|
190
|
+
this.popoverClosed.emit();
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* This method checks that a valid instance of MdPopover has been passed into
|
|
195
|
+
* mdPopoverTriggerFor. If not, an exception is thrown.
|
|
196
|
+
*/
|
|
197
|
+
_checkPopover() {
|
|
198
|
+
if (!this.popover) {
|
|
199
|
+
throwCmatPopoverMissingError();
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* This method creates the overlay from the provided popover's template and saves its
|
|
204
|
+
* OverlayRef so that it can be attached to the DOM when openPopover is called.
|
|
205
|
+
*/
|
|
206
|
+
_createOverlay() {
|
|
207
|
+
if (!this._overlayRef) {
|
|
208
|
+
this._portal = new TemplatePortal(this.popover.templateRef, this._viewContainerRef);
|
|
209
|
+
const config = this._getOverlayConfig();
|
|
210
|
+
this._subscribeToPositions(config.positionStrategy);
|
|
211
|
+
this._overlayRef = this._overlay.create(config);
|
|
212
|
+
}
|
|
213
|
+
return this._overlayRef;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* This method builds the configuration object needed to create the overlay, the OverlayConfig.
|
|
217
|
+
*
|
|
218
|
+
* @returns OverlayConfig
|
|
219
|
+
*/
|
|
220
|
+
_getOverlayConfig() {
|
|
221
|
+
const overlayState = new OverlayConfig();
|
|
222
|
+
overlayState.positionStrategy = this._getPosition();
|
|
223
|
+
/** Display overlay backdrop if trigger event is click */
|
|
224
|
+
if (this.triggerEvent === 'click') {
|
|
225
|
+
overlayState.hasBackdrop = true;
|
|
226
|
+
overlayState.backdropClass = 'cdk-overlay-transparent-backdrop';
|
|
227
|
+
}
|
|
228
|
+
overlayState.direction = this._dir;
|
|
229
|
+
overlayState.scrollStrategy = this._getOverlayScrollStrategy(this.popover.scrollStrategy);
|
|
230
|
+
return overlayState;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* This method returns the scroll strategy used by the cdk/overlay.
|
|
234
|
+
*/
|
|
235
|
+
_getOverlayScrollStrategy(strategy) {
|
|
236
|
+
switch (strategy) {
|
|
237
|
+
case 'noop':
|
|
238
|
+
return this._overlay.scrollStrategies.noop();
|
|
239
|
+
case 'close':
|
|
240
|
+
return this._overlay.scrollStrategies.close();
|
|
241
|
+
case 'block':
|
|
242
|
+
return this._overlay.scrollStrategies.block();
|
|
243
|
+
case 'reposition':
|
|
244
|
+
default:
|
|
245
|
+
return this._overlay.scrollStrategies.reposition();
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Listens to changes in the position of the overlay and sets the correct classes
|
|
250
|
+
* on the popover based on the new position. This ensures the animation origin is always
|
|
251
|
+
* correct, even if a fallback position is used for the overlay.
|
|
252
|
+
*/
|
|
253
|
+
_subscribeToPositions(position) {
|
|
254
|
+
this._positionSubscription = position.positionChanges.subscribe((change) => {
|
|
255
|
+
const posX = change.connectionPair.overlayX === 'start'
|
|
256
|
+
? 'after'
|
|
257
|
+
: change.connectionPair.overlayX === 'end'
|
|
258
|
+
? 'before'
|
|
259
|
+
: 'center';
|
|
260
|
+
const posY = change.connectionPair.overlayY === 'top'
|
|
261
|
+
? 'below'
|
|
262
|
+
: change.connectionPair.overlayY === 'bottom'
|
|
263
|
+
? 'above'
|
|
264
|
+
: 'center';
|
|
265
|
+
const pos = this.popover.position[0] === 'above' || this.popover.position[0] === 'below'
|
|
266
|
+
? [posY, posX]
|
|
267
|
+
: [posX, posY];
|
|
268
|
+
// required for ChangeDetectionStrategy.OnPush
|
|
269
|
+
this._changeDetectorRef.markForCheck();
|
|
270
|
+
this.popover.zone.run(() => {
|
|
271
|
+
this.popover.setCurrentStyles(pos);
|
|
272
|
+
this.popover.setPositionClasses(pos);
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* This method builds the position strategy for the overlay, so the popover is properly connected
|
|
278
|
+
* to the trigger.
|
|
279
|
+
*
|
|
280
|
+
* @returns ConnectedPositionStrategy
|
|
281
|
+
*/
|
|
282
|
+
_getPosition() {
|
|
283
|
+
const [originX, origin2ndX, origin3rdX] = this.popover.position[0] === 'before' || this.popover.position[1] === 'after'
|
|
284
|
+
? ['start', 'center', 'end']
|
|
285
|
+
: this.popover.position[0] === 'after' || this.popover.position[1] === 'before'
|
|
286
|
+
? ['end', 'center', 'start']
|
|
287
|
+
: ['center', 'start', 'end'];
|
|
288
|
+
const [originY, origin2ndY, origin3rdY] = this.popover.position[0] === 'above' || this.popover.position[1] === 'below'
|
|
289
|
+
? ['top', 'center', 'bottom']
|
|
290
|
+
: this.popover.position[0] === 'below' || this.popover.position[1] === 'above'
|
|
291
|
+
? ['bottom', 'center', 'top']
|
|
292
|
+
: ['center', 'top', 'bottom'];
|
|
293
|
+
const [overlayX, overlayFallbackX] = this.popover.position[0] === 'below' || this.popover.position[0] === 'above'
|
|
294
|
+
? [originX, originX]
|
|
295
|
+
: this.popover.position[0] === 'before'
|
|
296
|
+
? ['end', 'start']
|
|
297
|
+
: ['start', 'end'];
|
|
298
|
+
const [overlayY, overlayFallbackY] = this.popover.position[0] === 'before' || this.popover.position[0] === 'after'
|
|
299
|
+
? [originY, originY]
|
|
300
|
+
: this.popover.position[0] === 'below'
|
|
301
|
+
? ['top', 'bottom']
|
|
302
|
+
: ['bottom', 'top'];
|
|
303
|
+
const originFallbackX = overlayX;
|
|
304
|
+
const originFallbackY = overlayY;
|
|
305
|
+
const offsetX = this.popover.xOffset && !isNaN(Number(this.popover.xOffset))
|
|
306
|
+
? Number(this.dir === 'ltr' ? this.popover.xOffset : -this.popover.xOffset)
|
|
307
|
+
: 0;
|
|
308
|
+
const offsetY = this.popover.yOffset && !isNaN(Number(this.popover.yOffset))
|
|
309
|
+
? Number(this.popover.yOffset)
|
|
310
|
+
: 0;
|
|
311
|
+
/**
|
|
312
|
+
* For overriding position element, when `cmatPopoverTargetAt` has a valid element reference.
|
|
313
|
+
* Useful for sticking popover to parent element and offsetting arrow to trigger element.
|
|
314
|
+
* If undefined defaults to the trigger element reference.
|
|
315
|
+
*/
|
|
316
|
+
let element = this._elementRef;
|
|
317
|
+
if (typeof this.targetElement !== 'undefined') {
|
|
318
|
+
this.popover.containerPositioning = true;
|
|
319
|
+
element = this.targetElement._elementRef;
|
|
320
|
+
}
|
|
321
|
+
let positions = [{ originX, originY, overlayX, overlayY }];
|
|
322
|
+
if (this.popover.position[0] === 'above' || this.popover.position[0] === 'below') {
|
|
323
|
+
positions = [
|
|
324
|
+
{ originX, originY, overlayX, overlayY, offsetY },
|
|
325
|
+
{ originX: origin2ndX, originY, overlayX: origin2ndX, overlayY, offsetY },
|
|
326
|
+
{ originX: origin3rdX, originY, overlayX: origin3rdX, overlayY, offsetY },
|
|
327
|
+
{
|
|
328
|
+
originX,
|
|
329
|
+
originY: originFallbackY,
|
|
330
|
+
overlayX,
|
|
331
|
+
overlayY: overlayFallbackY,
|
|
332
|
+
offsetY: -offsetY,
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
originX: origin2ndX,
|
|
336
|
+
originY: originFallbackY,
|
|
337
|
+
overlayX: origin2ndX,
|
|
338
|
+
overlayY: overlayFallbackY,
|
|
339
|
+
offsetY: -offsetY,
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
originX: origin3rdX,
|
|
343
|
+
originY: originFallbackY,
|
|
344
|
+
overlayX: origin3rdX,
|
|
345
|
+
overlayY: overlayFallbackY,
|
|
346
|
+
offsetY: -offsetY,
|
|
347
|
+
},
|
|
348
|
+
];
|
|
349
|
+
}
|
|
350
|
+
if (this.popover.position[0] === 'before' || this.popover.position[0] === 'after') {
|
|
351
|
+
positions = [
|
|
352
|
+
{ originX, originY, overlayX, overlayY, offsetX },
|
|
353
|
+
{ originX, originY: origin2ndY, overlayX, overlayY: origin2ndY, offsetX },
|
|
354
|
+
{ originX, originY: origin3rdY, overlayX, overlayY: origin3rdY, offsetX },
|
|
355
|
+
{
|
|
356
|
+
originX: originFallbackX,
|
|
357
|
+
originY,
|
|
358
|
+
overlayX: overlayFallbackX,
|
|
359
|
+
overlayY,
|
|
360
|
+
offsetX: -offsetX,
|
|
361
|
+
},
|
|
362
|
+
{
|
|
363
|
+
originX: originFallbackX,
|
|
364
|
+
originY: origin2ndY,
|
|
365
|
+
overlayX: overlayFallbackX,
|
|
366
|
+
overlayY: origin2ndY,
|
|
367
|
+
offsetX: -offsetX,
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
originX: originFallbackX,
|
|
371
|
+
originY: origin3rdY,
|
|
372
|
+
overlayX: overlayFallbackX,
|
|
373
|
+
overlayY: origin3rdY,
|
|
374
|
+
offsetX: -offsetX,
|
|
375
|
+
},
|
|
376
|
+
];
|
|
377
|
+
}
|
|
378
|
+
return this._overlay
|
|
379
|
+
.position()
|
|
380
|
+
.flexibleConnectedTo(element)
|
|
381
|
+
.withLockedPosition()
|
|
382
|
+
.withPositions(positions)
|
|
383
|
+
.withDefaultOffsetX(offsetX)
|
|
384
|
+
.withDefaultOffsetY(offsetY);
|
|
385
|
+
}
|
|
386
|
+
_cleanUpSubscriptions() {
|
|
387
|
+
if (this._backdropSubscription) {
|
|
388
|
+
this._backdropSubscription.unsubscribe();
|
|
389
|
+
}
|
|
390
|
+
if (this._positionSubscription) {
|
|
391
|
+
this._positionSubscription.unsubscribe();
|
|
392
|
+
}
|
|
393
|
+
if (this._detachmentsSubscription) {
|
|
394
|
+
this._detachmentsSubscription.unsubscribe();
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
_setCurrentConfig() {
|
|
398
|
+
if (this.triggerEvent) {
|
|
399
|
+
this.popover.triggerEvent = this.triggerEvent;
|
|
400
|
+
}
|
|
401
|
+
this.popover.setCurrentStyles();
|
|
402
|
+
}
|
|
403
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: CmatPopoverTriggerDirective, deps: [{ token: i1.Overlay }, { token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: i2.Directionality, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
404
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.7", type: CmatPopoverTriggerDirective, isStandalone: true, selector: "[cmatPopoverTriggerFor],[cmatPopoverTargetAt],[cmatPopoverTriggerOn]", inputs: { popover: ["cmatPopoverTriggerFor", "popover"], targetElement: ["cmatPopoverTargetAt", "targetElement"], triggerEvent: ["cmatPopoverTriggerOn", "triggerEvent"] }, outputs: { popoverOpened: "popoverOpened", popoverClosed: "popoverClosed" }, host: { listeners: { "click": "onClick($event)", "mouseenter": "onMouseEnter($event)", "mouseleave": "onMouseLeave($event)", "mousedown": "handleMousedown($event)" }, properties: { "attr.aria-haspopup": "this.ariaHaspopup" } }, exportAs: ["cmatPopoverTrigger"], ngImport: i0 }); }
|
|
405
|
+
}
|
|
406
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: CmatPopoverTriggerDirective, decorators: [{
|
|
407
|
+
type: Directive,
|
|
408
|
+
args: [{
|
|
409
|
+
selector: '[cmatPopoverTriggerFor],[cmatPopoverTargetAt],[cmatPopoverTriggerOn]',
|
|
410
|
+
standalone: true,
|
|
411
|
+
exportAs: 'cmatPopoverTrigger'
|
|
412
|
+
}]
|
|
413
|
+
}], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.ElementRef }, { type: i0.ViewContainerRef }, { type: i2.Directionality, decorators: [{
|
|
414
|
+
type: Optional
|
|
415
|
+
}] }, { type: i0.ChangeDetectorRef }], propDecorators: { ariaHaspopup: [{
|
|
416
|
+
type: HostBinding,
|
|
417
|
+
args: ['attr.aria-haspopup']
|
|
418
|
+
}], popover: [{
|
|
419
|
+
type: Input,
|
|
420
|
+
args: ['cmatPopoverTriggerFor']
|
|
421
|
+
}], targetElement: [{
|
|
422
|
+
type: Input,
|
|
423
|
+
args: ['cmatPopoverTargetAt']
|
|
424
|
+
}], triggerEvent: [{
|
|
425
|
+
type: Input,
|
|
426
|
+
args: ['cmatPopoverTriggerOn']
|
|
427
|
+
}], popoverOpened: [{
|
|
428
|
+
type: Output
|
|
429
|
+
}], popoverClosed: [{
|
|
430
|
+
type: Output
|
|
431
|
+
}], onClick: [{
|
|
432
|
+
type: HostListener,
|
|
433
|
+
args: ['click', ['$event']]
|
|
434
|
+
}], onMouseEnter: [{
|
|
435
|
+
type: HostListener,
|
|
436
|
+
args: ['mouseenter', ['$event']]
|
|
437
|
+
}], onMouseLeave: [{
|
|
438
|
+
type: HostListener,
|
|
439
|
+
args: ['mouseleave', ['$event']]
|
|
440
|
+
}], handleMousedown: [{
|
|
441
|
+
type: HostListener,
|
|
442
|
+
args: ['mousedown', ['$event']]
|
|
443
|
+
}] } });
|
|
444
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci10cmlnZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY21hdC9jb21wb25lbnRzL3BvcG92ZXIvcG9wb3Zlci10cmlnZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXBFLE9BQU8sRUFLSCxhQUFhLEdBSWhCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFHSCxTQUFTLEVBRVQsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEdBRVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7O0FBU2hFOzs7R0FHRztBQU9ILE1BQU0sT0FBTywyQkFBMkI7SUFzQ3BDLFlBQ1ksUUFBaUIsRUFDakIsV0FBdUIsRUFDdkIsaUJBQW1DLEVBQ3ZCLElBQW9CLEVBQ2hDLGtCQUFxQztRQUpyQyxhQUFRLEdBQVIsUUFBUSxDQUFTO1FBQ2pCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFDdkIsU0FBSSxHQUFKLElBQUksQ0FBZ0I7UUFDaEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQTFDZCxpQkFBWSxHQUFHLElBQUksQ0FBQztRQVV2RCwyREFBMkQ7UUFDakQsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRW5ELDJEQUEyRDtRQUNqRCxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7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RUF6Q3NCLFlBQVk7c0JBQTlDLFdBQVc7dUJBQUMsb0JBQW9CO2dCQUVELE9BQU87c0JBQXRDLEtBQUs7dUJBQUMsdUJBQXVCO2dCQUdBLGFBQWE7c0JBQTFDLEtBQUs7dUJBQUMscUJBQXFCO2dCQUdHLFlBQVk7c0JBQTFDLEtBQUs7dUJBQUMsc0JBQXNCO2dCQUduQixhQUFhO3NCQUF0QixNQUFNO2dCQUdHLGFBQWE7c0JBQXRCLE1BQU07Z0JBeUNQLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUWpDLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBV3RDLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBbUJ0QyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmltcG9ydCB7IGlzRmFrZU1vdXNlZG93bkZyb21TY3JlZW5SZWFkZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XHJcbmltcG9ydCB7IERpcmVjdGlvbiwgRGlyZWN0aW9uYWxpdHkgfSBmcm9tICdAYW5ndWxhci9jZGsvYmlkaSc7XHJcbmltcG9ydCB7XHJcbiAgICBDb25uZWN0ZWRQb3NpdGlvbixcclxuICAgIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSxcclxuICAgIEhvcml6b250YWxDb25uZWN0aW9uUG9zLFxyXG4gICAgT3ZlcmxheSxcclxuICAgIE92ZXJsYXlDb25maWcsXHJcbiAgICBPdmVybGF5UmVmLFxyXG4gICAgU2Nyb2xsU3RyYXRlZ3ksXHJcbiAgICBWZXJ0aWNhbENvbm5lY3Rpb25Qb3MsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQge1xyXG4gICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgRGlyZWN0aXZlLFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIEhvc3RCaW5kaW5nLFxyXG4gICAgSG9zdExpc3RlbmVyLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPcHRpb25hbCxcclxuICAgIE91dHB1dCxcclxuICAgIFZpZXdDb250YWluZXJSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IHRocm93Q21hdFBvcG92ZXJNaXNzaW5nRXJyb3IgfSBmcm9tICcuL3BvcG92ZXIuZXJyb3JzJztcclxuaW1wb3J0IHsgQ21hdFBvcG92ZXJQYW5lbCwgQ21hdFRhcmdldCB9IGZyb20gJy4vcG9wb3Zlci5pbnRlcmZhY2VzJztcclxuaW1wb3J0IHtcclxuICAgIENtYXRQb3BvdmVyUG9zaXRpb24sXHJcbiAgICBDbWF0UG9wb3ZlclBvc2l0aW9uU3RhcnQsXHJcbiAgICBDbWF0UG9wb3ZlclNjcm9sbFN0cmF0ZWd5LFxyXG4gICAgQ21hdFBvcG92ZXJUcmlnZ2VyRXZlbnQsXHJcbn0gZnJvbSAnLi9wb3BvdmVyLnR5cGUnO1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgZGlyZWN0aXZlIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhbiBjbWF0LXBvcG92ZXIgdGFnLiBJdCBpc1xyXG4gKiByZXNwb25zaWJsZSBmb3IgdG9nZ2xpbmcgdGhlIGRpc3BsYXkgb2YgdGhlIHByb3ZpZGVkIHBvcG92ZXIgaW5zdGFuY2UuXHJcbiAqL1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1tjbWF0UG9wb3ZlclRyaWdnZXJGb3JdLFtjbWF0UG9wb3ZlclRhcmdldEF0XSxbY21hdFBvcG92ZXJUcmlnZ2VyT25dJyxcclxuICAgIHN0YW5kYWxvbmU6dHJ1ZSxcclxuICAgIGV4cG9ydEFzOiAnY21hdFBvcG92ZXJUcmlnZ2VyJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ21hdFBvcG92ZXJUcmlnZ2VyRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWhhc3BvcHVwJykgYXJpYUhhc3BvcHVwID0gdHJ1ZTtcclxuICAgIC8qKiBSZWZlcmVuY2VzIHRoZSBwb3BvdmVyIGluc3RhbmNlIHRoYXQgdGhlIHRyaWdnZXIgaXMgYXNzb2NpYXRlZCB3aXRoLiAqL1xyXG4gICAgQElucHV0KCdjbWF0UG9wb3ZlclRyaWdnZXJGb3InKSBwb3BvdmVyITogQ21hdFBvcG92ZXJQYW5lbDtcclxuXHJcbiAgICAvKiogUmVmZXJlbmNlcyB0aGUgcG9wb3ZlciB0YXJnZXQgaW5zdGFuY2UgdGhhdCB0aGUgdHJpZ2dlciBpcyBhc3NvY2lhdGVkIHdpdGguICovXHJcbiAgICBASW5wdXQoJ2NtYXRQb3BvdmVyVGFyZ2V0QXQnKSB0YXJnZXRFbGVtZW50ITogQ21hdFRhcmdldDtcclxuXHJcbiAgICAvKiogUG9wb3ZlciB0cmlnZ2VyIGV2ZW50ICovXHJcbiAgICBASW5wdXQoJ2NtYXRQb3BvdmVyVHJpZ2dlck9uJykgdHJpZ2dlckV2ZW50ITogQ21hdFBvcG92ZXJUcmlnZ2VyRXZlbnQ7XHJcblxyXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgYXNzb2NpYXRlZCBwb3BvdmVyIGlzIG9wZW5lZC4gKi9cclxuICAgIEBPdXRwdXQoKSBwb3BvdmVyT3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGFzc29jaWF0ZWQgcG9wb3ZlciBpcyBjbG9zZWQuICovXHJcbiAgICBAT3V0cHV0KCkgcG9wb3ZlckNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgICBwb3BvdmVyT3BlbmVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBwb3BvdmVyQ2xvc2VkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gICAgcHJpdmF0ZSBfcG9ydGFsITogVGVtcGxhdGVQb3J0YWw7XHJcbiAgICBwcml2YXRlIF9vdmVybGF5UmVmOiBPdmVybGF5UmVmIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwcml2YXRlIF9wb3BvdmVyT3BlbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfaGFsdCA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfYmFja2Ryb3BTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XHJcbiAgICBwcml2YXRlIF9wb3NpdGlvblN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcclxuICAgIHByaXZhdGUgX2RldGFjaG1lbnRzU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAgIHByaXZhdGUgX21vdXNlb3ZlclRpbWVyOiBhbnk7XHJcblxyXG4gICAgLy8gdHJhY2tpbmcgaW5wdXQgdHlwZSBpcyBuZWNlc3Nhcnkgc28gaXQncyBwb3NzaWJsZSB0byBvbmx5IGF1dG8tZm9jdXNcclxuICAgIC8vIHRoZSBmaXJzdCBpdGVtIG9mIHRoZSBsaXN0IHdoZW4gdGhlIHBvcG92ZXIgaXMgb3BlbmVkIHZpYSB0aGUga2V5Ym9hcmRcclxuICAgIHByaXZhdGUgX29wZW5lZEJ5TW91c2UgPSBmYWxzZTtcclxuXHJcbiAgICBwcml2YXRlIF9vbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuXHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBfb3ZlcmxheTogT3ZlcmxheSxcclxuICAgICAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIHByaXZhdGUgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfZGlyOiBEaXJlY3Rpb25hbGl0eSxcclxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICAgICkgeyB9XHJcblxyXG4gICAgLyoqIFdoZXRoZXIgdGhlIHBvcG92ZXIgaXMgb3Blbi4gKi9cclxuICAgIGdldCBwb3BvdmVyT3BlbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcG9wb3Zlck9wZW47XHJcbiAgICB9XHJcbiAgICAvKiogVGhlIHRleHQgZGlyZWN0aW9uIG9mIHRoZSBjb250YWluaW5nIGFwcC4gKi9cclxuICAgIGdldCBkaXIoKTogRGlyZWN0aW9uIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGlyICYmIHRoaXMuX2Rpci52YWx1ZSA9PT0gJ3J0bCcgPyAncnRsJyA6ICdsdHInO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcclxuICAgIG9uQ2xpY2soKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMucG9wb3Zlci50cmlnZ2VyRXZlbnQgPT09ICdjbGljaycpIHtcclxuICAgICAgICAgICAgdGhpcy50b2dnbGVQb3BvdmVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlZW50ZXInLCBbJyRldmVudCddKVxyXG4gICAgb25Nb3VzZUVudGVyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2hhbHQgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5wb3BvdmVyLnRyaWdnZXJFdmVudCA9PT0gJ2hvdmVyJykge1xyXG4gICAgICAgICAgICB0aGlzLl9tb3VzZW92ZXJUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuUG9wb3ZlcigpO1xyXG4gICAgICAgICAgICB9LCB0aGlzLnBvcG92ZXIuZW50ZXJEZWxheSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBbJyRldmVudCddKVxyXG4gICAgb25Nb3VzZUxlYXZlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnBvcG92ZXIudHJpZ2dlckV2ZW50ID09PSAnaG92ZXInKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9tb3VzZW92ZXJUaW1lcikge1xyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX21vdXNlb3ZlclRpbWVyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vdXNlb3ZlclRpbWVyID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5fcG9wb3Zlck9wZW4pIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5wb3BvdmVyLmNsb3NlRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVBvcG92ZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCB0aGlzLnBvcG92ZXIubGVhdmVEZWxheSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9oYWx0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pXHJcbiAgICBoYW5kbGVNb3VzZWRvd24oZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoZXZlbnQgJiYgIWlzRmFrZU1vdXNlZG93bkZyb21TY3JlZW5SZWFkZXIoZXZlbnQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX29wZW5lZEJ5TW91c2UgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9jaGVja1BvcG92ZXIoKTtcclxuICAgICAgICB0aGlzLl9zZXRDdXJyZW50Q29uZmlnKCk7XHJcbiAgICAgICAgdGhpcy5wb3BvdmVyLmNsb3NlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbG9zZVBvcG92ZXIoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95UG9wb3ZlcigpO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgLyoqIFRvZ2dsZXMgdGhlIHBvcG92ZXIgYmV0d2VlbiB0aGUgb3BlbiBhbmQgY2xvc2VkIHN0YXRlcy4gKi9cclxuICAgIHRvZ2dsZVBvcG92ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcG92ZXJPcGVuID8gdGhpcy5jbG9zZVBvcG92ZXIoKSA6IHRoaXMub3BlblBvcG92ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogT3BlbnMgdGhlIHBvcG92ZXIuICovXHJcbiAgICBvcGVuUG9wb3ZlcigpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3BvcG92ZXJPcGVuICYmICF0aGlzLl9oYWx0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU92ZXJsYXkoKS5hdHRhY2godGhpcy5fcG9ydGFsKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmliZVRvQmFja2Ryb3AoKTtcclxuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlVG9EZXRhY2htZW50cygpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5faW5pdFBvcG92ZXIoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIENsb3NlcyB0aGUgcG9wb3Zlci4gKi9cclxuICAgIGNsb3NlUG9wb3ZlcigpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5fb3ZlcmxheVJlZikge1xyXG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXNldFBvcG92ZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGVzdHJveVBvcG92ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogUmVtb3ZlcyB0aGUgcG9wb3ZlciBmcm9tIHRoZSBET00uICovXHJcbiAgICBkZXN0cm95UG9wb3ZlcigpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5fbW91c2VvdmVyVGltZXIpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX21vdXNlb3ZlclRpbWVyKTtcclxuICAgICAgICAgICAgdGhpcy5fbW91c2VvdmVyVGltZXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fb3ZlcmxheVJlZikge1xyXG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVJlZiA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuX2NsZWFuVXBTdWJzY3JpcHRpb25zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kubmV4dCgpO1xyXG4gICAgICAgIHRoaXMuX29uRGVzdHJveS5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBGb2N1c2VzIHRoZSBwb3BvdmVyIHRyaWdnZXIuICovXHJcbiAgICBmb2N1cygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIGVuc3VyZXMgdGhhdCB0aGUgcG9wb3ZlciBjbG9zZXMgd2hlbiB0aGUgb3ZlcmxheSBiYWNrZHJvcCBpcyBjbGlja2VkLlxyXG4gICAgICogV2UgZG8gbm90IHVzZSBmaXJzdCgpIGhlcmUgYmVjYXVzZSBkb2luZyBzbyB3b3VsZCBub3QgY2F0Y2ggY2xpY2tzIGZyb20gd2l0aGluXHJcbiAgICAgKiB0aGUgcG9wb3ZlciwgYW5kIGl0IHdvdWxkIGZhaWwgdG8gdW5zdWJzY3JpYmUgcHJvcGVybHkuIEluc3RlYWQsIHdlIHVuc3Vic2NyaWJlXHJcbiAgICAgKiBleHBsaWNpdGx5IHdoZW4gdGhlIHBvcG92ZXIgaXMgY2xvc2VkIG9yIGRlc3Ryb3llZC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfc3Vic2NyaWJlVG9CYWNrZHJvcCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5fb3ZlcmxheVJlZikge1xyXG4gICAgICAgICAgICAvKiogT25seSBzdWJzY3JpYmUgdG8gYmFja2Ryb3AgaWYgdHJpZ2dlciBldmVudCBpcyBjbGljayAqL1xyXG4gICAgICAgICAgICBpZiAodGhpcy50cmlnZ2VyRXZlbnQgPT09ICdjbGljaycgJiYgdGhpcy5wb3BvdmVyLmNsb3NlT25CYWNrZHJvcENsaWNrID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5UmVmXHJcbiAgICAgICAgICAgICAgICAgICAgLmJhY2tkcm9wQ2xpY2soKVxyXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnBvcG92ZXJDbG9zZWQkKSwgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSkpXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9wb3Zlci5lbWl0Q2xvc2VFdmVudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3N1YnNjcmliZVRvRGV0YWNobWVudHMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX292ZXJsYXlSZWYpIHtcclxuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVJlZlxyXG4gICAgICAgICAgICAgICAgLmRldGFjaG1lbnRzKClcclxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnBvcG92ZXJDbG9zZWQkKSwgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSkpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRQb3BvdmVyQ2xvc2VkKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBwb3BvdmVyIHN0YXRlIHRvIG9wZW4gYW5kIGZvY3VzZXMgdGhlIGZpcnN0IGl0ZW0gaWZcclxuICAgICAqIHRoZSBwb3BvdmVyIHdhcyBvcGVuZWQgdmlhIHRoZSBrZXlib2FyZC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfaW5pdFBvcG92ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fc2V0UG9wb3Zlck9wZW5lZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcmVzZXRzIHRoZSBwb3BvdmVyIHdoZW4gaXQncyBjbG9zZWQsIG1vc3QgaW1wb3J0YW50bHkgcmVzdG9yaW5nXHJcbiAgICAgKiBmb2N1cyB0byB0aGUgcG9wb3ZlciB0cmlnZ2VyIGlmIHRoZSBwb3BvdmVyIHdhcyBvcGVuZWQgdmlhIHRoZSBrZXlib2FyZC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfcmVzZXRQb3BvdmVyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3NldFBvcG92ZXJDbG9zZWQoKTtcclxuXHJcbiAgICAgICAgLy8gRm9jdXMgb25seSBuZWVkcyB0byBiZSByZXNldCB0byB0aGUgaG9zdCBlbGVtZW50IGlmIHRoZSBwb3BvdmVyIHdhcyBvcGVuZWRcclxuICAgICAgICAvLyBieSB0aGUga2V5Ym9hcmQgYW5kIG1hbnVhbGx5IHNoaWZ0ZWQgdG8gdGhlIGZpcnN0IHBvcG92ZXIgaXRlbS5cclxuICAgICAgICBpZiAoIXRoaXMuX29wZW5lZEJ5TW91c2UpIHtcclxuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9vcGVuZWRCeU1vdXNlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIHNldCBzdGF0ZSByYXRoZXIgdGhhbiB0b2dnbGUgdG8gc3VwcG9ydCB0cmlnZ2VycyBzaGFyaW5nIGEgcG9wb3ZlciAqL1xyXG4gICAgcHJpdmF0ZSBfc2V0UG9wb3Zlck9wZW5lZCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3BvcG92ZXJPcGVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJPcGVuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucG9wb3Zlck9wZW5lZCQubmV4dCgpO1xyXG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJPcGVuZWQuZW1pdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogc2V0IHN0YXRlIHJhdGhlciB0aGFuIHRvZ2dsZSB0byBzdXBwb3J0IHRyaWdnZXJzIHNoYXJpbmcgYSBwb3BvdmVyICovXHJcbiAgICBwcml2YXRlIF9zZXRQb3BvdmVyQ2xvc2VkKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLl9wb3BvdmVyT3Blbikge1xyXG4gICAgICAgICAgICB0aGlzLl9wb3BvdmVyT3BlbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wb3BvdmVyQ2xvc2VkJC5uZXh0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9wb3ZlckNsb3NlZC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogIFRoaXMgbWV0aG9kIGNoZWNrcyB0aGF0IGEgdmFsaWQgaW5zdGFuY2Ugb2YgTWRQb3BvdmVyIGhhcyBiZWVuIHBhc3NlZCBpbnRvXHJcbiAgICAgKiAgbWRQb3BvdmVyVHJpZ2dlckZvci4gSWYgbm90LCBhbiBleGNlcHRpb24gaXMgdGhyb3duLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9jaGVja1BvcG92ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBvcG92ZXIpIHtcclxuICAgICAgICAgICAgdGhyb3dDbWF0UG9wb3Zlck1pc3NpbmdFcnJvcigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqICBUaGlzIG1ldGhvZCBjcmVhdGVzIHRoZSBvdmVybGF5IGZyb20gdGhlIHByb3ZpZGVkIHBvcG92ZXIncyB0ZW1wbGF0ZSBhbmQgc2F2ZXMgaXRzXHJcbiAgICAgKiAgT3ZlcmxheVJlZiBzbyB0aGF0IGl0IGNhbiBiZSBhdHRhY2hlZCB0byB0aGUgRE9NIHdoZW4gb3BlblBvcG92ZXIgaXMgY2FsbGVkLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9jcmVhdGVPdmVybGF5KCk6IE92ZXJsYXlSZWYge1xyXG4gICAgICAgIGlmICghdGhpcy5fb3ZlcmxheVJlZikge1xyXG4gICAgICAgICAgICB0aGlzLl9wb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy5wb3BvdmVyLnRlbXBsYXRlUmVmLCB0aGlzLl92aWV3Q29udGFpbmVyUmVmKTtcclxuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5fZ2V0T3ZlcmxheUNvbmZpZygpO1xyXG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmVUb1Bvc2l0aW9ucyhjb25maWcucG9zaXRpb25TdHJhdGVneSBhcyBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3kpO1xyXG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5UmVmID0gdGhpcy5fb3ZlcmxheS5jcmVhdGUoY29uZmlnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9vdmVybGF5UmVmO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgYnVpbGRzIHRoZSBjb25maWd1cmF0aW9uIG9iamVjdCBuZWVkZWQgdG8gY3JlYXRlIHRoZSBvdmVybGF5LCB0aGUgT3ZlcmxheUNvbmZpZy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyBPdmVybGF5Q29uZmlnXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2dldE92ZXJsYXlDb25maWcoKTogT3ZlcmxheUNvbmZpZyB7XHJcbiAgICAgICAgY29uc3Qgb3ZlcmxheVN0YXRlID0gbmV3IE92ZXJsYXlDb25maWcoKTtcclxuICAgICAgICBvdmVybGF5U3RhdGUucG9zaXRpb25TdHJhdGVneSA9IHRoaXMuX2dldFBvc2l0aW9uKCk7XHJcblxyXG4gICAgICAgIC8qKiBEaXNwbGF5IG92ZXJsYXkgYmFja2Ryb3AgaWYgdHJpZ2dlciBldmVudCBpcyBjbGljayAqL1xyXG4gICAgICAgIGlmICh0aGlzLnRyaWdnZXJFdmVudCA9PT0gJ2NsaWNrJykge1xyXG4gICAgICAgICAgICBvdmVybGF5U3RhdGUuaGFzQmFja2Ryb3AgPSB0cnVlO1xyXG4gICAgICAgICAgICBvdmVybGF5U3RhdGUuYmFja2Ryb3BDbGFzcyA9ICdjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBvdmVybGF5U3RhdGUuZGlyZWN0aW9uID0gdGhpcy5fZGlyO1xyXG4gICAgICAgIG92ZXJsYXlTdGF0ZS5zY3JvbGxTdHJhdGVneSA9IHRoaXMuX2dldE92ZXJsYXlTY3JvbGxTdHJhdGVneSh0aGlzLnBvcG92ZXIuc2Nyb2xsU3RyYXRlZ3kpO1xyXG5cclxuICAgICAgICByZXR1cm4gb3ZlcmxheVN0YXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc2Nyb2xsIHN0cmF0ZWd5IHVzZWQgYnkgdGhlIGNkay9vdmVybGF5LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9nZXRPdmVybGF5U2Nyb2xsU3RyYXRlZ3koc3RyYXRlZ3k6IENtYXRQb3BvdmVyU2Nyb2xsU3RyYXRlZ3kpOiBTY3JvbGxTdHJhdGVneSB7XHJcbiAgICAgICAgc3dpdGNoIChzdHJhdGVneSkge1xyXG4gICAgICAgICAgICBjYXNlICdub29wJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMubm9vcCgpO1xyXG4gICAgICAgICAgICBjYXNlICdjbG9zZSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jsb2NrJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMuYmxvY2soKTtcclxuICAgICAgICAgICAgY2FzZSAncmVwb3NpdGlvbic6XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMaXN0ZW5zIHRvIGNoYW5nZXMgaW4gdGhlIHBvc2l0aW9uIG9mIHRoZSBvdmVybGF5IGFuZCBzZXRzIHRoZSBjb3JyZWN0IGNsYXNzZXNcclxuICAgICAqIG9uIHRoZSBwb3BvdmVyIGJhc2VkIG9uIHRoZSBuZXcgcG9zaXRpb24uIFRoaXMgZW5zdXJlcyB0aGUgYW5pbWF0aW9uIG9yaWdpbiBpcyBhbHdheXNcclxuICAgICAqIGNvcnJlY3QsIGV2ZW4gaWYgYSBmYWxsYmFjayBwb3NpdGlvbiBpcyB1c2VkIGZvciB0aGUgb3ZlcmxheS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfc3Vic2NyaWJlVG9Qb3NpdGlvbnMocG9zaXRpb246IEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uID0gcG9zaXRpb24ucG9zaXRpb25DaGFuZ2VzLnN1YnNjcmliZSgoY2hhbmdlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvc1ggPVxyXG4gICAgICAgICAgICAgICAgY2hhbmdlLmNvbm5lY3Rpb25QYWlyLm92ZXJsYXlYID09PSAnc3RhcnQnXHJcbiAgICAgICAgICAgICAgICAgICAgPyAnYWZ0ZXInXHJcbiAgICAgICAgICAgICAgICAgICAgOiBjaGFuZ2UuY29ubmVjdGlvblBhaXIub3ZlcmxheVggPT09ICdlbmQnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ2JlZm9yZSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnY2VudGVyJztcclxuICAgICAgICAgICAgY29uc3QgcG9zWSA9XHJcbiAgICAgICAgICAgICAgICBjaGFuZ2UuY29ubmVjdGlvblBhaXIub3ZlcmxheVkgPT09ICd0b3AnXHJcbiAgICAgICAgICAgICAgICAgICAgPyAnYmVsb3cnXHJcbiAgICAgICAgICAgICAgICAgICAgOiBjaGFuZ2UuY29ubmVjdGlvblBhaXIub3ZlcmxheVkgPT09ICdib3R0b20nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ2Fib3ZlJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdjZW50ZXInO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcG9zOiBDbWF0UG9wb3ZlclBvc2l0aW9uID1cclxuICAgICAgICAgICAgICAgIHRoaXMucG9wb3Zlci5wb3NpdGlvblswXSA9PT0gJ2Fib3ZlJyB8fCB0aGlzLnBvcG92ZXIucG9zaXRpb25bMF0gPT09ICdiZWxvdydcclxuICAgICAgICAgICAgICAgICAgICA/IFtwb3NZIGFzIENtYXRQb3BvdmVyUG9zaXRpb25TdGFydCwgcG9zWF1cclxuICAgICAgICAgICAgICAgICAgICA6IFtwb3NYIGFzIENtYXRQb3BvdmVyUG9zaXRpb25TdGFydCwgcG9zWV07XHJcblxyXG4gICAgICAgICAgICAvLyByZXF1aXJlZCBmb3IgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wb3BvdmVyLnpvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9wb3Zlci5zZXRDdXJyZW50U3R5bGVzKHBvcyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcG92ZXIuc2V0UG9zaXRpb25DbGFzc2VzKHBvcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgYnVpbGRzIHRoZSBwb3NpdGlvbiBzdHJhdGVneSBmb3IgdGhlIG92ZXJsYXksIHNvIHRoZSBwb3BvdmVyIGlzIHByb3Blcmx5IGNvbm5lY3RlZFxyXG4gICAgICogdG8gdGhlIHRyaWdnZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMgQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9nZXRQb3NpdGlvbigpOiBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3kge1xyXG4gICAgICAgIGNvbnN0IFtvcmlnaW5YLCBvcmlnaW4ybmRYLCBvcmlnaW4zcmRYXTogSG9yaXpvbnRhbENvbm5lY3Rpb25Qb3NbXSA9XHJcbiAgICAgICAgICAgIHRoaXMucG9wb3Zlci5wb3NpdGlvblswXSA9PT0gJ2JlZm9yZScgfHwgdGhpcy5wb3BvdmVyLnBvc2l0aW9uWzFdID09PSAnYWZ0ZXInXHJcbiAgICAgICAgICAgICAgICA/IFsnc3RhcnQnLCAnY2VudGVyJywgJ2VuZCddXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMucG9wb3Zlci5wb3NpdGlvblswXSA9PT0gJ2FmdGVyJyB8fCB0aGlzLnBvcG92ZXIucG9zaXRpb25bMV0gPT09ICdiZWZvcmUnXHJcbiAgICAgICAgICAgICAgICAgICAgPyBbJ2VuZCcsICdjZW50ZXInLCAnc3RhcnQnXVxyXG4gICAgICAgICAgICAgICAgICAgIDogWydjZW50ZXInLCAnc3RhcnQnLCAnZW5kJ107XHJcblxyXG4gICAgICAgIGNvbnN0IFtvcmlnaW5ZLCBvcmlnaW4ybmRZLCBvcmlnaW4zcmRZXTogVmVydGljYWxDb25uZWN0aW9uUG9zW10gPVxyXG4gICAgICAgICAgICB0aGlzLnBvcG92ZXIucG9zaXRpb25bMF0gPT09ICdhYm92ZScgfHwgdGhpcy5wb3BvdmVyLnBvc2l0aW9uWzFdID09PSAnYmVsb3cnXHJcbiAgICAgICAgICAgICAgICA/IFsndG9wJywgJ2NlbnRlcicsICdib3R0b20nXVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnBvcG92ZXIucG9zaXRpb25bMF0gPT09ICdiZWxvdycgfHwgdGhpcy5wb3BvdmVyLnBvc2l0aW9uWzFdID09PSAnYWJvdmUnXHJcbiAgICAgICAgICAgICAgICAgICAgPyBbJ2JvdHRvbScsICdjZW50ZXInLCAndG9wJ11cclxuICAgICAgICAgICAgICAgICAgICA6IFsnY2VudGVyJywgJ3RvcCcsICdib3R0b20nXTtcclxuXHJcbiAgICAgICAgY29uc3QgW292ZXJsYXlYLCBvdmVybGF5RmFsbGJhY2tYXTogSG9yaXpvbnRhbENvbm5lY3Rpb25Qb3NbXSA9XHJcbiAgICAgICAgICAgIHRoaXMucG9wb3Zlci5wb3NpdGlvblswXSA9PT0gJ2JlbG93JyB8fCB0aGlzLnBvcG92ZXIucG9zaXRpb25bMF0gPT09ICdhYm92ZSdcclxuICAgICAgICAgICAgICAgID8gW29yaWdpblgsIG9yaWdpblhdXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMucG9wb3Zlci5wb3NpdGlvblswXSA9PT0gJ2JlZm9yZSdcclxuICAgICAgICAgICAgICAgICAgICA/IFsnZW5kJywgJ3N0YXJ0J11cclxuICAgICAgICAgICAgICAgICAgICA6IFsnc3RhcnQnLCAnZW5kJ107XHJcblxyXG4gICAgICAgIGNvbnN0IFtvdmVybGF5WSwgb3ZlcmxheUZhbGxiYWNrWV06IFZlcnRpY2FsQ29ubmVjdGlvblBvc1tdID1cclxuICAgICAgICAgICAgdGhpcy5wb3BvdmVyLnBvc2l0aW9uWzBdID09PSAnYmVmb3JlJyB8fCB0aGlzLnBvcG92ZXIucG9zaXRpb25bMF0gPT09ICdhZnRlcidcclxuICAgICAgICAgICAgICAgID8gW29yaWdpblksIG9yaWdpblldXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMucG9wb3Zlci5wb3NpdGlvblswXSA9PT0gJ2JlbG93J1xyXG4gICAgICAgICAgICAgICAgICAgID8gWyd0b3AnLCAnYm90dG9tJ11cclxuICAgICAgICAgICAgICAgICAgICA6IFsnYm90dG9tJywgJ3RvcCddO1xyXG5cclxuICAgICAgICBjb25zdCBvcmlnaW5GYWxsYmFja1ggPSBvdmVybGF5WDtcclxuICAgICAgICBjb25zdCBvcmlnaW5GYWxsYmFja1kgPSBvdmVybGF5WTtcclxuXHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0WCA9XHJcbiAgICAgICAgICAgIHRoaXMucG9wb3Zlci54T2Zmc2V0ICYmICFpc05hTihOdW1iZXIodGhpcy5wb3BvdmVyLnhPZmZzZXQpKVxyXG4gICAgICAgICAgICAgICAgPyBOdW1iZXIodGhpcy5kaXIgPT09ICdsdHInID8gdGhpcy5wb3BvdmVyLnhPZmZzZXQgOiAtdGhpcy5wb3BvdmVyLnhPZmZzZXQpXHJcbiAgICAgICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0WSA9XHJcbiAgICAgICAgICAgIHRoaXMucG9wb3Zlci55T2Zmc2V0ICYmICFpc05hTihOdW1iZXIodGhpcy5wb3BvdmVyLnlPZmZzZXQpKVxyXG4gICAgICAgICAgICAgICAgPyBOdW1iZXIodGhpcy5wb3BvdmVyLnlPZmZzZXQpXHJcbiAgICAgICAgICAgICAgICA6IDA7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEZvciBvdmVycmlkaW5nIHBvc2l0aW9uIGVsZW1lbnQsIHdoZW4gYGNtYXRQb3BvdmVyVGFyZ2V0QXRgIGhhcyBhIHZhbGlkIGVsZW1lbnQgcmVmZXJlbmNlLlxyXG4gICAgICAgICAqIFVzZWZ1bCBmb3Igc3RpY2tpbmcgcG9wb3ZlciB0byBwYXJlbnQgZWxlbWVudCBhbmQgb2Zmc2V0dGluZyBhcnJvdyB0byB0cmlnZ2VyIGVsZW1lbnQuXHJcbiAgICAgICAgICogSWYgdW5kZWZpbmVkIGRlZmF1bHRzIHRvIHRoZSB0cmlnZ2VyIGVsZW1lbnQgcmVmZXJlbmNlLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGxldCBlbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZjtcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGFyZ2V0RWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgdGhpcy5wb3BvdmVyLmNvbnRhaW5lclBvc2l0aW9uaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgZWxlbWVudCA9IHRoaXMudGFyZ2V0RWxlbWVudC5fZWxlbWVudFJlZjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBwb3NpdGlvbnM6IENvbm5lY3RlZFBvc2l0aW9uW10gPSBbeyBvcmlnaW5YLCBvcmlnaW5ZLCBvdmVybGF5WCwgb3ZlcmxheVkgfV07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBvcG92ZXIucG9zaXRpb25bMF0gPT09ICdhYm92ZScgfHwgdGhpcy5wb3BvdmVyLnBvc2l0aW9uWzBdID09PSAnYmVsb3cnKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9ucyA9IFtcclxuICAgICAgICAgICAgICAgIHsgb3JpZ2luWCwgb3JpZ2luWSwgb3ZlcmxheVgsIG92ZXJsYXlZLCBvZmZzZXRZIH0sXHJcbiAgICAgICAgICAgICAgICB7IG9yaWdpblg6IG9yaWdpbjJuZFgsIG9yaWdpblksIG92ZXJsYXlYOiBvcmlnaW4ybmRYLCBvdmVybGF5WSwgb2Zmc2V0WSB9LFxyXG4gICAgICAgICAgICAgICAgeyBvcmlnaW5YOiBvcmlnaW4zcmRYLCBvcmlnaW5ZLCBvdmVybGF5WDogb3JpZ2luM3JkWCwgb3ZlcmxheVksIG9mZnNldFkgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5YLFxyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblk6IG9yaWdpbkZhbGxiYWNrWSxcclxuICAgICAgICAgICAgICAgICAgICBvdmVybGF5WCxcclxuICAgICAgICAgICAgICAgICAgICBvdmVybGF5WTogb3ZlcmxheUZhbGxiYWNrWSxcclxuICAgICAgICAgICAgICAgICAgICBvZmZzZXRZOiAtb2Zmc2V0WSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWDogb3JpZ2luMm5kWCxcclxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5ZOiBvcmlnaW5GYWxsYmFja1ksXHJcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVg6IG9yaWdpbjJuZFgsXHJcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVk6IG92ZXJsYXlGYWxsYmFja1ksXHJcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WTogLW9mZnNldFksXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblg6IG9yaWdpbjNyZFgsXHJcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogb3JpZ2luRmFsbGJhY2tZLFxyXG4gICAgICAgICAgICAgICAgICAgIG92ZXJsYXlYOiBvcmlnaW4zcmRYLFxyXG4gICAgICAgICAgICAgICAgICAgIG92ZXJsYXlZOiBvdmVybGF5RmFsbGJhY2tZLFxyXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFk6IC1vZmZzZXRZLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBvcG92ZXIucG9zaXRpb25bMF0gPT09ICdiZWZvcmUnIHx8IHRoaXMucG9wb3Zlci5wb3NpdGlvblswXSA9PT0gJ2FmdGVyJykge1xyXG4gICAgICAgICAgICBwb3NpdGlvbnMgPSBbXHJcbiAgICAgICAgICAgICAgICB7IG9yaWdpblgsIG9yaWdpblksIG92ZXJsYXlYLCBvdmVybGF5WSwgb2Zmc2V0WCB9LFxyXG4gICAgICAgICAgICAgICAgeyBvcmlnaW5YLCBvcmlnaW5ZOiBvcmlnaW4ybmRZLCBvdmVybGF5WCwgb3ZlcmxheVk6IG9yaWdpbjJuZFksIG9mZnNldFggfSxcclxuICAgICAgICAgICAgICAgIHsgb3JpZ2luWCwgb3JpZ2luWTogb3JpZ2luM3JkWSwgb3ZlcmxheVgsIG92ZXJsYXlZOiBvcmlnaW4zcmRZLCBvZmZzZXRYIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWDogb3JpZ2luRmFsbGJhY2tYLFxyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblksXHJcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVg6IG92ZXJsYXlGYWxsYmFja1gsXHJcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVksXHJcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WDogLW9mZnNldFgsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblg6IG9yaWdpbkZhbGxiYWNrWCxcclxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5ZOiBvcmlnaW4ybmRZLFxyXG4gICAgICAgICAgICAgICAgICAgIG92ZXJsYXlYOiBvdmVybGF5RmFsbGJhY2tYLFxyXG4gICAgICAgICAgICAgICAgICAgIG92ZXJsYXlZOiBvcmlnaW4ybmRZLFxyXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFg6IC1vZmZzZXRYLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5YOiBvcmlnaW5GYWxsYmFja1gsXHJcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogb3JpZ2luM3JkWSxcclxuICAgICAgICAgICAgICAgICAgICBvdmVybGF5WDogb3ZlcmxheUZhbGxiYWNrWCxcclxuICAgICAgICAgICAgICAgICAgICBvdmVybGF5WTogb3JpZ2luM3JkWSxcclxuICAgICAgICAgICAgICAgICAgICBvZmZzZXRYOiAtb2Zmc2V0WCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fb3ZlcmxheVxyXG4gICAgICAgICAgICAucG9zaXRpb24oKVxyXG4gICAgICAgICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyhlbGVtZW50KVxyXG4gICAgICAgICAgICAud2l0aExvY2tlZFBvc2l0aW9uKClcclxuICAgICAgICAgICAgLndpdGhQb3NpdGlvbnMocG9zaXRpb25zKVxyXG4gICAgICAgICAgICAud2l0aERlZmF1bHRPZmZzZXRYKG9mZnNldFgpXHJcbiAgICAgICAgICAgIC53aXRoRGVmYXVsdE9mZnNldFkob2Zmc2V0WSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY2xlYW5VcFN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fZGV0YWNobWVudHNTdWJzY3JpcHRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5fZGV0YWNobWVudHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9zZXRDdXJyZW50Q29uZmlnKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnRyaWdnZXJFdmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLnBvcG92ZXIudHJpZ2dlckV2ZW50ID0gdGhpcy50cmlnZ2VyRXZlbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBvcG92ZXIuc2V0Q3VycmVudFN0eWxlcygpO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
|