@trudb/tru-common-lib 0.0.726 → 0.0.730
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{esm2020 → esm2022}/lib/assets/tru-icon-module.mjs +32 -32
- package/{esm2020 → esm2022}/lib/assets/tru-search-icon-module.mjs +36 -36
- package/{esm2020 → esm2022}/lib/base-classes/tru-component-config-base.mjs +3 -3
- package/{esm2020 → esm2022}/lib/base-classes/tru-control-component-config-base.mjs +3 -3
- package/{esm2020 → esm2022}/lib/base-classes/tru-edit-control-base.mjs +17 -17
- package/esm2022/lib/base-classes/tru-edit-control-config-base.mjs +6 -0
- package/{esm2020 → esm2022}/lib/base-classes/tru-edit-parent-control-config-base.mjs +3 -3
- package/{esm2020 → esm2022}/lib/base-classes/tru-edit-pkey-control-config-base.mjs +3 -3
- package/esm2022/lib/base-classes/tru-entity-base.mjs +14 -0
- package/esm2022/lib/base-classes/tru-list-control-config-base.mjs +6 -0
- package/{esm2020 → esm2022}/lib/base-classes/tru-property-config-base.mjs +14 -15
- package/{esm2020 → esm2022}/lib/base-classes/tru-search-config-base.mjs +3 -3
- package/esm2022/lib/base-classes/tru-search-control-base.mjs +45 -0
- package/esm2022/lib/base-classes/tru-search-control-config-base.mjs +5 -0
- package/esm2022/lib/base-classes/tru-search-control-range-base.mjs +45 -0
- package/esm2022/lib/base-classes/tru-table-config-base.mjs +12 -0
- package/{esm2020 → esm2022}/lib/base-views/detail/tru-detail-view-base-module.mjs +19 -19
- package/esm2022/lib/base-views/detail/tru-detail-view-base.mjs +83 -0
- package/esm2022/lib/base-views/search/services/tru-search-view-control-event-handler.mjs +25 -0
- package/esm2022/lib/base-views/search/services/tru-search-view-event-handler.mjs +25 -0
- package/{esm2020 → esm2022}/lib/base-views/search/tru-search-view-base-module.mjs +19 -19
- package/esm2022/lib/base-views/search/tru-search-view-base.mjs +68 -0
- package/{esm2020 → esm2022}/lib/base-views/search-result/tru-search-result-view-base-module.mjs +19 -19
- package/esm2022/lib/base-views/search-result/tru-search-result-view-base.mjs +54 -0
- package/{esm2020 → esm2022}/lib/classes/tru-choice.mjs +2 -2
- package/esm2022/lib/classes/tru-context-filter-choice.mjs +11 -0
- package/esm2022/lib/classes/tru-context-filter.mjs +16 -0
- package/esm2022/lib/classes/tru-data-change-parser.mjs +287 -0
- package/esm2022/lib/classes/tru-data-change.mjs +5 -0
- package/{esm2020 → esm2022}/lib/classes/tru-formula-eval.mjs +156 -156
- package/esm2022/lib/classes/tru-merge-data-set.mjs +11 -0
- package/esm2022/lib/classes/tru-merge-data.mjs +20 -0
- package/{esm2020 → esm2022}/lib/classes/tru-name-value.mjs +2 -2
- package/esm2022/lib/classes/tru-predicate.mjs +47 -0
- package/{esm2020 → esm2022}/lib/classes/tru-property-config-cloud-file.mjs +4 -4
- package/esm2022/lib/classes/tru-property-config-date.mjs +7 -0
- package/esm2022/lib/classes/tru-property-config-decimal.mjs +9 -0
- package/{esm2020 → esm2022}/lib/classes/tru-property-config-file.mjs +6 -8
- package/esm2022/lib/classes/tru-property-config-foreign-key.mjs +8 -0
- package/esm2022/lib/classes/tru-property-config-integer.mjs +7 -0
- package/esm2022/lib/classes/tru-property-config-password.mjs +6 -0
- package/esm2022/lib/classes/tru-property-config-percentage.mjs +7 -0
- package/esm2022/lib/classes/tru-property-config-scientific.mjs +7 -0
- package/{esm2020 → esm2022}/lib/classes/tru-property-config-text-choices.mjs +6 -8
- package/{esm2020 → esm2022}/lib/classes/tru-property-config-text.mjs +8 -10
- package/{esm2020 → esm2022}/lib/classes/tru-property-config-usa-address.mjs +6 -8
- package/{esm2020 → esm2022}/lib/classes/tru-property-config-zip-code.mjs +6 -8
- package/esm2022/lib/classes/tru-query-predicate-manager.mjs +49 -0
- package/{esm2020 → esm2022}/lib/components/confirm-dialog/tru-confirm-dialog-module.mjs +20 -20
- package/esm2022/lib/components/confirm-dialog/tru-confirm-dialog.mjs +59 -0
- package/{esm2020 → esm2022}/lib/components/data-grid/classes/tru-data-grid-config.mjs +1 -1
- package/{esm2020 → esm2022}/lib/components/data-grid/enums/tru-data-grid-types.mjs +6 -6
- package/esm2022/lib/components/data-grid/overlays/tru-data-grid-loading-overlay/tru-data-grid-loading-overlay.mjs +40 -0
- package/esm2022/lib/components/data-grid/overlays/tru-data-grid-no-rows-overlay/tru-data-grid-no-rows-overlay.mjs +27 -0
- package/esm2022/lib/components/data-grid/tru-data-grid-module.mjs +67 -0
- package/esm2022/lib/components/data-grid/tru-data-grid.mjs +382 -0
- package/{esm2020 → esm2022}/lib/components/desktop/classes/tru-desktop-title.mjs +2 -2
- package/esm2022/lib/components/desktop/classes/tru-desktop-view-config.mjs +21 -0
- package/{esm2020 → esm2022}/lib/components/desktop/directives/resizable/tru-desktop-resizable-module.mjs +19 -19
- package/esm2022/lib/components/desktop/directives/resizable/tru-desktop-resizable.mjs +122 -0
- package/{esm2020 → esm2022}/lib/components/desktop/menubar/tru-desktop-menubar-module.mjs +56 -56
- package/esm2022/lib/components/desktop/menubar/tru-desktop-menubar.mjs +36 -0
- package/esm2022/lib/components/desktop/services/tru-desktop-manager.mjs +86 -0
- package/esm2022/lib/components/desktop/services/tru-desktop-service.mjs +108 -0
- package/esm2022/lib/components/desktop/services/tru-window-action-event-handler.mjs +25 -0
- package/esm2022/lib/components/desktop/services/tru-window-event-args.mjs +24 -0
- package/esm2022/lib/components/desktop/services/tru-window-event-handler.mjs +42 -0
- package/{esm2020 → esm2022}/lib/components/desktop/statusbar/tru-desktop-statusbar-module.mjs +19 -19
- package/esm2022/lib/components/desktop/statusbar/tru-desktop-statusbar.mjs +20 -0
- package/{esm2020 → esm2022}/lib/components/desktop/taskbar/tru-desktop-taskbar-module.mjs +21 -21
- package/esm2022/lib/components/desktop/taskbar/tru-desktop-taskbar.mjs +41 -0
- package/{esm2020 → esm2022}/lib/components/desktop/tru-desktop-module.mjs +72 -72
- package/esm2022/lib/components/desktop/tru-desktop.mjs +737 -0
- package/{esm2020 → esm2022}/lib/components/desktop/view/tru-desktop-view-module.mjs +19 -19
- package/esm2022/lib/components/desktop/view/tru-desktop-view.mjs +29 -0
- package/{esm2020 → esm2022}/lib/components/desktop/viewport/tru-desktop-viewport-module.mjs +20 -20
- package/esm2022/lib/components/desktop/viewport/tru-desktop-viewport.mjs +117 -0
- package/{esm2020 → esm2022}/lib/components/desktop/window/tru-desktop-window-module.mjs +58 -58
- package/esm2022/lib/components/desktop/window/tru-desktop-window.mjs +467 -0
- package/{esm2020 → esm2022}/lib/components/export-dialog/tru-export-dialog-module.mjs +20 -20
- package/esm2022/lib/components/export-dialog/tru-export-dialog.mjs +61 -0
- package/{esm2020 → esm2022}/lib/components/layout/column/tru-column-module.mjs +19 -19
- package/{esm2020 → esm2022}/lib/components/layout/column/tru-column.mjs +12 -12
- package/{esm2020 → esm2022}/lib/components/layout/form/tru-form-module.mjs +19 -19
- package/esm2022/lib/components/layout/form/tru-form.mjs +35 -0
- package/{esm2020 → esm2022}/lib/components/layout/group-box/tru-group-box-module.mjs +19 -19
- package/{esm2020 → esm2022}/lib/components/layout/group-box/tru-group-box.mjs +12 -12
- package/{esm2020 → esm2022}/lib/components/layout/row/tru-row-module.mjs +19 -19
- package/{esm2020 → esm2022}/lib/components/layout/row/tru-row.mjs +12 -12
- package/{esm2020 → esm2022}/lib/components/login/classes/tru-auth-config.mjs +7 -7
- package/esm2022/lib/components/login/classes/tru-auth-jwt-strategy.mjs +63 -0
- package/{esm2020 → esm2022}/lib/components/login/classes/tru-auth-login-request.mjs +5 -3
- package/{esm2020 → esm2022}/lib/components/login/classes/tru-auth-logout-request.mjs +4 -3
- package/esm2022/lib/components/login/classes/tru-auth-session-strategy.mjs +21 -0
- package/{esm2020 → esm2022}/lib/components/login/classes/tru-auth-strategy-provider.mjs +19 -19
- package/{esm2020 → esm2022}/lib/components/login/classes/tru-auth-token.mjs +11 -8
- package/{esm2020 → esm2022}/lib/components/login/classes/tru-auth-user-request.mjs +4 -3
- package/esm2022/lib/components/login/services/tru-auth-cache.mjs +20 -0
- package/esm2022/lib/components/login/services/tru-auth-interceptor.mjs +46 -0
- package/esm2022/lib/components/login/services/tru-auth.mjs +87 -0
- package/esm2022/lib/components/login/tru-login-module.mjs +46 -0
- package/esm2022/lib/components/login/tru-login.mjs +59 -0
- package/{esm2020 → esm2022}/lib/components/password-dialog/tru-password-dialog-module.mjs +20 -20
- package/esm2022/lib/components/password-dialog/tru-password-dialog.mjs +59 -0
- package/{esm2020 → esm2022}/lib/components/toolbar/button/tru-toolbar-button-module.mjs +32 -32
- package/esm2022/lib/components/toolbar/button/tru-toolbar-button.mjs +40 -0
- package/{esm2020 → esm2022}/lib/components/toolbar/classes/tru-toolbar-dropdown-option.mjs +1 -1
- package/{esm2020 → esm2022}/lib/components/toolbar/context-filter/tru-toolbar-context-filter-module.mjs +44 -44
- package/esm2022/lib/components/toolbar/context-filter/tru-toolbar-context-filter.mjs +26 -0
- package/{esm2020 → esm2022}/lib/components/toolbar/dropdown/tru-toolbar-dropdown-module.mjs +36 -36
- package/esm2022/lib/components/toolbar/dropdown/tru-toolbar-dropdown.mjs +45 -0
- package/{esm2020 → esm2022}/lib/components/toolbar/menu/menu-button/tru-toolbar-menu-button-module.mjs +19 -19
- package/esm2022/lib/components/toolbar/menu/menu-button/tru-toolbar-menu-button.mjs +17 -0
- package/{esm2020 → esm2022}/lib/components/toolbar/menu/menu-item/tru-toolbar-menu-item-module.mjs +19 -19
- package/esm2022/lib/components/toolbar/menu/menu-item/tru-toolbar-menu-item.mjs +26 -0
- package/{esm2020 → esm2022}/lib/components/toolbar/menu/tru-toolbar-menu-module.mjs +32 -32
- package/esm2022/lib/components/toolbar/menu/tru-toolbar-menu.mjs +33 -0
- package/{esm2020 → esm2022}/lib/components/toolbar/separator/tru-toolbar-separator-module.mjs +19 -19
- package/{esm2020 → esm2022}/lib/components/toolbar/separator/tru-toolbar-separator.mjs +12 -12
- package/{esm2020 → esm2022}/lib/components/toolbar/text/tru-toolbar-text-module.mjs +32 -32
- package/esm2022/lib/components/toolbar/text/tru-toolbar-text.mjs +27 -0
- package/{esm2020 → esm2022}/lib/components/toolbar/tru-toolbar-module.mjs +73 -73
- package/{esm2020 → esm2022}/lib/components/toolbar/tru-toolbar.mjs +20 -21
- package/{esm2020 → esm2022}/lib/components/toolbar/user-profile/tru-toolbar-user-profile-module.mjs +36 -36
- package/esm2022/lib/components/toolbar/user-profile/tru-toolbar-user-profile.mjs +38 -0
- package/esm2022/lib/components/validation-dialog/tru-validation-dialog-config.mjs +25 -0
- package/{esm2020 → esm2022}/lib/components/validation-dialog/tru-validation-dialog-module.mjs +19 -19
- package/esm2022/lib/components/validation-dialog/tru-validation-dialog.mjs +83 -0
- package/{esm2020 → esm2022}/lib/directives/breeze-validator/tru-breeze-validator-module.mjs +19 -19
- package/esm2022/lib/directives/breeze-validator/tru-breeze-validator.mjs +107 -0
- package/{esm2020 → esm2022}/lib/directives/search-panel-position-manager/tru-search-panel-position-manager-module.mjs +19 -19
- package/esm2022/lib/directives/search-panel-position-manager/tru-search-panel-position-manager.mjs +155 -0
- package/{esm2020 → esm2022}/lib/directives/select-panel/tru-mat-select-panel-module.mjs +19 -19
- package/esm2022/lib/directives/select-panel/tru-mat-select-panel.mjs +69 -0
- package/{esm2020 → esm2022}/lib/interfaces/tru-value.mjs +1 -1
- package/{esm2020 → esm2022}/lib/material.module.mjs +192 -192
- package/esm2022/lib/services/tru-app-environment.mjs +113 -0
- package/esm2022/lib/services/tru-breeze-context-factory.mjs +84 -0
- package/esm2022/lib/services/tru-breeze-metadata-provider.mjs +21 -0
- package/esm2022/lib/services/tru-component-lookup.mjs +23 -0
- package/esm2022/lib/services/tru-connection-hub.mjs +52 -0
- package/esm2022/lib/services/tru-context-filters.mjs +28 -0
- package/esm2022/lib/services/tru-data-context.mjs +263 -0
- package/esm2022/lib/services/tru-entity-accessor.mjs +292 -0
- package/esm2022/lib/services/tru-model-property-lookup.mjs +21 -0
- package/{esm2020 → esm2022}/lib/services/tru-predicate-map.mjs +11 -11
- package/esm2022/lib/services/tru-search-result-view-manager.mjs +18 -0
- package/esm2022/lib/services/tru-sort.mjs +113 -0
- package/esm2022/lib/services/tru-table-registry.mjs +15 -0
- package/esm2022/lib/services/tru-text-manager.mjs +148 -0
- package/esm2022/lib/services/tru-ui-notification.mjs +107 -0
- package/esm2022/lib/services/tru-user.mjs +62 -0
- package/esm2022/lib/services/tru-util.mjs +76 -0
- package/{esm2020 → esm2022}/lib/tru-common-module.mjs +16 -16
- package/{esm2020 → esm2022}/public-api.mjs +144 -144
- package/{esm2020 → esm2022}/trudb-tru-common-lib.mjs +4 -4
- package/fesm2022/trudb-tru-common-lib.mjs +6937 -0
- package/fesm2022/trudb-tru-common-lib.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/assets/tru-icon-module.d.ts +11 -11
- package/lib/assets/tru-search-icon-module.d.ts +11 -11
- package/lib/base-classes/tru-component-config-base.d.ts +3 -3
- package/lib/base-classes/tru-control-component-config-base.d.ts +20 -20
- package/lib/base-classes/tru-edit-control-base.d.ts +10 -10
- package/lib/base-classes/tru-edit-control-config-base.d.ts +21 -21
- package/lib/base-classes/tru-edit-parent-control-config-base.d.ts +9 -9
- package/lib/base-classes/tru-edit-pkey-control-config-base.d.ts +11 -11
- package/lib/base-classes/tru-entity-base.d.ts +14 -14
- package/lib/base-classes/tru-list-control-config-base.d.ts +21 -21
- package/lib/base-classes/tru-property-config-base.d.ts +13 -13
- package/lib/base-classes/tru-search-config-base.d.ts +9 -9
- package/lib/base-classes/tru-search-control-base.d.ts +21 -21
- package/lib/base-classes/tru-search-control-config-base.d.ts +13 -13
- package/lib/base-classes/tru-search-control-range-base.d.ts +25 -25
- package/lib/base-classes/tru-table-config-base.d.ts +11 -11
- package/lib/base-views/detail/tru-detail-view-base-module.d.ts +9 -9
- package/lib/base-views/detail/tru-detail-view-base.d.ts +32 -32
- package/lib/base-views/search/services/tru-search-view-control-event-handler.d.ts +12 -12
- package/lib/base-views/search/services/tru-search-view-event-handler.d.ts +11 -11
- package/lib/base-views/search/tru-search-view-base-module.d.ts +9 -9
- package/lib/base-views/search/tru-search-view-base.d.ts +36 -36
- package/lib/base-views/search-result/tru-search-result-view-base-module.d.ts +9 -9
- package/lib/base-views/search-result/tru-search-result-view-base.d.ts +25 -25
- package/lib/classes/tru-choice.d.ts +8 -8
- package/lib/classes/tru-context-filter-choice.d.ts +6 -6
- package/lib/classes/tru-context-filter.d.ts +10 -10
- package/lib/classes/tru-data-change-parser.d.ts +33 -33
- package/lib/classes/tru-data-change.d.ts +4 -4
- package/lib/classes/tru-formula-eval.d.ts +31 -31
- package/lib/classes/tru-merge-data-set.d.ts +7 -7
- package/lib/classes/tru-merge-data.d.ts +9 -9
- package/lib/classes/tru-name-value.d.ts +9 -9
- package/lib/classes/tru-predicate.d.ts +8 -8
- package/lib/classes/tru-property-config-cloud-file.d.ts +4 -4
- package/lib/classes/tru-property-config-date.d.ts +6 -6
- package/lib/classes/tru-property-config-decimal.d.ts +8 -8
- package/lib/classes/tru-property-config-file.d.ts +5 -5
- package/lib/classes/tru-property-config-foreign-key.d.ts +7 -7
- package/lib/classes/tru-property-config-integer.d.ts +6 -6
- package/lib/classes/tru-property-config-password.d.ts +5 -5
- package/lib/classes/tru-property-config-percentage.d.ts +6 -6
- package/lib/classes/tru-property-config-scientific.d.ts +6 -6
- package/lib/classes/tru-property-config-text-choices.d.ts +5 -5
- package/lib/classes/tru-property-config-text.d.ts +7 -7
- package/lib/classes/tru-property-config-usa-address.d.ts +5 -5
- package/lib/classes/tru-property-config-zip-code.d.ts +5 -5
- package/lib/classes/tru-query-predicate-manager.d.ts +26 -26
- package/lib/components/confirm-dialog/tru-confirm-dialog-module.d.ts +10 -10
- package/lib/components/confirm-dialog/tru-confirm-dialog.d.ts +28 -28
- package/lib/components/data-grid/classes/tru-data-grid-config.d.ts +7 -7
- package/lib/components/data-grid/enums/tru-data-grid-types.d.ts +5 -5
- package/lib/components/data-grid/overlays/tru-data-grid-loading-overlay/tru-data-grid-loading-overlay.d.ts +13 -13
- package/lib/components/data-grid/overlays/tru-data-grid-no-rows-overlay/tru-data-grid-no-rows-overlay.d.ts +13 -13
- package/lib/components/data-grid/tru-data-grid-module.d.ts +15 -15
- package/lib/components/data-grid/tru-data-grid.d.ts +67 -67
- package/lib/components/desktop/classes/tru-desktop-title.d.ts +4 -4
- package/lib/components/desktop/classes/tru-desktop-view-config.d.ts +16 -16
- package/lib/components/desktop/directives/resizable/tru-desktop-resizable-module.d.ts +9 -9
- package/lib/components/desktop/directives/resizable/tru-desktop-resizable.d.ts +32 -32
- package/lib/components/desktop/menubar/tru-desktop-menubar-module.d.ts +17 -17
- package/lib/components/desktop/menubar/tru-desktop-menubar.d.ts +15 -15
- package/lib/components/desktop/services/tru-desktop-manager.d.ts +33 -33
- package/lib/components/desktop/services/tru-desktop-service.d.ts +95 -95
- package/lib/components/desktop/services/tru-window-action-event-handler.d.ts +12 -12
- package/lib/components/desktop/services/tru-window-event-args.d.ts +17 -17
- package/lib/components/desktop/services/tru-window-event-handler.d.ts +20 -20
- package/lib/components/desktop/statusbar/tru-desktop-statusbar-module.d.ts +9 -9
- package/lib/components/desktop/statusbar/tru-desktop-statusbar.d.ts +10 -10
- package/lib/components/desktop/taskbar/tru-desktop-taskbar-module.d.ts +11 -11
- package/lib/components/desktop/taskbar/tru-desktop-taskbar.d.ts +15 -15
- package/lib/components/desktop/tru-desktop-module.d.ts +20 -20
- package/lib/components/desktop/tru-desktop.d.ts +337 -337
- package/lib/components/desktop/view/tru-desktop-view-module.d.ts +9 -9
- package/lib/components/desktop/view/tru-desktop-view.d.ts +14 -14
- package/lib/components/desktop/viewport/tru-desktop-viewport-module.d.ts +10 -10
- package/lib/components/desktop/viewport/tru-desktop-viewport.d.ts +48 -48
- package/lib/components/desktop/window/tru-desktop-window-module.d.ts +17 -17
- package/lib/components/desktop/window/tru-desktop-window.d.ts +189 -189
- package/lib/components/export-dialog/tru-export-dialog-module.d.ts +10 -10
- package/lib/components/export-dialog/tru-export-dialog.d.ts +26 -26
- package/lib/components/layout/column/tru-column-module.d.ts +9 -9
- package/lib/components/layout/column/tru-column.d.ts +6 -6
- package/lib/components/layout/form/tru-form-module.d.ts +9 -9
- package/lib/components/layout/form/tru-form.d.ts +10 -10
- package/lib/components/layout/group-box/tru-group-box-module.d.ts +9 -9
- package/lib/components/layout/group-box/tru-group-box.d.ts +6 -6
- package/lib/components/layout/row/tru-row-module.d.ts +9 -9
- package/lib/components/layout/row/tru-row.d.ts +6 -6
- package/lib/components/login/classes/tru-auth-config.d.ts +16 -16
- package/lib/components/login/classes/tru-auth-jwt-strategy.d.ts +15 -15
- package/lib/components/login/classes/tru-auth-login-request.d.ts +4 -4
- package/lib/components/login/classes/tru-auth-logout-request.d.ts +3 -3
- package/lib/components/login/classes/tru-auth-session-strategy.d.ts +13 -13
- package/lib/components/login/classes/tru-auth-strategy-provider.d.ts +9 -9
- package/lib/components/login/classes/tru-auth-token.d.ts +6 -6
- package/lib/components/login/classes/tru-auth-user-request.d.ts +3 -3
- package/lib/components/login/services/tru-auth-cache.d.ts +11 -11
- package/lib/components/login/services/tru-auth-interceptor.d.ts +16 -16
- package/lib/components/login/services/tru-auth.d.ts +29 -29
- package/lib/components/login/tru-login-module.d.ts +11 -11
- package/lib/components/login/tru-login.d.ts +21 -21
- package/lib/components/password-dialog/tru-password-dialog-module.d.ts +10 -10
- package/lib/components/password-dialog/tru-password-dialog.d.ts +27 -24
- package/lib/components/toolbar/button/tru-toolbar-button-module.d.ts +11 -11
- package/lib/components/toolbar/button/tru-toolbar-button.d.ts +16 -16
- package/lib/components/toolbar/classes/tru-toolbar-dropdown-option.d.ts +4 -4
- package/lib/components/toolbar/context-filter/tru-toolbar-context-filter-module.d.ts +14 -14
- package/lib/components/toolbar/context-filter/tru-toolbar-context-filter.d.ts +13 -13
- package/lib/components/toolbar/dropdown/tru-toolbar-dropdown-module.d.ts +12 -12
- package/lib/components/toolbar/dropdown/tru-toolbar-dropdown.d.ts +18 -18
- package/lib/components/toolbar/menu/menu-button/tru-toolbar-menu-button-module.d.ts +9 -9
- package/lib/components/toolbar/menu/menu-button/tru-toolbar-menu-button.d.ts +7 -7
- package/lib/components/toolbar/menu/menu-item/tru-toolbar-menu-item-module.d.ts +9 -9
- package/lib/components/toolbar/menu/menu-item/tru-toolbar-menu-item.d.ts +8 -8
- package/lib/components/toolbar/menu/tru-toolbar-menu-module.d.ts +11 -11
- package/lib/components/toolbar/menu/tru-toolbar-menu.d.ts +10 -10
- package/lib/components/toolbar/separator/tru-toolbar-separator-module.d.ts +9 -9
- package/lib/components/toolbar/separator/tru-toolbar-separator.d.ts +6 -6
- package/lib/components/toolbar/text/tru-toolbar-text-module.d.ts +11 -11
- package/lib/components/toolbar/text/tru-toolbar-text.d.ts +12 -12
- package/lib/components/toolbar/tru-toolbar-module.d.ts +16 -16
- package/lib/components/toolbar/tru-toolbar.d.ts +9 -9
- package/lib/components/toolbar/user-profile/tru-toolbar-user-profile-module.d.ts +12 -12
- package/lib/components/toolbar/user-profile/tru-toolbar-user-profile.d.ts +17 -17
- package/lib/components/validation-dialog/tru-validation-dialog-config.d.ts +13 -13
- package/lib/components/validation-dialog/tru-validation-dialog-module.d.ts +9 -9
- package/lib/components/validation-dialog/tru-validation-dialog.d.ts +20 -20
- package/lib/directives/breeze-validator/tru-breeze-validator-module.d.ts +9 -9
- package/lib/directives/breeze-validator/tru-breeze-validator.d.ts +27 -27
- package/lib/directives/search-panel-position-manager/tru-search-panel-position-manager-module.d.ts +9 -9
- package/lib/directives/search-panel-position-manager/tru-search-panel-position-manager.d.ts +40 -40
- package/lib/directives/select-panel/tru-mat-select-panel-module.d.ts +9 -9
- package/lib/directives/select-panel/tru-mat-select-panel.d.ts +17 -17
- package/lib/interfaces/tru-value.d.ts +6 -6
- package/lib/material.module.d.ts +50 -50
- package/lib/services/tru-app-environment.d.ts +57 -57
- package/lib/services/tru-breeze-context-factory.d.ts +32 -32
- package/lib/services/tru-breeze-metadata-provider.d.ts +9 -9
- package/lib/services/tru-component-lookup.d.ts +9 -9
- package/lib/services/tru-connection-hub.d.ts +18 -18
- package/lib/services/tru-context-filters.d.ts +10 -10
- package/lib/services/tru-data-context.d.ts +42 -42
- package/lib/services/tru-entity-accessor.d.ts +46 -46
- package/lib/services/tru-model-property-lookup.d.ts +10 -10
- package/lib/services/tru-predicate-map.d.ts +6 -6
- package/lib/services/tru-search-result-view-manager.d.ts +10 -10
- package/lib/services/tru-sort.d.ts +56 -56
- package/lib/services/tru-table-registry.d.ts +8 -8
- package/lib/services/tru-text-manager.d.ts +68 -68
- package/lib/services/tru-ui-notification.d.ts +36 -36
- package/lib/services/tru-user.d.ts +29 -29
- package/lib/services/tru-util.d.ts +14 -14
- package/lib/tru-common-module.d.ts +6 -6
- package/package.json +5 -11
- package/public-api.d.ts +117 -117
- package/esm2020/lib/base-classes/tru-edit-control-config-base.mjs +0 -4
- package/esm2020/lib/base-classes/tru-entity-base.mjs +0 -13
- package/esm2020/lib/base-classes/tru-list-control-config-base.mjs +0 -4
- package/esm2020/lib/base-classes/tru-search-control-base.mjs +0 -47
- package/esm2020/lib/base-classes/tru-search-control-config-base.mjs +0 -4
- package/esm2020/lib/base-classes/tru-search-control-range-base.mjs +0 -47
- package/esm2020/lib/base-classes/tru-table-config-base.mjs +0 -13
- package/esm2020/lib/base-views/detail/tru-detail-view-base.mjs +0 -76
- package/esm2020/lib/base-views/search/services/tru-search-view-control-event-handler.mjs +0 -27
- package/esm2020/lib/base-views/search/services/tru-search-view-event-handler.mjs +0 -27
- package/esm2020/lib/base-views/search/tru-search-view-base.mjs +0 -63
- package/esm2020/lib/base-views/search-result/tru-search-result-view-base.mjs +0 -51
- package/esm2020/lib/classes/tru-context-filter-choice.mjs +0 -8
- package/esm2020/lib/classes/tru-context-filter.mjs +0 -16
- package/esm2020/lib/classes/tru-data-change-parser.mjs +0 -277
- package/esm2020/lib/classes/tru-data-change.mjs +0 -7
- package/esm2020/lib/classes/tru-merge-data-set.mjs +0 -12
- package/esm2020/lib/classes/tru-merge-data.mjs +0 -17
- package/esm2020/lib/classes/tru-predicate.mjs +0 -47
- package/esm2020/lib/classes/tru-property-config-date.mjs +0 -9
- package/esm2020/lib/classes/tru-property-config-decimal.mjs +0 -11
- package/esm2020/lib/classes/tru-property-config-foreign-key.mjs +0 -10
- package/esm2020/lib/classes/tru-property-config-integer.mjs +0 -9
- package/esm2020/lib/classes/tru-property-config-password.mjs +0 -8
- package/esm2020/lib/classes/tru-property-config-percentage.mjs +0 -9
- package/esm2020/lib/classes/tru-property-config-scientific.mjs +0 -9
- package/esm2020/lib/classes/tru-query-predicate-manager.mjs +0 -49
- package/esm2020/lib/components/confirm-dialog/tru-confirm-dialog.mjs +0 -45
- package/esm2020/lib/components/data-grid/overlays/tru-data-grid-loading-overlay/tru-data-grid-loading-overlay.mjs +0 -39
- package/esm2020/lib/components/data-grid/overlays/tru-data-grid-no-rows-overlay/tru-data-grid-no-rows-overlay.mjs +0 -26
- package/esm2020/lib/components/data-grid/tru-data-grid-module.mjs +0 -67
- package/esm2020/lib/components/data-grid/tru-data-grid.mjs +0 -370
- package/esm2020/lib/components/desktop/classes/tru-desktop-view-config.mjs +0 -21
- package/esm2020/lib/components/desktop/directives/resizable/tru-desktop-resizable.mjs +0 -109
- package/esm2020/lib/components/desktop/menubar/tru-desktop-menubar.mjs +0 -34
- package/esm2020/lib/components/desktop/services/tru-desktop-manager.mjs +0 -84
- package/esm2020/lib/components/desktop/services/tru-desktop-service.mjs +0 -116
- package/esm2020/lib/components/desktop/services/tru-window-action-event-handler.mjs +0 -27
- package/esm2020/lib/components/desktop/services/tru-window-event-args.mjs +0 -26
- package/esm2020/lib/components/desktop/services/tru-window-event-handler.mjs +0 -44
- package/esm2020/lib/components/desktop/statusbar/tru-desktop-statusbar.mjs +0 -18
- package/esm2020/lib/components/desktop/taskbar/tru-desktop-taskbar.mjs +0 -40
- package/esm2020/lib/components/desktop/tru-desktop.mjs +0 -731
- package/esm2020/lib/components/desktop/view/tru-desktop-view.mjs +0 -25
- package/esm2020/lib/components/desktop/viewport/tru-desktop-viewport.mjs +0 -113
- package/esm2020/lib/components/desktop/window/tru-desktop-window.mjs +0 -457
- package/esm2020/lib/components/export-dialog/tru-export-dialog.mjs +0 -57
- package/esm2020/lib/components/layout/form/tru-form.mjs +0 -34
- package/esm2020/lib/components/login/classes/tru-auth-jwt-strategy.mjs +0 -65
- package/esm2020/lib/components/login/classes/tru-auth-session-strategy.mjs +0 -19
- package/esm2020/lib/components/login/services/tru-auth-cache.mjs +0 -22
- package/esm2020/lib/components/login/services/tru-auth-interceptor.mjs +0 -43
- package/esm2020/lib/components/login/services/tru-auth.mjs +0 -81
- package/esm2020/lib/components/login/tru-login-module.mjs +0 -46
- package/esm2020/lib/components/login/tru-login.mjs +0 -58
- package/esm2020/lib/components/password-dialog/tru-password-dialog.mjs +0 -48
- package/esm2020/lib/components/toolbar/button/tru-toolbar-button.mjs +0 -41
- package/esm2020/lib/components/toolbar/context-filter/tru-toolbar-context-filter.mjs +0 -24
- package/esm2020/lib/components/toolbar/dropdown/tru-toolbar-dropdown.mjs +0 -43
- package/esm2020/lib/components/toolbar/menu/menu-button/tru-toolbar-menu-button.mjs +0 -16
- package/esm2020/lib/components/toolbar/menu/menu-item/tru-toolbar-menu-item.mjs +0 -26
- package/esm2020/lib/components/toolbar/menu/tru-toolbar-menu.mjs +0 -33
- package/esm2020/lib/components/toolbar/text/tru-toolbar-text.mjs +0 -28
- package/esm2020/lib/components/toolbar/user-profile/tru-toolbar-user-profile.mjs +0 -35
- package/esm2020/lib/components/validation-dialog/tru-validation-dialog-config.mjs +0 -21
- package/esm2020/lib/components/validation-dialog/tru-validation-dialog.mjs +0 -79
- package/esm2020/lib/directives/breeze-validator/tru-breeze-validator.mjs +0 -100
- package/esm2020/lib/directives/search-panel-position-manager/tru-search-panel-position-manager.mjs +0 -151
- package/esm2020/lib/directives/select-panel/tru-mat-select-panel.mjs +0 -66
- package/esm2020/lib/services/tru-app-environment.mjs +0 -94
- package/esm2020/lib/services/tru-breeze-context-factory.mjs +0 -79
- package/esm2020/lib/services/tru-breeze-metadata-provider.mjs +0 -22
- package/esm2020/lib/services/tru-component-lookup.mjs +0 -25
- package/esm2020/lib/services/tru-connection-hub.mjs +0 -48
- package/esm2020/lib/services/tru-context-filters.mjs +0 -29
- package/esm2020/lib/services/tru-data-context.mjs +0 -258
- package/esm2020/lib/services/tru-entity-accessor.mjs +0 -287
- package/esm2020/lib/services/tru-model-property-lookup.mjs +0 -22
- package/esm2020/lib/services/tru-search-result-view-manager.mjs +0 -17
- package/esm2020/lib/services/tru-sort.mjs +0 -114
- package/esm2020/lib/services/tru-table-registry.mjs +0 -16
- package/esm2020/lib/services/tru-text-manager.mjs +0 -134
- package/esm2020/lib/services/tru-ui-notification.mjs +0 -103
- package/esm2020/lib/services/tru-user.mjs +0 -63
- package/esm2020/lib/services/tru-util.mjs +0 -77
- package/fesm2015/trudb-tru-common-lib.mjs +0 -6803
- package/fesm2015/trudb-tru-common-lib.mjs.map +0 -1
- package/fesm2020/trudb-tru-common-lib.mjs +0 -6780
- package/fesm2020/trudb-tru-common-lib.mjs.map +0 -1
|
@@ -0,0 +1,467 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { TruDataContext } from '../../../services/tru-data-context';
|
|
3
|
+
import { TruEntityAccessor } from '../../../services/tru-entity-accessor';
|
|
4
|
+
import { TruWindowEventHandler } from '../services/tru-window-event-handler';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../../../services/tru-data-context";
|
|
7
|
+
import * as i2 from "../../../services/tru-ui-notification";
|
|
8
|
+
import * as i3 from "../../../services/tru-text-manager";
|
|
9
|
+
import * as i4 from "../services/tru-window-event-handler";
|
|
10
|
+
import * as i5 from "@angular/common";
|
|
11
|
+
import * as i6 from "../directives/resizable/tru-desktop-resizable";
|
|
12
|
+
import * as i7 from "../view/tru-desktop-view";
|
|
13
|
+
import * as i8 from "../../toolbar/tru-toolbar";
|
|
14
|
+
import * as i9 from "../../toolbar/button/tru-toolbar-button";
|
|
15
|
+
import * as i10 from "../../toolbar/separator/tru-toolbar-separator";
|
|
16
|
+
export class TruDesktopWindow {
|
|
17
|
+
dataContext;
|
|
18
|
+
uiNotification;
|
|
19
|
+
textManager;
|
|
20
|
+
truWindowEventHandler;
|
|
21
|
+
elementRef;
|
|
22
|
+
cd;
|
|
23
|
+
window;
|
|
24
|
+
viewportCtrl;
|
|
25
|
+
desktopCtrl;
|
|
26
|
+
constructor(dataContext, uiNotification, textManager, truWindowEventHandler, elementRef, cd) {
|
|
27
|
+
this.dataContext = dataContext;
|
|
28
|
+
this.uiNotification = uiNotification;
|
|
29
|
+
this.textManager = textManager;
|
|
30
|
+
this.truWindowEventHandler = truWindowEventHandler;
|
|
31
|
+
this.elementRef = elementRef;
|
|
32
|
+
this.cd = cd;
|
|
33
|
+
}
|
|
34
|
+
x = 0;
|
|
35
|
+
y = 0;
|
|
36
|
+
lastX = 0;
|
|
37
|
+
lastY = 0;
|
|
38
|
+
startX = 0;
|
|
39
|
+
startY = 0;
|
|
40
|
+
titleBar = null;
|
|
41
|
+
canCloseFn = undefined;
|
|
42
|
+
canNavigateFn;
|
|
43
|
+
cancelEditingOnNavigation = false;
|
|
44
|
+
viewportDimensions = undefined;
|
|
45
|
+
subs = [];
|
|
46
|
+
hasChanges = () => {
|
|
47
|
+
return this.dataContext.hasChanges().length;
|
|
48
|
+
};
|
|
49
|
+
mouseMove = (event) => {
|
|
50
|
+
this.viewportDimensions = this.viewportCtrl.getViewportDimensions();
|
|
51
|
+
if (event.pageX <= 0 ||
|
|
52
|
+
event.pageX >= this.viewportDimensions.width ||
|
|
53
|
+
this.window.maximized)
|
|
54
|
+
return;
|
|
55
|
+
if (this.titleBar == null)
|
|
56
|
+
return;
|
|
57
|
+
//this.elementRef.nativeElement.setAttribute('style', 'opacity: 0.5;');
|
|
58
|
+
this.x = event.screenX - this.startX;
|
|
59
|
+
this.y = event.screenY - this.startY;
|
|
60
|
+
//Top Containment
|
|
61
|
+
this.y = this.y >= 0 ? this.y : 0;
|
|
62
|
+
//Bottom Containment
|
|
63
|
+
this.y = this.y <= this.viewportDimensions.height - this.titleBar.offsetHeight ? this.y : this.viewportDimensions.height - this.titleBar.offsetHeight;
|
|
64
|
+
//Left Containment
|
|
65
|
+
this.x = this.x >= -(this.titleBar.offsetWidth + this.titleBar.offsetLeft) ? this.x : -(this.titleBar.offsetWidth + this.titleBar.offsetLeft);
|
|
66
|
+
//Right Containment
|
|
67
|
+
this.x = this.x <= this.viewportDimensions.width - this.titleBar.offsetLeft ? this.x : this.viewportDimensions.width - this.titleBar.offsetLeft;
|
|
68
|
+
this.window.top = this.y + 'px';
|
|
69
|
+
this.window.left = this.x + 'px';
|
|
70
|
+
};
|
|
71
|
+
mouseUp = (event) => {
|
|
72
|
+
if (event.pageY <= this.desktopCtrl.options.viewportTop) {
|
|
73
|
+
this.desktopCtrl.maximize(this.window);
|
|
74
|
+
}
|
|
75
|
+
if (event.pageX <= 0) {
|
|
76
|
+
this.desktopCtrl.maximizeLeft(this.window);
|
|
77
|
+
}
|
|
78
|
+
this.viewportDimensions = this.viewportCtrl.getViewportDimensions();
|
|
79
|
+
if (event.pageX >= this.viewportDimensions.width - 1) {
|
|
80
|
+
this.desktopCtrl.maximizeRight(this.window);
|
|
81
|
+
}
|
|
82
|
+
//this.elementRef.nativeElement.setAttribute('style', 'opacity: 1.0;');
|
|
83
|
+
document.removeEventListener('mousemove', this.mouseMove);
|
|
84
|
+
document.removeEventListener('mouseup', this.mouseUp);
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* @tru.doc function
|
|
88
|
+
* @name truDesktopWindowComponent.updateNavigationState
|
|
89
|
+
* @module tru.desktop.window
|
|
90
|
+
*
|
|
91
|
+
* @description
|
|
92
|
+
* Updates window navigation buttons based location of the active view in the views array.
|
|
93
|
+
*
|
|
94
|
+
*/
|
|
95
|
+
updateNavigationState = () => {
|
|
96
|
+
if (this.window.views === undefined)
|
|
97
|
+
return;
|
|
98
|
+
var length = this.window.views.length;
|
|
99
|
+
this.disablePrevious = !!(this.window.views[0].active$.getValue() || length === 1);
|
|
100
|
+
this.disableNext = !!(this.window.views[length - 1].active$.getValue() || length === 1);
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* @tru.doc function
|
|
104
|
+
* @name truDesktopWindowComponent.isWindowInViewport
|
|
105
|
+
* @module tru.desktop.window
|
|
106
|
+
*
|
|
107
|
+
* @description
|
|
108
|
+
* Determines if the window is within the viewport boundaries.
|
|
109
|
+
*
|
|
110
|
+
*/
|
|
111
|
+
isWindowInViewport = () => {
|
|
112
|
+
var windowTop = 0;
|
|
113
|
+
var windowLeft = 0;
|
|
114
|
+
if (!this.window.minimized) {
|
|
115
|
+
windowTop = this.elementRef.nativeElement.offsetTop;
|
|
116
|
+
windowLeft = this.elementRef.nativeElement.offsetLeft;
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
windowTop = parseInt(this.window.savedPosition.top, 10);
|
|
120
|
+
windowLeft = parseInt(this.window.savedPosition.left, 10);
|
|
121
|
+
}
|
|
122
|
+
if ((windowTop + 10) >= this.viewportCtrl.getViewportDimensions().height ||
|
|
123
|
+
(windowLeft + 60) >= this.viewportCtrl.getViewportDimensions().width) {
|
|
124
|
+
this.window.outOfBounds = true;
|
|
125
|
+
this.window.active = false;
|
|
126
|
+
this.desktopCtrl.activateForemostWindow();
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
this.window.outOfBounds = false;
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
/**
|
|
133
|
+
* @tru.doc function
|
|
134
|
+
* @name truDesktopWindowComponent.getWindow
|
|
135
|
+
* @module tru.desktop.window
|
|
136
|
+
*
|
|
137
|
+
* @description
|
|
138
|
+
* Gets the window object.
|
|
139
|
+
*
|
|
140
|
+
* @returns {object} window object.
|
|
141
|
+
*/
|
|
142
|
+
getWindow = () => {
|
|
143
|
+
return this.window;
|
|
144
|
+
};
|
|
145
|
+
/**
|
|
146
|
+
* @tru.doc function
|
|
147
|
+
* @name truDesktopWindowComponent.setWindowTitle
|
|
148
|
+
* @module tru.desktop.window
|
|
149
|
+
*
|
|
150
|
+
* @description
|
|
151
|
+
* Sets the window title.
|
|
152
|
+
*
|
|
153
|
+
* @param {string} value to display in the window title bar.
|
|
154
|
+
*/
|
|
155
|
+
setWindowTitle = (value) => {
|
|
156
|
+
this.window.title = value;
|
|
157
|
+
};
|
|
158
|
+
getWindowTitle = () => {
|
|
159
|
+
return this.window.title;
|
|
160
|
+
};
|
|
161
|
+
/**
|
|
162
|
+
* @tru.doc function
|
|
163
|
+
* @name truDesktopWindowComponent.goToPreviousView
|
|
164
|
+
* @module tru.desktop.window
|
|
165
|
+
*
|
|
166
|
+
* @description
|
|
167
|
+
* Public method for navigating to the previous view.
|
|
168
|
+
*
|
|
169
|
+
*/
|
|
170
|
+
goToPreviousView = () => {
|
|
171
|
+
this.previousView();
|
|
172
|
+
};
|
|
173
|
+
/**
|
|
174
|
+
* @tru.doc function
|
|
175
|
+
* @name truDesktopWindowComponent.viewIsEditing
|
|
176
|
+
* @module tru.desktop.window
|
|
177
|
+
*
|
|
178
|
+
* @description
|
|
179
|
+
* Checks whether view is editing.
|
|
180
|
+
*
|
|
181
|
+
* @returns {boolean}.
|
|
182
|
+
*/
|
|
183
|
+
viewIsEditing = () => {
|
|
184
|
+
var isEditing = false;
|
|
185
|
+
this.window.views.forEach((view) => {
|
|
186
|
+
if (view.isEditing === true) {
|
|
187
|
+
isEditing = true;
|
|
188
|
+
}
|
|
189
|
+
}, null);
|
|
190
|
+
return isEditing;
|
|
191
|
+
};
|
|
192
|
+
/**
|
|
193
|
+
* @tru.doc function
|
|
194
|
+
* @name truDesktopWindowComponent.canNavigate
|
|
195
|
+
* @module tru.desktop.window
|
|
196
|
+
*
|
|
197
|
+
* @description
|
|
198
|
+
* Checks whether navigation can occur..
|
|
199
|
+
*
|
|
200
|
+
* @returns {boolean}.
|
|
201
|
+
*/
|
|
202
|
+
canNavigate = () => {
|
|
203
|
+
var canNavigate = true;
|
|
204
|
+
if (this.canNavigateFn !== null) {
|
|
205
|
+
if (this.viewIsEditing()) {
|
|
206
|
+
canNavigate = this.canNavigateFn();
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return canNavigate;
|
|
210
|
+
};
|
|
211
|
+
/**
|
|
212
|
+
* @tru.doc function
|
|
213
|
+
* @name truDesktopWindowComponent.removeForwardViews
|
|
214
|
+
* @module tru.desktop.window
|
|
215
|
+
*
|
|
216
|
+
* @description
|
|
217
|
+
* Removes all view(s) forward of the active view.
|
|
218
|
+
*
|
|
219
|
+
*/
|
|
220
|
+
removeForwardViews = () => {
|
|
221
|
+
var activeView = this.desktopCtrl.getActiveView(this.window);
|
|
222
|
+
var activeViewIndex = this.window.views.indexOf(activeView);
|
|
223
|
+
for (var i = this.window.views.length; i > activeViewIndex; i--) {
|
|
224
|
+
this.window.views.splice(i, 1);
|
|
225
|
+
}
|
|
226
|
+
this.updateNavigationState();
|
|
227
|
+
};
|
|
228
|
+
/**
|
|
229
|
+
* @tru.doc function
|
|
230
|
+
* @name truDesktopWindowComponent.addView
|
|
231
|
+
* @module tru.desktop.window
|
|
232
|
+
*
|
|
233
|
+
* @description
|
|
234
|
+
* Removes all inactive view(s) following the active view and inserts a new view.
|
|
235
|
+
*
|
|
236
|
+
*/
|
|
237
|
+
addView = (viewConfig) => {
|
|
238
|
+
this.removeForwardViews();
|
|
239
|
+
var activeView = this.desktopCtrl.getActiveView(this.window);
|
|
240
|
+
activeView.active(false);
|
|
241
|
+
viewConfig.window = this;
|
|
242
|
+
this.window.views.push(viewConfig);
|
|
243
|
+
this.updateNavigationState();
|
|
244
|
+
};
|
|
245
|
+
/**
|
|
246
|
+
* @tru.doc function
|
|
247
|
+
* @name truDesktopWindowComponent.getGlobals
|
|
248
|
+
* @module tru.desktop.window
|
|
249
|
+
*
|
|
250
|
+
* @description
|
|
251
|
+
* returns the global values.
|
|
252
|
+
*
|
|
253
|
+
*/
|
|
254
|
+
getGlobals = () => {
|
|
255
|
+
return this.window.globals;
|
|
256
|
+
};
|
|
257
|
+
/**
|
|
258
|
+
* @tru.doc function
|
|
259
|
+
* @name truDesktopWindowComponent.firstView
|
|
260
|
+
* @module tru.desktop.window
|
|
261
|
+
*
|
|
262
|
+
* @description
|
|
263
|
+
*
|
|
264
|
+
*/
|
|
265
|
+
firstView = () => {
|
|
266
|
+
if (!this.canNavigate() || this.disablePrevious)
|
|
267
|
+
return;
|
|
268
|
+
if (this.cancelEditingOnNavigation)
|
|
269
|
+
this.desktopCtrl.getActiveView(this.window).isEditing = false;
|
|
270
|
+
let activeView = this.desktopCtrl.getActiveView(this.window);
|
|
271
|
+
activeView.active(false);
|
|
272
|
+
this.window.views[0].active(true);
|
|
273
|
+
this.updateNavigationState();
|
|
274
|
+
};
|
|
275
|
+
/**
|
|
276
|
+
* @tru.doc function
|
|
277
|
+
* @name truDesktopWindowComponent.firstView
|
|
278
|
+
* @module tru.desktop.window
|
|
279
|
+
*
|
|
280
|
+
* @description
|
|
281
|
+
*
|
|
282
|
+
*/
|
|
283
|
+
lastView = () => {
|
|
284
|
+
if (!this.canNavigate() || this.disableNext)
|
|
285
|
+
return;
|
|
286
|
+
if (this.cancelEditingOnNavigation)
|
|
287
|
+
this.desktopCtrl.getActiveView(this.window).isEditing = false;
|
|
288
|
+
let activeView = this.desktopCtrl.getActiveView(this.window);
|
|
289
|
+
activeView.active(false);
|
|
290
|
+
this.window.views[this.window.views.length - 1].active(true);
|
|
291
|
+
this.updateNavigationState();
|
|
292
|
+
};
|
|
293
|
+
;
|
|
294
|
+
resizeEventHandler = () => {
|
|
295
|
+
this.isWindowInViewport();
|
|
296
|
+
};
|
|
297
|
+
/**
|
|
298
|
+
* @tru.doc event
|
|
299
|
+
* @module tru.desktop.window
|
|
300
|
+
*
|
|
301
|
+
* @description
|
|
302
|
+
*
|
|
303
|
+
*/
|
|
304
|
+
onKeydown(event) {
|
|
305
|
+
if (!this.window.active)
|
|
306
|
+
return;
|
|
307
|
+
var keySequence = this.desktopCtrl.getKeySequence(event);
|
|
308
|
+
if (keySequence === 'alt+left') { //Previous View
|
|
309
|
+
this.previousView();
|
|
310
|
+
event.preventDefault();
|
|
311
|
+
}
|
|
312
|
+
if (keySequence === 'alt+right') { //Next View
|
|
313
|
+
this.nextView();
|
|
314
|
+
event.preventDefault();
|
|
315
|
+
}
|
|
316
|
+
if (keySequence === 'alt+up') { //First View
|
|
317
|
+
this.firstView();
|
|
318
|
+
event.preventDefault();
|
|
319
|
+
}
|
|
320
|
+
if (keySequence === 'alt+down') { //Last View
|
|
321
|
+
this.lastView();
|
|
322
|
+
event.preventDefault();
|
|
323
|
+
}
|
|
324
|
+
if (keySequence === 'alt+l') { //Maximize left
|
|
325
|
+
if (!this.window.maximized) {
|
|
326
|
+
this.desktopCtrl.savePosition(this.window);
|
|
327
|
+
this.desktopCtrl.maximizeLeft(this.window);
|
|
328
|
+
}
|
|
329
|
+
else if (this.window.maximized === 'right' || this.window.maximized === 'fill')
|
|
330
|
+
this.desktopCtrl.maximizeLeft(this.window);
|
|
331
|
+
else
|
|
332
|
+
this.desktopCtrl.restoreSavedPosition(this.window);
|
|
333
|
+
event.preventDefault();
|
|
334
|
+
}
|
|
335
|
+
if (keySequence === 'alt+r') { //Maximize right
|
|
336
|
+
if (!this.window.maximized) {
|
|
337
|
+
this.desktopCtrl.savePosition(this.window);
|
|
338
|
+
this.desktopCtrl.maximizeRight(this.window);
|
|
339
|
+
}
|
|
340
|
+
else if (this.window.maximized === 'left' || this.window.maximized === 'fill')
|
|
341
|
+
this.desktopCtrl.maximizeRight(this.window);
|
|
342
|
+
else
|
|
343
|
+
this.desktopCtrl.restoreSavedPosition(this.window);
|
|
344
|
+
event.preventDefault();
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
;
|
|
348
|
+
/**
|
|
349
|
+
* @tru.doc watch
|
|
350
|
+
* @module tru.desktop.window
|
|
351
|
+
*
|
|
352
|
+
* @description
|
|
353
|
+
* Monitors the window's minimized state
|
|
354
|
+
*
|
|
355
|
+
*/
|
|
356
|
+
//$scope.$watch('window.minimized',
|
|
357
|
+
// function(value) {
|
|
358
|
+
// if (value && !$scope.window.maximized) {
|
|
359
|
+
// $scope.desktopCtrl.savePosition($scope.window);
|
|
360
|
+
// }
|
|
361
|
+
//}
|
|
362
|
+
// );
|
|
363
|
+
disablePrevious = true;
|
|
364
|
+
disableNext = true;
|
|
365
|
+
activate = () => {
|
|
366
|
+
if (this.window.outOfBounds)
|
|
367
|
+
return;
|
|
368
|
+
this.desktopCtrl.clearActive();
|
|
369
|
+
this.window.active = true;
|
|
370
|
+
this.window.zIndex = this.desktopCtrl.getNextMaxZIndex();
|
|
371
|
+
};
|
|
372
|
+
minimize = () => {
|
|
373
|
+
this.desktopCtrl.minimize(this.window);
|
|
374
|
+
};
|
|
375
|
+
maximize = () => {
|
|
376
|
+
if (this.window.maximized) {
|
|
377
|
+
this.desktopCtrl.restoreSavedPosition(this.window);
|
|
378
|
+
this.window.maximized = undefined;
|
|
379
|
+
}
|
|
380
|
+
else {
|
|
381
|
+
this.desktopCtrl.savePosition(this.window);
|
|
382
|
+
this.desktopCtrl.maximize(this.window);
|
|
383
|
+
}
|
|
384
|
+
};
|
|
385
|
+
close = () => {
|
|
386
|
+
if (this.hasChanges())
|
|
387
|
+
this.uiNotification.confirm('Confirm Action', this.textManager.msgDirtyPreventsClose, false, true, '', 'Ok').then((confirm) => { });
|
|
388
|
+
else
|
|
389
|
+
this.desktopCtrl.closeWindow(this.window);
|
|
390
|
+
};
|
|
391
|
+
windowTitleMouseDown = (event) => {
|
|
392
|
+
if (this.window.maximized)
|
|
393
|
+
return;
|
|
394
|
+
event.preventDefault();
|
|
395
|
+
this.titleBar = event.srcElement || event.target;
|
|
396
|
+
this.x = this.elementRef.nativeElement.children[0].offsetLeft;
|
|
397
|
+
this.y = this.elementRef.nativeElement.children[0].offsetTop;
|
|
398
|
+
this.startX = event.screenX - this.x;
|
|
399
|
+
this.startY = event.screenY - this.y;
|
|
400
|
+
this.desktopCtrl.savePosition(this.window);
|
|
401
|
+
document.addEventListener('mousemove', this.mouseMove);
|
|
402
|
+
document.addEventListener('mouseup', this.mouseUp);
|
|
403
|
+
window.addEventListener('resize', this.resizeEventHandler);
|
|
404
|
+
};
|
|
405
|
+
previousView = () => {
|
|
406
|
+
if (!this.canNavigate() || this.disablePrevious)
|
|
407
|
+
return;
|
|
408
|
+
var activeView = this.desktopCtrl.getActiveView(this.window);
|
|
409
|
+
var activeViewIndex = this.window.views.indexOf(activeView);
|
|
410
|
+
if (this.cancelEditingOnNavigation)
|
|
411
|
+
activeView.isEditing = false;
|
|
412
|
+
activeView.active(false);
|
|
413
|
+
this.window.views[activeViewIndex - 1].active(true);
|
|
414
|
+
this.updateNavigationState();
|
|
415
|
+
};
|
|
416
|
+
nextView = () => {
|
|
417
|
+
if (!this.canNavigate() || this.disableNext)
|
|
418
|
+
return;
|
|
419
|
+
var activeView = this.desktopCtrl.getActiveView(this.window);
|
|
420
|
+
var activeViewIndex = this.window.views.indexOf(activeView);
|
|
421
|
+
if (this.cancelEditingOnNavigation)
|
|
422
|
+
activeView.isEditing = false;
|
|
423
|
+
activeView.active(false);
|
|
424
|
+
this.window.views[activeViewIndex + 1].active(true);
|
|
425
|
+
this.updateNavigationState();
|
|
426
|
+
};
|
|
427
|
+
save = () => {
|
|
428
|
+
this.dataContext.save();
|
|
429
|
+
};
|
|
430
|
+
revert = () => {
|
|
431
|
+
this.dataContext.revert();
|
|
432
|
+
};
|
|
433
|
+
ngOnInit() {
|
|
434
|
+
this.canCloseFn = this.desktopCtrl.getOptions().canCloseFn;
|
|
435
|
+
this.canNavigateFn = this.desktopCtrl.getOptions().canNavigateFn;
|
|
436
|
+
this.cancelEditingOnNavigation = this.desktopCtrl.getOptions().cancelEditingOnNavigation;
|
|
437
|
+
this.updateNavigationState();
|
|
438
|
+
this.subs.push(this.truWindowEventHandler.onAddView().subscribe((windiowAddViewEvent) => {
|
|
439
|
+
this.addView(windiowAddViewEvent);
|
|
440
|
+
}));
|
|
441
|
+
this.subs.push(this.truWindowEventHandler.onSetWindowTitle().subscribe((windowTitle) => {
|
|
442
|
+
this.setWindowTitle(windowTitle);
|
|
443
|
+
}));
|
|
444
|
+
}
|
|
445
|
+
ngAfterViewInit() {
|
|
446
|
+
this.cd.detectChanges();
|
|
447
|
+
}
|
|
448
|
+
ngOnDestroy() {
|
|
449
|
+
document.removeEventListener('mousemove', this.mouseMove);
|
|
450
|
+
document.removeEventListener('mouseup', this.mouseUp);
|
|
451
|
+
window.removeEventListener('resize', this.resizeEventHandler);
|
|
452
|
+
this.subs.forEach(s => s.unsubscribe());
|
|
453
|
+
}
|
|
454
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: TruDesktopWindow, deps: [{ token: i1.TruDataContext }, { token: i2.TruUiNotification }, { token: i3.TruTextManager }, { token: i4.TruWindowEventHandler }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
455
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.2", type: TruDesktopWindow, selector: "tru-desktop-window", inputs: { window: "window", viewportCtrl: "viewportCtrl", desktopCtrl: "desktopCtrl" }, providers: [TruDataContext, TruEntityAccessor, TruWindowEventHandler], ngImport: i0, template: "<div class=\"desktop-window-container\"\r\n [ngClass]=\"{'desktop-window-active': window.active, 'desktop-window-maximized': window.maximized}\"\r\n [ngStyle]=\"{'z-index': window.zIndex, 'top': window.top, 'left': window.left, 'right': window.right, 'bottom': window.bottom, 'height': window.height, 'width': window.width, 'min-height': window.minHeight, 'minWidth': window.minWidth}\"\r\n [style.offsetLeft.px]=\"x\"\r\n [style.offsetTop.px]=\"y\"\r\n (mousedown)=\"activate()\"\r\n [hidden]=\"window.minimized\">\r\n <div class=\"desktop-window-header\" [ngClass]=\"{'desktop-window-maximized': window.maximized, 'desktop-window-opacity': !window.active}\">\r\n <div class=\"toolbar-window-navigation\">\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-previous-icon'\" [tooltip]=\"'Go Back One View - [Alt + Left]'\" (click)=\"previousView()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-next-icon'\" [tooltip]=\"'Go Forward One View - [Alt + Right]'\" (click)=\"nextView()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-save-icon'\" class=\"desktop-window-save-icon\" [ngClass]=\"{'desktop-window-save-icon-has-changes': hasChanges()}\" [tooltip]=\"'Save - [Ctrl + S]'\" (click)=\"save()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-revert-icon'\" class=\"desktop-window-revert-icon\" [ngClass]=\"{'desktop-window-revert-icon-has-changes': hasChanges()}\" [tooltip]=\"'Revert - [Ctrl + Shift + R]'\" (click)=\"revert()\"></tru-toolbar-button>\r\n <tru-toolbar-separator></tru-toolbar-separator>\r\n </tru-toolbar>\r\n </div>\r\n <div class=\"desktop-window-title\" (dblclick)=\"maximize()\" (mousedown)=\"windowTitleMouseDown($event)\">\r\n <div class=\"desktop-click-through\">\r\n <div class=\"desktop-text\">{{window.title}}</div>\r\n </div>\r\n </div>\r\n <div class=\"desktop-window-action\">\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-minimize-icon'\" [tooltip]=\"'Minimize - [Alt + N]'\" (click)=\"minimize()\"></tru-toolbar-button>\r\n <tru-toolbar-button *ngIf=\"!window.maximized\" [icon]=\"'tru-toolbar-maximize-icon'\" [tooltip]=\"'Maximize Window - [Alt + M]'\" (click)=\"maximize()\" class=\"maximize\"></tru-toolbar-button>\r\n <tru-toolbar-button *ngIf=\"window.maximized\" [icon]=\"'tru-toolbar-restore-icon'\" [tooltip]=\"'Restore Window - [Alt + M]'\" (click)=\"maximize()\" class=\"maximize\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-close-icon'\" [tooltip]=\"'Close Window - [Alt + SHIFT + X]'\" (click)=\"close()\"></tru-toolbar-button>\r\n </tru-toolbar>\r\n </div>\r\n </div>\r\n <fieldset ng-disabled=\"!window.active\" class=\"desktop-window-fieldset\" [ngClass]=\"{'desktop-window-opacity': !window.active}\">\r\n <div class=\"desktop-window-content\">\r\n <div *ngFor=\"let view of window.views\">\r\n <tru-desktop-view [view]=\"view\" [hidden]=\"!view.active\"><ng-template></ng-template></tru-desktop-view>\r\n </div>\r\n </div>\r\n </fieldset>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-nw\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'nw'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-ne\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'ne'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-sw\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'sw'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-se\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'se'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-n\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'n'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-s\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'s'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-w\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'w'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-e\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'e'\"></span>\r\n</div>\r\n", styles: ["body{-webkit-user-select:none;user-select:none}input,textarea{-moz-user-select:text}.desktop-text{-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0);font-size:14px;line-height:1;color:#333}.desktop-wrapper{position:absolute!important;inset:0;background:#ffffff;overflow:hidden}.desktop-relative{position:relative}.desktop-display-none{display:none}.desktop-click-through{pointer-events:none}.desktop-menubar-container{position:absolute!important;top:0;left:0;right:0;height:26px;background:#f8f8f8;border-bottom:1px solid #e7e7e7;padding-left:5px}\n", ".desktop-window-container{position:absolute!important;background-color:#fff;background-clip:padding-box;border-radius:0;box-shadow:0 5px 10px #0003;border:1px solid #e7e7e7}.desktop-window-header{position:absolute!important;top:0;left:0;right:0;height:27px;background:#ffffff;border-top-left-radius:0;border-top-right-radius:0;border-bottom:1px solid #e7e7e7}.desktop-window-content{position:absolute!important;inset:27px 0 0;background:#ffffff;overflow:hidden}.desktop-window-busy-overlay{position:absolute!important;inset:27px 0 0;background:#fff;overflow:hidden;z-index:1000;background-repeat:no-repeat;background-position:center center}.desktop-window-fieldset{padding:0;margin:0;border:0}.desktop-window-statusbar{position:absolute!important;left:0;right:0;bottom:0;height:23px;background:#fff;border-bottom-left-radius:0;border-bottom-right-radius:0;border-top:1px solid #e7e7e7}.desktop-window-statusbar-container{position:absolute;top:1px;left:2px;right:0}.desktop-window-navigation{position:absolute!important;top:0;left:0;bottom:0;width:105px;background:transparent}.desktop-window-navigation-button-group{position:absolute!important;left:0;padding:0;margin:0}.desktop-window-navigation-button-group button{margin-left:0!important}.desktop-window-navigation-button-group-split{position:absolute!important;top:2px;right:6px}.desktop-window-title{position:absolute!important;inset:0 80px 0 110px;height:27px;background:transparent;cursor:inherit;outline:0;margin-top:2px}.desktop-window-title-hidden-nav{left:5px!important}.desktop-window-title-hidden-nav-with-buttons{left:55px!important}.desktop-window-title>div{position:absolute!important;top:5px;left:3px;cursor:default}.desktop-window-title>div>div{font-size:14px;font-weight:700}.desktop-window-action{position:absolute!important;top:0;right:0;bottom:0;width:80px;background:transparent}.desktop-window-action-button-group{position:absolute!important;top:2px;right:6px}.desktop-window-action .desktop-window-navigation-button-group{left:unset!important;right:0!important}.desktop-window-opacity{opacity:.5}.desktop-window-close-button:hover{background-color:maroon;color:#fff}.desktop-window-active{border:1px solid #6b6b6b!important;box-shadow:0 5px 10px #0006}.desktop-window-maximized{border-radius:0;box-shadow:0 0 #0000;border-top-color:#f8f8f8!important;border-bottom-color:#f8f8f8!important}.desktop-window-is-dirty{display:block;float:left;height:15px;width:15px;font-size:15px;color:orange;margin-left:3px}.desktop-window-is-invalid{display:block;float:left;height:15px;width:15px;font-size:15px;color:red;margin-left:3px}.desktop-window-resizable-nw{position:absolute!important;overflow:hidden;width:10px;height:10px;left:-5px;top:-5px;z-index:103;cursor:nw-resize;opacity:0}.desktop-window-resizable-ne{position:absolute!important;overflow:hidden;width:10px;height:10px;right:-5px;top:-5px;z-index:103;cursor:ne-resize;opacity:0}.desktop-window-resizable-sw{position:absolute!important;overflow:hidden;width:10px;height:10px;left:-5px;bottom:-5px;z-index:103;cursor:sw-resize;opacity:0}.desktop-window-resizable-se{position:absolute!important;overflow:hidden;width:10px;height:10px;right:-5px;bottom:-5px;z-index:103;cursor:se-resize;opacity:0}.desktop-window-resizable-n{position:absolute!important;top:0;left:10px;right:10px;overflow:hidden;height:5px;z-index:102;cursor:s-resize;opacity:0;margin-top:-5px}.desktop-window-resizable-s{position:absolute!important;left:10px;right:10px;bottom:0;overflow:hidden;height:5px;z-index:102;cursor:s-resize;opacity:0;margin-bottom:-5px}.desktop-window-resizable-w{position:absolute!important;top:10px;left:0;bottom:10px;overflow:hidden;width:5px;z-index:102;cursor:w-resize;opacity:0;margin-left:-5px}.desktop-window-resizable-e{position:absolute!important;top:10px;right:0;bottom:10px;overflow:hidden;width:5px;z-index:102;cursor:e-resize;opacity:0;margin-right:-5px}div.desktop-window-resizable-handle{display:none!important;visibility:hidden!important}.desktop-window-save-icon,.desktop-window-revert-icon{opacity:.5}.desktop-window-save-icon-has-changes,.desktop-window-revert-icon-has-changes{opacity:1}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i6.TruDesktopResizable, selector: "[tru-desktop-resizable]", inputs: ["window", "maximized", "direction"] }, { kind: "component", type: i7.TruDesktopView, selector: "tru-desktop-view", inputs: ["view"] }, { kind: "component", type: i8.TruToolbar, selector: "tru-toolbar", inputs: ["config"] }, { kind: "component", type: i9.TruToolbarButton, selector: "tru-toolbar-button", inputs: ["config", "icon", "text", "disabled", "tooltip", "type"], outputs: ["onClick", "onKeydown"] }, { kind: "component", type: i10.TruToolbarSeparator, selector: "tru-toolbar-separator" }] });
|
|
456
|
+
}
|
|
457
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: TruDesktopWindow, decorators: [{
|
|
458
|
+
type: Component,
|
|
459
|
+
args: [{ selector: 'tru-desktop-window', providers: [TruDataContext, TruEntityAccessor, TruWindowEventHandler], template: "<div class=\"desktop-window-container\"\r\n [ngClass]=\"{'desktop-window-active': window.active, 'desktop-window-maximized': window.maximized}\"\r\n [ngStyle]=\"{'z-index': window.zIndex, 'top': window.top, 'left': window.left, 'right': window.right, 'bottom': window.bottom, 'height': window.height, 'width': window.width, 'min-height': window.minHeight, 'minWidth': window.minWidth}\"\r\n [style.offsetLeft.px]=\"x\"\r\n [style.offsetTop.px]=\"y\"\r\n (mousedown)=\"activate()\"\r\n [hidden]=\"window.minimized\">\r\n <div class=\"desktop-window-header\" [ngClass]=\"{'desktop-window-maximized': window.maximized, 'desktop-window-opacity': !window.active}\">\r\n <div class=\"toolbar-window-navigation\">\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-previous-icon'\" [tooltip]=\"'Go Back One View - [Alt + Left]'\" (click)=\"previousView()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-next-icon'\" [tooltip]=\"'Go Forward One View - [Alt + Right]'\" (click)=\"nextView()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-save-icon'\" class=\"desktop-window-save-icon\" [ngClass]=\"{'desktop-window-save-icon-has-changes': hasChanges()}\" [tooltip]=\"'Save - [Ctrl + S]'\" (click)=\"save()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-revert-icon'\" class=\"desktop-window-revert-icon\" [ngClass]=\"{'desktop-window-revert-icon-has-changes': hasChanges()}\" [tooltip]=\"'Revert - [Ctrl + Shift + R]'\" (click)=\"revert()\"></tru-toolbar-button>\r\n <tru-toolbar-separator></tru-toolbar-separator>\r\n </tru-toolbar>\r\n </div>\r\n <div class=\"desktop-window-title\" (dblclick)=\"maximize()\" (mousedown)=\"windowTitleMouseDown($event)\">\r\n <div class=\"desktop-click-through\">\r\n <div class=\"desktop-text\">{{window.title}}</div>\r\n </div>\r\n </div>\r\n <div class=\"desktop-window-action\">\r\n <tru-toolbar>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-minimize-icon'\" [tooltip]=\"'Minimize - [Alt + N]'\" (click)=\"minimize()\"></tru-toolbar-button>\r\n <tru-toolbar-button *ngIf=\"!window.maximized\" [icon]=\"'tru-toolbar-maximize-icon'\" [tooltip]=\"'Maximize Window - [Alt + M]'\" (click)=\"maximize()\" class=\"maximize\"></tru-toolbar-button>\r\n <tru-toolbar-button *ngIf=\"window.maximized\" [icon]=\"'tru-toolbar-restore-icon'\" [tooltip]=\"'Restore Window - [Alt + M]'\" (click)=\"maximize()\" class=\"maximize\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-close-icon'\" [tooltip]=\"'Close Window - [Alt + SHIFT + X]'\" (click)=\"close()\"></tru-toolbar-button>\r\n </tru-toolbar>\r\n </div>\r\n </div>\r\n <fieldset ng-disabled=\"!window.active\" class=\"desktop-window-fieldset\" [ngClass]=\"{'desktop-window-opacity': !window.active}\">\r\n <div class=\"desktop-window-content\">\r\n <div *ngFor=\"let view of window.views\">\r\n <tru-desktop-view [view]=\"view\" [hidden]=\"!view.active\"><ng-template></ng-template></tru-desktop-view>\r\n </div>\r\n </div>\r\n </fieldset>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-nw\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'nw'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-ne\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'ne'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-sw\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'sw'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-se\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'se'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-n\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'n'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-s\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'s'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-w\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'w'\"></span>\r\n <span class=\"desktop-window-resizable-handle desktop-window-resizable-e\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'e'\"></span>\r\n</div>\r\n", styles: ["body{-webkit-user-select:none;user-select:none}input,textarea{-moz-user-select:text}.desktop-text{-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0);font-size:14px;line-height:1;color:#333}.desktop-wrapper{position:absolute!important;inset:0;background:#ffffff;overflow:hidden}.desktop-relative{position:relative}.desktop-display-none{display:none}.desktop-click-through{pointer-events:none}.desktop-menubar-container{position:absolute!important;top:0;left:0;right:0;height:26px;background:#f8f8f8;border-bottom:1px solid #e7e7e7;padding-left:5px}\n", ".desktop-window-container{position:absolute!important;background-color:#fff;background-clip:padding-box;border-radius:0;box-shadow:0 5px 10px #0003;border:1px solid #e7e7e7}.desktop-window-header{position:absolute!important;top:0;left:0;right:0;height:27px;background:#ffffff;border-top-left-radius:0;border-top-right-radius:0;border-bottom:1px solid #e7e7e7}.desktop-window-content{position:absolute!important;inset:27px 0 0;background:#ffffff;overflow:hidden}.desktop-window-busy-overlay{position:absolute!important;inset:27px 0 0;background:#fff;overflow:hidden;z-index:1000;background-repeat:no-repeat;background-position:center center}.desktop-window-fieldset{padding:0;margin:0;border:0}.desktop-window-statusbar{position:absolute!important;left:0;right:0;bottom:0;height:23px;background:#fff;border-bottom-left-radius:0;border-bottom-right-radius:0;border-top:1px solid #e7e7e7}.desktop-window-statusbar-container{position:absolute;top:1px;left:2px;right:0}.desktop-window-navigation{position:absolute!important;top:0;left:0;bottom:0;width:105px;background:transparent}.desktop-window-navigation-button-group{position:absolute!important;left:0;padding:0;margin:0}.desktop-window-navigation-button-group button{margin-left:0!important}.desktop-window-navigation-button-group-split{position:absolute!important;top:2px;right:6px}.desktop-window-title{position:absolute!important;inset:0 80px 0 110px;height:27px;background:transparent;cursor:inherit;outline:0;margin-top:2px}.desktop-window-title-hidden-nav{left:5px!important}.desktop-window-title-hidden-nav-with-buttons{left:55px!important}.desktop-window-title>div{position:absolute!important;top:5px;left:3px;cursor:default}.desktop-window-title>div>div{font-size:14px;font-weight:700}.desktop-window-action{position:absolute!important;top:0;right:0;bottom:0;width:80px;background:transparent}.desktop-window-action-button-group{position:absolute!important;top:2px;right:6px}.desktop-window-action .desktop-window-navigation-button-group{left:unset!important;right:0!important}.desktop-window-opacity{opacity:.5}.desktop-window-close-button:hover{background-color:maroon;color:#fff}.desktop-window-active{border:1px solid #6b6b6b!important;box-shadow:0 5px 10px #0006}.desktop-window-maximized{border-radius:0;box-shadow:0 0 #0000;border-top-color:#f8f8f8!important;border-bottom-color:#f8f8f8!important}.desktop-window-is-dirty{display:block;float:left;height:15px;width:15px;font-size:15px;color:orange;margin-left:3px}.desktop-window-is-invalid{display:block;float:left;height:15px;width:15px;font-size:15px;color:red;margin-left:3px}.desktop-window-resizable-nw{position:absolute!important;overflow:hidden;width:10px;height:10px;left:-5px;top:-5px;z-index:103;cursor:nw-resize;opacity:0}.desktop-window-resizable-ne{position:absolute!important;overflow:hidden;width:10px;height:10px;right:-5px;top:-5px;z-index:103;cursor:ne-resize;opacity:0}.desktop-window-resizable-sw{position:absolute!important;overflow:hidden;width:10px;height:10px;left:-5px;bottom:-5px;z-index:103;cursor:sw-resize;opacity:0}.desktop-window-resizable-se{position:absolute!important;overflow:hidden;width:10px;height:10px;right:-5px;bottom:-5px;z-index:103;cursor:se-resize;opacity:0}.desktop-window-resizable-n{position:absolute!important;top:0;left:10px;right:10px;overflow:hidden;height:5px;z-index:102;cursor:s-resize;opacity:0;margin-top:-5px}.desktop-window-resizable-s{position:absolute!important;left:10px;right:10px;bottom:0;overflow:hidden;height:5px;z-index:102;cursor:s-resize;opacity:0;margin-bottom:-5px}.desktop-window-resizable-w{position:absolute!important;top:10px;left:0;bottom:10px;overflow:hidden;width:5px;z-index:102;cursor:w-resize;opacity:0;margin-left:-5px}.desktop-window-resizable-e{position:absolute!important;top:10px;right:0;bottom:10px;overflow:hidden;width:5px;z-index:102;cursor:e-resize;opacity:0;margin-right:-5px}div.desktop-window-resizable-handle{display:none!important;visibility:hidden!important}.desktop-window-save-icon,.desktop-window-revert-icon{opacity:.5}.desktop-window-save-icon-has-changes,.desktop-window-revert-icon-has-changes{opacity:1}\n"] }]
|
|
460
|
+
}], ctorParameters: () => [{ type: i1.TruDataContext }, { type: i2.TruUiNotification }, { type: i3.TruTextManager }, { type: i4.TruWindowEventHandler }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], propDecorators: { window: [{
|
|
461
|
+
type: Input
|
|
462
|
+
}], viewportCtrl: [{
|
|
463
|
+
type: Input
|
|
464
|
+
}], desktopCtrl: [{
|
|
465
|
+
type: Input
|
|
466
|
+
}] } });
|
|
467
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWRlc2t0b3Atd2luZG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1LWNvbW1vbi1saWIvc3JjL2xpYi9jb21wb25lbnRzL2Rlc2t0b3Avd2luZG93L3RydS1kZXNrdG9wLXdpbmRvdy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9kZXNrdG9wL3dpbmRvdy90cnUtZGVza3RvcC13aW5kb3cuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUF5QixLQUFLLEVBQWlDLE1BQU0sZUFBZSxDQUFDO0FBRXZHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUkxRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7Ozs7Ozs7O0FBUTdFLE1BQU0sT0FBTyxnQkFBZ0I7SUFNakI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBVkQsTUFBTSxDQUFNO0lBQ1osWUFBWSxDQUFNO0lBQ2xCLFdBQVcsQ0FBTTtJQUUxQixZQUNVLFdBQTJCLEVBQzNCLGNBQWlDLEVBQ2pDLFdBQTJCLEVBQzNCLHFCQUE0QyxFQUM1QyxVQUFzQixFQUN0QixFQUFxQjtRQUxyQixnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFDM0IsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ2pDLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7SUFDL0IsQ0FBQztJQUVELENBQUMsR0FBRyxDQUFDLENBQUM7SUFDTixDQUFDLEdBQUcsQ0FB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O0lBRUQsV0FBVztRQUNULFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFELFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXRELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFOUQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDO3VHQTNjVSxnQkFBZ0I7MkZBQWhCLGdCQUFnQixxSUFGaEIsQ0FBQyxjQUFjLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLENBQUMsMEJDYnZFLHVoSkErQ0E7OzJGRGhDYSxnQkFBZ0I7a0JBTjVCLFNBQVM7K0JBQ0Usb0JBQW9CLGFBR25CLENBQUMsY0FBYyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixDQUFDOzZPQUc1RCxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIElucHV0LCBFbGVtZW50UmVmLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVHJ1RGF0YUNvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90cnUtZGF0YS1jb250ZXh0JztcbmltcG9ydCB7IFRydUVudGl0eUFjY2Vzc29yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdHJ1LWVudGl0eS1hY2Nlc3Nvcic7XHJcbmltcG9ydCB7IFRydVRleHRNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdHJ1LXRleHQtbWFuYWdlcic7XHJcbmltcG9ydCB7IFRydVVpTm90aWZpY2F0aW9uIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdHJ1LXVpLW5vdGlmaWNhdGlvbic7XHJcbmltcG9ydCB7IFRydURlc2t0b3BWaWV3Q29uZmlnIH0gZnJvbSAnLi4vY2xhc3Nlcy90cnUtZGVza3RvcC12aWV3LWNvbmZpZyc7XHJcbmltcG9ydCB7IFRydVdpbmRvd0V2ZW50SGFuZGxlciB9IGZyb20gJy4uL3NlcnZpY2VzL3RydS13aW5kb3ctZXZlbnQtaGFuZGxlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RydS1kZXNrdG9wLXdpbmRvdycsXG4gIHRlbXBsYXRlVXJsOiAnLi90cnUtZGVza3RvcC13aW5kb3cuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuLi90cnUtZGVza3RvcC5jc3MnLCAnLi90cnUtZGVza3RvcC13aW5kb3cuY3NzJ10sXG4gIHByb3ZpZGVyczogW1RydURhdGFDb250ZXh0LCBUcnVFbnRpdHlBY2Nlc3NvciwgVHJ1V2luZG93RXZlbnRIYW5kbGVyXVxufSlcbmV4cG9ydCBjbGFzcyBUcnVEZXNrdG9wV2luZG93IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgd2luZG93OiBhbnk7XG4gIEBJbnB1dCgpIHZpZXdwb3J0Q3RybDogYW55O1xuICBASW5wdXQoKSBkZXNrdG9wQ3RybDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGF0YUNvbnRleHQ6IFRydURhdGFDb250ZXh0LFxuICAgIHByaXZhdGUgdWlOb3RpZmljYXRpb246IFRydVVpTm90aWZpY2F0aW9uLFxuICAgIHByaXZhdGUgdGV4dE1hbmFnZXI6IFRydVRleHRNYW5hZ2VyLFxuICAgIHByaXZhdGUgdHJ1V2luZG93RXZlbnRIYW5kbGVyOiBUcnVXaW5kb3dFdmVudEhhbmRsZXIsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gIH1cblxuICB4ID0gMDtcbiAgeSA9IDA7XG4gIGxhc3RYID0gMDtcbiAgbGFzdFkgPSAwO1xuICBzdGFydFggPSAwO1xuICBzdGFydFkgPSAwO1xuICB0aXRsZUJhcjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgY2FuQ2xvc2VGbiA9IHVuZGVmaW5lZDtcbiAgY2FuTmF2aWdhdGVGbiE6ICgpID0+IGJvb2xlYW47XG4gIGNhbmNlbEVkaXRpbmdPbk5hdmlnYXRpb24gPSBmYWxzZTtcbiAgdmlld3BvcnREaW1lbnNpb25zOiBhbnkgPSB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBzdWJzOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XG5cbiAgaGFzQ2hhbmdlcyA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhQ29udGV4dC5oYXNDaGFuZ2VzKCkubGVuZ3RoO1xyXG4gIH1cblxuICBtb3VzZU1vdmUgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcblxuICAgIHRoaXMudmlld3BvcnREaW1lbnNpb25zID0gdGhpcy52aWV3cG9ydEN0cmwuZ2V0Vmlld3BvcnREaW1lbnNpb25zKCk7XG4gICAgaWYgKGV2ZW50LnBhZ2VYIDw9IDAgfHxcbiAgICAgIGV2ZW50LnBhZ2VYID49IHRoaXMudmlld3BvcnREaW1lbnNpb25zLndpZHRoIHx8XG4gICAgICB0aGlzLndpbmRvdy5tYXhpbWl6ZWQpIHJldHVybjtcblxuICAgIGlmICh0aGlzLnRpdGxlQmFyID09IG51bGwpIHJldHVybjtcblxuICAgIC8vdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdzdHlsZScsICdvcGFjaXR5OiAwLjU7Jyk7XG4gICAgdGhpcy54ID0gZXZlbnQuc2NyZWVuWCAtIHRoaXMuc3RhcnRYO1xuICAgIHRoaXMueSA9IGV2ZW50LnNjcmVlblkgLSB0aGlzLnN0YXJ0WTtcblxuICAgIC8vVG9wIENvbnRhaW5tZW50XG4gICAgdGhpcy55ID0gdGhpcy55ID49IDAgPyB0aGlzLnkgOiAwO1xuICAgIC8vQm90dG9tIENvbnRhaW5tZW50XG4gICAgdGhpcy55ID0gdGhpcy55IDw9IHRoaXMudmlld3BvcnREaW1lbnNpb25zLmhlaWdodCAtIHRoaXMudGl0bGVCYXIub2Zmc2V0SGVpZ2h0ID8gdGhpcy55IDogdGhpcy52aWV3cG9ydERpbWVuc2lvbnMuaGVpZ2h0IC0gdGhpcy50aXRsZUJhci5vZmZzZXRIZWlnaHQ7XG5cbiAgICAvL0xlZnQgQ29udGFpbm1lbnRcbiAgICB0aGlzLnggPSB0aGlzLnggPj0gLSh0aGlzLnRpdGxlQmFyLm9mZnNldFdpZHRoICsgdGhpcy50aXRsZUJhci5vZmZzZXRMZWZ0KSA/IHRoaXMueCA6IC0odGhpcy50aXRsZUJhci5vZmZzZXRXaWR0aCArIHRoaXMudGl0bGVCYXIub2Zmc2V0TGVmdCk7XG4gICAgLy9SaWdodCBDb250YWlubWVudFxuICAgIHRoaXMueCA9IHRoaXMueCA8PSB0aGlzLnZpZXdwb3J0RGltZW5zaW9ucy53aWR0aCAtIHRoaXMudGl0bGVCYXIub2Zmc2V0TGVmdCA/IHRoaXMueCA6IHRoaXMudmlld3BvcnREaW1lbnNpb25zLndpZHRoIC0gdGhpcy50aXRsZUJhci5vZmZzZXRMZWZ0O1xuXG4gICAgdGhpcy53aW5kb3cudG9wID0gdGhpcy55ICsgJ3B4JztcbiAgICB0aGlzLndpbmRvdy5sZWZ0ID0gdGhpcy54ICsgJ3B4JztcbiAgfTtcblxuICBtb3VzZVVwID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LnBhZ2VZIDw9IHRoaXMuZGVza3RvcEN0cmwub3B0aW9ucy52aWV3cG9ydFRvcCkge1xuICAgICAgdGhpcy5kZXNrdG9wQ3RybC5tYXhpbWl6ZSh0aGlzLndpbmRvdyk7XG4gICAgfVxuICAgIGlmIChldmVudC5wYWdlWCA8PSAwKSB7XG4gICAgICB0aGlzLmRlc2t0b3BDdHJsLm1heGltaXplTGVmdCh0aGlzLndpbmRvdyk7XG4gICAgfVxuICAgIHRoaXMudmlld3BvcnREaW1lbnNpb25zID0gdGhpcy52aWV3cG9ydEN0cmwuZ2V0Vmlld3BvcnREaW1lbnNpb25zKCk7XG4gICAgaWYgKGV2ZW50LnBhZ2VYID49IHRoaXMudmlld3BvcnREaW1lbnNpb25zLndpZHRoIC0gMSkge1xuICAgICAgdGhpcy5kZXNrdG9wQ3RybC5tYXhpbWl6ZVJpZ2h0KHRoaXMud2luZG93KTtcbiAgICB9XG5cbiAgICAvL3RoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnb3BhY2l0eTogMS4wOycpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMubW91c2VNb3ZlKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5tb3VzZVVwKTtcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcFdpbmRvd0NvbXBvbmVudC51cGRhdGVOYXZpZ2F0aW9uU3RhdGVcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcC53aW5kb3dcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFVwZGF0ZXMgd2luZG93IG5hdmlnYXRpb24gYnV0dG9ucyBiYXNlZCBsb2NhdGlvbiBvZiB0aGUgYWN0aXZlIHZpZXcgaW4gdGhlIHZpZXdzIGFycmF5LlxuICAgKlxuICAgKi9cbiAgdXBkYXRlTmF2aWdhdGlvblN0YXRlID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLndpbmRvdy52aWV3cyA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMud2luZG93LnZpZXdzLmxlbmd0aDtcbiAgICB0aGlzLmRpc2FibGVQcmV2aW91cyA9ICEhKHRoaXMud2luZG93LnZpZXdzWzBdLmFjdGl2ZSQuZ2V0VmFsdWUoKSB8fCBsZW5ndGggPT09IDEpO1xuICAgIHRoaXMuZGlzYWJsZU5leHQgPSAhISh0aGlzLndpbmRvdy52aWV3c1tsZW5ndGggLSAxXS5hY3RpdmUkLmdldFZhbHVlKCkgfHwgbGVuZ3RoID09PSAxKTtcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcFdpbmRvd0NvbXBvbmVudC5pc1dpbmRvd0luVmlld3BvcnRcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcC53aW5kb3dcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERldGVybWluZXMgaWYgdGhlIHdpbmRvdyBpcyB3aXRoaW4gdGhlIHZpZXdwb3J0IGJvdW5kYXJpZXMuXG4gICAqXG4gICAqL1xuICBpc1dpbmRvd0luVmlld3BvcnQgPSAoKSA9PiB7XG4gICAgdmFyIHdpbmRvd1RvcCA9IDA7XG4gICAgdmFyIHdpbmRvd0xlZnQgPSAwO1xuICAgIGlmICghdGhpcy53aW5kb3cubWluaW1pemVkKSB7XG4gICAgICB3aW5kb3dUb3AgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICB3aW5kb3dMZWZ0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdDtcbiAgICB9IGVsc2Uge1xuICAgICAgd2luZG93VG9wID0gcGFyc2VJbnQodGhpcy53aW5kb3cuc2F2ZWRQb3NpdGlvbi50b3AsIDEwKTtcbiAgICAgIHdpbmRvd0xlZnQgPSBwYXJzZUludCh0aGlzLndpbmRvdy5zYXZlZFBvc2l0aW9uLmxlZnQsIDEwKTtcbiAgICB9XG4gICAgaWYgKCh3aW5kb3dUb3AgKyAxMCkgPj0gdGhpcy52aWV3cG9ydEN0cmwuZ2V0Vmlld3BvcnREaW1lbnNpb25zKCkuaGVpZ2h0IHx8XG4gICAgICAod2luZG93TGVmdCArIDYwKSA+PSB0aGlzLnZpZXdwb3J0Q3RybC5nZXRWaWV3cG9ydERpbWVuc2lvbnMoKS53aWR0aCkge1xuICAgICAgdGhpcy53aW5kb3cub3V0T2ZCb3VuZHMgPSB0cnVlO1xuICAgICAgdGhpcy53aW5kb3cuYWN0aXZlID0gZmFsc2U7XG4gICAgICB0aGlzLmRlc2t0b3BDdHJsLmFjdGl2YXRlRm9yZW1vc3RXaW5kb3coKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53aW5kb3cub3V0T2ZCb3VuZHMgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BXaW5kb3dDb21wb25lbnQuZ2V0V2luZG93XG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3Aud2luZG93XG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBHZXRzIHRoZSB3aW5kb3cgb2JqZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSB3aW5kb3cgb2JqZWN0LlxuICAgKi9cbiAgZ2V0V2luZG93ID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLndpbmRvdztcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcFdpbmRvd0NvbXBvbmVudC5zZXRXaW5kb3dUaXRsZVxuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wLndpbmRvd1xuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyB0aGUgd2luZG93IHRpdGxlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgdG8gZGlzcGxheSBpbiB0aGUgd2luZG93IHRpdGxlIGJhci5cbiAgICovXG4gIHNldFdpbmRvd1RpdGxlID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLndpbmRvdy50aXRsZSA9IHZhbHVlO1xuICB9O1xuXG4gIGdldFdpbmRvd1RpdGxlID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLndpbmRvdy50aXRsZTtcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcFdpbmRvd0NvbXBvbmVudC5nb1RvUHJldmlvdXNWaWV3XG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3Aud2luZG93XG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBQdWJsaWMgbWV0aG9kIGZvciBuYXZpZ2F0aW5nIHRvIHRoZSBwcmV2aW91cyB2aWV3LlxuICAgKlxuICAgKi9cbiAgZ29Ub1ByZXZpb3VzVmlldyA9ICgpID0+IHtcbiAgICB0aGlzLnByZXZpb3VzVmlldygpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wV2luZG93Q29tcG9uZW50LnZpZXdJc0VkaXRpbmdcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcC53aW5kb3dcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIENoZWNrcyB3aGV0aGVyIHZpZXcgaXMgZWRpdGluZy5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59LlxuICAgKi9cbiAgdmlld0lzRWRpdGluZyA9ICgpID0+IHtcbiAgICB2YXIgaXNFZGl0aW5nID0gZmFsc2U7XG4gICAgdGhpcy53aW5kb3cudmlld3MuZm9yRWFjaCgodmlldzogYW55KSA9PiB7XG4gICAgICBpZiAodmlldy5pc0VkaXRpbmcgPT09IHRydWUpIHtcbiAgICAgICAgaXNFZGl0aW5nID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LCBudWxsKTtcbiAgICByZXR1cm4gaXNFZGl0aW5nO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wV2luZG93Q29tcG9uZW50LmNhbk5hdmlnYXRlXG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3Aud2luZG93XG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBDaGVja3Mgd2hldGhlciBuYXZpZ2F0aW9uIGNhbiBvY2N1ci4uXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufS5cbiAgICovXG4gIGNhbk5hdmlnYXRlID0gKCkgPT4ge1xuICAgIHZhciBjYW5OYXZpZ2F0ZSA9IHRydWU7XG4gICAgaWYgKHRoaXMuY2FuTmF2aWdhdGVGbiAhPT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMudmlld0lzRWRpdGluZygpKSB7XG4gICAgICAgIGNhbk5hdmlnYXRlID0gdGhpcyEuY2FuTmF2aWdhdGVGbigpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2FuTmF2aWdhdGU7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BXaW5kb3dDb21wb25lbnQucmVtb3ZlRm9yd2FyZFZpZXdzXG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3Aud2luZG93XG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBSZW1vdmVzIGFsbCB2aWV3KHMpIGZvcndhcmQgb2YgdGhlIGFjdGl2ZSB2aWV3LlxuICAgKlxuICAgKi9cbiAgcmVtb3ZlRm9yd2FyZFZpZXdzID0gKCkgPT4ge1xuICAgIHZhciBhY3RpdmVWaWV3ID0gdGhpcy5kZXNrdG9wQ3RybC5nZXRBY3RpdmVWaWV3KHRoaXMud2luZG93KTtcbiAgICB2YXIgYWN0aXZlVmlld0luZGV4ID0gdGhpcy53aW5kb3cudmlld3MuaW5kZXhPZihhY3RpdmVWaWV3KTtcbiAgICBmb3IgKHZhciBpID0gdGhpcy53aW5kb3cudmlld3MubGVuZ3RoOyBpID4gYWN0aXZlVmlld0luZGV4OyBpLS0pIHtcbiAgICAgIHRoaXMud2luZG93LnZpZXdzLnNwbGljZShpLCAxKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVOYXZpZ2F0aW9uU3RhdGUoKTtcbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2MgZnVuY3Rpb25cbiAgICogQG5hbWUgdHJ1RGVza3RvcFdpbmRvd0NvbXBvbmVudC5hZGRWaWV3XG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3Aud2luZG93XG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBSZW1vdmVzIGFsbCBpbmFjdGl2ZSB2aWV3KHMpIGZvbGxvd2luZyB0aGUgYWN0aXZlIHZpZXcgYW5kIGluc2VydHMgYSBuZXcgdmlldy5cbiAgICpcbiAgICovXG4gIGFkZFZpZXcgPSAodmlld0NvbmZpZzogYW55KSA9PiB7XG4gICAgdGhpcy5yZW1vdmVGb3J3YXJkVmlld3MoKTtcbiAgICB2YXIgYWN0aXZlVmlldyA9IHRoaXMuZGVza3RvcEN0cmwuZ2V0QWN0aXZlVmlldyh0aGlzLndpbmRvdyk7XG4gICAgYWN0aXZlVmlldy5hY3RpdmUoZmFsc2UpO1xuICAgIHZpZXdDb25maWcud2luZG93ID0gdGhpcztcbiAgICB0aGlzLndpbmRvdy52aWV3cy5wdXNoKHZpZXdDb25maWcpO1xuICAgIHRoaXMudXBkYXRlTmF2aWdhdGlvblN0YXRlKCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BXaW5kb3dDb21wb25lbnQuZ2V0R2xvYmFsc1xuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wLndpbmRvd1xuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogcmV0dXJucyB0aGUgZ2xvYmFsIHZhbHVlcy5cbiAgICpcbiAgICovXG4gIGdldEdsb2JhbHMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMud2luZG93Lmdsb2JhbHM7XG4gIH07XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGZ1bmN0aW9uXG4gICAqIEBuYW1lIHRydURlc2t0b3BXaW5kb3dDb21wb25lbnQuZmlyc3RWaWV3XG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3Aud2luZG93XG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKi9cbiAgZmlyc3RWaWV3ID0gKCkgPT4ge1xuICAgIGlmICghdGhpcy5jYW5OYXZpZ2F0ZSgpIHx8IHRoaXMuZGlzYWJsZVByZXZpb3VzKSByZXR1cm47XG4gICAgaWYgKHRoaXMuY2FuY2VsRWRpdGluZ09uTmF2aWdhdGlvbikgdGhpcy5kZXNrdG9wQ3RybC5nZXRBY3RpdmVWaWV3KHRoaXMud2luZG93KS5pc0VkaXRpbmcgPSBmYWxzZTtcbiAgICBsZXQgYWN0aXZlVmlldyA9IHRoaXMuZGVza3RvcEN0cmwuZ2V0QWN0aXZlVmlldyh0aGlzLndpbmRvdyk7XG4gICAgYWN0aXZlVmlldy5hY3RpdmUoZmFsc2UpO1xuICAgIHRoaXMud2luZG93LnZpZXdzWzBdLmFjdGl2ZSh0cnVlKTtcbiAgICB0aGlzLnVwZGF0ZU5hdmlnYXRpb25TdGF0ZSgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAdHJ1LmRvYyBmdW5jdGlvblxuICAgKiBAbmFtZSB0cnVEZXNrdG9wV2luZG93Q29tcG9uZW50LmZpcnN0Vmlld1xuICAgKiBAbW9kdWxlIHRydS5kZXNrdG9wLndpbmRvd1xuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICovXG4gIGxhc3RWaWV3ID0gKCkgPT4ge1xuICAgIGlmICghdGhpcy5jYW5OYXZpZ2F0ZSgpIHx8IHRoaXMuZGlzYWJsZU5leHQpIHJldHVybjtcbiAgICBpZiAodGhpcy5jYW5jZWxFZGl0aW5nT25OYXZpZ2F0aW9uKSB0aGlzLmRlc2t0b3BDdHJsLmdldEFjdGl2ZVZpZXcodGhpcy53aW5kb3cpLmlzRWRpdGluZyA9IGZhbHNlO1xuICAgIGxldCBhY3RpdmVWaWV3ID0gdGhpcy5kZXNrdG9wQ3RybC5nZXRBY3RpdmVWaWV3KHRoaXMud2luZG93KTtcbiAgICBhY3RpdmVWaWV3LmFjdGl2ZShmYWxzZSk7XG4gICAgdGhpcy53aW5kb3cudmlld3NbdGhpcy53aW5kb3cudmlld3MubGVuZ3RoIC0gMV0uYWN0aXZlKHRydWUpO1xuICAgIHRoaXMudXBkYXRlTmF2aWdhdGlvblN0YXRlKCk7XG4gIH07O1xuXG4gIHJlc2l6ZUV2ZW50SGFuZGxlciA9ICgpID0+IHtcbiAgICB0aGlzLmlzV2luZG93SW5WaWV3cG9ydCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0cnUuZG9jIGV2ZW50XG4gICAqIEBtb2R1bGUgdHJ1LmRlc2t0b3Aud2luZG93XG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKi9cbiAgb25LZXlkb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLndpbmRvdy5hY3RpdmUpIHJldHVybjtcbiAgICB2YXIga2V5U2VxdWVuY2UgPSB0aGlzLmRlc2t0b3BDdHJsLmdldEtleVNlcXVlbmNlKGV2ZW50KTtcbiAgICBpZiAoa2V5U2VxdWVuY2UgPT09ICdhbHQrbGVmdCcpIHsgLy9QcmV2aW91cyBWaWV3XG4gICAgICB0aGlzLnByZXZpb3VzVmlldygpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKGtleVNlcXVlbmNlID09PSAnYWx0K3JpZ2h0JykgeyAvL05leHQgVmlld1xuICAgICAgdGhpcy5uZXh0VmlldygpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKGtleVNlcXVlbmNlID09PSAnYWx0K3VwJykgeyAvL0ZpcnN0IFZpZXdcbiAgICAgIHRoaXMuZmlyc3RWaWV3KCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAoa2V5U2VxdWVuY2UgPT09ICdhbHQrZG93bicpIHsgLy9MYXN0IFZpZXdcbiAgICAgIHRoaXMubGFzdFZpZXcoKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChrZXlTZXF1ZW5jZSA9PT0gJ2FsdCtsJykgeyAvL01heGltaXplIGxlZnRcbiAgICAgIGlmICghdGhpcy53aW5kb3cubWF4aW1pemVkKSB7XG4gICAgICAgIHRoaXMuZGVza3RvcEN0cmwuc2F2ZVBvc2l0aW9uKHRoaXMud2luZG93KTtcbiAgICAgICAgdGhpcy5kZXNrdG9wQ3RybC5tYXhpbWl6ZUxlZnQodGhpcy53aW5kb3cpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLndpbmRvdy5tYXhpbWl6ZWQgPT09ICdyaWdodCcgfHwgdGhpcy53aW5kb3cubWF4aW1pemVkID09PSAnZmlsbCcpXG4gICAgICAgIHRoaXMuZGVza3RvcEN0cmwubWF4aW1pemVMZWZ0KHRoaXMud2luZG93KTtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhpcy5kZXNrdG9wQ3RybC5yZXN0b3JlU2F2ZWRQb3NpdGlvbih0aGlzLndpbmRvdyk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAoa2V5U2VxdWVuY2UgPT09ICdhbHQrcicpIHsgLy9NYXhpbWl6ZSByaWdodFxuICAgICAgaWYgKCF0aGlzLndpbmRvdy5tYXhpbWl6ZWQpIHtcbiAgICAgICAgdGhpcy5kZXNrdG9wQ3RybC5zYXZlUG9zaXRpb24odGhpcy53aW5kb3cpO1xuICAgICAgICB0aGlzLmRlc2t0b3BDdHJsLm1heGltaXplUmlnaHQodGhpcy53aW5kb3cpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLndpbmRvdy5tYXhpbWl6ZWQgPT09ICdsZWZ0JyB8fCB0aGlzLndpbmRvdy5tYXhpbWl6ZWQgPT09ICdmaWxsJylcbiAgICAgICAgdGhpcy5kZXNrdG9wQ3RybC5tYXhpbWl6ZVJpZ2h0KHRoaXMud2luZG93KTtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhpcy5kZXNrdG9wQ3RybC5yZXN0b3JlU2F2ZWRQb3NpdGlvbih0aGlzLndpbmRvdyk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQHRydS5kb2Mgd2F0Y2hcbiAgICogQG1vZHVsZSB0cnUuZGVza3RvcC53aW5kb3dcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIE1vbml0b3JzIHRoZSB3aW5kb3cncyBtaW5pbWl6ZWQgc3RhdGVcbiAgICpcbiAgICovXG4gIC8vJHNjb3BlLiR3YXRjaCgnd2luZG93Lm1pbmltaXplZCcsXG4gIC8vICAgICAgICAgICAgICBmdW5jdGlvbih2YWx1ZSkge1xuICAvLyAgaWYgKHZhbHVlICYmICEkc2NvcGUud2luZG93Lm1heGltaXplZCkge1xuICAvLyAgICAkc2NvcGUuZGVza3RvcEN0cmwuc2F2ZVBvc2l0aW9uKCRzY29wZS53aW5kb3cpO1xuICAvLyAgfVxuICAvL31cbiAgLy8gICAgICAgICAgKTtcblxuICBkaXNhYmxlUHJldmlvdXMgPSB0cnVlO1xuICBkaXNhYmxlTmV4dCA9IHRydWU7XG5cbiAgYWN0aXZhdGUgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMud2luZG93Lm91dE9mQm91bmRzKSByZXR1cm47XG4gICAgdGhpcy5kZXNrdG9wQ3RybC5jbGVhckFjdGl2ZSgpO1xuICAgIHRoaXMud2luZG93LmFjdGl2ZSA9IHRydWU7XG4gICAgdGhpcy53aW5kb3cuekluZGV4ID0gdGhpcy5kZXNrdG9wQ3RybC5nZXROZXh0TWF4WkluZGV4KCk7XG4gIH07XG5cbiAgbWluaW1pemUgPSAoKSA9PiB7XG4gICAgdGhpcy5kZXNrdG9wQ3RybC5taW5pbWl6ZSh0aGlzLndpbmRvdyk7XG4gIH07XG5cbiAgbWF4aW1pemUgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMud2luZG93Lm1heGltaXplZCkge1xuICAgICAgdGhpcy5kZXNrdG9wQ3RybC5yZXN0b3JlU2F2ZWRQb3NpdGlvbih0aGlzLndpbmRvdyk7XG4gICAgICB0aGlzLndpbmRvdy5tYXhpbWl6ZWQgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVza3RvcEN0cmwuc2F2ZVBvc2l0aW9uKHRoaXMud2luZG93KTtcbiAgICAgIHRoaXMuZGVza3RvcEN0cmwubWF4aW1pemUodGhpcy53aW5kb3cpO1xuICAgIH1cbiAgfTtcblxuICBjbG9zZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5oYXNDaGFuZ2VzKCkpXG4gICAgICB0aGlzLnVpTm90aWZpY2F0aW9uLmNvbmZpcm0oJ0NvbmZpcm0gQWN0aW9uJywgdGhpcy50ZXh0TWFuYWdlci5tc2dEaXJ0eVByZXZlbnRzQ2xvc2UsIGZhbHNlLCB0cnVlLCAnJywgJ09rJykudGhlbigoY29uZmlybTogYm9vbGVhbikgPT4ge30pO1xuICAgIGVsc2VcbiAgICAgIHRoaXMuZGVza3RvcEN0cmwuY2xvc2VXaW5kb3codGhpcy53aW5kb3cpO1xuICB9O1xuXG4gIHdpbmRvd1RpdGxlTW91c2VEb3duID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgaWYgKHRoaXMud2luZG93Lm1heGltaXplZCkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy50aXRsZUJhciA9IGV2ZW50LnNyY0VsZW1lbnQgYXMgSFRNTEVsZW1lbnQgfHwgZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIHRoaXMueCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdLm9mZnNldExlZnQ7XG4gICAgdGhpcy55ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0ub2Zmc2V0VG9wO1xuICAgIHRoaXMuc3RhcnRYID0gZXZlbnQuc2NyZWVuWCAtIHRoaXMueDtcbiAgICB0aGlzLnN0YXJ0WSA9IGV2ZW50LnNjcmVlblkgLSB0aGlzLnk7XG5cbiAgICB0aGlzLmRlc2t0b3BDdHJsLnNhdmVQb3NpdGlvbih0aGlzLndpbmRvdyk7XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm1vdXNlTW92ZSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMubW91c2VVcCk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZXNpemVFdmVudEhhbmRsZXIpO1xuICB9O1xuXG4gIHByZXZpb3VzVmlldyA9ICgpID0+IHtcbiAgICBpZiAoIXRoaXMuY2FuTmF2aWdhdGUoKSB8fCB0aGlzLmRpc2FibGVQcmV2aW91cykgcmV0dXJuO1xuICAgIHZhciBhY3RpdmVWaWV3ID0gdGhpcy5kZXNrdG9wQ3RybC5nZXRBY3RpdmVWaWV3KHRoaXMud2luZG93KTtcbiAgICB2YXIgYWN0aXZlVmlld0luZGV4ID0gdGhpcy53aW5kb3cudmlld3MuaW5kZXhPZihhY3RpdmVWaWV3KTtcbiAgICBpZiAodGhpcy5jYW5jZWxFZGl0aW5nT25OYXZpZ2F0aW9uKSBhY3RpdmVWaWV3LmlzRWRpdGluZyA9IGZhbHNlO1xuICAgIGFjdGl2ZVZpZXcuYWN0aXZlKGZhbHNlKTtcbiAgICB0aGlzLndpbmRvdy52aWV3c1thY3RpdmVWaWV3SW5kZXggLSAxXS5hY3RpdmUodHJ1ZSk7XG4gICAgdGhpcy51cGRhdGVOYXZpZ2F0aW9uU3RhdGUoKTtcbiAgfTtcblxuICBuZXh0VmlldyA9ICgpID0+IHtcbiAgICBpZiAoIXRoaXMuY2FuTmF2aWdhdGUoKSB8fCB0aGlzLmRpc2FibGVOZXh0KSByZXR1cm47XG4gICAgdmFyIGFjdGl2ZVZpZXcgPSB0aGlzLmRlc2t0b3BDdHJsLmdldEFjdGl2ZVZpZXcodGhpcy53aW5kb3cpO1xuICAgIHZhciBhY3RpdmVWaWV3SW5kZXggPSB0aGlzLndpbmRvdy52aWV3cy5pbmRleE9mKGFjdGl2ZVZpZXcpO1xuICAgIGlmICh0aGlzLmNhbmNlbEVkaXRpbmdPbk5hdmlnYXRpb24pIGFjdGl2ZVZpZXcuaXNFZGl0aW5nID0gZmFsc2U7XG4gICAgYWN0aXZlVmlldy5hY3RpdmUoZmFsc2UpO1xuICAgIHRoaXMud2luZG93LnZpZXdzW2FjdGl2ZVZpZXdJbmRleCArIDFdLmFjdGl2ZSh0cnVlKTtcbiAgICB0aGlzLnVwZGF0ZU5hdmlnYXRpb25TdGF0ZSgpO1xuICB9O1xuXG4gIHNhdmUgPSAoKSA9PiB7XG4gICAgdGhpcy5kYXRhQ29udGV4dC5zYXZlKCk7XG4gIH07XG5cbiAgcmV2ZXJ0ID0gKCkgPT4ge1xuICAgIHRoaXMuZGF0YUNvbnRleHQucmV2ZXJ0KCk7XG4gIH07XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5DbG9zZUZuID0gdGhpcy5kZXNrdG9wQ3RybC5nZXRPcHRpb25zKCkuY2FuQ2xvc2VGbjtcbiAgICB0aGlzLmNhbk5hdmlnYXRlRm4gPSB0aGlzLmRlc2t0b3BDdHJsLmdldE9wdGlvbnMoKS5jYW5OYXZpZ2F0ZUZuO1xuICAgIHRoaXMuY2FuY2VsRWRpdGluZ09uTmF2aWdhdGlvbiA9IHRoaXMuZGVza3RvcEN0cmwuZ2V0T3B0aW9ucygpLmNhbmNlbEVkaXRpbmdPbk5hdmlnYXRpb247XG4gICAgdGhpcy51cGRhdGVOYXZpZ2F0aW9uU3RhdGUoKTtcblxuICAgIHRoaXMuc3Vicy5wdXNoKHRoaXMudHJ1V2luZG93RXZlbnRIYW5kbGVyLm9uQWRkVmlldygpLnN1YnNjcmliZSgod2luZGlvd0FkZFZpZXdFdmVudDogVHJ1RGVza3RvcFZpZXdDb25maWcpID0+IHtcclxuICAgICAgdGhpcy5hZGRWaWV3KHdpbmRpb3dBZGRWaWV3RXZlbnQpO1xyXG4gICAgfSkpO1xuXG4gICAgdGhpcy5zdWJzLnB1c2godGhpcy50cnVXaW5kb3dFdmVudEhhbmRsZXIub25TZXRXaW5kb3dUaXRsZSgpLnN1YnNjcmliZSgod2luZG93VGl0bGU6IHN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLnNldFdpbmRvd1RpdGxlKHdpbmRvd1RpdGxlKTtcclxuICAgIH0pKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm1vdXNlTW92ZSk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMubW91c2VVcCk7XG5cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZXNpemVFdmVudEhhbmRsZXIpO1xuXG4gICAgdGhpcy5zdWJzLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGVza3RvcC13aW5kb3ctY29udGFpbmVyXCJcclxuICAgICBbbmdDbGFzc109XCJ7J2Rlc2t0b3Atd2luZG93LWFjdGl2ZSc6IHdpbmRvdy5hY3RpdmUsICdkZXNrdG9wLXdpbmRvdy1tYXhpbWl6ZWQnOiB3aW5kb3cubWF4aW1pemVkfVwiXHJcbiAgICAgW25nU3R5bGVdPVwieyd6LWluZGV4Jzogd2luZG93LnpJbmRleCwgJ3RvcCc6IHdpbmRvdy50b3AsICdsZWZ0Jzogd2luZG93LmxlZnQsICdyaWdodCc6IHdpbmRvdy5yaWdodCwgJ2JvdHRvbSc6IHdpbmRvdy5ib3R0b20sICdoZWlnaHQnOiB3aW5kb3cuaGVpZ2h0LCAnd2lkdGgnOiB3aW5kb3cud2lkdGgsICdtaW4taGVpZ2h0Jzogd2luZG93Lm1pbkhlaWdodCwgJ21pbldpZHRoJzogd2luZG93Lm1pbldpZHRofVwiXHJcbiAgICAgW3N0eWxlLm9mZnNldExlZnQucHhdPVwieFwiXHJcbiAgICAgW3N0eWxlLm9mZnNldFRvcC5weF09XCJ5XCJcclxuICAgICAobW91c2Vkb3duKT1cImFjdGl2YXRlKClcIlxyXG4gICAgIFtoaWRkZW5dPVwid2luZG93Lm1pbmltaXplZFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJkZXNrdG9wLXdpbmRvdy1oZWFkZXJcIiBbbmdDbGFzc109XCJ7J2Rlc2t0b3Atd2luZG93LW1heGltaXplZCc6IHdpbmRvdy5tYXhpbWl6ZWQsICdkZXNrdG9wLXdpbmRvdy1vcGFjaXR5JzogIXdpbmRvdy5hY3RpdmV9XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidG9vbGJhci13aW5kb3ctbmF2aWdhdGlvblwiPlxyXG4gICAgICA8dHJ1LXRvb2xiYXI+XHJcbiAgICAgICAgPHRydS10b29sYmFyLWJ1dHRvbiBbaWNvbl09XCIndHJ1LXRvb2xiYXItcHJldmlvdXMtaWNvbidcIiBbdG9vbHRpcF09XCInR28gQmFjayBPbmUgVmlldyAtIFtBbHQgKyBMZWZ0XSdcIiAoY2xpY2spPVwicHJldmlvdXNWaWV3KClcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8dHJ1LXRvb2xiYXItYnV0dG9uIFtpY29uXT1cIid0cnUtdG9vbGJhci1uZXh0LWljb24nXCIgW3Rvb2x0aXBdPVwiJ0dvIEZvcndhcmQgT25lIFZpZXcgLSBbQWx0ICsgUmlnaHRdJ1wiIChjbGljayk9XCJuZXh0VmlldygpXCI+PC90cnUtdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPHRydS10b29sYmFyLWJ1dHRvbiBbaWNvbl09XCIndHJ1LXRvb2xiYXItc2F2ZS1pY29uJ1wiIGNsYXNzPVwiZGVza3RvcC13aW5kb3ctc2F2ZS1pY29uXCIgW25nQ2xhc3NdPVwieydkZXNrdG9wLXdpbmRvdy1zYXZlLWljb24taGFzLWNoYW5nZXMnOiBoYXNDaGFuZ2VzKCl9XCIgW3Rvb2x0aXBdPVwiJ1NhdmUgLSBbQ3RybCArIFNdJ1wiIChjbGljayk9XCJzYXZlKClcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8dHJ1LXRvb2xiYXItYnV0dG9uIFtpY29uXT1cIid0cnUtdG9vbGJhci1yZXZlcnQtaWNvbidcIiBjbGFzcz1cImRlc2t0b3Atd2luZG93LXJldmVydC1pY29uXCIgW25nQ2xhc3NdPVwieydkZXNrdG9wLXdpbmRvdy1yZXZlcnQtaWNvbi1oYXMtY2hhbmdlcyc6IGhhc0NoYW5nZXMoKX1cIiBbdG9vbHRpcF09XCInUmV2ZXJ0IC0gW0N0cmwgKyBTaGlmdCArIFJdJ1wiIChjbGljayk9XCJyZXZlcnQoKVwiPjwvdHJ1LXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDx0cnUtdG9vbGJhci1zZXBhcmF0b3I+PC90cnUtdG9vbGJhci1zZXBhcmF0b3I+XHJcbiAgICAgIDwvdHJ1LXRvb2xiYXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkZXNrdG9wLXdpbmRvdy10aXRsZVwiIChkYmxjbGljayk9XCJtYXhpbWl6ZSgpXCIgKG1vdXNlZG93bik9XCJ3aW5kb3dUaXRsZU1vdXNlRG93bigkZXZlbnQpXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkZXNrdG9wLWNsaWNrLXRocm91Z2hcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGVza3RvcC10ZXh0XCI+e3t3aW5kb3cudGl0bGV9fTwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImRlc2t0b3Atd2luZG93LWFjdGlvblwiPlxyXG4gICAgICA8dHJ1LXRvb2xiYXI+XHJcbiAgICAgICAgPHRydS10b29sYmFyLWJ1dHRvbiBbaWNvbl09XCIndHJ1LXRvb2xiYXItbWluaW1pemUtaWNvbidcIiBbdG9vbHRpcF09XCInTWluaW1pemUgLSBbQWx0ICsgTl0nXCIgKGNsaWNrKT1cIm1pbmltaXplKClcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICA8dHJ1LXRvb2xiYXItYnV0dG9uICpuZ0lmPVwiIXdpbmRvdy5tYXhpbWl6ZWRcIiBbaWNvbl09XCIndHJ1LXRvb2xiYXItbWF4aW1pemUtaWNvbidcIiBbdG9vbHRpcF09XCInTWF4aW1pemUgV2luZG93IC0gW0FsdCArIE1dJ1wiIChjbGljayk9XCJtYXhpbWl6ZSgpXCIgY2xhc3M9XCJtYXhpbWl6ZVwiPjwvdHJ1LXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgIDx0cnUtdG9vbGJhci1idXR0b24gKm5nSWY9XCJ3aW5kb3cubWF4aW1pemVkXCIgW2ljb25dPVwiJ3RydS10b29sYmFyLXJlc3RvcmUtaWNvbidcIiBbdG9vbHRpcF09XCInUmVzdG9yZSBXaW5kb3cgLSBbQWx0ICsgTV0nXCIgKGNsaWNrKT1cIm1heGltaXplKClcIiBjbGFzcz1cIm1heGltaXplXCI+PC90cnUtdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPHRydS10b29sYmFyLWJ1dHRvbiBbaWNvbl09XCIndHJ1LXRvb2xiYXItY2xvc2UtaWNvbidcIiBbdG9vbHRpcF09XCInQ2xvc2UgV2luZG93IC0gW0FsdCArIFNISUZUICsgWF0nXCIgKGNsaWNrKT1cImNsb3NlKClcIj48L3RydS10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgPC90cnUtdG9vbGJhcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxmaWVsZHNldCBuZy1kaXNhYmxlZD1cIiF3aW5kb3cuYWN0aXZlXCIgY2xhc3M9XCJkZXNrdG9wLXdpbmRvdy1maWVsZHNldFwiIFtuZ0NsYXNzXT1cInsnZGVza3RvcC13aW5kb3ctb3BhY2l0eSc6ICF3aW5kb3cuYWN0aXZlfVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImRlc2t0b3Atd2luZG93LWNvbnRlbnRcIj5cclxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdmlldyBvZiB3aW5kb3cudmlld3NcIj5cclxuICAgICAgICA8dHJ1LWRlc2t0b3AtdmlldyBbdmlld109XCJ2aWV3XCIgW2hpZGRlbl09XCIhdmlldy5hY3RpdmVcIj48bmctdGVtcGxhdGU+PC9uZy10ZW1wbGF0ZT48L3RydS1kZXNrdG9wLXZpZXc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9maWVsZHNldD5cclxuICA8c3BhbiBjbGFzcz1cImRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1oYW5kbGUgZGVza3RvcC13aW5kb3ctcmVzaXphYmxlLW53XCIgdHJ1LWRlc2t0b3AtcmVzaXphYmxlIFt3aW5kb3ddPVwid2luZG93XCIgKm5nSWY9XCIhd2luZG93Lm1heGltaXplZFwiIFtkaXJlY3Rpb25dPVwiJ253J1wiPjwvc3Bhbj5cclxuICA8c3BhbiBjbGFzcz1cImRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1oYW5kbGUgZGVza3RvcC13aW5kb3ctcmVzaXphYmxlLW5lXCIgdHJ1LWRlc2t0b3AtcmVzaXphYmxlIFt3aW5kb3ddPVwid2luZG93XCIgKm5nSWY9XCIhd2luZG93Lm1heGltaXplZFwiIFtkaXJlY3Rpb25dPVwiJ25lJ1wiPjwvc3Bhbj5cclxuICA8c3BhbiBjbGFzcz1cImRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1oYW5kbGUgZGVza3RvcC13aW5kb3ctcmVzaXphYmxlLXN3XCIgdHJ1LWRlc2t0b3AtcmVzaXphYmxlIFt3aW5kb3ddPVwid2luZG93XCIgKm5nSWY9XCIhd2luZG93Lm1heGltaXplZFwiIFtkaXJlY3Rpb25dPVwiJ3N3J1wiPjwvc3Bhbj5cclxuICA8c3BhbiBjbGFzcz1cImRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1oYW5kbGUgZGVza3RvcC13aW5kb3ctcmVzaXphYmxlLXNlXCIgdHJ1LWRlc2t0b3AtcmVzaXphYmxlIFt3aW5kb3ddPVwid2luZG93XCIgKm5nSWY9XCIhd2luZG93Lm1heGltaXplZFwiIFtkaXJlY3Rpb25dPVwiJ3NlJ1wiPjwvc3Bhbj5cclxuICA8c3BhbiBjbGFzcz1cImRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1oYW5kbGUgZGVza3RvcC13aW5kb3ctcmVzaXphYmxlLW5cIiB0cnUtZGVza3RvcC1yZXNpemFibGUgW3dpbmRvd109XCJ3aW5kb3dcIiAqbmdJZj1cIiF3aW5kb3cubWF4aW1pemVkXCIgW2RpcmVjdGlvbl09XCInbidcIj48L3NwYW4+XHJcbiAgPHNwYW4gY2xhc3M9XCJkZXNrdG9wLXdpbmRvdy1yZXNpemFibGUtaGFuZGxlIGRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1zXCIgdHJ1LWRlc2t0b3AtcmVzaXphYmxlIFt3aW5kb3ddPVwid2luZG93XCIgKm5nSWY9XCIhd2luZG93Lm1heGltaXplZFwiIFtkaXJlY3Rpb25dPVwiJ3MnXCI+PC9zcGFuPlxyXG4gIDxzcGFuIGNsYXNzPVwiZGVza3RvcC13aW5kb3ctcmVzaXphYmxlLWhhbmRsZSBkZXNrdG9wLXdpbmRvdy1yZXNpemFibGUtd1wiIHRydS1kZXNrdG9wLXJlc2l6YWJsZSBbd2luZG93XT1cIndpbmRvd1wiICpuZ0lmPVwiIXdpbmRvdy5tYXhpbWl6ZWRcIiBbZGlyZWN0aW9uXT1cIid3J1wiPjwvc3Bhbj5cclxuICA8c3BhbiBjbGFzcz1cImRlc2t0b3Atd2luZG93LXJlc2l6YWJsZS1oYW5kbGUgZGVza3RvcC13aW5kb3ctcmVzaXphYmxlLWVcIiB0cnUtZGVza3RvcC1yZXNpemFibGUgW3dpbmRvd109XCJ3aW5kb3dcIiAqbmdJZj1cIiF3aW5kb3cubWF4aW1pemVkXCIgW2RpcmVjdGlvbl09XCInZSdcIj48L3NwYW4+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { NgModule } from "@angular/core";
|
|
2
|
-
import { CommonModule } from "@angular/common";
|
|
3
|
-
import { FormsModule } from "@angular/forms";
|
|
4
|
-
import { TruExportDialog } from "./tru-export-dialog";
|
|
5
|
-
import { MatCheckboxModule } from "@angular/material/checkbox";
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
export class TruExportDialogModule {
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
13
|
-
type: NgModule,
|
|
14
|
-
args: [{
|
|
15
|
-
declarations: [TruExportDialog],
|
|
16
|
-
imports: [CommonModule, FormsModule, MatCheckboxModule],
|
|
17
|
-
exports: [TruExportDialog]
|
|
18
|
-
}]
|
|
19
|
-
}] });
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { NgModule } from "@angular/core";
|
|
2
|
+
import { CommonModule } from "@angular/common";
|
|
3
|
+
import { FormsModule } from "@angular/forms";
|
|
4
|
+
import { TruExportDialog } from "./tru-export-dialog";
|
|
5
|
+
import { MatCheckboxModule } from "@angular/material/checkbox";
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class TruExportDialogModule {
|
|
8
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: TruExportDialogModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
9
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.2", ngImport: i0, type: TruExportDialogModule, declarations: [TruExportDialog], imports: [CommonModule, FormsModule, MatCheckboxModule], exports: [TruExportDialog] });
|
|
10
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: TruExportDialogModule, imports: [CommonModule, FormsModule, MatCheckboxModule] });
|
|
11
|
+
}
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: TruExportDialogModule, decorators: [{
|
|
13
|
+
type: NgModule,
|
|
14
|
+
args: [{
|
|
15
|
+
declarations: [TruExportDialog],
|
|
16
|
+
imports: [CommonModule, FormsModule, MatCheckboxModule],
|
|
17
|
+
exports: [TruExportDialog]
|
|
18
|
+
}]
|
|
19
|
+
}] });
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWV4cG9ydC1kaWFsb2ctbW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1LWNvbW1vbi1saWIvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydC1kaWFsb2cvdHJ1LWV4cG9ydC1kaWFsb2ctbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBTy9ELE1BQU0sT0FBTyxxQkFBcUI7dUdBQXJCLHFCQUFxQjt3R0FBckIscUJBQXFCLGlCQUpqQixlQUFlLGFBQ3BCLFlBQVksRUFBRSxXQUFXLEVBQUUsaUJBQWlCLGFBQzVDLGVBQWU7d0dBRWQscUJBQXFCLFlBSHRCLFlBQVksRUFBRSxXQUFXLEVBQUUsaUJBQWlCOzsyRkFHM0MscUJBQXFCO2tCQUxqQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLGVBQWUsQ0FBQztvQkFDL0IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQztvQkFDdkQsT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDO2lCQUMzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5cclxuaW1wb3J0IHsgVHJ1RXhwb3J0RGlhbG9nIH0gZnJvbSBcIi4vdHJ1LWV4cG9ydC1kaWFsb2dcIjtcclxuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3hcIjtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbVHJ1RXhwb3J0RGlhbG9nXSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgTWF0Q2hlY2tib3hNb2R1bGVdLFxyXG4gIGV4cG9ydHM6IFtUcnVFeHBvcnREaWFsb2ddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcnVFeHBvcnREaWFsb2dNb2R1bGUgeyB9XHJcbiJdfQ==
|