slick-components 5.0.28 → 17.0.2
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/{esm2020 → esm2022}/public-api.mjs +44 -44
- package/{esm2020 → esm2022}/slick-accordion/slick-accordion-item-header.component.mjs +14 -14
- package/esm2022/slick-accordion/slick-accordion-item.component.mjs +92 -0
- package/{esm2020 → esm2022}/slick-accordion/slick-accordion.component.mjs +80 -80
- package/{esm2020 → esm2022}/slick-accordion/slick-accordion.module.mjs +23 -23
- package/{esm2020 → esm2022}/slick-auto-complete/slick-auto-complete-list-item-template.directive.mjs +22 -22
- package/esm2022/slick-auto-complete/slick-auto-complete.component.mjs +388 -0
- package/{esm2020 → esm2022}/slick-auto-complete/slick-auto-complete.module.mjs +25 -25
- package/esm2022/slick-button-spinner/slick-button-spinner.component.mjs +175 -0
- package/{esm2020 → esm2022}/slick-button-spinner/slick-button-spinner.module.mjs +19 -19
- package/esm2022/slick-calendar/slick-calendar.component.mjs +271 -0
- package/{esm2020 → esm2022}/slick-calendar/slick-calendar.module.mjs +19 -19
- package/{esm2020 → esm2022}/slick-card/slick-card-header.component.mjs +14 -14
- package/esm2022/slick-card/slick-card.component.mjs +42 -0
- package/{esm2020 → esm2022}/slick-card/slick-card.module.mjs +20 -20
- package/{esm2020 → esm2022}/slick-components.mjs +4 -4
- package/{esm2020 → esm2022}/slick-confirm-dialog/slick-confirm-dialog.component.mjs +65 -65
- package/{esm2020 → esm2022}/slick-confirm-dialog/slick-confirm-dialog.module.mjs +20 -20
- package/{esm2020 → esm2022}/slick-container/slick-container-body.component.mjs +24 -24
- package/{esm2020 → esm2022}/slick-container/slick-container-footer.component.mjs +20 -20
- package/{esm2020 → esm2022}/slick-container/slick-container-header.component.mjs +20 -20
- package/{esm2020 → esm2022}/slick-container/slick-container.component.mjs +21 -21
- package/{esm2020 → esm2022}/slick-container/slick-container.module.mjs +25 -25
- package/{esm2020 → esm2022}/slick-context-menu/slick-context-menu-item.component.mjs +14 -14
- package/esm2022/slick-context-menu/slick-context-menu.component.mjs +48 -0
- package/{esm2020 → esm2022}/slick-context-menu/slick-context-menu.module.mjs +20 -20
- package/{esm2020 → esm2022}/slick-currency-mask/slick-currency-mask-options.model.mjs +11 -11
- package/esm2022/slick-currency-mask/slick-currency-mask.directive.mjs +233 -0
- package/{esm2020 → esm2022}/slick-currency-mask/slick-currency-mask.module.mjs +19 -19
- package/esm2022/slick-date-picker/slick-date-picker.component.mjs +278 -0
- package/{esm2020 → esm2022}/slick-date-picker/slick-date-picker.module.mjs +21 -21
- package/{esm2020 → esm2022}/slick-dialog/slick-dialog-footer.component.mjs +24 -24
- package/esm2022/slick-dialog/slick-dialog.component.mjs +294 -0
- package/{esm2020 → esm2022}/slick-dialog/slick-dialog.module.mjs +23 -23
- package/esm2022/slick-dialog/slick-dialog.service.mjs +68 -0
- package/{esm2020 → esm2022}/slick-drag-drop/slick-drag-drop.directive.mjs +13 -13
- package/{esm2020 → esm2022}/slick-drag-drop/slick-drag-drop.module.mjs +21 -21
- package/{esm2020 → esm2022}/slick-drag-drop/slick-draggable.directive.mjs +13 -13
- package/{esm2020 → esm2022}/slick-drop-down/slick-drop-down-button.model.mjs +7 -7
- package/esm2022/slick-drop-down/slick-drop-down.component.mjs +447 -0
- package/{esm2020 → esm2022}/slick-drop-down/slick-drop-down.module.mjs +24 -24
- package/esm2022/slick-drop-down/slick-drop-down.service.mjs +55 -0
- package/{esm2020 → esm2022}/slick-drop-list/slick-drop-list-grab.directive.mjs +18 -18
- package/{esm2020 → esm2022}/slick-drop-list/slick-drop-list-item.directive.mjs +18 -18
- package/esm2022/slick-drop-list/slick-drop-list.directive.mjs +215 -0
- package/{esm2020 → esm2022}/slick-drop-list/slick-drop-list.module.mjs +23 -23
- package/{esm2020 → esm2022}/slick-email-viewer/slick-email-viewer-dialog.component.mjs +62 -62
- package/esm2022/slick-email-viewer/slick-email-viewer.component.mjs +42 -0
- package/{esm2020 → esm2022}/slick-email-viewer/slick-email-viewer.module.mjs +26 -26
- package/{esm2020 → esm2022}/slick-emailer/slick-emailer-address.model.mjs +2 -2
- package/esm2022/slick-emailer/slick-emailer-dialog.component.mjs +153 -0
- package/esm2022/slick-emailer/slick-emailer.component.mjs +235 -0
- package/{esm2020 → esm2022}/slick-emailer/slick-emailer.model.mjs +2 -2
- package/{esm2020 → esm2022}/slick-emailer/slick-emailer.module.mjs +29 -29
- package/esm2022/slick-file-drop/slick-file-drop.component.mjs +156 -0
- package/{esm2020 → esm2022}/slick-file-drop/slick-file-drop.module.mjs +20 -20
- package/esm2022/slick-file-list/slick-file-list-item.component.mjs +190 -0
- package/esm2022/slick-file-list/slick-file-list.component.mjs +130 -0
- package/{esm2020 → esm2022}/slick-file-list/slick-file-list.module.mjs +23 -23
- package/{esm2020 → esm2022}/slick-file-model/slick-file.model.mjs +2 -2
- package/esm2022/slick-google-address-search/slick-google-address-search.directive.mjs +78 -0
- package/{esm2020 → esm2022}/slick-google-address-search/slick-google-address-search.module.mjs +19 -19
- package/esm2022/slick-google-map/slick-google-map-dialog.component.mjs +50 -0
- package/esm2022/slick-google-map/slick-google-map.component.mjs +48 -0
- package/{esm2020 → esm2022}/slick-google-map/slick-google-map.module.mjs +22 -22
- package/{esm2020 → esm2022}/slick-grid/slick-grid-column-template.directive.mjs +19 -19
- package/{esm2020 → esm2022}/slick-grid/slick-grid-column.model.mjs +66 -66
- package/{esm2020 → esm2022}/slick-grid/slick-grid-favorite.model.mjs +2 -2
- package/{esm2020 → esm2022}/slick-grid/slick-grid-request.model.mjs +2 -2
- package/{esm2020 → esm2022}/slick-grid/slick-grid-response.model.mjs +2 -2
- package/{esm2020 → esm2022}/slick-grid/slick-grid-sanitize.pipe.mjs +20 -20
- package/esm2022/slick-grid/slick-grid.component.mjs +793 -0
- package/{esm2020 → esm2022}/slick-grid/slick-grid.module.mjs +43 -43
- package/{esm2020 → esm2022}/slick-grid/slick-grid.options.mjs +11 -11
- package/esm2022/slick-grid/slick-grid.service.mjs +66 -0
- package/esm2022/slick-multi-select/slick-multi-select.component.mjs +415 -0
- package/{esm2020 → esm2022}/slick-multi-select/slick-multi-select.module.mjs +20 -20
- package/esm2022/slick-multi-select/slick-multi-select.service.mjs +78 -0
- package/esm2022/slick-ordered-list/slick-ordered-list.component.mjs +200 -0
- package/{esm2020 → esm2022}/slick-ordered-list/slick-ordered-list.module.mjs +20 -20
- package/esm2022/slick-paging/slick-paging.component.mjs +185 -0
- package/{esm2020 → esm2022}/slick-paging/slick-paging.module.mjs +19 -19
- package/esm2022/slick-photo-gallery/slick-photo-gallery.component.mjs +98 -0
- package/{esm2020 → esm2022}/slick-photo-gallery/slick-photo-gallery.model.mjs +2 -2
- package/{esm2020 → esm2022}/slick-photo-gallery/slick-photo-gallery.module.mjs +21 -21
- package/{esm2020 → esm2022}/slick-pick-list/slick-pick-list.component.mjs +84 -84
- package/{esm2020 → esm2022}/slick-pick-list/slick-pick-list.module.mjs +20 -20
- package/esm2022/slick-popover/slick-popover.component.mjs +204 -0
- package/{esm2020 → esm2022}/slick-popover/slick-popover.module.mjs +19 -19
- package/esm2022/slick-profile-picture/slick-profile-picture.component.mjs +267 -0
- package/{esm2020 → esm2022}/slick-profile-picture/slick-profile-picture.module.mjs +20 -20
- package/{esm2020 → esm2022}/slick-progress-bar/slick-progress-bar.module.mjs +18 -18
- package/esm2022/slick-progress-bar/slick-progress-bar.service.mjs +53 -0
- package/{esm2020 → esm2022}/slick-screen-blocker/slick-screen-blocker.module.mjs +18 -18
- package/esm2022/slick-screen-blocker/slick-screen-blocker.service.mjs +83 -0
- package/esm2022/slick-search-bar/slick-search-bar.component.mjs +130 -0
- package/{esm2020 → esm2022}/slick-search-bar/slick-search-bar.module.mjs +20 -20
- package/{esm2020 → esm2022}/slick-slider/slick-slider-tick.model.mjs +2 -2
- package/esm2022/slick-slider/slick-slider.component.mjs +90 -0
- package/{esm2020 → esm2022}/slick-slider/slick-slider.module.mjs +20 -20
- package/{esm2020 → esm2022}/slick-split-screen/slick-screen-split-left-content.component.mjs +15 -15
- package/{esm2020 → esm2022}/slick-split-screen/slick-screen-split-right-content.component.mjs +15 -15
- package/esm2022/slick-split-screen/slick-split-screen.component.mjs +159 -0
- package/{esm2020 → esm2022}/slick-split-screen/slick-split-screen.module.mjs +21 -21
- package/esm2022/slick-star-rating/slick-star-rating.component.mjs +91 -0
- package/{esm2020 → esm2022}/slick-star-rating/slick-star-rating.module.mjs +21 -21
- package/{esm2020 → esm2022}/slick-tabs/slick-tab-header.component.mjs +28 -28
- package/esm2022/slick-tabs/slick-tab.component.mjs +63 -0
- package/{esm2020 → esm2022}/slick-tabs/slick-tab.model.mjs +2 -2
- package/esm2022/slick-tabs/slick-tabs.component.mjs +107 -0
- package/{esm2020 → esm2022}/slick-tabs/slick-tabs.module.mjs +23 -23
- package/{esm2020 → esm2022}/slick-toast/slick-toast.module.mjs +18 -18
- package/esm2022/slick-toast/slick-toast.service.mjs +88 -0
- package/esm2022/slick-tree-view/slick-tree-node.model.mjs +18 -0
- package/esm2022/slick-tree-view/slick-tree-view.component.mjs +293 -0
- package/{esm2020 → esm2022}/slick-tree-view/slick-tree-view.module.mjs +22 -22
- package/esm2022/slick-type-ahead/slick-type-ahead.directive.mjs +164 -0
- package/{esm2020 → esm2022}/slick-type-ahead/slick-type-ahead.module.mjs +18 -18
- package/esm2022/slick-validation-indicator/slick-validation-indicator.directive.mjs +66 -0
- package/{esm2020 → esm2022}/slick-validation-indicator/slick-validation-indicator.module.mjs +19 -19
- package/esm2022/utils/slick-function-lock.service.mjs +55 -0
- package/esm2022/utils/slick-init.service.mjs +49 -0
- package/{esm2020 → esm2022}/utils/slick-log.service.mjs +23 -23
- package/{esm2020 → esm2022}/utils/slick-sleep.service.mjs +14 -14
- package/esm2022/utils/slick-utils.service.mjs +247 -0
- package/{fesm2020 → fesm2022}/slick-components.mjs +8495 -8495
- package/fesm2022/slick-components.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/package.json +11 -17
- package/public-api.d.ts +41 -41
- package/slick-accordion/slick-accordion-item-header.component.d.ts +5 -5
- package/slick-accordion/slick-accordion-item.component.d.ts +24 -24
- package/slick-accordion/slick-accordion.component.d.ts +22 -22
- package/slick-accordion/slick-accordion.module.d.ts +16 -16
- package/slick-auto-complete/slick-auto-complete-list-item-template.directive.d.ts +10 -10
- package/slick-auto-complete/slick-auto-complete.component.d.ts +60 -60
- package/slick-auto-complete/slick-auto-complete.module.d.ts +15 -15
- package/slick-button-spinner/slick-button-spinner.component.d.ts +28 -28
- package/slick-button-spinner/slick-button-spinner.module.d.ts +10 -10
- package/slick-calendar/slick-calendar.component.d.ts +53 -53
- package/slick-calendar/slick-calendar.module.d.ts +10 -10
- package/slick-card/slick-card-header.component.d.ts +5 -5
- package/slick-card/slick-card.component.d.ts +13 -13
- package/slick-card/slick-card.module.d.ts +12 -12
- package/slick-confirm-dialog/slick-confirm-dialog.component.d.ts +26 -26
- package/slick-confirm-dialog/slick-confirm-dialog.module.d.ts +11 -11
- package/slick-container/slick-container-body.component.d.ts +7 -7
- package/slick-container/slick-container-footer.component.d.ts +6 -6
- package/slick-container/slick-container-header.component.d.ts +6 -6
- package/slick-container/slick-container.component.d.ts +8 -8
- package/slick-container/slick-container.module.d.ts +19 -19
- package/slick-context-menu/slick-context-menu-item.component.d.ts +5 -5
- package/slick-context-menu/slick-context-menu.component.d.ts +13 -13
- package/slick-context-menu/slick-context-menu.module.d.ts +12 -12
- package/slick-currency-mask/slick-currency-mask-options.model.d.ts +10 -10
- package/slick-currency-mask/slick-currency-mask.directive.d.ts +29 -29
- package/slick-currency-mask/slick-currency-mask.module.d.ts +10 -10
- package/slick-date-picker/slick-date-picker.component.d.ts +45 -45
- package/slick-date-picker/slick-date-picker.module.d.ts +12 -12
- package/slick-dialog/slick-dialog-footer.component.d.ts +7 -7
- package/slick-dialog/slick-dialog.component.d.ts +56 -56
- package/slick-dialog/slick-dialog.module.d.ts +13 -13
- package/slick-dialog/slick-dialog.service.d.ts +17 -17
- package/slick-drag-drop/slick-drag-drop.directive.d.ts +5 -5
- package/slick-drag-drop/slick-drag-drop.module.d.ts +13 -13
- package/slick-drag-drop/slick-draggable.directive.d.ts +5 -5
- package/slick-drop-down/slick-drop-down-button.model.d.ts +13 -13
- package/slick-drop-down/slick-drop-down.component.d.ts +78 -78
- package/slick-drop-down/slick-drop-down.module.d.ts +14 -14
- package/slick-drop-down/slick-drop-down.service.d.ts +12 -12
- package/slick-drop-list/slick-drop-list-grab.directive.d.ts +7 -7
- package/slick-drop-list/slick-drop-list-item.directive.d.ts +7 -7
- package/slick-drop-list/slick-drop-list.directive.d.ts +33 -33
- package/slick-drop-list/slick-drop-list.module.d.ts +16 -16
- package/slick-email-viewer/slick-email-viewer-dialog.component.d.ts +19 -19
- package/slick-email-viewer/slick-email-viewer.component.d.ts +13 -13
- package/slick-email-viewer/slick-email-viewer.module.d.ts +18 -18
- package/slick-emailer/slick-emailer-address.model.d.ts +10 -10
- package/slick-emailer/slick-emailer-dialog.component.d.ts +33 -33
- package/slick-emailer/slick-emailer.component.d.ts +50 -50
- package/slick-emailer/slick-emailer.model.d.ts +16 -16
- package/slick-emailer/slick-emailer.module.d.ts +21 -21
- package/slick-file-drop/slick-file-drop.component.d.ts +25 -25
- package/slick-file-drop/slick-file-drop.module.d.ts +11 -11
- package/slick-file-list/slick-file-list-item.component.d.ts +37 -37
- package/slick-file-list/slick-file-list.component.d.ts +31 -31
- package/slick-file-list/slick-file-list.module.d.ts +14 -14
- package/slick-file-model/slick-file.model.d.ts +28 -28
- package/slick-google-address-search/slick-google-address-search.directive.d.ts +16 -17
- package/slick-google-address-search/slick-google-address-search.module.d.ts +10 -10
- package/slick-google-map/slick-google-map-dialog.component.d.ts +15 -16
- package/slick-google-map/slick-google-map.component.d.ts +17 -18
- package/slick-google-map/slick-google-map.module.d.ts +14 -14
- package/slick-grid/slick-grid-column-template.directive.d.ts +9 -9
- package/slick-grid/slick-grid-column.model.d.ts +64 -64
- package/slick-grid/slick-grid-favorite.model.d.ts +9 -9
- package/slick-grid/slick-grid-request.model.d.ts +33 -33
- package/slick-grid/slick-grid-response.model.d.ts +8 -8
- package/slick-grid/slick-grid-sanitize.pipe.d.ts +10 -10
- package/slick-grid/slick-grid.component.d.ts +119 -119
- package/slick-grid/slick-grid.module.d.ts +32 -32
- package/slick-grid/slick-grid.options.d.ts +35 -35
- package/slick-grid/slick-grid.service.d.ts +12 -12
- package/slick-multi-select/slick-multi-select.component.d.ts +69 -69
- package/slick-multi-select/slick-multi-select.module.d.ts +11 -11
- package/slick-multi-select/slick-multi-select.service.d.ts +9 -9
- package/slick-ordered-list/slick-ordered-list.component.d.ts +28 -28
- package/slick-ordered-list/slick-ordered-list.module.d.ts +11 -11
- package/slick-paging/slick-paging.component.d.ts +31 -31
- package/slick-paging/slick-paging.module.d.ts +10 -10
- package/slick-photo-gallery/slick-photo-gallery.component.d.ts +26 -26
- package/slick-photo-gallery/slick-photo-gallery.model.d.ts +8 -8
- package/slick-photo-gallery/slick-photo-gallery.module.d.ts +12 -12
- package/slick-pick-list/slick-pick-list.component.d.ts +24 -24
- package/slick-pick-list/slick-pick-list.module.d.ts +11 -11
- package/slick-popover/slick-popover.component.d.ts +39 -39
- package/slick-popover/slick-popover.module.d.ts +10 -10
- package/slick-profile-picture/slick-profile-picture.component.d.ts +29 -29
- package/slick-profile-picture/slick-profile-picture.module.d.ts +11 -11
- package/slick-progress-bar/slick-progress-bar.module.d.ts +9 -9
- package/slick-progress-bar/slick-progress-bar.service.d.ts +12 -12
- package/slick-screen-blocker/slick-screen-blocker.module.d.ts +9 -9
- package/slick-screen-blocker/slick-screen-blocker.service.d.ts +16 -16
- package/slick-search-bar/slick-search-bar.component.d.ts +37 -37
- package/slick-search-bar/slick-search-bar.module.d.ts +11 -11
- package/slick-slider/slick-slider-tick.model.d.ts +10 -10
- package/slick-slider/slick-slider.component.d.ts +29 -29
- package/slick-slider/slick-slider.module.d.ts +11 -11
- package/slick-split-screen/slick-screen-split-left-content.component.d.ts +6 -6
- package/slick-split-screen/slick-screen-split-right-content.component.d.ts +6 -6
- package/slick-split-screen/slick-split-screen.component.d.ts +40 -40
- package/slick-split-screen/slick-split-screen.module.d.ts +14 -14
- package/slick-star-rating/slick-star-rating.component.d.ts +28 -28
- package/slick-star-rating/slick-star-rating.module.d.ts +12 -12
- package/slick-tabs/slick-tab-header.component.d.ts +12 -12
- package/slick-tabs/slick-tab.component.d.ts +22 -22
- package/slick-tabs/slick-tab.model.d.ts +10 -10
- package/slick-tabs/slick-tabs.component.d.ts +25 -25
- package/slick-tabs/slick-tabs.module.d.ts +16 -16
- package/slick-toast/slick-toast.module.d.ts +9 -9
- package/slick-toast/slick-toast.service.d.ts +16 -16
- package/slick-tree-view/slick-tree-node.model.d.ts +30 -30
- package/slick-tree-view/slick-tree-view.component.d.ts +62 -62
- package/slick-tree-view/slick-tree-view.module.d.ts +13 -13
- package/slick-type-ahead/slick-type-ahead.directive.d.ts +25 -25
- package/slick-type-ahead/slick-type-ahead.module.d.ts +9 -9
- package/slick-validation-indicator/slick-validation-indicator.directive.d.ts +22 -22
- package/slick-validation-indicator/slick-validation-indicator.module.d.ts +10 -10
- package/utils/slick-function-lock.service.d.ts +9 -9
- package/utils/slick-init.service.d.ts +21 -21
- package/utils/slick-log.service.d.ts +9 -9
- package/utils/slick-sleep.service.d.ts +6 -6
- package/utils/slick-utils.service.d.ts +24 -24
- package/esm2020/slick-accordion/slick-accordion-item.component.mjs +0 -92
- package/esm2020/slick-auto-complete/slick-auto-complete.component.mjs +0 -388
- package/esm2020/slick-button-spinner/slick-button-spinner.component.mjs +0 -175
- package/esm2020/slick-calendar/slick-calendar.component.mjs +0 -271
- package/esm2020/slick-card/slick-card.component.mjs +0 -42
- package/esm2020/slick-context-menu/slick-context-menu.component.mjs +0 -48
- package/esm2020/slick-currency-mask/slick-currency-mask.directive.mjs +0 -233
- package/esm2020/slick-date-picker/slick-date-picker.component.mjs +0 -278
- package/esm2020/slick-dialog/slick-dialog.component.mjs +0 -294
- package/esm2020/slick-dialog/slick-dialog.service.mjs +0 -68
- package/esm2020/slick-drop-down/slick-drop-down.component.mjs +0 -447
- package/esm2020/slick-drop-down/slick-drop-down.service.mjs +0 -55
- package/esm2020/slick-drop-list/slick-drop-list.directive.mjs +0 -215
- package/esm2020/slick-email-viewer/slick-email-viewer.component.mjs +0 -42
- package/esm2020/slick-emailer/slick-emailer-dialog.component.mjs +0 -153
- package/esm2020/slick-emailer/slick-emailer.component.mjs +0 -235
- package/esm2020/slick-file-drop/slick-file-drop.component.mjs +0 -156
- package/esm2020/slick-file-list/slick-file-list-item.component.mjs +0 -190
- package/esm2020/slick-file-list/slick-file-list.component.mjs +0 -130
- package/esm2020/slick-google-address-search/slick-google-address-search.directive.mjs +0 -78
- package/esm2020/slick-google-map/slick-google-map-dialog.component.mjs +0 -50
- package/esm2020/slick-google-map/slick-google-map.component.mjs +0 -48
- package/esm2020/slick-grid/slick-grid.component.mjs +0 -793
- package/esm2020/slick-grid/slick-grid.service.mjs +0 -66
- package/esm2020/slick-multi-select/slick-multi-select.component.mjs +0 -415
- package/esm2020/slick-multi-select/slick-multi-select.service.mjs +0 -78
- package/esm2020/slick-ordered-list/slick-ordered-list.component.mjs +0 -200
- package/esm2020/slick-paging/slick-paging.component.mjs +0 -185
- package/esm2020/slick-photo-gallery/slick-photo-gallery.component.mjs +0 -98
- package/esm2020/slick-popover/slick-popover.component.mjs +0 -204
- package/esm2020/slick-profile-picture/slick-profile-picture.component.mjs +0 -267
- package/esm2020/slick-progress-bar/slick-progress-bar.service.mjs +0 -53
- package/esm2020/slick-screen-blocker/slick-screen-blocker.service.mjs +0 -83
- package/esm2020/slick-search-bar/slick-search-bar.component.mjs +0 -130
- package/esm2020/slick-slider/slick-slider.component.mjs +0 -90
- package/esm2020/slick-split-screen/slick-split-screen.component.mjs +0 -159
- package/esm2020/slick-star-rating/slick-star-rating.component.mjs +0 -91
- package/esm2020/slick-tabs/slick-tab.component.mjs +0 -63
- package/esm2020/slick-tabs/slick-tabs.component.mjs +0 -107
- package/esm2020/slick-toast/slick-toast.service.mjs +0 -88
- package/esm2020/slick-tree-view/slick-tree-node.model.mjs +0 -18
- package/esm2020/slick-tree-view/slick-tree-view.component.mjs +0 -293
- package/esm2020/slick-type-ahead/slick-type-ahead.directive.mjs +0 -164
- package/esm2020/slick-validation-indicator/slick-validation-indicator.directive.mjs +0 -66
- package/esm2020/utils/slick-function-lock.service.mjs +0 -55
- package/esm2020/utils/slick-init.service.mjs +0 -49
- package/esm2020/utils/slick-utils.service.mjs +0 -247
- package/fesm2015/slick-components.mjs +0 -9084
- package/fesm2015/slick-components.mjs.map +0 -1
- package/fesm2020/slick-components.mjs.map +0 -1
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { Component, Input, ViewChild } from "@angular/core";
|
|
2
|
-
import { SlickSleepService } from "../utils/slick-sleep.service";
|
|
3
|
-
import { SlickUtilsService } from "../utils/slick-utils.service";
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/common";
|
|
6
|
-
export class SlickAccordionItemComponent {
|
|
7
|
-
constructor() {
|
|
8
|
-
this.noExpand = false;
|
|
9
|
-
this.PIXELS_PER_TICK = 15;
|
|
10
|
-
this.isExpanded = false;
|
|
11
|
-
}
|
|
12
|
-
ngOnChanges() {
|
|
13
|
-
this.noExpand = (this.noExpand.toString().toLowerCase() === 'true') ? true : false;
|
|
14
|
-
}
|
|
15
|
-
async onHeaderClicked() {
|
|
16
|
-
if (this.noExpand) {
|
|
17
|
-
if (this.onChangeCallback)
|
|
18
|
-
this.onChangeCallback(this.index);
|
|
19
|
-
}
|
|
20
|
-
else {
|
|
21
|
-
if (this.isExpanded === false)
|
|
22
|
-
this.expand();
|
|
23
|
-
else
|
|
24
|
-
this.collapse();
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
async expand() {
|
|
28
|
-
if (this.noExpand)
|
|
29
|
-
return;
|
|
30
|
-
if (this.isExpanded === true)
|
|
31
|
-
return;
|
|
32
|
-
if (this.onChangeCallback)
|
|
33
|
-
this.onChangeCallback(this.index);
|
|
34
|
-
this.isExpanded = true;
|
|
35
|
-
await SlickUtilsService.waitForElementRef(this.slickAccordionItemRef);
|
|
36
|
-
// Give the collapses a chance to collapse down before we expand
|
|
37
|
-
await SlickSleepService.sleep(100);
|
|
38
|
-
const maxHeight = this.slickAccordionBodyRef.nativeElement.offsetHeight;
|
|
39
|
-
this.slickAccordionBouncePaddingRef.nativeElement.style.display = "block";
|
|
40
|
-
this.slickAccordionBodyWrapperRef.nativeElement.style.maxHeight = (maxHeight + 30) + "px";
|
|
41
|
-
await SlickSleepService.sleep(125);
|
|
42
|
-
this.slickAccordionBodyWrapperRef.nativeElement.style.maxHeight = maxHeight + "px";
|
|
43
|
-
await SlickSleepService.sleep(100);
|
|
44
|
-
this.slickAccordionBouncePaddingRef.nativeElement.style.display = "none";
|
|
45
|
-
this.slickAccordionBodyWrapperRef.nativeElement.style.maxHeight = "none";
|
|
46
|
-
}
|
|
47
|
-
async collapse(ignoreOnChangeCallback = false) {
|
|
48
|
-
if (this.isExpanded === false)
|
|
49
|
-
return;
|
|
50
|
-
this.isExpanded = false;
|
|
51
|
-
// The animations requires a number for maxHeight. Just set it to the current height, then to 0
|
|
52
|
-
const maxHeight = this.slickAccordionBodyRef.nativeElement.offsetHeight;
|
|
53
|
-
this.slickAccordionBodyWrapperRef.nativeElement.style.maxHeight = maxHeight + "px";
|
|
54
|
-
await SlickSleepService.sleep();
|
|
55
|
-
this.slickAccordionBodyWrapperRef.nativeElement.style.maxHeight = "0";
|
|
56
|
-
if (this.onChangeCallback && ignoreOnChangeCallback === false)
|
|
57
|
-
this.onChangeCallback(this.index);
|
|
58
|
-
}
|
|
59
|
-
getKey() {
|
|
60
|
-
return this.key || null;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
/** @nocollapse */ SlickAccordionItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: SlickAccordionItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
64
|
-
/** @nocollapse */ SlickAccordionItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: SlickAccordionItemComponent, selector: "slick-accordion-item", inputs: { header: "header", headerIcon: "headerIcon", key: "key", noExpand: "noExpand" }, viewQueries: [{ propertyName: "slickAccordionItemRef", first: true, predicate: ["slickAccordionItemRef"], descendants: true }, { propertyName: "slickAccordionBodyWrapperRef", first: true, predicate: ["slickAccordionBodyWrapperRef"], descendants: true }, { propertyName: "slickAccordionBodyRef", first: true, predicate: ["slickAccordionBodyRef"], descendants: true }, { propertyName: "slickAccordionBouncePaddingRef", first: true, predicate: ["slickAccordionBouncePaddingRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #slickAccordionItemRef class=\"slick-accordion-item\">\r\n\t<div *ngIf=\"header\" class=\"slick-accordion-header card-header\" [ngClass]=\"{'badge-primary' : isExpanded }\" (click)=\"onHeaderClicked()\"><i *ngIf=\"headerIcon\" class=\"far\" [ngClass]=\"headerIcon\"></i> {{header}}</div>\r\n\t<div *ngIf=\"!header\" class=\"slick-accordion-header card-header\" [ngClass]=\"{'badge-primary' : isExpanded }\" (click)=\"onHeaderClicked()\"><ng-content select=\"slick-accordion-item-header\"></ng-content></div>\r\n\t<div #slickAccordionBodyWrapperRef class=\"slick-accordion-body-wrapper\">\r\n\t\t<div #slickAccordionBodyRef class=\"card-body slick-accordion-body\"><ng-content></ng-content></div>\r\n\t\t<div #slickAccordionBouncePaddingRef style=\"display: none; min-height: 30px;\"></div>\r\n\t</div>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
65
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: SlickAccordionItemComponent, decorators: [{
|
|
66
|
-
type: Component,
|
|
67
|
-
args: [{ selector: "slick-accordion-item", template: "<div #slickAccordionItemRef class=\"slick-accordion-item\">\r\n\t<div *ngIf=\"header\" class=\"slick-accordion-header card-header\" [ngClass]=\"{'badge-primary' : isExpanded }\" (click)=\"onHeaderClicked()\"><i *ngIf=\"headerIcon\" class=\"far\" [ngClass]=\"headerIcon\"></i> {{header}}</div>\r\n\t<div *ngIf=\"!header\" class=\"slick-accordion-header card-header\" [ngClass]=\"{'badge-primary' : isExpanded }\" (click)=\"onHeaderClicked()\"><ng-content select=\"slick-accordion-item-header\"></ng-content></div>\r\n\t<div #slickAccordionBodyWrapperRef class=\"slick-accordion-body-wrapper\">\r\n\t\t<div #slickAccordionBodyRef class=\"card-body slick-accordion-body\"><ng-content></ng-content></div>\r\n\t\t<div #slickAccordionBouncePaddingRef style=\"display: none; min-height: 30px;\"></div>\r\n\t</div>\r\n</div>\r\n" }]
|
|
68
|
-
}], ctorParameters: function () { return []; }, propDecorators: { header: [{
|
|
69
|
-
type: Input,
|
|
70
|
-
args: ["header"]
|
|
71
|
-
}], headerIcon: [{
|
|
72
|
-
type: Input,
|
|
73
|
-
args: ["headerIcon"]
|
|
74
|
-
}], key: [{
|
|
75
|
-
type: Input,
|
|
76
|
-
args: ["key"]
|
|
77
|
-
}], noExpand: [{
|
|
78
|
-
type: Input
|
|
79
|
-
}], slickAccordionItemRef: [{
|
|
80
|
-
type: ViewChild,
|
|
81
|
-
args: ["slickAccordionItemRef"]
|
|
82
|
-
}], slickAccordionBodyWrapperRef: [{
|
|
83
|
-
type: ViewChild,
|
|
84
|
-
args: ["slickAccordionBodyWrapperRef"]
|
|
85
|
-
}], slickAccordionBodyRef: [{
|
|
86
|
-
type: ViewChild,
|
|
87
|
-
args: ["slickAccordionBodyRef"]
|
|
88
|
-
}], slickAccordionBouncePaddingRef: [{
|
|
89
|
-
type: ViewChild,
|
|
90
|
-
args: ["slickAccordionBouncePaddingRef"]
|
|
91
|
-
}] } });
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2stYWNjb3JkaW9uLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvc2xpY2stYWNjb3JkaW9uL3NsaWNrLWFjY29yZGlvbi1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL3NsaWNrLWFjY29yZGlvbi9zbGljay1hY2NvcmRpb24taXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQXlCLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7QUFNakUsTUFBTSxPQUFPLDJCQUEyQjtJQWtCdkM7UUFkUyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBTzFCLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBRTlCLGVBQVUsR0FBWSxLQUFLLENBQUM7SUFLWixDQUFDO0lBRWpCLFdBQVc7UUFDVixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDcEYsQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlO1FBQ3BCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQixJQUFJLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbkM7YUFDSTtZQUNKLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxLQUFLO2dCQUM1QixJ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QjtnQkFDTCxxQkFBcUI7c0JBQXhELFNBQVM7dUJBQUMsdUJBQXVCO2dCQUNXLDhCQUE4QjtzQkFBMUUsU0FBUzt1QkFBQyxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIE9uQ2hhbmdlcyB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFNsaWNrU2xlZXBTZXJ2aWNlIH0gZnJvbSBcIi4uL3V0aWxzL3NsaWNrLXNsZWVwLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2xpY2tVdGlsc1NlcnZpY2UgfSBmcm9tIFwiLi4vdXRpbHMvc2xpY2stdXRpbHMuc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6IFwic2xpY2stYWNjb3JkaW9uLWl0ZW1cIixcclxuXHR0ZW1wbGF0ZVVybDogXCJzbGljay1hY2NvcmRpb24taXRlbS5jb21wb25lbnQuaHRtbFwiXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbGlja0FjY29yZGlvbkl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG5cdEBJbnB1dChcImhlYWRlclwiKSBoZWFkZXI6IHN0cmluZztcclxuXHRASW5wdXQoXCJoZWFkZXJJY29uXCIpIGhlYWRlckljb246IHN0cmluZztcclxuXHRASW5wdXQoXCJrZXlcIikga2V5OiBzdHJpbmc7XHJcblx0QElucHV0KCkgbm9FeHBhbmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0QFZpZXdDaGlsZChcInNsaWNrQWNjb3JkaW9uSXRlbVJlZlwiKSBzbGlja0FjY29yZGlvbkl0ZW1SZWY6IEVsZW1lbnRSZWY7XHJcblx0QFZpZXdDaGlsZChcInNsaWNrQWNjb3JkaW9uQm9keVdyYXBwZXJSZWZcIikgc2xpY2tBY2NvcmRpb25Cb2R5V3JhcHBlclJlZjogRWxlbWVudFJlZjtcclxuXHRAVmlld0NoaWxkKFwic2xpY2tBY2NvcmRpb25Cb2R5UmVmXCIpIHNsaWNrQWNjb3JkaW9uQm9keVJlZjogRWxlbWVudFJlZjtcclxuXHRAVmlld0NoaWxkKFwic2xpY2tBY2NvcmRpb25Cb3VuY2VQYWRkaW5nUmVmXCIpIHNsaWNrQWNjb3JkaW9uQm91bmNlUGFkZGluZ1JlZjogRWxlbWVudFJlZjtcclxuXHJcblx0cmVhZG9ubHkgUElYRUxTX1BFUl9USUNLID0gMTU7XHJcblxyXG5cdGlzRXhwYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRpbmRleDogbnVtYmVyO1xyXG5cdC8vIFRoaXMgd2lsbCBiZSBzZXQgaW4gdGhlIHNsaWNrLWFjY29yZGlvbi5jb21wb25lbnQgYXMgYSBjYWxsYmFja1xyXG5cdG9uQ2hhbmdlQ2FsbGJhY2s6IGFueTtcclxuXHJcblx0Y29uc3RydWN0b3IoKSB7IH1cclxuXHJcblx0bmdPbkNoYW5nZXMoKSB7XHJcblx0XHR0aGlzLm5vRXhwYW5kID0gKHRoaXMubm9FeHBhbmQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpID8gdHJ1ZSA6IGZhbHNlO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgb25IZWFkZXJDbGlja2VkKCkge1xyXG5cdFx0aWYgKHRoaXMubm9FeHBhbmQpIHtcclxuXHRcdFx0aWYgKHRoaXMub25DaGFuZ2VDYWxsYmFjaylcclxuXHRcdFx0XHR0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sodGhpcy5pbmRleCk7XHJcblx0XHR9XHJcblx0XHRlbHNlIHtcclxuXHRcdFx0aWYgKHRoaXMuaXNFeHBhbmRlZCA9PT0gZmFsc2UpXHJcblx0XHRcdFx0dGhpcy5leHBhbmQoKTtcclxuXHRcdFx0ZWxzZVxyXG5cdFx0XHRcdHRoaXMuY29sbGFwc2UoKTtcclxuXHRcdH1cclxuXHJcblx0fVxyXG5cclxuXHRhc3luYyBleHBhbmQoKSB7XHJcblx0XHRpZiAodGhpcy5ub0V4cGFuZClcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdGlmICh0aGlzLmlzRXhwYW5kZWQgPT09IHRydWUpXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRpZiAodGhpcy5vbkNoYW5nZUNhbGxiYWNrKVxyXG5cdFx0XHR0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sodGhpcy5pbmRleCk7XHJcblxyXG5cdFx0dGhpcy5pc0V4cGFuZGVkID0gdHJ1ZTtcclxuXHJcblx0XHRhd2FpdCBTbGlja1V0aWxzU2VydmljZS53YWl0Rm9yRWxlbWVudFJlZih0aGlzLnNsaWNrQWNjb3JkaW9uSXRlbVJlZik7XHJcblxyXG5cdFx0Ly8gR2l2ZSB0aGUgY29sbGFwc2VzIGEgY2hhbmNlIHRvIGNvbGxhcHNlIGRvd24gYmVmb3JlIHdlIGV4cGFuZFxyXG5cdFx0YXdhaXQgU2xpY2tTbGVlcFNlcnZpY2Uuc2xlZXAoMTAwKTtcclxuXHRcdGNvbnN0IG1heEhlaWdodCA9ICg8SFRNTERpdkVsZW1lbnQ+dGhpcy5zbGlja0FjY29yZGlvbkJvZHlSZWYubmF0aXZlRWxlbWVudCkub2Zmc2V0SGVpZ2h0O1xyXG5cdFx0KDxIVE1MRGl2RWxlbWVudD50aGlzLnNsaWNrQWNjb3JkaW9uQm91bmNlUGFkZGluZ1JlZi5uYXRpdmVFbGVtZW50KS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xyXG5cdFx0KDxIVE1MRGl2RWxlbWVudD50aGlzLnNsaWNrQWNjb3JkaW9uQm9keVdyYXBwZXJSZWYubmF0aXZlRWxlbWVudCkuc3R5bGUubWF4SGVpZ2h0ID0gKG1heEhlaWdodCArIDMwKSArIFwicHhcIjtcclxuXHRcdGF3YWl0IFNsaWNrU2xlZXBTZXJ2aWNlLnNsZWVwKDEyNSk7XHJcblx0XHQoPEhUTUxEaXZFbGVtZW50PnRoaXMuc2xpY2tBY2NvcmRpb25Cb2R5V3JhcHBlclJlZi5uYXRpdmVFbGVtZW50KS5zdHlsZS5tYXhIZWlnaHQgPSBtYXhIZWlnaHQgKyBcInB4XCI7XHJcblx0XHRhd2FpdCBTbGlja1NsZWVwU2VydmljZS5zbGVlcCgxMDApO1xyXG5cdFx0KDxIVE1MRGl2RWxlbWVudD50aGlzLnNsaWNrQWNjb3JkaW9uQm91bmNlUGFkZGluZ1JlZi5uYXRpdmVFbGVtZW50KS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcblx0XHQoPEhUTUxEaXZFbGVtZW50PnRoaXMuc2xpY2tBY2NvcmRpb25Cb2R5V3JhcHBlclJlZi5uYXRpdmVFbGVtZW50KS5zdHlsZS5tYXhIZWlnaHQgPSBcIm5vbmVcIjtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGNvbGxhcHNlKGlnbm9yZU9uQ2hhbmdlQ2FsbGJhY2s6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG5cdFx0aWYgKHRoaXMuaXNFeHBhbmRlZCA9PT0gZmFsc2UpXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHR0aGlzLmlzRXhwYW5kZWQgPSBmYWxzZTtcclxuXHJcblx0XHQvLyBUaGUgYW5pbWF0aW9ucyByZXF1aXJlcyBhIG51bWJlciBmb3IgbWF4SGVpZ2h0LiAgSnVzdCBzZXQgaXQgdG8gdGhlIGN1cnJlbnQgaGVpZ2h0LCB0aGVuIHRvIDBcclxuXHRcdGNvbnN0IG1heEhlaWdodCA9ICg8SFRNTERpdkVsZW1lbnQ+dGhpcy5zbGlja0FjY29yZGlvbkJvZHlSZWYubmF0aXZlRWxlbWVudCkub2Zmc2V0SGVpZ2h0O1xyXG5cdFx0KDxIVE1MRGl2RWxlbWVudD50aGlzLnNsaWNrQWNjb3JkaW9uQm9keVdyYXBwZXJSZWYubmF0aXZlRWxlbWVudCkuc3R5bGUubWF4SGVpZ2h0ID0gbWF4SGVpZ2h0ICsgXCJweFwiO1xyXG5cdFx0YXdhaXQgU2xpY2tTbGVlcFNlcnZpY2Uuc2xlZXAoKTtcclxuXHRcdCg8SFRNTERpdkVsZW1lbnQ+dGhpcy5zbGlja0FjY29yZGlvbkJvZHlXcmFwcGVyUmVmLm5hdGl2ZUVsZW1lbnQpLnN0eWxlLm1heEhlaWdodCA9IFwiMFwiO1xyXG5cclxuXHRcdGlmICh0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgJiYgaWdub3JlT25DaGFuZ2VDYWxsYmFjayA9PT0gZmFsc2UpXHJcblx0XHRcdHRoaXMub25DaGFuZ2VDYWxsYmFjayh0aGlzLmluZGV4KTtcclxuXHR9XHJcblxyXG5cdGdldEtleSgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMua2V5IHx8IG51bGw7XHJcblx0fVxyXG59IiwiPGRpdiAjc2xpY2tBY2NvcmRpb25JdGVtUmVmIGNsYXNzPVwic2xpY2stYWNjb3JkaW9uLWl0ZW1cIj5cclxuXHQ8ZGl2ICpuZ0lmPVwiaGVhZGVyXCIgY2xhc3M9XCJzbGljay1hY2NvcmRpb24taGVhZGVyIGNhcmQtaGVhZGVyXCIgW25nQ2xhc3NdPVwieydiYWRnZS1wcmltYXJ5JyA6IGlzRXhwYW5kZWQgfVwiIChjbGljayk9XCJvbkhlYWRlckNsaWNrZWQoKVwiPjxpICpuZ0lmPVwiaGVhZGVySWNvblwiIGNsYXNzPVwiZmFyXCIgW25nQ2xhc3NdPVwiaGVhZGVySWNvblwiPjwvaT4ge3toZWFkZXJ9fTwvZGl2PlxyXG5cdDxkaXYgKm5nSWY9XCIhaGVhZGVyXCIgY2xhc3M9XCJzbGljay1hY2NvcmRpb24taGVhZGVyIGNhcmQtaGVhZGVyXCIgW25nQ2xhc3NdPVwieydiYWRnZS1wcmltYXJ5JyA6IGlzRXhwYW5kZWQgfVwiIChjbGljayk9XCJvbkhlYWRlckNsaWNrZWQoKVwiPjxuZy1jb250ZW50IHNlbGVjdD1cInNsaWNrLWFjY29yZGlvbi1pdGVtLWhlYWRlclwiPjwvbmctY29udGVudD48L2Rpdj5cclxuXHQ8ZGl2ICNzbGlja0FjY29yZGlvbkJvZHlXcmFwcGVyUmVmIGNsYXNzPVwic2xpY2stYWNjb3JkaW9uLWJvZHktd3JhcHBlclwiPlxyXG5cdFx0PGRpdiAjc2xpY2tBY2NvcmRpb25Cb2R5UmVmIGNsYXNzPVwiY2FyZC1ib2R5IHNsaWNrLWFjY29yZGlvbi1ib2R5XCI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvZGl2PlxyXG5cdFx0PGRpdiAjc2xpY2tBY2NvcmRpb25Cb3VuY2VQYWRkaW5nUmVmIHN0eWxlPVwiZGlzcGxheTogbm9uZTsgbWluLWhlaWdodDogMzBweDtcIj48L2Rpdj5cclxuXHQ8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -1,388 +0,0 @@
|
|
|
1
|
-
import { Component, ViewChild, ContentChild, Input, Output, EventEmitter, forwardRef } from "@angular/core";
|
|
2
|
-
import { NG_VALUE_ACCESSOR } from "@angular/forms";
|
|
3
|
-
import { SlickAutoCompleteListItemTemplateDirective } from "./slick-auto-complete-list-item-template.directive";
|
|
4
|
-
import { SlickUtilsService } from "../utils/slick-utils.service";
|
|
5
|
-
import { SlickSleepService } from "../utils/slick-sleep.service";
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "../utils/slick-function-lock.service";
|
|
8
|
-
import * as i2 from "@angular/common";
|
|
9
|
-
export class SlickAutoCompleteComponent {
|
|
10
|
-
constructor(slickFunctionLockService) {
|
|
11
|
-
this.slickFunctionLockService = slickFunctionLockService;
|
|
12
|
-
this.delay = 300;
|
|
13
|
-
this.selectFirst = true;
|
|
14
|
-
this.offset = 0;
|
|
15
|
-
this.listHeight = "300px";
|
|
16
|
-
this.listWidth = '100%';
|
|
17
|
-
this.allowFreeformText = true;
|
|
18
|
-
this.showNoItemsFoundDisplay = true;
|
|
19
|
-
this.onRefresh = new EventEmitter();
|
|
20
|
-
this.onSelect = new EventEmitter();
|
|
21
|
-
this.onFreeformTextSelect = new EventEmitter();
|
|
22
|
-
this.fnDocumentClick = (e) => this.documentClick(e);
|
|
23
|
-
this.fnKeyDown = (e) => this.keyDown(e);
|
|
24
|
-
this.lastInputValue = "";
|
|
25
|
-
this.forcedCollapse = false;
|
|
26
|
-
// This is necessary so that the scroll and resize events can add and remove the event properly,
|
|
27
|
-
// as well as getting the correct ES6 function
|
|
28
|
-
this.fnReposition = () => this.reposition();
|
|
29
|
-
this.selectedIndex = -1;
|
|
30
|
-
this.showAutoComplete = false;
|
|
31
|
-
this.autoCompleteVisiblity = false;
|
|
32
|
-
this.expanded = true;
|
|
33
|
-
this.loading = false;
|
|
34
|
-
this.propagateChange = (_) => { };
|
|
35
|
-
this.uuid = SlickUtilsService.newGuid();
|
|
36
|
-
}
|
|
37
|
-
async ngOnInit() {
|
|
38
|
-
await SlickSleepService.sleep();
|
|
39
|
-
if (this.searchBarRef)
|
|
40
|
-
this.inputRef = this.searchBarRef.slickSearchTextBoxRef.nativeElement;
|
|
41
|
-
// Remove this from the inline version and put it on the body so that it doesn't hide behind the bottom
|
|
42
|
-
// of a div when it expands beyond the bottom.
|
|
43
|
-
this.autoCompleteRef.nativeElement.remove(this.autoCompleteRef);
|
|
44
|
-
document.body.appendChild(this.autoCompleteRef.nativeElement);
|
|
45
|
-
this.inputRef.addEventListener("keydown", this.fnKeyDown);
|
|
46
|
-
}
|
|
47
|
-
ngOnDestroy() {
|
|
48
|
-
// Since angular has no way to use the third parameter, I'm doing this in raw js
|
|
49
|
-
document.removeEventListener("click", this.fnDocumentClick, true);
|
|
50
|
-
this.inputRef.removeEventListener("keydown", this.fnKeyDown);
|
|
51
|
-
clearTimeout(this.delayTimeout);
|
|
52
|
-
this.delayTimeout = null;
|
|
53
|
-
this.collapse();
|
|
54
|
-
// Is okay if this fails. It just means it was already removed.
|
|
55
|
-
try {
|
|
56
|
-
document.body.removeChild(this.autoCompleteRef.nativeElement);
|
|
57
|
-
}
|
|
58
|
-
catch { }
|
|
59
|
-
}
|
|
60
|
-
ngOnChanges(changes) {
|
|
61
|
-
if (changes.allowFreeformText)
|
|
62
|
-
this.allowFreeformText = (this.allowFreeformText.toString().toLowerCase() === 'false') ? false : true;
|
|
63
|
-
if (changes.showNoItemsFoundDisplay)
|
|
64
|
-
this.showNoItemsFoundDisplay = (this.showNoItemsFoundDisplay.toString().toLowerCase() === 'false') ? false : true;
|
|
65
|
-
if (changes.items) {
|
|
66
|
-
if (this.items && this.items.length === 0 && this.showNoItemsFoundDisplay === false)
|
|
67
|
-
this.collapse();
|
|
68
|
-
}
|
|
69
|
-
if (isNaN(this.offset))
|
|
70
|
-
this.offset = parseInt(this.offset.toString());
|
|
71
|
-
}
|
|
72
|
-
documentClick(e) {
|
|
73
|
-
if (!this.expanded || !e.target)
|
|
74
|
-
return;
|
|
75
|
-
if (e.target === this.inputRef)
|
|
76
|
-
return;
|
|
77
|
-
if (SlickUtilsService.checkParentIdExists(e.target, "slick-auto-complete_" + this.uuid) === false) {
|
|
78
|
-
clearInterval(this.waitForItemsInterval);
|
|
79
|
-
this.slickFunctionLockService.release("AUTO_COMPLETE_WAIT_FOR_ITEMS");
|
|
80
|
-
this.collapse();
|
|
81
|
-
if (this.allowFreeformText && this.onFreeformTextSelect)
|
|
82
|
-
this.onFreeformTextSelect.emit(this.inputRef.value);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
onItemClick(index) {
|
|
86
|
-
this.selectItem(index);
|
|
87
|
-
this.collapse();
|
|
88
|
-
}
|
|
89
|
-
async keyDown(event) {
|
|
90
|
-
// alt
|
|
91
|
-
if (event.keyCode === 18)
|
|
92
|
-
return;
|
|
93
|
-
clearInterval(this.waitForItemsInterval);
|
|
94
|
-
this.slickFunctionLockService.release("AUTO_COMPLETE_WAIT_FOR_ITEMS");
|
|
95
|
-
// If we're just tabbing through, don't even do anything
|
|
96
|
-
if (!this.lastInputValue && (event.keyCode === 9 || event.keyCode === 13))
|
|
97
|
-
return;
|
|
98
|
-
await SlickSleepService.sleep();
|
|
99
|
-
if (this.lastInputValue !== this.inputRef.value) {
|
|
100
|
-
this.lastInputValue = this.inputRef.value;
|
|
101
|
-
this.forcedCollapse = false;
|
|
102
|
-
if (!this.lastInputValue) {
|
|
103
|
-
this.propagateChange(null);
|
|
104
|
-
this.collapse();
|
|
105
|
-
}
|
|
106
|
-
clearTimeout(this.delayTimeout);
|
|
107
|
-
this.delayTimeout = null;
|
|
108
|
-
if (this.inputRef.value === '') {
|
|
109
|
-
this.items = null;
|
|
110
|
-
this.collapse();
|
|
111
|
-
return true;
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
this.delayTimeout = setTimeout(async () => {
|
|
115
|
-
(this.selectFirst === true) ? this.selectedIndex = 0 : this.selectedIndex = -1;
|
|
116
|
-
this.delayTimeout = null;
|
|
117
|
-
this.items = null;
|
|
118
|
-
this.expand();
|
|
119
|
-
await this.refreshItems(true);
|
|
120
|
-
}, this.delay);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
if (event.keyCode === 9 || event.keyCode === 13) {
|
|
124
|
-
if (this.delayTimeout && this.selectFirst) {
|
|
125
|
-
clearTimeout(this.delayTimeout);
|
|
126
|
-
this.delayTimeout = null;
|
|
127
|
-
this.items = null;
|
|
128
|
-
this.collapse();
|
|
129
|
-
if (this.selectFirst === true && !this.forcedCollapse) {
|
|
130
|
-
await this.refreshItems(false);
|
|
131
|
-
this.selectedIndex = -1;
|
|
132
|
-
if (!this.items && !this.inputRef.value && this.onSelect) {
|
|
133
|
-
this.onSelect.emit(null);
|
|
134
|
-
}
|
|
135
|
-
else if (this.items && this.items.length > 0) {
|
|
136
|
-
this.selectedIndex = 0;
|
|
137
|
-
this.selectItem(this.selectedIndex);
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
if (this.allowFreeformText && this.onFreeformTextSelect)
|
|
141
|
-
this.onFreeformTextSelect.emit(this.inputRef.value);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
if (this.allowFreeformText && this.onFreeformTextSelect)
|
|
146
|
-
this.onFreeformTextSelect.emit(this.inputRef.value);
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
else {
|
|
150
|
-
clearTimeout(this.delayTimeout);
|
|
151
|
-
if (!this.items && !this.inputRef.value && this.onSelect) {
|
|
152
|
-
this.onSelect.emit(null);
|
|
153
|
-
}
|
|
154
|
-
else if (this.items && this.items.length > 0 && this.expanded && !this.forcedCollapse) {
|
|
155
|
-
this.selectItem(this.selectedIndex);
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
if (this.allowFreeformText && this.onFreeformTextSelect) {
|
|
159
|
-
this.onFreeformTextSelect.emit(this.inputRef.value);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
this.collapse();
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
// Esc
|
|
166
|
-
if (event.which === 27) {
|
|
167
|
-
this.forcedCollapse = true;
|
|
168
|
-
this.collapse();
|
|
169
|
-
return false;
|
|
170
|
-
}
|
|
171
|
-
// Arrowup
|
|
172
|
-
if (event.which === 38) {
|
|
173
|
-
if (this.selectedIndex === null || this.selectedIndex === undefined)
|
|
174
|
-
this.selectedIndex = 0;
|
|
175
|
-
if (this.selectedIndex > 0)
|
|
176
|
-
this.selectedIndex--;
|
|
177
|
-
return false;
|
|
178
|
-
}
|
|
179
|
-
// Arrowdown
|
|
180
|
-
if (event.which === 40) {
|
|
181
|
-
event.stopPropagation();
|
|
182
|
-
if (this.selectedIndex === null || this.selectedIndex === undefined)
|
|
183
|
-
this.selectedIndex = -1;
|
|
184
|
-
if (!this.expanded) {
|
|
185
|
-
this.expand();
|
|
186
|
-
return false;
|
|
187
|
-
}
|
|
188
|
-
if (this.selectedIndex < this.items.length - 1)
|
|
189
|
-
this.selectedIndex++;
|
|
190
|
-
return false;
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
// this is the initial value set to the component
|
|
194
|
-
writeValue(obj) {
|
|
195
|
-
if (obj) {
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
// registers 'fn' that will be fired when changes are made
|
|
199
|
-
// this is how we emit the changes back to the form
|
|
200
|
-
registerOnChange(fn) {
|
|
201
|
-
this.propagateChange = fn;
|
|
202
|
-
}
|
|
203
|
-
// not used, used for touch input
|
|
204
|
-
registerOnTouched() { }
|
|
205
|
-
async selectItem(index) {
|
|
206
|
-
if (index < 0 || !this.items || this.items.length === 0) {
|
|
207
|
-
this.selectedItem = null;
|
|
208
|
-
}
|
|
209
|
-
else {
|
|
210
|
-
this.selectedItem = this.items[index];
|
|
211
|
-
if (this.displayTextFieldName) {
|
|
212
|
-
const text = SlickUtilsService.getDeepObject(this.selectedItem, this.displayTextFieldName);
|
|
213
|
-
if (text) {
|
|
214
|
-
this.inputRef.value = text;
|
|
215
|
-
this.lastInputValue = this.inputRef.value;
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
this.propagateChange(this.selectedItem);
|
|
220
|
-
if (this.onSelect)
|
|
221
|
-
this.onSelect.emit(this.selectedItem);
|
|
222
|
-
// Call to update the model for the textbox
|
|
223
|
-
await SlickSleepService.sleep();
|
|
224
|
-
let evt = document.createEvent('Event');
|
|
225
|
-
evt.initEvent('input', true, false);
|
|
226
|
-
this.inputRef.dispatchEvent(evt);
|
|
227
|
-
}
|
|
228
|
-
async expand() {
|
|
229
|
-
this.reposition();
|
|
230
|
-
// If the flag to show items is false, don't display "Loading..."
|
|
231
|
-
if (this.showNoItemsFoundDisplay === false && (!this.items || this.items.length === 0)) {
|
|
232
|
-
this.showAutoComplete = false;
|
|
233
|
-
this.autoCompleteVisiblity = false;
|
|
234
|
-
this.expanded = false;
|
|
235
|
-
return;
|
|
236
|
-
}
|
|
237
|
-
this.showAutoComplete = true;
|
|
238
|
-
this.autoCompleteRef.nativeElement.style.display = "inline-block";
|
|
239
|
-
await SlickSleepService.sleep();
|
|
240
|
-
this.autoCompleteVisiblity = true;
|
|
241
|
-
this.expanded = true;
|
|
242
|
-
this.inputRef.classList.add("slick-auto-complete_remove-bottom-left-border-radius");
|
|
243
|
-
this.inputRef.classList.add("slick-auto-complete_remove-bottom-right-border-radius");
|
|
244
|
-
// This is necessary, otherwise `this` in the reposition function will be window
|
|
245
|
-
// and not the component.
|
|
246
|
-
// Since angular has no way to use the third parameter, I'm doing this in raw js
|
|
247
|
-
document.addEventListener("click", this.fnDocumentClick, true);
|
|
248
|
-
}
|
|
249
|
-
collapse() {
|
|
250
|
-
let inputGroupPrepend = SlickUtilsService.getClosestSibling(this.inputRef, "input-group-prepend");
|
|
251
|
-
if (inputGroupPrepend)
|
|
252
|
-
inputGroupPrepend.classList.remove("slick-auto-complete_remove-bottom-left-border-radius");
|
|
253
|
-
this.inputRef.classList.remove("slick-auto-complete_remove-bottom-left-border-radius");
|
|
254
|
-
this.inputRef.classList.remove("slick-auto-complete_remove-bottom-right-border-radius");
|
|
255
|
-
this.autoCompleteVisiblity = false;
|
|
256
|
-
this.expanded = false;
|
|
257
|
-
this.autoCompleteRef.nativeElement.style.display = "none";
|
|
258
|
-
// Since angular has no way to use the third parameter, I'm doing this in raw js
|
|
259
|
-
document.removeEventListener("click", this.fnDocumentClick, true);
|
|
260
|
-
}
|
|
261
|
-
reposition() {
|
|
262
|
-
let rect = this.inputRef.getBoundingClientRect();
|
|
263
|
-
let inputLeft = rect.left;
|
|
264
|
-
let inputTop = rect.top;
|
|
265
|
-
let inputHeight = this.inputRef.offsetHeight;
|
|
266
|
-
let inputWidth = this.inputRef.offsetWidth;
|
|
267
|
-
let inputGroupPrepend = SlickUtilsService.getClosestSibling(this.inputRef, "input-group-prepend");
|
|
268
|
-
if (inputGroupPrepend) {
|
|
269
|
-
inputLeft = inputGroupPrepend.getBoundingClientRect().left;
|
|
270
|
-
inputWidth = inputWidth += inputGroupPrepend.offsetWidth;
|
|
271
|
-
inputGroupPrepend.classList.add("slick-auto-complete_remove-bottom-left-border-radius");
|
|
272
|
-
}
|
|
273
|
-
this.left = (inputLeft + this.offset) + "px";
|
|
274
|
-
this.top = (inputTop + inputHeight + 1) + "px";
|
|
275
|
-
if (this.listWidth === '100%')
|
|
276
|
-
this.width = inputWidth + "px";
|
|
277
|
-
else if (this.listWidth === 'auto')
|
|
278
|
-
this.width = "auto";
|
|
279
|
-
else
|
|
280
|
-
this.width = this.listWidth;
|
|
281
|
-
}
|
|
282
|
-
async refreshItems(expand) {
|
|
283
|
-
return new Promise(async (resolve) => {
|
|
284
|
-
await this.slickFunctionLockService.lock("AUTO_COMPLETE_WAIT_FOR_ITEMS");
|
|
285
|
-
clearInterval(this.waitForItemsInterval);
|
|
286
|
-
this.items = null;
|
|
287
|
-
if (!this.onRefresh || !this.inputRef.value) {
|
|
288
|
-
this.items = [];
|
|
289
|
-
this.slickFunctionLockService.release("AUTO_COMPLETE_WAIT_FOR_ITEMS");
|
|
290
|
-
resolve();
|
|
291
|
-
}
|
|
292
|
-
else {
|
|
293
|
-
this.loading = true;
|
|
294
|
-
if (this.showNoItemsFoundDisplay === false)
|
|
295
|
-
this.collapse();
|
|
296
|
-
// Call the users refresh method to get a fresh list of items
|
|
297
|
-
this.onRefresh.emit(this.inputRef.value);
|
|
298
|
-
// Wait for the list to refresh
|
|
299
|
-
let timeoutCheck = 1000;
|
|
300
|
-
this.waitForItemsInterval = setInterval(() => {
|
|
301
|
-
// If we've timedout, got a response or they started typing something else, stop the interval
|
|
302
|
-
if (timeoutCheck <= 0 || this.items) {
|
|
303
|
-
clearInterval(this.waitForItemsInterval);
|
|
304
|
-
if (timeoutCheck <= 0) {
|
|
305
|
-
console.error("Timed out waiting for list in auto complete");
|
|
306
|
-
this.items = [];
|
|
307
|
-
if (this.showNoItemsFoundDisplay === false)
|
|
308
|
-
this.collapse();
|
|
309
|
-
}
|
|
310
|
-
this.loading = false;
|
|
311
|
-
if (expand)
|
|
312
|
-
this.expand();
|
|
313
|
-
this.slickFunctionLockService.release("AUTO_COMPLETE_WAIT_FOR_ITEMS");
|
|
314
|
-
resolve();
|
|
315
|
-
}
|
|
316
|
-
timeoutCheck--;
|
|
317
|
-
}, 100);
|
|
318
|
-
}
|
|
319
|
-
});
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
/** @nocollapse */ SlickAutoCompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: SlickAutoCompleteComponent, deps: [{ token: i1.SlickFunctionLockService }], target: i0.ɵɵFactoryTarget.Component });
|
|
323
|
-
/** @nocollapse */ SlickAutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: SlickAutoCompleteComponent, selector: "slick-auto-complete", inputs: { inputRef: "inputRef", searchBarRef: "searchBarRef", items: "items", delay: "delay", selectFirst: "selectFirst", displayTextFieldName: "displayTextFieldName", offset: "offset", listHeight: "listHeight", listWidth: "listWidth", allowFreeformText: "allowFreeformText", showNoItemsFoundDisplay: "showNoItemsFoundDisplay" }, outputs: { onRefresh: "onRefresh", onSelect: "onSelect", onFreeformTextSelect: "onFreeformTextSelect" }, providers: [
|
|
324
|
-
{
|
|
325
|
-
provide: NG_VALUE_ACCESSOR,
|
|
326
|
-
useExisting: forwardRef((() => SlickAutoCompleteComponent)),
|
|
327
|
-
multi: true
|
|
328
|
-
}
|
|
329
|
-
], queries: [{ propertyName: "listItemTemplateRef", first: true, predicate: SlickAutoCompleteListItemTemplateDirective, descendants: true, static: true }], viewQueries: [{ propertyName: "autoCompleteRef", first: true, predicate: ["autoCompleteRef"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div #autoCompleteRef id=\"slick-auto-complete_{{uuid}}\" class='slick-auto-complete dropdown-menu' [style.width]=\"width\" [style.minWidth]=\"width\" [style.visibility]=\"(expanded === true) ? 'visible' : 'hidden'\" [style.opacity]=\"(expanded === true) ? '1' : '0'\" [style.max-height]=\"listHeight\" [style.left]=\"left\" [style.top]=\"top\">\r\n\t<div *ngIf=\"loading\" style=\"font-size: .8rem\" class=\"ms-3 py-2\">Loading...</div>\r\n\t<div *ngIf=\"!loading && items?.length === 0\" style=\"font-size: .8rem\" class=\"ms-3\">\r\n\t\tNo items found\r\n\t</div>\r\n\t<div *ngIf=\"!loading && items?.length > 0\">\r\n\t\t<div *ngFor=\"let item of items; let index = index;\" (click)=\"onItemClick(index)\" [class.card-header]=\"selectedIndex === index\" class=\"dropdown-item\">\r\n\t\t\t<ng-container *ngTemplateOutlet=\"listItemTemplateRef.template, context: { $implicit: item, index: index }\">\r\n\t\t\t</ng-container>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
|
|
330
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: SlickAutoCompleteComponent, decorators: [{
|
|
331
|
-
type: Component,
|
|
332
|
-
args: [{ selector: 'slick-auto-complete', providers: [
|
|
333
|
-
{
|
|
334
|
-
provide: NG_VALUE_ACCESSOR,
|
|
335
|
-
useExisting: forwardRef((() => SlickAutoCompleteComponent)),
|
|
336
|
-
multi: true
|
|
337
|
-
}
|
|
338
|
-
], template: "<div #autoCompleteRef id=\"slick-auto-complete_{{uuid}}\" class='slick-auto-complete dropdown-menu' [style.width]=\"width\" [style.minWidth]=\"width\" [style.visibility]=\"(expanded === true) ? 'visible' : 'hidden'\" [style.opacity]=\"(expanded === true) ? '1' : '0'\" [style.max-height]=\"listHeight\" [style.left]=\"left\" [style.top]=\"top\">\r\n\t<div *ngIf=\"loading\" style=\"font-size: .8rem\" class=\"ms-3 py-2\">Loading...</div>\r\n\t<div *ngIf=\"!loading && items?.length === 0\" style=\"font-size: .8rem\" class=\"ms-3\">\r\n\t\tNo items found\r\n\t</div>\r\n\t<div *ngIf=\"!loading && items?.length > 0\">\r\n\t\t<div *ngFor=\"let item of items; let index = index;\" (click)=\"onItemClick(index)\" [class.card-header]=\"selectedIndex === index\" class=\"dropdown-item\">\r\n\t\t\t<ng-container *ngTemplateOutlet=\"listItemTemplateRef.template, context: { $implicit: item, index: index }\">\r\n\t\t\t</ng-container>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n" }]
|
|
339
|
-
}], ctorParameters: function () { return [{ type: i1.SlickFunctionLockService }]; }, propDecorators: { inputRef: [{
|
|
340
|
-
type: Input,
|
|
341
|
-
args: ["inputRef"]
|
|
342
|
-
}], searchBarRef: [{
|
|
343
|
-
type: Input,
|
|
344
|
-
args: ["searchBarRef"]
|
|
345
|
-
}], items: [{
|
|
346
|
-
type: Input,
|
|
347
|
-
args: ["items"]
|
|
348
|
-
}], delay: [{
|
|
349
|
-
type: Input,
|
|
350
|
-
args: ["delay"]
|
|
351
|
-
}], selectFirst: [{
|
|
352
|
-
type: Input,
|
|
353
|
-
args: ["selectFirst"]
|
|
354
|
-
}], displayTextFieldName: [{
|
|
355
|
-
type: Input,
|
|
356
|
-
args: ["displayTextFieldName"]
|
|
357
|
-
}], offset: [{
|
|
358
|
-
type: Input,
|
|
359
|
-
args: ["offset"]
|
|
360
|
-
}], listHeight: [{
|
|
361
|
-
type: Input,
|
|
362
|
-
args: ["listHeight"]
|
|
363
|
-
}], listWidth: [{
|
|
364
|
-
type: Input,
|
|
365
|
-
args: ["listWidth"]
|
|
366
|
-
}], allowFreeformText: [{
|
|
367
|
-
type: Input,
|
|
368
|
-
args: ["allowFreeformText"]
|
|
369
|
-
}], showNoItemsFoundDisplay: [{
|
|
370
|
-
type: Input,
|
|
371
|
-
args: ["showNoItemsFoundDisplay"]
|
|
372
|
-
}], onRefresh: [{
|
|
373
|
-
type: Output,
|
|
374
|
-
args: ["onRefresh"]
|
|
375
|
-
}], onSelect: [{
|
|
376
|
-
type: Output,
|
|
377
|
-
args: ["onSelect"]
|
|
378
|
-
}], onFreeformTextSelect: [{
|
|
379
|
-
type: Output,
|
|
380
|
-
args: ["onFreeformTextSelect"]
|
|
381
|
-
}], autoCompleteRef: [{
|
|
382
|
-
type: ViewChild,
|
|
383
|
-
args: ["autoCompleteRef", { static: true }]
|
|
384
|
-
}], listItemTemplateRef: [{
|
|
385
|
-
type: ContentChild,
|
|
386
|
-
args: [SlickAutoCompleteListItemTemplateDirective, { static: true }]
|
|
387
|
-
}] } });
|
|
388
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2stYXV0by1jb21wbGV0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9zbGljay1hdXRvLWNvbXBsZXRlL3NsaWNrLWF1dG8tY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvc2xpY2stYXV0by1jb21wbGV0ZS9zbGljay1hdXRvLWNvbXBsZXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWlDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUEyQyxNQUFNLGVBQWUsQ0FBQztBQUNwTCxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLDBDQUEwQyxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDaEgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7QUFZakUsTUFBTSxPQUFPLDBCQUEwQjtJQTBDdEMsWUFBb0Isd0JBQWtEO1FBQWxELDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUF0Q3RELFVBQUssR0FBVyxHQUFHLENBQUM7UUFDZCxnQkFBVyxHQUFZLElBQUksQ0FBQztRQUVqQyxXQUFNLEdBQVcsQ0FBQyxDQUFDO1FBQ2YsZUFBVSxHQUFHLE9BQU8sQ0FBQztRQUN0QixjQUFTLEdBQVcsTUFBTSxDQUFDO1FBQ25CLHNCQUFpQixHQUFHLElBQUksQ0FBQztRQUNuQiw0QkFBdUIsR0FBRyxJQUFJLENBQUM7UUFDNUMsY0FBUyxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzlELGFBQVEsR0FBc0IsSUFBSSxZQUFZ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SSxFQUFFO2dCQUM4QixtQkFBbUI7c0JBQTlGLFlBQVk7dUJBQUMsMENBQTBDLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBDb250ZW50Q2hpbGQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBBZnRlclZpZXdJbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IFNsaWNrQXV0b0NvbXBsZXRlTGlzdEl0ZW1UZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gXCIuL3NsaWNrLWF1dG8tY29tcGxldGUtbGlzdC1pdGVtLXRlbXBsYXRlLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBTbGlja1V0aWxzU2VydmljZSB9IGZyb20gXCIuLi91dGlscy9zbGljay11dGlscy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNsaWNrU2VhcmNoQmFyQ29tcG9uZW50IH0gZnJvbSBcIi4uL3NsaWNrLXNlYXJjaC1iYXIvc2xpY2stc2VhcmNoLWJhci5tb2R1bGVcIjtcclxuaW1wb3J0IHsgU2xpY2tGdW5jdGlvbkxvY2tTZXJ2aWNlIH0gZnJvbSBcIi4uL3V0aWxzL3NsaWNrLWZ1bmN0aW9uLWxvY2suc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTbGlja1NsZWVwU2VydmljZSB9IGZyb20gXCIuLi91dGlscy9zbGljay1zbGVlcC5zZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ3NsaWNrLWF1dG8tY29tcGxldGUnLFxyXG5cdHRlbXBsYXRlVXJsOiAnc2xpY2stYXV0by1jb21wbGV0ZS5jb21wb25lbnQuaHRtbCcsXHJcblx0cHJvdmlkZXJzOiBbXHJcblx0XHR7XHJcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG5cdFx0XHR1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTbGlja0F1dG9Db21wbGV0ZUNvbXBvbmVudCksXHJcblx0XHRcdG11bHRpOiB0cnVlXHJcblx0XHR9XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2xpY2tBdXRvQ29tcGxldGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblx0QElucHV0KFwiaW5wdXRSZWZcIikgaW5wdXRSZWY6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcblx0QElucHV0KFwic2VhcmNoQmFyUmVmXCIpIHNlYXJjaEJhclJlZjogU2xpY2tTZWFyY2hCYXJDb21wb25lbnQ7XHJcblx0QElucHV0KFwiaXRlbXNcIikgaXRlbXM6IGFueVtdO1xyXG5cdEBJbnB1dChcImRlbGF5XCIpIGRlbGF5OiBudW1iZXIgPSAzMDA7XHJcblx0QElucHV0KFwic2VsZWN0Rmlyc3RcIikgc2VsZWN0Rmlyc3Q6IGJvb2xlYW4gPSB0cnVlO1xyXG5cdEBJbnB1dChcImRpc3BsYXlUZXh0RmllbGROYW1lXCIpIGRpc3BsYXlUZXh0RmllbGROYW1lOiBzdHJpbmc7XHJcblx0QElucHV0KFwib2Zmc2V0XCIpIG9mZnNldDogbnVtYmVyID0gMDtcclxuXHRASW5wdXQoXCJsaXN0SGVpZ2h0XCIpIGxpc3RIZWlnaHQgPSBcIjMwMHB4XCI7XHJcblx0QElucHV0KFwibGlzdFdpZHRoXCIpIGxpc3RXaWR0aDogc3RyaW5nID0gJzEwMCUnO1xyXG5cdEBJbnB1dChcImFsbG93RnJlZWZvcm1UZXh0XCIpIGFsbG93RnJlZWZvcm1UZXh0ID0gdHJ1ZTtcclxuXHRASW5wdXQoXCJzaG93Tm9JdGVtc0ZvdW5kRGlzcGxheVwiKSBzaG93Tm9JdGVtc0ZvdW5kRGlzcGxheSA9IHRydWU7XHJcblx0QE91dHB1dChcIm9uUmVmcmVzaFwiKSBvblJlZnJlc2g6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblx0QE91dHB1dChcIm9uU2VsZWN0XCIpIG9uU2VsZWN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cdEBPdXRwdXQoXCJvbkZyZWVmb3JtVGV4dFNlbGVjdFwiKSBvbkZyZWVmb3JtVGV4dFNlbGVjdDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcblx0QFZpZXdDaGlsZChcImF1dG9Db21wbGV0ZVJlZlwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBhdXRvQ29tcGxldGVSZWY6IEVsZW1lbnRSZWY7XHJcblx0QENvbnRlbnRDaGlsZChTbGlja0F1dG9Db21wbGV0ZUxpc3RJdGVtVGVtcGxhdGVEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIGxpc3RJdGVtVGVtcGxhdGVSZWY6IFNsaWNrQXV0b0NvbXBsZXRlTGlzdEl0ZW1UZW1wbGF0ZURpcmVjdGl2ZTtcclxuXHJcblx0Zm5Eb2N1bWVudENsaWNrID0gKGUpID0+IHRoaXMuZG9jdW1lbnRDbGljayhlKTtcclxuXHRmbktleURvd24gPSAoZSkgPT4gdGhpcy5rZXlEb3duKGUpO1xyXG5cclxuXHRwcml2YXRlIHNlbGVjdGVkSXRlbTogYW55O1xyXG5cdHByaXZhdGUgZGVsYXlUaW1lb3V0OiBOb2RlSlMuVGltZXI7XHJcblx0cHJpdmF0ZSB3YWl0Rm9ySXRlbXNJbnRlcnZhbDogTm9kZUpTLlRpbWVyO1xyXG5cdHByaXZhdGUgbGFzdElucHV0VmFsdWU6IHN0cmluZyA9IFwiXCI7XHJcblx0cHJpdmF0ZSBmb3JjZWRDb2xsYXBzZSA9IGZhbHNlO1xyXG5cclxuXHQvLyBUaGlzIGlzIG5lY2Vzc2FyeSBzbyB0aGF0IHRoZSBzY3JvbGwgYW5kIHJlc2l6ZSBldmVudHMgY2FuIGFkZCBhbmQgcmVtb3ZlIHRoZSBldmVudCBwcm9wZXJseSxcclxuXHQvLyBhcyB3ZWxsIGFzIGdldHRpbmcgdGhlIGNvcnJlY3QgRVM2IGZ1bmN0aW9uXHJcblx0cHJpdmF0ZSBmblJlcG9zaXRpb24gPSAoKSA9PiB0aGlzLnJlcG9zaXRpb24oKTtcclxuXHJcblx0dXVpZDogc3RyaW5nO1xyXG5cdGxlZnQ6IHN0cmluZztcclxuXHR0b3A6IHN0cmluZztcclxuXHR3aWR0aDogc3RyaW5nO1xyXG5cdHNlbGVjdGVkSW5kZXg6IG51bWJlciA9IC0xO1xyXG5cdHNob3dBdXRvQ29tcGxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRhdXRvQ29tcGxldGVWaXNpYmxpdHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRleHBhbmRlZDogYm9vbGVhbiA9IHRydWU7XHJcblx0bG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIHNsaWNrRnVuY3Rpb25Mb2NrU2VydmljZTogU2xpY2tGdW5jdGlvbkxvY2tTZXJ2aWNlKSB7XHJcblx0XHR0aGlzLnV1aWQgPSBTbGlja1V0aWxzU2VydmljZS5uZXdHdWlkKCk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBuZ09uSW5pdCgpIHtcclxuXHRcdGF3YWl0IFNsaWNrU2xlZXBTZXJ2aWNlLnNsZWVwKCk7XHJcblx0XHRpZiAodGhpcy5zZWFyY2hCYXJSZWYpIFxyXG5cdFx0XHR0aGlzLmlucHV0UmVmID0gKDxFbGVtZW50UmVmPnRoaXMuc2VhcmNoQmFyUmVmLnNsaWNrU2VhcmNoVGV4dEJveFJlZikubmF0aXZlRWxlbWVudDtcclxuXHRcdFxyXG5cdFx0Ly8gUmVtb3ZlIHRoaXMgZnJvbSB0aGUgaW5saW5lIHZlcnNpb24gYW5kIHB1dCBpdCBvbiB0aGUgYm9keSBzbyB0aGF0IGl0IGRvZXNuJ3QgaGlkZSBiZWhpbmQgdGhlIGJvdHRvbVxyXG5cdFx0Ly8gb2YgYSBkaXYgd2hlbiBpdCBleHBhbmRzIGJleW9uZCB0aGUgYm90dG9tLlxyXG5cdFx0dGhpcy5hdXRvQ29tcGxldGVSZWYubmF0aXZlRWxlbWVudC5yZW1vdmUodGhpcy5hdXRvQ29tcGxldGVSZWYpO1xyXG5cdFx0ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmF1dG9Db21wbGV0ZVJlZi5uYXRpdmVFbGVtZW50KTtcclxuXHJcblx0XHR0aGlzLmlucHV0UmVmLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuZm5LZXlEb3duKTtcclxuXHR9XHJcblxyXG5cdG5nT25EZXN0cm95KCkge1xyXG5cdFx0Ly8gU2luY2UgYW5ndWxhciBoYXMgbm8gd2F5IHRvIHVzZSB0aGUgdGhpcmQgcGFyYW1ldGVyLCBJJ20gZG9pbmcgdGhpcyBpbiByYXcganNcclxuXHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLmZuRG9jdW1lbnRDbGljaywgdHJ1ZSk7XHJcblx0XHR0aGlzLmlucHV0UmVmLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuZm5LZXlEb3duKTtcclxuXHJcblx0XHRjbGVhclRpbWVvdXQodGhpcy5kZWxheVRpbWVvdXQpO1xyXG5cdFx0dGhpcy5kZWxheVRpbWVvdXQgPSBudWxsO1xyXG5cclxuXHRcdHRoaXMuY29sbGFwc2UoKTtcclxuXHJcblx0XHQvLyBJcyBva2F5IGlmIHRoaXMgZmFpbHMuICBJdCBqdXN0IG1lYW5zIGl0IHdhcyBhbHJlYWR5IHJlbW92ZWQuXHJcblx0XHR0cnkge1xyXG5cdFx0XHRkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuYXV0b0NvbXBsZXRlUmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG5cdFx0fVxyXG5cdFx0Y2F0Y2ggeyB9XHJcblx0fVxyXG5cclxuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHRcdFxyXG5cdFx0aWYgKGNoYW5nZXMuYWxsb3dGcmVlZm9ybVRleHQpIFxyXG5cdFx0XHR0aGlzLmFsbG93RnJlZWZvcm1UZXh0ID0gKHRoaXMuYWxsb3dGcmVlZm9ybVRleHQudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSAnZmFsc2UnKSA/IGZhbHNlIDogdHJ1ZTtcdFx0XHJcblxyXG5cdFx0aWYgKGNoYW5nZXMuc2hvd05vSXRlbXNGb3VuZERpc3BsYXkpXHJcblx0XHRcdHRoaXMuc2hvd05vSXRlbXNGb3VuZERpc3BsYXkgPSAodGhpcy5zaG93Tm9JdGVtc0ZvdW5kRGlzcGxheS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICdmYWxzZScpID8gZmFsc2UgOiB0cnVlO1x0XHRcclxuXHJcblx0XHRpZiAoY2hhbmdlcy5pdGVtcykge1xyXG5cdFx0XHRpZiAodGhpcy5pdGVtcyAmJiB0aGlzLml0ZW1zLmxlbmd0aCA9PT0gMCAmJiB0aGlzLnNob3dOb0l0ZW1zRm91bmREaXNwbGF5ID09PSBmYWxzZSlcclxuXHRcdFx0XHR0aGlzLmNvbGxhcHNlKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGlzTmFOKHRoaXMub2Zmc2V0KSlcclxuXHRcdFx0dGhpcy5vZmZzZXQgPSBwYXJzZUludCh0aGlzLm9mZnNldC50b1N0cmluZygpKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZG9jdW1lbnRDbGljayhlOiBNb3VzZUV2ZW50KSB7XHJcblx0XHRpZiAoIXRoaXMuZXhwYW5kZWQgfHwgIWUudGFyZ2V0KVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0aWYgKGUudGFyZ2V0ID09PSB0aGlzLmlucHV0UmVmKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0aWYgKFNsaWNrVXRpbHNTZXJ2aWNlLmNoZWNrUGFyZW50SWRFeGlzdHMoPEhUTUxFbGVtZW50PmUudGFyZ2V0LCBcInNsaWNrLWF1dG8tY29tcGxldGVfXCIgKyB0aGlzLnV1aWQpID09PSBmYWxzZSkge1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMud2FpdEZvckl0ZW1zSW50ZXJ2YWwpO1xyXG5cdFx0XHR0aGlzLnNsaWNrRnVuY3Rpb25Mb2NrU2VydmljZS5yZWxlYXNlKFwiQVVUT19DT01QTEVURV9XQUlUX0ZPUl9JVEVNU1wiKTtcclxuXHRcdFx0dGhpcy5jb2xsYXBzZSgpO1xyXG5cclxuXHRcdFx0aWYgKHRoaXMuYWxsb3dGcmVlZm9ybVRleHQgJiYgdGhpcy5vbkZyZWVmb3JtVGV4dFNlbGVjdClcclxuXHRcdFx0XHR0aGlzLm9uRnJlZWZvcm1UZXh0U2VsZWN0LmVtaXQodGhpcy5pbnB1dFJlZi52YWx1ZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRvbkl0ZW1DbGljayhpbmRleCkge1xyXG5cdFx0dGhpcy5zZWxlY3RJdGVtKGluZGV4KTtcclxuXHRcdHRoaXMuY29sbGFwc2UoKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMga2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG5cdFx0Ly8gYWx0XHJcblx0XHRpZiAoZXZlbnQua2V5Q29kZSA9PT0gMTgpXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRjbGVhckludGVydmFsKHRoaXMud2FpdEZvckl0ZW1zSW50ZXJ2YWwpO1xyXG5cdFx0dGhpcy5zbGlja0Z1bmN0aW9uTG9ja1NlcnZpY2UucmVsZWFzZShcIkFVVE9fQ09NUExFVEVfV0FJVF9GT1JfSVRFTVNcIik7XHJcblxyXG5cdFx0Ly8gSWYgd2UncmUganVzdCB0YWJiaW5nIHRocm91Z2gsIGRvbid0IGV2ZW4gZG8gYW55dGhpbmdcclxuXHRcdGlmICghdGhpcy5sYXN0SW5wdXRWYWx1ZSAmJiAoZXZlbnQua2V5Q29kZSA9PT0gOSB8fCBldmVudC5rZXlDb2RlID09PSAxMykpXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRhd2FpdCBTbGlja1NsZWVwU2VydmljZS5zbGVlcCgpO1xyXG5cclxuXHRcdGlmICh0aGlzLmxhc3RJbnB1dFZhbHVlICE9PSB0aGlzLmlucHV0UmVmLnZhbHVlKSB7XHJcblx0XHRcdHRoaXMubGFzdElucHV0VmFsdWUgPSB0aGlzLmlucHV0UmVmLnZhbHVlO1xyXG5cdFx0XHR0aGlzLmZvcmNlZENvbGxhcHNlID0gZmFsc2U7XHJcblxyXG5cdFx0XHRpZiAoIXRoaXMubGFzdElucHV0VmFsdWUpIHtcclxuXHRcdFx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZShudWxsKTtcclxuXHRcdFx0XHR0aGlzLmNvbGxhcHNlKCk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLmRlbGF5VGltZW91dCk7XHJcblx0XHRcdHRoaXMuZGVsYXlUaW1lb3V0ID0gbnVsbDtcclxuXHRcdFx0aWYgKHRoaXMuaW5wdXRSZWYudmFsdWUgPT09ICcnKSB7XHJcblx0XHRcdFx0dGhpcy5pdGVtcyA9IG51bGw7XHJcblx0XHRcdFx0dGhpcy5jb2xsYXBzZSgpO1xyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuZGVsYXlUaW1lb3V0ID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0XHQodGhpcy5zZWxlY3RGaXJzdCA9PT0gdHJ1ZSkgPyB0aGlzLnNlbGVjdGVkSW5kZXggPSAwIDogdGhpcy5zZWxlY3RlZEluZGV4ID0gLTE7XHJcblx0XHRcdFx0XHR0aGlzLmRlbGF5VGltZW91dCA9IG51bGw7XHJcblx0XHRcdFx0XHR0aGlzLml0ZW1zID0gbnVsbDtcclxuXHRcdFx0XHRcdHRoaXMuZXhwYW5kKCk7XHJcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnJlZnJlc2hJdGVtcyh0cnVlKTtcclxuXHRcdFx0XHR9LCB0aGlzLmRlbGF5KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChldmVudC5rZXlDb2RlID09PSA5IHx8IGV2ZW50LmtleUNvZGUgPT09IDEzKSB7XHJcblx0XHRcdGlmICh0aGlzLmRlbGF5VGltZW91dCAmJiB0aGlzLnNlbGVjdEZpcnN0KSB7XHJcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuZGVsYXlUaW1lb3V0KTtcclxuXHRcdFx0XHR0aGlzLmRlbGF5VGltZW91dCA9IG51bGw7XHJcblx0XHRcdFx0dGhpcy5pdGVtcyA9IG51bGw7XHJcblx0XHRcdFx0dGhpcy5jb2xsYXBzZSgpO1xyXG5cclxuXHRcdFx0XHRpZiAodGhpcy5zZWxlY3RGaXJzdCA9PT0gdHJ1ZSAmJiAhdGhpcy5mb3JjZWRDb2xsYXBzZSkge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5yZWZyZXNoSXRlbXMoZmFsc2UpO1xyXG5cdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEluZGV4ID0gLTE7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCF0aGlzLml0ZW1zICYmICF0aGlzLmlucHV0UmVmLnZhbHVlICYmIHRoaXMub25TZWxlY3QpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5vblNlbGVjdC5lbWl0KG51bGwpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZWxzZSBpZiAodGhpcy5pdGVtcyAmJiB0aGlzLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEluZGV4ID0gMDtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RJdGVtKHRoaXMuc2VsZWN0ZWRJbmRleCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuYWxsb3dGcmVlZm9ybVRleHQgJiYgdGhpcy5vbkZyZWVmb3JtVGV4dFNlbGVjdCkgXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5vbkZyZWVmb3JtVGV4dFNlbGVjdC5lbWl0KHRoaXMuaW5wdXRSZWYudmFsdWUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLmFsbG93RnJlZWZvcm1UZXh0ICYmIHRoaXMub25GcmVlZm9ybVRleHRTZWxlY3QpIFxyXG5cdFx0XHRcdFx0XHR0aGlzLm9uRnJlZWZvcm1UZXh0U2VsZWN0LmVtaXQodGhpcy5pbnB1dFJlZi52YWx1ZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdGNsZWFyVGltZW91dCh0aGlzLmRlbGF5VGltZW91dCk7XHJcblx0XHRcdFx0aWYgKCF0aGlzLml0ZW1zICYmICF0aGlzLmlucHV0UmVmLnZhbHVlICYmIHRoaXMub25TZWxlY3QpIHtcclxuXHRcdFx0XHRcdHRoaXMub25TZWxlY3QuZW1pdChudWxsKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSBpZiAodGhpcy5pdGVtcyAmJiB0aGlzLml0ZW1zLmxlbmd0aCA+IDAgJiYgdGhpcy5leHBhbmRlZCAmJiAhdGhpcy5mb3JjZWRDb2xsYXBzZSkge1xyXG5cdFx0XHRcdFx0dGhpcy5zZWxlY3RJdGVtKHRoaXMuc2VsZWN0ZWRJbmRleCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMuYWxsb3dGcmVlZm9ybVRleHQgJiYgdGhpcy5vbkZyZWVmb3JtVGV4dFNlbGVjdCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLm9uRnJlZWZvcm1UZXh0U2VsZWN0LmVtaXQodGhpcy5pbnB1dFJlZi52YWx1ZSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMuY29sbGFwc2UoKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEVzY1xyXG5cdFx0aWYgKGV2ZW50LndoaWNoID09PSAyNykge1xyXG5cdFx0XHR0aGlzLmZvcmNlZENvbGxhcHNlID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5jb2xsYXBzZSgpO1xyXG5cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEFycm93dXBcclxuXHRcdGlmIChldmVudC53aGljaCA9PT0gMzgpIHtcclxuXHRcdFx0aWYgKHRoaXMuc2VsZWN0ZWRJbmRleCA9PT0gbnVsbCB8fCB0aGlzLnNlbGVjdGVkSW5kZXggPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHR0aGlzLnNlbGVjdGVkSW5kZXggPSAwO1xyXG5cclxuXHRcdFx0aWYgKHRoaXMuc2VsZWN0ZWRJbmRleCA+IDApXHJcblx0XHRcdFx0dGhpcy5zZWxlY3RlZEluZGV4LS07XHJcblxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQXJyb3dkb3duXHJcblx0XHRpZiAoZXZlbnQud2hpY2ggPT09IDQwKSB7XHJcblx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdFx0XHRpZiAodGhpcy5zZWxlY3RlZEluZGV4ID09PSBudWxsIHx8IHRoaXMuc2VsZWN0ZWRJbmRleCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xyXG5cclxuXHRcdFx0aWYgKCF0aGlzLmV4cGFuZGVkKSB7XHJcblx0XHRcdFx0dGhpcy5leHBhbmQoKTtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICh0aGlzLnNlbGVjdGVkSW5kZXggPCB0aGlzLml0ZW1zLmxlbmd0aCAtIDEpXHJcblx0XHRcdFx0dGhpcy5zZWxlY3RlZEluZGV4Kys7XHJcblxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XHJcblxyXG5cdC8vIHRoaXMgaXMgdGhlIGluaXRpYWwgdmFsdWUgc2V0IHRvIHRoZSBjb21wb25lbnRcclxuXHR3cml0ZVZhbHVlKG9iajogYW55KSB7XHJcblx0XHRpZiAob2JqKSB7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyByZWdpc3RlcnMgJ2ZuJyB0aGF0IHdpbGwgYmUgZmlyZWQgd2hlbiBjaGFuZ2VzIGFyZSBtYWRlXHJcblx0Ly8gdGhpcyBpcyBob3cgd2UgZW1pdCB0aGUgY2hhbmdlcyBiYWNrIHRvIHRoZSBmb3JtXHJcblx0cmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XHJcblx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xyXG5cdH1cclxuXHJcblx0Ly8gbm90IHVzZWQsIHVzZWQgZm9yIHRvdWNoIGlucHV0XHJcblx0cmVnaXN0ZXJPblRvdWNoZWQoKSB7IH1cclxuXHJcblx0YXN5bmMgc2VsZWN0SXRlbShpbmRleDogbnVtYmVyKSB7XHJcblx0XHRpZiAoaW5kZXggPCAwIHx8ICF0aGlzLml0ZW1zIHx8IHRoaXMuaXRlbXMubGVuZ3RoID09PSAwKSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtID0gbnVsbDtcclxuXHRcdH1cclxuXHRcdGVsc2Uge1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMuaXRlbXNbaW5kZXhdO1xyXG5cdFx0XHRpZiAodGhpcy5kaXNwbGF5VGV4dEZpZWxkTmFtZSkge1xyXG5cdFx0XHRcdGNvbnN0IHRleHQgPSBTbGlja1V0aWxzU2VydmljZS5nZXREZWVwT2JqZWN0KHRoaXMuc2VsZWN0ZWRJdGVtLCB0aGlzLmRpc3BsYXlUZXh0RmllbGROYW1lKTtcclxuXHRcdFx0XHRpZiAodGV4dCkge1xyXG5cdFx0XHRcdFx0dGhpcy5pbnB1dFJlZi52YWx1ZSA9IHRleHQ7XHJcblx0XHRcdFx0XHR0aGlzLmxhc3RJbnB1dFZhbHVlID0gdGhpcy5pbnB1dFJlZi52YWx1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnNlbGVjdGVkSXRlbSk7XHJcblx0XHRpZiAodGhpcy5vblNlbGVjdClcclxuXHRcdFx0dGhpcy5vblNlbGVjdC5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtKTtcclxuXHRcdC8vIENhbGwgdG8gdXBkYXRlIHRoZSBtb2RlbCBmb3IgdGhlIHRleHRib3hcclxuXHRcdGF3YWl0IFNsaWNrU2xlZXBTZXJ2aWNlLnNsZWVwKCk7XHJcblx0XHRsZXQgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XHJcblx0XHRldnQuaW5pdEV2ZW50KCdpbnB1dCcsIHRydWUsIGZhbHNlKTtcclxuXHRcdHRoaXMuaW5wdXRSZWYuZGlzcGF0Y2hFdmVudChldnQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBleHBhbmQoKSB7XHJcblx0XHR0aGlzLnJlcG9zaXRpb24oKTtcclxuXHJcblx0XHQvLyBJZiB0aGUgZmxhZyB0byBzaG93IGl0ZW1zIGlzIGZhbHNlLCBkb24ndCBkaXNwbGF5IFwiTG9hZGluZy4uLlwiXHJcblx0XHRpZiAodGhpcy5zaG93Tm9JdGVtc0ZvdW5kRGlzcGxheSA9PT0gZmFsc2UgJiYgKCF0aGlzLml0ZW1zIHx8IHRoaXMuaXRlbXMubGVuZ3RoID09PSAwKSkge1xyXG5cdFx0XHR0aGlzLnNob3dBdXRvQ29tcGxldGUgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5hdXRvQ29tcGxldGVWaXNpYmxpdHkgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5leHBhbmRlZCA9IGZhbHNlO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5zaG93QXV0b0NvbXBsZXRlID0gdHJ1ZTtcclxuXHRcdHRoaXMuYXV0b0NvbXBsZXRlUmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XHJcblx0XHRhd2FpdCBTbGlja1NsZWVwU2VydmljZS5zbGVlcCgpO1xyXG5cdFx0dGhpcy5hdXRvQ29tcGxldGVWaXNpYmxpdHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5leHBhbmRlZCA9IHRydWU7XHJcblxyXG5cdFx0dGhpcy5pbnB1dFJlZi5jbGFzc0xpc3QuYWRkKFwic2xpY2stYXV0by1jb21wbGV0ZV9yZW1vdmUtYm90dG9tLWxlZnQtYm9yZGVyLXJhZGl1c1wiKTtcclxuXHRcdHRoaXMuaW5wdXRSZWYuY2xhc3NMaXN0LmFkZChcInNsaWNrLWF1dG8tY29tcGxldGVfcmVtb3ZlLWJvdHRvbS1yaWdodC1ib3JkZXItcmFkaXVzXCIpO1xyXG5cclxuXHRcdC8vIFRoaXMgaXMgbmVjZXNzYXJ5LCBvdGhlcndpc2UgYHRoaXNgIGluIHRoZSByZXBvc2l0aW9uIGZ1bmN0aW9uIHdpbGwgYmUgd2luZG93XHJcblx0XHQvLyBhbmQgbm90IHRoZSBjb21wb25lbnQuXHJcblx0XHQvLyBTaW5jZSBhbmd1bGFyIGhhcyBubyB3YXkgdG8gdXNlIHRoZSB0aGlyZCBwYXJhbWV0ZXIsIEknbSBkb2luZyB0aGlzIGluIHJhdyBqc1xyXG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuZm5Eb2N1bWVudENsaWNrLCB0cnVlKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY29sbGFwc2UoKSB7XHJcblx0XHRsZXQgaW5wdXRHcm91cFByZXBlbmQgPSBTbGlja1V0aWxzU2VydmljZS5nZXRDbG9zZXN0U2libGluZyh0aGlzLmlucHV0UmVmLCBcImlucHV0LWdyb3VwLXByZXBlbmRcIik7XHJcblx0XHRpZiAoaW5wdXRHcm91cFByZXBlbmQpXHJcblx0XHRcdGlucHV0R3JvdXBQcmVwZW5kLmNsYXNzTGlzdC5yZW1vdmUoXCJzbGljay1hdXRvLWNvbXBsZXRlX3JlbW92ZS1ib3R0b20tbGVmdC1ib3JkZXItcmFkaXVzXCIpO1xyXG5cclxuXHRcdHRoaXMuaW5wdXRSZWYuY2xhc3NMaXN0LnJlbW92ZShcInNsaWNrLWF1dG8tY29tcGxldGVfcmVtb3ZlLWJvdHRvbS1sZWZ0LWJvcmRlci1yYWRpdXNcIik7XHJcblx0XHR0aGlzLmlucHV0UmVmLmNsYXNzTGlzdC5yZW1vdmUoXCJzbGljay1hdXRvLWNvbXBsZXRlX3JlbW92ZS1ib3R0b20tcmlnaHQtYm9yZGVyLXJhZGl1c1wiKTtcclxuXHJcblx0XHR0aGlzLmF1dG9Db21wbGV0ZVZpc2libGl0eSA9IGZhbHNlO1xyXG5cdFx0dGhpcy5leHBhbmRlZCA9IGZhbHNlO1xyXG5cdFx0dGhpcy5hdXRvQ29tcGxldGVSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcblxyXG5cdFx0Ly8gU2luY2UgYW5ndWxhciBoYXMgbm8gd2F5IHRvIHVzZSB0aGUgdGhpcmQgcGFyYW1ldGVyLCBJJ20gZG9pbmcgdGhpcyBpbiByYXcganNcclxuXHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLmZuRG9jdW1lbnRDbGljaywgdHJ1ZSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHJlcG9zaXRpb24oKSB7XHJcblx0XHRsZXQgcmVjdCA9IHRoaXMuaW5wdXRSZWYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblx0XHRsZXQgaW5wdXRMZWZ0ID0gcmVjdC5sZWZ0O1xyXG5cdFx0bGV0IGlucHV0VG9wID0gcmVjdC50b3A7XHJcblx0XHRsZXQgaW5wdXRIZWlnaHQgPSB0aGlzLmlucHV0UmVmLm9mZnNldEhlaWdodDtcclxuXHRcdGxldCBpbnB1dFdpZHRoID0gdGhpcy5pbnB1dFJlZi5vZmZzZXRXaWR0aDtcclxuXHJcblx0XHRsZXQgaW5wdXRHcm91cFByZXBlbmQgPSBTbGlja1V0aWxzU2VydmljZS5nZXRDbG9zZXN0U2libGluZyh0aGlzLmlucHV0UmVmLCBcImlucHV0LWdyb3VwLXByZXBlbmRcIik7XHJcblx0XHRpZiAoaW5wdXRHcm91cFByZXBlbmQpIHtcclxuXHRcdFx0aW5wdXRMZWZ0ID0gaW5wdXRHcm91cFByZXBlbmQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcclxuXHRcdFx0aW5wdXRXaWR0aCA9IGlucHV0V2lkdGggKz0gaW5wdXRHcm91cFByZXBlbmQub2Zmc2V0V2lkdGg7XHJcblx0XHRcdGlucHV0R3JvdXBQcmVwZW5kLmNsYXNzTGlzdC5hZGQoXCJzbGljay1hdXRvLWNvbXBsZXRlX3JlbW92ZS1ib3R0b20tbGVmdC1ib3JkZXItcmFkaXVzXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMubGVmdCA9IChpbnB1dExlZnQgKyB0aGlzLm9mZnNldCkgKyBcInB4XCI7XHJcblx0XHR0aGlzLnRvcCA9IChpbnB1dFRvcCArIGlucHV0SGVpZ2h0ICsgMSkgKyBcInB4XCI7XHJcblx0XHRpZiAodGhpcy5saXN0V2lkdGggPT09ICcxMDAlJylcclxuXHRcdFx0dGhpcy53aWR0aCA9IGlucHV0V2lkdGggKyBcInB4XCI7XHJcblx0XHRlbHNlIGlmICh0aGlzLmxpc3RXaWR0aCA9PT0gJ2F1dG8nKVxyXG5cdFx0XHR0aGlzLndpZHRoID0gXCJhdXRvXCI7XHJcblx0XHRlbHNlXHJcblx0XHRcdHRoaXMud2lkdGggPSB0aGlzLmxpc3RXaWR0aDtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgcmVmcmVzaEl0ZW1zKGV4cGFuZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KGFzeW5jIChyZXNvbHZlKSA9PiB7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2xpY2tGdW5jdGlvbkxvY2tTZXJ2aWNlLmxvY2soXCJBVVRPX0NPTVBMRVRFX1dBSVRfRk9SX0lURU1TXCIpO1xyXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMud2FpdEZvckl0ZW1zSW50ZXJ2YWwpO1xyXG5cdFx0XHR0aGlzLml0ZW1zID0gbnVsbDtcclxuXHJcblx0XHRcdGlmICghdGhpcy5vblJlZnJlc2ggfHwgIXRoaXMuaW5wdXRSZWYudmFsdWUpIHtcclxuXHRcdFx0XHR0aGlzLml0ZW1zID0gW107XHJcblx0XHRcdFx0dGhpcy5zbGlja0Z1bmN0aW9uTG9ja1NlcnZpY2UucmVsZWFzZShcIkFVVE9fQ09NUExFVEVfV0FJVF9GT1JfSVRFTVNcIik7XHJcblx0XHRcdFx0cmVzb2x2ZSgpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMubG9hZGluZyA9IHRydWU7XHJcblx0XHRcdFx0aWYgKHRoaXMuc2hvd05vSXRlbXNGb3VuZERpc3BsYXkgPT09IGZhbHNlKVxyXG5cdFx0XHRcdFx0dGhpcy5jb2xsYXBzZSgpO1xyXG5cdFx0XHRcdC8vIENhbGwgdGhlIHVzZXJzIHJlZnJlc2ggbWV0aG9kIHRvIGdldCBhIGZyZXNoIGxpc3Qgb2YgaXRlbXNcclxuXHRcdFx0XHR0aGlzLm9uUmVmcmVzaC5lbWl0KHRoaXMuaW5wdXRSZWYudmFsdWUpO1xyXG5cclxuXHRcdFx0XHQvLyBXYWl0IGZvciB0aGUgbGlzdCB0byByZWZyZXNoXHJcblx0XHRcdFx0bGV0IHRpbWVvdXRDaGVjayA9IDEwMDA7XHJcblx0XHRcdFx0dGhpcy53YWl0Rm9ySXRlbXNJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcclxuXHRcdFx0XHRcdC8vIElmIHdlJ3ZlIHRpbWVkb3V0LCBnb3QgYSByZXNwb25zZSBvciB0aGV5IHN0YXJ0ZWQgdHlwaW5nIHNvbWV0aGluZyBlbHNlLCBzdG9wIHRoZSBpbnRlcnZhbFxyXG5cdFx0XHRcdFx0aWYgKHRpbWVvdXRDaGVjayA8PSAwIHx8IHRoaXMuaXRlbXMpIHtcclxuXHRcdFx0XHRcdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLndhaXRGb3JJdGVtc0ludGVydmFsKTtcclxuXHRcdFx0XHRcdFx0aWYgKHRpbWVvdXRDaGVjayA8PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihcIlRpbWVkIG91dCB3YWl0aW5nIGZvciBsaXN0IGluIGF1dG8gY29tcGxldGVcIik7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5pdGVtcyA9IFtdO1xyXG5cdFx0XHRcdFx0XHRcdGlmICh0aGlzLnNob3dOb0l0ZW1zRm91bmREaXNwbGF5ID09PSBmYWxzZSlcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuY29sbGFwc2UoKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0aWYgKGV4cGFuZClcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmV4cGFuZCgpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNsaWNrRnVuY3Rpb25Mb2NrU2VydmljZS5yZWxlYXNlKFwiQVVUT19DT01QTEVURV9XQUlUX0ZPUl9JVEVNU1wiKTtcclxuXHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHRpbWVvdXRDaGVjay0tO1xyXG5cdFx0XHRcdH0sIDEwMCk7XHJcblx0XHRcdH1cclxuXHRcdH0pXHJcblx0fVxyXG5cclxufSIsIjxkaXYgI2F1dG9Db21wbGV0ZVJlZiBpZD1cInNsaWNrLWF1dG8tY29tcGxldGVfe3t1dWlkfX1cIiBjbGFzcz0nc2xpY2stYXV0by1jb21wbGV0ZSBkcm9wZG93bi1tZW51JyBbc3R5bGUud2lkdGhdPVwid2lkdGhcIiBbc3R5bGUubWluV2lkdGhdPVwid2lkdGhcIiBbc3R5bGUudmlzaWJpbGl0eV09XCIoZXhwYW5kZWQgPT09IHRydWUpID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIiBbc3R5bGUub3BhY2l0eV09XCIoZXhwYW5kZWQgPT09IHRydWUpID8gJzEnIDogJzAnXCIgW3N0eWxlLm1heC1oZWlnaHRdPVwibGlzdEhlaWdodFwiIFtzdHlsZS5sZWZ0XT1cImxlZnRcIiBbc3R5bGUudG9wXT1cInRvcFwiPlxyXG5cdDxkaXYgKm5nSWY9XCJsb2FkaW5nXCIgc3R5bGU9XCJmb250LXNpemU6IC44cmVtXCIgY2xhc3M9XCJtcy0zIHB5LTJcIj5Mb2FkaW5nLi4uPC9kaXY+XHJcblx0PGRpdiAqbmdJZj1cIiFsb2FkaW5nICYmIGl0ZW1zPy5sZW5ndGggPT09IDBcIiBzdHlsZT1cImZvbnQtc2l6ZTogLjhyZW1cIiBjbGFzcz1cIm1zLTNcIj5cclxuXHRcdE5vIGl0ZW1zIGZvdW5kXHJcblx0PC9kaXY+XHJcblx0PGRpdiAqbmdJZj1cIiFsb2FkaW5nICYmIGl0ZW1zPy5sZW5ndGggPiAwXCI+XHJcblx0XHQ8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zOyBsZXQgaW5kZXggPSBpbmRleDtcIiAoY2xpY2spPVwib25JdGVtQ2xpY2soaW5kZXgpXCIgW2NsYXNzLmNhcmQtaGVhZGVyXT1cInNlbGVjdGVkSW5kZXggPT09IGluZGV4XCIgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCI+XHJcblx0XHRcdDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0SXRlbVRlbXBsYXRlUmVmLnRlbXBsYXRlLCBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSwgaW5kZXg6IGluZGV4IH1cIj5cclxuXHRcdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHQ8L2Rpdj5cclxuXHQ8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|