@sumaris-net/ngx-components 2.6.26 → 2.7.0-rc2
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/esm2022/public_api.mjs +340 -0
- package/{esm2020 → esm2022}/src/app/admin/admin-routing.module.mjs +8 -8
- package/{esm2020 → esm2022}/src/app/admin/admin.module.mjs +12 -12
- package/esm2022/src/app/admin/services/filter/person.filter.mjs +69 -0
- package/esm2022/src/app/admin/services/person.service.mjs +174 -0
- package/esm2022/src/app/admin/services/validator/person.validator.mjs +72 -0
- package/esm2022/src/app/admin/users/users.mjs +264 -0
- package/esm2022/src/app/admin/users/users.module.mjs +58 -0
- package/{esm2020 → esm2022}/src/app/core/about/about.modal.mjs +20 -7
- package/{esm2020 → esm2022}/src/app/core/about/about.module.mjs +9 -9
- package/{esm2020 → esm2022}/src/app/core/account/account.module.mjs +22 -22
- package/esm2022/src/app/core/account/account.page.mjs +337 -0
- package/esm2022/src/app/core/account/new-token.modal.mjs +130 -0
- package/esm2022/src/app/core/account/token.table.mjs +146 -0
- package/esm2022/src/app/core/auth/auth.form.mjs +140 -0
- package/esm2022/src/app/core/auth/auth.modal.mjs +76 -0
- package/{esm2020 → esm2022}/src/app/core/auth/auth.module.mjs +16 -16
- package/{esm2020 → esm2022}/src/app/core/core.module.mjs +87 -87
- package/esm2022/src/app/core/core.testing.module.mjs +93 -0
- package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +109 -0
- package/{esm2020 → esm2022}/src/app/core/form/buttons/form-buttons-bar.module.mjs +10 -10
- package/esm2022/src/app/core/form/entity/editor.class.mjs +718 -0
- package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +436 -0
- package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +730 -0
- package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +24 -0
- package/{esm2020 → esm2022}/src/app/core/form/entity/entity.module.mjs +11 -11
- package/esm2022/src/app/core/form/form.class.mjs +353 -0
- package/{esm2020 → esm2022}/src/app/core/form/form.module.mjs +30 -30
- package/{esm2020 → esm2022}/src/app/core/form/form.utils.mjs +69 -60
- package/esm2022/src/app/core/form/list/list.form.mjs +233 -0
- package/{esm2020 → esm2022}/src/app/core/form/list/list.module.mjs +10 -10
- package/esm2022/src/app/core/form/properties/properties.form.mjs +143 -0
- package/{esm2020 → esm2022}/src/app/core/form/properties/properties.module.mjs +13 -13
- package/esm2022/src/app/core/form/properties/properties.table.mjs +269 -0
- package/esm2022/src/app/core/form/properties/property.validator.mjs +24 -0
- package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +95 -0
- package/{esm2020 → esm2022}/src/app/core/form/properties/testing/properties-form.testing.module.mjs +11 -11
- package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +73 -0
- package/{esm2020 → esm2022}/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +10 -10
- package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +152 -0
- package/{esm2020 → esm2022}/src/app/core/form/text-popover/text-popover.module.mjs +10 -10
- package/{esm2020 → esm2022}/src/app/core/graphql/graphql.module.mjs +6 -6
- package/{esm2020 → esm2022}/src/app/core/graphql/graphql.service.mjs +32 -20
- package/{esm2020 → esm2022}/src/app/core/graphql/graphql.utils.mjs +2 -1
- package/esm2022/src/app/core/home/home.mjs +282 -0
- package/esm2022/src/app/core/home/home.module.mjs +51 -0
- package/esm2022/src/app/core/icon/icon.component.mjs +40 -0
- package/{esm2020 → esm2022}/src/app/core/icon/icon.module.mjs +7 -7
- package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +358 -0
- package/{esm2020 → esm2022}/src/app/core/install/install-upgrade-card.module.mjs +10 -10
- package/esm2022/src/app/core/menu/menu.component.mjs +264 -0
- package/esm2022/src/app/core/menu/menu.model.mjs +269 -0
- package/esm2022/src/app/core/menu/menu.module.mjs +52 -0
- package/esm2022/src/app/core/menu/menu.service.mjs +671 -0
- package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +109 -0
- package/{esm2020 → esm2022}/src/app/core/menu/testing/menu-other.testing.mjs +5 -5
- package/esm2022/src/app/core/menu/testing/menu.testing.mjs +122 -0
- package/{esm2020 → esm2022}/src/app/core/menu/testing/menu.testing.module.mjs +12 -12
- package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +29 -0
- package/{esm2020 → esm2022}/src/app/core/offline/update-offline-mode-card.module.mjs +10 -10
- package/esm2022/src/app/core/peer/select-peer.modal.mjs +193 -0
- package/{esm2020 → esm2022}/src/app/core/peer/select-peer.module.mjs +13 -13
- package/esm2022/src/app/core/register/register-confirm.page.mjs +88 -0
- package/esm2022/src/app/core/register/register.form.mjs +194 -0
- package/esm2022/src/app/core/register/register.modal.mjs +55 -0
- package/{esm2020 → esm2022}/src/app/core/register/register.module.mjs +13 -13
- package/esm2022/src/app/core/services/account.service.mjs +1243 -0
- package/esm2022/src/app/core/services/auth-guard.service.mjs +76 -0
- package/esm2022/src/app/core/services/base-entity-service.class.mjs +482 -0
- package/esm2022/src/app/core/services/base-graphql-service.class.mjs +224 -0
- package/esm2022/src/app/core/services/base58.mjs +79 -0
- package/esm2022/src/app/core/services/config.service.mjs +367 -0
- package/esm2022/src/app/core/services/crypto.service.mjs +107 -0
- package/esm2022/src/app/core/services/local-settings.service.mjs +468 -0
- package/esm2022/src/app/core/services/model/account.model.mjs +155 -0
- package/esm2022/src/app/core/services/model/config.model.mjs +107 -0
- package/esm2022/src/app/core/services/model/department.model.mjs +34 -0
- package/esm2022/src/app/core/services/model/entity.decorators.mjs +97 -0
- package/esm2022/src/app/core/services/model/entity.model.mjs +228 -0
- package/esm2022/src/app/core/services/model/peer.model.mjs +83 -0
- package/esm2022/src/app/core/services/model/person.model.mjs +110 -0
- package/esm2022/src/app/core/services/model/referential.model.mjs +189 -0
- package/esm2022/src/app/core/services/model/token.model.mjs +57 -0
- package/esm2022/src/app/core/services/network.service.mjs +626 -0
- package/{esm2020 → esm2022}/src/app/core/services/pipes/account.pipes.mjs +9 -9
- package/{esm2020 → esm2022}/src/app/core/services/pipes/department-to-string.pipe.mjs +5 -5
- package/{esm2020 → esm2022}/src/app/core/services/pipes/person-to-string.pipe.mjs +5 -5
- package/{esm2020 → esm2022}/src/app/core/services/pipes/usage-mode.pipes.mjs +9 -9
- package/{esm2020 → esm2022}/src/app/core/services/platform.service.mjs +29 -7
- package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +434 -0
- package/esm2022/src/app/core/services/storage/entity-store.class.mjs +458 -0
- package/esm2022/src/app/core/services/testing/referential-filter.model.mjs +25 -0
- package/esm2022/src/app/core/services/testing/referential.validator.mjs +46 -0
- package/esm2022/src/app/core/services/validator/account.validator.mjs +45 -0
- package/esm2022/src/app/core/services/validator/base.validator.class.mjs +49 -0
- package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +67 -0
- package/{esm2020 → esm2022}/src/app/core/services/validator/user-settings.validator.mjs +5 -5
- package/{esm2020 → esm2022}/src/app/core/services/validator/user-token.validator.mjs +5 -5
- package/{esm2020 → esm2022}/src/app/core/settings/settings.module.mjs +9 -9
- package/esm2022/src/app/core/settings/settings.page.mjs +328 -0
- package/esm2022/src/app/core/table/actions-column.component.mjs +115 -0
- package/esm2022/src/app/core/table/async-table.class.mjs +1740 -0
- package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +386 -0
- package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +401 -0
- package/esm2022/src/app/core/table/memory-table.class.mjs +57 -0
- package/esm2022/src/app/core/table/table-select-columns.component.mjs +46 -0
- package/esm2022/src/app/core/table/table.class.mjs +1781 -0
- package/esm2022/src/app/core/table/table.model.mjs +16 -0
- package/{esm2020 → esm2022}/src/app/core/table/table.module.mjs +12 -12
- package/esm2022/src/app/core/table/testing/table-validator.service.mjs +28 -0
- package/esm2022/src/app/core/table/testing/table.testing.mjs +291 -0
- package/esm2022/src/app/core/table/testing/table.testing.module.mjs +50 -0
- package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +25 -0
- package/esm2022/src/app/core/table/testing/table2.testing.mjs +250 -0
- package/esm2022/src/app/shared/audio/audio.mjs +251 -0
- package/esm2022/src/app/shared/audio/audio.testing.mjs +32 -0
- package/{esm2020 → esm2022}/src/app/shared/audio/audio.testing.module.mjs +10 -10
- package/esm2022/src/app/shared/capacitor/keyboard.mjs +42 -0
- package/esm2022/src/app/shared/capacitor/plugins.mjs +9 -0
- package/esm2022/src/app/shared/dates.mjs +149 -0
- package/esm2022/src/app/shared/debug/debug.component.mjs +40 -0
- package/{esm2020 → esm2022}/src/app/shared/debug/debug.module.mjs +14 -14
- package/esm2022/src/app/shared/directives/autofocus.directive.mjs +98 -0
- package/esm2022/src/app/shared/directives/autotitle.directive.mjs +32 -0
- package/{esm2020 → esm2022}/src/app/shared/directives/directives.module.mjs +13 -13
- package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +52 -0
- package/esm2022/src/app/shared/directives/ng-var.directive.mjs +33 -0
- package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +62 -0
- package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +45 -0
- package/{esm2020 → esm2022}/src/app/shared/directives/resizable/resizable.module.mjs +5 -5
- package/esm2022/src/app/shared/file/file.service.mjs +122 -0
- package/{esm2020 → esm2022}/src/app/shared/file/file.utils.mjs +2 -2
- package/esm2022/src/app/shared/form/field.component.mjs +353 -0
- package/{esm2020 → esm2022}/src/app/shared/form/field.model.mjs +1 -1
- package/esm2022/src/app/shared/form/loading-spinner.mjs +35 -0
- package/{esm2020 → esm2022}/src/app/shared/functions.mjs +5 -4
- package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +82 -0
- package/esm2022/src/app/shared/gesture/gesture-config.mjs +46 -0
- package/esm2022/src/app/shared/graph/graph-colors.mjs +219 -0
- package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +59 -0
- package/esm2022/src/app/shared/help/help.modal.mjs +63 -0
- package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +23 -0
- package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +85 -0
- package/{esm2020 → esm2022}/src/app/shared/hotkeys/shared-hotkeys.module.mjs +13 -13
- package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +388 -0
- package/{esm2020 → esm2022}/src/app/shared/image/gallery/image-gallery.module.mjs +22 -22
- package/esm2022/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +26 -0
- package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +90 -0
- package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +41 -0
- package/{esm2020 → esm2022}/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +16 -16
- package/{esm2020 → esm2022}/src/app/shared/image/image.module.mjs +11 -11
- package/esm2022/src/app/shared/image/image.service.mjs +104 -0
- package/esm2022/src/app/shared/inputs.mjs +231 -0
- package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +28 -0
- package/esm2022/src/app/shared/logging/logging-service.class.mjs +128 -0
- package/{esm2020 → esm2022}/src/app/shared/logging/logging-service.module.mjs +8 -8
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +49 -0
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +961 -0
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +82 -0
- package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +217 -0
- package/esm2022/src/app/shared/material/badge/badge.directive.mjs +209 -0
- package/{esm2020 → esm2022}/src/app/shared/material/badge/badge.module.mjs +9 -9
- package/esm2022/src/app/shared/material/badge/badge.test.mjs +42 -0
- package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +72 -0
- package/esm2022/src/app/shared/material/boolean/material-boolean2.mjs +266 -0
- package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +271 -0
- package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +54 -0
- package/esm2022/src/app/shared/material/chips/chips.module.mjs +76 -0
- package/esm2022/src/app/shared/material/chips/material.chips.mjs +719 -0
- package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +148 -0
- package/{esm2020 → esm2022}/src/app/shared/material/datetime/datetime.module.mjs +38 -38
- package/esm2022/src/app/shared/material/datetime/material.date.mjs +396 -0
- package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +406 -0
- package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +549 -0
- package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +132 -0
- package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +123 -0
- package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +115 -0
- package/esm2022/src/app/shared/material/duration/duration.module.mjs +70 -0
- package/{esm2020 → esm2022}/src/app/shared/material/duration/duration.utils.mjs +2 -2
- package/esm2022/src/app/shared/material/duration/material.duration.mjs +273 -0
- package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +79 -0
- package/{esm2020 → esm2022}/src/app/shared/material/latlong/latlong.utils.mjs +3 -3
- package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +440 -0
- package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +72 -0
- package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +113 -0
- package/esm2022/src/app/shared/material/material.module.mjs +229 -0
- package/esm2022/src/app/shared/material/material.testing.module.mjs +221 -0
- package/esm2022/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +104 -0
- package/esm2022/src/app/shared/material/numpad/numpad.component.mjs +83 -0
- package/esm2022/src/app/shared/material/numpad/numpad.container.mjs +203 -0
- package/esm2022/src/app/shared/material/numpad/numpad.content.mjs +19 -0
- package/esm2022/src/app/shared/material/numpad/numpad.directive.mjs +168 -0
- package/esm2022/src/app/shared/material/numpad/numpad.dom-service.mjs +36 -0
- package/esm2022/src/app/shared/material/numpad/numpad.model.mjs +16 -0
- package/{esm2020 → esm2022}/src/app/shared/material/numpad/numpad.module.mjs +21 -21
- package/esm2022/src/app/shared/material/numpad/testing/numpad.test.mjs +48 -0
- package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +48 -0
- package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +23 -0
- package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +368 -0
- package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +56 -0
- package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +67 -0
- package/esm2022/src/app/shared/material/testing/common.test.mjs +105 -0
- package/esm2022/src/app/shared/material/text/testing/text-form.testing.mjs +31 -0
- package/esm2022/src/app/shared/material/text/text-form.component.mjs +97 -0
- package/{esm2020 → esm2022}/src/app/shared/material/text/text-form.module.mjs +24 -24
- package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +236 -0
- package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +49 -0
- package/{esm2020 → esm2022}/src/app/shared/named-filter/named-filter.module.mjs +5 -5
- package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +69 -0
- package/{esm2020 → esm2022}/src/app/shared/pipes/arrays.pipe.mjs +25 -25
- package/esm2022/src/app/shared/pipes/colors.pipe.mjs +27 -0
- package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +51 -0
- package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +72 -0
- package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +28 -0
- package/esm2022/src/app/shared/pipes/duration.pipe.mjs +36 -0
- package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +60 -0
- package/esm2022/src/app/shared/pipes/form.pipes.mjs +194 -0
- package/{esm2020 → esm2022}/src/app/shared/pipes/highlight.pipe.mjs +5 -5
- package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +42 -0
- package/{esm2020 → esm2022}/src/app/shared/pipes/maps.pipe.mjs +13 -13
- package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +118 -0
- package/{esm2020 → esm2022}/src/app/shared/pipes/math.pipes.mjs +13 -13
- package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +19 -0
- package/{esm2020 → esm2022}/src/app/shared/pipes/number-format.pipe.mjs +5 -5
- package/esm2022/src/app/shared/pipes/pipes.module.mjs +256 -0
- package/esm2022/src/app/shared/pipes/property.pipes.mjs +97 -0
- package/esm2022/src/app/shared/pipes/string.pipes.mjs +135 -0
- package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +44 -0
- package/esm2022/src/app/shared/pipes/types.pipes.mjs +58 -0
- package/esm2022/src/app/shared/rx-state.module.mjs +23 -0
- package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +347 -0
- package/esm2022/src/app/shared/services/progress-bar.service.mjs +31 -0
- package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +121 -0
- package/{esm2020 → esm2022}/src/app/shared/services/startable-service.class.mjs +21 -18
- package/esm2022/src/app/shared/services/translate-context.service.mjs +104 -0
- package/{esm2020 → esm2022}/src/app/shared/shared-routing.module.mjs +12 -12
- package/esm2022/src/app/shared/shared.module.mjs +231 -0
- package/{esm2020 → esm2022}/src/app/shared/shared.testing.module.mjs +40 -40
- package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +286 -0
- package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +46 -0
- package/{esm2020 → esm2022}/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +7 -7
- package/{esm2020 → esm2022}/src/app/shared/storage/storage-explorer.testing.module.mjs +6 -6
- package/esm2022/src/app/shared/storage/storage.service.mjs +134 -0
- package/{esm2020 → esm2022}/src/app/shared/storage/storage.utils.mjs +1 -1
- package/esm2022/src/app/shared/testing/observable.test.mjs +96 -0
- package/esm2022/src/app/shared/testing/tests.page.mjs +37 -0
- package/esm2022/src/app/shared/toast/toast.testing.mjs +52 -0
- package/{esm2020 → esm2022}/src/app/shared/toast/toast.testing.module.mjs +10 -10
- package/esm2022/src/app/shared/toast/toasts.mjs +144 -0
- package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +60 -0
- package/esm2022/src/app/shared/toolbar/toolbar.mjs +263 -0
- package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +57 -0
- package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +59 -0
- package/{esm2020 → esm2022}/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +10 -10
- package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +107 -0
- package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +211 -0
- package/esm2022/src/app/shared/upload-file/upload-file.model.mjs +27 -0
- package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +106 -0
- package/esm2022/src/app/shared/validator/validators.mjs +580 -0
- package/esm2022/src/app/shared/version/versions.mjs +81 -0
- package/esm2022/src/app/social/job/job.module.mjs +42 -0
- package/esm2022/src/app/social/job/progression/job-progression.component.mjs +35 -0
- package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +232 -0
- package/esm2022/src/app/social/job/progression/job-progression.list.mjs +50 -0
- package/esm2022/src/app/social/job/progression/job-progression.model.mjs +29 -0
- package/esm2022/src/app/social/job/progression/job-progression.service.mjs +73 -0
- package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +43 -0
- package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +53 -0
- package/{esm2020 → esm2022}/src/app/social/job/testing/job.testing.module.mjs +9 -9
- package/esm2022/src/app/social/message/message.form.mjs +140 -0
- package/esm2022/src/app/social/message/message.modal.mjs +110 -0
- package/esm2022/src/app/social/message/message.model.mjs +75 -0
- package/{esm2020 → esm2022}/src/app/social/message/message.module.mjs +5 -5
- package/esm2022/src/app/social/message/message.service.mjs +110 -0
- package/{esm2020 → esm2022}/src/app/social/social.module.mjs +19 -19
- package/{esm2020 → esm2022}/src/app/social/social.testing.module.mjs +10 -10
- package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +123 -0
- package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +263 -0
- package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +233 -0
- package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +129 -0
- package/{esm2020 → esm2022}/src/app/social/user-event/testing/user-event.testing.module.mjs +9 -9
- package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +116 -0
- package/esm2022/src/app/social/user-event/user-event.module.mjs +43 -0
- package/esm2022/src/app/social/user-event/user-event.service.mjs +512 -0
- package/esm2022/src/environments/environment.class.mjs +50 -0
- package/esm2022/src/environments/environment.loader.mjs +83 -0
- package/{esm2020 → esm2022}/src/environments/environment.mjs +3 -3
- package/{fesm2020 → fesm2022}/sumaris-net.ngx-components.mjs +12695 -10274
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -0
- package/package.json +37 -17
- package/public_api.d.ts +12 -4
- package/src/app/admin/users/users.d.ts +1 -1
- package/src/app/admin/users/users.module.d.ts +2 -1
- package/src/app/core/about/about.modal.d.ts +1 -1
- package/src/app/core/account/account.page.d.ts +1 -1
- package/src/app/core/account/new-token.modal.d.ts +1 -1
- package/src/app/core/account/token.table.d.ts +1 -1
- package/src/app/core/auth/auth.form.d.ts +1 -1
- package/src/app/core/auth/auth.modal.d.ts +1 -1
- package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +1 -1
- package/src/app/core/form/entity/editor.class.d.ts +3 -3
- package/src/app/core/form/entity/entity-editor-modal.class.d.ts +1 -1
- package/src/app/core/form/entity/entity-editor.class.d.ts +1 -1
- package/src/app/core/form/entity/entity-metadata.component.d.ts +1 -1
- package/src/app/core/form/form.class.d.ts +1 -1
- package/src/app/core/form/list/list.form.d.ts +1 -1
- package/src/app/core/form/properties/properties.form.d.ts +1 -1
- package/src/app/core/form/properties/properties.table.d.ts +2 -3
- package/src/app/core/form/properties/property.validator.d.ts +1 -1
- package/src/app/core/form/properties/testing/properties-form.test.d.ts +1 -1
- package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +1 -1
- package/src/app/core/form/text-popover/text-popover.component.d.ts +1 -1
- package/src/app/core/graphql/graphql.utils.d.ts +1 -1
- package/src/app/core/home/home.d.ts +1 -1
- package/src/app/core/home/home.module.d.ts +4 -3
- package/src/app/core/icon/icon.component.d.ts +1 -1
- package/src/app/core/install/install-upgrade-card.component.d.ts +1 -1
- package/src/app/core/menu/menu.component.d.ts +2 -2
- package/src/app/core/menu/menu.model.d.ts +0 -1
- package/src/app/core/menu/menu.module.d.ts +3 -5
- package/src/app/core/menu/menu.service.d.ts +1 -1
- package/src/app/core/menu/sub-menu-tab.directive.d.ts +1 -1
- package/src/app/core/menu/testing/menu-other.testing.d.ts +1 -1
- package/src/app/core/menu/testing/menu.testing.d.ts +1 -1
- package/src/app/core/offline/update-offline-mode-card.component.d.ts +1 -1
- package/src/app/core/peer/select-peer.modal.d.ts +1 -1
- package/src/app/core/register/register-confirm.page.d.ts +1 -1
- package/src/app/core/register/register.form.d.ts +1 -1
- package/src/app/core/register/register.modal.d.ts +1 -1
- package/src/app/core/services/base-entity-service.class.d.ts +2 -2
- package/src/app/core/services/base-graphql-service.class.d.ts +1 -1
- package/src/app/core/services/model/person.model.d.ts +1 -1
- package/src/app/core/services/model/settings.model.d.ts +1 -1
- package/src/app/core/services/network.types.d.ts +2 -2
- package/src/app/core/services/storage/entity-store.class.d.ts +1 -1
- package/src/app/core/services/validator/base.validator.class.d.ts +1 -1
- package/src/app/core/settings/settings.page.d.ts +1 -1
- package/src/app/core/table/actions-column.component.d.ts +2 -2
- package/src/app/core/table/async-table.class.d.ts +1 -1
- package/src/app/core/table/entities-async-table-datasource.class.d.ts +1 -1
- package/src/app/core/table/entities-table-datasource.class.d.ts +1 -1
- package/src/app/core/table/memory-table.class.d.ts +3 -3
- package/src/app/core/table/table-select-columns.component.d.ts +1 -1
- package/src/app/core/table/table.class.d.ts +4 -3
- package/src/app/core/table/table.model.d.ts +1 -1
- package/src/app/core/table/testing/table.testing.d.ts +5 -4
- package/src/app/core/table/testing/table.testing.module.d.ts +8 -5
- package/src/app/core/table/testing/table2-validator.service.d.ts +15 -0
- package/src/app/core/table/testing/table2.testing.d.ts +45 -0
- package/src/app/shared/audio/audio.d.ts +1 -1
- package/src/app/shared/audio/audio.testing.d.ts +1 -1
- package/src/app/shared/debug/debug.component.d.ts +1 -1
- package/src/app/shared/directives/autofocus.directive.d.ts +1 -1
- package/src/app/shared/directives/autotitle.directive.d.ts +1 -1
- package/src/app/shared/directives/drag-and-drop.directive.d.ts +1 -1
- package/src/app/shared/directives/ng-var.directive.d.ts +1 -1
- package/src/app/shared/directives/resizable/resizable.component.d.ts +1 -1
- package/src/app/shared/directives/resizable/resizable.directive.d.ts +1 -1
- package/src/app/shared/events.d.ts +1 -1
- package/src/app/shared/form/field.component.d.ts +4 -5
- package/src/app/shared/form/field.model.d.ts +2 -0
- package/src/app/shared/form/loading-spinner.d.ts +1 -1
- package/src/app/shared/functions.d.ts +2 -2
- package/src/app/shared/help/help.modal.d.ts +2 -2
- package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +3 -5
- package/src/app/shared/hotkeys/hotkeys.service.d.ts +3 -3
- package/src/app/shared/image/gallery/image-gallery.component.d.ts +3 -3
- package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +2 -2
- package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +8 -8
- package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +10 -9
- package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +1 -1
- package/src/app/shared/material/badge/badge.directive.d.ts +1 -1
- package/src/app/shared/material/badge/badge.test.d.ts +1 -1
- package/src/app/shared/material/boolean/boolean.module.d.ts +12 -11
- package/src/app/shared/material/boolean/material-boolean2.d.ts +66 -0
- package/src/app/shared/material/boolean/material.boolean.d.ts +5 -4
- package/src/app/shared/material/boolean/testing/boolean.test.page.d.ts +21 -0
- package/src/app/shared/material/chips/material.chips.d.ts +8 -9
- package/src/app/shared/material/chips/testing/chips.test.d.ts +2 -2
- package/src/app/shared/material/datetime/datetime.module.d.ts +2 -2
- package/src/app/shared/material/datetime/material.date.d.ts +5 -4
- package/src/app/shared/material/datetime/material.dateshort.d.ts +8 -7
- package/src/app/shared/material/datetime/material.datetime.d.ts +16 -8
- package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +7 -1
- package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +3 -1
- package/src/app/shared/material/datetime/testing/mat-dateshort.test.d.ts +3 -1
- package/src/app/shared/material/duration/duration.module.d.ts +6 -5
- package/src/app/shared/material/duration/material.duration.d.ts +6 -5
- package/src/app/shared/material/duration/testing/mat-duration.test.d.ts +22 -0
- package/src/app/shared/material/latlong/material.latlong.d.ts +16 -9
- package/src/app/shared/material/latlong/material.latlong.module.d.ts +9 -8
- package/src/app/shared/material/latlong/testing/latlong.test.d.ts +3 -1
- package/src/app/shared/material/material.testing.module.d.ts +23 -19
- package/src/app/shared/material/numpad/numpad.append-to-input.directive.d.ts +1 -1
- package/src/app/shared/material/numpad/numpad.component.d.ts +1 -1
- package/src/app/shared/material/numpad/numpad.container.d.ts +1 -1
- package/src/app/shared/material/numpad/numpad.content.d.ts +1 -1
- package/src/app/shared/material/numpad/numpad.directive.d.ts +1 -1
- package/src/app/shared/material/numpad/numpad.dom-service.d.ts +3 -3
- package/src/app/shared/material/numpad/testing/numpad.test.d.ts +1 -1
- package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +0 -3
- package/src/app/shared/material/swipe/material.swipe.d.ts +6 -6
- package/src/app/shared/material/swipe/swipe.module.d.ts +2 -1
- package/src/app/shared/material/swipe/testing/swipe.test.d.ts +1 -1
- package/src/app/shared/material/testing/common.test.d.ts +25 -0
- package/src/app/shared/material/text/testing/text-form.testing.d.ts +1 -1
- package/src/app/shared/material/text/text-form.component.d.ts +1 -1
- package/src/app/shared/named-filter/named-filter-selector.component.d.ts +1 -1
- package/src/app/shared/named-filter/named-filter.service.d.ts +1 -1
- package/src/app/shared/pipes/maskito.pipe.d.ts +16 -0
- package/src/app/shared/pipes/ng-init.pipe.d.ts +1 -1
- package/src/app/shared/pipes/pipes.module.d.ts +5 -4
- package/src/app/shared/pipes/string.pipes.d.ts +6 -0
- package/src/app/shared/pipes/types.pipes.d.ts +7 -0
- package/src/app/shared/rx-state.module.d.ts +10 -0
- package/src/app/shared/services/job.utils.d.ts +1 -1
- package/src/app/shared/services/memory-entity-service.class.d.ts +1 -1
- package/src/app/shared/services/startable-observable-service.class.d.ts +3 -0
- package/src/app/shared/services/startable-service.class.d.ts +3 -0
- package/src/app/shared/shared.module.d.ts +4 -4
- package/src/app/shared/storage/storage-explorer.component.d.ts +1 -1
- package/src/app/shared/storage/storage-explorer.module.d.ts +3 -3
- package/src/app/shared/storage/storage.service.d.ts +1 -1
- package/src/app/shared/storage/storage.utils.d.ts +1 -1
- package/src/app/shared/testing/observable.test.d.ts +1 -1
- package/src/app/shared/testing/tests.page.d.ts +1 -1
- package/src/app/shared/toast/toast.testing.d.ts +1 -1
- package/src/app/shared/toolbar/modal-toolbar.d.ts +1 -1
- package/src/app/shared/toolbar/toolbar.d.ts +1 -1
- package/src/app/shared/toolbar/toolbar.module.d.ts +4 -3
- package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +1 -1
- package/src/app/shared/upload-file/upload-file-popover.component.d.ts +1 -1
- package/src/app/shared/upload-file/upload-file.component.d.ts +1 -1
- package/src/app/shared/upload-file/upload-file.model.d.ts +2 -2
- package/src/app/social/job/progression/job-progression.component.d.ts +17 -3
- package/src/app/social/job/progression/job-progression.icon.d.ts +24 -10
- package/src/app/social/job/progression/job-progression.list.d.ts +3 -3
- package/src/app/social/job/progression/job-progression.model.d.ts +0 -1
- package/src/app/social/job/testing/job-progression.testing.d.ts +3 -6
- package/src/app/social/message/message.form.d.ts +1 -1
- package/src/app/social/message/message.modal.d.ts +1 -1
- package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +4 -3
- package/src/app/social/user-event/notification/user-event-notification.list.d.ts +1 -1
- package/src/app/social/user-event/testing/user-event.testing.d.ts +1 -1
- package/src/app/social/user-event/testing/user-event.testing.model.d.ts +0 -1
- package/src/app/social/user-event/user-event.model.d.ts +2 -2
- package/src/app/social/user-event/user-event.module.d.ts +3 -2
- package/src/app/social/user-event/user-event.service.d.ts +1 -1
- package/src/assets/i18n/fr.json +2 -2
- package/src/assets/img/logo/logo-eis.png +0 -0
- package/src/assets/manifest.json +1 -1
- package/src/environments/environment.loader.d.ts +1 -1
- package/src/theme/_material.globals.scss +51 -19
- package/src/theme/_material.scss +35 -19
- package/src/theme/_mixins.scss +4 -4
- package/src/theme/_ngx-components.globals.scss +6 -1
- package/src/theme/_ngx-components.scss +264 -535
- package/src/theme/_ngx-components.table.scss +597 -0
- package/src/theme/_theme.scss +1 -0
- package/esm2020/public_api.mjs +0 -332
- package/esm2020/src/app/admin/services/filter/person.filter.mjs +0 -59
- package/esm2020/src/app/admin/services/person.service.mjs +0 -170
- package/esm2020/src/app/admin/services/validator/person.validator.mjs +0 -71
- package/esm2020/src/app/admin/users/users.mjs +0 -250
- package/esm2020/src/app/admin/users/users.module.mjs +0 -54
- package/esm2020/src/app/core/account/account.page.mjs +0 -319
- package/esm2020/src/app/core/account/new-token.modal.mjs +0 -121
- package/esm2020/src/app/core/account/token.table.mjs +0 -141
- package/esm2020/src/app/core/auth/auth.form.mjs +0 -131
- package/esm2020/src/app/core/auth/auth.modal.mjs +0 -72
- package/esm2020/src/app/core/core.testing.module.mjs +0 -86
- package/esm2020/src/app/core/form/buttons/form-buttons-bar.component.mjs +0 -107
- package/esm2020/src/app/core/form/entity/editor.class.mjs +0 -685
- package/esm2020/src/app/core/form/entity/entity-editor-modal.class.mjs +0 -422
- package/esm2020/src/app/core/form/entity/entity-editor.class.mjs +0 -696
- package/esm2020/src/app/core/form/entity/entity-metadata.component.mjs +0 -25
- package/esm2020/src/app/core/form/form.class.mjs +0 -345
- package/esm2020/src/app/core/form/list/list.form.mjs +0 -222
- package/esm2020/src/app/core/form/properties/properties.form.mjs +0 -132
- package/esm2020/src/app/core/form/properties/properties.table.mjs +0 -267
- package/esm2020/src/app/core/form/properties/property.validator.mjs +0 -23
- package/esm2020/src/app/core/form/properties/testing/properties-form.test.mjs +0 -90
- package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.mjs +0 -70
- package/esm2020/src/app/core/form/text-popover/text-popover.component.mjs +0 -146
- package/esm2020/src/app/core/home/home.mjs +0 -257
- package/esm2020/src/app/core/home/home.module.mjs +0 -48
- package/esm2020/src/app/core/icon/icon.component.mjs +0 -41
- package/esm2020/src/app/core/install/install-upgrade-card.component.mjs +0 -344
- package/esm2020/src/app/core/menu/menu.component.mjs +0 -242
- package/esm2020/src/app/core/menu/menu.model.mjs +0 -247
- package/esm2020/src/app/core/menu/menu.module.mjs +0 -57
- package/esm2020/src/app/core/menu/menu.service.mjs +0 -660
- package/esm2020/src/app/core/menu/sub-menu-tab.directive.mjs +0 -98
- package/esm2020/src/app/core/menu/testing/menu.testing.mjs +0 -121
- package/esm2020/src/app/core/offline/update-offline-mode-card.component.mjs +0 -27
- package/esm2020/src/app/core/peer/select-peer.modal.mjs +0 -183
- package/esm2020/src/app/core/register/register-confirm.page.mjs +0 -81
- package/esm2020/src/app/core/register/register.form.mjs +0 -183
- package/esm2020/src/app/core/register/register.modal.mjs +0 -52
- package/esm2020/src/app/core/services/account.service.mjs +0 -1235
- package/esm2020/src/app/core/services/auth-guard.service.mjs +0 -71
- package/esm2020/src/app/core/services/base-entity-service.class.mjs +0 -468
- package/esm2020/src/app/core/services/base-graphql-service.class.mjs +0 -221
- package/esm2020/src/app/core/services/base58.mjs +0 -78
- package/esm2020/src/app/core/services/config.service.mjs +0 -357
- package/esm2020/src/app/core/services/crypto.service.mjs +0 -107
- package/esm2020/src/app/core/services/local-settings.service.mjs +0 -460
- package/esm2020/src/app/core/services/model/account.model.mjs +0 -147
- package/esm2020/src/app/core/services/model/config.model.mjs +0 -92
- package/esm2020/src/app/core/services/model/department.model.mjs +0 -30
- package/esm2020/src/app/core/services/model/entity.decorators.mjs +0 -97
- package/esm2020/src/app/core/services/model/entity.model.mjs +0 -225
- package/esm2020/src/app/core/services/model/peer.model.mjs +0 -68
- package/esm2020/src/app/core/services/model/person.model.mjs +0 -97
- package/esm2020/src/app/core/services/model/referential.model.mjs +0 -167
- package/esm2020/src/app/core/services/model/token.model.mjs +0 -52
- package/esm2020/src/app/core/services/network.service.mjs +0 -607
- package/esm2020/src/app/core/services/storage/entities-storage.service.mjs +0 -428
- package/esm2020/src/app/core/services/storage/entity-store.class.mjs +0 -449
- package/esm2020/src/app/core/services/testing/referential-filter.model.mjs +0 -23
- package/esm2020/src/app/core/services/testing/referential.validator.mjs +0 -45
- package/esm2020/src/app/core/services/validator/account.validator.mjs +0 -41
- package/esm2020/src/app/core/services/validator/base.validator.class.mjs +0 -47
- package/esm2020/src/app/core/services/validator/local-settings.validator.mjs +0 -66
- package/esm2020/src/app/core/settings/settings.page.mjs +0 -312
- package/esm2020/src/app/core/table/actions-column.component.mjs +0 -102
- package/esm2020/src/app/core/table/async-table.class.mjs +0 -1698
- package/esm2020/src/app/core/table/entities-async-table-datasource.class.mjs +0 -384
- package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +0 -399
- package/esm2020/src/app/core/table/memory-table.class.mjs +0 -53
- package/esm2020/src/app/core/table/table-select-columns.component.mjs +0 -43
- package/esm2020/src/app/core/table/table.class.mjs +0 -1733
- package/esm2020/src/app/core/table/table.model.mjs +0 -12
- package/esm2020/src/app/core/table/testing/table-validator.service.mjs +0 -27
- package/esm2020/src/app/core/table/testing/table.testing.mjs +0 -281
- package/esm2020/src/app/core/table/testing/table.testing.module.mjs +0 -38
- package/esm2020/src/app/shared/audio/audio.mjs +0 -248
- package/esm2020/src/app/shared/audio/audio.testing.mjs +0 -31
- package/esm2020/src/app/shared/capacitor/keyboard.mjs +0 -40
- package/esm2020/src/app/shared/capacitor/plugins.mjs +0 -9
- package/esm2020/src/app/shared/dates.mjs +0 -149
- package/esm2020/src/app/shared/debug/debug.component.mjs +0 -39
- package/esm2020/src/app/shared/directives/autofocus.directive.mjs +0 -93
- package/esm2020/src/app/shared/directives/autotitle.directive.mjs +0 -30
- package/esm2020/src/app/shared/directives/drag-and-drop.directive.mjs +0 -53
- package/esm2020/src/app/shared/directives/ng-var.directive.mjs +0 -31
- package/esm2020/src/app/shared/directives/resizable/resizable.component.mjs +0 -59
- package/esm2020/src/app/shared/directives/resizable/resizable.directive.mjs +0 -40
- package/esm2020/src/app/shared/file/file.service.mjs +0 -117
- package/esm2020/src/app/shared/form/field.component.mjs +0 -332
- package/esm2020/src/app/shared/form/loading-spinner.mjs +0 -36
- package/esm2020/src/app/shared/geolocation/geolocation.utils.mjs +0 -80
- package/esm2020/src/app/shared/gesture/gesture-config.mjs +0 -49
- package/esm2020/src/app/shared/graph/graph-colors.mjs +0 -212
- package/esm2020/src/app/shared/guard/component-dirty.guard.mjs +0 -57
- package/esm2020/src/app/shared/help/help.modal.mjs +0 -53
- package/esm2020/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +0 -23
- package/esm2020/src/app/shared/hotkeys/hotkeys.service.mjs +0 -84
- package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +0 -368
- package/esm2020/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +0 -27
- package/esm2020/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +0 -90
- package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +0 -39
- package/esm2020/src/app/shared/image/image.service.mjs +0 -98
- package/esm2020/src/app/shared/inputs.mjs +0 -231
- package/esm2020/src/app/shared/interceptors/progess.interceptor.mjs +0 -27
- package/esm2020/src/app/shared/logging/logging-service.class.mjs +0 -121
- package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +0 -47
- package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +0 -920
- package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +0 -78
- package/esm2020/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +0 -209
- package/esm2020/src/app/shared/material/badge/badge.directive.mjs +0 -199
- package/esm2020/src/app/shared/material/badge/badge.test.mjs +0 -41
- package/esm2020/src/app/shared/material/boolean/boolean.module.mjs +0 -68
- package/esm2020/src/app/shared/material/boolean/material.boolean.mjs +0 -253
- package/esm2020/src/app/shared/material/chips/chips.module.mjs +0 -76
- package/esm2020/src/app/shared/material/chips/material.chips.mjs +0 -696
- package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +0 -143
- package/esm2020/src/app/shared/material/datetime/material.date.mjs +0 -376
- package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +0 -385
- package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +0 -499
- package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +0 -109
- package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +0 -111
- package/esm2020/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +0 -103
- package/esm2020/src/app/shared/material/duration/duration.module.mjs +0 -67
- package/esm2020/src/app/shared/material/duration/material.duration.mjs +0 -257
- package/esm2020/src/app/shared/material/latlong/material.latlong.mjs +0 -382
- package/esm2020/src/app/shared/material/latlong/material.latlong.module.mjs +0 -67
- package/esm2020/src/app/shared/material/latlong/testing/latlong.test.mjs +0 -102
- package/esm2020/src/app/shared/material/material.module.mjs +0 -229
- package/esm2020/src/app/shared/material/material.testing.module.mjs +0 -179
- package/esm2020/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +0 -98
- package/esm2020/src/app/shared/material/numpad/numpad.component.mjs +0 -80
- package/esm2020/src/app/shared/material/numpad/numpad.container.mjs +0 -190
- package/esm2020/src/app/shared/material/numpad/numpad.content.mjs +0 -17
- package/esm2020/src/app/shared/material/numpad/numpad.directive.mjs +0 -162
- package/esm2020/src/app/shared/material/numpad/numpad.dom-service.mjs +0 -37
- package/esm2020/src/app/shared/material/numpad/numpad.model.mjs +0 -15
- package/esm2020/src/app/shared/material/numpad/testing/numpad.test.mjs +0 -46
- package/esm2020/src/app/shared/material/paginator/material.paginator-i18n.mjs +0 -46
- package/esm2020/src/app/shared/material/stepper/material.stepper-i18n.mjs +0 -22
- package/esm2020/src/app/shared/material/swipe/material.swipe.mjs +0 -344
- package/esm2020/src/app/shared/material/swipe/swipe.module.mjs +0 -52
- package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +0 -64
- package/esm2020/src/app/shared/material/text/testing/text-form.testing.mjs +0 -29
- package/esm2020/src/app/shared/material/text/text-form.component.mjs +0 -89
- package/esm2020/src/app/shared/named-filter/named-filter-selector.component.mjs +0 -224
- package/esm2020/src/app/shared/named-filter/named-filter.model.mjs +0 -45
- package/esm2020/src/app/shared/named-filter/named-filter.service.mjs +0 -63
- package/esm2020/src/app/shared/pipes/colors.pipe.mjs +0 -25
- package/esm2020/src/app/shared/pipes/date-diff-duration.pipe.mjs +0 -48
- package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +0 -66
- package/esm2020/src/app/shared/pipes/date-from-now.pipe.mjs +0 -27
- package/esm2020/src/app/shared/pipes/duration.pipe.mjs +0 -34
- package/esm2020/src/app/shared/pipes/file-size.pipe.mjs +0 -62
- package/esm2020/src/app/shared/pipes/form.pipes.mjs +0 -187
- package/esm2020/src/app/shared/pipes/latlong-format.pipe.mjs +0 -46
- package/esm2020/src/app/shared/pipes/ng-init.pipe.mjs +0 -21
- package/esm2020/src/app/shared/pipes/pipes.module.mjs +0 -239
- package/esm2020/src/app/shared/pipes/property.pipes.mjs +0 -93
- package/esm2020/src/app/shared/pipes/string.pipes.mjs +0 -121
- package/esm2020/src/app/shared/pipes/translate-context.pipe.mjs +0 -43
- package/esm2020/src/app/shared/pipes/types.pipes.mjs +0 -45
- package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +0 -339
- package/esm2020/src/app/shared/services/progress-bar.service.mjs +0 -33
- package/esm2020/src/app/shared/services/startable-observable-service.class.mjs +0 -118
- package/esm2020/src/app/shared/services/translate-context.service.mjs +0 -103
- package/esm2020/src/app/shared/shared.module.mjs +0 -229
- package/esm2020/src/app/shared/storage/storage-explorer.component.mjs +0 -268
- package/esm2020/src/app/shared/storage/storage-explorer.module.mjs +0 -47
- package/esm2020/src/app/shared/storage/storage.service.mjs +0 -132
- package/esm2020/src/app/shared/testing/observable.test.mjs +0 -95
- package/esm2020/src/app/shared/testing/tests.page.mjs +0 -33
- package/esm2020/src/app/shared/toast/toast.testing.mjs +0 -51
- package/esm2020/src/app/shared/toast/toasts.mjs +0 -144
- package/esm2020/src/app/shared/toolbar/modal-toolbar.mjs +0 -58
- package/esm2020/src/app/shared/toolbar/toolbar.mjs +0 -251
- package/esm2020/src/app/shared/toolbar/toolbar.module.mjs +0 -53
- package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.mjs +0 -58
- package/esm2020/src/app/shared/upload-file/upload-file-popover.component.mjs +0 -97
- package/esm2020/src/app/shared/upload-file/upload-file.component.mjs +0 -204
- package/esm2020/src/app/shared/upload-file/upload-file.model.mjs +0 -20
- package/esm2020/src/app/shared/validator/form-error-adapter.class.mjs +0 -104
- package/esm2020/src/app/shared/validator/validators.mjs +0 -580
- package/esm2020/src/app/shared/version/versions.mjs +0 -81
- package/esm2020/src/app/social/job/job.module.mjs +0 -42
- package/esm2020/src/app/social/job/progression/job-progression.component.mjs +0 -20
- package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +0 -216
- package/esm2020/src/app/social/job/progression/job-progression.list.mjs +0 -43
- package/esm2020/src/app/social/job/progression/job-progression.model.mjs +0 -23
- package/esm2020/src/app/social/job/progression/job-progression.service.mjs +0 -71
- package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +0 -52
- package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +0 -55
- package/esm2020/src/app/social/message/message.form.mjs +0 -136
- package/esm2020/src/app/social/message/message.modal.mjs +0 -99
- package/esm2020/src/app/social/message/message.model.mjs +0 -67
- package/esm2020/src/app/social/message/message.service.mjs +0 -105
- package/esm2020/src/app/social/user-event/notification/user-event-notification.icon.mjs +0 -114
- package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +0 -246
- package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +0 -227
- package/esm2020/src/app/social/user-event/testing/user-event.testing.model.mjs +0 -112
- package/esm2020/src/app/social/user-event/testing/user-event.testing.service.mjs +0 -111
- package/esm2020/src/app/social/user-event/user-event.module.mjs +0 -39
- package/esm2020/src/app/social/user-event/user-event.service.mjs +0 -501
- package/esm2020/src/environments/environment.class.mjs +0 -5
- package/esm2020/src/environments/environment.loader.mjs +0 -79
- package/fesm2015/sumaris-net.ngx-components.mjs +0 -41105
- package/fesm2015/sumaris-net.ngx-components.mjs.map +0 -1
- package/fesm2020/sumaris-net.ngx-components.mjs.map +0 -1
- package/resources/README.md +0 -7
- /package/{esm2020 → esm2022}/src/app/core/services/config/core.config.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/core/services/errors.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/core/services/model/filter.model.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/core/services/model/history.model.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/core/services/model/model.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/core/services/model/settings.model.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/core/services/model/tree-item-entity.model.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/core/services/network.types.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/core/services/network.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/core/table/table.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/alerts.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/constants.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/debug/debug-service.class.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/events.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/file/csv.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/file/images.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/file/json.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/file/uri.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/focusable.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/forms.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/gesture/hammer.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/graph/colors.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/http/http.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/image/image.model.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/logging/log-level.model.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/logging/logger.model.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/logging/logging-service.config.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/material/material.animations.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/modules.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/observables.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/platforms.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/services/entity-service.class.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/services/job.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/services/validator-service.class.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/services.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/shared/types.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/social/social.errors.mjs +0 -0
- /package/{esm2020 → esm2022}/src/app/social/user-event/user-event.model.mjs +0 -0
- /package/{esm2020 → esm2022}/sumaris-net.ngx-components.mjs +0 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { createAnimation, IonicSafeString, ToastController } from '@ionic/angular';
|
|
2
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
3
|
+
import { isEmptyArray, isNotNil } from '../functions';
|
|
4
|
+
const TOAST_MAX_HEIGHT_PX = 75;
|
|
5
|
+
const TOAST_MAX_STACK_SIZE = 4;
|
|
6
|
+
export class Toasts {
|
|
7
|
+
static counter = 0;
|
|
8
|
+
static stackSize = 0;
|
|
9
|
+
static async showSimple(injector, opts) {
|
|
10
|
+
return this.show(injector.get(ToastController), injector.get(TranslateService), opts);
|
|
11
|
+
}
|
|
12
|
+
static async show(toastController, translate, opts) {
|
|
13
|
+
// DEBUG
|
|
14
|
+
//console.debug('[Toasts.show]', opts);
|
|
15
|
+
if (!toastController || !translate) {
|
|
16
|
+
console.error('Missing required argument \'toastController\' or \'translate\'');
|
|
17
|
+
if (opts.message instanceof IonicSafeString)
|
|
18
|
+
console.info('[toasts] message: ' + (translate && translate.instant(opts.message.value) || opts.message.value));
|
|
19
|
+
else if (typeof opts.message === 'string')
|
|
20
|
+
console.info('[toasts] message: ' + (translate && translate.instant(opts.message, opts.messageParams) || opts.message));
|
|
21
|
+
return Promise.resolve({});
|
|
22
|
+
}
|
|
23
|
+
this.counter++; // Increment toast counter
|
|
24
|
+
let currentOffset = this.stackSize;
|
|
25
|
+
if (this.stackSize < TOAST_MAX_STACK_SIZE) {
|
|
26
|
+
this.stackSize++; // Increment stack offset
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
this.stackSize = 1; // Reset the stack
|
|
30
|
+
currentOffset = 0;
|
|
31
|
+
}
|
|
32
|
+
const updateCounters = () => {
|
|
33
|
+
// Decrease counter
|
|
34
|
+
this.counter--;
|
|
35
|
+
// If all toast closed: reset the stack offset
|
|
36
|
+
if (this.counter === 0) {
|
|
37
|
+
this.stackSize = 0;
|
|
38
|
+
}
|
|
39
|
+
// If current toast is the last one, decrease the offset
|
|
40
|
+
else if (this.stackSize === currentOffset + 1) {
|
|
41
|
+
this.stackSize--;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
const message = opts.message && opts.message instanceof IonicSafeString ? opts.message.value : opts.message;
|
|
45
|
+
const i18nKeys = [message];
|
|
46
|
+
if (opts.header)
|
|
47
|
+
i18nKeys.push(opts.header);
|
|
48
|
+
let closeButton;
|
|
49
|
+
if (opts.showCloseButton) {
|
|
50
|
+
opts.buttons = opts.buttons || [];
|
|
51
|
+
const buttonIndex = opts.buttons
|
|
52
|
+
.map(b => typeof b === 'object' && b || undefined)
|
|
53
|
+
.filter(isNotNil)
|
|
54
|
+
.findIndex(b => b.role === 'close');
|
|
55
|
+
if (buttonIndex !== -1) {
|
|
56
|
+
closeButton = opts.buttons[buttonIndex];
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
closeButton = { role: 'close' };
|
|
60
|
+
opts.buttons.push(closeButton);
|
|
61
|
+
}
|
|
62
|
+
closeButton.text = closeButton.text || 'COMMON.BTN_OK';
|
|
63
|
+
i18nKeys.push(closeButton.text);
|
|
64
|
+
}
|
|
65
|
+
// Read CSS
|
|
66
|
+
const cssArray = opts.cssClass && typeof opts.cssClass === 'string' && opts.cssClass.split(',') || opts.cssClass || [];
|
|
67
|
+
// Add 'error' class, if need
|
|
68
|
+
if (opts.type) {
|
|
69
|
+
switch (opts.type) {
|
|
70
|
+
case 'error':
|
|
71
|
+
cssArray.push('danger');
|
|
72
|
+
break;
|
|
73
|
+
case 'warning':
|
|
74
|
+
cssArray.push('accent');
|
|
75
|
+
break;
|
|
76
|
+
case 'info':
|
|
77
|
+
cssArray.push('secondary');
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const translations = translate.instant(i18nKeys);
|
|
82
|
+
if (opts.messageParams) {
|
|
83
|
+
translations[message] = translate.instant(message, opts.messageParams);
|
|
84
|
+
}
|
|
85
|
+
if (closeButton) {
|
|
86
|
+
closeButton.text = translations[closeButton.text];
|
|
87
|
+
}
|
|
88
|
+
// Retrieve the toast position
|
|
89
|
+
const position = opts.position || (opts.mode === 'ios' ? 'bottom' : 'top');
|
|
90
|
+
if (!opts.enterAnimation && position !== 'middle') {
|
|
91
|
+
// FIXME: animation failed, since migration to Ionic 6
|
|
92
|
+
// When computing, the baseEle has no wrapper yet
|
|
93
|
+
//opts.enterAnimation = this.createEnterAnimation(animationCtrl, currentOffset, opts);
|
|
94
|
+
// opts.enterAnimation = (baseEl: HTMLElement, opts) => createAnimation()
|
|
95
|
+
// .addElement(baseEl)
|
|
96
|
+
// .delay(400)
|
|
97
|
+
// .afterAddClass('stacked');
|
|
98
|
+
// As workaround, we add an offset using a CSS class
|
|
99
|
+
cssArray.push('toast-stacked-' + position);
|
|
100
|
+
cssArray.push('toast-stack-offset-' + currentOffset);
|
|
101
|
+
}
|
|
102
|
+
opts.cssClass = cssArray;
|
|
103
|
+
const toast = await toastController.create({
|
|
104
|
+
// Default values
|
|
105
|
+
position,
|
|
106
|
+
duration: opts.showCloseButton ? 10000 : 4000,
|
|
107
|
+
...opts,
|
|
108
|
+
message: translations[message],
|
|
109
|
+
//header: opts.header && translations[opts.header] || undefined
|
|
110
|
+
});
|
|
111
|
+
if (opts.onWillPresent)
|
|
112
|
+
opts.onWillPresent(toast);
|
|
113
|
+
await toast.present();
|
|
114
|
+
if (isEmptyArray(opts.buttons)) {
|
|
115
|
+
// Not need to wait dismiss (no 'await')
|
|
116
|
+
toast.onDidDismiss().then(updateCounters);
|
|
117
|
+
return null; // no result
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
// Wait for button result
|
|
121
|
+
const result = await toast.onDidDismiss();
|
|
122
|
+
updateCounters();
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
static createEnterAnimation(animationCtrl, currentOffset, opts) {
|
|
127
|
+
if (opts.position === 'middle') {
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
const direction = opts.position === 'top' ? 1 : -1;
|
|
131
|
+
const start = (currentOffset) * TOAST_MAX_HEIGHT_PX - direction * TOAST_MAX_HEIGHT_PX;
|
|
132
|
+
const end = direction * (currentOffset) * TOAST_MAX_HEIGHT_PX;
|
|
133
|
+
return (baseEl, opts) => {
|
|
134
|
+
// FIXME: wrapper is always null
|
|
135
|
+
const wrapper = baseEl.querySelector('.toast-wrapper');
|
|
136
|
+
return createAnimation()
|
|
137
|
+
.addElement(wrapper)
|
|
138
|
+
.duration(250)
|
|
139
|
+
.fromTo('transform', `translateY(${start}px)`, `translateY(${end}px)`)
|
|
140
|
+
.fromTo('opacity', '0', '1');
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvdG9hc3QvdG9hc3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBc0IsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUdyRCxPQUFPLEVBQUMsWUFBWSxFQUFFLFFBQVEsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUdwRCxNQUFNLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztBQUMvQixNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQVMvQixNQUFNLE9BQU8sTUFBTTtJQUNqQixNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNuQixNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUVyQixNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FDckIsUUFBa0IsRUFDbEIsSUFBc0I7UUFFcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDZixlQUFnQyxFQUNoQyxTQUEyQixFQUMzQixJQUFzQjtRQUd0QixRQUFRO1FBQ1IsdUNBQXVDO1FBRXZDLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFDO1lBQ2hGLElBQUksSUFBSSxDQUFDLE9BQU8sWUFBWSxlQUFlO2dCQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxTQUFTLElBQUksU0FB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SUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRTtZQUM5QixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxtQkFBbUIsR0FBSSxTQUFTLEdBQUcsbUJBQW1CLENBQUM7UUFDdkYsTUFBTSxHQUFHLEdBQUcsU0FBUyxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsbUJBQW1CLENBQUM7UUFDOUQsT0FBTyxDQUFDLE1BQW1CLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDbkMsZ0NBQWdDO1lBQ2hDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN2RCxPQUFPLGVBQWUsRUFBRTtpQkFDckIsVUFBVSxDQUFDLE9BQU8sQ0FBQztpQkFDbkIsUUFBUSxDQUFDLEdBQUcsQ0FBQztpQkFDYixNQUFNLENBQUMsV0FBVyxFQUFFLGNBQWMsS0FBSyxLQUFLLEVBQUUsY0FBYyxHQUFHLEtBQUssQ0FBQztpQkFDckUsTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDO0lBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QW5pbWF0aW9uQ29udHJvbGxlciwgY3JlYXRlQW5pbWF0aW9uLCBJb25pY1NhZmVTdHJpbmcsIFRvYXN0Q29udHJvbGxlcn0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7QW5pbWF0aW9uQnVpbGRlciwgT3ZlcmxheUV2ZW50RGV0YWlsLCBUb2FzdE9wdGlvbnN9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7VG9hc3RCdXR0b259IGZyb20gJ0Bpb25pYy9jb3JlL2Rpc3QvdHlwZXMvY29tcG9uZW50cy90b2FzdC90b2FzdC1pbnRlcmZhY2UnO1xuaW1wb3J0IHtpc0VtcHR5QXJyYXksIGlzTm90TmlsfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHtJbmplY3Rvcn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmNvbnN0IFRPQVNUX01BWF9IRUlHSFRfUFggPSA3NTtcbmNvbnN0IFRPQVNUX01BWF9TVEFDS19TSVpFID0gNDtcblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFNob3dUb2FzdE9wdGlvbnMgZXh0ZW5kcyBUb2FzdE9wdGlvbnMge1xuICB0eXBlPzogJ2Vycm9yJ3wnd2FybmluZyd8J2luZm8nO1xuICBtZXNzYWdlUGFyYW1zPzogYW55O1xuICBzaG93Q2xvc2VCdXR0b24/OiBib29sZWFuO1xuICBvbldpbGxQcmVzZW50PzogKHRvYXN0OiBIVE1MSW9uVG9hc3RFbGVtZW50KSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgVG9hc3RzIHtcbiAgc3RhdGljIGNvdW50ZXIgPSAwO1xuICBzdGF0aWMgc3RhY2tTaXplID0gMDtcblxuICBzdGF0aWMgYXN5bmMgc2hvd1NpbXBsZTxUID0gYW55PihcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgb3B0czogU2hvd1RvYXN0T3B0aW9uc1xuICApOiBQcm9taXNlPE92ZXJsYXlFdmVudERldGFpbDxUPj4ge1xuICAgICAgcmV0dXJuIHRoaXMuc2hvdyhpbmplY3Rvci5nZXQoVG9hc3RDb250cm9sbGVyKSwgaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLCBvcHRzKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBzaG93PFQgPSBhbnk+KFxuICAgIHRvYXN0Q29udHJvbGxlcjogVG9hc3RDb250cm9sbGVyLFxuICAgIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBvcHRzOiBTaG93VG9hc3RPcHRpb25zXG4gICk6IFByb21pc2U8T3ZlcmxheUV2ZW50RGV0YWlsPFQ+PiB7XG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZygnW1RvYXN0cy5zaG93XScsIG9wdHMpO1xuXG4gICAgaWYgKCF0b2FzdENvbnRyb2xsZXIgfHwgIXRyYW5zbGF0ZSkge1xuICAgICAgY29uc29sZS5lcnJvcignTWlzc2luZyByZXF1aXJlZCBhcmd1bWVudCBcXCd0b2FzdENvbnRyb2xsZXJcXCcgb3IgXFwndHJhbnNsYXRlXFwnJyk7XG4gICAgICBpZiAob3B0cy5tZXNzYWdlIGluc3RhbmNlb2YgSW9uaWNTYWZlU3RyaW5nKSBjb25zb2xlLmluZm8oJ1t0b2FzdHNdIG1lc3NhZ2U6ICcgKyAodHJhbnNsYXRlICYmIHRyYW5zbGF0ZS5pbnN0YW50KG9wdHMubWVzc2FnZS52YWx1ZSkgfHwgb3B0cy5tZXNzYWdlLnZhbHVlKSk7XG4gICAgICBlbHNlIGlmICh0eXBlb2Ygb3B0cy5tZXNzYWdlID09PSAnc3RyaW5nJykgY29uc29sZS5pbmZvKCdbdG9hc3RzXSBtZXNzYWdlOiAnICsgKHRyYW5zbGF0ZSAmJiB0cmFuc2xhdGUuaW5zdGFudChvcHRzLm1lc3NhZ2UsIG9wdHMubWVzc2FnZVBhcmFtcykgfHwgb3B0cy5tZXNzYWdlKSk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICB9XG5cbiAgICB0aGlzLmNvdW50ZXIrKzsgLy8gSW5jcmVtZW50IHRvYXN0IGNvdW50ZXJcbiAgICBsZXQgY3VycmVudE9mZnNldCA9IHRoaXMuc3RhY2tTaXplO1xuICAgIGlmICh0aGlzLnN0YWNrU2l6ZSA8IFRPQVNUX01BWF9TVEFDS19TSVpFKSB7XG4gICAgICB0aGlzLnN0YWNrU2l6ZSsrOyAvLyBJbmNyZW1lbnQgc3RhY2sgb2Zmc2V0XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5zdGFja1NpemUgPSAxOyAvLyBSZXNldCB0aGUgc3RhY2tcbiAgICAgIGN1cnJlbnRPZmZzZXQgPSAwO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGVDb3VudGVycyA9ICgpID0+IHtcbiAgICAgIC8vIERlY3JlYXNlIGNvdW50ZXJcbiAgICAgIHRoaXMuY291bnRlci0tO1xuICAgICAgLy8gSWYgYWxsIHRvYXN0IGNsb3NlZDogcmVzZXQgdGhlIHN0YWNrIG9mZnNldFxuICAgICAgaWYgKHRoaXMuY291bnRlciA9PT0gMCkge1xuICAgICAgICB0aGlzLnN0YWNrU2l6ZSA9IDA7XG4gICAgICB9XG4gICAgICAvLyBJZiBjdXJyZW50IHRvYXN0IGlzIHRoZSBsYXN0IG9uZSwgZGVjcmVhc2UgdGhlIG9mZnNldFxuICAgICAgZWxzZSBpZiAodGhpcy5zdGFja1NpemUgPT09IGN1cnJlbnRPZmZzZXQgKyAxKXtcbiAgICAgICAgdGhpcy5zdGFja1NpemUtLTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgbWVzc2FnZSA9IG9wdHMubWVzc2FnZSAmJiBvcHRzLm1lc3NhZ2UgaW5zdGFuY2VvZiBJb25pY1NhZmVTdHJpbmcgPyBvcHRzLm1lc3NhZ2UudmFsdWUgOiBvcHRzLm1lc3NhZ2UgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGkxOG5LZXlzID0gW21lc3NhZ2VdO1xuICAgIGlmIChvcHRzLmhlYWRlcikgaTE4bktleXMucHVzaChvcHRzLmhlYWRlcik7XG5cbiAgICBsZXQgY2xvc2VCdXR0b246IFRvYXN0QnV0dG9uO1xuICAgIGlmIChvcHRzLnNob3dDbG9zZUJ1dHRvbikge1xuICAgICAgb3B0cy5idXR0b25zID0gb3B0cy5idXR0b25zIHx8IFtdO1xuICAgICAgY29uc3QgYnV0dG9uSW5kZXggPSBvcHRzLmJ1dHRvbnNcbiAgICAgICAgLm1hcChiID0+IHR5cGVvZiBiID09PSAnb2JqZWN0JyAmJiBiIGFzIFRvYXN0QnV0dG9uIHx8IHVuZGVmaW5lZClcbiAgICAgICAgLmZpbHRlcihpc05vdE5pbClcbiAgICAgICAgLmZpbmRJbmRleChiID0+IGIucm9sZSA9PT0gJ2Nsb3NlJyk7XG4gICAgICBpZiAoYnV0dG9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNsb3NlQnV0dG9uID0gb3B0cy5idXR0b25zW2J1dHRvbkluZGV4XSBhcyBUb2FzdEJ1dHRvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsb3NlQnV0dG9uID0ge3JvbGU6ICdjbG9zZSd9O1xuICAgICAgICBvcHRzLmJ1dHRvbnMucHVzaChjbG9zZUJ1dHRvbik7XG4gICAgICB9XG4gICAgICBjbG9zZUJ1dHRvbi50ZXh0ID0gY2xvc2VCdXR0b24udGV4dCB8fCAnQ09NTU9OLkJUTl9PSyc7XG4gICAgICBpMThuS2V5cy5wdXNoKGNsb3NlQnV0dG9uLnRleHQpO1xuICAgIH1cblxuICAgIC8vIFJlYWQgQ1NTXG4gICAgY29uc3QgY3NzQXJyYXkgPSBvcHRzLmNzc0NsYXNzICYmIHR5cGVvZiBvcHRzLmNzc0NsYXNzID09PSAnc3RyaW5nJyAmJiBvcHRzLmNzc0NsYXNzLnNwbGl0KCcsJykgfHwgKG9wdHMuY3NzQ2xhc3MgYXMgQXJyYXk8c3RyaW5nPikgfHwgW107XG5cbiAgICAvLyBBZGQgJ2Vycm9yJyBjbGFzcywgaWYgbmVlZFxuICAgIGlmIChvcHRzLnR5cGUpIHtcbiAgICAgIHN3aXRjaCAob3B0cy50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICBjc3NBcnJheS5wdXNoKCdkYW5nZXInKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd2FybmluZyc6XG4gICAgICAgICAgY3NzQXJyYXkucHVzaCgnYWNjZW50Jyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2luZm8nOlxuICAgICAgICAgIGNzc0FycmF5LnB1c2goJ3NlY29uZGFyeScpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IHRyYW5zbGF0ZS5pbnN0YW50KGkxOG5LZXlzKTtcbiAgICBpZiAob3B0cy5tZXNzYWdlUGFyYW1zKSB7XG4gICAgICB0cmFuc2xhdGlvbnNbbWVzc2FnZV0gPSB0cmFuc2xhdGUuaW5zdGFudChtZXNzYWdlLCBvcHRzLm1lc3NhZ2VQYXJhbXMpO1xuICAgIH1cblxuICAgIGlmIChjbG9zZUJ1dHRvbikge1xuICAgICAgY2xvc2VCdXR0b24udGV4dCA9IHRyYW5zbGF0aW9uc1tjbG9zZUJ1dHRvbi50ZXh0XTtcbiAgICB9XG5cbiAgICAvLyBSZXRyaWV2ZSB0aGUgdG9hc3QgcG9zaXRpb25cbiAgICBjb25zdCBwb3NpdGlvbiA9IG9wdHMucG9zaXRpb24gfHwgKG9wdHMubW9kZSA9PT0gJ2lvcycgPyAnYm90dG9tJyA6ICd0b3AnKTtcblxuICAgIGlmICghb3B0cy5lbnRlckFuaW1hdGlvbiAmJiBwb3NpdGlvbiAhPT0gJ21pZGRsZScpIHtcbiAgICAgIC8vIEZJWE1FOiBhbmltYXRpb24gZmFpbGVkLCBzaW5jZSBtaWdyYXRpb24gdG8gSW9uaWMgNlxuICAgICAgLy8gV2hlbiBjb21wdXRpbmcsIHRoZSBiYXNlRWxlIGhhcyBubyB3cmFwcGVyIHlldFxuICAgICAgLy9vcHRzLmVudGVyQW5pbWF0aW9uID0gdGhpcy5jcmVhdGVFbnRlckFuaW1hdGlvbihhbmltYXRpb25DdHJsLCBjdXJyZW50T2Zmc2V0LCBvcHRzKTtcbiAgICAgIC8vIG9wdHMuZW50ZXJBbmltYXRpb24gPSAoYmFzZUVsOiBIVE1MRWxlbWVudCwgb3B0cykgPT4gY3JlYXRlQW5pbWF0aW9uKClcbiAgICAgIC8vICAgICAuYWRkRWxlbWVudChiYXNlRWwpXG4gICAgICAvLyAgICAgLmRlbGF5KDQwMClcbiAgICAgIC8vICAgICAuYWZ0ZXJBZGRDbGFzcygnc3RhY2tlZCcpO1xuICAgICAgLy8gQXMgd29ya2Fyb3VuZCwgd2UgYWRkIGFuIG9mZnNldCB1c2luZyBhIENTUyBjbGFzc1xuICAgICAgY3NzQXJyYXkucHVzaCgndG9hc3Qtc3RhY2tlZC0nICsgcG9zaXRpb24pO1xuICAgICAgY3NzQXJyYXkucHVzaCgndG9hc3Qtc3RhY2stb2Zmc2V0LScgKyBjdXJyZW50T2Zmc2V0KTtcbiAgICB9XG5cbiAgICBvcHRzLmNzc0NsYXNzID0gY3NzQXJyYXk7XG5cbiAgICBjb25zdCB0b2FzdCA9IGF3YWl0IHRvYXN0Q29udHJvbGxlci5jcmVhdGUoe1xuICAgICAgLy8gRGVmYXVsdCB2YWx1ZXNcbiAgICAgIHBvc2l0aW9uLFxuICAgICAgZHVyYXRpb246IG9wdHMuc2hvd0Nsb3NlQnV0dG9uID8gMTAwMDAgOiA0MDAwLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIG1lc3NhZ2U6IHRyYW5zbGF0aW9uc1ttZXNzYWdlXSxcbiAgICAgIC8vaGVhZGVyOiBvcHRzLmhlYWRlciAmJiB0cmFuc2xhdGlvbnNbb3B0cy5oZWFkZXJdIHx8IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgaWYgKG9wdHMub25XaWxsUHJlc2VudCkgb3B0cy5vbldpbGxQcmVzZW50KHRvYXN0KTtcblxuICAgIGF3YWl0IHRvYXN0LnByZXNlbnQoKTtcblxuICAgIGlmIChpc0VtcHR5QXJyYXkob3B0cy5idXR0b25zKSkge1xuICAgICAgLy8gTm90IG5lZWQgdG8gd2FpdCBkaXNtaXNzIChubyAnYXdhaXQnKVxuICAgICAgdG9hc3Qub25EaWREaXNtaXNzKCkudGhlbih1cGRhdGVDb3VudGVycyk7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gbm8gcmVzdWx0XG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICAvLyBXYWl0IGZvciBidXR0b24gcmVzdWx0XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0b2FzdC5vbkRpZERpc21pc3MoKTtcblxuICAgICAgdXBkYXRlQ291bnRlcnMoKTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlRW50ZXJBbmltYXRpb24oYW5pbWF0aW9uQ3RybDogQW5pbWF0aW9uQ29udHJvbGxlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPZmZzZXQ6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpOiBBbmltYXRpb25CdWlsZGVyIHtcbiAgICBpZiAob3B0cy5wb3NpdGlvbiA9PT0gJ21pZGRsZScpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IG9wdHMucG9zaXRpb24gPT09ICd0b3AnID8gMSA6IC0xO1xuICAgIGNvbnN0IHN0YXJ0ID0gKGN1cnJlbnRPZmZzZXQpICogVE9BU1RfTUFYX0hFSUdIVF9QWCAgLSBkaXJlY3Rpb24gKiBUT0FTVF9NQVhfSEVJR0hUX1BYO1xuICAgIGNvbnN0IGVuZCA9IGRpcmVjdGlvbiAqIChjdXJyZW50T2Zmc2V0KSAqIFRPQVNUX01BWF9IRUlHSFRfUFg7XG4gICAgcmV0dXJuIChiYXNlRWw6IEhUTUxFbGVtZW50LCBvcHRzKSA9PiB7XG4gICAgICAvLyBGSVhNRTogd3JhcHBlciBpcyBhbHdheXMgbnVsbFxuICAgICAgY29uc3Qgd3JhcHBlciA9IGJhc2VFbC5xdWVyeVNlbGVjdG9yKCcudG9hc3Qtd3JhcHBlcicpO1xuICAgICAgcmV0dXJuIGNyZWF0ZUFuaW1hdGlvbigpXG4gICAgICAgIC5hZGRFbGVtZW50KHdyYXBwZXIpXG4gICAgICAgIC5kdXJhdGlvbigyNTApXG4gICAgICAgIC5mcm9tVG8oJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGVZKCR7c3RhcnR9cHgpYCwgYHRyYW5zbGF0ZVkoJHtlbmR9cHgpYClcbiAgICAgICAgLmZyb21Ubygnb3BhY2l0eScsICcwJywgJzEnKTtcbiAgICB9O1xuICB9XG5cbn1cbiJdfQ==
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { toBoolean } from '../functions';
|
|
3
|
+
import { Subscription } from 'rxjs';
|
|
4
|
+
import { filter } from 'rxjs/operators';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../hotkeys/hotkeys.service";
|
|
7
|
+
import * as i2 from "@angular/common";
|
|
8
|
+
import * as i3 from "@ionic/angular";
|
|
9
|
+
import * as i4 from "@angular/material/icon";
|
|
10
|
+
export class ModalToolbarComponent {
|
|
11
|
+
hotkeys;
|
|
12
|
+
_subscription = new Subscription();
|
|
13
|
+
modalName = 'modal-toolbar';
|
|
14
|
+
title = '';
|
|
15
|
+
color = 'primary';
|
|
16
|
+
showSpinner = false;
|
|
17
|
+
canValidate;
|
|
18
|
+
validateIcon = { icon: 'checkmark' };
|
|
19
|
+
cancel = new EventEmitter();
|
|
20
|
+
validate = new EventEmitter();
|
|
21
|
+
constructor(hotkeys) {
|
|
22
|
+
this.hotkeys = hotkeys;
|
|
23
|
+
}
|
|
24
|
+
ngOnInit() {
|
|
25
|
+
this.canValidate = toBoolean(this.canValidate, this.validate.observers.length > 0);
|
|
26
|
+
// Ctrl+S
|
|
27
|
+
this._subscription.add(this.hotkeys.addShortcut({ keys: 'control.s', description: 'COMMON.BTN_VALIDATE', elementName: this.modalName })
|
|
28
|
+
.pipe(filter(() => this.canValidate))
|
|
29
|
+
.subscribe((event) => this.validate.emit(event)));
|
|
30
|
+
// Escape
|
|
31
|
+
this._subscription.add(this.hotkeys.addShortcut({ keys: 'escape', description: 'COMMON.BTN_CLOSE', elementName: this.modalName })
|
|
32
|
+
.subscribe((event) => this.cancel.emit(event)));
|
|
33
|
+
}
|
|
34
|
+
ngOnDestroy() {
|
|
35
|
+
this._subscription.unsubscribe();
|
|
36
|
+
}
|
|
37
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: ModalToolbarComponent, deps: [{ token: i1.Hotkeys }], target: i0.ɵɵFactoryTarget.Component });
|
|
38
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: ModalToolbarComponent, selector: "app-modal-toolbar", inputs: { modalName: "modalName", title: "title", color: "color", showSpinner: "showSpinner", canValidate: "canValidate", validateIcon: "validateIcon" }, outputs: { cancel: "cancel", validate: "validate" }, ngImport: i0, template: "<ion-header>\n <ion-toolbar [color]=\"color\">\n <ion-buttons slot=\"start\">\n <ion-button visible-xs visible-sm visible-mobile\n (click)=\"cancel.emit()\">\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n\n <ng-content select=\"[slot=start]\"></ng-content>\n </ion-buttons>\n\n <ion-title [innerHTML]=\"title\"></ion-title>\n\n <ng-content select=\"ion-title\"></ng-content>\n\n <ng-content select=\"ion-buttons[slot=end]\"></ng-content>\n\n <ion-buttons slot=\"end\">\n\n <ng-content select=\"ion-button[slot=end]\"></ng-content>\n\n <ion-spinner *ngIf=\"showSpinner\"></ion-spinner>\n\n <ion-button visible-xs visible-sm visible-mobile\n *ngIf=\"canValidate\"\n (click)=\"validate.emit($event)\">\n <ion-icon slot=\"icon-only\" *ngIf=\"validateIcon?.icon\" [name]=\"validateIcon.icon\"></ion-icon>\n <mat-icon slot=\"icon-only\" *ngIf=\"validateIcon?.matIcon\" >{{validateIcon.matIcon}}</mat-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i3.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i3.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i3.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i3.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
39
|
+
}
|
|
40
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: ModalToolbarComponent, decorators: [{
|
|
41
|
+
type: Component,
|
|
42
|
+
args: [{ selector: 'app-modal-toolbar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-header>\n <ion-toolbar [color]=\"color\">\n <ion-buttons slot=\"start\">\n <ion-button visible-xs visible-sm visible-mobile\n (click)=\"cancel.emit()\">\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n\n <ng-content select=\"[slot=start]\"></ng-content>\n </ion-buttons>\n\n <ion-title [innerHTML]=\"title\"></ion-title>\n\n <ng-content select=\"ion-title\"></ng-content>\n\n <ng-content select=\"ion-buttons[slot=end]\"></ng-content>\n\n <ion-buttons slot=\"end\">\n\n <ng-content select=\"ion-button[slot=end]\"></ng-content>\n\n <ion-spinner *ngIf=\"showSpinner\"></ion-spinner>\n\n <ion-button visible-xs visible-sm visible-mobile\n *ngIf=\"canValidate\"\n (click)=\"validate.emit($event)\">\n <ion-icon slot=\"icon-only\" *ngIf=\"validateIcon?.icon\" [name]=\"validateIcon.icon\"></ion-icon>\n <mat-icon slot=\"icon-only\" *ngIf=\"validateIcon?.matIcon\" >{{validateIcon.matIcon}}</mat-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n" }]
|
|
43
|
+
}], ctorParameters: () => [{ type: i1.Hotkeys }], propDecorators: { modalName: [{
|
|
44
|
+
type: Input
|
|
45
|
+
}], title: [{
|
|
46
|
+
type: Input
|
|
47
|
+
}], color: [{
|
|
48
|
+
type: Input
|
|
49
|
+
}], showSpinner: [{
|
|
50
|
+
type: Input
|
|
51
|
+
}], canValidate: [{
|
|
52
|
+
type: Input
|
|
53
|
+
}], validateIcon: [{
|
|
54
|
+
type: Input
|
|
55
|
+
}], cancel: [{
|
|
56
|
+
type: Output
|
|
57
|
+
}], validate: [{
|
|
58
|
+
type: Output
|
|
59
|
+
}] } });
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtdG9vbGJhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3Rvb2xiYXIvbW9kYWwtdG9vbGJhci50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3Rvb2xiYXIvbW9kYWwtdG9vbGJhci5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUdsQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQVF0QyxNQUFNLE9BQU8scUJBQXFCO0lBMkJaO0lBekJaLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBRzNDLFNBQVMsR0FBRyxlQUFlLENBQUM7SUFHNUIsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUdYLEtBQUssR0FBRyxTQUFTLENBQUM7SUFHbEIsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUdwQixXQUFXLENBQVU7SUFFWixZQUFZLEdBQVksRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFDLENBQUM7SUFHckQsTUFBTSxHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7SUFHbkMsUUFBUSxHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7SUFFckMsWUFBb0IsT0FBZ0I7UUFBaEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztJQUFHLENBQUM7SUFFeEMsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRW5GLFNBQVM7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBQyxDQUFDO2FBQzNHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ3BDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXRELFNBQVM7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBQyxDQUFDO2FBQ3JHLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXRELENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuQyxDQUFDO3VHQS9DVSxxQkFBcUI7MkZBQXJCLHFCQUFxQix3UUNibEMsNm1DQWdDQTs7MkZEbkJhLHFCQUFxQjtrQkFOakMsU0FBUzsrQkFDRSxtQkFBbUIsbUJBR1osdUJBQXVCLENBQUMsTUFBTTs0RUFPL0MsU0FBUztzQkFEUixLQUFLO2dCQUlOLEtBQUs7c0JBREosS0FBSztnQkFJTixLQUFLO3NCQURKLEtBQUs7Z0JBSU4sV0FBVztzQkFEVixLQUFLO2dCQUlOLFdBQVc7c0JBRFYsS0FBSztnQkFHRyxZQUFZO3NCQUFwQixLQUFLO2dCQUdOLE1BQU07c0JBREwsTUFBTTtnQkFJUCxRQUFRO3NCQURQLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0b0Jvb2xlYW59IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0hvdGtleXN9IGZyb20gJy4uL2hvdGtleXMvaG90a2V5cy5zZXJ2aWNlJztcbmltcG9ydCB7SWNvblJlZn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtmaWx0ZXJ9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLW1vZGFsLXRvb2xiYXInLFxuICB0ZW1wbGF0ZVVybDogJ21vZGFsLXRvb2xiYXIuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21vZGFsLXRvb2xiYXIuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBNb2RhbFRvb2xiYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIEBJbnB1dCgpXG4gIG1vZGFsTmFtZSA9ICdtb2RhbC10b29sYmFyJztcblxuICBASW5wdXQoKVxuICB0aXRsZSA9ICcnO1xuXG4gIEBJbnB1dCgpXG4gIGNvbG9yID0gJ3ByaW1hcnknO1xuXG4gIEBJbnB1dCgpXG4gIHNob3dTcGlubmVyID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgY2FuVmFsaWRhdGU6IGJvb2xlYW47XG5cbiAgQElucHV0KCkgdmFsaWRhdGVJY29uOiBJY29uUmVmID0ge2ljb246ICdjaGVja21hcmsnfTtcblxuICBAT3V0cHV0KClcbiAgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgdmFsaWRhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaG90a2V5czogSG90a2V5cykge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNhblZhbGlkYXRlID0gdG9Cb29sZWFuKHRoaXMuY2FuVmFsaWRhdGUsIHRoaXMudmFsaWRhdGUub2JzZXJ2ZXJzLmxlbmd0aCA+IDApO1xuXG4gICAgLy8gQ3RybCtTXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuaG90a2V5cy5hZGRTaG9ydGN1dCh7a2V5czogJ2NvbnRyb2wucycsIGRlc2NyaXB0aW9uOiAnQ09NTU9OLkJUTl9WQUxJREFURScsIGVsZW1lbnROYW1lOiB0aGlzLm1vZGFsTmFtZX0pXG4gICAgICAgIC5waXBlKGZpbHRlcigoKSA9PiB0aGlzLmNhblZhbGlkYXRlKSlcbiAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMudmFsaWRhdGUuZW1pdChldmVudCkpKTtcblxuICAgIC8vIEVzY2FwZVxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLmhvdGtleXMuYWRkU2hvcnRjdXQoe2tleXM6ICdlc2NhcGUnLCBkZXNjcmlwdGlvbjogJ0NPTU1PTi5CVE5fQ0xPU0UnLCBlbGVtZW50TmFtZTogdGhpcy5tb2RhbE5hbWV9KVxuICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4gdGhpcy5jYW5jZWwuZW1pdChldmVudCkpKTtcblxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxufVxuIiwiPGlvbi1oZWFkZXI+XG4gIDxpb24tdG9vbGJhciBbY29sb3JdPVwiY29sb3JcIj5cbiAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cInN0YXJ0XCI+XG4gICAgICA8aW9uLWJ1dHRvbiB2aXNpYmxlLXhzIHZpc2libGUtc20gdmlzaWJsZS1tb2JpbGVcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWwuZW1pdCgpXCI+XG4gICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cImFycm93LWJhY2tcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuXG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc2xvdD1zdGFydF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9pb24tYnV0dG9ucz5cblxuICAgIDxpb24tdGl0bGUgW2lubmVySFRNTF09XCJ0aXRsZVwiPjwvaW9uLXRpdGxlPlxuXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaW9uLXRpdGxlXCI+PC9uZy1jb250ZW50PlxuXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaW9uLWJ1dHRvbnNbc2xvdD1lbmRdXCI+PC9uZy1jb250ZW50PlxuXG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cblxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaW9uLWJ1dHRvbltzbG90PWVuZF1cIj48L25nLWNvbnRlbnQ+XG5cbiAgICAgIDxpb24tc3Bpbm5lciAqbmdJZj1cInNob3dTcGlubmVyXCI+PC9pb24tc3Bpbm5lcj5cblxuICAgICAgPGlvbi1idXR0b24gdmlzaWJsZS14cyB2aXNpYmxlLXNtIHZpc2libGUtbW9iaWxlXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImNhblZhbGlkYXRlXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ2YWxpZGF0ZS5lbWl0KCRldmVudClcIj5cbiAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiAqbmdJZj1cInZhbGlkYXRlSWNvbj8uaWNvblwiICBbbmFtZV09XCJ2YWxpZGF0ZUljb24uaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgIDxtYXQtaWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgKm5nSWY9XCJ2YWxpZGF0ZUljb24/Lm1hdEljb25cIiA+e3t2YWxpZGF0ZUljb24ubWF0SWNvbn19PC9tYXQtaWNvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICA8L2lvbi1idXR0b25zPlxuICA8L2lvbi10b29sYmFyPlxuPC9pb24taGVhZGVyPlxuIl19
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Optional, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import { APP_PROGRESS_BAR_SERVICE } from '../services/progress-bar.service';
|
|
3
|
+
import { isNotNil, isNotNilOrBlank, toBoolean } from '../functions';
|
|
4
|
+
import { debounceTime, distinctUntilChanged, startWith } from 'rxjs/operators';
|
|
5
|
+
import { BehaviorSubject } from 'rxjs';
|
|
6
|
+
import { HAMMER_PRESS_TIME } from '../gesture/gesture-config';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/router";
|
|
9
|
+
import * as i2 from "@ionic/angular";
|
|
10
|
+
import * as i3 from "@angular/common";
|
|
11
|
+
import * as i4 from "@angular/material/progress-bar";
|
|
12
|
+
import * as i5 from "../pipes/colors.pipe";
|
|
13
|
+
export class ToolbarToken {
|
|
14
|
+
}
|
|
15
|
+
export class ToolbarComponent {
|
|
16
|
+
route;
|
|
17
|
+
router;
|
|
18
|
+
navController;
|
|
19
|
+
routerOutlet;
|
|
20
|
+
cd;
|
|
21
|
+
progressBarService;
|
|
22
|
+
_closeTapCount = 0;
|
|
23
|
+
_validateTapCount = 0;
|
|
24
|
+
_defaultBackHref;
|
|
25
|
+
_backHref;
|
|
26
|
+
_progressBarMode$ = new BehaviorSubject(null);
|
|
27
|
+
set progressBarMode(value) {
|
|
28
|
+
if (this.progressBarService)
|
|
29
|
+
return;
|
|
30
|
+
this._progressBarMode$.next(value);
|
|
31
|
+
}
|
|
32
|
+
get progressBarMode() {
|
|
33
|
+
return this._progressBarMode$.value;
|
|
34
|
+
}
|
|
35
|
+
title = '';
|
|
36
|
+
color = 'primary';
|
|
37
|
+
class = '';
|
|
38
|
+
set backHref(value) {
|
|
39
|
+
if (value !== this._backHref) {
|
|
40
|
+
this._backHref = value;
|
|
41
|
+
this.canGoBack = this.canGoBack || isNotNil(value);
|
|
42
|
+
this.markForCheck();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
get backHref() {
|
|
46
|
+
return this._backHref;
|
|
47
|
+
}
|
|
48
|
+
set defaultBackHref(value) {
|
|
49
|
+
if (value !== this._defaultBackHref) {
|
|
50
|
+
this._defaultBackHref = value;
|
|
51
|
+
this.canGoBack = this.canGoBack || isNotNil(value);
|
|
52
|
+
this.markForCheck();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
get defaultBackHref() {
|
|
56
|
+
return this._defaultBackHref;
|
|
57
|
+
}
|
|
58
|
+
hasValidate = false;
|
|
59
|
+
hasClose = false;
|
|
60
|
+
hasSearch;
|
|
61
|
+
canGoBack;
|
|
62
|
+
canShowMenu = true;
|
|
63
|
+
onValidate = new EventEmitter();
|
|
64
|
+
onClose = new EventEmitter();
|
|
65
|
+
onValidateAndClose = new EventEmitter();
|
|
66
|
+
onBackClick = new EventEmitter();
|
|
67
|
+
onSearch = new EventEmitter();
|
|
68
|
+
showSearchBar = false;
|
|
69
|
+
searchbar;
|
|
70
|
+
menuToggle;
|
|
71
|
+
constructor(route, router, navController, routerOutlet, cd, progressBarService) {
|
|
72
|
+
this.route = route;
|
|
73
|
+
this.router = router;
|
|
74
|
+
this.navController = navController;
|
|
75
|
+
this.routerOutlet = routerOutlet;
|
|
76
|
+
this.cd = cd;
|
|
77
|
+
this.progressBarService = progressBarService;
|
|
78
|
+
// Listen progress bar service mode
|
|
79
|
+
if (progressBarService) {
|
|
80
|
+
progressBarService.onProgressChanged
|
|
81
|
+
.pipe(startWith(null), // none, by default
|
|
82
|
+
debounceTime(100), // wait 100ms, to group changes
|
|
83
|
+
// DEBUG
|
|
84
|
+
//tap((mode) => console.debug('[toolbar] Updating progressBarMode: ' + mode))
|
|
85
|
+
distinctUntilChanged()).subscribe(value => this._progressBarMode$.next(value));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
ngOnInit() {
|
|
89
|
+
this.hasValidate = toBoolean(this.hasValidate, this.onValidate.observers.length > 0);
|
|
90
|
+
this.canGoBack = toBoolean(this.canGoBack, this.routerOutlet.canGoBack()
|
|
91
|
+
|| isNotNilOrBlank(this._backHref)
|
|
92
|
+
|| isNotNilOrBlank(this._defaultBackHref));
|
|
93
|
+
this.hasSearch = toBoolean(this.hasSearch, this.onSearch.observers.length > 0);
|
|
94
|
+
}
|
|
95
|
+
ngOnDestroy() {
|
|
96
|
+
this.onBackClick.complete();
|
|
97
|
+
this.onBackClick.unsubscribe();
|
|
98
|
+
this.onValidate.complete();
|
|
99
|
+
this.onValidate.unsubscribe();
|
|
100
|
+
this.onClose.complete();
|
|
101
|
+
this.onClose.unsubscribe();
|
|
102
|
+
this.onValidateAndClose.complete();
|
|
103
|
+
this.onValidateAndClose.unsubscribe();
|
|
104
|
+
this.onSearch.complete();
|
|
105
|
+
this.onSearch.unsubscribe();
|
|
106
|
+
}
|
|
107
|
+
async toggleSearchBar() {
|
|
108
|
+
this.showSearchBar = !this.showSearchBar;
|
|
109
|
+
if (this.showSearchBar && this.searchbar) {
|
|
110
|
+
setTimeout(() => {
|
|
111
|
+
this.searchbar.setFocus();
|
|
112
|
+
this.markForCheck();
|
|
113
|
+
}, 300);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
doBackClick(event) {
|
|
117
|
+
this.onBackClick.emit(event);
|
|
118
|
+
// Stop propagation, if need (can be cancelled by onBackClick observers)
|
|
119
|
+
if (event.defaultPrevented)
|
|
120
|
+
return;
|
|
121
|
+
// Execute the back action
|
|
122
|
+
this.goBack();
|
|
123
|
+
}
|
|
124
|
+
async goBack() {
|
|
125
|
+
console.debug('[toolbar] calling goBack()');
|
|
126
|
+
if (this._backHref) {
|
|
127
|
+
const replaceUrl = !this.routerOutlet.canGoBack();
|
|
128
|
+
// Relative href
|
|
129
|
+
if (this._backHref.startsWith('.')) {
|
|
130
|
+
this.navController.setDirection('back');
|
|
131
|
+
return this.router.navigate([this._backHref], { relativeTo: this.route, replaceUrl });
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
return this.navController.navigateBack(this._backHref);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
else if (this.routerOutlet.canGoBack()) {
|
|
138
|
+
return this.navController.pop();
|
|
139
|
+
}
|
|
140
|
+
else if (this._defaultBackHref) {
|
|
141
|
+
// Relative href
|
|
142
|
+
if (this._defaultBackHref.startsWith('.')) {
|
|
143
|
+
this.navController.setDirection('back');
|
|
144
|
+
return this.router.navigate([this._defaultBackHref], { relativeTo: this.route, replaceUrl: true });
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
return this.navController.navigateBack(this._defaultBackHref);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
console.error('[toolbar] Cannot go back. Missing attribute \'defaultBackHref\' or \'backHref\'');
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
tapClose(event) {
|
|
156
|
+
// DEV only
|
|
157
|
+
// console.debug("[toolbar] tapClose", event.tapCount);
|
|
158
|
+
if (this._validateTapCount > 0)
|
|
159
|
+
return;
|
|
160
|
+
// Distinguish simple and double tap
|
|
161
|
+
this._closeTapCount = event.tapCount;
|
|
162
|
+
setTimeout(() => {
|
|
163
|
+
// Event is obsolete (a new tap event occur)
|
|
164
|
+
if (event.tapCount < this._closeTapCount) {
|
|
165
|
+
// Ignore event
|
|
166
|
+
}
|
|
167
|
+
// If event still the last tap event: process it
|
|
168
|
+
else {
|
|
169
|
+
this.onClose.emit(event.srcEvent || event);
|
|
170
|
+
// Reset tab count
|
|
171
|
+
this._closeTapCount = 0;
|
|
172
|
+
}
|
|
173
|
+
}, 500);
|
|
174
|
+
}
|
|
175
|
+
tapValidate(event) {
|
|
176
|
+
// DEV only
|
|
177
|
+
//console.debug("[toolbar] tapValidate", event.tapCount);
|
|
178
|
+
if (this.onValidateAndClose.observers.length) {
|
|
179
|
+
this.onValidate.emit(event.srcEvent || event);
|
|
180
|
+
}
|
|
181
|
+
// Distinguish simple and double tap
|
|
182
|
+
else {
|
|
183
|
+
this._validateTapCount = event.tapCount;
|
|
184
|
+
setTimeout(() => {
|
|
185
|
+
// Event is obsolete (a new tap event occur)
|
|
186
|
+
if (event.tapCount < this._validateTapCount) {
|
|
187
|
+
// Ignore event
|
|
188
|
+
}
|
|
189
|
+
// If event still the last tap event: process it
|
|
190
|
+
else {
|
|
191
|
+
if (this._validateTapCount === 1) {
|
|
192
|
+
this.onValidate.emit(event.srcEvent || event);
|
|
193
|
+
}
|
|
194
|
+
else if (this._validateTapCount >= 2) {
|
|
195
|
+
this.onValidateAndClose.emit(event.srcEvent || event);
|
|
196
|
+
}
|
|
197
|
+
// Reset tab count
|
|
198
|
+
this._validateTapCount = 0;
|
|
199
|
+
}
|
|
200
|
+
}, HAMMER_PRESS_TIME + 10);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
ionSearchBarChanged(event) {
|
|
204
|
+
this.onSearch.emit(event);
|
|
205
|
+
}
|
|
206
|
+
markForCheck() {
|
|
207
|
+
this.cd.markForCheck();
|
|
208
|
+
}
|
|
209
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: ToolbarComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.NavController }, { token: i2.IonRouterOutlet }, { token: i0.ChangeDetectorRef }, { token: APP_PROGRESS_BAR_SERVICE, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
210
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: ToolbarComponent, selector: "app-toolbar", inputs: { progressBarMode: "progressBarMode", title: "title", color: "color", class: "class", backHref: "backHref", defaultBackHref: "defaultBackHref", hasValidate: "hasValidate", hasClose: "hasClose", hasSearch: "hasSearch", canGoBack: "canGoBack", canShowMenu: "canShowMenu" }, outputs: { onValidate: "onValidate", onClose: "onClose", onValidateAndClose: "onValidateAndClose", onBackClick: "onBackClick", onSearch: "onSearch" }, providers: [
|
|
211
|
+
{ provide: ToolbarToken, useExisting: ToolbarComponent }
|
|
212
|
+
], viewQueries: [{ propertyName: "searchbar", first: true, predicate: ["searchbar"], descendants: true, static: true }, { propertyName: "menuToggle", first: true, predicate: ["menuToggle"], descendants: true, static: true }], ngImport: i0, template: "<ion-header [class]=\"class\">\n <ion-toolbar [color]=\"color\">\n\n <ion-buttons slot=\"start\">\n\n <!-- back button -->\n <ion-button class=\"back-button\"\n *ngIf=\"canGoBack\"\n (click)=\"doBackClick($event)\"\n routerDirection=\"back\" >\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n\n <!-- show menu button -->\n <ion-menu-toggle #menuToggle\n [menu]=\"'left'\"\n [class.cdk-visually-hidden]=\"canGoBack || !canShowMenu\">\n <ion-button>\n <ion-icon slot=\"icon-only\" name=\"menu\"></ion-icon>\n </ion-button>\n </ion-menu-toggle>\n\n <ng-content select=\"[slot=start]\"></ng-content>\n </ion-buttons>\n\n <ion-title [innerHTML]=\"title\"></ion-title>\n\n <ng-content select=\"ion-title, ion-segment\"></ng-content>\n\n <ng-content select=\"ion-buttons[slot=end]\"></ng-content>\n\n <ion-buttons slot=\"end\" collapse=\"true\">\n\n <ng-content select=\"[slot=end]\"></ng-content>\n\n <!-- search bar -->\n <ion-searchbar #searchbar animated\n type=\"search\"\n *ngIf=\"hasSearch\"\n [class.cdk-visually-hidden]=\"!showSearchBar\"\n show-cancel-button=\"always\"\n (ionChange)=\"ionSearchBarChanged($event)\"\n (ionCancel)=\"toggleSearchBar()\">\n </ion-searchbar>\n\n <!-- search button -->\n <ion-button (click)=\"toggleSearchBar()\"\n *ngIf=\"hasSearch && !showSearchBar\">\n <ion-icon slot=\"icon-only\" name=\"search\"></ion-icon>\n </ion-button>\n\n <!-- close button -->\n <ion-button *ngIf=\"hasClose\"\n (tap)=\"tapClose($event)\"\n class=\"visible-xs visible-sm visible-mobile\">\n <ion-icon slot=\"icon-only\" name=\"close\"></ion-icon>\n </ion-button>\n\n <!-- validate button -->\n <ion-button *ngIf=\"hasValidate\"\n (tap)=\"tapValidate($event)\"\n class=\"visible-xs visible-sm visible-mobile\">\n <ion-icon slot=\"icon-only\" name=\"save\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n\n <!-- progress bar -->\n <mat-progress-bar [color]=\"color|matColor\" [mode]=\"_progressBarMode$ | async\">\n </mat-progress-bar>\n</ion-header>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonMenuToggle, selector: "ion-menu-toggle", inputs: ["autoHide", "menu"] }, { kind: "component", type: i2.IonSearchbar, selector: "ion-searchbar", inputs: ["animated", "autocomplete", "autocorrect", "cancelButtonIcon", "cancelButtonText", "clearIcon", "color", "debounce", "disabled", "enterkeyhint", "inputmode", "mode", "name", "placeholder", "searchIcon", "showCancelButton", "showClearButton", "spellcheck", "type", "value"] }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar,ion-range" }, { kind: "component", type: i4.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.MatColorPipe, name: "matColor" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
213
|
+
}
|
|
214
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: ToolbarComponent, decorators: [{
|
|
215
|
+
type: Component,
|
|
216
|
+
args: [{ selector: 'app-toolbar', providers: [
|
|
217
|
+
{ provide: ToolbarToken, useExisting: ToolbarComponent }
|
|
218
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-header [class]=\"class\">\n <ion-toolbar [color]=\"color\">\n\n <ion-buttons slot=\"start\">\n\n <!-- back button -->\n <ion-button class=\"back-button\"\n *ngIf=\"canGoBack\"\n (click)=\"doBackClick($event)\"\n routerDirection=\"back\" >\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n\n <!-- show menu button -->\n <ion-menu-toggle #menuToggle\n [menu]=\"'left'\"\n [class.cdk-visually-hidden]=\"canGoBack || !canShowMenu\">\n <ion-button>\n <ion-icon slot=\"icon-only\" name=\"menu\"></ion-icon>\n </ion-button>\n </ion-menu-toggle>\n\n <ng-content select=\"[slot=start]\"></ng-content>\n </ion-buttons>\n\n <ion-title [innerHTML]=\"title\"></ion-title>\n\n <ng-content select=\"ion-title, ion-segment\"></ng-content>\n\n <ng-content select=\"ion-buttons[slot=end]\"></ng-content>\n\n <ion-buttons slot=\"end\" collapse=\"true\">\n\n <ng-content select=\"[slot=end]\"></ng-content>\n\n <!-- search bar -->\n <ion-searchbar #searchbar animated\n type=\"search\"\n *ngIf=\"hasSearch\"\n [class.cdk-visually-hidden]=\"!showSearchBar\"\n show-cancel-button=\"always\"\n (ionChange)=\"ionSearchBarChanged($event)\"\n (ionCancel)=\"toggleSearchBar()\">\n </ion-searchbar>\n\n <!-- search button -->\n <ion-button (click)=\"toggleSearchBar()\"\n *ngIf=\"hasSearch && !showSearchBar\">\n <ion-icon slot=\"icon-only\" name=\"search\"></ion-icon>\n </ion-button>\n\n <!-- close button -->\n <ion-button *ngIf=\"hasClose\"\n (tap)=\"tapClose($event)\"\n class=\"visible-xs visible-sm visible-mobile\">\n <ion-icon slot=\"icon-only\" name=\"close\"></ion-icon>\n </ion-button>\n\n <!-- validate button -->\n <ion-button *ngIf=\"hasValidate\"\n (tap)=\"tapValidate($event)\"\n class=\"visible-xs visible-sm visible-mobile\">\n <ion-icon slot=\"icon-only\" name=\"save\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n\n <!-- progress bar -->\n <mat-progress-bar [color]=\"color|matColor\" [mode]=\"_progressBarMode$ | async\">\n </mat-progress-bar>\n</ion-header>\n" }]
|
|
219
|
+
}], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.NavController }, { type: i2.IonRouterOutlet }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
|
|
220
|
+
type: Optional
|
|
221
|
+
}, {
|
|
222
|
+
type: Inject,
|
|
223
|
+
args: [APP_PROGRESS_BAR_SERVICE]
|
|
224
|
+
}] }], propDecorators: { progressBarMode: [{
|
|
225
|
+
type: Input
|
|
226
|
+
}], title: [{
|
|
227
|
+
type: Input
|
|
228
|
+
}], color: [{
|
|
229
|
+
type: Input
|
|
230
|
+
}], class: [{
|
|
231
|
+
type: Input
|
|
232
|
+
}], backHref: [{
|
|
233
|
+
type: Input
|
|
234
|
+
}], defaultBackHref: [{
|
|
235
|
+
type: Input
|
|
236
|
+
}], hasValidate: [{
|
|
237
|
+
type: Input
|
|
238
|
+
}], hasClose: [{
|
|
239
|
+
type: Input
|
|
240
|
+
}], hasSearch: [{
|
|
241
|
+
type: Input
|
|
242
|
+
}], canGoBack: [{
|
|
243
|
+
type: Input
|
|
244
|
+
}], canShowMenu: [{
|
|
245
|
+
type: Input
|
|
246
|
+
}], onValidate: [{
|
|
247
|
+
type: Output
|
|
248
|
+
}], onClose: [{
|
|
249
|
+
type: Output
|
|
250
|
+
}], onValidateAndClose: [{
|
|
251
|
+
type: Output
|
|
252
|
+
}], onBackClick: [{
|
|
253
|
+
type: Output
|
|
254
|
+
}], onSearch: [{
|
|
255
|
+
type: Output
|
|
256
|
+
}], searchbar: [{
|
|
257
|
+
type: ViewChild,
|
|
258
|
+
args: ['searchbar', { static: true }]
|
|
259
|
+
}], menuToggle: [{
|
|
260
|
+
type: ViewChild,
|
|
261
|
+
args: ['menuToggle', { static: true }]
|
|
262
|
+
}] } });
|
|
263
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3Rvb2xiYXIvdG9vbGJhci50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3Rvb2xiYXIvdG9vbGJhci5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuSyxPQUFPLEVBQUUsd0JBQXdCLEVBQXVCLE1BQU0sa0NBQWtDLENBQUM7QUFHakcsT0FBTyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUVuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7OztBQUs5RCxNQUFNLE9BQWdCLFlBQVk7Q0FLakM7QUFXRCxNQUFNLE9BQU8sZ0JBQWdCO0lBZ0VqQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ2dEO0lBbkVsRCxjQUFjLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLGlCQUFpQixHQUFHLENBQUMsQ0FBQztJQUN0QixnQkFBZ0IsQ0FBUztJQUN6QixTQUFTLENBQVM7SUFDUCxpQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBa0IsSUFBSSxDQUFDLENBQUM7SUFFbEYsSUFBYSxlQUFlLENBQUMsS0FBc0I7UUFDakQsSUFBSSxJQUFJLENBQUMsa0JBQWtCO1lBQUUsT0FBTztRQUNwQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUss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QzFCSCx3N0VBdUVBOzsyRkQxQ2EsZ0JBQWdCO2tCQVQ1QixTQUFTOytCQUNFLGFBQWEsYUFHWjt3QkFDVCxFQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxrQkFBa0IsRUFBQztxQkFDdkQsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU07OzBCQXVFNUMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyx3QkFBd0I7eUNBN0RqQyxlQUFlO3NCQUEzQixLQUFLO2dCQVNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUVPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBWU8sZUFBZTtzQkFBM0IsS0FBSztnQkFZRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBSWlDLFNBQVM7c0JBQWhELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFDRyxVQUFVO3NCQUFsRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBUFBfUFJPR1JFU1NfQkFSX1NFUlZJQ0UsIElQcm9ncmVzc0JhclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wcm9ncmVzcy1iYXIuc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7SW9uTWVudVRvZ2dsZSwgSW9uUm91dGVyT3V0bGV0LCBJb25TZWFyY2hiYXIsIE5hdkNvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmssIHRvQm9vbGVhbiB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBzdGFydFdpdGggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEhhbW1lclRhcEV2ZW50IH0gZnJvbSAnLi4vZ2VzdHVyZS9oYW1tZXIudXRpbHMnO1xuaW1wb3J0IHsgSEFNTUVSX1BSRVNTX1RJTUUgfSBmcm9tICcuLi9nZXN0dXJlL2dlc3R1cmUtY29uZmlnJztcbmltcG9ydCB7IEFwcENvbG9ycyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFNlYXJjaGJhckNoYW5nZUV2ZW50RGV0YWlsIGFzIElTZWFyY2hiYXJTZWFyY2hiYXJDaGFuZ2VFdmVudERldGFpbCB9IGZyb20gJ0Bpb25pYy9jb3JlL2Rpc3QvdHlwZXMvY29tcG9uZW50cy9zZWFyY2hiYXIvc2VhcmNoYmFyLWludGVyZmFjZSc7XG5pbXBvcnQge1Byb2dyZXNzQmFyTW9kZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRvb2xiYXJUb2tlbiB7XG4gIGFic3RyYWN0IG9uQmFja0NsaWNrOiBPYnNlcnZhYmxlPEV2ZW50PjtcbiAgYWJzdHJhY3QgZG9CYWNrQ2xpY2soZXZlbnQ6IEV2ZW50KTtcbiAgYWJzdHJhY3QgZ29CYWNrKCk6IFByb21pc2U8Ym9vbGVhbj47XG4gIGFic3RyYWN0IGNhbkdvQmFjazogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXRvb2xiYXInLFxuICB0ZW1wbGF0ZVVybDogJ3Rvb2xiYXIuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Rvb2xiYXIuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7cHJvdmlkZTogVG9vbGJhclRva2VuLCB1c2VFeGlzdGluZzogVG9vbGJhckNvbXBvbmVudH1cbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVG9vbGJhckNvbXBvbmVudCBpbXBsZW1lbnRzIFRvb2xiYXJUb2tlbiwgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIHByaXZhdGUgX2Nsb3NlVGFwQ291bnQgPSAwO1xuICBwcml2YXRlIF92YWxpZGF0ZVRhcENvdW50ID0gMDtcbiAgcHJpdmF0ZSBfZGVmYXVsdEJhY2tIcmVmOiBzdHJpbmc7XG4gIHByaXZhdGUgX2JhY2tIcmVmOiBzdHJpbmc7XG4gIHByb3RlY3RlZCByZWFkb25seSBfcHJvZ3Jlc3NCYXJNb2RlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UHJvZ3Jlc3NCYXJNb2RlPihudWxsKTtcblxuICBASW5wdXQoKSBzZXQgcHJvZ3Jlc3NCYXJNb2RlKHZhbHVlOiBQcm9ncmVzc0Jhck1vZGUpIHtcbiAgICBpZiAodGhpcy5wcm9ncmVzc0JhclNlcnZpY2UpIHJldHVybjtcbiAgICB0aGlzLl9wcm9ncmVzc0Jhck1vZGUkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHByb2dyZXNzQmFyTW9kZSgpOiBQcm9ncmVzc0Jhck1vZGUge1xuICAgIHJldHVybiB0aGlzLl9wcm9ncmVzc0Jhck1vZGUkLnZhbHVlO1xuICB9XG5cbiAgQElucHV0KCkgdGl0bGUgPSAnJztcbiAgQElucHV0KCkgY29sb3I6IEFwcENvbG9ycyA9ICdwcmltYXJ5JztcbiAgQElucHV0KCkgY2xhc3MgPSAnJztcblxuICBASW5wdXQoKSBzZXQgYmFja0hyZWYodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fYmFja0hyZWYpIHtcbiAgICAgIHRoaXMuX2JhY2tIcmVmID0gdmFsdWU7XG4gICAgICB0aGlzLmNhbkdvQmFjayA9IHRoaXMuY2FuR29CYWNrIHx8IGlzTm90TmlsKHZhbHVlKTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGJhY2tIcmVmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2JhY2tIcmVmO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGRlZmF1bHRCYWNrSHJlZih2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLl9kZWZhdWx0QmFja0hyZWYpIHtcbiAgICAgIHRoaXMuX2RlZmF1bHRCYWNrSHJlZiA9IHZhbHVlO1xuICAgICAgdGhpcy5jYW5Hb0JhY2sgPSB0aGlzLmNhbkdvQmFjayB8fCBpc05vdE5pbCh2YWx1ZSk7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBkZWZhdWx0QmFja0hyZWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdEJhY2tIcmVmO1xuICB9XG5cbiAgQElucHV0KCkgaGFzVmFsaWRhdGUgPSBmYWxzZTtcbiAgQElucHV0KCkgaGFzQ2xvc2UgPSBmYWxzZTtcbiAgQElucHV0KCkgaGFzU2VhcmNoOiBib29sZWFuO1xuICBASW5wdXQoKSBjYW5Hb0JhY2s6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNhblNob3dNZW51ID0gdHJ1ZTtcblxuICBAT3V0cHV0KCkgb25WYWxpZGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBvbkNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgpIG9uVmFsaWRhdGVBbmRDbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBvbkJhY2tDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBvblNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8Q3VzdG9tRXZlbnQ8SVNlYXJjaGJhclNlYXJjaGJhckNoYW5nZUV2ZW50RGV0YWlsPj4oKTtcblxuICBzaG93U2VhcmNoQmFyID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgnc2VhcmNoYmFyJywge3N0YXRpYzogdHJ1ZX0pIHNlYXJjaGJhcjogSW9uU2VhcmNoYmFyO1xuICBAVmlld0NoaWxkKCdtZW51VG9nZ2xlJywge3N0YXRpYzogdHJ1ZX0pIG1lbnVUb2dnbGU6IElvbk1lbnVUb2dnbGU7XG5cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgbmF2Q29udHJvbGxlcjogTmF2Q29udHJvbGxlcixcbiAgICBwcml2YXRlIHJvdXRlck91dGxldDogSW9uUm91dGVyT3V0bGV0LFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX1BST0dSRVNTX0JBUl9TRVJWSUNFKSBwcm90ZWN0ZWQgcHJvZ3Jlc3NCYXJTZXJ2aWNlOiBJUHJvZ3Jlc3NCYXJTZXJ2aWNlXG4gICkge1xuXG4gICAgLy8gTGlzdGVuIHByb2dyZXNzIGJhciBzZXJ2aWNlIG1vZGVcbiAgICBpZiAocHJvZ3Jlc3NCYXJTZXJ2aWNlKSB7XG4gICAgICBwcm9ncmVzc0JhclNlcnZpY2Uub25Qcm9ncmVzc0NoYW5nZWRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3RhcnRXaXRoKDxQcm9ncmVzc0Jhck1vZGU+bnVsbCksIC8vIG5vbmUsIGJ5IGRlZmF1bHRcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMTAwKSwgLy8gd2FpdCAxMDBtcywgdG8gZ3JvdXAgY2hhbmdlc1xuICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgLy90YXAoKG1vZGUpID0+IGNvbnNvbGUuZGVidWcoJ1t0b29sYmFyXSBVcGRhdGluZyBwcm9ncmVzc0Jhck1vZGU6ICcgKyBtb2RlKSlcblxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgKS5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5fcHJvZ3Jlc3NCYXJNb2RlJC5uZXh0KHZhbHVlKSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5oYXNWYWxpZGF0ZSA9IHRvQm9vbGVhbih0aGlzLmhhc1ZhbGlkYXRlLCB0aGlzLm9uVmFsaWRhdGUub2JzZXJ2ZXJzLmxlbmd0aCA+IDApO1xuICAgIHRoaXMuY2FuR29CYWNrID0gdG9Cb29sZWFuKHRoaXMuY2FuR29CYWNrLCB0aGlzLnJvdXRlck91dGxldC5jYW5Hb0JhY2soKVxuICAgICAgfHwgaXNOb3ROaWxPckJsYW5rKHRoaXMuX2JhY2tIcmVmKVxuICAgICAgfHwgaXNOb3ROaWxPckJsYW5rKHRoaXMuX2RlZmF1bHRCYWNrSHJlZikpO1xuICAgIHRoaXMuaGFzU2VhcmNoID0gdG9Cb29sZWFuKHRoaXMuaGFzU2VhcmNoLCB0aGlzLm9uU2VhcmNoLm9ic2VydmVycy5sZW5ndGggPiAwKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMub25CYWNrQ2xpY2suY29tcGxldGUoKTtcbiAgICB0aGlzLm9uQmFja0NsaWNrLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vblZhbGlkYXRlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vblZhbGlkYXRlLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkNsb3NlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vbkNsb3NlLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vblZhbGlkYXRlQW5kQ2xvc2UuY29tcGxldGUoKTtcbiAgICB0aGlzLm9uVmFsaWRhdGVBbmRDbG9zZS51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25TZWFyY2guY29tcGxldGUoKTtcbiAgICB0aGlzLm9uU2VhcmNoLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBhc3luYyB0b2dnbGVTZWFyY2hCYXIoKSB7XG4gICAgdGhpcy5zaG93U2VhcmNoQmFyID0gIXRoaXMuc2hvd1NlYXJjaEJhcjtcbiAgICBpZiAodGhpcy5zaG93U2VhcmNoQmFyICYmIHRoaXMuc2VhcmNoYmFyKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zZWFyY2hiYXIuc2V0Rm9jdXMoKTtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sIDMwMCk7XG4gICAgfVxuICB9XG5cbiAgZG9CYWNrQ2xpY2soZXZlbnQ6IEV2ZW50KSB7XG5cbiAgICB0aGlzLm9uQmFja0NsaWNrLmVtaXQoZXZlbnQpO1xuXG4gICAgLy8gU3RvcCBwcm9wYWdhdGlvbiwgaWYgbmVlZCAoY2FuIGJlIGNhbmNlbGxlZCBieSBvbkJhY2tDbGljayBvYnNlcnZlcnMpXG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcblxuICAgIC8vIEV4ZWN1dGUgdGhlIGJhY2sgYWN0aW9uXG4gICAgdGhpcy5nb0JhY2soKTtcbiAgfVxuXG4gIGFzeW5jIGdvQmFjaygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zb2xlLmRlYnVnKCdbdG9vbGJhcl0gY2FsbGluZyBnb0JhY2soKScpO1xuICAgIGlmICh0aGlzLl9iYWNrSHJlZikge1xuICAgICAgY29uc3QgcmVwbGFjZVVybCA9ICF0aGlzLnJvdXRlck91dGxldC5jYW5Hb0JhY2soKTtcbiAgICAgIC8vIFJlbGF0aXZlIGhyZWZcbiAgICAgIGlmICh0aGlzLl9iYWNrSHJlZi5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgICAgdGhpcy5uYXZDb250cm9sbGVyLnNldERpcmVjdGlvbignYmFjaycpO1xuICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuX2JhY2tIcmVmXSwge3JlbGF0aXZlVG86IHRoaXMucm91dGUsIHJlcGxhY2VVcmx9KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZDb250cm9sbGVyLm5hdmlnYXRlQmFjayh0aGlzLl9iYWNrSHJlZik7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMucm91dGVyT3V0bGV0LmNhbkdvQmFjaygpKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZDb250cm9sbGVyLnBvcCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLl9kZWZhdWx0QmFja0hyZWYpIHtcblxuICAgICAgLy8gUmVsYXRpdmUgaHJlZlxuICAgICAgaWYgKHRoaXMuX2RlZmF1bHRCYWNrSHJlZi5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgICAgdGhpcy5uYXZDb250cm9sbGVyLnNldERpcmVjdGlvbignYmFjaycpO1xuICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuX2RlZmF1bHRCYWNrSHJlZl0sIHtyZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLCByZXBsYWNlVXJsOiB0cnVlfSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZUJhY2sodGhpcy5fZGVmYXVsdEJhY2tIcmVmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbdG9vbGJhcl0gQ2Fubm90IGdvIGJhY2suIE1pc3NpbmcgYXR0cmlidXRlIFxcJ2RlZmF1bHRCYWNrSHJlZlxcJyBvciBcXCdiYWNrSHJlZlxcJycpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHRhcENsb3NlKGV2ZW50OiBIYW1tZXJUYXBFdmVudCkge1xuICAgIC8vIERFViBvbmx5XG4gICAgLy8gY29uc29sZS5kZWJ1ZyhcIlt0b29sYmFyXSB0YXBDbG9zZVwiLCBldmVudC50YXBDb3VudCk7XG4gICAgaWYgKHRoaXMuX3ZhbGlkYXRlVGFwQ291bnQgPiAwKSByZXR1cm47XG5cbiAgICAvLyBEaXN0aW5ndWlzaCBzaW1wbGUgYW5kIGRvdWJsZSB0YXBcbiAgICB0aGlzLl9jbG9zZVRhcENvdW50ID0gZXZlbnQudGFwQ291bnQ7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBFdmVudCBpcyBvYnNvbGV0ZSAoYSBuZXcgdGFwIGV2ZW50IG9jY3VyKVxuICAgICAgaWYgKGV2ZW50LnRhcENvdW50IDwgdGhpcy5fY2xvc2VUYXBDb3VudCkge1xuICAgICAgICAvLyBJZ25vcmUgZXZlbnRcbiAgICAgIH1cblxuICAgICAgLy8gSWYgZXZlbnQgc3RpbGwgdGhlIGxhc3QgdGFwIGV2ZW50OiBwcm9jZXNzIGl0XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5vbkNsb3NlLmVtaXQoZXZlbnQuc3JjRXZlbnQgfHwgZXZlbnQpO1xuXG4gICAgICAgIC8vIFJlc2V0IHRhYiBjb3VudFxuICAgICAgICB0aGlzLl9jbG9zZVRhcENvdW50ID0gMDtcbiAgICAgIH1cbiAgICB9LCA1MDApO1xuICB9XG5cbiAgdGFwVmFsaWRhdGUoZXZlbnQ6IEhhbW1lclRhcEV2ZW50KSB7XG4gICAgLy8gREVWIG9ubHlcbiAgICAvL2NvbnNvbGUuZGVidWcoXCJbdG9vbGJhcl0gdGFwVmFsaWRhdGVcIiwgZXZlbnQudGFwQ291bnQpO1xuXG4gICAgaWYgKHRoaXMub25WYWxpZGF0ZUFuZENsb3NlLm9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMub25WYWxpZGF0ZS5lbWl0KGV2ZW50LnNyY0V2ZW50IHx8IGV2ZW50KTtcbiAgICB9XG5cbiAgICAvLyBEaXN0aW5ndWlzaCBzaW1wbGUgYW5kIGRvdWJsZSB0YXBcbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuX3ZhbGlkYXRlVGFwQ291bnQgPSBldmVudC50YXBDb3VudDtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyBFdmVudCBpcyBvYnNvbGV0ZSAoYSBuZXcgdGFwIGV2ZW50IG9jY3VyKVxuICAgICAgICBpZiAoZXZlbnQudGFwQ291bnQgPCB0aGlzLl92YWxpZGF0ZVRhcENvdW50KSB7XG4gICAgICAgICAgLy8gSWdub3JlIGV2ZW50XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBldmVudCBzdGlsbCB0aGUgbGFzdCB0YXAgZXZlbnQ6IHByb2Nlc3MgaXRcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRlVGFwQ291bnQgPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWxpZGF0ZS5lbWl0KGV2ZW50LnNyY0V2ZW50IHx8IGV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAodGhpcy5fdmFsaWRhdGVUYXBDb3VudCA+PSAyKSB7XG4gICAgICAgICAgICB0aGlzLm9uVmFsaWRhdGVBbmRDbG9zZS5lbWl0KGV2ZW50LnNyY0V2ZW50IHx8IGV2ZW50KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBSZXNldCB0YWIgY291bnRcbiAgICAgICAgICB0aGlzLl92YWxpZGF0ZVRhcENvdW50ID0gMDtcbiAgICAgICAgfVxuICAgICAgfSwgSEFNTUVSX1BSRVNTX1RJTUUrMTApO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBpb25TZWFyY2hCYXJDaGFuZ2VkKGV2ZW50OiBFdmVudCkge1xuICAgIHRoaXMub25TZWFyY2guZW1pdChldmVudCBhcyBDdXN0b21FdmVudDxJU2VhcmNoYmFyU2VhcmNoYmFyQ2hhbmdlRXZlbnREZXRhaWw+KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIiwiPGlvbi1oZWFkZXIgW2NsYXNzXT1cImNsYXNzXCI+XG4gIDxpb24tdG9vbGJhciBbY29sb3JdPVwiY29sb3JcIj5cblxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwic3RhcnRcIj5cblxuICAgICAgPCEtLSBiYWNrIGJ1dHRvbiAtLT5cbiAgICAgIDxpb24tYnV0dG9uIGNsYXNzPVwiYmFjay1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjYW5Hb0JhY2tcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRvQmFja0NsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgcm91dGVyRGlyZWN0aW9uPVwiYmFja1wiID5cbiAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBuYW1lPVwiYXJyb3ctYmFja1wiPjwvaW9uLWljb24+XG4gICAgICA8L2lvbi1idXR0b24+XG5cbiAgICAgIDwhLS0gc2hvdyBtZW51IGJ1dHRvbiAtLT5cbiAgICAgIDxpb24tbWVudS10b2dnbGUgI21lbnVUb2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgW21lbnVdPVwiJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwiY2FuR29CYWNrIHx8ICFjYW5TaG93TWVudVwiPlxuICAgICAgICA8aW9uLWJ1dHRvbj5cbiAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJtZW51XCI+PC9pb24taWNvbj5cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9pb24tbWVudS10b2dnbGU+XG5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltzbG90PXN0YXJ0XVwiPjwvbmctY29udGVudD5cbiAgICA8L2lvbi1idXR0b25zPlxuXG4gICAgPGlvbi10aXRsZSBbaW5uZXJIVE1MXT1cInRpdGxlXCI+PC9pb24tdGl0bGU+XG5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpb24tdGl0bGUsIGlvbi1zZWdtZW50XCI+PC9uZy1jb250ZW50PlxuXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaW9uLWJ1dHRvbnNbc2xvdD1lbmRdXCI+PC9uZy1jb250ZW50PlxuXG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIiBjb2xsYXBzZT1cInRydWVcIj5cblxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3Nsb3Q9ZW5kXVwiPjwvbmctY29udGVudD5cblxuICAgICAgPCEtLSBzZWFyY2ggYmFyIC0tPlxuICAgICAgPGlvbi1zZWFyY2hiYXIgI3NlYXJjaGJhciBhbmltYXRlZFxuICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhhc1NlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICBbY2xhc3MuY2RrLXZpc3VhbGx5LWhpZGRlbl09XCIhc2hvd1NlYXJjaEJhclwiXG4gICAgICAgICAgICAgICAgICAgICBzaG93LWNhbmNlbC1idXR0b249XCJhbHdheXNcIlxuICAgICAgICAgICAgICAgICAgICAgKGlvbkNoYW5nZSk9XCJpb25TZWFyY2hCYXJDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgKGlvbkNhbmNlbCk9XCJ0b2dnbGVTZWFyY2hCYXIoKVwiPlxuICAgICAgPC9pb24tc2VhcmNoYmFyPlxuXG4gICAgICA8IS0tIHNlYXJjaCBidXR0b24gLS0+XG4gICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlU2VhcmNoQmFyKClcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNTZWFyY2ggJiYgIXNob3dTZWFyY2hCYXJcIj5cbiAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBuYW1lPVwic2VhcmNoXCI+PC9pb24taWNvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cblxuICAgICAgPCEtLSBjbG9zZSBidXR0b24gLS0+XG4gICAgICA8aW9uLWJ1dHRvbiAqbmdJZj1cImhhc0Nsb3NlXCJcbiAgICAgICAgICAgICAgICAgICh0YXApPVwidGFwQ2xvc2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInZpc2libGUteHMgdmlzaWJsZS1zbSB2aXNpYmxlLW1vYmlsZVwiPlxuICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJjbG9zZVwiPjwvaW9uLWljb24+XG4gICAgICA8L2lvbi1idXR0b24+XG5cbiAgICAgIDwhLS0gdmFsaWRhdGUgYnV0dG9uIC0tPlxuICAgICAgPGlvbi1idXR0b24gKm5nSWY9XCJoYXNWYWxpZGF0ZVwiXG4gICAgICAgICAgICAgICAgICAodGFwKT1cInRhcFZhbGlkYXRlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2aXNpYmxlLXhzIHZpc2libGUtc20gdmlzaWJsZS1tb2JpbGVcIj5cbiAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBuYW1lPVwic2F2ZVwiPjwvaW9uLWljb24+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgPC9pb24tYnV0dG9ucz5cbiAgPC9pb24tdG9vbGJhcj5cblxuICA8IS0tIHByb2dyZXNzIGJhciAtLT5cbiAgPG1hdC1wcm9ncmVzcy1iYXIgW2NvbG9yXT1cImNvbG9yfG1hdENvbG9yXCIgW21vZGVdPVwiX3Byb2dyZXNzQmFyTW9kZSQgfCBhc3luY1wiPlxuICA8L21hdC1wcm9ncmVzcy1iYXI+XG48L2lvbi1oZWFkZXI+XG4iXX0=
|