@igo2/common 18.0.1-next.2 → 18.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/entity/src/entity-table/entity-table.theming.scss +1 -1
- package/esm2022/action/action.module.mjs +19 -0
- package/esm2022/action/actionbar/actionbar-item.component.mjs +192 -0
- package/esm2022/action/actionbar/actionbar.component.mjs +277 -0
- package/esm2022/action/actionbar/actionbar.module.mjs +19 -0
- package/esm2022/action/igo2-common-action.mjs +5 -0
- package/esm2022/action/public_api.mjs +5 -0
- package/esm2022/action/shared/action.enums.mjs +7 -0
- package/esm2022/action/shared/action.interfaces.mjs +2 -0
- package/esm2022/action/shared/index.mjs +4 -0
- package/esm2022/action/shared/store.mjs +8 -0
- package/esm2022/backdrop/backdrop.component.mjs +21 -0
- package/esm2022/backdrop/backdrop.module.mjs +25 -0
- package/esm2022/backdrop/igo2-common-backdrop.mjs +5 -0
- package/esm2022/backdrop/public_api.mjs +3 -0
- package/esm2022/badge/badge-icon.directive.mjs +149 -0
- package/esm2022/badge/badge-icon.module.mjs +25 -0
- package/esm2022/badge/igo2-common-badge.mjs +5 -0
- package/esm2022/badge/public_api.mjs +3 -0
- package/esm2022/clickout/clickout.directive.mjs +32 -0
- package/esm2022/clickout/clickout.module.mjs +25 -0
- package/esm2022/clickout/igo2-common-clickout.mjs +5 -0
- package/esm2022/clickout/public_api.mjs +3 -0
- package/esm2022/clone/clone.module.mjs +25 -0
- package/esm2022/clone/clone.pipe.mjs +25 -0
- package/esm2022/clone/igo2-common-clone.mjs +5 -0
- package/esm2022/clone/public_api.mjs +3 -0
- package/esm2022/collapsible/collapse.directive.mjs +57 -0
- package/esm2022/collapsible/collapsible.component.mjs +38 -0
- package/esm2022/collapsible/collapsible.module.mjs +26 -0
- package/esm2022/collapsible/igo2-common-collapsible.mjs +5 -0
- package/esm2022/collapsible/public_api.mjs +10 -0
- package/esm2022/color/color-picker-form-field/color-picker-form-field.component.mjs +104 -0
- package/esm2022/color/color-picker-form-field/color-picker-form-field.module.mjs +19 -0
- package/esm2022/color/color-picker-form-field/index.mjs +3 -0
- package/esm2022/color/igo2-common-color.mjs +5 -0
- package/esm2022/color/public_api.mjs +2 -0
- package/esm2022/confirm-dialog/confirm-dialog.component.mjs +31 -0
- package/esm2022/confirm-dialog/confirm-dialog.interface.mjs +2 -0
- package/esm2022/confirm-dialog/confirm-dialog.module.mjs +27 -0
- package/esm2022/confirm-dialog/confirm-dialog.service.mjs +35 -0
- package/esm2022/confirm-dialog/igo2-common-confirm-dialog.mjs +5 -0
- package/esm2022/confirm-dialog/public_api.mjs +5 -0
- package/esm2022/context-menu/context-menu.directive.mjs +109 -0
- package/esm2022/context-menu/context-menu.module.mjs +26 -0
- package/esm2022/context-menu/igo2-common-context-menu.mjs +5 -0
- package/esm2022/context-menu/long-press.directive.mjs +65 -0
- package/esm2022/context-menu/public_api.mjs +10 -0
- package/esm2022/custom-html/custom-html.component.mjs +21 -0
- package/esm2022/custom-html/custom-html.module.mjs +25 -0
- package/esm2022/custom-html/custom-html.pipe.mjs +23 -0
- package/esm2022/custom-html/igo2-common-custom-html.mjs +5 -0
- package/esm2022/custom-html/public_api.mjs +10 -0
- package/esm2022/dom/dom.interfaces.mjs +2 -0
- package/esm2022/dom/dom.module.mjs +27 -0
- package/esm2022/dom/dom.service.mjs +35 -0
- package/esm2022/dom/igo2-common-dom.mjs +5 -0
- package/esm2022/dom/public_api.mjs +4 -0
- package/esm2022/drag-drop/drag-drop.directive.mjs +82 -0
- package/esm2022/drag-drop/drag-drop.module.mjs +26 -0
- package/esm2022/drag-drop/igo2-common-drag-drop.mjs +5 -0
- package/esm2022/drag-drop/public_api.mjs +4 -0
- package/esm2022/drag-drop/tree-drag-drop/index.mjs +3 -0
- package/esm2022/drag-drop/tree-drag-drop/tree-drag-drop.directive.mjs +391 -0
- package/esm2022/drag-drop/tree-drag-drop/tree-drag-drop.interface.mjs +2 -0
- package/esm2022/dynamic-component/dynamic-component.module.mjs +19 -0
- package/esm2022/dynamic-component/dynamic-outlet/dynamic-outlet.component.mjs +129 -0
- package/esm2022/dynamic-component/dynamic-outlet/dynamic-outlet.module.mjs +19 -0
- package/esm2022/dynamic-component/igo2-common-dynamic-component.mjs +5 -0
- package/esm2022/dynamic-component/public_api.mjs +5 -0
- package/esm2022/dynamic-component/shared/dynamic-component.interfaces.mjs +2 -0
- package/esm2022/dynamic-component/shared/dynamic-component.mjs +183 -0
- package/esm2022/dynamic-component/shared/dynamic-component.service.mjs +30 -0
- package/esm2022/dynamic-component/shared/index.mjs +4 -0
- package/esm2022/entity/entity-selector/entity-selector.component.mjs +174 -0
- package/esm2022/entity/entity-selector/entity-selector.module.mjs +19 -0
- package/esm2022/entity/entity-selector/index.mjs +3 -0
- package/esm2022/entity/entity-table/entity-table-row.directive.mjs +138 -0
- package/esm2022/entity/entity-table/entity-table.component.mjs +883 -0
- package/esm2022/entity/entity-table/entity-table.module.mjs +19 -0
- package/esm2022/entity/entity-table/index.mjs +3 -0
- package/esm2022/entity/entity-table-paginator/entity-table-paginator.component.mjs +158 -0
- package/esm2022/entity/entity-table-paginator/entity-table-paginator.interface.mjs +2 -0
- package/esm2022/entity/entity-table-paginator/entity-table-paginator.module.mjs +19 -0
- package/esm2022/entity/entity-table-paginator/index.mjs +4 -0
- package/esm2022/entity/entity.module.mjs +30 -0
- package/esm2022/entity/igo2-common-entity.mjs +5 -0
- package/esm2022/entity/public_api.mjs +6 -0
- package/esm2022/entity/shared/entity.enums.mjs +28 -0
- package/esm2022/entity/shared/entity.interfaces.mjs +2 -0
- package/esm2022/entity/shared/entity.utils.mjs +73 -0
- package/esm2022/entity/shared/index.mjs +10 -0
- package/esm2022/entity/shared/state.mjs +194 -0
- package/esm2022/entity/shared/store.mjs +322 -0
- package/esm2022/entity/shared/strategies/filter-custom-function.mjs +80 -0
- package/esm2022/entity/shared/strategies/filter-selection.mjs +81 -0
- package/esm2022/entity/shared/strategies/index.mjs +4 -0
- package/esm2022/entity/shared/strategies/strategy.mjs +82 -0
- package/esm2022/entity/shared/transaction.mjs +329 -0
- package/esm2022/entity/shared/view.mjs +330 -0
- package/esm2022/entity/shared/watcher.mjs +135 -0
- package/esm2022/environment/environment.interface.mjs +2 -0
- package/esm2022/environment/igo2-common-environment.mjs +5 -0
- package/esm2022/environment/public_api.mjs +2 -0
- package/esm2022/flexible/flexible.component.mjs +137 -0
- package/esm2022/flexible/flexible.module.mjs +25 -0
- package/esm2022/flexible/flexible.type.mjs +2 -0
- package/esm2022/flexible/igo2-common-flexible.mjs +5 -0
- package/esm2022/flexible/public_api.mjs +4 -0
- package/esm2022/form/form/form.component.mjs +105 -0
- package/esm2022/form/form/form.module.mjs +19 -0
- package/esm2022/form/form/index.mjs +3 -0
- package/esm2022/form/form-dialog/form-dialog.component.mjs +94 -0
- package/esm2022/form/form-dialog/form-dialog.interface.mjs +2 -0
- package/esm2022/form/form-dialog/form-dialog.module.mjs +31 -0
- package/esm2022/form/form-dialog/form-dialog.service.mjs +30 -0
- package/esm2022/form/form-dialog/index.mjs +5 -0
- package/esm2022/form/form-field/form-field-select.component.mjs +117 -0
- package/esm2022/form/form-field/form-field-text.component.mjs +126 -0
- package/esm2022/form/form-field/form-field-textarea.component.mjs +95 -0
- package/esm2022/form/form-field/form-field.component.mjs +65 -0
- package/esm2022/form/form-field/form-field.directive.mjs +11 -0
- package/esm2022/form/form-field/form-field.module.mjs +23 -0
- package/esm2022/form/form-field/index.mjs +7 -0
- package/esm2022/form/form-group/form-group.component.mjs +81 -0
- package/esm2022/form/form-group/form-group.module.mjs +19 -0
- package/esm2022/form/form-group/index.mjs +3 -0
- package/esm2022/form/form.module.mjs +32 -0
- package/esm2022/form/igo2-common-form.mjs +5 -0
- package/esm2022/form/public_api.mjs +7 -0
- package/esm2022/form/shared/form-field-component.mjs +7 -0
- package/esm2022/form/shared/form-field.service.mjs +28 -0
- package/esm2022/form/shared/form.interfaces.mjs +2 -0
- package/esm2022/form/shared/form.service.mjs +82 -0
- package/esm2022/form/shared/form.utils.mjs +41 -0
- package/esm2022/form/shared/index.mjs +6 -0
- package/esm2022/home-button/home-button.component.mjs +25 -0
- package/esm2022/home-button/home-button.module.mjs +19 -0
- package/esm2022/home-button/igo2-common-home-button.mjs +5 -0
- package/esm2022/home-button/public_api.mjs +3 -0
- package/esm2022/icon/icon/icon.component.mjs +38 -0
- package/esm2022/icon/icon.provider.mjs +14 -0
- package/esm2022/icon/igo2-common-icon.mjs +5 -0
- package/esm2022/icon/public_api.mjs +4 -0
- package/esm2022/icon/shared/icon.interface.mjs +2 -0
- package/esm2022/icon/shared/icon.service.mjs +26 -0
- package/esm2022/icon/shared/icons.mjs +40 -0
- package/esm2022/icon/shared/index.mjs +4 -0
- package/esm2022/igo2-common.mjs +5 -0
- package/esm2022/image/igo2-common-image.mjs +5 -0
- package/esm2022/image/image-error.directive.mjs +35 -0
- package/esm2022/image/image.module.mjs +26 -0
- package/esm2022/image/public_api.mjs +7 -0
- package/esm2022/image/secure-image.pipe.mjs +66 -0
- package/esm2022/interactive-tour/igo2-common-interactive-tour.mjs +5 -0
- package/esm2022/interactive-tour/interactive-tour.component.mjs +131 -0
- package/esm2022/interactive-tour/interactive-tour.interface.mjs +2 -0
- package/esm2022/interactive-tour/interactive-tour.loader.mjs +49 -0
- package/esm2022/interactive-tour/interactive-tour.module.mjs +19 -0
- package/esm2022/interactive-tour/interactive-tour.service.mjs +303 -0
- package/esm2022/interactive-tour/public_api.mjs +6 -0
- package/esm2022/json-dialog/igo2-common-json-dialog.mjs +5 -0
- package/esm2022/json-dialog/json-dialog.component.mjs +38 -0
- package/esm2022/json-dialog/json-dialog.module.mjs +26 -0
- package/esm2022/json-dialog/json-dialog.service.mjs +26 -0
- package/esm2022/json-dialog/public_api.mjs +4 -0
- package/esm2022/keyvalue/igo2-common-keyvalue.mjs +5 -0
- package/esm2022/keyvalue/keyvalue.module.mjs +25 -0
- package/esm2022/keyvalue/keyvalue.pipe.mjs +19 -0
- package/esm2022/keyvalue/public_api.mjs +3 -0
- package/esm2022/list/igo2-common-list.mjs +5 -0
- package/esm2022/list/list-item.directive.mjs +166 -0
- package/esm2022/list/list.component.mjs +252 -0
- package/esm2022/list/list.module.mjs +26 -0
- package/esm2022/list/public_api.mjs +7 -0
- package/esm2022/panel/igo2-common-panel.mjs +5 -0
- package/esm2022/panel/panel.component.mjs +30 -0
- package/esm2022/panel/panel.module.mjs +19 -0
- package/esm2022/panel/public_api.mjs +3 -0
- package/esm2022/public_api.mjs +20 -0
- package/esm2022/select-value-dialog/igo2-common-select-value-dialog.mjs +5 -0
- package/esm2022/select-value-dialog/public_api.mjs +6 -0
- package/esm2022/select-value-dialog/select-value-check-radio-dialog.component.mjs +103 -0
- package/esm2022/select-value-dialog/select-value-dialog.enums.mjs +6 -0
- package/esm2022/select-value-dialog/select-value-dialog.interface.mjs +2 -0
- package/esm2022/select-value-dialog/select-value-dialog.module.mjs +27 -0
- package/esm2022/select-value-dialog/select-value-dialog.service.mjs +29 -0
- package/esm2022/sidenav/igo2-common-sidenav.mjs +5 -0
- package/esm2022/sidenav/public_api.mjs +3 -0
- package/esm2022/sidenav/sidenav-shim.directive.mjs +58 -0
- package/esm2022/sidenav/sidenav.module.mjs +25 -0
- package/esm2022/spinner/igo2-common-spinner.mjs +5 -0
- package/esm2022/spinner/public_api.mjs +4 -0
- package/esm2022/spinner/spinner-activity.directive.mjs +56 -0
- package/esm2022/spinner/spinner.component.mjs +29 -0
- package/esm2022/spinner/spinner.module.mjs +26 -0
- package/esm2022/stop-propagation/igo2-common-stop-propagation.mjs +5 -0
- package/esm2022/stop-propagation/public_api.mjs +10 -0
- package/esm2022/stop-propagation/stop-drop-propagation.directive.mjs +21 -0
- package/esm2022/stop-propagation/stop-propagation.directive.mjs +20 -0
- package/esm2022/stop-propagation/stop-propagation.module.mjs +26 -0
- package/esm2022/table/igo2-common-table.mjs +5 -0
- package/esm2022/table/public_api.mjs +7 -0
- package/esm2022/table/table-action-color.enum.mjs +7 -0
- package/esm2022/table/table-database.mjs +28 -0
- package/esm2022/table/table-datasource.mjs +66 -0
- package/esm2022/table/table-model.interface.mjs +2 -0
- package/esm2022/table/table.component.mjs +143 -0
- package/esm2022/table/table.module.mjs +25 -0
- package/esm2022/tool/igo2-common-tool.mjs +5 -0
- package/esm2022/tool/public_api.mjs +4 -0
- package/esm2022/tool/shared/index.mjs +6 -0
- package/esm2022/tool/shared/tool-component.mjs +9 -0
- package/esm2022/tool/shared/tool.interface.mjs +2 -0
- package/esm2022/tool/shared/tool.service.mjs +43 -0
- package/esm2022/tool/shared/toolbox.enums.mjs +2 -0
- package/esm2022/tool/shared/toolbox.mjs +192 -0
- package/esm2022/tool/tool.module.mjs +28 -0
- package/esm2022/tool/toolbox/index.mjs +3 -0
- package/esm2022/tool/toolbox/toolbox.animation.mjs +10 -0
- package/esm2022/tool/toolbox/toolbox.component.mjs +241 -0
- package/esm2022/tool/toolbox/toolbox.module.mjs +19 -0
- package/esm2022/widget/igo2-common-widget.mjs +5 -0
- package/esm2022/widget/public_api.mjs +4 -0
- package/esm2022/widget/shared/index.mjs +4 -0
- package/esm2022/widget/shared/widget.interfaces.mjs +2 -0
- package/esm2022/widget/shared/widget.mjs +4 -0
- package/esm2022/widget/shared/widget.service.mjs +22 -0
- package/esm2022/widget/widget-outlet/index.mjs +3 -0
- package/esm2022/widget/widget-outlet/widget-outlet.component.mjs +112 -0
- package/esm2022/widget/widget-outlet/widget-outlet.module.mjs +19 -0
- package/esm2022/widget/widget.module.mjs +22 -0
- package/esm2022/workspace/igo2-common-workspace.mjs +5 -0
- package/esm2022/workspace/public_api.mjs +5 -0
- package/esm2022/workspace/shared/index.mjs +4 -0
- package/esm2022/workspace/shared/store.mjs +37 -0
- package/esm2022/workspace/shared/workspace.interfaces.mjs +2 -0
- package/esm2022/workspace/shared/workspace.mjs +143 -0
- package/esm2022/workspace/workspace-selector/index.mjs +3 -0
- package/esm2022/workspace/workspace-selector/workspace-selector.component.mjs +51 -0
- package/esm2022/workspace/workspace-selector/workspace-selector.module.mjs +19 -0
- package/esm2022/workspace/workspace-widget-outlet/index.mjs +3 -0
- package/esm2022/workspace/workspace-widget-outlet/workspace-widget-outlet.component.mjs +73 -0
- package/esm2022/workspace/workspace-widget-outlet/workspace-widget-outlet.module.mjs +19 -0
- package/esm2022/workspace/workspace.module.mjs +27 -0
- package/fesm2022/igo2-common-action.mjs +16 -16
- package/fesm2022/igo2-common-action.mjs.map +1 -1
- package/fesm2022/igo2-common-backdrop.mjs +8 -8
- package/fesm2022/igo2-common-backdrop.mjs.map +1 -1
- package/fesm2022/igo2-common-badge.mjs +7 -7
- package/fesm2022/igo2-common-badge.mjs.map +1 -1
- package/fesm2022/igo2-common-clickout.mjs +7 -7
- package/fesm2022/igo2-common-clickout.mjs.map +1 -1
- package/fesm2022/igo2-common-clone.mjs +7 -7
- package/fesm2022/igo2-common-clone.mjs.map +1 -1
- package/fesm2022/igo2-common-collapsible.mjs +11 -11
- package/fesm2022/igo2-common-collapsible.mjs.map +1 -1
- package/fesm2022/igo2-common-color.mjs +9 -9
- package/fesm2022/igo2-common-color.mjs.map +1 -1
- package/fesm2022/igo2-common-confirm-dialog.mjs +11 -11
- package/fesm2022/igo2-common-confirm-dialog.mjs.map +1 -1
- package/fesm2022/igo2-common-context-menu.mjs +10 -10
- package/fesm2022/igo2-common-context-menu.mjs.map +1 -1
- package/fesm2022/igo2-common-custom-html.mjs +11 -11
- package/fesm2022/igo2-common-custom-html.mjs.map +1 -1
- package/fesm2022/igo2-common-dom.mjs +7 -7
- package/fesm2022/igo2-common-dom.mjs.map +1 -1
- package/fesm2022/igo2-common-drag-drop.mjs +10 -10
- package/fesm2022/igo2-common-drag-drop.mjs.map +1 -1
- package/fesm2022/igo2-common-dynamic-component.mjs +14 -14
- package/fesm2022/igo2-common-dynamic-component.mjs.map +1 -1
- package/fesm2022/igo2-common-entity.mjs +33 -33
- package/fesm2022/igo2-common-entity.mjs.map +1 -1
- package/fesm2022/igo2-common-flexible.mjs +7 -7
- package/fesm2022/igo2-common-flexible.mjs.map +1 -1
- package/fesm2022/igo2-common-form.mjs +57 -57
- package/fesm2022/igo2-common-form.mjs.map +1 -1
- package/fesm2022/igo2-common-home-button.mjs +8 -8
- package/fesm2022/igo2-common-home-button.mjs.map +1 -1
- package/fesm2022/igo2-common-icon.mjs +14 -13
- package/fesm2022/igo2-common-icon.mjs.map +1 -1
- package/fesm2022/igo2-common-image.mjs +10 -10
- package/fesm2022/igo2-common-image.mjs.map +1 -1
- package/fesm2022/igo2-common-interactive-tour.mjs +14 -14
- package/fesm2022/igo2-common-interactive-tour.mjs.map +1 -1
- package/fesm2022/igo2-common-json-dialog.mjs +11 -11
- package/fesm2022/igo2-common-json-dialog.mjs.map +1 -1
- package/fesm2022/igo2-common-keyvalue.mjs +7 -7
- package/fesm2022/igo2-common-keyvalue.mjs.map +1 -1
- package/fesm2022/igo2-common-list.mjs +11 -11
- package/fesm2022/igo2-common-list.mjs.map +1 -1
- package/fesm2022/igo2-common-panel.mjs +8 -8
- package/fesm2022/igo2-common-panel.mjs.map +1 -1
- package/fesm2022/igo2-common-select-value-dialog.mjs +11 -11
- package/fesm2022/igo2-common-select-value-dialog.mjs.map +1 -1
- package/fesm2022/igo2-common-sidenav.mjs +7 -7
- package/fesm2022/igo2-common-sidenav.mjs.map +1 -1
- package/fesm2022/igo2-common-spinner.mjs +11 -11
- package/fesm2022/igo2-common-spinner.mjs.map +1 -1
- package/fesm2022/igo2-common-stop-propagation.mjs +10 -10
- package/fesm2022/igo2-common-stop-propagation.mjs.map +1 -1
- package/fesm2022/igo2-common-table.mjs +8 -8
- package/fesm2022/igo2-common-table.mjs.map +1 -1
- package/fesm2022/igo2-common-tool.mjs +15 -15
- package/fesm2022/igo2-common-tool.mjs.map +1 -1
- package/fesm2022/igo2-common-widget.mjs +15 -15
- package/fesm2022/igo2-common-widget.mjs.map +1 -1
- package/fesm2022/igo2-common-workspace.mjs +20 -20
- package/fesm2022/igo2-common-workspace.mjs.map +1 -1
- package/package.json +76 -8
- package/src/style/style.scss +1 -1
- package/style/style.css +1 -4
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { ConfigService } from '@igo2/core/config';
|
|
3
|
+
import { LanguageService } from '@igo2/core/language';
|
|
4
|
+
import { MediaService } from '@igo2/core/media';
|
|
5
|
+
import { autoPlacement, offset } from '@floating-ui/dom';
|
|
6
|
+
import { ShepherdService } from 'angular-shepherd';
|
|
7
|
+
import { InteractiveTourLoader } from './interactive-tour.loader';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@igo2/core/config";
|
|
10
|
+
import * as i2 from "@igo2/core/media";
|
|
11
|
+
import * as i3 from "@igo2/core/language";
|
|
12
|
+
import * as i4 from "./interactive-tour.loader";
|
|
13
|
+
import * as i5 from "angular-shepherd";
|
|
14
|
+
export class InteractiveTourService {
|
|
15
|
+
configService;
|
|
16
|
+
mediaService;
|
|
17
|
+
languageService;
|
|
18
|
+
interactiveTourLoader;
|
|
19
|
+
shepherdService;
|
|
20
|
+
previousStep;
|
|
21
|
+
nextIndex = 1;
|
|
22
|
+
constructor(configService, mediaService, languageService, interactiveTourLoader, shepherdService) {
|
|
23
|
+
this.configService = configService;
|
|
24
|
+
this.mediaService = mediaService;
|
|
25
|
+
this.languageService = languageService;
|
|
26
|
+
this.interactiveTourLoader = interactiveTourLoader;
|
|
27
|
+
this.shepherdService = shepherdService;
|
|
28
|
+
if (this.isAppHaveTour()) {
|
|
29
|
+
this.interactiveTourLoader.loadConfigTour();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
isAppHaveTour() {
|
|
33
|
+
const haveTour = this.configService.getConfig('interactiveTour.activateInteractiveTour');
|
|
34
|
+
if (haveTour === undefined) {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
return haveTour;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
isToolHaveTourConfig(toolName) {
|
|
42
|
+
const checkTourActiveOptions = this.interactiveTourLoader.getTourOptionData(toolName);
|
|
43
|
+
if (checkTourActiveOptions === undefined) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
disabledTourButton(toolName) {
|
|
51
|
+
const stepConfig = this.interactiveTourLoader.getTourOptionData(toolName);
|
|
52
|
+
if (stepConfig?.conditions) {
|
|
53
|
+
for (const condition of stepConfig.conditions) {
|
|
54
|
+
if (document.querySelector(condition) === null) {
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
isMobile() {
|
|
62
|
+
return this.mediaService.isMobile();
|
|
63
|
+
}
|
|
64
|
+
isTourDisplayInMobile() {
|
|
65
|
+
const showInMobile = this.configService.getConfig('interactiveTour.tourInMobile');
|
|
66
|
+
return showInMobile === undefined ? true : showInMobile;
|
|
67
|
+
}
|
|
68
|
+
getButtons(buttonKind) {
|
|
69
|
+
if (buttonKind === 'noBackButton') {
|
|
70
|
+
return [
|
|
71
|
+
{
|
|
72
|
+
classes: 'shepherd-button-primary',
|
|
73
|
+
text: this.languageService.translate.instant('igo.common.interactiveTour.nextButton'),
|
|
74
|
+
type: 'next'
|
|
75
|
+
}
|
|
76
|
+
];
|
|
77
|
+
}
|
|
78
|
+
if (buttonKind === 'first') {
|
|
79
|
+
return [
|
|
80
|
+
{
|
|
81
|
+
classes: 'shepherd-button-secondary',
|
|
82
|
+
text: this.languageService.translate.instant('igo.common.interactiveTour.exitButton'),
|
|
83
|
+
type: 'cancel'
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
classes: 'shepherd-button-primary',
|
|
87
|
+
text: this.languageService.translate.instant('igo.common.interactiveTour.nextButton'),
|
|
88
|
+
type: 'next'
|
|
89
|
+
}
|
|
90
|
+
];
|
|
91
|
+
}
|
|
92
|
+
if (buttonKind === 'last') {
|
|
93
|
+
return [
|
|
94
|
+
{
|
|
95
|
+
classes: 'shepherd-button-secondary',
|
|
96
|
+
text: this.languageService.translate.instant('igo.common.interactiveTour.backButton'),
|
|
97
|
+
type: 'back'
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
classes: 'shepherd-button-primary',
|
|
101
|
+
text: this.languageService.translate.instant('igo.common.interactiveTour.exitButton'),
|
|
102
|
+
type: 'cancel'
|
|
103
|
+
}
|
|
104
|
+
];
|
|
105
|
+
}
|
|
106
|
+
return [
|
|
107
|
+
{
|
|
108
|
+
classes: 'shepherd-button-secondary',
|
|
109
|
+
text: this.languageService.translate.instant('igo.common.interactiveTour.backButton'),
|
|
110
|
+
type: 'back'
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
classes: 'shepherd-button-primary',
|
|
114
|
+
text: this.languageService.translate.instant('igo.common.interactiveTour.nextButton'),
|
|
115
|
+
type: 'next'
|
|
116
|
+
}
|
|
117
|
+
];
|
|
118
|
+
}
|
|
119
|
+
getAction(actionName) {
|
|
120
|
+
const action = {
|
|
121
|
+
click: 'click'
|
|
122
|
+
};
|
|
123
|
+
return action[actionName.toLowerCase()];
|
|
124
|
+
}
|
|
125
|
+
addProgress() {
|
|
126
|
+
const self = this;
|
|
127
|
+
let nbTry = 0;
|
|
128
|
+
const maxTry = 21;
|
|
129
|
+
const checkExist = setInterval(() => {
|
|
130
|
+
if (self.getCurrentStep()) {
|
|
131
|
+
if (self.getCurrentStep().options.attachTo.element &&
|
|
132
|
+
!document.querySelector(self.getCurrentStep().options.attachTo.element)) {
|
|
133
|
+
self.cancel();
|
|
134
|
+
clearInterval(checkExist);
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
const currentStepElement = self.getCurrentStep().getElement();
|
|
139
|
+
if (currentStepElement) {
|
|
140
|
+
const shepherdList = currentStepElement.querySelectorAll('.shepherd-content, .shepherd-text');
|
|
141
|
+
shepherdList.forEach((element) => {
|
|
142
|
+
element.classList.add('mat-typography');
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
const header = currentStepElement
|
|
146
|
+
? currentStepElement.querySelector('.shepherd-header')
|
|
147
|
+
: undefined;
|
|
148
|
+
nbTry++;
|
|
149
|
+
if (header || nbTry > maxTry) {
|
|
150
|
+
clearInterval(checkExist);
|
|
151
|
+
}
|
|
152
|
+
if (header) {
|
|
153
|
+
const stepsArray = self.steps;
|
|
154
|
+
const progress = document.createElement('span');
|
|
155
|
+
progress.className = 'shepherd-progress';
|
|
156
|
+
progress.innerText = `${stepsArray.indexOf(self.getCurrentStep()) + 1}/${stepsArray.length}`;
|
|
157
|
+
header.insertBefore(progress, currentStepElement.querySelector('.shepherd-cancel-icon'));
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}, 100);
|
|
162
|
+
}
|
|
163
|
+
checkNext(index, tour, service) {
|
|
164
|
+
if (tour.getCurrentStep()) {
|
|
165
|
+
if (tour.getCurrentStep().options.attachTo.element &&
|
|
166
|
+
document.querySelector(tour.getCurrentStep().options.attachTo.element)) {
|
|
167
|
+
tour.complete();
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
if (index.index === tour.steps.length - 1) {
|
|
171
|
+
tour.complete();
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
tour.steps.splice(index.index, 1);
|
|
175
|
+
const nextStep = tour.steps[index.index];
|
|
176
|
+
if (nextStep.options.attachTo.element &&
|
|
177
|
+
!document.querySelector(nextStep.options.attachTo.element)) {
|
|
178
|
+
service.checkNext(index, tour, service);
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
tour._setupModal();
|
|
182
|
+
tour.show(nextStep.id);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
executeAction(step, actionConfig) {
|
|
187
|
+
if (!actionConfig) {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
if (actionConfig.condition &&
|
|
191
|
+
((actionConfig.condition.charAt(0) === '!' &&
|
|
192
|
+
document.querySelector(actionConfig.condition.slice(1))) ||
|
|
193
|
+
(actionConfig.condition.charAt(0) !== '!' &&
|
|
194
|
+
!document.querySelector(actionConfig.condition)))) {
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
const element = document.querySelector(actionConfig.element || step.element);
|
|
198
|
+
const action = this.getAction(actionConfig.action);
|
|
199
|
+
if (element && action) {
|
|
200
|
+
element[action]();
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
executeActionPromise(step, actionConfig) {
|
|
204
|
+
return new Promise((resolve) => {
|
|
205
|
+
this.executeAction(step, actionConfig);
|
|
206
|
+
if (!actionConfig || !actionConfig.waitFor) {
|
|
207
|
+
resolve();
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
let nbTry = 0;
|
|
211
|
+
const maxTry = actionConfig.maxWait ? actionConfig.maxWait / 100 : 20;
|
|
212
|
+
const checkExist = setInterval(() => {
|
|
213
|
+
nbTry++;
|
|
214
|
+
if (nbTry > maxTry || document.querySelector(actionConfig.waitFor)) {
|
|
215
|
+
clearInterval(checkExist);
|
|
216
|
+
resolve();
|
|
217
|
+
}
|
|
218
|
+
}, 100);
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
getShepherdSteps(tourConfig) {
|
|
222
|
+
const shepherdSteps = [];
|
|
223
|
+
let i = 0;
|
|
224
|
+
for (const step of tourConfig.steps) {
|
|
225
|
+
const position = step.position ?? tourConfig.position;
|
|
226
|
+
shepherdSteps.push({
|
|
227
|
+
attachTo: {
|
|
228
|
+
element: step.element,
|
|
229
|
+
on: position // PopperPlacement
|
|
230
|
+
},
|
|
231
|
+
floatingUIOptions: {
|
|
232
|
+
middleware: [
|
|
233
|
+
position === 'auto' && autoPlacement(),
|
|
234
|
+
offset({ mainAxis: 15 })
|
|
235
|
+
].filter(Boolean)
|
|
236
|
+
},
|
|
237
|
+
beforeShowPromise: () => {
|
|
238
|
+
return Promise.all([
|
|
239
|
+
this.executeActionPromise(this.previousStep, this.previousStep ? this.previousStep.beforeChange : undefined),
|
|
240
|
+
this.executeActionPromise(step, step.beforeShow)
|
|
241
|
+
]);
|
|
242
|
+
},
|
|
243
|
+
buttons: this.getButtons(i === 0
|
|
244
|
+
? 'first'
|
|
245
|
+
: i + 1 === tourConfig.steps.length
|
|
246
|
+
? 'last'
|
|
247
|
+
: tourConfig.steps[i].noBackButton
|
|
248
|
+
? 'noBackButton'
|
|
249
|
+
: undefined),
|
|
250
|
+
classes: step.class,
|
|
251
|
+
highlightClass: step.highlightClass,
|
|
252
|
+
scrollTo: step.scrollToElement || tourConfig.scrollToElement || true,
|
|
253
|
+
canClickTarget: step.disableInteraction
|
|
254
|
+
? !step.disableInteraction
|
|
255
|
+
: undefined,
|
|
256
|
+
title: this.languageService.translate.instant(step.title || tourConfig.title),
|
|
257
|
+
text: [this.languageService.translate.instant(step.text)],
|
|
258
|
+
when: {
|
|
259
|
+
show: () => {
|
|
260
|
+
this.executeAction(step, step.onShow);
|
|
261
|
+
},
|
|
262
|
+
hide: () => {
|
|
263
|
+
this.previousStep = step;
|
|
264
|
+
this.executeAction(step, step.onHide);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
i++;
|
|
269
|
+
}
|
|
270
|
+
return shepherdSteps;
|
|
271
|
+
}
|
|
272
|
+
startTour(toolName) {
|
|
273
|
+
const stepConfig = this.interactiveTourLoader.getTourOptionData(toolName);
|
|
274
|
+
this.shepherdService.defaultStepOptions = {
|
|
275
|
+
classes: stepConfig.class,
|
|
276
|
+
highlightClass: stepConfig.highlightClass,
|
|
277
|
+
canClickTarget: stepConfig.disableInteraction
|
|
278
|
+
? !stepConfig.disableInteraction
|
|
279
|
+
: true,
|
|
280
|
+
cancelIcon: {
|
|
281
|
+
enabled: true
|
|
282
|
+
}
|
|
283
|
+
};
|
|
284
|
+
const shepherdSteps = this.getShepherdSteps(stepConfig);
|
|
285
|
+
this.shepherdService.modal = true;
|
|
286
|
+
this.shepherdService.confirmCancel = false;
|
|
287
|
+
this.shepherdService.addSteps(shepherdSteps);
|
|
288
|
+
this.shepherdService.tourObject.on('show', this.addProgress);
|
|
289
|
+
this.shepherdService.tourObject.on('cancel', (index) => {
|
|
290
|
+
this.checkNext(index, this.shepherdService.tourObject, this);
|
|
291
|
+
});
|
|
292
|
+
this.shepherdService.start();
|
|
293
|
+
}
|
|
294
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InteractiveTourService, deps: [{ token: i1.ConfigService }, { token: i2.MediaService }, { token: i3.LanguageService }, { token: i4.InteractiveTourLoader }, { token: i5.ShepherdService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
295
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InteractiveTourService, providedIn: 'root' });
|
|
296
|
+
}
|
|
297
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InteractiveTourService, decorators: [{
|
|
298
|
+
type: Injectable,
|
|
299
|
+
args: [{
|
|
300
|
+
providedIn: 'root'
|
|
301
|
+
}]
|
|
302
|
+
}], ctorParameters: () => [{ type: i1.ConfigService }, { type: i2.MediaService }, { type: i3.LanguageService }, { type: i4.InteractiveTourLoader }, { type: i5.ShepherdService }] });
|
|
303
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3RpdmUtdG91ci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL2ludGVyYWN0aXZlLXRvdXIvc3JjL2ludGVyYWN0aXZlLXRvdXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBUW5ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7O0FBS2xFLE1BQU0sT0FBTyxzQkFBc0I7SUFLdkI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQVJGLFlBQVksQ0FBc0I7SUFDbEMsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUV0QixZQUNVLGFBQTRCLEVBQzVCLFlBQTBCLEVBQzFCLGVBQWdDLEVBQ2hDLHFCQUE0QyxFQUM1QyxlQUFnQztRQUpoQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFFeEMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDOUMsQ0FBQztJQUNILENBQUM7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LENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3JELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMvQixDQUFDO3dHQW5XVSxzQkFBc0I7NEdBQXRCLHNCQUFzQixjQUZyQixNQUFNOzs0RkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9jb25maWcnO1xuaW1wb3J0IHsgTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9sYW5ndWFnZSc7XG5pbXBvcnQgeyBNZWRpYVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL21lZGlhJztcblxuaW1wb3J0IHsgYXV0b1BsYWNlbWVudCwgb2Zmc2V0IH0gZnJvbSAnQGZsb2F0aW5nLXVpL2RvbSc7XG5pbXBvcnQgeyBTaGVwaGVyZFNlcnZpY2UgfSBmcm9tICdhbmd1bGFyLXNoZXBoZXJkJztcbmltcG9ydCBTaGVwaGVyZCBmcm9tICdzaGVwaGVyZC5qcyc7XG5cbmltcG9ydCB7XG4gIEludGVyYWN0aXZlVG91ckFjdGlvbixcbiAgSW50ZXJhY3RpdmVUb3VyT3B0aW9ucyxcbiAgSW50ZXJhY3RpdmVUb3VyU3RlcFxufSBmcm9tICcuL2ludGVyYWN0aXZlLXRvdXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IEludGVyYWN0aXZlVG91ckxvYWRlciB9IGZyb20gJy4vaW50ZXJhY3RpdmUtdG91ci5sb2FkZXInO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBJbnRlcmFjdGl2ZVRvdXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBwcmV2aW91c1N0ZXA6IEludGVyYWN0aXZlVG91clN0ZXA7XG4gIHByaXZhdGUgbmV4dEluZGV4ID0gMTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZWRpYVNlcnZpY2U6IE1lZGlhU2VydmljZSxcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW50ZXJhY3RpdmVUb3VyTG9hZGVyOiBJbnRlcmFjdGl2ZVRvdXJMb2FkZXIsXG4gICAgcHJpdmF0ZSBzaGVwaGVyZFNlcnZpY2U6IFNoZXBoZXJkU2VydmljZVxuICApIHtcbiAgICBpZiAodGhpcy5pc0FwcEhhdmVUb3VyKCkpIHtcbiAgICAgIHRoaXMuaW50ZXJhY3RpdmVUb3VyTG9hZGVyLmxvYWRDb25maWdUb3VyKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzQXBwSGF2ZVRvdXIoKSB7XG4gICAgY29uc3QgaGF2ZVRvdXIgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKFxuICAgICAgJ2ludGVyYWN0aXZlVG91ci5hY3RpdmF0ZUludGVyYWN0aXZlVG91cidcbiAgICApO1xuICAgIGlmIChoYXZlVG91ciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGhhdmVUb3VyO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc1Rvb2xIYXZlVG91ckNvbmZpZyh0b29sTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2hlY2tUb3VyQWN0aXZlT3B0aW9ucyA9XG4gICAgICB0aGlzLmludGVyYWN0aXZlVG91ckxvYWRlci5nZXRUb3VyT3B0aW9uRGF0YSh0b29sTmFtZSk7XG4gICAgaWYgKGNoZWNrVG91ckFjdGl2ZU9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGlzYWJsZWRUb3VyQnV0dG9uKHRvb2xOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdGVwQ29uZmlnOiBJbnRlcmFjdGl2ZVRvdXJPcHRpb25zID1cbiAgICAgIHRoaXMuaW50ZXJhY3RpdmVUb3VyTG9hZGVyLmdldFRvdXJPcHRpb25EYXRhKHRvb2xOYW1lKTtcblxuICAgIGlmIChzdGVwQ29uZmlnPy5jb25kaXRpb25zKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBzdGVwQ29uZmlnLmNvbmRpdGlvbnMpIHtcbiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoY29uZGl0aW9uKSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tZWRpYVNlcnZpY2UuaXNNb2JpbGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBpc1RvdXJEaXNwbGF5SW5Nb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2hvd0luTW9iaWxlID0gdGhpcy5jb25maWdTZXJ2aWNlLmdldENvbmZpZyhcbiAgICAgICdpbnRlcmFjdGl2ZVRvdXIudG91ckluTW9iaWxlJ1xuICAgICk7XG5cbiAgICByZXR1cm4gc2hvd0luTW9iaWxlID09PSB1bmRlZmluZWQgPyB0cnVlIDogc2hvd0luTW9iaWxlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCdXR0b25zKGJ1dHRvbktpbmQ/OiAnZmlyc3QnIHwgJ2xhc3QnIHwgJ25vQmFja0J1dHRvbicpIHtcbiAgICBpZiAoYnV0dG9uS2luZCA9PT0gJ25vQmFja0J1dHRvbicpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc2VzOiAnc2hlcGhlcmQtYnV0dG9uLXByaW1hcnknLFxuICAgICAgICAgIHRleHQ6IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2lnby5jb21tb24uaW50ZXJhY3RpdmVUb3VyLm5leHRCdXR0b24nXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0eXBlOiAnbmV4dCdcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9XG4gICAgaWYgKGJ1dHRvbktpbmQgPT09ICdmaXJzdCcpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc2VzOiAnc2hlcGhlcmQtYnV0dG9uLXNlY29uZGFyeScsXG4gICAgICAgICAgdGV4dDogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnaWdvLmNvbW1vbi5pbnRlcmFjdGl2ZVRvdXIuZXhpdEJ1dHRvbidcbiAgICAgICAgICApLFxuICAgICAgICAgIHR5cGU6ICdjYW5jZWwnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc2VzOiAnc2hlcGhlcmQtYnV0dG9uLXByaW1hcnknLFxuICAgICAgICAgIHRleHQ6IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2lnby5jb21tb24uaW50ZXJhY3RpdmVUb3VyLm5leHRCdXR0b24nXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0eXBlOiAnbmV4dCdcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9XG5cbiAgICBpZiAoYnV0dG9uS2luZCA9PT0gJ2xhc3QnKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NlczogJ3NoZXBoZXJkLWJ1dHRvbi1zZWNvbmRhcnknLFxuICAgICAgICAgIHRleHQ6IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2lnby5jb21tb24uaW50ZXJhY3RpdmVUb3VyLmJhY2tCdXR0b24nXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0eXBlOiAnYmFjaydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzZXM6ICdzaGVwaGVyZC1idXR0b24tcHJpbWFyeScsXG4gICAgICAgICAgdGV4dDogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnaWdvLmNvbW1vbi5pbnRlcmFjdGl2ZVRvdXIuZXhpdEJ1dHRvbidcbiAgICAgICAgICApLFxuICAgICAgICAgIHR5cGU6ICdjYW5jZWwnXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NlczogJ3NoZXBoZXJkLWJ1dHRvbi1zZWNvbmRhcnknLFxuICAgICAgICB0ZXh0OiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnaWdvLmNvbW1vbi5pbnRlcmFjdGl2ZVRvdXIuYmFja0J1dHRvbidcbiAgICAgICAgKSxcbiAgICAgICAgdHlwZTogJ2JhY2snXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc2VzOiAnc2hlcGhlcmQtYnV0dG9uLXByaW1hcnknLFxuICAgICAgICB0ZXh0OiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnaWdvLmNvbW1vbi5pbnRlcmFjdGl2ZVRvdXIubmV4dEJ1dHRvbidcbiAgICAgICAgKSxcbiAgICAgICAgdHlwZTogJ25leHQnXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWN0aW9uKGFjdGlvbk5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGFjdGlvbiA9IHtcbiAgICAgIGNsaWNrOiAnY2xpY2snXG4gICAgfTtcbiAgICByZXR1cm4gYWN0aW9uW2FjdGlvbk5hbWUudG9Mb3dlckNhc2UoKV07XG4gIH1cblxuICBwcml2YXRlIGFkZFByb2dyZXNzKCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzIGFzIGFueTtcbiAgICBsZXQgbmJUcnkgPSAwO1xuICAgIGNvbnN0IG1heFRyeSA9IDIxO1xuICAgIGNvbnN0IGNoZWNrRXhpc3QgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAoc2VsZi5nZXRDdXJyZW50U3RlcCgpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzZWxmLmdldEN1cnJlbnRTdGVwKCkub3B0aW9ucy5hdHRhY2hUby5lbGVtZW50ICYmXG4gICAgICAgICAgIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICBzZWxmLmdldEN1cnJlbnRTdGVwKCkub3B0aW9ucy5hdHRhY2hUby5lbGVtZW50XG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICBzZWxmLmNhbmNlbCgpO1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY2hlY2tFeGlzdCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRTdGVwRWxlbWVudCA9IHNlbGYuZ2V0Q3VycmVudFN0ZXAoKS5nZXRFbGVtZW50KCk7XG4gICAgICAgICAgaWYgKGN1cnJlbnRTdGVwRWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3Qgc2hlcGhlcmRMaXN0ID0gY3VycmVudFN0ZXBFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICAgICAgICcuc2hlcGhlcmQtY29udGVudCwgLnNoZXBoZXJkLXRleHQnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgc2hlcGhlcmRMaXN0LmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdtYXQtdHlwb2dyYXBoeScpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGhlYWRlciA9IGN1cnJlbnRTdGVwRWxlbWVudFxuICAgICAgICAgICAgPyBjdXJyZW50U3RlcEVsZW1lbnQucXVlcnlTZWxlY3RvcignLnNoZXBoZXJkLWhlYWRlcicpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgIG5iVHJ5Kys7XG4gICAgICAgICAgaWYgKGhlYWRlciB8fCBuYlRyeSA+IG1heFRyeSkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja0V4aXN0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaGVhZGVyKSB7XG4gICAgICAgICAgICBjb25zdCBzdGVwc0FycmF5ID0gc2VsZi5zdGVwcztcbiAgICAgICAgICAgIGNvbnN0IHByb2dyZXNzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgcHJvZ3Jlc3MuY2xhc3NOYW1lID0gJ3NoZXBoZXJkLXByb2dyZXNzJztcbiAgICAgICAgICAgIHByb2dyZXNzLmlubmVyVGV4dCA9IGAke1xuICAgICAgICAgICAgICBzdGVwc0FycmF5LmluZGV4T2Yoc2VsZi5nZXRDdXJyZW50U3RlcCgpKSArIDFcbiAgICAgICAgICAgIH0vJHtzdGVwc0FycmF5Lmxlbmd0aH1gO1xuICAgICAgICAgICAgaGVhZGVyLmluc2VydEJlZm9yZShcbiAgICAgICAgICAgICAgcHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIGN1cnJlbnRTdGVwRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuc2hlcGhlcmQtY2FuY2VsLWljb24nKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCAxMDApO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja05leHQoaW5kZXgsIHRvdXIsIHNlcnZpY2UpIHtcbiAgICBpZiAodG91ci5nZXRDdXJyZW50U3RlcCgpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRvdXIuZ2V0Q3VycmVudFN0ZXAoKS5vcHRpb25zLmF0dGFjaFRvLmVsZW1lbnQgJiZcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0b3VyLmdldEN1cnJlbnRTdGVwKCkub3B0aW9ucy5hdHRhY2hUby5lbGVtZW50KVxuICAgICAgKSB7XG4gICAgICAgIHRvdXIuY29tcGxldGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5kZXguaW5kZXggPT09IHRvdXIuc3RlcHMubGVuZ3RoIC0gMSkge1xuICAgICAgICB0b3VyLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdG91ci5zdGVwcy5zcGxpY2UoaW5kZXguaW5kZXgsIDEpO1xuICAgICAgY29uc3QgbmV4dFN0ZXAgPSB0b3VyLnN0ZXBzW2luZGV4LmluZGV4XTtcbiAgICAgIGlmIChcbiAgICAgICAgbmV4dFN0ZXAub3B0aW9ucy5hdHRhY2hUby5lbGVtZW50ICYmXG4gICAgICAgICFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKG5leHRTdGVwLm9wdGlvbnMuYXR0YWNoVG8uZWxlbWVudClcbiAgICAgICkge1xuICAgICAgICBzZXJ2aWNlLmNoZWNrTmV4dChpbmRleCwgdG91ciwgc2VydmljZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3VyLl9zZXR1cE1vZGFsKCk7XG4gICAgICAgIHRvdXIuc2hvdyhuZXh0U3RlcC5pZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlQWN0aW9uKFxuICAgIHN0ZXA6IEludGVyYWN0aXZlVG91clN0ZXAsXG4gICAgYWN0aW9uQ29uZmlnOiBJbnRlcmFjdGl2ZVRvdXJBY3Rpb25cbiAgKSB7XG4gICAgaWYgKCFhY3Rpb25Db25maWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBhY3Rpb25Db25maWcuY29uZGl0aW9uICYmXG4gICAgICAoKGFjdGlvbkNvbmZpZy5jb25kaXRpb24uY2hhckF0KDApID09PSAnIScgJiZcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihhY3Rpb25Db25maWcuY29uZGl0aW9uLnNsaWNlKDEpKSkgfHxcbiAgICAgICAgKGFjdGlvbkNvbmZpZy5jb25kaXRpb24uY2hhckF0KDApICE9PSAnIScgJiZcbiAgICAgICAgICAhZG9jdW1lbnQucXVlcnlTZWxlY3RvcihhY3Rpb25Db25maWcuY29uZGl0aW9uKSkpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgYWN0aW9uQ29uZmlnLmVsZW1lbnQgfHwgc3RlcC5lbGVtZW50XG4gICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmdldEFjdGlvbihhY3Rpb25Db25maWcuYWN0aW9uKTtcbiAgICBpZiAoZWxlbWVudCAmJiBhY3Rpb24pIHtcbiAgICAgIGVsZW1lbnRbYWN0aW9uXSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZUFjdGlvblByb21pc2UoXG4gICAgc3RlcDogSW50ZXJhY3RpdmVUb3VyU3RlcCxcbiAgICBhY3Rpb25Db25maWc6IEludGVyYWN0aXZlVG91ckFjdGlvblxuICApIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuZXhlY3V0ZUFjdGlvbihzdGVwLCBhY3Rpb25Db25maWcpO1xuICAgICAgaWYgKCFhY3Rpb25Db25maWcgfHwgIWFjdGlvbkNvbmZpZy53YWl0Rm9yKSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IG5iVHJ5ID0gMDtcbiAgICAgIGNvbnN0IG1heFRyeSA9IGFjdGlvbkNvbmZpZy5tYXhXYWl0ID8gYWN0aW9uQ29uZmlnLm1heFdhaXQgLyAxMDAgOiAyMDtcbiAgICAgIGNvbnN0IGNoZWNrRXhpc3QgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIG5iVHJ5Kys7XG4gICAgICAgIGlmIChuYlRyeSA+IG1heFRyeSB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGFjdGlvbkNvbmZpZy53YWl0Rm9yKSkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY2hlY2tFeGlzdCk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9LCAxMDApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaGVwaGVyZFN0ZXBzKHRvdXJDb25maWc6IEludGVyYWN0aXZlVG91ck9wdGlvbnMpIHtcbiAgICBjb25zdCBzaGVwaGVyZFN0ZXBzOiBTaGVwaGVyZC5TdGVwLlN0ZXBPcHRpb25zW10gPSBbXTtcblxuICAgIGxldCBpID0gMDtcbiAgICBmb3IgKGNvbnN0IHN0ZXAgb2YgdG91ckNvbmZpZy5zdGVwcykge1xuICAgICAgY29uc3QgcG9zaXRpb24gPSBzdGVwLnBvc2l0aW9uID8/IHRvdXJDb25maWcucG9zaXRpb247XG4gICAgICBzaGVwaGVyZFN0ZXBzLnB1c2goe1xuICAgICAgICBhdHRhY2hUbzoge1xuICAgICAgICAgIGVsZW1lbnQ6IHN0ZXAuZWxlbWVudCxcbiAgICAgICAgICBvbjogcG9zaXRpb24gYXMgYW55IC8vIFBvcHBlclBsYWNlbWVudFxuICAgICAgICB9LFxuICAgICAgICBmbG9hdGluZ1VJT3B0aW9uczoge1xuICAgICAgICAgIG1pZGRsZXdhcmU6IFtcbiAgICAgICAgICAgIHBvc2l0aW9uID09PSAnYXV0bycgJiYgYXV0b1BsYWNlbWVudCgpLFxuICAgICAgICAgICAgb2Zmc2V0KHsgbWFpbkF4aXM6IDE1IH0pXG4gICAgICAgICAgXS5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgfSxcbiAgICAgICAgYmVmb3JlU2hvd1Byb21pc2U6ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgdGhpcy5leGVjdXRlQWN0aW9uUHJvbWlzZShcbiAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c1N0ZXAsXG4gICAgICAgICAgICAgIHRoaXMucHJldmlvdXNTdGVwID8gdGhpcy5wcmV2aW91c1N0ZXAuYmVmb3JlQ2hhbmdlIDogdW5kZWZpbmVkXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdGhpcy5leGVjdXRlQWN0aW9uUHJvbWlzZShzdGVwLCBzdGVwLmJlZm9yZVNob3cpXG4gICAgICAgICAgXSk7XG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbnM6IHRoaXMuZ2V0QnV0dG9ucyhcbiAgICAgICAgICBpID09PSAwXG4gICAgICAgICAgICA/ICdmaXJzdCdcbiAgICAgICAgICAgIDogaSArIDEgPT09IHRvdXJDb25maWcuc3RlcHMubGVuZ3RoXG4gICAgICAgICAgICAgID8gJ2xhc3QnXG4gICAgICAgICAgICAgIDogdG91ckNvbmZpZy5zdGVwc1tpXS5ub0JhY2tCdXR0b25cbiAgICAgICAgICAgICAgICA/ICdub0JhY2tCdXR0b24nXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgKSxcbiAgICAgICAgY2xhc3Nlczogc3RlcC5jbGFzcyxcbiAgICAgICAgaGlnaGxpZ2h0Q2xhc3M6IHN0ZXAuaGlnaGxpZ2h0Q2xhc3MsXG4gICAgICAgIHNjcm9sbFRvOiBzdGVwLnNjcm9sbFRvRWxlbWVudCB8fCB0b3VyQ29uZmlnLnNjcm9sbFRvRWxlbWVudCB8fCB0cnVlLFxuICAgICAgICBjYW5DbGlja1RhcmdldDogc3RlcC5kaXNhYmxlSW50ZXJhY3Rpb25cbiAgICAgICAgICA/ICFzdGVwLmRpc2FibGVJbnRlcmFjdGlvblxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICB0aXRsZTogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgc3RlcC50aXRsZSB8fCB0b3VyQ29uZmlnLnRpdGxlXG4gICAgICAgICksXG4gICAgICAgIHRleHQ6IFt0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChzdGVwLnRleHQpXSxcbiAgICAgICAgd2hlbjoge1xuICAgICAgICAgIHNob3c6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZUFjdGlvbihzdGVwLCBzdGVwLm9uU2hvdyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBoaWRlOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzU3RlcCA9IHN0ZXA7XG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVBY3Rpb24oc3RlcCwgc3RlcC5vbkhpZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBzYXRpc2ZpZXMgU2hlcGhlcmQuU3RlcC5TdGVwT3B0aW9ucyk7XG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoZXBoZXJkU3RlcHM7XG4gIH1cblxuICBwdWJsaWMgc3RhcnRUb3VyKHRvb2xOYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzdGVwQ29uZmlnOiBJbnRlcmFjdGl2ZVRvdXJPcHRpb25zID1cbiAgICAgIHRoaXMuaW50ZXJhY3RpdmVUb3VyTG9hZGVyLmdldFRvdXJPcHRpb25EYXRhKHRvb2xOYW1lKTtcblxuICAgIHRoaXMuc2hlcGhlcmRTZXJ2aWNlLmRlZmF1bHRTdGVwT3B0aW9ucyA9IHtcbiAgICAgIGNsYXNzZXM6IHN0ZXBDb25maWcuY2xhc3MsXG4gICAgICBoaWdobGlnaHRDbGFzczogc3RlcENvbmZpZy5oaWdobGlnaHRDbGFzcyxcbiAgICAgIGNhbkNsaWNrVGFyZ2V0OiBzdGVwQ29uZmlnLmRpc2FibGVJbnRlcmFjdGlvblxuICAgICAgICA/ICFzdGVwQ29uZmlnLmRpc2FibGVJbnRlcmFjdGlvblxuICAgICAgICA6IHRydWUsXG4gICAgICBjYW5jZWxJY29uOiB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWVcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgc2hlcGhlcmRTdGVwcyA9IHRoaXMuZ2V0U2hlcGhlcmRTdGVwcyhzdGVwQ29uZmlnKTtcblxuICAgIHRoaXMuc2hlcGhlcmRTZXJ2aWNlLm1vZGFsID0gdHJ1ZTtcbiAgICB0aGlzLnNoZXBoZXJkU2VydmljZS5jb25maXJtQ2FuY2VsID0gZmFsc2U7XG4gICAgdGhpcy5zaGVwaGVyZFNlcnZpY2UuYWRkU3RlcHMoc2hlcGhlcmRTdGVwcyk7XG5cbiAgICB0aGlzLnNoZXBoZXJkU2VydmljZS50b3VyT2JqZWN0Lm9uKCdzaG93JywgdGhpcy5hZGRQcm9ncmVzcyk7XG4gICAgdGhpcy5zaGVwaGVyZFNlcnZpY2UudG91ck9iamVjdC5vbignY2FuY2VsJywgKGluZGV4KSA9PiB7XG4gICAgICB0aGlzLmNoZWNrTmV4dChpbmRleCwgdGhpcy5zaGVwaGVyZFNlcnZpY2UudG91ck9iamVjdCwgdGhpcyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNoZXBoZXJkU2VydmljZS5zdGFydCgpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './interactive-tour.module';
|
|
2
|
+
export * from './interactive-tour.component';
|
|
3
|
+
export * from './interactive-tour.service';
|
|
4
|
+
export * from './interactive-tour.loader';
|
|
5
|
+
export * from './interactive-tour.interface';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9pbnRlcmFjdGl2ZS10b3VyL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw4QkFBOEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vaW50ZXJhY3RpdmUtdG91ci5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmFjdGl2ZS10b3VyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyYWN0aXZlLXRvdXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyYWN0aXZlLXRvdXIubG9hZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJhY3RpdmUtdG91ci5pbnRlcmZhY2UnO1xuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public_api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWdvMi1jb21tb24tanNvbi1kaWFsb2cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vanNvbi1kaWFsb2cvc3JjL2lnbzItY29tbW9uLWpzb24tZGlhbG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljX2FwaSc7XG4iXX0=
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { KeyValuePipe, NgFor, NgIf, NgTemplateOutlet } from '@angular/common';
|
|
2
|
+
import { Component } from '@angular/core';
|
|
3
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
4
|
+
import { MatDialogActions, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/material/dialog";
|
|
7
|
+
import * as i2 from "@angular/material/button";
|
|
8
|
+
export class JsonDialogComponent {
|
|
9
|
+
dialogRef;
|
|
10
|
+
title;
|
|
11
|
+
data;
|
|
12
|
+
ignoreKeys;
|
|
13
|
+
constructor(dialogRef) {
|
|
14
|
+
this.dialogRef = dialogRef;
|
|
15
|
+
}
|
|
16
|
+
isObject(val) {
|
|
17
|
+
return typeof val === 'object' && !Array.isArray(val);
|
|
18
|
+
}
|
|
19
|
+
getKey(baseKey, key) {
|
|
20
|
+
return (baseKey ? baseKey + '.' : '') + key;
|
|
21
|
+
}
|
|
22
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: JsonDialogComponent, deps: [{ token: i1.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
23
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: JsonDialogComponent, isStandalone: true, selector: "igo-json-dialog", ngImport: i0, template: "<h1 mat-dialog-title class=\"mat-typography\">{{ title }}</h1>\n\n<div mat-dialog-content class=\"mat-typography\">\n <ng-container\n *ngTemplateOutlet=\"loopObject; context: { obj: data }\"\n ></ng-container>\n\n <ng-template #loopObject let-obj=\"obj\" let-baseKey=\"baseKey\">\n <ng-container *ngFor=\"let property of obj | keyvalue\">\n <ng-container\n *ngIf=\"ignoreKeys.indexOf(getKey(baseKey, property.key)) === -1\"\n >\n <ng-container *ngIf=\"isObject(property.value); else notObject\">\n <ng-container\n *ngTemplateOutlet=\"\n loopObject;\n context: {\n obj: property.value,\n baseKey: getKey(baseKey, property.key)\n }\n \"\n ></ng-container>\n </ng-container>\n\n <ng-template #notObject>\n <p>\n <span\n ><b>{{ getKey(baseKey, property.key) }}</b> : </span\n ><span class=\"propertyValue\" [innerHtml]=\"property.value\"></span>\n </p>\n </ng-template>\n </ng-container>\n </ng-container>\n </ng-template>\n</div>\n\n<div mat-dialog-actions>\n <button mat-button color=\"primary\" (click)=\"dialogRef.close(false)\">\n OK\n </button>\n</div>\n", dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }] });
|
|
24
|
+
}
|
|
25
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: JsonDialogComponent, decorators: [{
|
|
26
|
+
type: Component,
|
|
27
|
+
args: [{ selector: 'igo-json-dialog', standalone: true, imports: [
|
|
28
|
+
MatDialogTitle,
|
|
29
|
+
MatDialogContent,
|
|
30
|
+
NgTemplateOutlet,
|
|
31
|
+
NgFor,
|
|
32
|
+
NgIf,
|
|
33
|
+
MatDialogActions,
|
|
34
|
+
MatButtonModule,
|
|
35
|
+
KeyValuePipe
|
|
36
|
+
], template: "<h1 mat-dialog-title class=\"mat-typography\">{{ title }}</h1>\n\n<div mat-dialog-content class=\"mat-typography\">\n <ng-container\n *ngTemplateOutlet=\"loopObject; context: { obj: data }\"\n ></ng-container>\n\n <ng-template #loopObject let-obj=\"obj\" let-baseKey=\"baseKey\">\n <ng-container *ngFor=\"let property of obj | keyvalue\">\n <ng-container\n *ngIf=\"ignoreKeys.indexOf(getKey(baseKey, property.key)) === -1\"\n >\n <ng-container *ngIf=\"isObject(property.value); else notObject\">\n <ng-container\n *ngTemplateOutlet=\"\n loopObject;\n context: {\n obj: property.value,\n baseKey: getKey(baseKey, property.key)\n }\n \"\n ></ng-container>\n </ng-container>\n\n <ng-template #notObject>\n <p>\n <span\n ><b>{{ getKey(baseKey, property.key) }}</b> : </span\n ><span class=\"propertyValue\" [innerHtml]=\"property.value\"></span>\n </p>\n </ng-template>\n </ng-container>\n </ng-container>\n </ng-template>\n</div>\n\n<div mat-dialog-actions>\n <button mat-button color=\"primary\" (click)=\"dialogRef.close(false)\">\n OK\n </button>\n</div>\n" }]
|
|
37
|
+
}], ctorParameters: () => [{ type: i1.MatDialogRef }] });
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL2pzb24tZGlhbG9nL3NyYy9qc29uLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vanNvbi1kaWFsb2cvc3JjL2pzb24tZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixjQUFjLEVBQ2YsTUFBTSwwQkFBMEIsQ0FBQzs7OztBQWlCbEMsTUFBTSxPQUFPLG1CQUFtQjtJQUtYO0lBSlosS0FBSyxDQUFTO0lBQ2QsSUFBSSxDQUFNO0lBQ1YsVUFBVSxDQUFXO0lBRTVCLFlBQW1CLFNBQTRDO1FBQTVDLGNBQVMsR0FBVCxTQUFTLENBQW1DO0lBQUcsQ0FBQztJQUVuRSxRQUFRLENBQUMsR0FBRztRQUNWLE9BQU8sT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHO1FBQ2pCLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUM5QyxDQUFDO3dHQWJVLG1CQUFtQjs0RkFBbkIsbUJBQW1CLDJFQ3pCaEMsd3dDQXlDQSw0Q0QxQkksY0FBYywrSEFDZCxnQkFBZ0IseUdBQ2hCLGdCQUFnQixvSkFDaEIsS0FBSyxtSEFDTCxJQUFJLDZGQUNKLGdCQUFnQiwySEFDaEIsZUFBZSx1TkFDZixZQUFZOzs0RkFHSCxtQkFBbUI7a0JBZi9CLFNBQVM7K0JBQ0UsaUJBQWlCLGNBRWYsSUFBSSxXQUNQO3dCQUNQLGNBQWM7d0JBQ2QsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLEtBQUs7d0JBQ0wsSUFBSTt3QkFDSixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsWUFBWTtxQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEtleVZhbHVlUGlwZSwgTmdGb3IsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHtcbiAgTWF0RGlhbG9nQWN0aW9ucyxcbiAgTWF0RGlhbG9nQ29udGVudCxcbiAgTWF0RGlhbG9nUmVmLFxuICBNYXREaWFsb2dUaXRsZVxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZ28tanNvbi1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vanNvbi1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTWF0RGlhbG9nVGl0bGUsXG4gICAgTWF0RGlhbG9nQ29udGVudCxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIE5nRm9yLFxuICAgIE5nSWYsXG4gICAgTWF0RGlhbG9nQWN0aW9ucyxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgS2V5VmFsdWVQaXBlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgSnNvbkRpYWxvZ0NvbXBvbmVudCB7XG4gIHB1YmxpYyB0aXRsZTogc3RyaW5nO1xuICBwdWJsaWMgZGF0YTogYW55O1xuICBwdWJsaWMgaWdub3JlS2V5czogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEpzb25EaWFsb2dDb21wb25lbnQ+KSB7fVxuXG4gIGlzT2JqZWN0KHZhbCkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWwpO1xuICB9XG5cbiAgZ2V0S2V5KGJhc2VLZXksIGtleSkge1xuICAgIHJldHVybiAoYmFzZUtleSA/IGJhc2VLZXkgKyAnLicgOiAnJykgKyBrZXk7XG4gIH1cbn1cbiIsIjxoMSBtYXQtZGlhbG9nLXRpdGxlIGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIj57eyB0aXRsZSB9fTwvaDE+XG5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9vcE9iamVjdDsgY29udGV4dDogeyBvYmo6IGRhdGEgfVwiXG4gID48L25nLWNvbnRhaW5lcj5cblxuICA8bmctdGVtcGxhdGUgI2xvb3BPYmplY3QgbGV0LW9iaj1cIm9ialwiIGxldC1iYXNlS2V5PVwiYmFzZUtleVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHByb3BlcnR5IG9mIG9iaiB8IGtleXZhbHVlXCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiaWdub3JlS2V5cy5pbmRleE9mKGdldEtleShiYXNlS2V5LCBwcm9wZXJ0eS5rZXkpKSA9PT0gLTFcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNPYmplY3QocHJvcGVydHkudmFsdWUpOyBlbHNlIG5vdE9iamVjdFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgIGxvb3BPYmplY3Q7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICBvYmo6IHByb3BlcnR5LnZhbHVlLFxuICAgICAgICAgICAgICAgIGJhc2VLZXk6IGdldEtleShiYXNlS2V5LCBwcm9wZXJ0eS5rZXkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI25vdE9iamVjdD5cbiAgICAgICAgICA8cD5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgID48Yj57eyBnZXRLZXkoYmFzZUtleSwgcHJvcGVydHkua2V5KSB9fTwvYj4gOiA8L3NwYW5cbiAgICAgICAgICAgID48c3BhbiBjbGFzcz1cInByb3BlcnR5VmFsdWVcIiBbaW5uZXJIdG1sXT1cInByb3BlcnR5LnZhbHVlXCI+PC9zcGFuPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG5cbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zPlxuICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImRpYWxvZ1JlZi5jbG9zZShmYWxzZSlcIj5cbiAgICBPS1xuICA8L2J1dHRvbj5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { JsonDialogComponent } from './json-dialog.component';
|
|
3
|
+
import { JsonDialogService } from './json-dialog.service';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class IgoJsonDialogModule {
|
|
6
|
+
/**
|
|
7
|
+
* @deprecated it has no effect
|
|
8
|
+
*/
|
|
9
|
+
static forRoot() {
|
|
10
|
+
return {
|
|
11
|
+
ngModule: IgoJsonDialogModule
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IgoJsonDialogModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
15
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: IgoJsonDialogModule, imports: [JsonDialogComponent], exports: [JsonDialogComponent] });
|
|
16
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IgoJsonDialogModule, providers: [JsonDialogService], imports: [JsonDialogComponent] });
|
|
17
|
+
}
|
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IgoJsonDialogModule, decorators: [{
|
|
19
|
+
type: NgModule,
|
|
20
|
+
args: [{
|
|
21
|
+
imports: [JsonDialogComponent],
|
|
22
|
+
exports: [JsonDialogComponent],
|
|
23
|
+
providers: [JsonDialogService]
|
|
24
|
+
}]
|
|
25
|
+
}] });
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1kaWFsb2cubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL2pzb24tZGlhbG9nL3NyYy9qc29uLWRpYWxvZy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBTzFELE1BQU0sT0FBTyxtQkFBbUI7SUFDOUI7O09BRUc7SUFDSCxNQUFNLENBQUMsT0FBTztRQUNaLE9BQU87WUFDTCxRQUFRLEVBQUUsbUJBQW1CO1NBQzlCLENBQUM7SUFDSixDQUFDO3dHQVJVLG1CQUFtQjt5R0FBbkIsbUJBQW1CLFlBSnBCLG1CQUFtQixhQUNuQixtQkFBbUI7eUdBR2xCLG1CQUFtQixhQUZuQixDQUFDLGlCQUFpQixDQUFDLFlBRnBCLG1CQUFtQjs7NEZBSWxCLG1CQUFtQjtrQkFML0IsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztvQkFDOUIsT0FBTyxFQUFFLENBQUMsbUJBQW1CLENBQUM7b0JBQzlCLFNBQVMsRUFBRSxDQUFDLGlCQUFpQixDQUFDO2lCQUMvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEpzb25EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2pzb24tZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBKc29uRGlhbG9nU2VydmljZSB9IGZyb20gJy4vanNvbi1kaWFsb2cuc2VydmljZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtKc29uRGlhbG9nQ29tcG9uZW50XSxcbiAgZXhwb3J0czogW0pzb25EaWFsb2dDb21wb25lbnRdLFxuICBwcm92aWRlcnM6IFtKc29uRGlhbG9nU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgSWdvSnNvbkRpYWxvZ01vZHVsZSB7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBpdCBoYXMgbm8gZWZmZWN0XG4gICAqL1xuICBzdGF0aWMgZm9yUm9vdCgpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPElnb0pzb25EaWFsb2dNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IElnb0pzb25EaWFsb2dNb2R1bGVcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { MatDialog } from '@angular/material/dialog';
|
|
3
|
+
import { JsonDialogComponent } from './json-dialog.component';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/material/dialog";
|
|
6
|
+
export class JsonDialogService {
|
|
7
|
+
dialog;
|
|
8
|
+
constructor(dialog) {
|
|
9
|
+
this.dialog = dialog;
|
|
10
|
+
}
|
|
11
|
+
open(title, data, ignoreKeys) {
|
|
12
|
+
const dialogRef = this.dialog.open(JsonDialogComponent, {
|
|
13
|
+
disableClose: false
|
|
14
|
+
});
|
|
15
|
+
dialogRef.componentInstance.data = data;
|
|
16
|
+
dialogRef.componentInstance.title = title;
|
|
17
|
+
dialogRef.componentInstance.ignoreKeys = ignoreKeys ?? [];
|
|
18
|
+
return dialogRef.afterClosed();
|
|
19
|
+
}
|
|
20
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: JsonDialogService, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
21
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: JsonDialogService });
|
|
22
|
+
}
|
|
23
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: JsonDialogService, decorators: [{
|
|
24
|
+
type: Injectable
|
|
25
|
+
}], ctorParameters: () => [{ type: i1.MatDialog }] });
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1kaWFsb2cuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9qc29uLWRpYWxvZy9zcmMvanNvbi1kaWFsb2cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUlyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7O0FBRzlELE1BQU0sT0FBTyxpQkFBaUI7SUFDUjtJQUFwQixZQUFvQixNQUFpQjtRQUFqQixXQUFNLEdBQU4sTUFBTSxDQUFXO0lBQUcsQ0FBQztJQUVsQyxJQUFJLENBQUMsS0FBVSxFQUFFLElBQUksRUFBRSxVQUFxQjtRQUNqRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUN0RCxZQUFZLEVBQUUsS0FBSztTQUNwQixDQUFDLENBQUM7UUFDSCxTQUFTLENBQUMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUN4QyxTQUFTLENBQUMsaUJBQWlCLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUMxQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsVUFBVSxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFFMUQsT0FBTyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDakMsQ0FBQzt3R0FaVSxpQkFBaUI7NEdBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgSnNvbkRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vanNvbi1kaWFsb2cuY29tcG9uZW50JztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEpzb25EaWFsb2dTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZykge31cblxuICBwdWJsaWMgb3Blbih0aXRsZTogYW55LCBkYXRhLCBpZ25vcmVLZXlzPzogc3RyaW5nW10pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oSnNvbkRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZVxuICAgIH0pO1xuICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5kYXRhID0gZGF0YTtcbiAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UudGl0bGUgPSB0aXRsZTtcbiAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuaWdub3JlS2V5cyA9IGlnbm9yZUtleXMgPz8gW107XG5cbiAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from './json-dialog.module';
|
|
2
|
+
export * from './json-dialog.component';
|
|
3
|
+
export * from './json-dialog.service';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9qc29uLWRpYWxvZy9zcmMvcHVibGljX2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vanNvbi1kaWFsb2cubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vanNvbi1kaWFsb2cuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vanNvbi1kaWFsb2cuc2VydmljZSc7XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public_api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWdvMi1jb21tb24ta2V5dmFsdWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24va2V5dmFsdWUvc3JjL2lnbzItY29tbW9uLWtleXZhbHVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljX2FwaSc7XG4iXX0=
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { KeyValuePipe } from './keyvalue.pipe';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* @deprecated import the KeyValuePipe directly
|
|
6
|
+
*/
|
|
7
|
+
export class IgoKeyValueModule {
|
|
8
|
+
static forRoot() {
|
|
9
|
+
return {
|
|
10
|
+
ngModule: IgoKeyValueModule,
|
|
11
|
+
providers: []
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IgoKeyValueModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
15
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: IgoKeyValueModule, imports: [KeyValuePipe], exports: [KeyValuePipe] });
|
|
16
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IgoKeyValueModule });
|
|
17
|
+
}
|
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IgoKeyValueModule, decorators: [{
|
|
19
|
+
type: NgModule,
|
|
20
|
+
args: [{
|
|
21
|
+
imports: [KeyValuePipe],
|
|
22
|
+
exports: [KeyValuePipe]
|
|
23
|
+
}]
|
|
24
|
+
}] });
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5dmFsdWUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL2tleXZhbHVlL3NyYy9rZXl2YWx1ZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUUvQzs7R0FFRztBQUtILE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsTUFBTSxDQUFDLE9BQU87UUFDWixPQUFPO1lBQ0wsUUFBUSxFQUFFLGlCQUFpQjtZQUMzQixTQUFTLEVBQUUsRUFBRTtTQUNkLENBQUM7SUFDSixDQUFDO3dHQU5VLGlCQUFpQjt5R0FBakIsaUJBQWlCLFlBSGxCLFlBQVksYUFDWixZQUFZO3lHQUVYLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFKN0IsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBLZXlWYWx1ZVBpcGUgfSBmcm9tICcuL2tleXZhbHVlLnBpcGUnO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIGltcG9ydCB0aGUgS2V5VmFsdWVQaXBlIGRpcmVjdGx5XG4gKi9cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtLZXlWYWx1ZVBpcGVdLFxuICBleHBvcnRzOiBbS2V5VmFsdWVQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ29LZXlWYWx1ZU1vZHVsZSB7XG4gIHN0YXRpYyBmb3JSb290KCk6IE1vZHVsZVdpdGhQcm92aWRlcnM8SWdvS2V5VmFsdWVNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IElnb0tleVZhbHVlTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Pipe } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class KeyValuePipe {
|
|
4
|
+
transform(value) {
|
|
5
|
+
const keyValues = [];
|
|
6
|
+
Object.getOwnPropertyNames(value).forEach((key) => keyValues.push({ key, value: value[key] }));
|
|
7
|
+
return keyValues;
|
|
8
|
+
}
|
|
9
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KeyValuePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
10
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: KeyValuePipe, isStandalone: true, name: "keyvalue" });
|
|
11
|
+
}
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KeyValuePipe, decorators: [{
|
|
13
|
+
type: Pipe,
|
|
14
|
+
args: [{
|
|
15
|
+
name: 'keyvalue',
|
|
16
|
+
standalone: true
|
|
17
|
+
}]
|
|
18
|
+
}] });
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5dmFsdWUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9rZXl2YWx1ZS9zcmMva2V5dmFsdWUucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFNcEQsTUFBTSxPQUFPLFlBQVk7SUFDdkIsU0FBUyxDQUFDLEtBQVU7UUFDbEIsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUN4RCxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUMzQyxDQUFDO1FBRUYsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQzt3R0FSVSxZQUFZO3NHQUFaLFlBQVk7OzRGQUFaLFlBQVk7a0JBSnhCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQFBpcGUoe1xuICBuYW1lOiAna2V5dmFsdWUnLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIEtleVZhbHVlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odmFsdWU6IGFueSk6IGFueSB7XG4gICAgY29uc3Qga2V5VmFsdWVzID0gW107XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsdWUpLmZvckVhY2goKGtleTogc3RyaW5nKSA9PlxuICAgICAga2V5VmFsdWVzLnB1c2goeyBrZXksIHZhbHVlOiB2YWx1ZVtrZXldIH0pXG4gICAgKTtcblxuICAgIHJldHVybiBrZXlWYWx1ZXM7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './keyvalue.module';
|
|
2
|
+
export * from './keyvalue.pipe';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9rZXl2YWx1ZS9zcmMvcHVibGljX2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2tleXZhbHVlLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2tleXZhbHVlLnBpcGUnO1xuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public_api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWdvMi1jb21tb24tbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9saXN0L3NyYy9pZ28yLWNvbW1vbi1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljX2FwaSc7XG4iXX0=
|