@energycap/components 0.41.1-ECAP-26841-date-input-features.20250108-1149 → 0.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{esm2020 → esm2022}/energycap-components.mjs +4 -4
- package/esm2022/lib/components.module.mjs +418 -0
- package/esm2022/lib/controls/banner/banner.component.mjs +109 -0
- package/esm2022/lib/controls/button/button.component.mjs +106 -0
- package/esm2022/lib/controls/button/copy-button-base.directive.mjs +67 -0
- package/{esm2020 → esm2022}/lib/controls/button/copy-button.directive.mjs +28 -28
- package/esm2022/lib/controls/button/copy-table-button.directive.mjs +43 -0
- package/esm2022/lib/controls/calendar/calendar-item.component.mjs +59 -0
- package/esm2022/lib/controls/calendar/calendar.component.mjs +200 -0
- package/esm2022/lib/controls/calendar/calendar.types.mjs +4 -0
- package/esm2022/lib/controls/checkbox/checkbox.component.mjs +140 -0
- package/{esm2020 → esm2022}/lib/controls/collapsible-toggle/collapsible-toggle.component.mjs +38 -38
- package/esm2022/lib/controls/combobox/combobox.component.mjs +879 -0
- package/esm2022/lib/controls/date-input/date-input.component.mjs +256 -0
- package/esm2022/lib/controls/dropdown/dropdown.component.mjs +243 -0
- package/esm2022/lib/controls/file-upload/file-upload.component.mjs +261 -0
- package/esm2022/lib/controls/form-control/form-control.component.mjs +104 -0
- package/esm2022/lib/controls/form-control-base.mjs +151 -0
- package/esm2022/lib/controls/form-control-label/form-control-label.component.mjs +136 -0
- package/esm2022/lib/controls/form-group/form-group.component.mjs +261 -0
- package/{esm2020 → esm2022}/lib/controls/help-popover/help-popover.component.mjs +31 -31
- package/esm2022/lib/controls/item-picker/item-picker.component.mjs +329 -0
- package/{esm2020 → esm2022}/lib/controls/link-button/link-button.component.mjs +11 -11
- package/esm2022/lib/controls/menu/menu.component.mjs +485 -0
- package/{esm2020 → esm2022}/lib/controls/navigation/link-item.mjs +1 -1
- package/esm2022/lib/controls/navigation/nav-group.mjs +39 -0
- package/esm2022/lib/controls/navigation/nav-item-active.directive.mjs +92 -0
- package/{esm2020 → esm2022}/lib/controls/navigation/nav-item.mjs +1 -1
- package/esm2022/lib/controls/numericbox/numericbox.component.mjs +372 -0
- package/esm2022/lib/controls/popover/popover.component.mjs +117 -0
- package/{esm2020 → esm2022}/lib/controls/radio-button/radio-button-option.mjs +2 -2
- package/esm2022/lib/controls/radio-button/radio-button.component.mjs +82 -0
- package/esm2022/lib/controls/select/select.component.mjs +88 -0
- package/esm2022/lib/controls/tabs/tabs.component.mjs +47 -0
- package/esm2022/lib/controls/textbox/textbox.component.mjs +155 -0
- package/esm2022/lib/core/cache.service.mjs +105 -0
- package/esm2022/lib/core/custom-validators.mjs +29 -0
- package/esm2022/lib/core/date-time-helper.mjs +220 -0
- package/esm2022/lib/core/error.service.mjs +61 -0
- package/esm2022/lib/core/router-helper.service.mjs +111 -0
- package/esm2022/lib/core/scroll.service.mjs +89 -0
- package/{esm2020 → esm2022}/lib/core/telemetry-tracker.service.mjs +16 -16
- package/{esm2020 → esm2022}/lib/core/telemetry.service.mjs +38 -38
- package/esm2022/lib/core/validation-message.service.mjs +185 -0
- package/{esm2020 → esm2022}/lib/core/validation-patterns.mjs +30 -30
- package/esm2022/lib/core/window.service.mjs +186 -0
- package/esm2022/lib/display/app-bar/app-bar.component.mjs +46 -0
- package/esm2022/lib/display/avatar/avatar.component.mjs +67 -0
- package/esm2022/lib/display/avatar/avatar.service.mjs +64 -0
- package/esm2022/lib/display/confirm/confirm.component.mjs +168 -0
- package/{esm2020 → esm2022}/lib/display/dialog/dialog-content.mjs +1 -1
- package/esm2022/lib/display/dialog/dialog-group/dialog-group.component.mjs +63 -0
- package/{esm2020 → esm2022}/lib/display/dialog/dialog-types.mjs +76 -76
- package/esm2022/lib/display/dialog/dialog.component.mjs +281 -0
- package/{esm2020 → esm2022}/lib/display/dialog/dialog.service.mjs +71 -71
- package/{esm2020 → esm2022}/lib/display/help/help-types.mjs +1 -1
- package/esm2022/lib/display/hierarchy/hierarchy-base.mjs +111 -0
- package/{esm2020 → esm2022}/lib/display/hierarchy/hierarchy-mocks.spec.mjs +53 -53
- package/esm2022/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +61 -0
- package/esm2022/lib/display/item-display/item-display.component.mjs +81 -0
- package/esm2022/lib/display/json-display/json-display.component.mjs +47 -0
- package/esm2022/lib/display/resizable/resizable-base.mjs +120 -0
- package/{esm2020 → esm2022}/lib/display/resizable/resizable.component.mjs +52 -52
- package/{esm2020 → esm2022}/lib/display/spinner/spinner.component.mjs +12 -12
- package/esm2022/lib/display/splash/splash.component.mjs +42 -0
- package/{esm2020 → esm2022}/lib/display/splash/splash.service.mjs +35 -35
- package/{esm2020 → esm2022}/lib/display/table/resizable-column.component.mjs +20 -20
- package/esm2022/lib/display/table/resizable-table.directive.mjs +227 -0
- package/esm2022/lib/display/table/searchable-table.component.mjs +342 -0
- package/{esm2020 → esm2022}/lib/display/table/table-detail-row.component.mjs +19 -19
- package/esm2022/lib/display/table/table-locked-column.component.mjs +58 -0
- package/{esm2020 → esm2022}/lib/display/table/table-master-header-row.component.mjs +14 -14
- package/esm2022/lib/display/table/table-master-row.component.mjs +163 -0
- package/esm2022/lib/display/table/table-pagination.component.mjs +155 -0
- package/esm2022/lib/display/table/table-selectable-row.component.mjs +235 -0
- package/esm2022/lib/display/table/table.component.mjs +249 -0
- package/esm2022/lib/display/tags/tag.mjs +18 -0
- package/esm2022/lib/display/tags/tags.component.mjs +77 -0
- package/esm2022/lib/display/toast/toast/toast.component.mjs +77 -0
- package/{esm2020 → esm2022}/lib/display/toast/toast-types.mjs +7 -7
- package/{esm2020 → esm2022}/lib/display/toast/toast.service.mjs +35 -35
- package/esm2022/lib/display/toast/toaster/toaster.component.mjs +114 -0
- package/{esm2020 → esm2022}/lib/display/tooltip/tooltip.component.mjs +28 -28
- package/{esm2020 → esm2022}/lib/display/tooltip/tooltip.service.mjs +78 -78
- package/esm2022/lib/display/tooltip-directive/tooltip.directive.mjs +173 -0
- package/{esm2020 → esm2022}/lib/display/tour/tour-types.mjs +33 -33
- package/esm2022/lib/display/tour/tour.component.mjs +398 -0
- package/esm2022/lib/display/tour/tour.service.mjs +75 -0
- package/esm2022/lib/display/tree/tree.component.mjs +135 -0
- package/esm2022/lib/display/view-overlay/view-overlay.component.mjs +58 -0
- package/esm2022/lib/shared/directives/click-area-for/click-area-for.directive.mjs +32 -0
- package/esm2022/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +111 -0
- package/esm2022/lib/shared/directives/popup/popup-container.directive.mjs +166 -0
- package/esm2022/lib/shared/display/pipes/date-display.pipe.mjs +50 -0
- package/esm2022/lib/shared/display/pipes/highlight-text.pipe.mjs +30 -0
- package/esm2022/lib/shared/display/pipes/relative-date.pipe.mjs +62 -0
- package/esm2022/lib/shared/display/pipes/row-count.pipe.mjs +48 -0
- package/esm2022/lib/shared/display/pipes/time-display.pipe.mjs +41 -0
- package/esm2022/lib/shared/display.mjs +6 -0
- package/esm2022/lib/shared/form-group.helper.mjs +67 -0
- package/esm2022/lib/shared/json-helper.mjs +19 -0
- package/esm2022/lib/shared/lodash-helper.mjs +52 -0
- package/esm2022/lib/shared/page/page-base/page-base.component.mjs +387 -0
- package/{esm2020 → esm2022}/lib/shared/page/page-statuses.mjs +22 -22
- package/{esm2020 → esm2022}/lib/shared/page/page-title/page-title.component.mjs +23 -23
- package/esm2022/lib/shared/page/page-view/page-view.component.mjs +147 -0
- package/{esm2020 → esm2022}/lib/shared/testing/copy-button-base-test-injector-factory.spec.mjs +16 -16
- package/{esm2020 → esm2022}/lib/shared/testing/hierarchy-base-test-injector-factory.spec.mjs +16 -16
- package/{esm2020 → esm2022}/lib/shared/testing/page-base-component-test-helper.spec.mjs +37 -37
- package/esm2022/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +98 -0
- package/{esm2020 → esm2022}/lib/shared/testing/public-mocks.spec.mjs +148 -148
- package/{esm2020 → esm2022}/lib/shared/testing/spy-factory.spec.mjs +39 -39
- package/{esm2020 → esm2022}/lib/shared/testing/translation-mocks.spec.mjs +56 -56
- package/{esm2020 → esm2022}/lib/shared/user-preference.service.mjs +17 -17
- package/esm2022/lib/shared/wizard/wizard-base/wizard-base.component.mjs +246 -0
- package/{esm2020 → esm2022}/lib/shared/wizard/wizard-buttons/wizard-buttons.component.mjs +68 -68
- package/{esm2020 → esm2022}/lib/shared/wizard/wizard-progress/wizard-progress.component.mjs +18 -18
- package/esm2022/public-api.mjs +115 -0
- package/{fesm2020 → fesm2022}/energycap-components.mjs +11819 -12974
- package/fesm2022/energycap-components.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/components.module.d.ts +91 -92
- package/lib/controls/banner/banner.component.d.ts +50 -50
- package/lib/controls/button/button.component.d.ts +78 -78
- package/lib/controls/button/copy-button-base.directive.d.ts +20 -20
- package/lib/controls/button/copy-button.directive.d.ts +14 -14
- package/lib/controls/button/copy-table-button.directive.d.ts +19 -19
- package/lib/controls/calendar/calendar-item.component.d.ts +17 -22
- package/lib/controls/calendar/calendar.component.d.ts +54 -52
- package/lib/controls/calendar/calendar.types.d.ts +7 -11
- package/lib/controls/checkbox/checkbox.component.d.ts +65 -65
- package/lib/controls/collapsible-toggle/collapsible-toggle.component.d.ts +25 -25
- package/lib/controls/combobox/combobox.component.d.ts +418 -418
- package/lib/controls/date-input/date-input.component.d.ts +80 -115
- package/lib/controls/dropdown/dropdown.component.d.ts +161 -161
- package/lib/controls/file-upload/file-upload.component.d.ts +124 -124
- package/lib/controls/form-control/form-control.component.d.ts +30 -28
- package/lib/controls/form-control-base.d.ts +110 -110
- package/lib/controls/form-control-label/form-control-label.component.d.ts +73 -73
- package/lib/controls/form-group/form-group.component.d.ts +105 -105
- package/lib/controls/help-popover/help-popover.component.d.ts +11 -11
- package/lib/controls/item-picker/item-picker.component.d.ts +164 -164
- package/lib/controls/link-button/link-button.component.d.ts +5 -5
- package/lib/controls/menu/menu.component.d.ts +255 -255
- package/lib/controls/navigation/link-item.d.ts +32 -32
- package/lib/controls/navigation/nav-group.d.ts +18 -18
- package/lib/controls/navigation/nav-item-active.directive.d.ts +42 -42
- package/lib/controls/navigation/nav-item.d.ts +31 -31
- package/lib/controls/numericbox/numericbox.component.d.ts +148 -148
- package/lib/controls/popover/popover.component.d.ts +51 -51
- package/lib/controls/radio-button/radio-button-option.d.ts +19 -19
- package/lib/controls/radio-button/radio-button.component.d.ts +53 -53
- package/lib/controls/select/select.component.d.ts +44 -44
- package/lib/controls/tabs/tabs.component.d.ts +30 -30
- package/lib/controls/textbox/textbox.component.d.ts +107 -107
- package/lib/core/cache.service.d.ts +33 -33
- package/lib/core/custom-validators.d.ts +20 -20
- package/lib/core/date-time-helper.d.ts +101 -101
- package/lib/core/error.service.d.ts +20 -20
- package/lib/core/router-helper.service.d.ts +48 -48
- package/lib/core/scroll.service.d.ts +36 -36
- package/lib/core/telemetry-tracker.service.d.ts +13 -13
- package/lib/core/telemetry.service.d.ts +31 -31
- package/lib/core/validation-message.service.d.ts +26 -26
- package/lib/core/validation-patterns.d.ts +22 -22
- package/lib/core/window.service.d.ts +116 -116
- package/lib/display/app-bar/app-bar.component.d.ts +20 -20
- package/lib/display/avatar/avatar.component.d.ts +35 -35
- package/lib/display/avatar/avatar.service.d.ts +24 -24
- package/lib/display/confirm/confirm.component.d.ts +123 -123
- package/lib/display/dialog/dialog-content.d.ts +19 -19
- package/lib/display/dialog/dialog-group/dialog-group.component.d.ts +32 -32
- package/lib/display/dialog/dialog-types.d.ts +130 -130
- package/lib/display/dialog/dialog.component.d.ts +120 -120
- package/lib/display/dialog/dialog.service.d.ts +48 -48
- package/lib/display/help/help-types.d.ts +33 -33
- package/lib/display/hierarchy/hierarchy-base.d.ts +97 -97
- package/lib/display/hierarchy/hierarchy-mocks.spec.d.ts +53 -53
- package/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.d.ts +34 -34
- package/lib/display/item-display/item-display.component.d.ts +43 -43
- package/lib/display/json-display/json-display.component.d.ts +16 -16
- package/lib/display/resizable/resizable-base.d.ts +67 -67
- package/lib/display/resizable/resizable.component.d.ts +31 -31
- package/lib/display/spinner/spinner.component.d.ts +5 -5
- package/lib/display/splash/splash.component.d.ts +16 -16
- package/lib/display/splash/splash.service.d.ts +22 -22
- package/lib/display/table/resizable-column.component.d.ts +10 -10
- package/lib/display/table/resizable-table.directive.d.ts +93 -93
- package/lib/display/table/searchable-table.component.d.ts +206 -206
- package/lib/display/table/table-detail-row.component.d.ts +8 -8
- package/lib/display/table/table-locked-column.component.d.ts +20 -20
- package/lib/display/table/table-master-header-row.component.d.ts +9 -9
- package/lib/display/table/table-master-row.component.d.ts +113 -113
- package/lib/display/table/table-pagination.component.d.ts +91 -91
- package/lib/display/table/table-selectable-row.component.d.ts +102 -102
- package/lib/display/table/table.component.d.ts +121 -121
- package/lib/display/tags/tag.d.ts +18 -18
- package/lib/display/tags/tags.component.d.ts +48 -48
- package/lib/display/toast/toast/toast.component.d.ts +23 -23
- package/lib/display/toast/toast-types.d.ts +24 -24
- package/lib/display/toast/toast.service.d.ts +20 -20
- package/lib/display/toast/toaster/toaster.component.d.ts +35 -35
- package/lib/display/tooltip/tooltip.component.d.ts +70 -70
- package/lib/display/tooltip/tooltip.service.d.ts +16 -16
- package/lib/display/tooltip-directive/tooltip.directive.d.ts +44 -44
- package/lib/display/tour/tour-types.d.ts +70 -70
- package/lib/display/tour/tour.component.d.ts +147 -147
- package/lib/display/tour/tour.service.d.ts +38 -38
- package/lib/display/tree/tree.component.d.ts +75 -75
- package/lib/display/view-overlay/view-overlay.component.d.ts +38 -38
- package/lib/shared/directives/click-area-for/click-area-for.directive.d.ts +14 -14
- package/lib/shared/directives/if-viewport-width/if-viewport-width.directive.d.ts +60 -60
- package/lib/shared/directives/popup/popup-container.directive.d.ts +101 -101
- package/lib/shared/display/pipes/date-display.pipe.d.ts +21 -21
- package/lib/shared/display/pipes/highlight-text.pipe.d.ts +9 -9
- package/lib/shared/display/pipes/relative-date.pipe.d.ts +36 -36
- package/lib/shared/display/pipes/row-count.pipe.d.ts +23 -23
- package/lib/shared/display/pipes/time-display.pipe.d.ts +18 -18
- package/lib/shared/display.d.ts +42 -42
- package/lib/shared/form-group.helper.d.ts +31 -31
- package/lib/shared/json-helper.d.ts +7 -7
- package/lib/shared/lodash-helper.d.ts +18 -18
- package/lib/shared/page/page-base/page-base.component.d.ts +259 -259
- package/lib/shared/page/page-statuses.d.ts +13 -13
- package/lib/shared/page/page-title/page-title.component.d.ts +9 -9
- package/lib/shared/page/page-view/page-view.component.d.ts +102 -102
- package/lib/shared/testing/copy-button-base-test-injector-factory.spec.d.ts +4 -4
- package/lib/shared/testing/hierarchy-base-test-injector-factory.spec.d.ts +4 -4
- package/lib/shared/testing/page-base-component-test-helper.spec.d.ts +30 -30
- package/lib/shared/testing/page-base-component-test-injector-factory.spec.d.ts +28 -28
- package/lib/shared/testing/public-mocks.spec.d.ts +90 -90
- package/lib/shared/testing/spy-factory.spec.d.ts +27 -27
- package/lib/shared/testing/translation-mocks.spec.d.ts +30 -30
- package/lib/shared/user-preference.service.d.ts +13 -13
- package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +134 -134
- package/lib/shared/wizard/wizard-buttons/wizard-buttons.component.d.ts +27 -27
- package/lib/shared/wizard/wizard-progress/wizard-progress.component.d.ts +10 -10
- package/package.json +12 -18
- package/public-api.d.ts +111 -113
- package/schematics/rxjs-7-upgrade/index.d.ts +3 -3
- package/schematics/rxjs-7-upgrade/index.js +67 -67
- package/schematics/rxjs-7-upgrade/index.js.map +1 -1
- package/schematics/rxjs-7-upgrade/schema.d.ts +4 -4
- package/schematics/rxjs-7-upgrade/schema.js +2 -2
- package/schematics/utilities/typescript.d.ts +7 -7
- package/schematics/utilities/typescript.js +41 -41
- package/schematics/utilities/workspace.d.ts +8 -8
- package/schematics/utilities/workspace.js +71 -71
- package/schematics/utilities/workspace.js.map +1 -1
- package/src/assets/locales/en_US.json +1 -9
- package/esm2020/lib/components.module.mjs +0 -423
- package/esm2020/lib/controls/banner/banner.component.mjs +0 -109
- package/esm2020/lib/controls/button/button.component.mjs +0 -106
- package/esm2020/lib/controls/button/copy-button-base.directive.mjs +0 -67
- package/esm2020/lib/controls/button/copy-table-button.directive.mjs +0 -43
- package/esm2020/lib/controls/calendar/calendar-item.component.mjs +0 -91
- package/esm2020/lib/controls/calendar/calendar.component.mjs +0 -248
- package/esm2020/lib/controls/calendar/calendar.types.mjs +0 -2
- package/esm2020/lib/controls/checkbox/checkbox.component.mjs +0 -140
- package/esm2020/lib/controls/combobox/combobox.component.mjs +0 -879
- package/esm2020/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.mjs +0 -57
- package/esm2020/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.mjs +0 -62
- package/esm2020/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.mjs +0 -100
- package/esm2020/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.mjs +0 -101
- package/esm2020/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.mjs +0 -76
- package/esm2020/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.mjs +0 -79
- package/esm2020/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.mjs +0 -210
- package/esm2020/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.mjs +0 -81
- package/esm2020/lib/controls/date-input/date-input.component.mjs +0 -465
- package/esm2020/lib/controls/date-input/date-input.types.mjs +0 -44
- package/esm2020/lib/controls/dropdown/dropdown.component.mjs +0 -243
- package/esm2020/lib/controls/file-upload/file-upload.component.mjs +0 -261
- package/esm2020/lib/controls/form-control/form-control.component.mjs +0 -98
- package/esm2020/lib/controls/form-control-base.mjs +0 -151
- package/esm2020/lib/controls/form-control-label/form-control-label.component.mjs +0 -136
- package/esm2020/lib/controls/form-group/form-group.component.mjs +0 -261
- package/esm2020/lib/controls/item-picker/item-picker.component.mjs +0 -329
- package/esm2020/lib/controls/menu/menu.component.mjs +0 -485
- package/esm2020/lib/controls/navigation/nav-group.mjs +0 -39
- package/esm2020/lib/controls/navigation/nav-item-active.directive.mjs +0 -92
- package/esm2020/lib/controls/numericbox/numericbox.component.mjs +0 -372
- package/esm2020/lib/controls/popover/popover.component.mjs +0 -117
- package/esm2020/lib/controls/radio-button/radio-button.component.mjs +0 -82
- package/esm2020/lib/controls/select/select.component.mjs +0 -88
- package/esm2020/lib/controls/tabs/tabs.component.mjs +0 -47
- package/esm2020/lib/controls/textbox/textbox.component.mjs +0 -155
- package/esm2020/lib/core/cache.service.mjs +0 -105
- package/esm2020/lib/core/custom-validators.mjs +0 -29
- package/esm2020/lib/core/date-time-helper.mjs +0 -228
- package/esm2020/lib/core/error.service.mjs +0 -61
- package/esm2020/lib/core/router-helper.service.mjs +0 -111
- package/esm2020/lib/core/scroll.service.mjs +0 -89
- package/esm2020/lib/core/validation-message.service.mjs +0 -185
- package/esm2020/lib/core/window.service.mjs +0 -186
- package/esm2020/lib/display/app-bar/app-bar.component.mjs +0 -46
- package/esm2020/lib/display/avatar/avatar.component.mjs +0 -67
- package/esm2020/lib/display/avatar/avatar.service.mjs +0 -64
- package/esm2020/lib/display/confirm/confirm.component.mjs +0 -168
- package/esm2020/lib/display/dialog/dialog-group/dialog-group.component.mjs +0 -63
- package/esm2020/lib/display/dialog/dialog.component.mjs +0 -281
- package/esm2020/lib/display/hierarchy/hierarchy-base.mjs +0 -111
- package/esm2020/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +0 -61
- package/esm2020/lib/display/item-display/item-display.component.mjs +0 -81
- package/esm2020/lib/display/json-display/json-display.component.mjs +0 -47
- package/esm2020/lib/display/resizable/resizable-base.mjs +0 -120
- package/esm2020/lib/display/splash/splash.component.mjs +0 -42
- package/esm2020/lib/display/table/resizable-table.directive.mjs +0 -227
- package/esm2020/lib/display/table/searchable-table.component.mjs +0 -342
- package/esm2020/lib/display/table/table-locked-column.component.mjs +0 -58
- package/esm2020/lib/display/table/table-master-row.component.mjs +0 -163
- package/esm2020/lib/display/table/table-pagination.component.mjs +0 -155
- package/esm2020/lib/display/table/table-selectable-row.component.mjs +0 -235
- package/esm2020/lib/display/table/table.component.mjs +0 -249
- package/esm2020/lib/display/tags/tag.mjs +0 -18
- package/esm2020/lib/display/tags/tags.component.mjs +0 -77
- package/esm2020/lib/display/toast/toast/toast.component.mjs +0 -77
- package/esm2020/lib/display/toast/toaster/toaster.component.mjs +0 -114
- package/esm2020/lib/display/tooltip-directive/tooltip.directive.mjs +0 -173
- package/esm2020/lib/display/tour/tour.component.mjs +0 -398
- package/esm2020/lib/display/tour/tour.service.mjs +0 -75
- package/esm2020/lib/display/tree/tree.component.mjs +0 -135
- package/esm2020/lib/display/view-overlay/view-overlay.component.mjs +0 -58
- package/esm2020/lib/shared/directives/click-area-for/click-area-for.directive.mjs +0 -32
- package/esm2020/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +0 -111
- package/esm2020/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.mjs +0 -100
- package/esm2020/lib/shared/directives/popup/popup-container.directive.mjs +0 -163
- package/esm2020/lib/shared/display/pipes/date-display.pipe.mjs +0 -50
- package/esm2020/lib/shared/display/pipes/highlight-text.pipe.mjs +0 -30
- package/esm2020/lib/shared/display/pipes/relative-date.pipe.mjs +0 -62
- package/esm2020/lib/shared/display/pipes/row-count.pipe.mjs +0 -48
- package/esm2020/lib/shared/display/pipes/time-display.pipe.mjs +0 -41
- package/esm2020/lib/shared/display.mjs +0 -6
- package/esm2020/lib/shared/form-group.helper.mjs +0 -67
- package/esm2020/lib/shared/json-helper.mjs +0 -19
- package/esm2020/lib/shared/lodash-helper.mjs +0 -51
- package/esm2020/lib/shared/page/page-base/page-base.component.mjs +0 -387
- package/esm2020/lib/shared/page/page-view/page-view.component.mjs +0 -147
- package/esm2020/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +0 -98
- package/esm2020/lib/shared/wizard/wizard-base/wizard-base.component.mjs +0 -246
- package/esm2020/public-api.mjs +0 -117
- package/fesm2015/energycap-components.mjs +0 -13373
- package/fesm2015/energycap-components.mjs.map +0 -1
- package/fesm2020/energycap-components.mjs.map +0 -1
- package/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.d.ts +0 -42
- package/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.d.ts +0 -21
- package/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.d.ts +0 -21
- package/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.d.ts +0 -21
- package/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.d.ts +0 -18
- package/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.d.ts +0 -18
- package/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.d.ts +0 -21
- package/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.d.ts +0 -20
- package/lib/controls/date-input/date-input.types.d.ts +0 -62
- package/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.d.ts +0 -23
@@ -1,398 +0,0 @@
|
|
1
|
-
import { DOCUMENT } from '@angular/common';
|
2
|
-
import { Component, Inject, ViewChild } from '@angular/core';
|
3
|
-
import { Subject, lastValueFrom } from 'rxjs';
|
4
|
-
import { takeUntil } from 'rxjs/operators';
|
5
|
-
import * as i0 from "@angular/core";
|
6
|
-
import * as i1 from "./tour.service";
|
7
|
-
import * as i2 from "./../tooltip/tooltip.service";
|
8
|
-
import * as i3 from "../../core/telemetry.service";
|
9
|
-
import * as i4 from "../../core/cache.service";
|
10
|
-
import * as i5 from "../dialog/dialog.service";
|
11
|
-
import * as i6 from "@ngx-translate/core";
|
12
|
-
import * as i7 from "@angular/common";
|
13
|
-
import * as i8 from "../../controls/link-button/link-button.component";
|
14
|
-
export class TourComponent {
|
15
|
-
constructor(tourService, tooltipService, telemetryService, cacheService, dialogService, translateService, document) {
|
16
|
-
this.tourService = tourService;
|
17
|
-
this.tooltipService = tooltipService;
|
18
|
-
this.telemetryService = telemetryService;
|
19
|
-
this.cacheService = cacheService;
|
20
|
-
this.dialogService = dialogService;
|
21
|
-
this.translateService = translateService;
|
22
|
-
this.document = document;
|
23
|
-
/** Used to tell the UI that the step being shown is an exit step. This will change the
|
24
|
-
* link text and the action when clicked
|
25
|
-
*/
|
26
|
-
this.showDoneButton = false;
|
27
|
-
/** Array of tours provided when the start tour event was detected */
|
28
|
-
this.tours = [];
|
29
|
-
// Couple indexes for the current tour/step stored for easier reference when knowing if we are at the end of the steps/tours
|
30
|
-
this.currentStepIndex = -1;
|
31
|
-
this.currentTourIndex = -1;
|
32
|
-
/** Used to know if the restore step should be triggered when the tour is dismissed */
|
33
|
-
this.isAutoStart = false;
|
34
|
-
this.destroyed = new Subject();
|
35
|
-
}
|
36
|
-
ngOnInit() {
|
37
|
-
this.tourService.events.pipe(takeUntil(this.destroyed)).subscribe(async (event) => {
|
38
|
-
if (event.tourAction === 'start') {
|
39
|
-
await this.setupTourComponent(event);
|
40
|
-
}
|
41
|
-
else if (event.tourAction === 'end') {
|
42
|
-
if (this.currentTour) {
|
43
|
-
this.writeCompletionKeyForAllTours();
|
44
|
-
await this.endTour();
|
45
|
-
}
|
46
|
-
}
|
47
|
-
else if (event.tourAction === 'append') {
|
48
|
-
let visibleTours = event.tours;
|
49
|
-
// If this was triggered via auto start then we need to remove any tours that have been completed
|
50
|
-
if (event.isAutoStart) {
|
51
|
-
visibleTours = this.removeCompletedTours(visibleTours);
|
52
|
-
}
|
53
|
-
// If there is already a current tour, then we need to append the new tours to the current tour
|
54
|
-
if (this.currentTour) {
|
55
|
-
this.tours = this.tours.concat(visibleTours);
|
56
|
-
}
|
57
|
-
else {
|
58
|
-
// There is not a current tour, so treat this as a start event
|
59
|
-
await this.setupTourComponent(event);
|
60
|
-
}
|
61
|
-
}
|
62
|
-
});
|
63
|
-
}
|
64
|
-
ngOnDestroy() {
|
65
|
-
this.destroyed.next();
|
66
|
-
this.destroyed.unsubscribe();
|
67
|
-
}
|
68
|
-
/**
|
69
|
-
* Called when a restore step has been completed
|
70
|
-
*/
|
71
|
-
async done() {
|
72
|
-
this.writeCompletionKey(this.currentTour);
|
73
|
-
await this.endTour();
|
74
|
-
}
|
75
|
-
/**
|
76
|
-
* Called when a tour begins and when the user clicks next on the current tour step. It will handle any after click actions and then
|
77
|
-
* find the next step and present it to the user and transition to a restore step or new tour if needed.
|
78
|
-
*/
|
79
|
-
async showNextStep() {
|
80
|
-
// Before moving to the next step, make sure the current step does not have a click after defined. This could be hiding a menu
|
81
|
-
// that was opened for the soon to be previous step.
|
82
|
-
await this.waitForTimeout(this.handleClickAfter.bind(this));
|
83
|
-
// Remove any previous tooltips
|
84
|
-
this.removeTooltip();
|
85
|
-
// Get our next step index to display to the user
|
86
|
-
this.currentStepIndex = this.getNextAvailableStepIndex();
|
87
|
-
if (this.currentStepIndex === -1) {
|
88
|
-
// No more steps found, we either need to check for the exit step if this is the last tour
|
89
|
-
// in the tours array or advance to the next tour
|
90
|
-
if (this.currentTourIndex === this.tours.length - 1) {
|
91
|
-
await this.handleExitStep();
|
92
|
-
}
|
93
|
-
else {
|
94
|
-
// Write the completion key for the current tour before we move to the next
|
95
|
-
this.writeCompletionKey(this.currentTour);
|
96
|
-
this.currentTourIndex++;
|
97
|
-
await this.showNextTour();
|
98
|
-
}
|
99
|
-
}
|
100
|
-
else {
|
101
|
-
this.currentTourStep = this.currentTour?.steps[this.currentStepIndex];
|
102
|
-
// Now that we have our current step index, take care of any click before elements before showing the
|
103
|
-
// tooltip. This could be opening a menu to get the tooltip element visible.
|
104
|
-
await this.waitForTimeout(this.handleClickBefore.bind(this));
|
105
|
-
// Click befores are done, now let's show the tooltip defined in the tour step
|
106
|
-
await this.waitForTimeout(this.showStepTooltip.bind(this));
|
107
|
-
}
|
108
|
-
}
|
109
|
-
async setupTourComponent(event) {
|
110
|
-
// End any tours that may have been in progress if the user kicks off a new one
|
111
|
-
if (this.currentTour) {
|
112
|
-
this.writeCompletionKeyForAllTours();
|
113
|
-
await this.endTour();
|
114
|
-
}
|
115
|
-
this.isAutoStart = event.isAutoStart;
|
116
|
-
if (event.isAutoStart) {
|
117
|
-
this.tours = this.removeCompletedTours(event.tours);
|
118
|
-
}
|
119
|
-
else {
|
120
|
-
this.tours = event.tours;
|
121
|
-
}
|
122
|
-
if (this.tours.length) {
|
123
|
-
this.showDoneButton = false;
|
124
|
-
this.currentTourStep = undefined;
|
125
|
-
this.currentStepIndex = -1;
|
126
|
-
// Prime the index for the first tour
|
127
|
-
this.currentTourIndex = 0;
|
128
|
-
await this.showNextTour();
|
129
|
-
}
|
130
|
-
}
|
131
|
-
/**
|
132
|
-
* Shows a tour and emits an event that it was started
|
133
|
-
* @param tour
|
134
|
-
*/
|
135
|
-
async showNextTour() {
|
136
|
-
// Track a tour started event if the consumer of the library has telemetry configured
|
137
|
-
this.telemetryService.trackEvent('TourStarted', { tourId: this.currentTour.id });
|
138
|
-
let continueTour = true;
|
139
|
-
if (this.isAutoStart && this.currentTourIndex === 0 && this.currentTour?.introDialog) {
|
140
|
-
let result = await lastValueFrom(this.dialogService.openDialog(this.currentTour.introDialog.content, this.currentTour.introDialog.size ?? 'small', this.currentTour.introDialog.context ?? undefined, this.currentTour.introDialog.options ?? undefined));
|
141
|
-
if (!result.save) {
|
142
|
-
continueTour = false;
|
143
|
-
this.writeCompletionKeyForAllTours();
|
144
|
-
// Advance to the last tour if there are multiple for its exit step
|
145
|
-
this.currentTourIndex = this.tours.length - 1;
|
146
|
-
await this.handleExitStep();
|
147
|
-
}
|
148
|
-
}
|
149
|
-
if (continueTour) {
|
150
|
-
this.showNextStep();
|
151
|
-
}
|
152
|
-
}
|
153
|
-
async endTour() {
|
154
|
-
// Handle any click afters for the active step shown before shutting it down
|
155
|
-
await this.waitForTimeout(this.handleClickAfter.bind(this));
|
156
|
-
this.currentTourStep = undefined;
|
157
|
-
this.tours = [];
|
158
|
-
this.removeTooltip();
|
159
|
-
}
|
160
|
-
/**
|
161
|
-
* Displays a tooltip for the current tour step
|
162
|
-
*/
|
163
|
-
async showStepTooltip() {
|
164
|
-
// Track an event if the consumer of the library has telemetry configured
|
165
|
-
this.telemetryService.trackEvent('TourStepChange', { tourId: this.currentTour.id, tourStepId: this.currentTourStep.id });
|
166
|
-
const tooltipElement = this.document.querySelector(this.currentTourStep.anchor.selector);
|
167
|
-
if (tooltipElement) {
|
168
|
-
// Default width if none provided
|
169
|
-
let stepWidth = 432;
|
170
|
-
// Check the current tour step width and decide if it needs to change from the default value
|
171
|
-
// based on whether the step defined it or not
|
172
|
-
if (this.currentTourStep?.width !== undefined) {
|
173
|
-
if (typeof this.currentTourStep.width === 'number') {
|
174
|
-
stepWidth = this.currentTourStep.width;
|
175
|
-
}
|
176
|
-
else if (this.currentTourStep.width === 'auto') {
|
177
|
-
stepWidth = undefined;
|
178
|
-
}
|
179
|
-
}
|
180
|
-
const options = {
|
181
|
-
id: `${this.currentTour?.id}_${this.currentTourStep.id}`,
|
182
|
-
text: this.translateService.instant(this.currentTourStep.text),
|
183
|
-
title: this.currentTourStep.title ? this.translateService.instant(this.currentTourStep.title) : undefined,
|
184
|
-
customContent: this.custom,
|
185
|
-
dismissible: true,
|
186
|
-
maxWidth: this.currentTourStep?.maxWidth,
|
187
|
-
width: stepWidth,
|
188
|
-
backgroundColor: 'var(--ec-background-color-tour)',
|
189
|
-
titleColor: 'var(--ec-color-tour-title)'
|
190
|
-
};
|
191
|
-
this.tooltip = this.tooltipService.show(tooltipElement, this.currentTourStep.anchor?.position, options);
|
192
|
-
await this.waitForTimeout(this.focusOnNextOrDoneButton.bind(this));
|
193
|
-
this.subscribeToTooltipOnHide();
|
194
|
-
}
|
195
|
-
}
|
196
|
-
/**
|
197
|
-
* Subscribes to the tooltips onHide event emitter and reacts if the user dismisses the tooltip
|
198
|
-
*/
|
199
|
-
async subscribeToTooltipOnHide() {
|
200
|
-
let tooltipSubscription = this.tooltip?.onHide.pipe(takeUntil(this.destroyed)).subscribe(async () => {
|
201
|
-
tooltipSubscription?.unsubscribe();
|
202
|
-
this.writeCompletionKeyForAllTours();
|
203
|
-
// If this is dismissed during an auto start tour then handle the exit step
|
204
|
-
// Check that the done button is shown as well, if the done is shown then we're in the exit step
|
205
|
-
// and dismissing should just end the tour
|
206
|
-
if (this.isAutoStart && !this.showDoneButton) {
|
207
|
-
// Advance to the last tour if there are multiple for its exit step
|
208
|
-
this.currentTourIndex = this.tours.length - 1;
|
209
|
-
await this.handleExitStep();
|
210
|
-
}
|
211
|
-
else {
|
212
|
-
await this.endTour();
|
213
|
-
}
|
214
|
-
});
|
215
|
-
}
|
216
|
-
/**
|
217
|
-
* Loops through the current tour steps starting after the current step index. It will try to find a visible
|
218
|
-
* selector and if so return the index.
|
219
|
-
* @returns
|
220
|
-
*/
|
221
|
-
getNextAvailableStepIndex() {
|
222
|
-
let nextStepIndex = -1;
|
223
|
-
// Look through the steps starting with the current index and find the next that is avaiable
|
224
|
-
// for the user.
|
225
|
-
for (let i = this.currentStepIndex + 1; i < this.currentTour.steps.length; i++) {
|
226
|
-
if (this.currentTour?.steps[i].anchor && this.stepElementFound(this.currentTour.steps[i].anchor)) {
|
227
|
-
return i;
|
228
|
-
}
|
229
|
-
}
|
230
|
-
return nextStepIndex;
|
231
|
-
}
|
232
|
-
/**
|
233
|
-
* Try to find the tour step element to know if it is visible for the user. Check for the clickBefore first if defined
|
234
|
-
* @param anchor
|
235
|
-
* @returns
|
236
|
-
*/
|
237
|
-
stepElementFound(anchor) {
|
238
|
-
if (anchor.clickBefore) {
|
239
|
-
return this.document.querySelector(anchor.clickBefore) !== null;
|
240
|
-
}
|
241
|
-
else {
|
242
|
-
return this.document.querySelector(anchor.selector) !== null;
|
243
|
-
}
|
244
|
-
}
|
245
|
-
/**
|
246
|
-
* Some tour steps may have a click after defined. If so call the click method on the html element
|
247
|
-
*/
|
248
|
-
handleClickAfter() {
|
249
|
-
let selector = this.currentTourStep?.anchor?.clickAfter;
|
250
|
-
if (selector) {
|
251
|
-
this.clickElementIfFound(selector);
|
252
|
-
}
|
253
|
-
}
|
254
|
-
/**
|
255
|
-
* Some tour steps may have a click before defined. If so call the click method on the html element
|
256
|
-
*/
|
257
|
-
handleClickBefore() {
|
258
|
-
if (this.currentTourStep?.anchor?.clickBefore) {
|
259
|
-
this.clickElementIfFound(this.currentTourStep.anchor?.clickBefore);
|
260
|
-
}
|
261
|
-
}
|
262
|
-
/**
|
263
|
-
* Checks for an exit step on the current tour and if found displays the step
|
264
|
-
*/
|
265
|
-
async handleExitStep() {
|
266
|
-
if (this.currentTour?.exitStep) {
|
267
|
-
this.removeTooltip();
|
268
|
-
this.showDoneButton = true;
|
269
|
-
this.currentTourStep = this.currentTour?.exitStep;
|
270
|
-
await this.waitForTimeout(this.handleClickBefore.bind(this));
|
271
|
-
await this.waitForTimeout(this.showStepTooltip.bind(this));
|
272
|
-
}
|
273
|
-
}
|
274
|
-
/**
|
275
|
-
* Try to find the element with the selector provided and if so click it. This is how tour steps will open/close menus to
|
276
|
-
* give a tour to the user
|
277
|
-
* @param selector
|
278
|
-
*/
|
279
|
-
clickElementIfFound(selector) {
|
280
|
-
if (selector !== undefined) {
|
281
|
-
const element = this.document.querySelector(selector);
|
282
|
-
if (element) {
|
283
|
-
element.click();
|
284
|
-
}
|
285
|
-
}
|
286
|
-
}
|
287
|
-
/**
|
288
|
-
* When auto starting tours we will want to remove any that have the local storage key written as completed so
|
289
|
-
* they are not presented to the user again.
|
290
|
-
* @param tours
|
291
|
-
* @returns
|
292
|
-
*/
|
293
|
-
removeCompletedTours(tours) {
|
294
|
-
return tours.filter(tour => {
|
295
|
-
let cacheValue = this.cacheService.getItem(this.makeCacheKey(tour));
|
296
|
-
if (cacheValue) {
|
297
|
-
return !cacheValue.completed;
|
298
|
-
}
|
299
|
-
else {
|
300
|
-
return true;
|
301
|
-
}
|
302
|
-
});
|
303
|
-
}
|
304
|
-
/**
|
305
|
-
* Writes a key to local storage so the tour will not be shown again automatically
|
306
|
-
*/
|
307
|
-
writeCompletionKey(tour) {
|
308
|
-
if (tour) {
|
309
|
-
this.cacheService.setItem(this.makeCacheKey(tour), { completed: true });
|
310
|
-
}
|
311
|
-
}
|
312
|
-
/**
|
313
|
-
* When dismissing a tour or one being dismissed via a navigation event, etc we will want to mark
|
314
|
-
* every tour in the array as completed so it doesn't resurface unless the user requests the tour.
|
315
|
-
* This function will loop over all and write the local storage key
|
316
|
-
*/
|
317
|
-
writeCompletionKeyForAllTours() {
|
318
|
-
this.tours.forEach(tour => {
|
319
|
-
this.writeCompletionKey(tour);
|
320
|
-
});
|
321
|
-
}
|
322
|
-
/**
|
323
|
-
* Cache key used to set/get the completion status of a tour
|
324
|
-
* @param tour
|
325
|
-
* @returns
|
326
|
-
*/
|
327
|
-
makeCacheKey(tour) {
|
328
|
-
return this.tourService.getCacheKey(tour);
|
329
|
-
}
|
330
|
-
/**
|
331
|
-
* Removes a tooltip from the view, used when switching tour steps and closing a tour
|
332
|
-
*/
|
333
|
-
removeTooltip() {
|
334
|
-
this.tooltip?.overlayRef?.dispose();
|
335
|
-
}
|
336
|
-
/**
|
337
|
-
* Returns the tour based on the current index
|
338
|
-
*/
|
339
|
-
get currentTour() {
|
340
|
-
if (this.currentTourIndex > -1 && this.currentTourIndex < this.tours.length) {
|
341
|
-
return this.tours[this.currentTourIndex];
|
342
|
-
}
|
343
|
-
else {
|
344
|
-
return undefined;
|
345
|
-
}
|
346
|
-
}
|
347
|
-
/**
|
348
|
-
* The click before/after and show tooltip functions need to be wrapped in setTimeout for the UI
|
349
|
-
* to operate correctly but setTimeout is an action we cannot await so we're wrapping it in a promise to return
|
350
|
-
* so the function calls can await the action
|
351
|
-
* @param fn
|
352
|
-
* @returns
|
353
|
-
*/
|
354
|
-
waitForTimeout(fn) {
|
355
|
-
return new Promise(resolve => {
|
356
|
-
setTimeout(() => {
|
357
|
-
fn();
|
358
|
-
resolve();
|
359
|
-
});
|
360
|
-
});
|
361
|
-
}
|
362
|
-
/**
|
363
|
-
* Find the "next" or "done" button and focus on it.
|
364
|
-
*
|
365
|
-
* They are mutually exclusive, so if we cannot find the next button
|
366
|
-
* we look for the done button.
|
367
|
-
*/
|
368
|
-
focusOnNextOrDoneButton() {
|
369
|
-
if (!this.focusOnElement(`#${this.currentTourStep.id}_nextButton`)) {
|
370
|
-
this.focusOnElement(`#${this.currentTourStep.id}_doneButton`);
|
371
|
-
}
|
372
|
-
}
|
373
|
-
/**
|
374
|
-
* Find an element with given selector and focus on it.
|
375
|
-
* Return false if element not found.
|
376
|
-
*/
|
377
|
-
focusOnElement(selector) {
|
378
|
-
const element = this.document.querySelector(selector);
|
379
|
-
if (element) {
|
380
|
-
element.focus();
|
381
|
-
return true;
|
382
|
-
}
|
383
|
-
return false;
|
384
|
-
}
|
385
|
-
}
|
386
|
-
TourComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TourComponent, deps: [{ token: i1.TourService }, { token: i2.TooltipService }, { token: i3.TelemetryService }, { token: i4.CacheService }, { token: i5.DialogService }, { token: i6.TranslateService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
|
387
|
-
TourComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: TourComponent, selector: "ec-tour", viewQueries: [{ propertyName: "custom", first: true, predicate: ["tourTooltip"], descendants: true }], ngImport: i0, template: "<ng-template #tourTooltip>\r\n <div *ngIf=\"currentTourStep?.media\"\r\n class=\"mb-3\">\r\n <img id=\"{{currentTourStep?.id + '_media'}}\"\r\n style=\"max-width: 100%;\"\r\n src=\"{{currentTourStep?.media}}\">\r\n </div>\r\n <div class=\"font-color-primary-light px-3 mb-3\"\r\n [innerHtml]=\"currentTourStep?.text | translate\">\r\n </div>\r\n <a *ngIf=\"currentTourStep?.helpLink\" id=\"{{currentTourStep?.id + '_helpLink'}}\" class=\"d-block mb-3 px-3\" target=\"_blank\" href=\"{{currentTourStep?.helpLink}}\" translate>LearnMore_SC</a>\r\n <footer class=\"px-3 mt-3 d-flex\">\r\n <button id=\"{{currentTourStep?.id + '_nextButton'}}\" *ngIf=\"!showDoneButton\" class=\"ml-auto tourAction\" ecLinkButton (click)=\"showNextStep()\" translate>Next_TC</button>\r\n <button id=\"{{currentTourStep?.id + '_doneButton'}}\" *ngIf=\"showDoneButton\" class=\"ml-auto tourAction\" ecLinkButton (click)=\"done()\" translate>Done_TC</button>\r\n </footer>\r\n</ng-template>", styles: [".tourAction{color:var(--ec-tour-action-color, var(--ec-color-brand-green))!important}\n"], dependencies: [{ kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i8.LinkButtonComponent, selector: "button[ecLinkButton]" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
|
388
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TourComponent, decorators: [{
|
389
|
-
type: Component,
|
390
|
-
args: [{ selector: 'ec-tour', template: "<ng-template #tourTooltip>\r\n <div *ngIf=\"currentTourStep?.media\"\r\n class=\"mb-3\">\r\n <img id=\"{{currentTourStep?.id + '_media'}}\"\r\n style=\"max-width: 100%;\"\r\n src=\"{{currentTourStep?.media}}\">\r\n </div>\r\n <div class=\"font-color-primary-light px-3 mb-3\"\r\n [innerHtml]=\"currentTourStep?.text | translate\">\r\n </div>\r\n <a *ngIf=\"currentTourStep?.helpLink\" id=\"{{currentTourStep?.id + '_helpLink'}}\" class=\"d-block mb-3 px-3\" target=\"_blank\" href=\"{{currentTourStep?.helpLink}}\" translate>LearnMore_SC</a>\r\n <footer class=\"px-3 mt-3 d-flex\">\r\n <button id=\"{{currentTourStep?.id + '_nextButton'}}\" *ngIf=\"!showDoneButton\" class=\"ml-auto tourAction\" ecLinkButton (click)=\"showNextStep()\" translate>Next_TC</button>\r\n <button id=\"{{currentTourStep?.id + '_doneButton'}}\" *ngIf=\"showDoneButton\" class=\"ml-auto tourAction\" ecLinkButton (click)=\"done()\" translate>Done_TC</button>\r\n </footer>\r\n</ng-template>", styles: [".tourAction{color:var(--ec-tour-action-color, var(--ec-color-brand-green))!important}\n"] }]
|
391
|
-
}], ctorParameters: function () { return [{ type: i1.TourService }, { type: i2.TooltipService }, { type: i3.TelemetryService }, { type: i4.CacheService }, { type: i5.DialogService }, { type: i6.TranslateService }, { type: Document, decorators: [{
|
392
|
-
type: Inject,
|
393
|
-
args: [DOCUMENT]
|
394
|
-
}] }]; }, propDecorators: { custom: [{
|
395
|
-
type: ViewChild,
|
396
|
-
args: ['tourTooltip']
|
397
|
-
}] } });
|
398
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG91ci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS90b3VyL3RvdXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2Rpc3BsYXkvdG91ci90b3VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBdUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxGLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7OztBQWUzQyxNQUFNLE9BQU8sYUFBYTtJQTRCeEIsWUFDVSxXQUF3QixFQUN4QixjQUE4QixFQUM5QixnQkFBa0MsRUFDbEMsWUFBMEIsRUFDMUIsYUFBNEIsRUFDNUIsZ0JBQWtDLEVBQ2hCLFFBQWtCO1FBTnBDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDaEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQTdCOUM7O1dBRUc7UUFDSSxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUt2QyxxRUFBcUU7UUFDN0QsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUUzQiw0SEFBNEg7UUFDcEgscUJBQWdCLEdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDOUIs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Uzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgbGFzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBDYWNoZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2NhY2hlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUZWxlbWV0cnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS90ZWxlbWV0cnkuc2VydmljZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi9kaWFsb2cvZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb29sdGlwQ29tcG9uZW50LCBUb29sdGlwT3B0aW9ucyB9IGZyb20gJy4vLi4vdG9vbHRpcC90b29sdGlwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRvb2x0aXBTZXJ2aWNlIH0gZnJvbSAnLi8uLi90b29sdGlwL3Rvb2x0aXAuc2VydmljZSc7XHJcbmltcG9ydCB7IFRvdXIsIFRvdXJBbmNob3IsIFRvdXJDYWNoZUVudHJ5LCBUb3VyRXZlbnQsIFRvdXJTdGVwIH0gZnJvbSAnLi90b3VyLXR5cGVzJztcclxuaW1wb3J0IHsgVG91clNlcnZpY2UgfSBmcm9tICcuL3RvdXIuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VjLXRvdXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90b3VyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90b3VyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRvdXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8qKiBDdXJyZW50IHRvdXIgc3RlcCBiZWluZyBzaG93biB0byB0aGUgdXNlci4gVGhlIGN1c3RvbSBjb250ZW50IGluIHRoZSB0ZW1wbGF0ZSBpcyBib3VuZCB0byBwcm9wZXJ0aWVzIG9uIHRoaXMgYW5kIHRoZXJlZm9yIG5lZWRzIHRvIGJlXHJcbiAgKiAgaXRzIG93biBwcm9wZXJ0eS4gVGhlIGV4aXRTdGVwIGlzIGEgdG91ciBzdGVwIGFuZCB0aGlzIHdpbGwgaG9sZCB0aGF0IHN0ZXAgYXQgdGhlIGVuZCBvZiB0aGUgdG91ci5cclxuICAqL1xyXG4gIHB1YmxpYyBjdXJyZW50VG91clN0ZXA/OiBUb3VyU3RlcDtcclxuXHJcbiAgLyoqIFVzZWQgdG8gdGVsbCB0aGUgVUkgdGhhdCB0aGUgc3RlcCBiZWluZyBzaG93biBpcyBhbiBleGl0IHN0ZXAuIFRoaXMgd2lsbCBjaGFuZ2UgdGhlXHJcbiAgICogIGxpbmsgdGV4dCBhbmQgdGhlIGFjdGlvbiB3aGVuIGNsaWNrZWRcclxuICAgKi9cclxuICBwdWJsaWMgc2hvd0RvbmVCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqIFJlZmVyZW5jZSB0byB0aGUgdG9vbHRpcCB1c2VkIGZvciB0aGUgdG91ciBzdGVwcyAqL1xyXG4gIHB1YmxpYyB0b29sdGlwPzogVG9vbHRpcENvbXBvbmVudDtcclxuXHJcbiAgLyoqIEFycmF5IG9mIHRvdXJzIHByb3ZpZGVkIHdoZW4gdGhlIHN0YXJ0IHRvdXIgZXZlbnQgd2FzIGRldGVjdGVkICovXHJcbiAgcHJpdmF0ZSB0b3VyczogVG91cltdID0gW107XHJcblxyXG4gIC8vIENvdXBsZSBpbmRleGVzIGZvciB0aGUgY3VycmVudCB0b3VyL3N0ZXAgc3RvcmVkIGZvciBlYXNpZXIgcmVmZXJlbmNlIHdoZW4ga25vd2luZyBpZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgc3RlcHMvdG91cnNcclxuICBwcml2YXRlIGN1cnJlbnRTdGVwSW5kZXg6IG51bWJlciA9IC0xO1xyXG4gIHByaXZhdGUgY3VycmVudFRvdXJJbmRleDogbnVtYmVyID0gLTE7XHJcblxyXG4gIC8qKiBVc2VkIHRvIGtub3cgaWYgdGhlIHJlc3RvcmUgc3RlcCBzaG91bGQgYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIHRvdXIgaXMgZGlzbWlzc2VkICovXHJcbiAgcHJpdmF0ZSBpc0F1dG9TdGFydDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIGRlc3Ryb3llZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3RvdXJUb29sdGlwJykgcHVibGljIGN1c3RvbSE6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB0b3VyU2VydmljZTogVG91clNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRvb2x0aXBTZXJ2aWNlOiBUb29sdGlwU2VydmljZSxcclxuICAgIHByaXZhdGUgdGVsZW1ldHJ5U2VydmljZTogVGVsZW1ldHJ5U2VydmljZSxcclxuICAgIHByaXZhdGUgY2FjaGVTZXJ2aWNlOiBDYWNoZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCxcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMudG91clNlcnZpY2UuZXZlbnRzLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZClcclxuICAgICkuc3Vic2NyaWJlKGFzeW5jIGV2ZW50ID0+IHtcclxuICAgICAgaWYgKGV2ZW50LnRvdXJBY3Rpb24gPT09ICdzdGFydCcpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnNldHVwVG91ckNvbXBvbmVudChldmVudCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQudG91ckFjdGlvbiA9PT0gJ2VuZCcpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50VG91cikge1xyXG4gICAgICAgICAgdGhpcy53cml0ZUNvbXBsZXRpb25LZXlGb3JBbGxUb3VycygpO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5lbmRUb3VyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LnRvdXJBY3Rpb24gPT09ICdhcHBlbmQnKSB7XHJcbiAgICAgICAgbGV0IHZpc2libGVUb3VyczogVG91cltdID0gZXZlbnQudG91cnM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gSWYgdGhpcyB3YXMgdHJpZ2dlcmVkIHZpYSBhdXRvIHN0YXJ0IHRoZW4gd2UgbmVlZCB0byByZW1vdmUgYW55IHRvdXJzIHRoYXQgaGF2ZSBiZWVuIGNvbXBsZXRlZFxyXG4gICAgICAgIGlmIChldmVudC5pc0F1dG9TdGFydCkge1xyXG4gICAgICAgICAgdmlzaWJsZVRvdXJzID0gdGhpcy5yZW1vdmVDb21wbGV0ZWRUb3Vycyh2aXNpYmxlVG91cnMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIGN1cnJlbnQgdG91ciwgdGhlbiB3ZSBuZWVkIHRvIGFwcGVuZCB0aGUgbmV3IHRvdXJzIHRvIHRoZSBjdXJyZW50IHRvdXJcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50VG91cikge1xyXG4gICAgICAgICAgdGhpcy50b3VycyA9IHRoaXMudG91cnMuY29uY2F0KHZpc2libGVUb3Vycyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIFRoZXJlIGlzIG5vdCBhIGN1cnJlbnQgdG91ciwgc28gdHJlYXQgdGhpcyBhcyBhIHN0YXJ0IGV2ZW50XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnNldHVwVG91ckNvbXBvbmVudChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95ZWQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95ZWQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxlZCB3aGVuIGEgcmVzdG9yZSBzdGVwIGhhcyBiZWVuIGNvbXBsZXRlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBhc3luYyBkb25lKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy53cml0ZUNvbXBsZXRpb25LZXkodGhpcy5jdXJyZW50VG91cik7XHJcbiAgICBhd2FpdCB0aGlzLmVuZFRvdXIoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxlZCB3aGVuIGEgdG91ciBiZWdpbnMgYW5kIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG5leHQgb24gdGhlIGN1cnJlbnQgdG91ciBzdGVwLiBJdCB3aWxsIGhhbmRsZSBhbnkgYWZ0ZXIgY2xpY2sgYWN0aW9ucyBhbmQgdGhlblxyXG4gICAqIGZpbmQgdGhlIG5leHQgc3RlcCBhbmQgcHJlc2VudCBpdCB0byB0aGUgdXNlciBhbmQgdHJhbnNpdGlvbiB0byBhIHJlc3RvcmUgc3RlcCBvciBuZXcgdG91ciBpZiBuZWVkZWQuXHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIHNob3dOZXh0U3RlcCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIC8vIEJlZm9yZSBtb3ZpbmcgdG8gdGhlIG5leHQgc3RlcCwgbWFrZSBzdXJlIHRoZSBjdXJyZW50IHN0ZXAgZG9lcyBub3QgaGF2ZSBhIGNsaWNrIGFmdGVyIGRlZmluZWQuIFRoaXMgY291bGQgYmUgaGlkaW5nIGEgbWVudVxyXG4gICAgLy8gdGhhdCB3YXMgb3BlbmVkIGZvciB0aGUgc29vbiB0byBiZSBwcmV2aW91cyBzdGVwLlxyXG4gICAgYXdhaXQgdGhpcy53YWl0Rm9yVGltZW91dCh0aGlzLmhhbmRsZUNsaWNrQWZ0ZXIuYmluZCh0aGlzKSk7XHJcblxyXG4gICAgLy8gUmVtb3ZlIGFueSBwcmV2aW91cyB0b29sdGlwc1xyXG4gICAgdGhpcy5yZW1vdmVUb29sdGlwKCk7XHJcblxyXG4gICAgLy8gR2V0IG91ciBuZXh0IHN0ZXAgaW5kZXggdG8gZGlzcGxheSB0byB0aGUgdXNlclxyXG4gICAgdGhpcy5jdXJyZW50U3RlcEluZGV4ID0gdGhpcy5nZXROZXh0QXZhaWxhYmxlU3RlcEluZGV4KCk7XHJcblxyXG4gICAgaWYgKHRoaXMuY3VycmVudFN0ZXBJbmRleCA9PT0gLTEpIHtcclxuICAgICAgLy8gTm8gbW9yZSBzdGVwcyBmb3VuZCwgd2UgZWl0aGVyIG5lZWQgdG8gY2hlY2sgZm9yIHRoZSBleGl0IHN0ZXAgaWYgdGhpcyBpcyB0aGUgbGFzdCB0b3VyXHJcbiAgICAgIC8vIGluIHRoZSB0b3VycyBhcnJheSBvciBhZHZhbmNlIHRvIHRoZSBuZXh0IHRvdXJcclxuICAgICAgaWYgKHRoaXMuY3VycmVudFRvdXJJbmRleCA9PT0gdGhpcy50b3Vycy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVFeGl0U3RlcCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFdyaXRlIHRoZSBjb21wbGV0aW9uIGtleSBmb3IgdGhlIGN1cnJlbnQgdG91ciBiZWZvcmUgd2UgbW92ZSB0byB0aGUgbmV4dFxyXG4gICAgICAgIHRoaXMud3JpdGVDb21wbGV0aW9uS2V5KHRoaXMuY3VycmVudFRvdXIpO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRUb3VySW5kZXgrKztcclxuICAgICAgICBhd2FpdCB0aGlzLnNob3dOZXh0VG91cigpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnJlbnRUb3VyU3RlcCA9IHRoaXMuY3VycmVudFRvdXI/LnN0ZXBzW3RoaXMuY3VycmVudFN0ZXBJbmRleF07XHJcblxyXG4gICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIG91ciBjdXJyZW50IHN0ZXAgaW5kZXgsIHRha2UgY2FyZSBvZiBhbnkgY2xpY2sgYmVmb3JlIGVsZW1lbnRzIGJlZm9yZSBzaG93aW5nIHRoZVxyXG4gICAgICAvLyB0b29sdGlwLiBUaGlzIGNvdWxkIGJlIG9wZW5pbmcgYSBtZW51IHRvIGdldCB0aGUgdG9vbHRpcCBlbGVtZW50IHZpc2libGUuXHJcbiAgICAgIGF3YWl0IHRoaXMud2FpdEZvclRpbWVvdXQodGhpcy5oYW5kbGVDbGlja0JlZm9yZS5iaW5kKHRoaXMpKTtcclxuXHJcbiAgICAgIC8vIENsaWNrIGJlZm9yZXMgYXJlIGRvbmUsIG5vdyBsZXQncyBzaG93IHRoZSB0b29sdGlwIGRlZmluZWQgaW4gdGhlIHRvdXIgc3RlcFxyXG4gICAgICBhd2FpdCB0aGlzLndhaXRGb3JUaW1lb3V0KHRoaXMuc2hvd1N0ZXBUb29sdGlwLmJpbmQodGhpcykpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBzZXR1cFRvdXJDb21wb25lbnQoZXZlbnQ6IFRvdXJFdmVudCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy8gRW5kIGFueSB0b3VycyB0aGF0IG1heSBoYXZlIGJlZW4gaW4gcHJvZ3Jlc3MgaWYgdGhlIHVzZXIga2lja3Mgb2ZmIGEgbmV3IG9uZVxyXG4gICAgaWYgKHRoaXMuY3VycmVudFRvdXIpIHtcclxuICAgICAgdGhpcy53cml0ZUNvbXBsZXRpb25LZXlGb3JBbGxUb3VycygpO1xyXG4gICAgICBhd2FpdCB0aGlzLmVuZFRvdXIoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzQXV0b1N0YXJ0ID0gZXZlbnQuaXNBdXRvU3RhcnQ7XHJcblxyXG4gICAgaWYgKGV2ZW50LmlzQXV0b1N0YXJ0KSB7XHJcbiAgICAgIHRoaXMudG91cnMgPSB0aGlzLnJlbW92ZUNvbXBsZXRlZFRvdXJzKGV2ZW50LnRvdXJzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudG91cnMgPSBldmVudC50b3VycztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy50b3Vycy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zaG93RG9uZUJ1dHRvbiA9IGZhbHNlO1xyXG5cclxuICAgICAgdGhpcy5jdXJyZW50VG91clN0ZXAgPSB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMuY3VycmVudFN0ZXBJbmRleCA9IC0xO1xyXG5cclxuICAgICAgLy8gUHJpbWUgdGhlIGluZGV4IGZvciB0aGUgZmlyc3QgdG91clxyXG4gICAgICB0aGlzLmN1cnJlbnRUb3VySW5kZXggPSAwO1xyXG5cclxuICAgICAgYXdhaXQgdGhpcy5zaG93TmV4dFRvdXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3dzIGEgdG91ciBhbmQgZW1pdHMgYW4gZXZlbnQgdGhhdCBpdCB3YXMgc3RhcnRlZFxyXG4gICAqIEBwYXJhbSB0b3VyXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBzaG93TmV4dFRvdXIoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAvLyBUcmFjayBhIHRvdXIgc3RhcnRlZCBldmVudCBpZiB0aGUgY29uc3VtZXIgb2YgdGhlIGxpYnJhcnkgaGFzIHRlbGVtZXRyeSBjb25maWd1cmVkXHJcbiAgICB0aGlzLnRlbGVtZXRyeVNlcnZpY2UudHJhY2tFdmVudCgnVG91clN0YXJ0ZWQnLCB7IHRvdXJJZDogdGhpcy5jdXJyZW50VG91ciEuaWQgfSk7XHJcblxyXG4gICAgbGV0IGNvbnRpbnVlVG91cjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNBdXRvU3RhcnQgJiYgdGhpcy5jdXJyZW50VG91ckluZGV4ID09PSAwICYmIHRoaXMuY3VycmVudFRvdXI/LmludHJvRGlhbG9nKSB7XHJcbiAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBsYXN0VmFsdWVGcm9tKHRoaXMuZGlhbG9nU2VydmljZS5vcGVuRGlhbG9nKHRoaXMuY3VycmVudFRvdXIuaW50cm9EaWFsb2cuY29udGVudCEsIHRoaXMuY3VycmVudFRvdXIuaW50cm9EaWFsb2cuc2l6ZSA/PyAnc21hbGwnLCB0aGlzLmN1cnJlbnRUb3VyLmludHJvRGlhbG9nLmNvbnRleHQgPz8gdW5kZWZpbmVkLCB0aGlzLmN1cnJlbnRUb3VyLmludHJvRGlhbG9nLm9wdGlvbnMgPz8gdW5kZWZpbmVkKSk7XHJcbiAgICAgIGlmICghcmVzdWx0LnNhdmUpIHtcclxuICAgICAgICBjb250aW51ZVRvdXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy53cml0ZUNvbXBsZXRpb25LZXlGb3JBbGxUb3VycygpO1xyXG4gICAgICAgIC8vIEFkdmFuY2UgdG8gdGhlIGxhc3QgdG91ciBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZm9yIGl0cyBleGl0IHN0ZXBcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb3VySW5kZXggPSB0aGlzLnRvdXJzLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVFeGl0U3RlcCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbnRpbnVlVG91cikge1xyXG4gICAgICB0aGlzLnNob3dOZXh0U3RlcCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBlbmRUb3VyKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy8gSGFuZGxlIGFueSBjbGljayBhZnRlcnMgZm9yIHRoZSBhY3RpdmUgc3RlcCBzaG93biBiZWZvcmUgc2h1dHRpbmcgaXQgZG93blxyXG4gICAgYXdhaXQgdGhpcy53YWl0Rm9yVGltZW91dCh0aGlzLmhhbmRsZUNsaWNrQWZ0ZXIuYmluZCh0aGlzKSk7XHJcblxyXG4gICAgdGhpcy5jdXJyZW50VG91clN0ZXAgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnRvdXJzID0gW107XHJcblxyXG4gICAgdGhpcy5yZW1vdmVUb29sdGlwKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNwbGF5cyBhIHRvb2x0aXAgZm9yIHRoZSBjdXJyZW50IHRvdXIgc3RlcFxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgc2hvd1N0ZXBUb29sdGlwKCkge1xyXG4gICAgLy8gVHJhY2sgYW4gZXZlbnQgaWYgdGhlIGNvbnN1bWVyIG9mIHRoZSBsaWJyYXJ5IGhhcyB0ZWxlbWV0cnkgY29uZmlndXJlZFxyXG4gICAgdGhpcy50ZWxlbWV0cnlTZXJ2aWNlLnRyYWNrRXZlbnQoJ1RvdXJTdGVwQ2hhbmdlJywgeyB0b3VySWQ6IHRoaXMuY3VycmVudFRvdXIhLmlkLCB0b3VyU3RlcElkOiB0aGlzLmN1cnJlbnRUb3VyU3RlcCEuaWQgfSk7XHJcblxyXG4gICAgY29uc3QgdG9vbHRpcEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5jdXJyZW50VG91clN0ZXAhLmFuY2hvciEuc2VsZWN0b3IpO1xyXG5cclxuICAgIGlmICh0b29sdGlwRWxlbWVudCkge1xyXG4gICAgICAvLyBEZWZhdWx0IHdpZHRoIGlmIG5vbmUgcHJvdmlkZWRcclxuICAgICAgbGV0IHN0ZXBXaWR0aDogbnVtYmVyIHwgdW5kZWZpbmVkID0gNDMyO1xyXG5cclxuICAgICAgLy8gQ2hlY2sgdGhlIGN1cnJlbnQgdG91ciBzdGVwIHdpZHRoIGFuZCBkZWNpZGUgaWYgaXQgbmVlZHMgdG8gY2hhbmdlIGZyb20gdGhlIGRlZmF1bHQgdmFsdWVcclxuICAgICAgLy8gYmFzZWQgb24gd2hldGhlciB0aGUgc3RlcCBkZWZpbmVkIGl0IG9yIG5vdFxyXG4gICAgICBpZiAodGhpcy5jdXJyZW50VG91clN0ZXA/LndpZHRoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3VycmVudFRvdXJTdGVwLndpZHRoID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgc3RlcFdpZHRoID0gdGhpcy5jdXJyZW50VG91clN0ZXAud2lkdGg7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRUb3VyU3RlcC53aWR0aCA9PT0gJ2F1dG8nKSB7XHJcbiAgICAgICAgICBzdGVwV2lkdGggPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBvcHRpb25zOiBUb29sdGlwT3B0aW9ucyA9IHtcclxuICAgICAgICBpZDogYCR7dGhpcy5jdXJyZW50VG91cj8uaWR9XyR7dGhpcy5jdXJyZW50VG91clN0ZXAhLmlkfWAsXHJcbiAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5jdXJyZW50VG91clN0ZXAhLnRleHQpLFxyXG4gICAgICAgIHRpdGxlOiB0aGlzLmN1cnJlbnRUb3VyU3RlcCEudGl0bGUgPyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLmN1cnJlbnRUb3VyU3RlcCEudGl0bGUpIDogdW5kZWZpbmVkLFxyXG4gICAgICAgIGN1c3RvbUNvbnRlbnQ6IHRoaXMuY3VzdG9tLFxyXG4gICAgICAgIGRpc21pc3NpYmxlOiB0cnVlLFxyXG4gICAgICAgIG1heFdpZHRoOiB0aGlzLmN1cnJlbnRUb3VyU3RlcD8ubWF4V2lkdGgsXHJcbiAgICAgICAgd2lkdGg6IHN0ZXBXaWR0aCxcclxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1lYy1iYWNrZ3JvdW5kLWNvbG9yLXRvdXIpJyxcclxuICAgICAgICB0aXRsZUNvbG9yOiAndmFyKC0tZWMtY29sb3ItdG91ci10aXRsZSknXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLnRvb2x0aXAgPSB0aGlzLnRvb2x0aXBTZXJ2aWNlLnNob3codG9vbHRpcEVsZW1lbnQgYXMgSFRNTEVsZW1lbnQsIHRoaXMuY3VycmVudFRvdXJTdGVwIS5hbmNob3I/LnBvc2l0aW9uLCBvcHRpb25zKTtcclxuICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yVGltZW91dCh0aGlzLmZvY3VzT25OZXh0T3JEb25lQnV0dG9uLmJpbmQodGhpcykpO1xyXG4gICAgICB0aGlzLnN1YnNjcmliZVRvVG9vbHRpcE9uSGlkZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3Vic2NyaWJlcyB0byB0aGUgdG9vbHRpcHMgb25IaWRlIGV2ZW50IGVtaXR0ZXIgYW5kIHJlYWN0cyBpZiB0aGUgdXNlciBkaXNtaXNzZXMgdGhlIHRvb2x0aXBcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIHN1YnNjcmliZVRvVG9vbHRpcE9uSGlkZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCB0b29sdGlwU3Vic2NyaXB0aW9uID0gdGhpcy50b29sdGlwPy5vbkhpZGUucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKVxyXG4gICAgKS5zdWJzY3JpYmUoYXN5bmMgKCkgPT4ge1xyXG4gICAgICB0b29sdGlwU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgdGhpcy53cml0ZUNvbXBsZXRpb25LZXlGb3JBbGxUb3VycygpO1xyXG4gICAgICAvLyBJZiB0aGlzIGlzIGRpc21pc3NlZCBkdXJpbmcgYW4gYXV0byBzdGFydCB0b3VyIHRoZW4gaGFuZGxlIHRoZSBleGl0IHN0ZXBcclxuICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgZG9uZSBidXR0b24gaXMgc2hvd24gYXMgd2VsbCwgaWYgdGhlIGRvbmUgaXMgc2hvd24gdGhlbiB3ZSdyZSBpbiB0aGUgZXhpdCBzdGVwXHJcbiAgICAgIC8vIGFuZCBkaXNtaXNzaW5nIHNob3VsZCBqdXN0IGVuZCB0aGUgdG91clxyXG4gICAgICBpZiAodGhpcy5pc0F1dG9TdGFydCAmJiAhdGhpcy5zaG93RG9uZUJ1dHRvbikge1xyXG4gICAgICAgIC8vIEFkdmFuY2UgdG8gdGhlIGxhc3QgdG91ciBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZm9yIGl0cyBleGl0IHN0ZXBcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb3VySW5kZXggPSB0aGlzLnRvdXJzLmxlbmd0aCAtIDE7XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRXhpdFN0ZXAoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmVuZFRvdXIoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb29wcyB0aHJvdWdoIHRoZSBjdXJyZW50IHRvdXIgc3RlcHMgc3RhcnRpbmcgYWZ0ZXIgdGhlIGN1cnJlbnQgc3RlcCBpbmRleC4gSXQgd2lsbCB0cnkgdG8gZmluZCBhIHZpc2libGVcclxuICAgKiBzZWxlY3RvciBhbmQgaWYgc28gcmV0dXJuIHRoZSBpbmRleC5cclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0TmV4dEF2YWlsYWJsZVN0ZXBJbmRleCgpOiBudW1iZXIge1xyXG4gICAgbGV0IG5leHRTdGVwSW5kZXg6IG51bWJlciA9IC0xO1xyXG5cclxuICAgIC8vIExvb2sgdGhyb3VnaCB0aGUgc3RlcHMgc3RhcnRpbmcgd2l0aCB0aGUgY3VycmVudCBpbmRleCBhbmQgZmluZCB0aGUgbmV4dCB0aGF0IGlzIGF2YWlhYmxlXHJcbiAgICAvLyBmb3IgdGhlIHVzZXIuXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSB0aGlzLmN1cnJlbnRTdGVwSW5kZXggKyAxOyBpIDwgdGhpcy5jdXJyZW50VG91ciEuc3RlcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHRoaXMuY3VycmVudFRvdXI/LnN0ZXBzW2ldLmFuY2hvciAmJiB0aGlzLnN0ZXBFbGVtZW50Rm91bmQodGhpcy5jdXJyZW50VG91ciEuc3RlcHNbaV0uYW5jaG9yISkpIHtcclxuICAgICAgICByZXR1cm4gaTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXh0U3RlcEluZGV4O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJ5IHRvIGZpbmQgdGhlIHRvdXIgc3RlcCBlbGVtZW50IHRvIGtub3cgaWYgaXQgaXMgdmlzaWJsZSBmb3IgdGhlIHVzZXIuIENoZWNrIGZvciB0aGUgY2xpY2tCZWZvcmUgZmlyc3QgaWYgZGVmaW5lZFxyXG4gICAqIEBwYXJhbSBhbmNob3JcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgc3RlcEVsZW1lbnRGb3VuZChhbmNob3I6IFRvdXJBbmNob3IpOiBib29sZWFuIHtcclxuICAgIGlmIChhbmNob3IuY2xpY2tCZWZvcmUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvcihhbmNob3IuY2xpY2tCZWZvcmUpICE9PSBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvcihhbmNob3Iuc2VsZWN0b3IpICE9PSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU29tZSB0b3VyIHN0ZXBzIG1heSBoYXZlIGEgY2xpY2sgYWZ0ZXIgZGVmaW5lZC4gSWYgc28gY2FsbCB0aGUgY2xpY2sgbWV0aG9kIG9uIHRoZSBodG1sIGVsZW1lbnRcclxuICAgKi9cclxuICBwcml2YXRlIGhhbmRsZUNsaWNrQWZ0ZXIoKTogdm9pZCB7XHJcbiAgICBsZXQgc2VsZWN0b3IgPSB0aGlzLmN1cnJlbnRUb3VyU3RlcD8uYW5jaG9yPy5jbGlja0FmdGVyO1xyXG4gICAgaWYgKHNlbGVjdG9yKSB7XHJcbiAgICAgIHRoaXMuY2xpY2tFbGVtZW50SWZGb3VuZChzZWxlY3Rvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTb21lIHRvdXIgc3RlcHMgbWF5IGhhdmUgYSBjbGljayBiZWZvcmUgZGVmaW5lZC4gSWYgc28gY2FsbCB0aGUgY2xpY2sgbWV0aG9kIG9uIHRoZSBodG1sIGVsZW1lbnRcclxuICAgKi9cclxuICBwcml2YXRlIGhhbmRsZUNsaWNrQmVmb3JlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFRvdXJTdGVwPy5hbmNob3I/LmNsaWNrQmVmb3JlKSB7XHJcbiAgICAgIHRoaXMuY2xpY2tFbGVtZW50SWZGb3VuZCh0aGlzLmN1cnJlbnRUb3VyU3RlcC5hbmNob3I/LmNsaWNrQmVmb3JlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogQ2hlY2tzIGZvciBhbiBleGl0IHN0ZXAgb24gdGhlIGN1cnJlbnQgdG91ciBhbmQgaWYgZm91bmQgZGlzcGxheXMgdGhlIHN0ZXBcclxuICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlRXhpdFN0ZXAoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50VG91cj8uZXhpdFN0ZXApIHtcclxuICAgICAgdGhpcy5yZW1vdmVUb29sdGlwKCk7XHJcblxyXG4gICAgICB0aGlzLnNob3dEb25lQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jdXJyZW50VG91clN0ZXAgPSB0aGlzLmN1cnJlbnRUb3VyPy5leGl0U3RlcDtcclxuXHJcbiAgICAgIGF3YWl0IHRoaXMud2FpdEZvclRpbWVvdXQodGhpcy5oYW5kbGVDbGlja0JlZm9yZS5iaW5kKHRoaXMpKTtcclxuICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yVGltZW91dCh0aGlzLnNob3dTdGVwVG9vbHRpcC5iaW5kKHRoaXMpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyeSB0byBmaW5kIHRoZSBlbGVtZW50IHdpdGggdGhlIHNlbGVjdG9yIHByb3ZpZGVkIGFuZCBpZiBzbyBjbGljayBpdC4gVGhpcyBpcyBob3cgdG91ciBzdGVwcyB3aWxsIG9wZW4vY2xvc2UgbWVudXMgdG9cclxuICAgKiBnaXZlIGEgdG91ciB0byB0aGUgdXNlclxyXG4gICAqIEBwYXJhbSBzZWxlY3RvclxyXG4gICAqL1xyXG4gIHByaXZhdGUgY2xpY2tFbGVtZW50SWZGb3VuZChzZWxlY3Rvcjogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICBpZiAoc2VsZWN0b3IgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcclxuICAgICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgICAoZWxlbWVudCBhcyBIVE1MRWxlbWVudCkuY2xpY2soKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiBhdXRvIHN0YXJ0aW5nIHRvdXJzIHdlIHdpbGwgd2FudCB0byByZW1vdmUgYW55IHRoYXQgaGF2ZSB0aGUgbG9jYWwgc3RvcmFnZSBrZXkgd3JpdHRlbiBhcyBjb21wbGV0ZWQgc29cclxuICAgKiB0aGV5IGFyZSBub3QgcHJlc2VudGVkIHRvIHRoZSB1c2VyIGFnYWluLlxyXG4gICAqIEBwYXJhbSB0b3Vyc1xyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZW1vdmVDb21wbGV0ZWRUb3Vycyh0b3VyczogVG91cltdKTogVG91cltdIHtcclxuICAgIHJldHVybiB0b3Vycy5maWx0ZXIodG91ciA9PiB7XHJcbiAgICAgIGxldCBjYWNoZVZhbHVlID0gdGhpcy5jYWNoZVNlcnZpY2UuZ2V0SXRlbTxUb3VyQ2FjaGVFbnRyeT4odGhpcy5tYWtlQ2FjaGVLZXkodG91cikpO1xyXG4gICAgICBpZiAoY2FjaGVWYWx1ZSkge1xyXG4gICAgICAgIHJldHVybiAhY2FjaGVWYWx1ZS5jb21wbGV0ZWQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV3JpdGVzIGEga2V5IHRvIGxvY2FsIHN0b3JhZ2Ugc28gdGhlIHRvdXIgd2lsbCBub3QgYmUgc2hvd24gYWdhaW4gYXV0b21hdGljYWxseVxyXG4gICAqL1xyXG4gIHByaXZhdGUgd3JpdGVDb21wbGV0aW9uS2V5KHRvdXI6IFRvdXIgfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgIGlmICh0b3VyKSB7XHJcbiAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlLnNldEl0ZW0odGhpcy5tYWtlQ2FjaGVLZXkodG91ciksIDxUb3VyQ2FjaGVFbnRyeT57IGNvbXBsZXRlZDogdHJ1ZSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gZGlzbWlzc2luZyBhIHRvdXIgb3Igb25lIGJlaW5nIGRpc21pc3NlZCB2aWEgYSBuYXZpZ2F0aW9uIGV2ZW50LCBldGMgd2Ugd2lsbCB3YW50IHRvIG1hcmtcclxuICAgKiBldmVyeSB0b3VyIGluIHRoZSBhcnJheSBhcyBjb21wbGV0ZWQgc28gaXQgZG9lc24ndCByZXN1cmZhY2UgdW5sZXNzIHRoZSB1c2VyIHJlcXVlc3RzIHRoZSB0b3VyLlxyXG4gICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBsb29wIG92ZXIgYWxsIGFuZCB3cml0ZSB0aGUgbG9jYWwgc3RvcmFnZSBrZXlcclxuICAgKi9cclxuICBwcml2YXRlIHdyaXRlQ29tcGxldGlvbktleUZvckFsbFRvdXJzKCk6IHZvaWQge1xyXG4gICAgdGhpcy50b3Vycy5mb3JFYWNoKHRvdXIgPT4ge1xyXG4gICAgICB0aGlzLndyaXRlQ29tcGxldGlvbktleSh0b3VyKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FjaGUga2V5IHVzZWQgdG8gc2V0L2dldCB0aGUgY29tcGxldGlvbiBzdGF0dXMgb2YgYSB0b3VyXHJcbiAgICogQHBhcmFtIHRvdXJcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgbWFrZUNhY2hlS2V5KHRvdXI6IFRvdXIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudG91clNlcnZpY2UuZ2V0Q2FjaGVLZXkodG91cik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmVzIGEgdG9vbHRpcCBmcm9tIHRoZSB2aWV3LCB1c2VkIHdoZW4gc3dpdGNoaW5nIHRvdXIgc3RlcHMgYW5kIGNsb3NpbmcgYSB0b3VyXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZW1vdmVUb29sdGlwKCk6IHZvaWQge1xyXG4gICAgdGhpcy50b29sdGlwPy5vdmVybGF5UmVmPy5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSB0b3VyIGJhc2VkIG9uIHRoZSBjdXJyZW50IGluZGV4XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXQgY3VycmVudFRvdXIoKTogVG91ciB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50VG91ckluZGV4ID4gLTEgJiYgdGhpcy5jdXJyZW50VG91ckluZGV4IDwgdGhpcy50b3Vycy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudG91cnNbdGhpcy5jdXJyZW50VG91ckluZGV4XTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgY2xpY2sgYmVmb3JlL2FmdGVyIGFuZCBzaG93IHRvb2x0aXAgZnVuY3Rpb25zIG5lZWQgdG8gYmUgd3JhcHBlZCBpbiBzZXRUaW1lb3V0IGZvciB0aGUgVUlcclxuICAgKiB0byBvcGVyYXRlIGNvcnJlY3RseSBidXQgc2V0VGltZW91dCBpcyBhbiBhY3Rpb24gd2UgY2Fubm90IGF3YWl0IHNvIHdlJ3JlIHdyYXBwaW5nIGl0IGluIGEgcHJvbWlzZSB0byByZXR1cm5cclxuICAgKiBzbyB0aGUgZnVuY3Rpb24gY2FsbHMgY2FuIGF3YWl0IHRoZSBhY3Rpb25cclxuICAgKiBAcGFyYW0gZm5cclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgd2FpdEZvclRpbWVvdXQoZm46ICgpID0+IHZvaWQpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgZm4oKTtcclxuICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGaW5kIHRoZSBcIm5leHRcIiBvciBcImRvbmVcIiBidXR0b24gYW5kIGZvY3VzIG9uIGl0LlxyXG4gICAqXHJcbiAgICogVGhleSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLCBzbyBpZiB3ZSBjYW5ub3QgZmluZCB0aGUgbmV4dCBidXR0b25cclxuICAgKiB3ZSBsb29rIGZvciB0aGUgZG9uZSBidXR0b24uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBmb2N1c09uTmV4dE9yRG9uZUJ1dHRvbigpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5mb2N1c09uRWxlbWVudChgIyR7dGhpcy5jdXJyZW50VG91clN0ZXAhLmlkfV9uZXh0QnV0dG9uYCkpIHtcclxuICAgICAgdGhpcy5mb2N1c09uRWxlbWVudChgIyR7dGhpcy5jdXJyZW50VG91clN0ZXAhLmlkfV9kb25lQnV0dG9uYClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpbmQgYW4gZWxlbWVudCB3aXRoIGdpdmVuIHNlbGVjdG9yIGFuZCBmb2N1cyBvbiBpdC5cclxuICAgKiBSZXR1cm4gZmFsc2UgaWYgZWxlbWVudCBub3QgZm91bmQuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBmb2N1c09uRWxlbWVudChzZWxlY3Rvcjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcclxuICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgIChlbGVtZW50IGFzIEhUTUxFbGVtZW50KS5mb2N1cygpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiPG5nLXRlbXBsYXRlICN0b3VyVG9vbHRpcD5cclxuICAgIDxkaXYgKm5nSWY9XCJjdXJyZW50VG91clN0ZXA/Lm1lZGlhXCJcclxuICAgICAgICAgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgPGltZyBpZD1cInt7Y3VycmVudFRvdXJTdGVwPy5pZCArICdfbWVkaWEnfX1cIlxyXG4gICAgICAgICAgICAgc3R5bGU9XCJtYXgtd2lkdGg6IDEwMCU7XCJcclxuICAgICAgICAgICAgIHNyYz1cInt7Y3VycmVudFRvdXJTdGVwPy5tZWRpYX19XCI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmb250LWNvbG9yLXByaW1hcnktbGlnaHQgcHgtMyBtYi0zXCJcclxuICAgICAgICAgW2lubmVySHRtbF09XCJjdXJyZW50VG91clN0ZXA/LnRleHQgfCB0cmFuc2xhdGVcIj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGEgKm5nSWY9XCJjdXJyZW50VG91clN0ZXA/LmhlbHBMaW5rXCIgaWQ9XCJ7e2N1cnJlbnRUb3VyU3RlcD8uaWQgKyAnX2hlbHBMaW5rJ319XCIgY2xhc3M9XCJkLWJsb2NrIG1iLTMgcHgtM1wiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCJ7e2N1cnJlbnRUb3VyU3RlcD8uaGVscExpbmt9fVwiIHRyYW5zbGF0ZT5MZWFybk1vcmVfU0M8L2E+XHJcbiAgICA8Zm9vdGVyIGNsYXNzPVwicHgtMyBtdC0zIGQtZmxleFwiPlxyXG4gICAgICAgIDxidXR0b24gaWQ9XCJ7e2N1cnJlbnRUb3VyU3RlcD8uaWQgKyAnX25leHRCdXR0b24nfX1cIiAqbmdJZj1cIiFzaG93RG9uZUJ1dHRvblwiIGNsYXNzPVwibWwtYXV0byB0b3VyQWN0aW9uXCIgZWNMaW5rQnV0dG9uIChjbGljayk9XCJzaG93TmV4dFN0ZXAoKVwiIHRyYW5zbGF0ZT5OZXh0X1RDPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBpZD1cInt7Y3VycmVudFRvdXJTdGVwPy5pZCArICdfZG9uZUJ1dHRvbid9fVwiICpuZ0lmPVwic2hvd0RvbmVCdXR0b25cIiBjbGFzcz1cIm1sLWF1dG8gdG91ckFjdGlvblwiIGVjTGlua0J1dHRvbiAoY2xpY2spPVwiZG9uZSgpXCIgdHJhbnNsYXRlPkRvbmVfVEM8L2J1dHRvbj5cclxuICAgIDwvZm9vdGVyPlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
|
@@ -1,75 +0,0 @@
|
|
1
|
-
import { Injectable } from '@angular/core';
|
2
|
-
import { Subject } from 'rxjs';
|
3
|
-
import { TourEvent } from './tour-types';
|
4
|
-
import * as i0 from "@angular/core";
|
5
|
-
import * as i1 from "../../core/cache.service";
|
6
|
-
export class TourService {
|
7
|
-
constructor(cacheService) {
|
8
|
-
this.cacheService = cacheService;
|
9
|
-
this.events = new Subject();
|
10
|
-
}
|
11
|
-
/**
|
12
|
-
* Start a tour of the application. Allows one or many tours to be sent in, each will
|
13
|
-
* follow the next. If multiple tours have exit steps defined only the final tour will
|
14
|
-
* execute the exit step.
|
15
|
-
* @param tours
|
16
|
-
*/
|
17
|
-
start(tours, isAutoStart = false) {
|
18
|
-
let tourEvent = new TourEvent(tours, 'start', isAutoStart);
|
19
|
-
this.events.next(tourEvent);
|
20
|
-
}
|
21
|
-
end() {
|
22
|
-
let tourEvent = new TourEvent([], 'end');
|
23
|
-
this.events.next(tourEvent);
|
24
|
-
}
|
25
|
-
append(tours, isAutoStart = false) {
|
26
|
-
let tourEvent = new TourEvent(tours, 'append', isAutoStart);
|
27
|
-
this.events.next(tourEvent);
|
28
|
-
}
|
29
|
-
/**
|
30
|
-
* Returns a formatted cache key for tours
|
31
|
-
* @param tour
|
32
|
-
* @returns
|
33
|
-
*/
|
34
|
-
getCacheKey(tour) {
|
35
|
-
return `TourCompleted_${tour.id}`;
|
36
|
-
}
|
37
|
-
/**
|
38
|
-
* Given a tour, check to see if it's been completed
|
39
|
-
* @param tour
|
40
|
-
* @returns
|
41
|
-
*/
|
42
|
-
hasTourBeenViewed(tour) {
|
43
|
-
let cacheValue = this.cacheService.getItem(this.getCacheKey(tour));
|
44
|
-
if (cacheValue) {
|
45
|
-
return cacheValue.completed;
|
46
|
-
}
|
47
|
-
else {
|
48
|
-
// If no cache value then we never ran through it and wrote a key
|
49
|
-
return false;
|
50
|
-
}
|
51
|
-
}
|
52
|
-
/**
|
53
|
-
* Given a list of tours, check to see if any will show to the user
|
54
|
-
* @param tours
|
55
|
-
* @returns
|
56
|
-
*/
|
57
|
-
haveAllToursBeenViewed(tours) {
|
58
|
-
let viewedCount = 0;
|
59
|
-
tours.forEach(tour => {
|
60
|
-
if (this.hasTourBeenViewed(tour)) {
|
61
|
-
viewedCount++;
|
62
|
-
}
|
63
|
-
});
|
64
|
-
return viewedCount === tours.length;
|
65
|
-
}
|
66
|
-
}
|
67
|
-
TourService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TourService, deps: [{ token: i1.CacheService }], target: i0.ɵɵFactoryTarget.Injectable });
|
68
|
-
TourService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TourService, providedIn: 'root' });
|
69
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TourService, decorators: [{
|
70
|
-
type: Injectable,
|
71
|
-
args: [{
|
72
|
-
providedIn: 'root'
|
73
|
-
}]
|
74
|
-
}], ctorParameters: function () { return [{ type: i1.CacheService }]; } });
|
75
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG91ci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2Rpc3BsYXkvdG91ci90b3VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE9BQU8sRUFBd0IsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7QUFLL0QsTUFBTSxPQUFPLFdBQVc7SUFJdEIsWUFDVSxZQUEwQjtRQUExQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUg3QixXQUFNLEdBQTBCLElBQUksT0FBTyxFQUFFLENBQUM7SUFJakQsQ0FBQztJQUVMOzs7OztPQUtHO0lBQ0ksS0FBSyxDQUFDLEtBQWEsRUFBRSxjQUF1QixLQUFLO1FBQ3RELElBQUksU0FBUyxHQUFjLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLE1BQTZCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFTSxHQUFHO1FBQ1IsSUFBSSxTQUFTLEdBQWMsSUFBSSxTQUFTLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxNQUE2QixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQWEsRUFBRSxjQUF1QixLQUFLO1FBQ3ZELElBQUksU0FBUyxHQUFjLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLE1BQTZCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksV0FBVyxDQUFDLElBQVU7UUFDM0IsT0FBTyxpQkFBaUIsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksaUJBQWlCLENBQUMsSUFBVTtRQUNqQyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBaUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25GLElBQUksVUFBVSxFQUFFO1lBQ2QsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDO1NBQzdCO2FBQU07WUFDTCxpRUFBaUU7WUFDakUsT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksc0JBQXNCLENBQUMsS0FBYTtRQUN6QyxJQUFJLFdBQVcsR0FBVyxDQUFDLENBQUM7UUFFNUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNuQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDaEMsV0FBVyxFQUFFLENBQUM7YUFDZjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxXQUFXLEtBQUssS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUN0QyxDQUFDOzt3R0FwRVUsV0FBVzs0R0FBWCxXQUFXLGNBRlYsTUFBTTsyRkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDYWNoZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2NhY2hlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb3VyLCBUb3VyQ2FjaGVFbnRyeSwgVG91ckV2ZW50IH0gZnJvbSAnLi90b3VyLXR5cGVzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRvdXJTZXJ2aWNlIHtcclxuXHJcbiAgcHVibGljIGV2ZW50czogT2JzZXJ2YWJsZTxUb3VyRXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNhY2hlU2VydmljZTogQ2FjaGVTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RhcnQgYSB0b3VyIG9mIHRoZSBhcHBsaWNhdGlvbi4gQWxsb3dzIG9uZSBvciBtYW55IHRvdXJzIHRvIGJlIHNlbnQgaW4sIGVhY2ggd2lsbFxyXG4gICAqIGZvbGxvdyB0aGUgbmV4dC4gSWYgbXVsdGlwbGUgdG91cnMgaGF2ZSBleGl0IHN0ZXBzIGRlZmluZWQgb25seSB0aGUgZmluYWwgdG91ciB3aWxsXHJcbiAgICogZXhlY3V0ZSB0aGUgZXhpdCBzdGVwLlxyXG4gICAqIEBwYXJhbSB0b3VycyBcclxuICAgKi9cclxuICBwdWJsaWMgc3RhcnQodG91cnM6IFRvdXJbXSwgaXNBdXRvU3RhcnQ6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgbGV0IHRvdXJFdmVudDogVG91ckV2ZW50ID0gbmV3IFRvdXJFdmVudCh0b3VycywgJ3N0YXJ0JywgaXNBdXRvU3RhcnQpO1xyXG4gICAgKHRoaXMuZXZlbnRzIGFzIFN1YmplY3Q8VG91ckV2ZW50PikubmV4dCh0b3VyRXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGVuZCgpOiB2b2lkIHtcclxuICAgIGxldCB0b3VyRXZlbnQ6IFRvdXJFdmVudCA9IG5ldyBUb3VyRXZlbnQoW10sICdlbmQnKTtcclxuICAgICh0aGlzLmV2ZW50cyBhcyBTdWJqZWN0PFRvdXJFdmVudD4pLm5leHQodG91ckV2ZW50KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhcHBlbmQodG91cnM6IFRvdXJbXSwgaXNBdXRvU3RhcnQ6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgbGV0IHRvdXJFdmVudDogVG91ckV2ZW50ID0gbmV3IFRvdXJFdmVudCh0b3VycywgJ2FwcGVuZCcsIGlzQXV0b1N0YXJ0KTtcclxuICAgICh0aGlzLmV2ZW50cyBhcyBTdWJqZWN0PFRvdXJFdmVudD4pLm5leHQodG91ckV2ZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYSBmb3JtYXR0ZWQgY2FjaGUga2V5IGZvciB0b3Vyc1xyXG4gICAqIEBwYXJhbSB0b3VyIFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRDYWNoZUtleSh0b3VyOiBUb3VyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgVG91ckNvbXBsZXRlZF8ke3RvdXIuaWR9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdpdmVuIGEgdG91ciwgY2hlY2sgdG8gc2VlIGlmIGl0J3MgYmVlbiBjb21wbGV0ZWRcclxuICAgKiBAcGFyYW0gdG91ciBcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBwdWJsaWMgaGFzVG91ckJlZW5WaWV3ZWQodG91cjogVG91cik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGNhY2hlVmFsdWUgPSB0aGlzLmNhY2hlU2VydmljZS5nZXRJdGVtPFRvdXJDYWNoZUVudHJ5Pih0aGlzLmdldENhY2hlS2V5KHRvdXIpKTtcclxuICAgIGlmIChjYWNoZVZhbHVlKSB7XHJcbiAgICAgIHJldHVybiBjYWNoZVZhbHVlLmNvbXBsZXRlZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIElmIG5vIGNhY2hlIHZhbHVlIHRoZW4gd2UgbmV2ZXIgcmFuIHRocm91Z2ggaXQgYW5kIHdyb3RlIGEga2V5XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdpdmVuIGEgbGlzdCBvZiB0b3VycywgY2hlY2sgdG8gc2VlIGlmIGFueSB3aWxsIHNob3cgdG8gdGhlIHVzZXJcclxuICAgKiBAcGFyYW0gdG91cnMgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgcHVibGljIGhhdmVBbGxUb3Vyc0JlZW5WaWV3ZWQodG91cnM6IFRvdXJbXSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHZpZXdlZENvdW50OiBudW1iZXIgPSAwO1xyXG5cclxuICAgIHRvdXJzLmZvckVhY2godG91ciA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmhhc1RvdXJCZWVuVmlld2VkKHRvdXIpKSB7XHJcbiAgICAgICAgdmlld2VkQ291bnQrKztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHZpZXdlZENvdW50ID09PSB0b3Vycy5sZW5ndGg7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|