@scion/workbench 18.0.0-beta.9 → 19.0.0-beta.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/README.md +1 -1
- package/design/_workbench-dark-theme-design-tokens.scss +8 -2
- package/design/_workbench-light-theme-design-tokens.scss +8 -2
- package/design/_workbench-view-global-styles.scss +0 -1
- package/fesm2022/scion-workbench.mjs +12009 -11413
- package/fesm2022/scion-workbench.mjs.map +1 -1
- package/lib/common/css-class.util.d.ts +5 -0
- package/lib/common/instanceof.pipe.d.ts +1 -1
- package/lib/common/math.util.d.ts +7 -0
- package/lib/common/objects.util.d.ts +1 -1
- package/lib/desktop/desktop.directive.d.ts +37 -0
- package/lib/desktop/public_api.d.ts +1 -0
- package/lib/dialog/workbench-dialog.component.d.ts +1 -2
- package/lib/dialog/workbench-dialog.options.d.ts +1 -2
- package/lib/layout/grid-element/grid-element.component.d.ts +3 -5
- package/lib/layout/migration/model/workbench-layout-migration-v6.model.d.ts +35 -0
- package/lib/layout/migration/model/workbench-layout-migration-v7.model.d.ts +37 -0
- package/lib/layout/migration/workbench-layout-migration-v6.service.d.ts +12 -0
- package/lib/layout/migration/workbench-layout-migration-v7.service.d.ts +10 -0
- package/lib/layout/public_api.d.ts +1 -0
- package/lib/layout/stringifier.d.ts +12 -5
- package/lib/layout/workbench-layout.component.d.ts +8 -10
- package/lib/layout/workbench-layout.d.ts +104 -16
- package/lib/layout/workbench-layout.model.d.ts +11 -4
- package/lib/layout/workbench-layout.service.d.ts +10 -12
- package/lib/layout/workbench-layouts.util.d.ts +5 -0
- package/lib/layout/workench-layout-serializer.service.d.ts +31 -7
- package/lib/layout//311/265workbench-layout.d.ts +73 -42
- package/lib/layout//311/265workbench-layout.factory.d.ts +2 -2
- package/lib/logging//311/265logger.d.ts +11 -6
- package/lib/message-box/workbench-message-box.options.d.ts +1 -2
- package/lib/microfrontend-platform/microfrontend-view/microfrontend-view.component.d.ts +5 -7
- package/lib/page-not-found/page-not-found.component.d.ts +5 -3
- package/lib/{layout/main-area-layout/main-area-layout.component.d.ts → part/main-area-part/main-area-part.component.d.ts} +12 -12
- package/lib/part/part-action/part-action.component.d.ts +39 -0
- package/lib/part/part-action-bar/part-action.directive.d.ts +41 -34
- package/lib/part/part-bar/part-bar.component.d.ts +16 -140
- package/lib/part/part-portal.pipe.d.ts +3 -2
- package/lib/part/part.component.d.ts +13 -10
- package/lib/part/public_api.d.ts +2 -2
- package/lib/part/view-context-menu/accelerator-format.pipe.d.ts +1 -1
- package/lib/part/view-context-menu/menu-item/menu-item.component.d.ts +39 -0
- package/lib/part/view-context-menu/text/text.component.d.ts +6 -0
- package/lib/part/view-context-menu/view-menu-item.directive.d.ts +75 -0
- package/lib/part/view-context-menu/view-menu.component.d.ts +13 -16
- package/lib/part/view-context-menu/view-menu.service.d.ts +10 -6
- package/lib/part/view-list/view-list.component.d.ts +2 -1
- package/lib/part/view-tab/view-tab.component.d.ts +4 -4
- package/lib/part/view-tab-bar/view-tab-bar.component.d.ts +163 -0
- package/lib/part/view-tab-drag-image/view-tab-drag-image.component.d.ts +5 -1
- package/lib/part/workbench-part-action.registry.d.ts +3 -3
- package/lib/part/workbench-part.model.d.ts +57 -2
- package/lib/part/workbench-part.registry.d.ts +1 -1
- package/lib/part//311/265workbench-part.model.d.ts +26 -11
- package/lib/perspective/migration/model/workbench-perspective-migration-v3.model.d.ts +10 -0
- package/lib/perspective/migration/workbench-perspective-migration-v3.service.d.ts +12 -0
- package/lib/perspective/workbench-perspective.model.d.ts +8 -8
- package/lib/perspective/workench-perspective-serializer.service.d.ts +1 -1
- package/lib/perspective//311/265workbench-perspective.model.d.ts +2 -3
- package/lib/public_api.d.ts +2 -3
- package/lib/registry/workbench-object-registry.d.ts +4 -7
- package/lib/routing/public_api.d.ts +1 -1
- package/lib/routing/router-outlet-root-context.directive.d.ts +10 -0
- package/lib/routing/routing.model.d.ts +44 -30
- package/lib/routing/routing.util.d.ts +35 -10
- package/lib/routing/workbench-auxiliary-route-installer.service.d.ts +3 -2
- package/lib/routing/workbench-layout-differ.d.ts +4 -3
- package/lib/routing/workbench-outlet-differ.d.ts +48 -0
- package/lib/routing/workbench-route-data.d.ts +2 -2
- package/lib/routing/workbench-route-guards.d.ts +39 -19
- package/lib/routing/workbench-router.service.d.ts +2 -2
- package/lib/routing/workbench-url-observer.service.d.ts +1 -4
- package/lib/view/public_api.d.ts +1 -1
- package/lib/view/view-move-handler.service.d.ts +16 -14
- package/lib/view/view.component.d.ts +10 -15
- package/lib/view/workbench-view-menu-item.registry.d.ts +7 -0
- package/lib/view/workbench-view.model.d.ts +40 -27
- package/lib/view/workbench-view.registry.d.ts +1 -1
- package/lib/view//311/265workbench-view.model.d.ts +18 -28
- package/lib/view-dnd/grid-drop-targets.util.d.ts +3 -3
- package/lib/view-dnd/view-drag.service.d.ts +81 -63
- package/lib/view-dnd/view-drop-placeholder-renderer.service.d.ts +9 -21
- package/lib/view-dnd/view-drop-zone.directive.d.ts +69 -30
- package/lib/view-dnd/view-tab-drag-image-renderer.service.d.ts +11 -36
- package/lib/workbench-config.d.ts +18 -11
- package/lib/{content-projection/workbench-element-references.d.ts → workbench-element-references.d.ts} +5 -1
- package/lib/workbench.constants.d.ts +30 -0
- package/lib/workbench.model.d.ts +113 -37
- package/lib/workbench.provider.d.ts +1 -1
- package/lib/workbench.service.d.ts +32 -27
- package/lib//311/265workbench.service.d.ts +6 -6
- package/package.json +8 -10
- package/esm2022/lib/activation-instant.provider.mjs +0 -29
- package/esm2022/lib/common/animation-frame.observable.mjs +0 -37
- package/esm2022/lib/common/asserts.util.mjs +0 -31
- package/esm2022/lib/common/class-list.mjs +0 -99
- package/esm2022/lib/common/coerce-observable.pipe.mjs +0 -28
- package/esm2022/lib/common/disposable.mjs +0 -11
- package/esm2022/lib/common/dom.util.mjs +0 -100
- package/esm2022/lib/common/grid-element-if-visible.pipe.mjs +0 -32
- package/esm2022/lib/common/instanceof.pipe.mjs +0 -26
- package/esm2022/lib/common/map-coerce.pipe.mjs +0 -28
- package/esm2022/lib/common/null-if-empty.pipe.mjs +0 -38
- package/esm2022/lib/common/objects.util.mjs +0 -40
- package/esm2022/lib/common/observables.mjs +0 -72
- package/esm2022/lib/common/operators.mjs +0 -27
- package/esm2022/lib/common/public_api.mjs +0 -11
- package/esm2022/lib/common/stringify-error.util.mjs +0 -19
- package/esm2022/lib/common/throw-error.util.mjs +0 -16
- package/esm2022/lib/common/typeof.pipe.mjs +0 -26
- package/esm2022/lib/common/uid.util.mjs +0 -22
- package/esm2022/lib/common//311/265destroy-ref.mjs +0 -36
- package/esm2022/lib/communication/workbench-broadcast-channel.mjs +0 -38
- package/esm2022/lib/content-projection/content-as-overlay.component.mjs +0 -114
- package/esm2022/lib/content-projection/workbench-element-references.mjs +0 -32
- package/esm2022/lib/dialog/dialog-footer/dialog-action-filter.pipe.mjs +0 -26
- package/esm2022/lib/dialog/dialog-footer/dialog-footer.component.mjs +0 -34
- package/esm2022/lib/dialog/dialog-footer/workbench-dialog-action.directive.mjs +0 -51
- package/esm2022/lib/dialog/dialog-footer/workbench-dialog-footer.directive.mjs +0 -46
- package/esm2022/lib/dialog/dialog-header/dialog-header.component.mjs +0 -33
- package/esm2022/lib/dialog/dialog-header/workbench-dialog-header.directive.mjs +0 -46
- package/esm2022/lib/dialog/movable.directive.mjs +0 -126
- package/esm2022/lib/dialog/public_api.mjs +0 -15
- package/esm2022/lib/dialog/resizable.directive.mjs +0 -392
- package/esm2022/lib/dialog/workbench-dialog.component.mjs +0 -250
- package/esm2022/lib/dialog/workbench-dialog.mjs +0 -79
- package/esm2022/lib/dialog/workbench-dialog.options.mjs +0 -11
- package/esm2022/lib/dialog/workbench-dialog.registry.mjs +0 -73
- package/esm2022/lib/dialog/workbench-dialog.service.mjs +0 -96
- package/esm2022/lib/dialog//311/265workbench-dialog.mjs +0 -310
- package/esm2022/lib/dialog//311/265workbench-dialog.service.mjs +0 -98
- package/esm2022/lib/executor/latest-task-executor.mjs +0 -55
- package/esm2022/lib/executor/single-task-executor.mjs +0 -72
- package/esm2022/lib/filter-field/filter-field.component.mjs +0 -130
- package/esm2022/lib/glass-pane/blockable.mjs +0 -11
- package/esm2022/lib/glass-pane/blocking.mjs +0 -11
- package/esm2022/lib/glass-pane/glass-pane.directive.mjs +0 -120
- package/esm2022/lib/layout/grid-element/grid-element.component.mjs +0 -111
- package/esm2022/lib/layout/main-area-layout/main-area-layout.component.mjs +0 -97
- package/esm2022/lib/layout/migration/model/workbench-layout-migration-v2.model.mjs +0 -11
- package/esm2022/lib/layout/migration/model/workbench-layout-migration-v3.model.mjs +0 -11
- package/esm2022/lib/layout/migration/model/workbench-layout-migration-v4.model.mjs +0 -11
- package/esm2022/lib/layout/migration/model/workbench-layout-migration-v5.model.mjs +0 -11
- package/esm2022/lib/layout/migration/workbench-layout-migration-v3.service.mjs +0 -117
- package/esm2022/lib/layout/migration/workbench-layout-migration-v4.service.mjs +0 -57
- package/esm2022/lib/layout/migration/workbench-layout-migration-v5.service.mjs +0 -67
- package/esm2022/lib/layout/public_api.mjs +0 -12
- package/esm2022/lib/layout/stringifier.mjs +0 -70
- package/esm2022/lib/layout/workbench-layout.component.mjs +0 -90
- package/esm2022/lib/layout/workbench-layout.factory.mjs +0 -24
- package/esm2022/lib/layout/workbench-layout.mjs +0 -16
- package/esm2022/lib/layout/workbench-layout.model.mjs +0 -62
- package/esm2022/lib/layout/workbench-layout.service.mjs +0 -68
- package/esm2022/lib/layout/workbench-layouts.util.mjs +0 -58
- package/esm2022/lib/layout/workench-layout-serializer.service.mjs +0 -109
- package/esm2022/lib/layout//311/265workbench-layout.factory.mjs +0 -54
- package/esm2022/lib/layout//311/265workbench-layout.mjs +0 -876
- package/esm2022/lib/logging/console-appender.service.mjs +0 -46
- package/esm2022/lib/logging/index.mjs +0 -15
- package/esm2022/lib/logging/logger-names.mjs +0 -32
- package/esm2022/lib/logging/logger.mjs +0 -36
- package/esm2022/lib/logging/logging-support.mjs +0 -26
- package/esm2022/lib/logging/logging.model.mjs +0 -45
- package/esm2022/lib/logging/public_api.mjs +0 -12
- package/esm2022/lib/logging//311/265logger.mjs +0 -73
- package/esm2022/lib/message-box/message-box-footer/message-box-footer.component.mjs +0 -69
- package/esm2022/lib/message-box/message-box-header/message-box-header.component.mjs +0 -28
- package/esm2022/lib/message-box/public_api.mjs +0 -11
- package/esm2022/lib/message-box/workbench-message-box.component.mjs +0 -102
- package/esm2022/lib/message-box/workbench-message-box.options.mjs +0 -2
- package/esm2022/lib/message-box/workbench-message-box.service.mjs +0 -39
- package/esm2022/lib/message-box//311/265workbench-message-box.service.mjs +0 -45
- package/esm2022/lib/microfrontend-platform/common/microfrontend.util.mjs +0 -71
- package/esm2022/lib/microfrontend-platform/initialization/microfrontend-platform-initializer.service.mjs +0 -126
- package/esm2022/lib/microfrontend-platform/initialization/ng-zone-observable-decorator.mjs +0 -36
- package/esm2022/lib/microfrontend-platform/initialization/workbench-host-manifest-interceptor.service.mjs +0 -84
- package/esm2022/lib/microfrontend-platform/manifest-object-cache.service.mjs +0 -63
- package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog-capability-validator.interceptor.mjs +0 -54
- package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog-intent-handler.interceptor.mjs +0 -85
- package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog.component.mjs +0 -140
- package/esm2022/lib/microfrontend-platform/microfrontend-host-dialog/microfrontend-host-dialog.component.mjs +0 -133
- package/esm2022/lib/microfrontend-platform/microfrontend-host-message-box/microfrontend-host-message-box.component.mjs +0 -113
- package/esm2022/lib/microfrontend-platform/microfrontend-host-message-box/text-message/text-message.component.mjs +0 -43
- package/esm2022/lib/microfrontend-platform/microfrontend-host-popup/microfrontend-host-popup.component.mjs +0 -101
- package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-capability-validator.interceptor.mjs +0 -35
- package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-intent-handler.interceptor.mjs +0 -88
- package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-legacy-intent-translator.interceptor.mjs +0 -32
- package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box.component.mjs +0 -121
- package/esm2022/lib/microfrontend-platform/microfrontend-notification/microfrontend-notification-intent-handler.service.mjs +0 -45
- package/esm2022/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-capability-validator.interceptor.mjs +0 -39
- package/esm2022/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-installer.service.mjs +0 -120
- package/esm2022/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-intent-handler.interceptor.mjs +0 -55
- package/esm2022/lib/microfrontend-platform/microfrontend-perspective/workbench-perspective-data.mjs +0 -19
- package/esm2022/lib/microfrontend-platform/microfrontend-platform-config-loader.mjs +0 -13
- package/esm2022/lib/microfrontend-platform/microfrontend-platform.config.mjs +0 -11
- package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-capability-validator.interceptor.mjs +0 -31
- package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-intent-handler.interceptor.mjs +0 -132
- package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup.component.mjs +0 -115
- package/esm2022/lib/microfrontend-platform/microfrontend-splash/microfrontend-splash.component.mjs +0 -21
- package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-view-command-handler.service.mjs +0 -112
- package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-view.component.mjs +0 -313
- package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-workbench-view.model.mjs +0 -23
- package/esm2022/lib/microfrontend-platform/public_api.mjs +0 -13
- package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-capability-validator.interceptor.mjs +0 -31
- package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-intent-handler.interceptor.mjs +0 -127
- package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-routes.mjs +0 -125
- package/esm2022/lib/microfrontend-platform/stable-capability-id-assigner.interceptor.mjs +0 -32
- package/esm2022/lib/microfrontend-platform/workbench-microfrontend-support.mjs +0 -191
- package/esm2022/lib/migration/workbench-migration.mjs +0 -11
- package/esm2022/lib/migration/workbench-migrator.mjs +0 -38
- package/esm2022/lib/notification/notification-css-classes.pipe.mjs +0 -24
- package/esm2022/lib/notification/notification-list.component.mjs +0 -51
- package/esm2022/lib/notification/notification.component.mjs +0 -109
- package/esm2022/lib/notification/notification.config.mjs +0 -11
- package/esm2022/lib/notification/notification.mjs +0 -19
- package/esm2022/lib/notification/notification.service.mjs +0 -134
- package/esm2022/lib/notification/public_api.mjs +0 -12
- package/esm2022/lib/notification/text-notification.component.mjs +0 -23
- package/esm2022/lib/notification//311/265notification.mjs +0 -42
- package/esm2022/lib/page-not-found/page-not-found.component.mjs +0 -26
- package/esm2022/lib/part/part-action-bar/part-action-bar.component.mjs +0 -31
- package/esm2022/lib/part/part-action-bar/part-action.directive.mjs +0 -77
- package/esm2022/lib/part/part-bar/part-bar.component.mjs +0 -444
- package/esm2022/lib/part/part-portal.pipe.mjs +0 -35
- package/esm2022/lib/part/part.component.mjs +0 -135
- package/esm2022/lib/part/public_api.mjs +0 -13
- package/esm2022/lib/part/view-context-menu/accelerator-format.pipe.mjs +0 -31
- package/esm2022/lib/part/view-context-menu/text.component.mjs +0 -38
- package/esm2022/lib/part/view-context-menu/view-menu.component.mjs +0 -89
- package/esm2022/lib/part/view-context-menu/view-menu.directive.mjs +0 -76
- package/esm2022/lib/part/view-context-menu/view-menu.service.mjs +0 -340
- package/esm2022/lib/part/view-list/view-list.component.mjs +0 -117
- package/esm2022/lib/part/view-list-button/view-list-button.component.mjs +0 -82
- package/esm2022/lib/part/view-list-item/view-list-item.component.mjs +0 -60
- package/esm2022/lib/part/view-tab/view-tab.component.mjs +0 -218
- package/esm2022/lib/part/view-tab-content/view-tab-content.component.mjs +0 -29
- package/esm2022/lib/part/view-tab-drag-image/view-tab-drag-image.component.mjs +0 -81
- package/esm2022/lib/part/workbench-part-action.registry.mjs +0 -23
- package/esm2022/lib/part/workbench-part.model.mjs +0 -19
- package/esm2022/lib/part/workbench-part.registry.mjs +0 -23
- package/esm2022/lib/part//311/265workbench-part.model.mjs +0 -146
- package/esm2022/lib/perspective/migration/model/workbench-perspective-migration-v1.model.mjs +0 -11
- package/esm2022/lib/perspective/migration/model/workbench-perspective-migration-v2.model.mjs +0 -11
- package/esm2022/lib/perspective/migration/workbench-perspective-migration-v2.service.mjs +0 -57
- package/esm2022/lib/perspective/public_api.mjs +0 -11
- package/esm2022/lib/perspective/workbench-grid-merger.service.mjs +0 -39
- package/esm2022/lib/perspective/workbench-perspective-storage.service.mjs +0 -72
- package/esm2022/lib/perspective/workbench-perspective-view-conflict-resolver.service.mjs +0 -50
- package/esm2022/lib/perspective/workbench-perspective.model.mjs +0 -2
- package/esm2022/lib/perspective/workbench-perspective.registry.mjs +0 -23
- package/esm2022/lib/perspective/workbench-perspective.service.mjs +0 -180
- package/esm2022/lib/perspective/workench-perspective-serializer.service.mjs +0 -62
- package/esm2022/lib/perspective//311/265workbench-perspective.model.mjs +0 -210
- package/esm2022/lib/popup/popup.component.mjs +0 -124
- package/esm2022/lib/popup/popup.config.mjs +0 -100
- package/esm2022/lib/popup/popup.origin.mjs +0 -11
- package/esm2022/lib/popup/popup.service.mjs +0 -339
- package/esm2022/lib/popup/public_api.mjs +0 -12
- package/esm2022/lib/portal/wb-component-portal.mjs +0 -130
- package/esm2022/lib/portal/workbench-portal-outlet.directive.mjs +0 -68
- package/esm2022/lib/public_api.mjs +0 -32
- package/esm2022/lib/registry/workbench-object-registry.mjs +0 -104
- package/esm2022/lib/routing/empty-outlet/empty-outlet.component.mjs +0 -31
- package/esm2022/lib/routing/public_api.mjs +0 -14
- package/esm2022/lib/routing/routing.model.mjs +0 -11
- package/esm2022/lib/routing/routing.util.mjs +0 -215
- package/esm2022/lib/routing/url-segment-matcher.mjs +0 -46
- package/esm2022/lib/routing/workbench-auxiliary-route-installer.service.mjs +0 -110
- package/esm2022/lib/routing/workbench-dialog-differ.mjs +0 -51
- package/esm2022/lib/routing/workbench-layout-differ.mjs +0 -61
- package/esm2022/lib/routing/workbench-message-box-differ.mjs +0 -51
- package/esm2022/lib/routing/workbench-navigational-states.mjs +0 -33
- package/esm2022/lib/routing/workbench-popup-differ.mjs +0 -51
- package/esm2022/lib/routing/workbench-route-data.mjs +0 -39
- package/esm2022/lib/routing/workbench-route-guards.mjs +0 -57
- package/esm2022/lib/routing/workbench-router-link.directive.mjs +0 -124
- package/esm2022/lib/routing/workbench-router.service.mjs +0 -19
- package/esm2022/lib/routing/workbench-url-observer.service.mjs +0 -305
- package/esm2022/lib/routing/workbench-view-outlet-differ.mjs +0 -58
- package/esm2022/lib/routing//311/265location.mjs +0 -70
- package/esm2022/lib/routing//311/265workbench-router.service.mjs +0 -359
- package/esm2022/lib/startup/public_api.mjs +0 -12
- package/esm2022/lib/startup/splash/splash.component.mjs +0 -24
- package/esm2022/lib/startup/workbench-initializer.mjs +0 -96
- package/esm2022/lib/startup/workbench-launcher.service.mjs +0 -173
- package/esm2022/lib/storage/public_api.mjs +0 -11
- package/esm2022/lib/storage/workbench-storage.mjs +0 -37
- package/esm2022/lib/testing/public_api.mjs +0 -12
- package/esm2022/lib/testing/workbench-testing.module.mjs +0 -49
- package/esm2022/lib/testing/workbench.provider.mjs +0 -60
- package/esm2022/lib/theme/workbench-theme-switcher.service.mjs +0 -72
- package/esm2022/lib/view/public_api.mjs +0 -11
- package/esm2022/lib/view/view-context-provider.mjs +0 -31
- package/esm2022/lib/view/view-move-handler.service.mjs +0 -145
- package/esm2022/lib/view/view-portal.pipe.mjs +0 -33
- package/esm2022/lib/view/view.component.mjs +0 -128
- package/esm2022/lib/view/workbench-view.model.mjs +0 -12
- package/esm2022/lib/view/workbench-view.registry.mjs +0 -23
- package/esm2022/lib/view//311/265workbench-view.model.mjs +0 -375
- package/esm2022/lib/view-dnd/grid-drop-targets.util.mjs +0 -49
- package/esm2022/lib/view-dnd/requires-drop-zone.pipe.mjs +0 -58
- package/esm2022/lib/view-dnd/view-drag.service.mjs +0 -213
- package/esm2022/lib/view-dnd/view-drop-placeholder-renderer.service.mjs +0 -89
- package/esm2022/lib/view-dnd/view-drop-zone.directive.mjs +0 -183
- package/esm2022/lib/view-dnd/view-tab-drag-image-renderer.service.mjs +0 -224
- package/esm2022/lib/workbench-config.mjs +0 -15
- package/esm2022/lib/workbench-id.mjs +0 -21
- package/esm2022/lib/workbench.component.mjs +0 -146
- package/esm2022/lib/workbench.constants.mjs +0 -41
- package/esm2022/lib/workbench.model.mjs +0 -11
- package/esm2022/lib/workbench.module.mjs +0 -101
- package/esm2022/lib/workbench.provider.mjs +0 -111
- package/esm2022/lib/workbench.service.mjs +0 -29
- package/esm2022/lib//311/265workbench.service.mjs +0 -102
- package/esm2022/public-api.mjs +0 -14
- package/esm2022/scion-workbench.mjs +0 -5
- package/lib/common/animation-frame.observable.d.ts +0 -10
- package/lib/common/map-coerce.pipe.d.ts +0 -12
- package/lib/part/part-action-bar/part-action-bar.component.d.ts +0 -11
- package/lib/part/view-context-menu/text.component.d.ts +0 -11
- package/lib/part/view-context-menu/view-menu.directive.d.ts +0 -55
- package/lib/routing/workbench-dialog-differ.d.ts +0 -25
- package/lib/routing/workbench-message-box-differ.d.ts +0 -25
- package/lib/routing/workbench-popup-differ.d.ts +0 -25
- package/lib/routing/workbench-view-outlet-differ.d.ts +0 -32
- package/lib/testing/public_api.d.ts +0 -2
- package/lib/testing/workbench-testing.module.d.ts +0 -40
- package/lib/testing/workbench.provider.d.ts +0 -31
- package/lib/workbench.module.d.ts +0 -65
|
@@ -1,340 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2018-2022 Swiss Federal Railways
|
|
3
|
-
*
|
|
4
|
-
* This program and the accompanying materials are made
|
|
5
|
-
* available under the terms of the Eclipse Public License 2.0
|
|
6
|
-
* which is available at https://www.eclipse.org/legal/epl-2.0/
|
|
7
|
-
*
|
|
8
|
-
* SPDX-License-Identifier: EPL-2.0
|
|
9
|
-
*/
|
|
10
|
-
import { inject, Injectable, Injector, NgZone, runInInjectionContext } from '@angular/core';
|
|
11
|
-
import { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';
|
|
12
|
-
import { ComponentPortal } from '@angular/cdk/portal';
|
|
13
|
-
import { ViewMenuComponent } from './view-menu.component';
|
|
14
|
-
import { WORKBENCH_VIEW_REGISTRY } from '../../view/workbench-view.registry';
|
|
15
|
-
import { filter, map, switchMap, takeUntil } from 'rxjs/operators';
|
|
16
|
-
import { firstValueFrom, fromEvent, Observable, Subject } from 'rxjs';
|
|
17
|
-
import { coerceElement } from '@angular/cdk/coercion';
|
|
18
|
-
import { TEXT, TextComponent } from '../view-context-menu/text.component';
|
|
19
|
-
import { WorkbenchConfig } from '../../workbench-config';
|
|
20
|
-
import { WorkbenchService } from '../../workbench.service';
|
|
21
|
-
import { filterArray, observeIn } from '@scion/toolkit/operators';
|
|
22
|
-
import { provideViewContext } from '../../view/view-context-provider';
|
|
23
|
-
import { Arrays } from '@scion/toolkit/util';
|
|
24
|
-
import * as i0 from "@angular/core";
|
|
25
|
-
/**
|
|
26
|
-
* Shows menu items of a {@link WorkbenchView} in a menu.
|
|
27
|
-
*/
|
|
28
|
-
export class ViewMenuService {
|
|
29
|
-
static { this.TOP_LEFT = { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'top' }; }
|
|
30
|
-
static { this.TOP_RIGHT = { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'top' }; }
|
|
31
|
-
static { this.BOTTOM_LEFT = { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' }; }
|
|
32
|
-
static { this.BOTTOM_RIGHT = { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'bottom' }; }
|
|
33
|
-
constructor() {
|
|
34
|
-
this._overlay = inject(Overlay);
|
|
35
|
-
this._injector = inject(Injector);
|
|
36
|
-
this._zone = inject(NgZone);
|
|
37
|
-
this._viewRegistry = inject(WORKBENCH_VIEW_REGISTRY);
|
|
38
|
-
this._workbenchService = inject(WorkbenchService);
|
|
39
|
-
this._workbenchConfig = inject(WorkbenchConfig);
|
|
40
|
-
// Registers built-in menu items added to the context menu of every view tab.
|
|
41
|
-
this.registerCloseMenuItem();
|
|
42
|
-
this.registerCloseOtherTabsMenuItem();
|
|
43
|
-
this.registerCloseAllTabsMenuItem();
|
|
44
|
-
this.registerCloseRightTabsMenuItem();
|
|
45
|
-
this.registerCloseLeftTabsMenuItem();
|
|
46
|
-
this.registerMoveRightMenuItem();
|
|
47
|
-
this.registerMoveLeftMenuItem();
|
|
48
|
-
this.registerMoveUpMenuItem();
|
|
49
|
-
this.registerMoveDownMenuItem();
|
|
50
|
-
this.registerMoveToNewWindowMenuItem();
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Shows a menu with menu items registered in given {@link WorkbenchView}.
|
|
54
|
-
*
|
|
55
|
-
* @see {@link WorkbenchView.registerViewMenuItem}
|
|
56
|
-
*/
|
|
57
|
-
async showMenu(location, viewId) {
|
|
58
|
-
const view = this._viewRegistry.get(viewId);
|
|
59
|
-
const menuItems = await firstValueFrom(view.menuItems$);
|
|
60
|
-
// Do not show the menu if there are no menu items registered.
|
|
61
|
-
if (menuItems.length === 0) {
|
|
62
|
-
return false;
|
|
63
|
-
}
|
|
64
|
-
// Prepare and display the menu overlay.
|
|
65
|
-
const config = new OverlayConfig({
|
|
66
|
-
scrollStrategy: this._overlay.scrollStrategies.noop(),
|
|
67
|
-
disposeOnNavigation: true,
|
|
68
|
-
positionStrategy: this._overlay.position()
|
|
69
|
-
.flexibleConnectedTo(location)
|
|
70
|
-
.withFlexibleDimensions(false)
|
|
71
|
-
.withPositions([ViewMenuService.TOP_LEFT, ViewMenuService.TOP_RIGHT, ViewMenuService.BOTTOM_LEFT, ViewMenuService.BOTTOM_RIGHT]),
|
|
72
|
-
});
|
|
73
|
-
const overlayRef = this._overlay.create(config);
|
|
74
|
-
const injector = Injector.create({
|
|
75
|
-
parent: this._injector,
|
|
76
|
-
providers: [
|
|
77
|
-
{ provide: OverlayRef, useValue: overlayRef },
|
|
78
|
-
provideViewContext(view),
|
|
79
|
-
],
|
|
80
|
-
});
|
|
81
|
-
overlayRef.attach(new ComponentPortal(ViewMenuComponent, null, injector));
|
|
82
|
-
return true;
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Upon subscription, installs keyboard accelerators of the menu items registered in {@link WorkbenchView}.
|
|
86
|
-
*/
|
|
87
|
-
installMenuItemAccelerators$(target, view) {
|
|
88
|
-
return new Observable(() => {
|
|
89
|
-
const unsubscribe$ = new Subject();
|
|
90
|
-
view.menuItems$
|
|
91
|
-
.pipe(observeIn(fn => this._zone.runOutsideAngular(fn)),
|
|
92
|
-
// Skip menu items which have no accelerator configured.
|
|
93
|
-
filterArray((menuItem) => !!menuItem.accelerator?.length), filter(menuItems => menuItems.length > 0),
|
|
94
|
-
// Subscribe for keyboard events.
|
|
95
|
-
switchMap((menuItems) => {
|
|
96
|
-
return fromEvent(coerceElement(target), 'keydown').pipe(map(event => ({ event, menuItems })));
|
|
97
|
-
}), map(({ event, menuItems }) => ({
|
|
98
|
-
event,
|
|
99
|
-
menuItems: menuItems
|
|
100
|
-
.filter(menuItem => !menuItem.isDisabled?.())
|
|
101
|
-
.filter(menuItem => {
|
|
102
|
-
const accelerator = menuItem.accelerator;
|
|
103
|
-
const key = accelerator.at(-1);
|
|
104
|
-
const modifierKeys = accelerator.slice(0, -1);
|
|
105
|
-
// Compare key.
|
|
106
|
-
if (event.key?.toLowerCase() !== key.toLowerCase()) {
|
|
107
|
-
return false;
|
|
108
|
-
}
|
|
109
|
-
// Compare modifiers.
|
|
110
|
-
if (!Arrays.isEqual(modifierKeys, getModifierState(event), { exactOrder: false })) {
|
|
111
|
-
return false;
|
|
112
|
-
}
|
|
113
|
-
return true;
|
|
114
|
-
}),
|
|
115
|
-
})), filter(({ menuItems }) => menuItems.length > 0), observeIn(fn => this._zone.run(fn)), takeUntil(unsubscribe$))
|
|
116
|
-
.subscribe(({ event, menuItems }) => {
|
|
117
|
-
event.preventDefault();
|
|
118
|
-
event.stopPropagation();
|
|
119
|
-
runInInjectionContext(this._injector, () => {
|
|
120
|
-
menuItems.forEach(menuItem => menuItem.onAction());
|
|
121
|
-
});
|
|
122
|
-
});
|
|
123
|
-
return () => unsubscribe$.next();
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
registerCloseMenuItem() {
|
|
127
|
-
const defaults = { visible: true, text: 'Close', group: 'close', accelerator: ['ctrl', 'k'], cssClass: 'e2e-close' };
|
|
128
|
-
const appConfig = this._workbenchConfig.viewMenuItems?.close;
|
|
129
|
-
const config = { ...defaults, ...appConfig };
|
|
130
|
-
config.visible && this._workbenchService.registerViewMenuItem((view) => {
|
|
131
|
-
const injector = Injector.create({
|
|
132
|
-
parent: Injector.NULL,
|
|
133
|
-
providers: [{ provide: TEXT, useValue: config.text }],
|
|
134
|
-
});
|
|
135
|
-
return ({
|
|
136
|
-
portal: new ComponentPortal(TextComponent, null, injector),
|
|
137
|
-
accelerator: config.accelerator,
|
|
138
|
-
group: config.group,
|
|
139
|
-
cssClass: config.cssClass,
|
|
140
|
-
isDisabled: () => !view.closable(),
|
|
141
|
-
onAction: () => void view.close().then(),
|
|
142
|
-
});
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
registerCloseOtherTabsMenuItem() {
|
|
146
|
-
const defaults = { visible: true, text: 'Close other tabs', group: 'close', accelerator: ['ctrl', 'shift', 'k'], cssClass: ' e2e-close-other-tabs' };
|
|
147
|
-
const appConfig = this._workbenchConfig.viewMenuItems?.closeOthers;
|
|
148
|
-
const config = { ...defaults, ...appConfig };
|
|
149
|
-
config.visible && this._workbenchService.registerViewMenuItem((view) => {
|
|
150
|
-
const injector = Injector.create({
|
|
151
|
-
parent: Injector.NULL,
|
|
152
|
-
providers: [{ provide: TEXT, useValue: config.text }],
|
|
153
|
-
});
|
|
154
|
-
return ({
|
|
155
|
-
portal: new ComponentPortal(TextComponent, null, injector),
|
|
156
|
-
accelerator: config.accelerator,
|
|
157
|
-
group: config.group,
|
|
158
|
-
cssClass: config.cssClass,
|
|
159
|
-
isDisabled: () => view.first() && view.last(),
|
|
160
|
-
onAction: () => void view.close('other-views').then(),
|
|
161
|
-
});
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
registerCloseAllTabsMenuItem() {
|
|
165
|
-
const defaults = { visible: true, text: 'Close all tabs', group: 'close', accelerator: ['ctrl', 'shift', 'alt', 'k'], cssClass: 'e2e-close-all-tabs' };
|
|
166
|
-
const appConfig = this._workbenchConfig.viewMenuItems?.closeAll;
|
|
167
|
-
const config = { ...defaults, ...appConfig };
|
|
168
|
-
config.visible && this._workbenchService.registerViewMenuItem((view) => {
|
|
169
|
-
const injector = Injector.create({
|
|
170
|
-
parent: Injector.NULL,
|
|
171
|
-
providers: [{ provide: TEXT, useValue: config.text }],
|
|
172
|
-
});
|
|
173
|
-
return ({
|
|
174
|
-
portal: new ComponentPortal(TextComponent, null, injector),
|
|
175
|
-
accelerator: config.accelerator,
|
|
176
|
-
group: config.group,
|
|
177
|
-
cssClass: config.cssClass,
|
|
178
|
-
onAction: () => void view.close('all-views').then(),
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
registerCloseRightTabsMenuItem() {
|
|
183
|
-
const defaults = { visible: true, text: 'Close tabs to the right', group: 'close', cssClass: 'e2e-close-right-tabs' };
|
|
184
|
-
const appConfig = this._workbenchConfig.viewMenuItems?.closeToTheRight;
|
|
185
|
-
const config = { ...defaults, ...appConfig };
|
|
186
|
-
config.visible && this._workbenchService.registerViewMenuItem((view) => {
|
|
187
|
-
const injector = Injector.create({
|
|
188
|
-
parent: Injector.NULL,
|
|
189
|
-
providers: [{ provide: TEXT, useValue: config.text }],
|
|
190
|
-
});
|
|
191
|
-
return {
|
|
192
|
-
portal: new ComponentPortal(TextComponent, null, injector),
|
|
193
|
-
accelerator: config.accelerator,
|
|
194
|
-
group: config.group,
|
|
195
|
-
cssClass: config.cssClass,
|
|
196
|
-
isDisabled: () => view.last(),
|
|
197
|
-
onAction: () => void view.close('views-to-the-right').then(),
|
|
198
|
-
};
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
registerCloseLeftTabsMenuItem() {
|
|
202
|
-
const defaults = { visible: true, text: 'Close tabs to the left', group: 'close', cssClass: 'e2e-close-left-tabs' };
|
|
203
|
-
const appConfig = this._workbenchConfig.viewMenuItems?.closeToTheLeft;
|
|
204
|
-
const config = { ...defaults, ...appConfig };
|
|
205
|
-
config.visible && this._workbenchService.registerViewMenuItem((view) => {
|
|
206
|
-
const injector = Injector.create({
|
|
207
|
-
parent: Injector.NULL,
|
|
208
|
-
providers: [{ provide: TEXT, useValue: config.text }],
|
|
209
|
-
});
|
|
210
|
-
return {
|
|
211
|
-
portal: new ComponentPortal(TextComponent, null, injector),
|
|
212
|
-
accelerator: config.accelerator,
|
|
213
|
-
group: config.group,
|
|
214
|
-
cssClass: config.cssClass,
|
|
215
|
-
isDisabled: () => view.first(),
|
|
216
|
-
onAction: () => void view.close('views-to-the-left').then(),
|
|
217
|
-
};
|
|
218
|
-
});
|
|
219
|
-
}
|
|
220
|
-
registerMoveRightMenuItem() {
|
|
221
|
-
const defaults = { visible: true, text: 'Move right', group: 'move', accelerator: ['ctrl', 'alt', 'end'], cssClass: 'e2e-move-right' };
|
|
222
|
-
const appConfig = this._workbenchConfig.viewMenuItems?.moveRight;
|
|
223
|
-
const config = { ...defaults, ...appConfig };
|
|
224
|
-
config.visible && this._workbenchService.registerViewMenuItem((view) => {
|
|
225
|
-
const injector = Injector.create({
|
|
226
|
-
parent: Injector.NULL,
|
|
227
|
-
providers: [{ provide: TEXT, useValue: config.text }],
|
|
228
|
-
});
|
|
229
|
-
return {
|
|
230
|
-
portal: new ComponentPortal(TextComponent, null, injector),
|
|
231
|
-
accelerator: config.accelerator,
|
|
232
|
-
group: config.group,
|
|
233
|
-
cssClass: config.cssClass,
|
|
234
|
-
isDisabled: () => view.first() && view.last(),
|
|
235
|
-
onAction: () => view.move(view.part().id, { region: 'east' }),
|
|
236
|
-
};
|
|
237
|
-
});
|
|
238
|
-
}
|
|
239
|
-
registerMoveLeftMenuItem() {
|
|
240
|
-
const defaults = { visible: true, text: 'Move left', group: 'move', cssClass: 'e2e-move-left' };
|
|
241
|
-
const appConfig = this._workbenchConfig.viewMenuItems?.moveLeft;
|
|
242
|
-
const config = { ...defaults, ...appConfig };
|
|
243
|
-
config.visible && this._workbenchService.registerViewMenuItem((view) => {
|
|
244
|
-
const injector = Injector.create({
|
|
245
|
-
parent: Injector.NULL,
|
|
246
|
-
providers: [{ provide: TEXT, useValue: config.text }],
|
|
247
|
-
});
|
|
248
|
-
return {
|
|
249
|
-
portal: new ComponentPortal(TextComponent, null, injector),
|
|
250
|
-
accelerator: config.accelerator,
|
|
251
|
-
group: config.group,
|
|
252
|
-
cssClass: config.cssClass,
|
|
253
|
-
isDisabled: () => view.first() && view.last(),
|
|
254
|
-
onAction: () => view.move(view.part().id, { region: 'west' }),
|
|
255
|
-
};
|
|
256
|
-
});
|
|
257
|
-
}
|
|
258
|
-
registerMoveUpMenuItem() {
|
|
259
|
-
const defaults = { visible: true, text: 'Move up', group: 'move', cssClass: 'e2e-move-up' };
|
|
260
|
-
const appConfig = this._workbenchConfig.viewMenuItems?.moveUp;
|
|
261
|
-
const config = { ...defaults, ...appConfig };
|
|
262
|
-
config.visible && this._workbenchService.registerViewMenuItem((view) => {
|
|
263
|
-
const injector = Injector.create({
|
|
264
|
-
parent: Injector.NULL,
|
|
265
|
-
providers: [{ provide: TEXT, useValue: config.text }],
|
|
266
|
-
});
|
|
267
|
-
return {
|
|
268
|
-
portal: new ComponentPortal(TextComponent, null, injector),
|
|
269
|
-
accelerator: config.accelerator,
|
|
270
|
-
group: config.group,
|
|
271
|
-
cssClass: config.cssClass,
|
|
272
|
-
isDisabled: () => view.first() && view.last(),
|
|
273
|
-
onAction: () => view.move(view.part().id, { region: 'north' }),
|
|
274
|
-
};
|
|
275
|
-
});
|
|
276
|
-
}
|
|
277
|
-
registerMoveDownMenuItem() {
|
|
278
|
-
const defaults = { visible: true, text: 'Move down', group: 'move', cssClass: 'e2e-move-down' };
|
|
279
|
-
const appConfig = this._workbenchConfig.viewMenuItems?.moveDown;
|
|
280
|
-
const config = { ...defaults, ...appConfig };
|
|
281
|
-
config.visible && this._workbenchService.registerViewMenuItem((view) => {
|
|
282
|
-
const injector = Injector.create({
|
|
283
|
-
parent: Injector.NULL,
|
|
284
|
-
providers: [{ provide: TEXT, useValue: config.text }],
|
|
285
|
-
});
|
|
286
|
-
return {
|
|
287
|
-
portal: new ComponentPortal(TextComponent, null, injector),
|
|
288
|
-
accelerator: config.accelerator,
|
|
289
|
-
group: config.group,
|
|
290
|
-
cssClass: config.cssClass,
|
|
291
|
-
isDisabled: () => view.first() && view.last(),
|
|
292
|
-
onAction: () => view.move(view.part().id, { region: 'south' }),
|
|
293
|
-
};
|
|
294
|
-
});
|
|
295
|
-
}
|
|
296
|
-
registerMoveToNewWindowMenuItem() {
|
|
297
|
-
const defaults = { visible: true, text: 'Move to new window', group: 'open', cssClass: 'e2e-move-to-new-window' };
|
|
298
|
-
const appConfig = this._workbenchConfig.viewMenuItems?.moveToNewWindow;
|
|
299
|
-
const config = { ...defaults, ...appConfig };
|
|
300
|
-
config.visible && this._workbenchService.registerViewMenuItem((view) => {
|
|
301
|
-
const injector = Injector.create({
|
|
302
|
-
parent: Injector.NULL,
|
|
303
|
-
providers: [{ provide: TEXT, useValue: config.text }],
|
|
304
|
-
});
|
|
305
|
-
return {
|
|
306
|
-
portal: new ComponentPortal(TextComponent, null, injector),
|
|
307
|
-
accelerator: config.accelerator,
|
|
308
|
-
group: config.group,
|
|
309
|
-
cssClass: config.cssClass,
|
|
310
|
-
onAction: () => view.move('new-window'),
|
|
311
|
-
};
|
|
312
|
-
});
|
|
313
|
-
}
|
|
314
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewMenuService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
315
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewMenuService, providedIn: 'root' }); }
|
|
316
|
-
}
|
|
317
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewMenuService, decorators: [{
|
|
318
|
-
type: Injectable,
|
|
319
|
-
args: [{ providedIn: 'root' }]
|
|
320
|
-
}], ctorParameters: () => [] });
|
|
321
|
-
/**
|
|
322
|
-
* Returns the pressed modifier keys (ctrl, shift, alt, meta) as array items.
|
|
323
|
-
*/
|
|
324
|
-
function getModifierState(event) {
|
|
325
|
-
const modifierState = [];
|
|
326
|
-
if (event.ctrlKey) {
|
|
327
|
-
modifierState.push('ctrl');
|
|
328
|
-
}
|
|
329
|
-
if (event.shiftKey) {
|
|
330
|
-
modifierState.push('shift');
|
|
331
|
-
}
|
|
332
|
-
if (event.altKey) {
|
|
333
|
-
modifierState.push('alt');
|
|
334
|
-
}
|
|
335
|
-
if (event.metaKey) {
|
|
336
|
-
modifierState.push('meta');
|
|
337
|
-
}
|
|
338
|
-
return modifierState;
|
|
339
|
-
}
|
|
340
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1tZW51LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9wYXJ0L3ZpZXctY29udGV4dC1tZW51L3ZpZXctbWVudS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFhLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQW9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDM0YsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXhELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUMsY0FBYyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNuRixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFDLElBQUksRUFBRSxhQUFhLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUN4RSxPQUFPLEVBQWlCLGVBQWUsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBQyxXQUFXLEVBQUUsU0FBUyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFHaEUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHFCQUFxQixDQUFDOztBQUUzQzs7R0FFRztBQUVILE1BQU0sT0FBTyxlQUFlO2FBRUYsYUFBUSxHQUFzQixFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUMsQUFBNUYsQ0FBNkY7YUFDckcsY0FBUyxHQUFzQixFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUMsQUFBMUYsQ0FBMkY7YUFDcEcsZ0JBQVcsR0FBc0IsRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFDLEFBQS9GLENBQWdHO2FBQzNHLGlCQUFZLEdBQXNCLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBQyxBQUE3RixDQUE4RjtJQVNsSTtRQVBpQixhQUFRLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLGNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsVUFBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QixrQkFBYSxHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ2hELHNCQUFpQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzdDLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUcxRCw2RUFBNkU7UUFDN0UsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQWUsRUFBRSxNQUFjO1FBQ25ELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLE1BQU0sU0FBUyxHQUFHLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV4RCw4REFBOEQ7UUFDOUQsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELHdDQUF3QztRQUN4QyxNQUFNLE1BQU0sR0FBRyxJQUFJLGFBQWEsQ0FBQztZQUMvQixjQUFjLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7WUFDckQsbUJBQW1CLEVBQUUsSUFBSTtZQUN6QixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtpQkFDdkMsbUJBQW1CLENBQUMsUUFBUSxDQUFDO2lCQUM3QixzQkFBc0IsQ0FBQyxLQUFLLENBQUM7aUJBQzdCLGFBQWEsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNuSSxDQUFDLENBQUM7UUFFSCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoRCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQy9CLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUztZQUN0QixTQUFTLEVBQUU7Z0JBQ1QsRUFBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUM7Z0JBQzNDLGtCQUFrQixDQUFDLElBQUksQ0FBQzthQUN6QjtTQUNGLENBQUMsQ0FBQztRQUNILFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxlQUFlLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDMUUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSSw0QkFBNEIsQ0FBQyxNQUE2QyxFQUFFLElBQW9CO1FBQ3JHLE9BQU8sSUFBSSxVQUFVLENBQUMsR0FBa0IsRUFBRTtZQUN4QyxNQUFNLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1lBRXpDLElBQUksQ0FBQyxVQUFVO2lCQUNaLElBQUksQ0FDSCxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELHdEQUF3RDtZQUN4RCxXQUFXLENBQUMsQ0FBQyxRQUEyQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFDNUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDekMsaUNBQWlDO1lBQ2pDLFNBQVMsQ0FBQyxDQUFDLFNBQThCLEVBQXNFLEVBQUU7Z0JBQy9HLE9BQU8sU0FBUyxDQUFnQixhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0csQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsRUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzNCLEtBQUs7Z0JBQ0wsU0FBUyxFQUFFLFNBQVM7cUJBQ2pCLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7cUJBQzVDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDakIsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVksQ0FBQztvQkFDMUMsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBRSxDQUFDO29CQUNoQyxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUU5QyxlQUFlO29CQUNmLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxHQUFHLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQzt3QkFDbkQsT0FBTyxLQUFLLENBQUM7b0JBQ2YsQ0FBQztvQkFDRCxxQkFBcUI7b0JBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ2hGLE9BQU8sS0FBSyxDQUFDO29CQUNmLENBQUM7b0JBQ0QsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQyxDQUFDO2FBQ0wsQ0FBQyxDQUFDLEVBQ0gsTUFBTSxDQUFDLENBQUMsRUFBQyxTQUFTLEVBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFDN0MsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDbkMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUN4QjtpQkFDQSxTQUFTLENBQUMsQ0FBQyxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUMsRUFBRSxFQUFFO2dCQUNoQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDeEIscUJBQXFCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7b0JBQ3pDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDckQsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVMLE9BQU8sR0FBUyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixNQUFNLFFBQVEsR0FBbUIsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBQyxDQUFDO1FBQ25JLE1BQU0sU0FBUyxHQUErQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQztRQUN6RixNQUFNLE1BQU0sR0FBRyxFQUFDLEdBQUcsUUFBUSxFQUFFLEdBQUcsU0FBUyxFQUFDLENBQUM7UUFFM0MsTUFBTSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFtQixFQUFxQixFQUFFO1lBQ3ZHLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBQy9CLE1BQU0sRUFBRSxRQUFRLENBQUMsSUFBSTtnQkFDckIsU0FBUyxFQUFFLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFDLENBQUM7YUFDcEQsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDO2dCQUNOLE1BQU0sRUFBRSxJQUFJLGVBQWUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQztnQkFDMUQsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO2dCQUMvQixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7Z0JBQ25CLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtnQkFDekIsVUFBVSxFQUFFLEdBQVksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDM0MsUUFBUSxFQUFFLEdBQVMsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRTthQUMvQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyw4QkFBOEI7UUFDcEMsTUFBTSxRQUFRLEdBQW1CLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSx1QkFBdUIsRUFBQyxDQUFDO1FBQ25LLE1BQU0sU0FBUyxHQUErQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQztRQUMvRixNQUFNLE1BQU0sR0FBRyxFQUFDLEdBQUcsUUFBUSxFQUFFLEdBQUcsU0FBUyxFQUFDLENBQUM7UUFFM0MsTUFBTSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFtQixFQUFxQixFQUFFO1lBQ3ZHLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBQy9CLE1BQU0sRUFBRSxRQUFRLENBQUMsSUFBSTtnQkFDckIsU0FBUyxFQUFFLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFDLENBQUM7YUFDcEQsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDO2dCQUNOLE1BQU0sRUFBRSxJQUFJLGVBQWUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQztnQkFDMUQsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO2dCQUMvQixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7Z0JBQ25CLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtnQkFDekIsVUFBVSxFQUFFLEdBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUN0RCxRQUFRLEVBQUUsR0FBUyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksRUFBRTthQUM1RCxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyw0QkFBNEI7UUFDbEMsTUFBTSxRQUFRLEdBQW1CLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUMsQ0FBQztRQUNySyxNQUFNLFNBQVMsR0FBK0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUM7UUFDNUYsTUFBTSxNQUFNLEdBQUcsRUFBQyxHQUFHLFFBQVEsRUFBRSxHQUFHLFNBQVMsRUFBQyxDQUFDO1FBRTNDLE1BQU0sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBbUIsRUFBcUIsRUFBRTtZQUN2RyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO2dCQUMvQixNQUFNLEVBQUUsUUFBUSxDQUFDLElBQUk7Z0JBQ3JCLFNBQVMsRUFBRSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBQyxDQUFDO2FBQ3BELENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQztnQkFDTixNQUFNLEVBQUUsSUFBSSxlQUFlLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUM7Z0JBQzFELFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVztnQkFDL0IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2dCQUNuQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7Z0JBQ3pCLFFBQVEsRUFBRSxHQUFTLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxFQUFFO2FBQzFELENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLDhCQUE4QjtRQUNwQyxNQUFNLFFBQVEsR0FBbUIsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSx5QkFBeUIsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxzQkFBc0IsRUFBQyxDQUFDO1FBQ3BJLE1BQU0sU0FBUyxHQUErQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLGVBQWUsQ0FBQztRQUNuRyxNQUFNLE1BQU0sR0FBRyxFQUFDLEdBQUcsUUFBUSxFQUFFLEdBQUcsU0FBUyxFQUFDLENBQUM7UUFFM0MsTUFBTSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFtQixFQUFxQixFQUFFO1lBQ3ZHLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBQy9CLE1BQU0sRUFBRSxRQUFRLENBQUMsSUFBSTtnQkFDckIsU0FBUyxFQUFFLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFDLENBQUM7YUFDcEQsQ0FBQyxDQUFDO1lBQ0gsT0FBTztnQkFDTCxNQUFNLEVBQUUsSUFBSSxlQUFlLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUM7Z0JBQzFELFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVztnQkFDL0IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2dCQUNuQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7Z0JBQ3pCLFVBQVUsRUFBRSxHQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUN0QyxRQUFRLEVBQUUsR0FBUyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxFQUFFO2FBQ25FLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyw2QkFBNkI7UUFDbkMsTUFBTSxRQUFRLEdBQW1CLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsd0JBQXdCLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUMsQ0FBQztRQUNsSSxNQUFNLFNBQVMsR0FBK0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxjQUFjLENBQUM7UUFDbEcsTUFBTSxNQUFNLEdBQUcsRUFBQyxHQUFHLFFBQVEsRUFBRSxHQUFHLFNBQVMsRUFBQyxDQUFDO1FBRTNDLE1BQU0sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBbUIsRUFBcUIsRUFBRTtZQUN2RyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO2dCQUMvQixNQUFNLEVBQUUsUUFBUSxDQUFDLElBQUk7Z0JBQ3JCLFNBQVMsRUFBRSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBQyxDQUFDO2FBQ3BELENBQUMsQ0FBQztZQUNILE9BQU87Z0JBQ0wsTUFBTSxFQUFFLElBQUksZUFBZSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDO2dCQUMxRCxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7Z0JBQy9CLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztnQkFDbkIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO2dCQUN6QixVQUFVLEVBQUUsR0FBWSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDdkMsUUFBUSxFQUFFLEdBQVMsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLElBQUksRUFBRTthQUNsRSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8seUJBQXlCO1FBQy9CLE1BQU0sUUFBUSxHQUFtQixFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFDLENBQUM7UUFDckosTUFBTSxTQUFTLEdBQStCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDO1FBQzdGLE1BQU0sTUFBTSxHQUFHLEVBQUMsR0FBRyxRQUFRLEVBQUUsR0FBRyxTQUFTLEVBQUMsQ0FBQztRQUUzQyxNQUFNLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLElBQW1CLEVBQXFCLEVBQUU7WUFDdkcsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDL0IsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJO2dCQUNyQixTQUFTLEVBQUUsQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUMsQ0FBQzthQUNwRCxDQUFDLENBQUM7WUFDSCxPQUFPO2dCQUNMLE1BQU0sRUFBRSxJQUFJLGVBQWUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQztnQkFDMUQsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO2dCQUMvQixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7Z0JBQ25CLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtnQkFDekIsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUM3QyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUMsTUFBTSxFQUFFLE1BQU0sRUFBQyxDQUFDO2FBQzVELENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx3QkFBd0I7UUFDOUIsTUFBTSxRQUFRLEdBQW1CLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBQyxDQUFDO1FBQzlHLE1BQU0sU0FBUyxHQUErQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQztRQUM1RixNQUFNLE1BQU0sR0FBRyxFQUFDLEdBQUcsUUFBUSxFQUFFLEdBQUcsU0FBUyxFQUFDLENBQUM7UUFFM0MsTUFBTSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFtQixFQUFxQixFQUFFO1lBQ3ZHLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBQy9CLE1BQU0sRUFBRSxRQUFRLENBQUMsSUFBSTtnQkFDckIsU0FBUyxFQUFFLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFDLENBQUM7YUFDcEQsQ0FBQyxDQUFDO1lBQ0gsT0FBTztnQkFDTCxNQUFNLEVBQUUsSUFBSSxlQUFlLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUM7Z0JBQzFELFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVztnQkFDL0IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2dCQUNuQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7Z0JBQ3pCLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDN0MsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUMsQ0FBQzthQUM1RCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLE1BQU0sUUFBUSxHQUFtQixFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUMsQ0FBQztRQUMxRyxNQUFNLFNBQVMsR0FBK0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUM7UUFDMUYsTUFBTSxNQUFNLEdBQUcsRUFBQyxHQUFHLFFBQVEsRUFBRSxHQUFHLFNBQVMsRUFBQyxDQUFDO1FBRTNDLE1BQU0sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBbUIsRUFBcUIsRUFBRTtZQUN2RyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO2dCQUMvQixNQUFNLEVBQUUsUUFBUSxDQUFDLElBQUk7Z0JBQ3JCLFNBQVMsRUFBRSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBQyxDQUFDO2FBQ3BELENBQUMsQ0FBQztZQUNILE9BQU87Z0JBQ0wsTUFBTSxFQUFFLElBQUksZUFBZSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDO2dCQUMxRCxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7Z0JBQy9CLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztnQkFDbkIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO2dCQUN6QixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQzdDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLENBQUM7YUFDN0QsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHdCQUF3QjtRQUM5QixNQUFNLFFBQVEsR0FBbUIsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFDLENBQUM7UUFDOUcsTUFBTSxTQUFTLEdBQStCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDO1FBQzVGLE1BQU0sTUFBTSxHQUFHLEVBQUMsR0FBRyxRQUFRLEVBQUUsR0FBRyxTQUFTLEVBQUMsQ0FBQztRQUUzQyxNQUFNLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLElBQW1CLEVBQXFCLEVBQUU7WUFDdkcsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDL0IsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJO2dCQUNyQixTQUFTLEVBQUUsQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUMsQ0FBQzthQUNwRCxDQUFDLENBQUM7WUFDSCxPQUFPO2dCQUNMLE1BQU0sRUFBRSxJQUFJLGVBQWUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQztnQkFDMUQsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO2dCQUMvQixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7Z0JBQ25CLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtnQkFDekIsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUM3QyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxDQUFDO2FBQzdELENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTywrQkFBK0I7UUFDckMsTUFBTSxRQUFRLEdBQW1CLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsd0JBQXdCLEVBQUMsQ0FBQztRQUNoSSxNQUFNLFNBQVMsR0FBK0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxlQUFlLENBQUM7UUFDbkcsTUFBTSxNQUFNLEdBQUcsRUFBQyxHQUFHLFFBQVEsRUFBRSxHQUFHLFNBQVMsRUFBQyxDQUFDO1FBRTNDLE1BQU0sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBbUIsRUFBcUIsRUFBRTtZQUN2RyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO2dCQUMvQixNQUFNLEVBQUUsUUFBUSxDQUFDLElBQUk7Z0JBQ3JCLFNBQVMsRUFBRSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBQyxDQUFDO2FBQ3BELENBQUMsQ0FBQztZQUNILE9BQU87Z0JBQ0wsTUFBTSxFQUFFLElBQUksZUFBZSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDO2dCQUMxRCxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7Z0JBQy9CLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztnQkFDbkIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO2dCQUN6QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7YUFDeEMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0FuVVUsZUFBZTtrSEFBZixlQUFlLGNBREgsTUFBTTs7MkZBQ2xCLGVBQWU7a0JBRDNCLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOztBQXVVaEM7O0dBRUc7QUFDSCxTQUFTLGdCQUFnQixDQUFDLEtBQW9CO0lBQzVDLE1BQU0sYUFBYSxHQUFhLEVBQUUsQ0FBQztJQUNuQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQixhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNuQixhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNqQixhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQixhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRCxPQUFPLGFBQWEsQ0FBQztBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIyIFN3aXNzIEZlZGVyYWwgUmFpbHdheXNcbiAqXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlXG4gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMFxuICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjBcbiAqL1xuXG5pbXBvcnQge0VsZW1lbnRSZWYsIGluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE5nWm9uZSwgcnVuSW5JbmplY3Rpb25Db250ZXh0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29ubmVjdGVkUG9zaXRpb24sIE92ZXJsYXksIE92ZXJsYXlDb25maWcsIE92ZXJsYXlSZWZ9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7Q29tcG9uZW50UG9ydGFsfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7Vmlld01lbnVDb21wb25lbnR9IGZyb20gJy4vdmlldy1tZW51LmNvbXBvbmVudCc7XG5pbXBvcnQge1dvcmtiZW5jaE1lbnVJdGVtfSBmcm9tICcuLi8uLi93b3JrYmVuY2gubW9kZWwnO1xuaW1wb3J0IHtXT1JLQkVOQ0hfVklFV19SRUdJU1RSWX0gZnJvbSAnLi4vLi4vdmlldy93b3JrYmVuY2gtdmlldy5yZWdpc3RyeSc7XG5pbXBvcnQge2ZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtmaXJzdFZhbHVlRnJvbSwgZnJvbUV2ZW50LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBUZWFyZG93bkxvZ2ljfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Y29lcmNlRWxlbWVudH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7VEVYVCwgVGV4dENvbXBvbmVudH0gZnJvbSAnLi4vdmlldy1jb250ZXh0LW1lbnUvdGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHtNZW51SXRlbUNvbmZpZywgV29ya2JlbmNoQ29uZmlnfSBmcm9tICcuLi8uLi93b3JrYmVuY2gtY29uZmlnJztcbmltcG9ydCB7V29ya2JlbmNoU2VydmljZX0gZnJvbSAnLi4vLi4vd29ya2JlbmNoLnNlcnZpY2UnO1xuaW1wb3J0IHtmaWx0ZXJBcnJheSwgb2JzZXJ2ZUlufSBmcm9tICdAc2Npb24vdG9vbGtpdC9vcGVyYXRvcnMnO1xuaW1wb3J0IHvJtVdvcmtiZW5jaFZpZXd9IGZyb20gJy4uLy4uL3ZpZXcvybV3b3JrYmVuY2gtdmlldy5tb2RlbCc7XG5pbXBvcnQge1ZpZXdJZCwgV29ya2JlbmNoVmlld30gZnJvbSAnLi4vLi4vdmlldy93b3JrYmVuY2gtdmlldy5tb2RlbCc7XG5pbXBvcnQge3Byb3ZpZGVWaWV3Q29udGV4dH0gZnJvbSAnLi4vLi4vdmlldy92aWV3LWNvbnRleHQtcHJvdmlkZXInO1xuaW1wb3J0IHtBcnJheXN9IGZyb20gJ0BzY2lvbi90b29sa2l0L3V0aWwnO1xuXG4vKipcbiAqIFNob3dzIG1lbnUgaXRlbXMgb2YgYSB7QGxpbmsgV29ya2JlbmNoVmlld30gaW4gYSBtZW51LlxuICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBWaWV3TWVudVNlcnZpY2Uge1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRPUF9MRUZUOiBDb25uZWN0ZWRQb3NpdGlvbiA9IHtvcmlnaW5YOiAnc3RhcnQnLCBvcmlnaW5ZOiAndG9wJywgb3ZlcmxheVg6ICdzdGFydCcsIG92ZXJsYXlZOiAndG9wJ307XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRPUF9SSUdIVDogQ29ubmVjdGVkUG9zaXRpb24gPSB7b3JpZ2luWDogJ3N0YXJ0Jywgb3JpZ2luWTogJ3RvcCcsIG92ZXJsYXlYOiAnZW5kJywgb3ZlcmxheVk6ICd0b3AnfTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQk9UVE9NX0xFRlQ6IENvbm5lY3RlZFBvc2l0aW9uID0ge29yaWdpblg6ICdzdGFydCcsIG9yaWdpblk6ICd0b3AnLCBvdmVybGF5WDogJ3N0YXJ0Jywgb3ZlcmxheVk6ICdib3R0b20nfTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQk9UVE9NX1JJR0hUOiBDb25uZWN0ZWRQb3NpdGlvbiA9IHtvcmlnaW5YOiAnc3RhcnQnLCBvcmlnaW5ZOiAndG9wJywgb3ZlcmxheVg6ICdlbmQnLCBvdmVybGF5WTogJ2JvdHRvbSd9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX292ZXJsYXkgPSBpbmplY3QoT3ZlcmxheSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWV3UmVnaXN0cnkgPSBpbmplY3QoV09SS0JFTkNIX1ZJRVdfUkVHSVNUUlkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF93b3JrYmVuY2hTZXJ2aWNlID0gaW5qZWN0KFdvcmtiZW5jaFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF93b3JrYmVuY2hDb25maWcgPSBpbmplY3QoV29ya2JlbmNoQ29uZmlnKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBSZWdpc3RlcnMgYnVpbHQtaW4gbWVudSBpdGVtcyBhZGRlZCB0byB0aGUgY29udGV4dCBtZW51IG9mIGV2ZXJ5IHZpZXcgdGFiLlxuICAgIHRoaXMucmVnaXN0ZXJDbG9zZU1lbnVJdGVtKCk7XG4gICAgdGhpcy5yZWdpc3RlckNsb3NlT3RoZXJUYWJzTWVudUl0ZW0oKTtcbiAgICB0aGlzLnJlZ2lzdGVyQ2xvc2VBbGxUYWJzTWVudUl0ZW0oKTtcbiAgICB0aGlzLnJlZ2lzdGVyQ2xvc2VSaWdodFRhYnNNZW51SXRlbSgpO1xuICAgIHRoaXMucmVnaXN0ZXJDbG9zZUxlZnRUYWJzTWVudUl0ZW0oKTtcbiAgICB0aGlzLnJlZ2lzdGVyTW92ZVJpZ2h0TWVudUl0ZW0oKTtcbiAgICB0aGlzLnJlZ2lzdGVyTW92ZUxlZnRNZW51SXRlbSgpO1xuICAgIHRoaXMucmVnaXN0ZXJNb3ZlVXBNZW51SXRlbSgpO1xuICAgIHRoaXMucmVnaXN0ZXJNb3ZlRG93bk1lbnVJdGVtKCk7XG4gICAgdGhpcy5yZWdpc3Rlck1vdmVUb05ld1dpbmRvd01lbnVJdGVtKCk7XG4gIH1cblxuICAvKipcbiAgICogU2hvd3MgYSBtZW51IHdpdGggbWVudSBpdGVtcyByZWdpc3RlcmVkIGluIGdpdmVuIHtAbGluayBXb3JrYmVuY2hWaWV3fS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgV29ya2JlbmNoVmlldy5yZWdpc3RlclZpZXdNZW51SXRlbX1cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzaG93TWVudShsb2NhdGlvbjogUG9pbnQsIHZpZXdJZDogVmlld0lkKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgdmlldyA9IHRoaXMuX3ZpZXdSZWdpc3RyeS5nZXQodmlld0lkKTtcbiAgICBjb25zdCBtZW51SXRlbXMgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh2aWV3Lm1lbnVJdGVtcyQpO1xuXG4gICAgLy8gRG8gbm90IHNob3cgdGhlIG1lbnUgaWYgdGhlcmUgYXJlIG5vIG1lbnUgaXRlbXMgcmVnaXN0ZXJlZC5cbiAgICBpZiAobWVudUl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFByZXBhcmUgYW5kIGRpc3BsYXkgdGhlIG1lbnUgb3ZlcmxheS5cbiAgICBjb25zdCBjb25maWcgPSBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5fb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLm5vb3AoKSxcbiAgICAgIGRpc3Bvc2VPbk5hdmlnYXRpb246IHRydWUsXG4gICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLl9vdmVybGF5LnBvc2l0aW9uKClcbiAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8obG9jYXRpb24pXG4gICAgICAgIC53aXRoRmxleGlibGVEaW1lbnNpb25zKGZhbHNlKVxuICAgICAgICAud2l0aFBvc2l0aW9ucyhbVmlld01lbnVTZXJ2aWNlLlRPUF9MRUZULCBWaWV3TWVudVNlcnZpY2UuVE9QX1JJR0hULCBWaWV3TWVudVNlcnZpY2UuQk9UVE9NX0xFRlQsIFZpZXdNZW51U2VydmljZS5CT1RUT01fUklHSFRdKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IG92ZXJsYXlSZWYgPSB0aGlzLl9vdmVybGF5LmNyZWF0ZShjb25maWcpO1xuICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgIHBhcmVudDogdGhpcy5faW5qZWN0b3IsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge3Byb3ZpZGU6IE92ZXJsYXlSZWYsIHVzZVZhbHVlOiBvdmVybGF5UmVmfSxcbiAgICAgICAgcHJvdmlkZVZpZXdDb250ZXh0KHZpZXcpLFxuICAgICAgXSxcbiAgICB9KTtcbiAgICBvdmVybGF5UmVmLmF0dGFjaChuZXcgQ29tcG9uZW50UG9ydGFsKFZpZXdNZW51Q29tcG9uZW50LCBudWxsLCBpbmplY3RvcikpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwb24gc3Vic2NyaXB0aW9uLCBpbnN0YWxscyBrZXlib2FyZCBhY2NlbGVyYXRvcnMgb2YgdGhlIG1lbnUgaXRlbXMgcmVnaXN0ZXJlZCBpbiB7QGxpbmsgV29ya2JlbmNoVmlld30uXG4gICAqL1xuICBwdWJsaWMgaW5zdGFsbE1lbnVJdGVtQWNjZWxlcmF0b3JzJCh0YXJnZXQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgSFRNTEVsZW1lbnQsIHZpZXc6IMm1V29ya2JlbmNoVmlldyk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoKTogVGVhcmRvd25Mb2dpYyA9PiB7XG4gICAgICBjb25zdCB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgICB2aWV3Lm1lbnVJdGVtcyRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgb2JzZXJ2ZUluKGZuID0+IHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZm4pKSxcbiAgICAgICAgICAvLyBTa2lwIG1lbnUgaXRlbXMgd2hpY2ggaGF2ZSBubyBhY2NlbGVyYXRvciBjb25maWd1cmVkLlxuICAgICAgICAgIGZpbHRlckFycmF5KChtZW51SXRlbTogV29ya2JlbmNoTWVudUl0ZW0pID0+ICEhbWVudUl0ZW0uYWNjZWxlcmF0b3I/Lmxlbmd0aCksXG4gICAgICAgICAgZmlsdGVyKG1lbnVJdGVtcyA9PiBtZW51SXRlbXMubGVuZ3RoID4gMCksXG4gICAgICAgICAgLy8gU3Vic2NyaWJlIGZvciBrZXlib2FyZCBldmVudHMuXG4gICAgICAgICAgc3dpdGNoTWFwKChtZW51SXRlbXM6IFdvcmtiZW5jaE1lbnVJdGVtW10pOiBPYnNlcnZhYmxlPHtldmVudDogS2V5Ym9hcmRFdmVudDsgbWVudUl0ZW1zOiBXb3JrYmVuY2hNZW51SXRlbVtdfT4gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihjb2VyY2VFbGVtZW50KHRhcmdldCksICdrZXlkb3duJykucGlwZShtYXAoZXZlbnQgPT4gKHtldmVudCwgbWVudUl0ZW1zfSkpKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBtYXAoKHtldmVudCwgbWVudUl0ZW1zfSkgPT4gKHtcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgbWVudUl0ZW1zOiBtZW51SXRlbXNcbiAgICAgICAgICAgICAgLmZpbHRlcihtZW51SXRlbSA9PiAhbWVudUl0ZW0uaXNEaXNhYmxlZD8uKCkpXG4gICAgICAgICAgICAgIC5maWx0ZXIobWVudUl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjY2VsZXJhdG9yID0gbWVudUl0ZW0uYWNjZWxlcmF0b3IhO1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGFjY2VsZXJhdG9yLmF0KC0xKSE7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9kaWZpZXJLZXlzID0gYWNjZWxlcmF0b3Iuc2xpY2UoMCwgLTEpO1xuXG4gICAgICAgICAgICAgICAgLy8gQ29tcGFyZSBrZXkuXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleT8udG9Mb3dlckNhc2UoKSAhPT0ga2V5LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gQ29tcGFyZSBtb2RpZmllcnMuXG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheXMuaXNFcXVhbChtb2RpZmllcktleXMsIGdldE1vZGlmaWVyU3RhdGUoZXZlbnQpLCB7ZXhhY3RPcmRlcjogZmFsc2V9KSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSkpLFxuICAgICAgICAgIGZpbHRlcigoe21lbnVJdGVtc30pID0+IG1lbnVJdGVtcy5sZW5ndGggPiAwKSxcbiAgICAgICAgICBvYnNlcnZlSW4oZm4gPT4gdGhpcy5fem9uZS5ydW4oZm4pKSxcbiAgICAgICAgICB0YWtlVW50aWwodW5zdWJzY3JpYmUkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCh7ZXZlbnQsIG1lbnVJdGVtc30pID0+IHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLl9pbmplY3RvciwgKCkgPT4ge1xuICAgICAgICAgICAgbWVudUl0ZW1zLmZvckVhY2gobWVudUl0ZW0gPT4gbWVudUl0ZW0ub25BY3Rpb24oKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gKCk6IHZvaWQgPT4gdW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJDbG9zZU1lbnVJdGVtKCk6IHZvaWQge1xuICAgIGNvbnN0IGRlZmF1bHRzOiBNZW51SXRlbUNvbmZpZyA9IHt2aXNpYmxlOiB0cnVlLCB0ZXh0OiAnQ2xvc2UnLCBncm91cDogJ2Nsb3NlJywgYWNjZWxlcmF0b3I6IFsnY3RybCcsICdrJ10sIGNzc0NsYXNzOiAnZTJlLWNsb3NlJ307XG4gICAgY29uc3QgYXBwQ29uZmlnOiBNZW51SXRlbUNvbmZpZyB8IHVuZGVmaW5lZCA9IHRoaXMuX3dvcmtiZW5jaENvbmZpZy52aWV3TWVudUl0ZW1zPy5jbG9zZTtcbiAgICBjb25zdCBjb25maWcgPSB7Li4uZGVmYXVsdHMsIC4uLmFwcENvbmZpZ307XG5cbiAgICBjb25maWcudmlzaWJsZSAmJiB0aGlzLl93b3JrYmVuY2hTZXJ2aWNlLnJlZ2lzdGVyVmlld01lbnVJdGVtKCh2aWV3OiBXb3JrYmVuY2hWaWV3KTogV29ya2JlbmNoTWVudUl0ZW0gPT4ge1xuICAgICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICBwYXJlbnQ6IEluamVjdG9yLk5VTEwsXG4gICAgICAgIHByb3ZpZGVyczogW3twcm92aWRlOiBURVhULCB1c2VWYWx1ZTogY29uZmlnLnRleHR9XSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuICh7XG4gICAgICAgIHBvcnRhbDogbmV3IENvbXBvbmVudFBvcnRhbChUZXh0Q29tcG9uZW50LCBudWxsLCBpbmplY3RvciksXG4gICAgICAgIGFjY2VsZXJhdG9yOiBjb25maWcuYWNjZWxlcmF0b3IsXG4gICAgICAgIGdyb3VwOiBjb25maWcuZ3JvdXAsXG4gICAgICAgIGNzc0NsYXNzOiBjb25maWcuY3NzQ2xhc3MsXG4gICAgICAgIGlzRGlzYWJsZWQ6ICgpOiBib29sZWFuID0+ICF2aWV3LmNsb3NhYmxlKCksXG4gICAgICAgIG9uQWN0aW9uOiAoKTogdm9pZCA9PiB2b2lkIHZpZXcuY2xvc2UoKS50aGVuKCksXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJDbG9zZU90aGVyVGFic01lbnVJdGVtKCk6IHZvaWQge1xuICAgIGNvbnN0IGRlZmF1bHRzOiBNZW51SXRlbUNvbmZpZyA9IHt2aXNpYmxlOiB0cnVlLCB0ZXh0OiAnQ2xvc2Ugb3RoZXIgdGFicycsIGdyb3VwOiAnY2xvc2UnLCBhY2NlbGVyYXRvcjogWydjdHJsJywgJ3NoaWZ0JywgJ2snXSwgY3NzQ2xhc3M6ICcgZTJlLWNsb3NlLW90aGVyLXRhYnMnfTtcbiAgICBjb25zdCBhcHBDb25maWc6IE1lbnVJdGVtQ29uZmlnIHwgdW5kZWZpbmVkID0gdGhpcy5fd29ya2JlbmNoQ29uZmlnLnZpZXdNZW51SXRlbXM/LmNsb3NlT3RoZXJzO1xuICAgIGNvbnN0IGNvbmZpZyA9IHsuLi5kZWZhdWx0cywgLi4uYXBwQ29uZmlnfTtcblxuICAgIGNvbmZpZy52aXNpYmxlICYmIHRoaXMuX3dvcmtiZW5jaFNlcnZpY2UucmVnaXN0ZXJWaWV3TWVudUl0ZW0oKHZpZXc6IFdvcmtiZW5jaFZpZXcpOiBXb3JrYmVuY2hNZW51SXRlbSA9PiB7XG4gICAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgIHBhcmVudDogSW5qZWN0b3IuTlVMTCxcbiAgICAgICAgcHJvdmlkZXJzOiBbe3Byb3ZpZGU6IFRFWFQsIHVzZVZhbHVlOiBjb25maWcudGV4dH1dLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gKHtcbiAgICAgICAgcG9ydGFsOiBuZXcgQ29tcG9uZW50UG9ydGFsKFRleHRDb21wb25lbnQsIG51bGwsIGluamVjdG9yKSxcbiAgICAgICAgYWNjZWxlcmF0b3I6IGNvbmZpZy5hY2NlbGVyYXRvcixcbiAgICAgICAgZ3JvdXA6IGNvbmZpZy5ncm91cCxcbiAgICAgICAgY3NzQ2xhc3M6IGNvbmZpZy5jc3NDbGFzcyxcbiAgICAgICAgaXNEaXNhYmxlZDogKCk6IGJvb2xlYW4gPT4gdmlldy5maXJzdCgpICYmIHZpZXcubGFzdCgpLFxuICAgICAgICBvbkFjdGlvbjogKCk6IHZvaWQgPT4gdm9pZCB2aWV3LmNsb3NlKCdvdGhlci12aWV3cycpLnRoZW4oKSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlckNsb3NlQWxsVGFic01lbnVJdGVtKCk6IHZvaWQge1xuICAgIGNvbnN0IGRlZmF1bHRzOiBNZW51SXRlbUNvbmZpZyA9IHt2aXNpYmxlOiB0cnVlLCB0ZXh0OiAnQ2xvc2UgYWxsIHRhYnMnLCBncm91cDogJ2Nsb3NlJywgYWNjZWxlcmF0b3I6IFsnY3RybCcsICdzaGlmdCcsICdhbHQnLCAnayddLCBjc3NDbGFzczogJ2UyZS1jbG9zZS1hbGwtdGFicyd9O1xuICAgIGNvbnN0IGFwcENvbmZpZzogTWVudUl0ZW1Db25maWcgfCB1bmRlZmluZWQgPSB0aGlzLl93b3JrYmVuY2hDb25maWcudmlld01lbnVJdGVtcz8uY2xvc2VBbGw7XG4gICAgY29uc3QgY29uZmlnID0gey4uLmRlZmF1bHRzLCAuLi5hcHBDb25maWd9O1xuXG4gICAgY29uZmlnLnZpc2libGUgJiYgdGhpcy5fd29ya2JlbmNoU2VydmljZS5yZWdpc3RlclZpZXdNZW51SXRlbSgodmlldzogV29ya2JlbmNoVmlldyk6IFdvcmtiZW5jaE1lbnVJdGVtID0+IHtcbiAgICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgICAgcGFyZW50OiBJbmplY3Rvci5OVUxMLFxuICAgICAgICBwcm92aWRlcnM6IFt7cHJvdmlkZTogVEVYVCwgdXNlVmFsdWU6IGNvbmZpZy50ZXh0fV0sXG4gICAgICB9KTtcbiAgICAgIHJldHVybiAoe1xuICAgICAgICBwb3J0YWw6IG5ldyBDb21wb25lbnRQb3J0YWwoVGV4dENvbXBvbmVudCwgbnVsbCwgaW5qZWN0b3IpLFxuICAgICAgICBhY2NlbGVyYXRvcjogY29uZmlnLmFjY2VsZXJhdG9yLFxuICAgICAgICBncm91cDogY29uZmlnLmdyb3VwLFxuICAgICAgICBjc3NDbGFzczogY29uZmlnLmNzc0NsYXNzLFxuICAgICAgICBvbkFjdGlvbjogKCk6IHZvaWQgPT4gdm9pZCB2aWV3LmNsb3NlKCdhbGwtdmlld3MnKS50aGVuKCksXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJDbG9zZVJpZ2h0VGFic01lbnVJdGVtKCk6IHZvaWQge1xuICAgIGNvbnN0IGRlZmF1bHRzOiBNZW51SXRlbUNvbmZpZyA9IHt2aXNpYmxlOiB0cnVlLCB0ZXh0OiAnQ2xvc2UgdGFicyB0byB0aGUgcmlnaHQnLCBncm91cDogJ2Nsb3NlJywgY3NzQ2xhc3M6ICdlMmUtY2xvc2UtcmlnaHQtdGFicyd9O1xuICAgIGNvbnN0IGFwcENvbmZpZzogTWVudUl0ZW1Db25maWcgfCB1bmRlZmluZWQgPSB0aGlzLl93b3JrYmVuY2hDb25maWcudmlld01lbnVJdGVtcz8uY2xvc2VUb1RoZVJpZ2h0O1xuICAgIGNvbnN0IGNvbmZpZyA9IHsuLi5kZWZhdWx0cywgLi4uYXBwQ29uZmlnfTtcblxuICAgIGNvbmZpZy52aXNpYmxlICYmIHRoaXMuX3dvcmtiZW5jaFNlcnZpY2UucmVnaXN0ZXJWaWV3TWVudUl0ZW0oKHZpZXc6IFdvcmtiZW5jaFZpZXcpOiBXb3JrYmVuY2hNZW51SXRlbSA9PiB7XG4gICAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgIHBhcmVudDogSW5qZWN0b3IuTlVMTCxcbiAgICAgICAgcHJvdmlkZXJzOiBbe3Byb3ZpZGU6IFRFWFQsIHVzZVZhbHVlOiBjb25maWcudGV4dH1dLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwb3J0YWw6IG5ldyBDb21wb25lbnRQb3J0YWwoVGV4dENvbXBvbmVudCwgbnVsbCwgaW5qZWN0b3IpLFxuICAgICAgICBhY2NlbGVyYXRvcjogY29uZmlnLmFjY2VsZXJhdG9yLFxuICAgICAgICBncm91cDogY29uZmlnLmdyb3VwLFxuICAgICAgICBjc3NDbGFzczogY29uZmlnLmNzc0NsYXNzLFxuICAgICAgICBpc0Rpc2FibGVkOiAoKTogYm9vbGVhbiA9PiB2aWV3Lmxhc3QoKSxcbiAgICAgICAgb25BY3Rpb246ICgpOiB2b2lkID0+IHZvaWQgdmlldy5jbG9zZSgndmlld3MtdG8tdGhlLXJpZ2h0JykudGhlbigpLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJDbG9zZUxlZnRUYWJzTWVudUl0ZW0oKTogdm9pZCB7XG4gICAgY29uc3QgZGVmYXVsdHM6IE1lbnVJdGVtQ29uZmlnID0ge3Zpc2libGU6IHRydWUsIHRleHQ6ICdDbG9zZSB0YWJzIHRvIHRoZSBsZWZ0JywgZ3JvdXA6ICdjbG9zZScsIGNzc0NsYXNzOiAnZTJlLWNsb3NlLWxlZnQtdGFicyd9O1xuICAgIGNvbnN0IGFwcENvbmZpZzogTWVudUl0ZW1Db25maWcgfCB1bmRlZmluZWQgPSB0aGlzLl93b3JrYmVuY2hDb25maWcudmlld01lbnVJdGVtcz8uY2xvc2VUb1RoZUxlZnQ7XG4gICAgY29uc3QgY29uZmlnID0gey4uLmRlZmF1bHRzLCAuLi5hcHBDb25maWd9O1xuXG4gICAgY29uZmlnLnZpc2libGUgJiYgdGhpcy5fd29ya2JlbmNoU2VydmljZS5yZWdpc3RlclZpZXdNZW51SXRlbSgodmlldzogV29ya2JlbmNoVmlldyk6IFdvcmtiZW5jaE1lbnVJdGVtID0+IHtcbiAgICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgICAgcGFyZW50OiBJbmplY3Rvci5OVUxMLFxuICAgICAgICBwcm92aWRlcnM6IFt7cHJvdmlkZTogVEVYVCwgdXNlVmFsdWU6IGNvbmZpZy50ZXh0fV0sXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBvcnRhbDogbmV3IENvbXBvbmVudFBvcnRhbChUZXh0Q29tcG9uZW50LCBudWxsLCBpbmplY3RvciksXG4gICAgICAgIGFjY2VsZXJhdG9yOiBjb25maWcuYWNjZWxlcmF0b3IsXG4gICAgICAgIGdyb3VwOiBjb25maWcuZ3JvdXAsXG4gICAgICAgIGNzc0NsYXNzOiBjb25maWcuY3NzQ2xhc3MsXG4gICAgICAgIGlzRGlzYWJsZWQ6ICgpOiBib29sZWFuID0+IHZpZXcuZmlyc3QoKSxcbiAgICAgICAgb25BY3Rpb246ICgpOiB2b2lkID0+IHZvaWQgdmlldy5jbG9zZSgndmlld3MtdG8tdGhlLWxlZnQnKS50aGVuKCksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3Rlck1vdmVSaWdodE1lbnVJdGVtKCk6IHZvaWQge1xuICAgIGNvbnN0IGRlZmF1bHRzOiBNZW51SXRlbUNvbmZpZyA9IHt2aXNpYmxlOiB0cnVlLCB0ZXh0OiAnTW92ZSByaWdodCcsIGdyb3VwOiAnbW92ZScsIGFjY2VsZXJhdG9yOiBbJ2N0cmwnLCAnYWx0JywgJ2VuZCddLCBjc3NDbGFzczogJ2UyZS1tb3ZlLXJpZ2h0J307XG4gICAgY29uc3QgYXBwQ29uZmlnOiBNZW51SXRlbUNvbmZpZyB8IHVuZGVmaW5lZCA9IHRoaXMuX3dvcmtiZW5jaENvbmZpZy52aWV3TWVudUl0ZW1zPy5tb3ZlUmlnaHQ7XG4gICAgY29uc3QgY29uZmlnID0gey4uLmRlZmF1bHRzLCAuLi5hcHBDb25maWd9O1xuXG4gICAgY29uZmlnLnZpc2libGUgJiYgdGhpcy5fd29ya2JlbmNoU2VydmljZS5yZWdpc3RlclZpZXdNZW51SXRlbSgodmlldzogV29ya2JlbmNoVmlldyk6IFdvcmtiZW5jaE1lbnVJdGVtID0+IHtcbiAgICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgICAgcGFyZW50OiBJbmplY3Rvci5OVUxMLFxuICAgICAgICBwcm92aWRlcnM6IFt7cHJvdmlkZTogVEVYVCwgdXNlVmFsdWU6IGNvbmZpZy50ZXh0fV0sXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBvcnRhbDogbmV3IENvbXBvbmVudFBvcnRhbChUZXh0Q29tcG9uZW50LCBudWxsLCBpbmplY3RvciksXG4gICAgICAgIGFjY2VsZXJhdG9yOiBjb25maWcuYWNjZWxlcmF0b3IsXG4gICAgICAgIGdyb3VwOiBjb25maWcuZ3JvdXAsXG4gICAgICAgIGNzc0NsYXNzOiBjb25maWcuY3NzQ2xhc3MsXG4gICAgICAgIGlzRGlzYWJsZWQ6ICgpID0+IHZpZXcuZmlyc3QoKSAmJiB2aWV3Lmxhc3QoKSxcbiAgICAgICAgb25BY3Rpb246ICgpID0+IHZpZXcubW92ZSh2aWV3LnBhcnQoKS5pZCwge3JlZ2lvbjogJ2Vhc3QnfSksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3Rlck1vdmVMZWZ0TWVudUl0ZW0oKTogdm9pZCB7XG4gICAgY29uc3QgZGVmYXVsdHM6IE1lbnVJdGVtQ29uZmlnID0ge3Zpc2libGU6IHRydWUsIHRleHQ6ICdNb3ZlIGxlZnQnLCBncm91cDogJ21vdmUnLCBjc3NDbGFzczogJ2UyZS1tb3ZlLWxlZnQnfTtcbiAgICBjb25zdCBhcHBDb25maWc6IE1lbnVJdGVtQ29uZmlnIHwgdW5kZWZpbmVkID0gdGhpcy5fd29ya2JlbmNoQ29uZmlnLnZpZXdNZW51SXRlbXM/Lm1vdmVMZWZ0O1xuICAgIGNvbnN0IGNvbmZpZyA9IHsuLi5kZWZhdWx0cywgLi4uYXBwQ29uZmlnfTtcblxuICAgIGNvbmZpZy52aXNpYmxlICYmIHRoaXMuX3dvcmtiZW5jaFNlcnZpY2UucmVnaXN0ZXJWaWV3TWVudUl0ZW0oKHZpZXc6IFdvcmtiZW5jaFZpZXcpOiBXb3JrYmVuY2hNZW51SXRlbSA9PiB7XG4gICAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgIHBhcmVudDogSW5qZWN0b3IuTlVMTCxcbiAgICAgICAgcHJvdmlkZXJzOiBbe3Byb3ZpZGU6IFRFWFQsIHVzZVZhbHVlOiBjb25maWcudGV4dH1dLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwb3J0YWw6IG5ldyBDb21wb25lbnRQb3J0YWwoVGV4dENvbXBvbmVudCwgbnVsbCwgaW5qZWN0b3IpLFxuICAgICAgICBhY2NlbGVyYXRvcjogY29uZmlnLmFjY2VsZXJhdG9yLFxuICAgICAgICBncm91cDogY29uZmlnLmdyb3VwLFxuICAgICAgICBjc3NDbGFzczogY29uZmlnLmNzc0NsYXNzLFxuICAgICAgICBpc0Rpc2FibGVkOiAoKSA9PiB2aWV3LmZpcnN0KCkgJiYgdmlldy5sYXN0KCksXG4gICAgICAgIG9uQWN0aW9uOiAoKSA9PiB2aWV3Lm1vdmUodmlldy5wYXJ0KCkuaWQsIHtyZWdpb246ICd3ZXN0J30pLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJNb3ZlVXBNZW51SXRlbSgpOiB2b2lkIHtcbiAgICBjb25zdCBkZWZhdWx0czogTWVudUl0ZW1Db25maWcgPSB7dmlzaWJsZTogdHJ1ZSwgdGV4dDogJ01vdmUgdXAnLCBncm91cDogJ21vdmUnLCBjc3NDbGFzczogJ2UyZS1tb3ZlLXVwJ307XG4gICAgY29uc3QgYXBwQ29uZmlnOiBNZW51SXRlbUNvbmZpZyB8IHVuZGVmaW5lZCA9IHRoaXMuX3dvcmtiZW5jaENvbmZpZy52aWV3TWVudUl0ZW1zPy5tb3ZlVXA7XG4gICAgY29uc3QgY29uZmlnID0gey4uLmRlZmF1bHRzLCAuLi5hcHBDb25maWd9O1xuXG4gICAgY29uZmlnLnZpc2libGUgJiYgdGhpcy5fd29ya2JlbmNoU2VydmljZS5yZWdpc3RlclZpZXdNZW51SXRlbSgodmlldzogV29ya2JlbmNoVmlldyk6IFdvcmtiZW5jaE1lbnVJdGVtID0+IHtcbiAgICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgICAgcGFyZW50OiBJbmplY3Rvci5OVUxMLFxuICAgICAgICBwcm92aWRlcnM6IFt7cHJvdmlkZTogVEVYVCwgdXNlVmFsdWU6IGNvbmZpZy50ZXh0fV0sXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBvcnRhbDogbmV3IENvbXBvbmVudFBvcnRhbChUZXh0Q29tcG9uZW50LCBudWxsLCBpbmplY3RvciksXG4gICAgICAgIGFjY2VsZXJhdG9yOiBjb25maWcuYWNjZWxlcmF0b3IsXG4gICAgICAgIGdyb3VwOiBjb25maWcuZ3JvdXAsXG4gICAgICAgIGNzc0NsYXNzOiBjb25maWcuY3NzQ2xhc3MsXG4gICAgICAgIGlzRGlzYWJsZWQ6ICgpID0+IHZpZXcuZmlyc3QoKSAmJiB2aWV3Lmxhc3QoKSxcbiAgICAgICAgb25BY3Rpb246ICgpID0+IHZpZXcubW92ZSh2aWV3LnBhcnQoKS5pZCwge3JlZ2lvbjogJ25vcnRoJ30pLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJNb3ZlRG93bk1lbnVJdGVtKCk6IHZvaWQge1xuICAgIGNvbnN0IGRlZmF1bHRzOiBNZW51SXRlbUNvbmZpZyA9IHt2aXNpYmxlOiB0cnVlLCB0ZXh0OiAnTW92ZSBkb3duJywgZ3JvdXA6ICdtb3ZlJywgY3NzQ2xhc3M6ICdlMmUtbW92ZS1kb3duJ307XG4gICAgY29uc3QgYXBwQ29uZmlnOiBNZW51SXRlbUNvbmZpZyB8IHVuZGVmaW5lZCA9IHRoaXMuX3dvcmtiZW5jaENvbmZpZy52aWV3TWVudUl0ZW1zPy5tb3ZlRG93bjtcbiAgICBjb25zdCBjb25maWcgPSB7Li4uZGVmYXVsdHMsIC4uLmFwcENvbmZpZ307XG5cbiAgICBjb25maWcudmlzaWJsZSAmJiB0aGlzLl93b3JrYmVuY2hTZXJ2aWNlLnJlZ2lzdGVyVmlld01lbnVJdGVtKCh2aWV3OiBXb3JrYmVuY2hWaWV3KTogV29ya2JlbmNoTWVudUl0ZW0gPT4ge1xuICAgICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICBwYXJlbnQ6IEluamVjdG9yLk5VTEwsXG4gICAgICAgIHByb3ZpZGVyczogW3twcm92aWRlOiBURVhULCB1c2VWYWx1ZTogY29uZmlnLnRleHR9XSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcG9ydGFsOiBuZXcgQ29tcG9uZW50UG9ydGFsKFRleHRDb21wb25lbnQsIG51bGwsIGluamVjdG9yKSxcbiAgICAgICAgYWNjZWxlcmF0b3I6IGNvbmZpZy5hY2NlbGVyYXRvcixcbiAgICAgICAgZ3JvdXA6IGNvbmZpZy5ncm91cCxcbiAgICAgICAgY3NzQ2xhc3M6IGNvbmZpZy5jc3NDbGFzcyxcbiAgICAgICAgaXNEaXNhYmxlZDogKCkgPT4gdmlldy5maXJzdCgpICYmIHZpZXcubGFzdCgpLFxuICAgICAgICBvbkFjdGlvbjogKCkgPT4gdmlldy5tb3ZlKHZpZXcucGFydCgpLmlkLCB7cmVnaW9uOiAnc291dGgnfSksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3Rlck1vdmVUb05ld1dpbmRvd01lbnVJdGVtKCk6IHZvaWQge1xuICAgIGNvbnN0IGRlZmF1bHRzOiBNZW51SXRlbUNvbmZpZyA9IHt2aXNpYmxlOiB0cnVlLCB0ZXh0OiAnTW92ZSB0byBuZXcgd2luZG93JywgZ3JvdXA6ICdvcGVuJywgY3NzQ2xhc3M6ICdlMmUtbW92ZS10by1uZXctd2luZG93J307XG4gICAgY29uc3QgYXBwQ29uZmlnOiBNZW51SXRlbUNvbmZpZyB8IHVuZGVmaW5lZCA9IHRoaXMuX3dvcmtiZW5jaENvbmZpZy52aWV3TWVudUl0ZW1zPy5tb3ZlVG9OZXdXaW5kb3c7XG4gICAgY29uc3QgY29uZmlnID0gey4uLmRlZmF1bHRzLCAuLi5hcHBDb25maWd9O1xuXG4gICAgY29uZmlnLnZpc2libGUgJiYgdGhpcy5fd29ya2JlbmNoU2VydmljZS5yZWdpc3RlclZpZXdNZW51SXRlbSgodmlldzogV29ya2JlbmNoVmlldyk6IFdvcmtiZW5jaE1lbnVJdGVtID0+IHtcbiAgICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgICAgcGFyZW50OiBJbmplY3Rvci5OVUxMLFxuICAgICAgICBwcm92aWRlcnM6IFt7cHJvdmlkZTogVEVYVCwgdXNlVmFsdWU6IGNvbmZpZy50ZXh0fV0sXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBvcnRhbDogbmV3IENvbXBvbmVudFBvcnRhbChUZXh0Q29tcG9uZW50LCBudWxsLCBpbmplY3RvciksXG4gICAgICAgIGFjY2VsZXJhdG9yOiBjb25maWcuYWNjZWxlcmF0b3IsXG4gICAgICAgIGdyb3VwOiBjb25maWcuZ3JvdXAsXG4gICAgICAgIGNzc0NsYXNzOiBjb25maWcuY3NzQ2xhc3MsXG4gICAgICAgIG9uQWN0aW9uOiAoKSA9PiB2aWV3Lm1vdmUoJ25ldy13aW5kb3cnKSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwcmVzc2VkIG1vZGlmaWVyIGtleXMgKGN0cmwsIHNoaWZ0LCBhbHQsIG1ldGEpIGFzIGFycmF5IGl0ZW1zLlxuICovXG5mdW5jdGlvbiBnZXRNb2RpZmllclN0YXRlKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogc3RyaW5nW10ge1xuICBjb25zdCBtb2RpZmllclN0YXRlOiBzdHJpbmdbXSA9IFtdO1xuICBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgIG1vZGlmaWVyU3RhdGUucHVzaCgnY3RybCcpO1xuICB9XG4gIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgIG1vZGlmaWVyU3RhdGUucHVzaCgnc2hpZnQnKTtcbiAgfVxuICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgbW9kaWZpZXJTdGF0ZS5wdXNoKCdhbHQnKTtcbiAgfVxuICBpZiAoZXZlbnQubWV0YUtleSkge1xuICAgIG1vZGlmaWVyU3RhdGUucHVzaCgnbWV0YScpO1xuICB9XG4gIHJldHVybiBtb2RpZmllclN0YXRlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvaW50IHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG59XG4iXX0=
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2018-2023 Swiss Federal Railways
|
|
3
|
-
*
|
|
4
|
-
* This program and the accompanying materials are made
|
|
5
|
-
* available under the terms of the Eclipse Public License 2.0
|
|
6
|
-
* which is available at https://www.eclipse.org/legal/epl-2.0/
|
|
7
|
-
*
|
|
8
|
-
* SPDX-License-Identifier: EPL-2.0
|
|
9
|
-
*/
|
|
10
|
-
import { ChangeDetectionStrategy, Component, computed, HostBinding, HostListener, inject, Input, viewChild } from '@angular/core';
|
|
11
|
-
import { OverlayRef } from '@angular/cdk/overlay';
|
|
12
|
-
import { WORKBENCH_VIEW_REGISTRY } from '../../view/workbench-view.registry';
|
|
13
|
-
import { FormControl, ReactiveFormsModule } from '@angular/forms';
|
|
14
|
-
import { FilterFieldComponent } from '../../filter-field/filter-field.component';
|
|
15
|
-
import { WorkbenchPart } from '../workbench-part.model';
|
|
16
|
-
import { SciViewportComponent } from '@scion/components/viewport';
|
|
17
|
-
import { ViewListItemComponent } from '../view-list-item/view-list-item.component';
|
|
18
|
-
import { toSignal } from '@angular/core/rxjs-interop';
|
|
19
|
-
import * as i0 from "@angular/core";
|
|
20
|
-
import * as i1 from "@angular/forms";
|
|
21
|
-
/**
|
|
22
|
-
* Reference to inputs of {@link ViewListComponent}.
|
|
23
|
-
*/
|
|
24
|
-
export const ViewListComponentInputs = {
|
|
25
|
-
POSITION: 'position',
|
|
26
|
-
};
|
|
27
|
-
export class ViewListComponent {
|
|
28
|
-
get isSouthPosition() {
|
|
29
|
-
return this.position === 'south';
|
|
30
|
-
}
|
|
31
|
-
get partId() {
|
|
32
|
-
return this._part.id;
|
|
33
|
-
}
|
|
34
|
-
constructor() {
|
|
35
|
-
this._filterFieldComponent = viewChild.required(FilterFieldComponent);
|
|
36
|
-
this._part = inject(WorkbenchPart);
|
|
37
|
-
this._overlayRef = inject(OverlayRef);
|
|
38
|
-
this.filterFormControl = new FormControl('', { nonNullable: true });
|
|
39
|
-
const viewRegistry = inject(WORKBENCH_VIEW_REGISTRY);
|
|
40
|
-
const filterText = toSignal(this.filterFormControl.valueChanges, { initialValue: this.filterFormControl.value });
|
|
41
|
-
this.viewsInsideTabbar = computed(() => this._part.viewIds()
|
|
42
|
-
.map(viewId => viewRegistry.get(viewId))
|
|
43
|
-
.filter(view => view.scrolledIntoView())
|
|
44
|
-
.filter(view => matchesView(filterText(), view)));
|
|
45
|
-
this.viewsOutsideTabbar = computed(() => this._part.viewIds()
|
|
46
|
-
.map(viewId => viewRegistry.get(viewId))
|
|
47
|
-
.filter(view => !view.scrolledIntoView())
|
|
48
|
-
.filter(view => matchesView(filterText(), view)));
|
|
49
|
-
}
|
|
50
|
-
ngOnInit() {
|
|
51
|
-
this._filterFieldComponent().focus();
|
|
52
|
-
}
|
|
53
|
-
onActivateView(view) {
|
|
54
|
-
view.activate().then();
|
|
55
|
-
this._overlayRef.dispose();
|
|
56
|
-
}
|
|
57
|
-
onEscape() {
|
|
58
|
-
this._overlayRef.dispose();
|
|
59
|
-
}
|
|
60
|
-
onHostCloseEvent(event) {
|
|
61
|
-
event.stopPropagation(); // Prevent closing this overlay if emitted from a child of this overlay.
|
|
62
|
-
}
|
|
63
|
-
onDocumentCloseEvent() {
|
|
64
|
-
this._overlayRef.dispose();
|
|
65
|
-
}
|
|
66
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
67
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: ViewListComponent, isStandalone: true, selector: "wb-view-list", inputs: { position: "position" }, host: { listeners: { "document:keydown.escape": "onEscape()", "mousedown": "onHostCloseEvent($event)", "sci-microfrontend-focusin": "onHostCloseEvent($event)", "document:mousedown": "onDocumentCloseEvent()", "document:sci-microfrontend-focusin": "onDocumentCloseEvent()" }, properties: { "class.south": "this.isSouthPosition", "attr.data-partid": "this.partId" } }, viewQueries: [{ propertyName: "_filterFieldComponent", first: true, predicate: FilterFieldComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<wb-filter-field [formControl]=\"filterFormControl\"/>\n\n@if (viewsOutsideTabbar().length || viewsInsideTabbar().length) {\n <sci-viewport>\n @for (view of viewsOutsideTabbar(); track view.id) {\n <wb-view-list-item [viewId]=\"view.id\" (click)=\"onActivateView(view)\"/>\n }\n @if (viewsOutsideTabbar().length && viewsInsideTabbar().length) {\n <hr>\n }\n @for (view of viewsInsideTabbar(); track view.id) {\n <wb-view-list-item [viewId]=\"view.id\" (click)=\"onActivateView(view)\"/>\n }\n </sci-viewport>\n}\n", styles: [":host{display:flex;flex-direction:column;gap:.75em;width:var(--sci-workbench-contextmenu-width);border:1px solid var(--sci-color-border);color:var(--sci-color-text);background-color:var(--sci-color-background-elevation);border-radius:var(--sci-corner);overflow:hidden}:host.south{border-top:none}:host>wb-filter-field{flex:none;margin:.5em .25em}:host>sci-viewport{flex:auto;max-height:350px}:host>sci-viewport::part(content){display:flex;flex-direction:column;gap:1px;padding-top:1px}:host>sci-viewport>wb-view-list-item{position:relative}:host>sci-viewport>wb-view-list-item:hover{background-color:var(--sci-color-background-elevation-hover);box-shadow:0 0 0 1px var(--sci-color-border)}:host>sci-viewport>wb-view-list-item:has(+hr):after{position:absolute;left:0;right:0;bottom:-1px;height:1px;background-color:var(--sci-color-border);content:\"\"}:host>sci-viewport>hr{display:none}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: FilterFieldComponent, selector: "wb-filter-field", inputs: ["tabindex", "placeholder", "disabled"], outputs: ["filter"] }, { kind: "component", type: ViewListItemComponent, selector: "wb-view-list-item", inputs: ["viewId"] }, { kind: "component", type: SciViewportComponent, selector: "sci-viewport", inputs: ["scrollbarStyle"], outputs: ["scroll"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
68
|
-
}
|
|
69
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ViewListComponent, decorators: [{
|
|
70
|
-
type: Component,
|
|
71
|
-
args: [{ selector: 'wb-view-list', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
72
|
-
ReactiveFormsModule,
|
|
73
|
-
FilterFieldComponent,
|
|
74
|
-
ViewListItemComponent,
|
|
75
|
-
SciViewportComponent,
|
|
76
|
-
], template: "<wb-filter-field [formControl]=\"filterFormControl\"/>\n\n@if (viewsOutsideTabbar().length || viewsInsideTabbar().length) {\n <sci-viewport>\n @for (view of viewsOutsideTabbar(); track view.id) {\n <wb-view-list-item [viewId]=\"view.id\" (click)=\"onActivateView(view)\"/>\n }\n @if (viewsOutsideTabbar().length && viewsInsideTabbar().length) {\n <hr>\n }\n @for (view of viewsInsideTabbar(); track view.id) {\n <wb-view-list-item [viewId]=\"view.id\" (click)=\"onActivateView(view)\"/>\n }\n </sci-viewport>\n}\n", styles: [":host{display:flex;flex-direction:column;gap:.75em;width:var(--sci-workbench-contextmenu-width);border:1px solid var(--sci-color-border);color:var(--sci-color-text);background-color:var(--sci-color-background-elevation);border-radius:var(--sci-corner);overflow:hidden}:host.south{border-top:none}:host>wb-filter-field{flex:none;margin:.5em .25em}:host>sci-viewport{flex:auto;max-height:350px}:host>sci-viewport::part(content){display:flex;flex-direction:column;gap:1px;padding-top:1px}:host>sci-viewport>wb-view-list-item{position:relative}:host>sci-viewport>wb-view-list-item:hover{background-color:var(--sci-color-background-elevation-hover);box-shadow:0 0 0 1px var(--sci-color-border)}:host>sci-viewport>wb-view-list-item:has(+hr):after{position:absolute;left:0;right:0;bottom:-1px;height:1px;background-color:var(--sci-color-border);content:\"\"}:host>sci-viewport>hr{display:none}\n"] }]
|
|
77
|
-
}], ctorParameters: () => [], propDecorators: { position: [{
|
|
78
|
-
type: Input,
|
|
79
|
-
args: [ViewListComponentInputs.POSITION]
|
|
80
|
-
}], isSouthPosition: [{
|
|
81
|
-
type: HostBinding,
|
|
82
|
-
args: ['class.south']
|
|
83
|
-
}], partId: [{
|
|
84
|
-
type: HostBinding,
|
|
85
|
-
args: ['attr.data-partid']
|
|
86
|
-
}], onEscape: [{
|
|
87
|
-
type: HostListener,
|
|
88
|
-
args: ['document:keydown.escape']
|
|
89
|
-
}], onHostCloseEvent: [{
|
|
90
|
-
type: HostListener,
|
|
91
|
-
args: ['mousedown', ['$event']]
|
|
92
|
-
}, {
|
|
93
|
-
type: HostListener,
|
|
94
|
-
args: ['sci-microfrontend-focusin', ['$event']]
|
|
95
|
-
}], onDocumentCloseEvent: [{
|
|
96
|
-
type: HostListener,
|
|
97
|
-
args: ['document:mousedown']
|
|
98
|
-
}, {
|
|
99
|
-
type: HostListener,
|
|
100
|
-
args: ['document:sci-microfrontend-focusin']
|
|
101
|
-
}] } });
|
|
102
|
-
/**
|
|
103
|
-
* Tests if given filter matches given view.
|
|
104
|
-
*/
|
|
105
|
-
function matchesView(filterText, view) {
|
|
106
|
-
const viewText = `${view.title() ?? ''} ${view.heading() ?? ''}`;
|
|
107
|
-
return !filterText || !!viewText.match(toFilterRegExp(filterText));
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Creates a regular expression of the given filter text.
|
|
111
|
-
*/
|
|
112
|
-
function toFilterRegExp(filterText) {
|
|
113
|
-
// Escape the user input
|
|
114
|
-
const escapedString = filterText.replace(/[-[\]/{}()*+?.\\^$|]/g, '\\$&');
|
|
115
|
-
return new RegExp(escapedString, 'i');
|
|
116
|
-
}
|
|
117
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL3BhcnQvdmlldy1saXN0L3ZpZXctbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9wYXJ0L3ZpZXctbGlzdC92aWV3LWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWtCLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNoSixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFFM0UsT0FBTyxFQUFDLFdBQVcsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQy9FLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUNqRixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7OztBQUVwRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHO0lBQ3JDLFFBQVEsRUFBRSxVQUFVO0NBQ3JCLENBQUM7QUFlRixNQUFNLE9BQU8saUJBQWlCO0lBZTVCLElBQ1csZUFBZTtRQUN4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QixDQUFDLFFBQVE7Z0JBSTVCLGVBQWU7c0JBRHpCLFdBQVc7dUJBQUMsYUFBYTtnQkFNZixNQUFNO3NCQURoQixXQUFXO3VCQUFDLGtCQUFrQjtnQkErQnhCLFFBQVE7c0JBRGQsWUFBWTt1QkFBQyx5QkFBeUI7Z0JBT2hDLGdCQUFnQjtzQkFGdEIsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUNwQyxZQUFZO3VCQUFDLDJCQUEyQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU85QyxvQkFBb0I7c0JBRjFCLFlBQVk7dUJBQUMsb0JBQW9COztzQkFDakMsWUFBWTt1QkFBQyxvQ0FBb0M7O0FBTXBEOztHQUVHO0FBQ0gsU0FBUyxXQUFXLENBQUMsVUFBa0IsRUFBRSxJQUFtQjtJQUMxRCxNQUFNLFFBQVEsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQ2pFLE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxjQUFjLENBQUMsVUFBa0I7SUFDeEMsd0JBQXdCO0lBQ3hCLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDMUUsT0FBTyxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMyBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBTaWduYWwsIHZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge092ZXJsYXlSZWZ9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7V09SS0JFTkNIX1ZJRVdfUkVHSVNUUll9IGZyb20gJy4uLy4uL3ZpZXcvd29ya2JlbmNoLXZpZXcucmVnaXN0cnknO1xuaW1wb3J0IHtXb3JrYmVuY2hWaWV3fSBmcm9tICcuLi8uLi92aWV3L3dvcmtiZW5jaC12aWV3Lm1vZGVsJztcbmltcG9ydCB7Rm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7RmlsdGVyRmllbGRDb21wb25lbnR9IGZyb20gJy4uLy4uL2ZpbHRlci1maWVsZC9maWx0ZXItZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7V29ya2JlbmNoUGFydH0gZnJvbSAnLi4vd29ya2JlbmNoLXBhcnQubW9kZWwnO1xuaW1wb3J0IHtTY2lWaWV3cG9ydENvbXBvbmVudH0gZnJvbSAnQHNjaW9uL2NvbXBvbmVudHMvdmlld3BvcnQnO1xuaW1wb3J0IHtWaWV3TGlzdEl0ZW1Db21wb25lbnR9IGZyb20gJy4uL3ZpZXctbGlzdC1pdGVtL3ZpZXctbGlzdC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQge3RvU2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbi8qKlxuICogUmVmZXJlbmNlIHRvIGlucHV0cyBvZiB7QGxpbmsgVmlld0xpc3RDb21wb25lbnR9LlxuICovXG5leHBvcnQgY29uc3QgVmlld0xpc3RDb21wb25lbnRJbnB1dHMgPSB7XG4gIFBPU0lUSU9OOiAncG9zaXRpb24nLFxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd2Itdmlldy1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZpZXctbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ZpZXctbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRmlsdGVyRmllbGRDb21wb25lbnQsXG4gICAgVmlld0xpc3RJdGVtQ29tcG9uZW50LFxuICAgIFNjaVZpZXdwb3J0Q29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBWaWV3TGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcHJpdmF0ZSBfZmlsdGVyRmllbGRDb21wb25lbnQgPSB2aWV3Q2hpbGQucmVxdWlyZWQoRmlsdGVyRmllbGRDb21wb25lbnQpO1xuICBwcml2YXRlIF9wYXJ0ID0gaW5qZWN0KFdvcmtiZW5jaFBhcnQpO1xuICBwcml2YXRlIF9vdmVybGF5UmVmID0gaW5qZWN0KE92ZXJsYXlSZWYpO1xuXG4gIC8qKiBWaWV3cyB0aGF0IGFyZSBzY3JvbGxlZCBpbnRvIHRoZSB0YWIgYmFyLiAqL1xuICBwcm90ZWN0ZWQgdmlld3NJbnNpZGVUYWJiYXI6IFNpZ25hbDxXb3JrYmVuY2hWaWV3W10+O1xuICAvKiogVmlld3MgdGhhdCBhcmUgc2Nyb2xsZWQgb3V0IG9mIHRoZSB0YWIgYmFyLiAqL1xuICBwcm90ZWN0ZWQgdmlld3NPdXRzaWRlVGFiYmFyOiBTaWduYWw8V29ya2JlbmNoVmlld1tdPjtcbiAgcHJvdGVjdGVkIGZpbHRlckZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sPHN0cmluZz4oJycsIHtub25OdWxsYWJsZTogdHJ1ZX0pO1xuXG4gIEBJbnB1dChWaWV3TGlzdENvbXBvbmVudElucHV0cy5QT1NJVElPTilcbiAgcHVibGljIHBvc2l0aW9uPzogJ25vcnRoJyB8ICdzb3V0aCcgfCB1bmRlZmluZWQ7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zb3V0aCcpXG4gIHB1YmxpYyBnZXQgaXNTb3V0aFBvc2l0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBvc2l0aW9uID09PSAnc291dGgnO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtcGFydGlkJylcbiAgcHVibGljIGdldCBwYXJ0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcGFydC5pZDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHZpZXdSZWdpc3RyeSA9IGluamVjdChXT1JLQkVOQ0hfVklFV19SRUdJU1RSWSk7XG4gICAgY29uc3QgZmlsdGVyVGV4dCA9IHRvU2lnbmFsKHRoaXMuZmlsdGVyRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLCB7aW5pdGlhbFZhbHVlOiB0aGlzLmZpbHRlckZvcm1Db250cm9sLnZhbHVlfSk7XG5cbiAgICB0aGlzLnZpZXdzSW5zaWRlVGFiYmFyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fcGFydC52aWV3SWRzKClcbiAgICAgIC5tYXAodmlld0lkID0+IHZpZXdSZWdpc3RyeS5nZXQodmlld0lkKSlcbiAgICAgIC5maWx0ZXIodmlldyA9PiB2aWV3LnNjcm9sbGVkSW50b1ZpZXcoKSlcbiAgICAgIC5maWx0ZXIodmlldyA9PiBtYXRjaGVzVmlldyhmaWx0ZXJUZXh0KCksIHZpZXcpKSxcbiAgICApO1xuICAgIHRoaXMudmlld3NPdXRzaWRlVGFiYmFyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fcGFydC52aWV3SWRzKClcbiAgICAgIC5tYXAodmlld0lkID0+IHZpZXdSZWdpc3RyeS5nZXQodmlld0lkKSlcbiAgICAgIC5maWx0ZXIodmlldyA9PiAhdmlldy5zY3JvbGxlZEludG9WaWV3KCkpXG4gICAgICAuZmlsdGVyKHZpZXcgPT4gbWF0Y2hlc1ZpZXcoZmlsdGVyVGV4dCgpLCB2aWV3KSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9maWx0ZXJGaWVsZENvbXBvbmVudCgpLmZvY3VzKCk7XG4gIH1cblxuICBwdWJsaWMgb25BY3RpdmF0ZVZpZXcodmlldzogV29ya2JlbmNoVmlldyk6IHZvaWQge1xuICAgIHZpZXcuYWN0aXZhdGUoKS50aGVuKCk7XG4gICAgdGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScpXG4gIHB1YmxpYyBvbkVzY2FwZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ3NjaS1taWNyb2Zyb250ZW5kLWZvY3VzaW4nLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25Ib3N0Q2xvc2VFdmVudChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgLy8gUHJldmVudCBjbG9zaW5nIHRoaXMgb3ZlcmxheSBpZiBlbWl0dGVkIGZyb20gYSBjaGlsZCBvZiB0aGlzIG92ZXJsYXkuXG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZWRvd24nKVxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpzY2ktbWljcm9mcm9udGVuZC1mb2N1c2luJylcbiAgcHVibGljIG9uRG9jdW1lbnRDbG9zZUV2ZW50KCk6IHZvaWQge1xuICAgIHRoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICB9XG59XG5cbi8qKlxuICogVGVzdHMgaWYgZ2l2ZW4gZmlsdGVyIG1hdGNoZXMgZ2l2ZW4gdmlldy5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hlc1ZpZXcoZmlsdGVyVGV4dDogc3RyaW5nLCB2aWV3OiBXb3JrYmVuY2hWaWV3KTogYm9vbGVhbiB7XG4gIGNvbnN0IHZpZXdUZXh0ID0gYCR7dmlldy50aXRsZSgpID8/ICcnfSAke3ZpZXcuaGVhZGluZygpID8/ICcnfWA7XG4gIHJldHVybiAhZmlsdGVyVGV4dCB8fCAhIXZpZXdUZXh0Lm1hdGNoKHRvRmlsdGVyUmVnRXhwKGZpbHRlclRleHQpKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVndWxhciBleHByZXNzaW9uIG9mIHRoZSBnaXZlbiBmaWx0ZXIgdGV4dC5cbiAqL1xuZnVuY3Rpb24gdG9GaWx0ZXJSZWdFeHAoZmlsdGVyVGV4dDogc3RyaW5nKTogUmVnRXhwIHtcbiAgLy8gRXNjYXBlIHRoZSB1c2VyIGlucHV0XG4gIGNvbnN0IGVzY2FwZWRTdHJpbmcgPSBmaWx0ZXJUZXh0LnJlcGxhY2UoL1stW1xcXS97fSgpKis/LlxcXFxeJHxdL2csICdcXFxcJCYnKTtcbiAgcmV0dXJuIG5ldyBSZWdFeHAoZXNjYXBlZFN0cmluZywgJ2knKTtcbn1cbiIsIjx3Yi1maWx0ZXItZmllbGQgW2Zvcm1Db250cm9sXT1cImZpbHRlckZvcm1Db250cm9sXCIvPlxuXG5AaWYgKHZpZXdzT3V0c2lkZVRhYmJhcigpLmxlbmd0aCB8fCB2aWV3c0luc2lkZVRhYmJhcigpLmxlbmd0aCkge1xuICA8c2NpLXZpZXdwb3J0PlxuICAgIEBmb3IgKHZpZXcgb2Ygdmlld3NPdXRzaWRlVGFiYmFyKCk7IHRyYWNrIHZpZXcuaWQpIHtcbiAgICAgIDx3Yi12aWV3LWxpc3QtaXRlbSBbdmlld0lkXT1cInZpZXcuaWRcIiAoY2xpY2spPVwib25BY3RpdmF0ZVZpZXcodmlldylcIi8+XG4gICAgfVxuICAgIEBpZiAodmlld3NPdXRzaWRlVGFiYmFyKCkubGVuZ3RoICYmIHZpZXdzSW5zaWRlVGFiYmFyKCkubGVuZ3RoKSB7XG4gICAgICA8aHI+XG4gICAgfVxuICAgIEBmb3IgKHZpZXcgb2Ygdmlld3NJbnNpZGVUYWJiYXIoKTsgdHJhY2sgdmlldy5pZCkge1xuICAgICAgPHdiLXZpZXctbGlzdC1pdGVtIFt2aWV3SWRdPVwidmlldy5pZFwiIChjbGljayk9XCJvbkFjdGl2YXRlVmlldyh2aWV3KVwiLz5cbiAgICB9XG4gIDwvc2NpLXZpZXdwb3J0PlxufVxuIl19
|