@sumaris-net/ngx-components 18.23.62 → 21.0.0-rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/doc/build.md +3 -5
- package/fesm2022/sumaris-net.ngx-components.mjs +2383 -2150
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +15 -15
- package/src/assets/environments/environment-test.json +2 -2
- package/src/assets/i18n/en-US.json +4 -1
- package/src/assets/i18n/en.json +4 -1
- package/src/assets/i18n/fr.json +10 -6
- package/src/assets/manifest.json +1 -1
- package/src/theme/_icons.scss +8 -12
- package/src/theme/_ionic.globals.scss +8 -1
- package/src/theme/_material.globals.scss +4 -1
- package/src/theme/_material.scss +16 -13
- package/src/theme/_mixins.scss +7 -1
- package/src/theme/_ngx-components.forms.scss +87 -84
- package/src/theme/_ngx-components.globals.scss +2 -0
- package/src/theme/_ngx-components.scss +19 -4
- package/src/theme/_ngx-components.table.scss +31 -26
- package/src/theme/_ngx-components.tabs.scss +16 -14
- package/src/theme/_responsive.scss +2 -0
- package/src/theme/_roboto.scss +3 -0
- package/src/theme/_theme.scss +11 -14
- package/src/theme/_theme.variables.scss +6 -1
- package/src/theme/ionic/ionic.functions.color.scss +13 -5
- package/src/theme/ionic/ionic.globals.scss +4 -4
- package/src/theme/ionic/ionic.theme.default.scss +2 -0
- package/types/sumaris-net.ngx-components.d.ts +14132 -0
- package/esm2022/public_api.mjs +0 -403
- package/esm2022/src/app/admin/admin-routing.module.mjs +0 -34
- package/esm2022/src/app/admin/admin.module.mjs +0 -32
- package/esm2022/src/app/admin/users/person.filter.mjs +0 -157
- package/esm2022/src/app/admin/users/person.service.mjs +0 -226
- package/esm2022/src/app/admin/users/person.validator.mjs +0 -78
- package/esm2022/src/app/admin/users/users-select.modal.mjs +0 -167
- package/esm2022/src/app/admin/users/users.mjs +0 -502
- package/esm2022/src/app/admin/users/users.module.mjs +0 -59
- package/esm2022/src/app/admin/users/users.utils.mjs +0 -29
- package/esm2022/src/app/core/about/about.modal.mjs +0 -119
- package/esm2022/src/app/core/about/about.module.mjs +0 -22
- package/esm2022/src/app/core/account/account.module.mjs +0 -75
- package/esm2022/src/app/core/account/account.page.mjs +0 -426
- package/esm2022/src/app/core/account/new-token.form.mjs +0 -109
- package/esm2022/src/app/core/account/new-token.modal.mjs +0 -66
- package/esm2022/src/app/core/account/password/change-password.form.mjs +0 -63
- package/esm2022/src/app/core/account/password/change-password.module.mjs +0 -22
- package/esm2022/src/app/core/account/password/change-password.page.mjs +0 -150
- package/esm2022/src/app/core/account/token.table.mjs +0 -160
- package/esm2022/src/app/core/auth/auth.form.mjs +0 -159
- package/esm2022/src/app/core/auth/auth.modal.mjs +0 -76
- package/esm2022/src/app/core/auth/auth.module.mjs +0 -56
- package/esm2022/src/app/core/auth/reset-password.modal.mjs +0 -89
- package/esm2022/src/app/core/core.module.mjs +0 -157
- package/esm2022/src/app/core/core.testing.module.mjs +0 -128
- package/esm2022/src/app/core/form/array/form-array.mjs +0 -328
- package/esm2022/src/app/core/form/array/testing/form-array-test.module.mjs +0 -23
- package/esm2022/src/app/core/form/array/testing/form-array.test.mjs +0 -97
- package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +0 -111
- package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +0 -31
- package/esm2022/src/app/core/form/entity/editor.class.mjs +0 -268
- package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +0 -420
- package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +0 -748
- package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +0 -25
- package/esm2022/src/app/core/form/entity/entity.module.mjs +0 -33
- package/esm2022/src/app/core/form/entity/tab-editor.class.mjs +0 -190
- package/esm2022/src/app/core/form/form-container.class.mjs +0 -347
- package/esm2022/src/app/core/form/form.class.mjs +0 -342
- package/esm2022/src/app/core/form/form.module.mjs +0 -77
- package/esm2022/src/app/core/form/form.utils.mjs +0 -238
- package/esm2022/src/app/core/form/list/list.form.mjs +0 -243
- package/esm2022/src/app/core/form/list/list.module.mjs +0 -31
- package/esm2022/src/app/core/form/properties/properties-file.service.mjs +0 -133
- package/esm2022/src/app/core/form/properties/properties.form.mjs +0 -397
- package/esm2022/src/app/core/form/properties/properties.module.mjs +0 -85
- package/esm2022/src/app/core/form/properties/properties.table.mjs +0 -267
- package/esm2022/src/app/core/form/properties/properties.utils.mjs +0 -304
- package/esm2022/src/app/core/form/properties/property.validator.mjs +0 -70
- package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +0 -103
- package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +0 -23
- package/esm2022/src/app/core/form/text/testing/text-form.testing.mjs +0 -42
- package/esm2022/src/app/core/form/text/testing/text-form.testing.module.mjs +0 -25
- package/esm2022/src/app/core/form/text/text-form.component.mjs +0 -205
- package/esm2022/src/app/core/form/text/text-form.module.mjs +0 -31
- package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +0 -73
- package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +0 -22
- package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +0 -164
- package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +0 -32
- package/esm2022/src/app/core/form/username/username.form.mjs +0 -55
- package/esm2022/src/app/core/form/username/username.module.mjs +0 -20
- package/esm2022/src/app/core/graphql/graphql.module.mjs +0 -14
- package/esm2022/src/app/core/graphql/graphql.service.mjs +0 -781
- package/esm2022/src/app/core/graphql/graphql.utils.mjs +0 -119
- package/esm2022/src/app/core/home/home.mjs +0 -472
- package/esm2022/src/app/core/home/home.module.mjs +0 -54
- package/esm2022/src/app/core/icon/icon.component.mjs +0 -40
- package/esm2022/src/app/core/icon/icon.module.mjs +0 -20
- package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +0 -394
- package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +0 -31
- package/esm2022/src/app/core/menu/menu.component.mjs +0 -273
- package/esm2022/src/app/core/menu/menu.model.mjs +0 -327
- package/esm2022/src/app/core/menu/menu.module.mjs +0 -47
- package/esm2022/src/app/core/menu/menu.service.mjs +0 -666
- package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +0 -113
- package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +0 -51
- package/esm2022/src/app/core/menu/testing/menu.testing.mjs +0 -165
- package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +0 -60
- package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +0 -28
- package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +0 -31
- package/esm2022/src/app/core/peer/select-peer.modal.mjs +0 -350
- package/esm2022/src/app/core/peer/select-peer.module.mjs +0 -36
- package/esm2022/src/app/core/register/register-confirm.page.mjs +0 -90
- package/esm2022/src/app/core/register/register.form.mjs +0 -197
- package/esm2022/src/app/core/register/register.modal.mjs +0 -55
- package/esm2022/src/app/core/register/register.module.mjs +0 -23
- package/esm2022/src/app/core/services/account.service.mjs +0 -1403
- package/esm2022/src/app/core/services/auth-guard.service.mjs +0 -74
- package/esm2022/src/app/core/services/base-entity-service.class.mjs +0 -499
- package/esm2022/src/app/core/services/base-graphql-service.class.mjs +0 -224
- package/esm2022/src/app/core/services/base58.mjs +0 -83
- package/esm2022/src/app/core/services/config/core.config.mjs +0 -293
- package/esm2022/src/app/core/services/config.service.mjs +0 -384
- package/esm2022/src/app/core/services/crypto.service.mjs +0 -107
- package/esm2022/src/app/core/services/errors.mjs +0 -54
- package/esm2022/src/app/core/services/local-settings.service.mjs +0 -540
- package/esm2022/src/app/core/services/model/account.model.mjs +0 -192
- package/esm2022/src/app/core/services/model/config.model.mjs +0 -111
- package/esm2022/src/app/core/services/model/department.model.mjs +0 -35
- package/esm2022/src/app/core/services/model/entity.decorators.mjs +0 -97
- package/esm2022/src/app/core/services/model/entity.model.mjs +0 -347
- package/esm2022/src/app/core/services/model/filter.model.mjs +0 -169
- package/esm2022/src/app/core/services/model/history.model.mjs +0 -2
- package/esm2022/src/app/core/services/model/model.enum.mjs +0 -11
- package/esm2022/src/app/core/services/model/node-feature.model.mjs +0 -31
- package/esm2022/src/app/core/services/model/peer.model.mjs +0 -114
- package/esm2022/src/app/core/services/model/person.model.mjs +0 -118
- package/esm2022/src/app/core/services/model/referential.model.mjs +0 -207
- package/esm2022/src/app/core/services/model/settings.model.mjs +0 -6
- package/esm2022/src/app/core/services/model/token.model.mjs +0 -57
- package/esm2022/src/app/core/services/model/tree-item-entity.model.mjs +0 -234
- package/esm2022/src/app/core/services/network.service.mjs +0 -759
- package/esm2022/src/app/core/services/network.types.mjs +0 -2
- package/esm2022/src/app/core/services/network.utils.mjs +0 -35
- package/esm2022/src/app/core/services/pipes/account.pipes.mjs +0 -38
- package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +0 -23
- package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +0 -23
- package/esm2022/src/app/core/services/pipes/pipes.module.mjs +0 -58
- package/esm2022/src/app/core/services/pipes/referential-to-string.pipe.mjs +0 -36
- package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +0 -37
- package/esm2022/src/app/core/services/platform.service.mjs +0 -780
- package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +0 -427
- package/esm2022/src/app/core/services/storage/entity-store.class.mjs +0 -450
- package/esm2022/src/app/core/services/testing/referential-filter.model.mjs +0 -25
- package/esm2022/src/app/core/services/testing/referential.validator.mjs +0 -46
- package/esm2022/src/app/core/services/validator/account.validator.mjs +0 -46
- package/esm2022/src/app/core/services/validator/base.validator.class.mjs +0 -49
- package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +0 -57
- package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +0 -27
- package/esm2022/src/app/core/services/validator/user-token.validator.mjs +0 -55
- package/esm2022/src/app/core/settings/settings.module.mjs +0 -23
- package/esm2022/src/app/core/settings/settings.page.mjs +0 -406
- package/esm2022/src/app/core/table/async-table.class.mjs +0 -1882
- package/esm2022/src/app/core/table/column/actions-column.component.mjs +0 -137
- package/esm2022/src/app/core/table/column/nav-actions-column.component.mjs +0 -120
- package/esm2022/src/app/core/table/column/row-field.component.mjs +0 -116
- package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +0 -415
- package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +0 -407
- package/esm2022/src/app/core/table/memory-table.class.mjs +0 -57
- package/esm2022/src/app/core/table/table-select-columns.component.mjs +0 -46
- package/esm2022/src/app/core/table/table.class.mjs +0 -1918
- package/esm2022/src/app/core/table/table.model.mjs +0 -21
- package/esm2022/src/app/core/table/table.module.mjs +0 -51
- package/esm2022/src/app/core/table/table.pipes.mjs +0 -76
- package/esm2022/src/app/core/table/table.utils.mjs +0 -34
- package/esm2022/src/app/core/table/testing/nested-table.testing.mjs +0 -326
- package/esm2022/src/app/core/table/testing/table-validator.service.mjs +0 -32
- package/esm2022/src/app/core/table/testing/table.testing.mjs +0 -342
- package/esm2022/src/app/core/table/testing/table.testing.module.mjs +0 -47
- package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +0 -25
- package/esm2022/src/app/core/table/testing/table2.testing.mjs +0 -322
- package/esm2022/src/app/shared/alerts.mjs +0 -243
- package/esm2022/src/app/shared/audio/audio.mjs +0 -255
- package/esm2022/src/app/shared/audio/audio.testing.mjs +0 -32
- package/esm2022/src/app/shared/audio/audio.testing.module.mjs +0 -30
- package/esm2022/src/app/shared/base64.utils.mjs +0 -59
- package/esm2022/src/app/shared/capacitor/keyboard.mjs +0 -42
- package/esm2022/src/app/shared/capacitor/plugins.mjs +0 -10
- package/esm2022/src/app/shared/constants.mjs +0 -18
- package/esm2022/src/app/shared/dates.mjs +0 -212
- package/esm2022/src/app/shared/debug/debug-service.class.mjs +0 -3
- package/esm2022/src/app/shared/debug/debug.component.mjs +0 -44
- package/esm2022/src/app/shared/debug/debug.module.mjs +0 -23
- package/esm2022/src/app/shared/directives/autofocus.directive.mjs +0 -91
- package/esm2022/src/app/shared/directives/autoresize.directive.mjs +0 -75
- package/esm2022/src/app/shared/directives/autotitle.directive.mjs +0 -30
- package/esm2022/src/app/shared/directives/autotooltip.directive.mjs +0 -35
- package/esm2022/src/app/shared/directives/cell-selection/cell-identifier.directive.mjs +0 -55
- package/esm2022/src/app/shared/directives/cell-selection/cell-selection.directive.mjs +0 -206
- package/esm2022/src/app/shared/directives/cell-selection/cell-selection.service.mjs +0 -204
- package/esm2022/src/app/shared/directives/directives.module.mjs +0 -53
- package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +0 -52
- package/esm2022/src/app/shared/directives/ng-var.directive.mjs +0 -33
- package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +0 -62
- package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +0 -96
- package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +0 -17
- package/esm2022/src/app/shared/directives/throttled-click.directive.mjs +0 -43
- package/esm2022/src/app/shared/events.mjs +0 -64
- package/esm2022/src/app/shared/file/csv.utils.mjs +0 -97
- package/esm2022/src/app/shared/file/file.service.mjs +0 -118
- package/esm2022/src/app/shared/file/file.utils.mjs +0 -117
- package/esm2022/src/app/shared/file/images.utils.mjs +0 -186
- package/esm2022/src/app/shared/file/json.utils.mjs +0 -58
- package/esm2022/src/app/shared/file/uri.utils.mjs +0 -29
- package/esm2022/src/app/shared/file/url.utils.mjs +0 -213
- package/esm2022/src/app/shared/focusable.mjs +0 -6
- package/esm2022/src/app/shared/form/field.component.mjs +0 -388
- package/esm2022/src/app/shared/form/field.model.mjs +0 -100
- package/esm2022/src/app/shared/form/loading-spinner.mjs +0 -35
- package/esm2022/src/app/shared/forms.mjs +0 -593
- package/esm2022/src/app/shared/functions.mjs +0 -825
- package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +0 -94
- package/esm2022/src/app/shared/gesture/gesture-config.mjs +0 -46
- package/esm2022/src/app/shared/gesture/hammer.utils.mjs +0 -2
- package/esm2022/src/app/shared/graph/colors.utils.mjs +0 -85
- package/esm2022/src/app/shared/graph/graph-colors.mjs +0 -214
- package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +0 -68
- package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +0 -23
- package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +0 -147
- package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +0 -24
- package/esm2022/src/app/shared/html.utils.mjs +0 -35
- package/esm2022/src/app/shared/http/http.utils.mjs +0 -56
- package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +0 -452
- package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +0 -62
- package/esm2022/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +0 -26
- package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +0 -92
- package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +0 -37
- package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +0 -59
- package/esm2022/src/app/shared/image/image.model.mjs +0 -2
- package/esm2022/src/app/shared/image/image.module.mjs +0 -24
- package/esm2022/src/app/shared/image/image.service.mjs +0 -117
- package/esm2022/src/app/shared/inputs.mjs +0 -281
- package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +0 -27
- package/esm2022/src/app/shared/logging/log-level.model.mjs +0 -48
- package/esm2022/src/app/shared/logging/logger.model.mjs +0 -47
- package/esm2022/src/app/shared/logging/logging-service.class.mjs +0 -125
- package/esm2022/src/app/shared/logging/logging-service.config.mjs +0 -2
- package/esm2022/src/app/shared/logging/logging-service.module.mjs +0 -30
- package/esm2022/src/app/shared/markdown/markdown.component.mjs +0 -321
- package/esm2022/src/app/shared/markdown/markdown.directive.mjs +0 -34
- package/esm2022/src/app/shared/markdown/markdown.modal.mjs +0 -99
- package/esm2022/src/app/shared/markdown/markdown.module.mjs +0 -87
- package/esm2022/src/app/shared/markdown/markdown.service.mjs +0 -204
- package/esm2022/src/app/shared/markdown/markdown.utils.mjs +0 -87
- package/esm2022/src/app/shared/markdown/testing/markdown.test.mjs +0 -55
- package/esm2022/src/app/shared/markdown/testing/markdown.testing.module.mjs +0 -30
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +0 -46
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +0 -1356
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +0 -81
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +0 -18
- package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +0 -242
- package/esm2022/src/app/shared/material/badge/badge.directive.mjs +0 -251
- package/esm2022/src/app/shared/material/badge/badge.module.mjs +0 -20
- package/esm2022/src/app/shared/material/badge/badge.test.mjs +0 -42
- package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +0 -70
- package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +0 -374
- package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +0 -83
- package/esm2022/src/app/shared/material/chips/chips.module.mjs +0 -74
- package/esm2022/src/app/shared/material/chips/material.chips.mjs +0 -843
- package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +0 -151
- package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +0 -79
- package/esm2022/src/app/shared/material/datetime/material.date.mjs +0 -473
- package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +0 -457
- package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +0 -850
- package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +0 -140
- package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +0 -127
- package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +0 -118
- package/esm2022/src/app/shared/material/duration/duration.module.mjs +0 -61
- package/esm2022/src/app/shared/material/duration/duration.utils.mjs +0 -16
- package/esm2022/src/app/shared/material/duration/material.duration.mjs +0 -283
- package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +0 -85
- package/esm2022/src/app/shared/material/latlong/latlong.utils.mjs +0 -319
- package/esm2022/src/app/shared/material/latlong/material.latlong-input.mjs +0 -471
- package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +0 -231
- package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +0 -68
- package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +0 -138
- package/esm2022/src/app/shared/material/material.animations.mjs +0 -200
- package/esm2022/src/app/shared/material/material.config.mjs +0 -3
- package/esm2022/src/app/shared/material/material.module.mjs +0 -224
- package/esm2022/src/app/shared/material/material.testing.module.mjs +0 -234
- package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +0 -51
- package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +0 -23
- package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +0 -379
- package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +0 -52
- package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +0 -67
- package/esm2022/src/app/shared/material/test/test-component.mjs +0 -264
- package/esm2022/src/app/shared/material/testing/common.test.mjs +0 -111
- package/esm2022/src/app/shared/modules.mjs +0 -12
- package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +0 -306
- package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +0 -49
- package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +0 -24
- package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +0 -69
- package/esm2022/src/app/shared/named-filter/testing/named-filter-selector.testing.mjs +0 -74
- package/esm2022/src/app/shared/named-filter/testing/named-filter.testing.module.mjs +0 -28
- package/esm2022/src/app/shared/observables.mjs +0 -104
- package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +0 -251
- package/esm2022/src/app/shared/pipes/badge.pipes.mjs +0 -25
- package/esm2022/src/app/shared/pipes/colors.pipe.mjs +0 -29
- package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +0 -50
- package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +0 -72
- package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +0 -28
- package/esm2022/src/app/shared/pipes/date-from.pipe.mjs +0 -29
- package/esm2022/src/app/shared/pipes/dates.pipe.mjs +0 -18
- package/esm2022/src/app/shared/pipes/display-with.pipe.mjs +0 -23
- package/esm2022/src/app/shared/pipes/duration.pipe.mjs +0 -34
- package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +0 -53
- package/esm2022/src/app/shared/pipes/form.pipes.mjs +0 -219
- package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +0 -50
- package/esm2022/src/app/shared/pipes/html.pipes.mjs +0 -102
- package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +0 -42
- package/esm2022/src/app/shared/pipes/maps.pipe.mjs +0 -65
- package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +0 -67
- package/esm2022/src/app/shared/pipes/math.pipes.mjs +0 -77
- package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +0 -19
- package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +0 -17
- package/esm2022/src/app/shared/pipes/observable.pipes.mjs +0 -63
- package/esm2022/src/app/shared/pipes/pipes.module.mjs +0 -304
- package/esm2022/src/app/shared/pipes/property.pipes.mjs +0 -148
- package/esm2022/src/app/shared/pipes/selection.pipes.mjs +0 -177
- package/esm2022/src/app/shared/pipes/string.pipes.mjs +0 -183
- package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +0 -44
- package/esm2022/src/app/shared/pipes/types.pipes.mjs +0 -74
- package/esm2022/src/app/shared/pipes/url.pipes.mjs +0 -35
- package/esm2022/src/app/shared/platforms.mjs +0 -81
- package/esm2022/src/app/shared/print/print.service.mjs +0 -305
- package/esm2022/src/app/shared/regexps.mjs +0 -103
- package/esm2022/src/app/shared/rx-state/rx-state.decorators.mjs +0 -193
- package/esm2022/src/app/shared/rx-state/rx-state.module.mjs +0 -19
- package/esm2022/src/app/shared/rx-state/rx-state.types.mjs +0 -2
- package/esm2022/src/app/shared/services/entity-service.class.mjs +0 -44
- package/esm2022/src/app/shared/services/job.utils.mjs +0 -92
- package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +0 -362
- package/esm2022/src/app/shared/services/progress-bar.service.mjs +0 -31
- package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +0 -144
- package/esm2022/src/app/shared/services/startable-service.class.mjs +0 -118
- package/esm2022/src/app/shared/services/translate-context.service.mjs +0 -107
- package/esm2022/src/app/shared/services/validator-service.class.mjs +0 -2
- package/esm2022/src/app/shared/services.mjs +0 -85
- package/esm2022/src/app/shared/shared-routing.module.mjs +0 -72
- package/esm2022/src/app/shared/shared.module.mjs +0 -229
- package/esm2022/src/app/shared/shared.testing.module.mjs +0 -108
- package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +0 -281
- package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +0 -42
- package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +0 -27
- package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +0 -25
- package/esm2022/src/app/shared/storage/storage.service.mjs +0 -134
- package/esm2022/src/app/shared/storage/storage.utils.mjs +0 -13
- package/esm2022/src/app/shared/testing/maskito.test.mjs +0 -41
- package/esm2022/src/app/shared/testing/observable.test.mjs +0 -94
- package/esm2022/src/app/shared/testing/tests.page.mjs +0 -37
- package/esm2022/src/app/shared/toast/toast.testing.mjs +0 -54
- package/esm2022/src/app/shared/toast/toast.testing.module.mjs +0 -31
- package/esm2022/src/app/shared/toast/toasts.mjs +0 -134
- package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +0 -62
- package/esm2022/src/app/shared/toolbar/toolbar.mjs +0 -272
- package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +0 -26
- package/esm2022/src/app/shared/types.mjs +0 -2
- package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +0 -59
- package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +0 -30
- package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +0 -108
- package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +0 -216
- package/esm2022/src/app/shared/upload-file/upload-file.model.mjs +0 -26
- package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +0 -122
- package/esm2022/src/app/shared/validator/validators.mjs +0 -658
- package/esm2022/src/app/shared/version/versions.mjs +0 -81
- package/esm2022/src/app/social/config/social.config.mjs +0 -9
- package/esm2022/src/app/social/feed/feed.component.mjs +0 -317
- package/esm2022/src/app/social/feed/feed.directive.mjs +0 -151
- package/esm2022/src/app/social/feed/feed.model.mjs +0 -60
- package/esm2022/src/app/social/feed/feed.module.mjs +0 -24
- package/esm2022/src/app/social/feed/feed.page.mjs +0 -67
- package/esm2022/src/app/social/feed/feed.service.mjs +0 -222
- package/esm2022/src/app/social/feed/testing/feed.testing.mjs +0 -66
- package/esm2022/src/app/social/feed/testing/feed.testing.module.mjs +0 -23
- package/esm2022/src/app/social/job/job.module.mjs +0 -23
- package/esm2022/src/app/social/job/progression/job-progression.component.mjs +0 -38
- package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +0 -241
- package/esm2022/src/app/social/job/progression/job-progression.list.mjs +0 -50
- package/esm2022/src/app/social/job/progression/job-progression.model.mjs +0 -29
- package/esm2022/src/app/social/job/progression/job-progression.service.mjs +0 -91
- package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +0 -38
- package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +0 -34
- package/esm2022/src/app/social/job/testing/job.testing.module.mjs +0 -22
- package/esm2022/src/app/social/message/message.form.mjs +0 -149
- package/esm2022/src/app/social/message/message.modal.mjs +0 -116
- package/esm2022/src/app/social/message/message.model.mjs +0 -86
- package/esm2022/src/app/social/message/message.module.mjs +0 -25
- package/esm2022/src/app/social/message/message.service.mjs +0 -198
- package/esm2022/src/app/social/social.errors.mjs +0 -11
- package/esm2022/src/app/social/social.module.mjs +0 -22
- package/esm2022/src/app/social/social.testing.module.mjs +0 -72
- package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +0 -191
- package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +0 -280
- package/esm2022/src/app/social/user-event/notification/user-event-notification.modal.mjs +0 -84
- package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +0 -273
- package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +0 -129
- package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +0 -22
- package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +0 -128
- package/esm2022/src/app/social/user-event/user-event.model.mjs +0 -2
- package/esm2022/src/app/social/user-event/user-event.module.mjs +0 -24
- package/esm2022/src/app/social/user-event/user-event.service.mjs +0 -512
- package/esm2022/src/environments/environment.class.mjs +0 -69
- package/esm2022/src/environments/environment.loader.mjs +0 -77
- package/esm2022/src/environments/environment.mjs +0 -133
- package/esm2022/sumaris-net.ngx-components.mjs +0 -5
- package/index.d.ts +0 -5
- package/public_api.d.ts +0 -364
- package/src/app/admin/admin-routing.module.d.ts +0 -9
- package/src/app/admin/admin.module.d.ts +0 -10
- package/src/app/admin/users/person.filter.d.ts +0 -37
- package/src/app/admin/users/person.service.d.ts +0 -61
- package/src/app/admin/users/person.validator.d.ts +0 -23
- package/src/app/admin/users/users-select.modal.d.ts +0 -73
- package/src/app/admin/users/users.d.ts +0 -89
- package/src/app/admin/users/users.module.d.ts +0 -15
- package/src/app/admin/users/users.utils.d.ts +0 -6
- package/src/app/core/about/about.modal.d.ts +0 -44
- package/src/app/core/about/about.module.d.ts +0 -11
- package/src/app/core/account/account.module.d.ts +0 -18
- package/src/app/core/account/account.page.d.ts +0 -93
- package/src/app/core/account/new-token.form.d.ts +0 -30
- package/src/app/core/account/new-token.modal.d.ts +0 -29
- package/src/app/core/account/password/change-password.form.d.ts +0 -19
- package/src/app/core/account/password/change-password.module.d.ts +0 -11
- package/src/app/core/account/password/change-password.page.d.ts +0 -36
- package/src/app/core/account/token.table.d.ts +0 -28
- package/src/app/core/auth/auth.form.d.ts +0 -38
- package/src/app/core/auth/auth.modal.d.ts +0 -24
- package/src/app/core/auth/auth.module.d.ts +0 -13
- package/src/app/core/auth/reset-password.modal.d.ts +0 -29
- package/src/app/core/core.module.d.ts +0 -28
- package/src/app/core/core.testing.module.d.ts +0 -16
- package/src/app/core/form/array/form-array.d.ts +0 -147
- package/src/app/core/form/array/testing/form-array-test.module.d.ts +0 -12
- package/src/app/core/form/array/testing/form-array.test.d.ts +0 -27
- package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +0 -38
- package/src/app/core/form/buttons/form-buttons-bar.module.d.ts +0 -9
- package/src/app/core/form/entity/editor.class.d.ts +0 -85
- package/src/app/core/form/entity/entity-editor-modal.class.d.ts +0 -126
- package/src/app/core/form/entity/entity-editor.class.d.ts +0 -211
- package/src/app/core/form/entity/entity-metadata.component.d.ts +0 -13
- package/src/app/core/form/entity/entity.module.d.ts +0 -11
- package/src/app/core/form/entity/tab-editor.class.d.ts +0 -66
- package/src/app/core/form/form-container.class.d.ts +0 -131
- package/src/app/core/form/form.class.d.ts +0 -148
- package/src/app/core/form/form.module.d.ts +0 -15
- package/src/app/core/form/form.utils.d.ts +0 -301
- package/src/app/core/form/list/list.form.d.ts +0 -83
- package/src/app/core/form/list/list.module.d.ts +0 -9
- package/src/app/core/form/properties/properties-file.service.d.ts +0 -26
- package/src/app/core/form/properties/properties.form.d.ts +0 -109
- package/src/app/core/form/properties/properties.module.d.ts +0 -18
- package/src/app/core/form/properties/properties.table.d.ts +0 -73
- package/src/app/core/form/properties/properties.utils.d.ts +0 -59
- package/src/app/core/form/properties/property.validator.d.ts +0 -27
- package/src/app/core/form/properties/testing/properties-form.test.d.ts +0 -22
- package/src/app/core/form/properties/testing/properties-form.testing.module.d.ts +0 -12
- package/src/app/core/form/text/testing/text-form.testing.d.ts +0 -19
- package/src/app/core/form/text/testing/text-form.testing.module.d.ts +0 -14
- package/src/app/core/form/text/text-form.component.d.ts +0 -66
- package/src/app/core/form/text/text-form.module.d.ts +0 -9
- package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +0 -16
- package/src/app/core/form/text-popover/testing/text-popover.testing.module.d.ts +0 -11
- package/src/app/core/form/text-popover/text-popover.component.d.ts +0 -81
- package/src/app/core/form/text-popover/text-popover.module.d.ts +0 -10
- package/src/app/core/form/username/username.form.d.ts +0 -19
- package/src/app/core/form/username/username.module.d.ts +0 -9
- package/src/app/core/graphql/graphql.module.d.ts +0 -7
- package/src/app/core/graphql/graphql.service.d.ts +0 -138
- package/src/app/core/graphql/graphql.utils.d.ts +0 -47
- package/src/app/core/home/home.d.ts +0 -135
- package/src/app/core/home/home.module.d.ts +0 -16
- package/src/app/core/icon/icon.component.d.ts +0 -13
- package/src/app/core/icon/icon.module.d.ts +0 -9
- package/src/app/core/install/install-upgrade-card.component.d.ts +0 -63
- package/src/app/core/install/install-upgrade-card.module.d.ts +0 -9
- package/src/app/core/menu/menu.component.d.ts +0 -69
- package/src/app/core/menu/menu.model.d.ts +0 -161
- package/src/app/core/menu/menu.module.d.ts +0 -12
- package/src/app/core/menu/menu.service.d.ts +0 -93
- package/src/app/core/menu/sub-menu-tab.directive.d.ts +0 -29
- package/src/app/core/menu/testing/menu-other.testing.d.ts +0 -15
- package/src/app/core/menu/testing/menu.testing.d.ts +0 -53
- package/src/app/core/menu/testing/menu.testing.module.d.ts +0 -12
- package/src/app/core/offline/update-offline-mode-card.component.d.ts +0 -11
- package/src/app/core/offline/update-offline-mode-card.module.d.ts +0 -9
- package/src/app/core/peer/select-peer.modal.d.ts +0 -108
- package/src/app/core/peer/select-peer.module.d.ts +0 -12
- package/src/app/core/register/register-confirm.page.d.ts +0 -24
- package/src/app/core/register/register.form.d.ts +0 -49
- package/src/app/core/register/register.modal.d.ts +0 -14
- package/src/app/core/register/register.module.d.ts +0 -12
- package/src/app/core/services/account.service.d.ts +0 -236
- package/src/app/core/services/auth-guard.service.d.ts +0 -17
- package/src/app/core/services/base-entity-service.class.d.ts +0 -134
- package/src/app/core/services/base-graphql-service.class.d.ts +0 -77
- package/src/app/core/services/base58.d.ts +0 -7
- package/src/app/core/services/config/core.config.d.ts +0 -52
- package/src/app/core/services/config.service.d.ts +0 -63
- package/src/app/core/services/crypto.service.d.ts +0 -44
- package/src/app/core/services/errors.d.ts +0 -65
- package/src/app/core/services/local-settings.service.d.ts +0 -130
- package/src/app/core/services/model/account.model.d.ts +0 -66
- package/src/app/core/services/model/config.model.d.ts +0 -37
- package/src/app/core/services/model/department.model.d.ts +0 -11
- package/src/app/core/services/model/entity.decorators.d.ts +0 -17
- package/src/app/core/services/model/entity.model.d.ts +0 -133
- package/src/app/core/services/model/filter.model.d.ts +0 -37
- package/src/app/core/services/model/history.model.d.ts +0 -20
- package/src/app/core/services/model/model.enum.d.ts +0 -7
- package/src/app/core/services/model/node-feature.model.d.ts +0 -14
- package/src/app/core/services/model/peer.model.d.ts +0 -35
- package/src/app/core/services/model/person.model.d.ts +0 -39
- package/src/app/core/services/model/referential.model.d.ts +0 -85
- package/src/app/core/services/model/settings.model.d.ts +0 -29
- package/src/app/core/services/model/token.model.d.ts +0 -22
- package/src/app/core/services/model/tree-item-entity.model.d.ts +0 -62
- package/src/app/core/services/network.service.d.ts +0 -184
- package/src/app/core/services/network.types.d.ts +0 -4
- package/src/app/core/services/network.utils.d.ts +0 -39
- package/src/app/core/services/pipes/account.pipes.d.ts +0 -15
- package/src/app/core/services/pipes/department-to-string.pipe.d.ts +0 -9
- package/src/app/core/services/pipes/person-to-string.pipe.d.ts +0 -11
- package/src/app/core/services/pipes/pipes.module.d.ts +0 -11
- package/src/app/core/services/pipes/referential-to-string.pipe.d.ts +0 -23
- package/src/app/core/services/pipes/usage-mode.pipes.d.ts +0 -15
- package/src/app/core/services/platform.service.d.ts +0 -126
- package/src/app/core/services/storage/entities-storage.service.d.ts +0 -108
- package/src/app/core/services/storage/entity-store.class.d.ts +0 -113
- package/src/app/core/services/testing/referential-filter.model.d.ts +0 -9
- package/src/app/core/services/testing/referential.validator.d.ts +0 -22
- package/src/app/core/services/validator/account.validator.d.ts +0 -24
- package/src/app/core/services/validator/base.validator.class.d.ts +0 -21
- package/src/app/core/services/validator/local-settings.validator.d.ts +0 -18
- package/src/app/core/services/validator/user-settings.validator.d.ts +0 -10
- package/src/app/core/services/validator/user-token.validator.d.ts +0 -13
- package/src/app/core/settings/settings.module.d.ts +0 -12
- package/src/app/core/settings/settings.page.d.ts +0 -89
- package/src/app/core/table/async-table.class.d.ts +0 -443
- package/src/app/core/table/column/actions-column.component.d.ts +0 -65
- package/src/app/core/table/column/nav-actions-column.component.d.ts +0 -47
- package/src/app/core/table/column/row-field.component.d.ts +0 -41
- package/src/app/core/table/entities-async-table-datasource.class.d.ts +0 -103
- package/src/app/core/table/entities-table-datasource.class.d.ts +0 -102
- package/src/app/core/table/memory-table.class.d.ts +0 -25
- package/src/app/core/table/table-select-columns.component.d.ts +0 -22
- package/src/app/core/table/table.class.d.ts +0 -427
- package/src/app/core/table/table.model.d.ts +0 -31
- package/src/app/core/table/table.module.d.ts +0 -14
- package/src/app/core/table/table.pipes.d.ts +0 -30
- package/src/app/core/table/table.utils.d.ts +0 -13
- package/src/app/core/table/testing/nested-table.testing.d.ts +0 -54
- package/src/app/core/table/testing/table-validator.service.d.ts +0 -17
- package/src/app/core/table/testing/table.testing.d.ts +0 -55
- package/src/app/core/table/testing/table.testing.module.d.ts +0 -17
- package/src/app/core/table/testing/table2-validator.service.d.ts +0 -15
- package/src/app/core/table/testing/table2.testing.d.ts +0 -53
- package/src/app/shared/alerts.d.ts +0 -55
- package/src/app/shared/audio/audio.d.ts +0 -45
- package/src/app/shared/audio/audio.testing.d.ts +0 -13
- package/src/app/shared/audio/audio.testing.module.d.ts +0 -11
- package/src/app/shared/base64.utils.d.ts +0 -7
- package/src/app/shared/capacitor/keyboard.d.ts +0 -16
- package/src/app/shared/capacitor/plugins.d.ts +0 -8
- package/src/app/shared/constants.d.ts +0 -15
- package/src/app/shared/dates.d.ts +0 -85
- package/src/app/shared/debug/debug-service.class.d.ts +0 -5
- package/src/app/shared/debug/debug.component.d.ts +0 -14
- package/src/app/shared/debug/debug.module.d.ts +0 -12
- package/src/app/shared/directives/autofocus.directive.d.ts +0 -18
- package/src/app/shared/directives/autoresize.directive.d.ts +0 -20
- package/src/app/shared/directives/autotitle.directive.d.ts +0 -11
- package/src/app/shared/directives/autotooltip.directive.d.ts +0 -14
- package/src/app/shared/directives/cell-selection/cell-identifier.directive.d.ts +0 -17
- package/src/app/shared/directives/cell-selection/cell-selection.directive.d.ts +0 -29
- package/src/app/shared/directives/cell-selection/cell-selection.service.d.ts +0 -67
- package/src/app/shared/directives/directives.module.d.ts +0 -15
- package/src/app/shared/directives/drag-and-drop.directive.d.ts +0 -17
- package/src/app/shared/directives/ng-var.directive.d.ts +0 -12
- package/src/app/shared/directives/resizable/resizable.component.d.ts +0 -21
- package/src/app/shared/directives/resizable/resizable.directive.d.ts +0 -24
- package/src/app/shared/directives/resizable/resizable.module.d.ts +0 -8
- package/src/app/shared/directives/throttled-click.directive.d.ts +0 -16
- package/src/app/shared/events.d.ts +0 -29
- package/src/app/shared/file/csv.utils.d.ts +0 -30
- package/src/app/shared/file/file.service.d.ts +0 -23
- package/src/app/shared/file/file.utils.d.ts +0 -20
- package/src/app/shared/file/images.utils.d.ts +0 -36
- package/src/app/shared/file/json.utils.d.ts +0 -19
- package/src/app/shared/file/uri.utils.d.ts +0 -8
- package/src/app/shared/file/url.utils.d.ts +0 -108
- package/src/app/shared/focusable.d.ts +0 -4
- package/src/app/shared/form/field.component.d.ts +0 -83
- package/src/app/shared/form/field.model.d.ts +0 -88
- package/src/app/shared/form/loading-spinner.d.ts +0 -8
- package/src/app/shared/forms.d.ts +0 -170
- package/src/app/shared/functions.d.ts +0 -296
- package/src/app/shared/geolocation/geolocation.utils.d.ts +0 -25
- package/src/app/shared/gesture/gesture-config.d.ts +0 -15
- package/src/app/shared/gesture/hammer.utils.d.ts +0 -16
- package/src/app/shared/graph/colors.utils.d.ts +0 -34
- package/src/app/shared/graph/graph-colors.d.ts +0 -63
- package/src/app/shared/guard/component-dirty.guard.d.ts +0 -14
- package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +0 -8
- package/src/app/shared/hotkeys/hotkeys.service.d.ts +0 -48
- package/src/app/shared/hotkeys/shared-hotkeys.module.d.ts +0 -11
- package/src/app/shared/html.utils.d.ts +0 -17
- package/src/app/shared/http/http.utils.d.ts +0 -28
- package/src/app/shared/image/gallery/image-gallery.component.d.ts +0 -139
- package/src/app/shared/image/gallery/image-gallery.module.d.ts +0 -15
- package/src/app/shared/image/gallery/testing/gallegry.model.testing.d.ts +0 -12
- package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +0 -33
- package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +0 -16
- package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +0 -13
- package/src/app/shared/image/image.model.d.ts +0 -7
- package/src/app/shared/image/image.module.d.ts +0 -8
- package/src/app/shared/image/image.service.d.ts +0 -37
- package/src/app/shared/inputs.d.ts +0 -37
- package/src/app/shared/interceptors/progess.interceptor.d.ts +0 -8
- package/src/app/shared/logging/log-level.model.d.ts +0 -38
- package/src/app/shared/logging/logger.model.d.ts +0 -68
- package/src/app/shared/logging/logging-service.class.d.ts +0 -39
- package/src/app/shared/logging/logging-service.config.d.ts +0 -25
- package/src/app/shared/logging/logging-service.module.d.ts +0 -9
- package/src/app/shared/markdown/markdown.component.d.ts +0 -86
- package/src/app/shared/markdown/markdown.directive.d.ts +0 -13
- package/src/app/shared/markdown/markdown.modal.d.ts +0 -49
- package/src/app/shared/markdown/markdown.module.d.ts +0 -17
- package/src/app/shared/markdown/markdown.service.d.ts +0 -37
- package/src/app/shared/markdown/markdown.utils.d.ts +0 -26
- package/src/app/shared/markdown/testing/markdown.test.d.ts +0 -18
- package/src/app/shared/markdown/testing/markdown.testing.module.d.ts +0 -12
- package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +0 -74
- package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +0 -224
- package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +0 -23
- package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +0 -5
- package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +0 -48
- package/src/app/shared/material/badge/badge.directive.d.ts +0 -43
- package/src/app/shared/material/badge/badge.module.d.ts +0 -10
- package/src/app/shared/material/badge/badge.test.d.ts +0 -21
- package/src/app/shared/material/boolean/boolean.module.d.ts +0 -21
- package/src/app/shared/material/boolean/material.boolean.d.ts +0 -94
- package/src/app/shared/material/boolean/testing/boolean.test.page.d.ts +0 -31
- package/src/app/shared/material/chips/chips.module.d.ts +0 -22
- package/src/app/shared/material/chips/material.chips.d.ts +0 -167
- package/src/app/shared/material/chips/testing/chips.test.d.ts +0 -32
- package/src/app/shared/material/datetime/datetime.module.d.ts +0 -25
- package/src/app/shared/material/datetime/material.date.d.ts +0 -90
- package/src/app/shared/material/datetime/material.dateshort.d.ts +0 -89
- package/src/app/shared/material/datetime/material.datetime.d.ts +0 -136
- package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +0 -38
- package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +0 -32
- package/src/app/shared/material/datetime/testing/mat-dateshort.test.d.ts +0 -31
- package/src/app/shared/material/duration/duration.module.d.ts +0 -18
- package/src/app/shared/material/duration/duration.utils.d.ts +0 -2
- package/src/app/shared/material/duration/material.duration.d.ts +0 -64
- package/src/app/shared/material/duration/testing/mat-duration.test.d.ts +0 -23
- package/src/app/shared/material/latlong/latlong.utils.d.ts +0 -59
- package/src/app/shared/material/latlong/material.latlong-input.d.ts +0 -93
- package/src/app/shared/material/latlong/material.latlong.d.ts +0 -90
- package/src/app/shared/material/latlong/material.latlong.module.d.ts +0 -21
- package/src/app/shared/material/latlong/testing/latlong.test.d.ts +0 -30
- package/src/app/shared/material/material.animations.d.ts +0 -8
- package/src/app/shared/material/material.config.d.ts +0 -3
- package/src/app/shared/material/material.module.d.ts +0 -44
- package/src/app/shared/material/material.testing.module.d.ts +0 -31
- package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +0 -12
- package/src/app/shared/material/stepper/material.stepper-i18n.d.ts +0 -10
- package/src/app/shared/material/swipe/material.swipe.d.ts +0 -89
- package/src/app/shared/material/swipe/swipe.module.d.ts +0 -16
- package/src/app/shared/material/swipe/testing/swipe.test.d.ts +0 -22
- package/src/app/shared/material/test/test-component.d.ts +0 -75
- package/src/app/shared/material/testing/common.test.d.ts +0 -25
- package/src/app/shared/modules.d.ts +0 -9
- package/src/app/shared/named-filter/named-filter-selector.component.d.ts +0 -63
- package/src/app/shared/named-filter/named-filter.model.d.ts +0 -32
- package/src/app/shared/named-filter/named-filter.module.d.ts +0 -13
- package/src/app/shared/named-filter/named-filter.service.d.ts +0 -32
- package/src/app/shared/named-filter/testing/named-filter-selector.testing.d.ts +0 -34
- package/src/app/shared/named-filter/testing/named-filter.testing.module.d.ts +0 -10
- package/src/app/shared/observables.d.ts +0 -32
- package/src/app/shared/pipes/arrays.pipe.d.ts +0 -93
- package/src/app/shared/pipes/badge.pipes.d.ts +0 -7
- package/src/app/shared/pipes/colors.pipe.d.ts +0 -9
- package/src/app/shared/pipes/date-diff-duration.pipe.d.ts +0 -25
- package/src/app/shared/pipes/date-format.pipe.d.ts +0 -35
- package/src/app/shared/pipes/date-from-now.pipe.d.ts +0 -14
- package/src/app/shared/pipes/date-from.pipe.d.ts +0 -14
- package/src/app/shared/pipes/dates.pipe.d.ts +0 -10
- package/src/app/shared/pipes/display-with.pipe.d.ts +0 -8
- package/src/app/shared/pipes/duration.pipe.d.ts +0 -23
- package/src/app/shared/pipes/file-size.pipe.d.ts +0 -30
- package/src/app/shared/pipes/form.pipes.d.ts +0 -69
- package/src/app/shared/pipes/highlight.pipe.d.ts +0 -11
- package/src/app/shared/pipes/html.pipes.d.ts +0 -50
- package/src/app/shared/pipes/latlong-format.pipe.d.ts +0 -20
- package/src/app/shared/pipes/maps.pipe.d.ts +0 -23
- package/src/app/shared/pipes/maskito.pipe.d.ts +0 -14
- package/src/app/shared/pipes/math.pipes.d.ts +0 -26
- package/src/app/shared/pipes/ng-init.pipe.d.ts +0 -8
- package/src/app/shared/pipes/number-format.pipe.d.ts +0 -9
- package/src/app/shared/pipes/observable.pipes.d.ts +0 -25
- package/src/app/shared/pipes/pipes.module.d.ts +0 -36
- package/src/app/shared/pipes/property.pipes.d.ts +0 -46
- package/src/app/shared/pipes/selection.pipes.d.ts +0 -62
- package/src/app/shared/pipes/string.pipes.d.ts +0 -67
- package/src/app/shared/pipes/translate-context.pipe.d.ts +0 -17
- package/src/app/shared/pipes/types.pipes.d.ts +0 -30
- package/src/app/shared/pipes/url.pipes.d.ts +0 -27
- package/src/app/shared/platforms.d.ts +0 -16
- package/src/app/shared/print/print.service.d.ts +0 -94
- package/src/app/shared/regexps.d.ts +0 -32
- package/src/app/shared/rx-state/rx-state.decorators.d.ts +0 -33
- package/src/app/shared/rx-state/rx-state.module.d.ts +0 -10
- package/src/app/shared/rx-state/rx-state.types.d.ts +0 -5
- package/src/app/shared/services/entity-service.class.d.ts +0 -117
- package/src/app/shared/services/job.utils.d.ts +0 -20
- package/src/app/shared/services/memory-entity-service.class.d.ts +0 -87
- package/src/app/shared/services/progress-bar.service.d.ts +0 -20
- package/src/app/shared/services/startable-observable-service.class.d.ts +0 -51
- package/src/app/shared/services/startable-service.class.d.ts +0 -38
- package/src/app/shared/services/translate-context.service.d.ts +0 -29
- package/src/app/shared/services/validator-service.class.d.ts +0 -11
- package/src/app/shared/services.d.ts +0 -17
- package/src/app/shared/shared-routing.module.d.ts +0 -23
- package/src/app/shared/shared.module.d.ts +0 -33
- package/src/app/shared/shared.testing.module.d.ts +0 -20
- package/src/app/shared/storage/storage-explorer.component.d.ts +0 -60
- package/src/app/shared/storage/storage-explorer.module.d.ts +0 -13
- package/src/app/shared/storage/storage-explorer.testing-routing.module.d.ts +0 -9
- package/src/app/shared/storage/storage-explorer.testing.module.d.ts +0 -10
- package/src/app/shared/storage/storage.service.d.ts +0 -22
- package/src/app/shared/storage/storage.utils.d.ts +0 -19
- package/src/app/shared/testing/maskito.test.d.ts +0 -10
- package/src/app/shared/testing/observable.test.d.ts +0 -25
- package/src/app/shared/testing/tests.page.d.ts +0 -20
- package/src/app/shared/toast/toast.testing.d.ts +0 -15
- package/src/app/shared/toast/toast.testing.module.d.ts +0 -12
- package/src/app/shared/toast/toasts.d.ts +0 -16
- package/src/app/shared/toolbar/modal-toolbar.d.ts +0 -21
- package/src/app/shared/toolbar/toolbar.d.ts +0 -70
- package/src/app/shared/toolbar/toolbar.module.d.ts +0 -16
- package/src/app/shared/types.d.ts +0 -45
- package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +0 -21
- package/src/app/shared/upload-file/testing/upload-file.testing.module.d.ts +0 -11
- package/src/app/shared/upload-file/upload-file-popover.component.d.ts +0 -41
- package/src/app/shared/upload-file/upload-file.component.d.ts +0 -50
- package/src/app/shared/upload-file/upload-file.model.d.ts +0 -30
- package/src/app/shared/validator/form-error-adapter.class.d.ts +0 -33
- package/src/app/shared/validator/validators.d.ts +0 -145
- package/src/app/shared/version/versions.d.ts +0 -26
- package/src/app/social/config/social.config.d.ts +0 -4
- package/src/app/social/feed/feed.component.d.ts +0 -91
- package/src/app/social/feed/feed.directive.d.ts +0 -32
- package/src/app/social/feed/feed.model.d.ts +0 -69
- package/src/app/social/feed/feed.module.d.ts +0 -13
- package/src/app/social/feed/feed.page.d.ts +0 -24
- package/src/app/social/feed/feed.service.d.ts +0 -85
- package/src/app/social/feed/testing/feed.testing.d.ts +0 -23
- package/src/app/social/feed/testing/feed.testing.module.d.ts +0 -12
- package/src/app/social/job/job.module.d.ts +0 -12
- package/src/app/social/job/progression/job-progression.component.d.ts +0 -24
- package/src/app/social/job/progression/job-progression.icon.d.ts +0 -63
- package/src/app/social/job/progression/job-progression.list.d.ts +0 -20
- package/src/app/social/job/progression/job-progression.model.d.ts +0 -10
- package/src/app/social/job/progression/job-progression.service.d.ts +0 -33
- package/src/app/social/job/testing/job-progression.testing.d.ts +0 -13
- package/src/app/social/job/testing/job-progression.testing.service.d.ts +0 -9
- package/src/app/social/job/testing/job.testing.module.d.ts +0 -11
- package/src/app/social/message/message.form.d.ts +0 -36
- package/src/app/social/message/message.modal.d.ts +0 -47
- package/src/app/social/message/message.model.d.ts +0 -36
- package/src/app/social/message/message.module.d.ts +0 -14
- package/src/app/social/message/message.service.d.ts +0 -44
- package/src/app/social/social.errors.d.ts +0 -10
- package/src/app/social/social.module.d.ts +0 -20
- package/src/app/social/social.testing.module.d.ts +0 -14
- package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +0 -47
- package/src/app/social/user-event/notification/user-event-notification.list.d.ts +0 -77
- package/src/app/social/user-event/notification/user-event-notification.modal.d.ts +0 -37
- package/src/app/social/user-event/testing/user-event.testing.d.ts +0 -44
- package/src/app/social/user-event/testing/user-event.testing.model.d.ts +0 -42
- package/src/app/social/user-event/testing/user-event.testing.module.d.ts +0 -11
- package/src/app/social/user-event/testing/user-event.testing.service.d.ts +0 -41
- package/src/app/social/user-event/user-event.model.d.ts +0 -44
- package/src/app/social/user-event/user-event.module.d.ts +0 -14
- package/src/app/social/user-event/user-event.service.d.ts +0 -124
- package/src/environments/environment.class.d.ts +0 -86
- package/src/environments/environment.d.ts +0 -2
- package/src/environments/environment.loader.d.ts +0 -24
- package/src/theme/_globals.scss +0 -5
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
2
|
-
import { SharedModule } from '../../shared/shared.module';
|
|
3
|
-
import { AppUpdateOfflineModeCard } from './update-offline-mode-card.component';
|
|
4
|
-
import { TranslateModule } from '@ngx-translate/core';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@ngx-translate/core";
|
|
7
|
-
export class AppUpdateOfflineModeCardModule {
|
|
8
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppUpdateOfflineModeCardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
9
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AppUpdateOfflineModeCardModule, declarations: [
|
|
10
|
-
// Network
|
|
11
|
-
AppUpdateOfflineModeCard], imports: [SharedModule, i1.TranslateModule], exports: [TranslateModule,
|
|
12
|
-
// Components
|
|
13
|
-
AppUpdateOfflineModeCard] });
|
|
14
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppUpdateOfflineModeCardModule, imports: [SharedModule, TranslateModule.forChild(), TranslateModule] });
|
|
15
|
-
}
|
|
16
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppUpdateOfflineModeCardModule, decorators: [{
|
|
17
|
-
type: NgModule,
|
|
18
|
-
args: [{
|
|
19
|
-
imports: [SharedModule, TranslateModule.forChild()],
|
|
20
|
-
declarations: [
|
|
21
|
-
// Network
|
|
22
|
-
AppUpdateOfflineModeCard,
|
|
23
|
-
],
|
|
24
|
-
exports: [
|
|
25
|
-
TranslateModule,
|
|
26
|
-
// Components
|
|
27
|
-
AppUpdateOfflineModeCard,
|
|
28
|
-
],
|
|
29
|
-
}]
|
|
30
|
-
}] });
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLW9mZmxpbmUtbW9kZS1jYXJkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9vZmZsaW5lL3VwZGF0ZS1vZmZsaW5lLW1vZGUtY2FyZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7QUFnQnRELE1BQU0sT0FBTyw4QkFBOEI7d0dBQTlCLDhCQUE4Qjt5R0FBOUIsOEJBQThCO1lBVnZDLFVBQVU7WUFDVix3QkFBd0IsYUFKaEIsWUFBWSxpQ0FPcEIsZUFBZTtZQUVmLGFBQWE7WUFDYix3QkFBd0I7eUdBR2YsOEJBQThCLFlBYi9CLFlBQVksRUFBRSxlQUFlLENBQUMsUUFBUSxFQUFFLEVBT2hELGVBQWU7OzRGQU1OLDhCQUE4QjtrQkFkMUMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUVuRCxZQUFZLEVBQUU7d0JBQ1osVUFBVTt3QkFDVix3QkFBd0I7cUJBQ3pCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxlQUFlO3dCQUVmLGFBQWE7d0JBQ2Isd0JBQXdCO3FCQUN6QjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTaGFyZWRNb2R1bGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2hhcmVkLm1vZHVsZSc7XG5pbXBvcnQgeyBBcHBVcGRhdGVPZmZsaW5lTW9kZUNhcmQgfSBmcm9tICcuL3VwZGF0ZS1vZmZsaW5lLW1vZGUtY2FyZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtTaGFyZWRNb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZS5mb3JDaGlsZCgpXSxcblxuICBkZWNsYXJhdGlvbnM6IFtcbiAgICAvLyBOZXR3b3JrXG4gICAgQXBwVXBkYXRlT2ZmbGluZU1vZGVDYXJkLFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuXG4gICAgLy8gQ29tcG9uZW50c1xuICAgIEFwcFVwZGF0ZU9mZmxpbmVNb2RlQ2FyZCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQXBwVXBkYXRlT2ZmbGluZU1vZGVDYXJkTW9kdWxlIHt9XG4iXX0=
|
|
@@ -1,350 +0,0 @@
|
|
|
1
|
-
import { booleanAttribute, ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, numberAttribute, Optional, ViewChild, } from '@angular/core';
|
|
2
|
-
import { Peer } from '../services/model/peer.model';
|
|
3
|
-
import { Subscription } from 'rxjs';
|
|
4
|
-
import { fadeInAnimation } from '../../shared/material/material.animations';
|
|
5
|
-
import { NetworkUtils } from '../services/network.utils';
|
|
6
|
-
import { VersionUtils } from '../../shared/version/versions';
|
|
7
|
-
import { ENVIRONMENT } from '../../../environments/environment.class';
|
|
8
|
-
import { TextPopover } from '../form/text-popover/text-popover.component';
|
|
9
|
-
import { isMobile } from '../../shared/platforms';
|
|
10
|
-
import { Validators } from '@angular/forms';
|
|
11
|
-
import { PEER_URL_REGEXP } from '../services/network.service';
|
|
12
|
-
import { APP_LOGGING_SERVICE } from '../../shared/logging/logging-service.class';
|
|
13
|
-
import { map } from 'rxjs/operators';
|
|
14
|
-
import { EntityUtils } from '../services/model/entity.model';
|
|
15
|
-
import { RxState } from '@rx-angular/state';
|
|
16
|
-
import { suggestFromArray } from '../../shared/services';
|
|
17
|
-
import { isNilOrBlank, isNotEmptyArray, isNotNil } from '../../shared/functions';
|
|
18
|
-
import { NodeFeature } from '../services/model/node-feature.model';
|
|
19
|
-
import * as i0 from "@angular/core";
|
|
20
|
-
import * as i1 from "@ionic/angular";
|
|
21
|
-
import * as i2 from "@ngx-translate/core";
|
|
22
|
-
import * as i3 from "@angular/common/http";
|
|
23
|
-
import * as i4 from "@angular/common";
|
|
24
|
-
import * as i5 from "@angular/forms";
|
|
25
|
-
import * as i6 from "@angular/material/icon";
|
|
26
|
-
import * as i7 from "@angular/material/tabs";
|
|
27
|
-
import * as i8 from "@angular/material/badge";
|
|
28
|
-
import * as i9 from "@angular/material/core";
|
|
29
|
-
import * as i10 from "@angular/material/tooltip";
|
|
30
|
-
import * as i11 from "../../shared/pipes/highlight.pipe";
|
|
31
|
-
import * as i12 from "../../shared/pipes/arrays.pipe";
|
|
32
|
-
import * as i13 from "../../shared/pipes/string.pipes";
|
|
33
|
-
import * as i14 from "../../shared/pipes/badge.pipes";
|
|
34
|
-
import * as i15 from "../services/pipes/referential-to-string.pipe";
|
|
35
|
-
import * as i16 from "../../../environments/environment.class";
|
|
36
|
-
export class SelectPeerModal extends RxState {
|
|
37
|
-
modalCtrl;
|
|
38
|
-
popoverController;
|
|
39
|
-
translate;
|
|
40
|
-
http;
|
|
41
|
-
cd;
|
|
42
|
-
environment;
|
|
43
|
-
loggingService;
|
|
44
|
-
_subscription = new Subscription();
|
|
45
|
-
_logger;
|
|
46
|
-
defaultPeers$ = this.select('defaultPeers');
|
|
47
|
-
peers$ = this.select('peers');
|
|
48
|
-
filteredPeers$ = this.select('filteredPeers');
|
|
49
|
-
filteredPeersByFeatures$ = this.select('filteredPeersByFeatures');
|
|
50
|
-
filteredPeerCount$ = this.select('filteredPeerCount');
|
|
51
|
-
filteredFeaturesCount$ = this.select('filteredFeaturesCount');
|
|
52
|
-
loading = true;
|
|
53
|
-
mobile;
|
|
54
|
-
peerMinVersion;
|
|
55
|
-
peerDefaultPrefix;
|
|
56
|
-
enableSelectPeerByFeature;
|
|
57
|
-
collapsedPeers = {};
|
|
58
|
-
set peers(value) {
|
|
59
|
-
this.set('peers', () => value);
|
|
60
|
-
}
|
|
61
|
-
get peers() {
|
|
62
|
-
return this.get('peers');
|
|
63
|
-
}
|
|
64
|
-
set searchText(value) {
|
|
65
|
-
this.set('searchText', () => value);
|
|
66
|
-
}
|
|
67
|
-
get searchText() {
|
|
68
|
-
return this.get('searchText');
|
|
69
|
-
}
|
|
70
|
-
set filteredPeers(value) {
|
|
71
|
-
this.set('filteredPeers', () => value);
|
|
72
|
-
}
|
|
73
|
-
get filteredPeers() {
|
|
74
|
-
return this.get('filteredPeers');
|
|
75
|
-
}
|
|
76
|
-
set selectedTabIndex(value) {
|
|
77
|
-
this.set('selectedTabIndex', () => value);
|
|
78
|
-
}
|
|
79
|
-
get selectedTabIndex() {
|
|
80
|
-
return this.get('selectedTabIndex');
|
|
81
|
-
}
|
|
82
|
-
selectedPeer;
|
|
83
|
-
peerFilter;
|
|
84
|
-
title = 'NETWORK.PEER.SELECT_MODAL.TITLE';
|
|
85
|
-
canCancel = true;
|
|
86
|
-
allowSelectDownPeer = true;
|
|
87
|
-
showSetManuallyButton = true;
|
|
88
|
-
showSearchBar;
|
|
89
|
-
tabGroupAnimationDuration;
|
|
90
|
-
onRefresh = new EventEmitter();
|
|
91
|
-
set defaultPeers(value) {
|
|
92
|
-
this.set('defaultPeers', () => value);
|
|
93
|
-
}
|
|
94
|
-
searchbar;
|
|
95
|
-
constructor(modalCtrl, popoverController, translate, http, cd, environment, loggingService) {
|
|
96
|
-
super();
|
|
97
|
-
this.modalCtrl = modalCtrl;
|
|
98
|
-
this.popoverController = popoverController;
|
|
99
|
-
this.translate = translate;
|
|
100
|
-
this.http = http;
|
|
101
|
-
this.cd = cd;
|
|
102
|
-
this.environment = environment;
|
|
103
|
-
this.loggingService = loggingService;
|
|
104
|
-
this.set({ searchText: null, selectedTabIndex: 0 });
|
|
105
|
-
this.mobile = isMobile(window);
|
|
106
|
-
this._logger = loggingService?.getLogger('network-modal');
|
|
107
|
-
this.peerMinVersion = environment.peerMinVersion;
|
|
108
|
-
this.peerDefaultPrefix = environment.peerDefaultPrefix || 'https://';
|
|
109
|
-
this.enableSelectPeerByFeature = environment.enableSelectPeerByFeature || false;
|
|
110
|
-
this.showSearchBar = this.enableSelectPeerByFeature; // Show search bar by default, if two tabs
|
|
111
|
-
// Refreshing peers
|
|
112
|
-
this.hold(this.defaultPeers$, (res) => this.refreshPeers(res));
|
|
113
|
-
// Search on host
|
|
114
|
-
this.connect('filteredPeers', this.select(['peers', 'searchText'], (res) => res).pipe(map(({ peers, searchText }) => {
|
|
115
|
-
if (isNilOrBlank(searchText))
|
|
116
|
-
return peers; // All
|
|
117
|
-
console.debug('[select-peer-modal] Searching on hosts: ' + searchText);
|
|
118
|
-
const { data } = suggestFromArray(peers, searchText, {
|
|
119
|
-
anySearch: true,
|
|
120
|
-
searchAttributes: ['label', 'hostAndPort'],
|
|
121
|
-
});
|
|
122
|
-
return data;
|
|
123
|
-
})));
|
|
124
|
-
this.connect('filteredPeerCount', this.filteredPeers$.pipe(map((peers) => peers?.length ?? 0)));
|
|
125
|
-
// Search on features
|
|
126
|
-
if (this.enableSelectPeerByFeature) {
|
|
127
|
-
this.connect('filteredPeersByFeatures', this.select(['peers', 'searchText'], (res) => res).pipe(map(({ peers, searchText }) => {
|
|
128
|
-
if (isNilOrBlank(searchText)) {
|
|
129
|
-
return (peers || []).filter((p) => isNotEmptyArray(p?.features));
|
|
130
|
-
}
|
|
131
|
-
console.debug('[select-peer-modal] Searching on features: ' + searchText);
|
|
132
|
-
return peers
|
|
133
|
-
.map((peer) => {
|
|
134
|
-
const { data: features } = suggestFromArray(peer.features || [], searchText, {
|
|
135
|
-
anySearch: true,
|
|
136
|
-
searchAttributes: ['label', 'name', 'description'],
|
|
137
|
-
});
|
|
138
|
-
if (isNotEmptyArray(features)) {
|
|
139
|
-
const filteredPeer = peer.clone();
|
|
140
|
-
filteredPeer.features = features;
|
|
141
|
-
return filteredPeer;
|
|
142
|
-
}
|
|
143
|
-
return null;
|
|
144
|
-
})
|
|
145
|
-
.filter(isNotNil);
|
|
146
|
-
})));
|
|
147
|
-
this.connect('filteredFeaturesCount', this.filteredPeersByFeatures$.pipe(map(Peer.countAllFeatures)));
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
cancel() {
|
|
151
|
-
this.modalCtrl.dismiss();
|
|
152
|
-
}
|
|
153
|
-
ngOnDestroy() {
|
|
154
|
-
super.ngOnDestroy();
|
|
155
|
-
this._subscription.unsubscribe();
|
|
156
|
-
}
|
|
157
|
-
selectPeer(peer) {
|
|
158
|
-
if (this.allowSelectDownPeer || (peer.reachable && this.isCompatible(peer))) {
|
|
159
|
-
console.debug(`[select-peer-modal] Selected peer: {url: '${peer.url}'}`);
|
|
160
|
-
this.selectedPeer = peer.url;
|
|
161
|
-
this.modalCtrl.dismiss(peer);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
async toggleSearchBar() {
|
|
165
|
-
this.showSearchBar = !this.showSearchBar;
|
|
166
|
-
if (this.showSearchBar && this.searchbar) {
|
|
167
|
-
setTimeout(() => {
|
|
168
|
-
this.searchbar.setFocus();
|
|
169
|
-
this.markForCheck();
|
|
170
|
-
}, 300);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
togglePeerFeatures(peerUrl) {
|
|
174
|
-
if (!peerUrl)
|
|
175
|
-
return;
|
|
176
|
-
this.collapsedPeers[peerUrl] = isNotNil(this.collapsedPeers[peerUrl]) ? !this.collapsedPeers[peerUrl] : true;
|
|
177
|
-
this.markForCheck();
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Check the min pod version, defined by the app
|
|
181
|
-
*
|
|
182
|
-
* @param peer
|
|
183
|
-
*/
|
|
184
|
-
isCompatible(peer) {
|
|
185
|
-
return !this.peerMinVersion || (peer && peer.softwareVersion && VersionUtils.isCompatible(this.peerMinVersion, peer.softwareVersion));
|
|
186
|
-
}
|
|
187
|
-
refresh(event) {
|
|
188
|
-
this.loading = true;
|
|
189
|
-
this.onRefresh.emit(event);
|
|
190
|
-
}
|
|
191
|
-
async clickSetManually(event) {
|
|
192
|
-
const peerUrl = await this.openPeerUrlPopover(event);
|
|
193
|
-
if (peerUrl) {
|
|
194
|
-
const peer = Peer.parseUrl(peerUrl);
|
|
195
|
-
await this.refreshPeer(peer);
|
|
196
|
-
this.selectPeer(peer);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
/* -- protected methods -- */
|
|
200
|
-
clearLogo(peer) {
|
|
201
|
-
if (peer instanceof Peer) {
|
|
202
|
-
peer.favicon = 'skip';
|
|
203
|
-
}
|
|
204
|
-
else {
|
|
205
|
-
peer.logo = 'skip';
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
async refreshPeers(peers) {
|
|
209
|
-
peers = peers || [];
|
|
210
|
-
const data = [];
|
|
211
|
-
const jobs = Promise.all(peers
|
|
212
|
-
.filter((peer) => !(typeof this.peerFilter === 'function') || this.peerFilter(peer))
|
|
213
|
-
.map(async (peer) => {
|
|
214
|
-
await this.refreshPeer(peer);
|
|
215
|
-
if (this._subscription.closed)
|
|
216
|
-
return; // component destroyed
|
|
217
|
-
data.push(peer);
|
|
218
|
-
// Sort (by reachable, then host)
|
|
219
|
-
data.sort((a, b) => {
|
|
220
|
-
if (a.reachable && !b.reachable)
|
|
221
|
-
return -1;
|
|
222
|
-
if (!a.reachable && b.reachable)
|
|
223
|
-
return 1;
|
|
224
|
-
if (a.hostAndPort < b.hostAndPort)
|
|
225
|
-
return -1;
|
|
226
|
-
if (a.hostAndPort > b.hostAndPort)
|
|
227
|
-
return 1;
|
|
228
|
-
return 0;
|
|
229
|
-
});
|
|
230
|
-
this.peers = data.slice(); // Copy to force update
|
|
231
|
-
return peer;
|
|
232
|
-
}));
|
|
233
|
-
try {
|
|
234
|
-
await jobs;
|
|
235
|
-
}
|
|
236
|
-
catch (err) {
|
|
237
|
-
if (!this._subscription.closed)
|
|
238
|
-
console.error(err);
|
|
239
|
-
}
|
|
240
|
-
this.loading = false;
|
|
241
|
-
this.cd.markForCheck();
|
|
242
|
-
}
|
|
243
|
-
async refreshPeer(peer) {
|
|
244
|
-
try {
|
|
245
|
-
// DEBUG
|
|
246
|
-
//await sleep(Math.random() * 100);
|
|
247
|
-
const summary = await NetworkUtils.getNodeInfo(this.http, peer.url);
|
|
248
|
-
peer.status = 'UP';
|
|
249
|
-
peer.softwareName = summary.softwareName;
|
|
250
|
-
peer.softwareVersion = summary.softwareVersion;
|
|
251
|
-
peer.label = summary.nodeLabel;
|
|
252
|
-
peer.name = summary.nodeName;
|
|
253
|
-
peer.features = summary.features?.map(NodeFeature.fromObject) || [];
|
|
254
|
-
}
|
|
255
|
-
catch (err) {
|
|
256
|
-
// If modal was not closed (e.g. response arrived too late => ignore)
|
|
257
|
-
if (!this._subscription.closed) {
|
|
258
|
-
console.error(`[select-peer] Error while calling '${peer.url}/api/node/info': ${err?.message || err}`, err);
|
|
259
|
-
this._logger?.error('refreshPeer', `Error while calling '${peer.url}/api/node/info': ${err?.message || JSON.stringify(err)}`);
|
|
260
|
-
}
|
|
261
|
-
peer.status = 'DOWN';
|
|
262
|
-
}
|
|
263
|
-
return peer;
|
|
264
|
-
}
|
|
265
|
-
async openPeerUrlPopover(event, opts) {
|
|
266
|
-
const modal = await this.popoverController.create({
|
|
267
|
-
component: TextPopover,
|
|
268
|
-
componentProps: {
|
|
269
|
-
placeholder: this.translate.instant('SETTINGS.PEER_URL'),
|
|
270
|
-
multiline: false,
|
|
271
|
-
autofocus: !this.mobile,
|
|
272
|
-
autocomplete: false,
|
|
273
|
-
validator: Validators.pattern(PEER_URL_REGEXP),
|
|
274
|
-
maxLength: null,
|
|
275
|
-
text: this.selectedPeer || this.peerDefaultPrefix,
|
|
276
|
-
...opts,
|
|
277
|
-
},
|
|
278
|
-
backdropDismiss: false,
|
|
279
|
-
keyboardClose: false,
|
|
280
|
-
event: null, // IMPORTANT: null event will center the popover, and this will fix keyboard overlap on mobile
|
|
281
|
-
translucent: true,
|
|
282
|
-
cssClass: 'popover-large',
|
|
283
|
-
});
|
|
284
|
-
await modal.present();
|
|
285
|
-
const { data, role } = await modal.onDidDismiss();
|
|
286
|
-
if (data) {
|
|
287
|
-
console.info('Popover result: ', data);
|
|
288
|
-
return data;
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
updateFilteredPeer(event) {
|
|
292
|
-
if (event) {
|
|
293
|
-
event.preventDefault();
|
|
294
|
-
event.stopPropagation();
|
|
295
|
-
}
|
|
296
|
-
const value = event.target.value;
|
|
297
|
-
const test = this.filteredPeers$.pipe(map((peers) => peers.filter(EntityUtils.searchTextFilter(['features.label', 'features.name', 'features.description'], value))));
|
|
298
|
-
console.log(test);
|
|
299
|
-
// (event.target.value);
|
|
300
|
-
this.markForCheck();
|
|
301
|
-
}
|
|
302
|
-
markForCheck() {
|
|
303
|
-
this.cd.markForCheck();
|
|
304
|
-
}
|
|
305
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SelectPeerModal, deps: [{ token: i1.ModalController }, { token: i1.PopoverController }, { token: i2.TranslateService }, { token: i3.HttpClient }, { token: i0.ChangeDetectorRef }, { token: ENVIRONMENT }, { token: APP_LOGGING_SERVICE, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
306
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SelectPeerModal, selector: "select-peer-modal", inputs: { selectedTabIndex: ["selectedTabIndex", "selectedTabIndex", numberAttribute], selectedPeer: "selectedPeer", peerFilter: "peerFilter", title: "title", canCancel: ["canCancel", "canCancel", booleanAttribute], allowSelectDownPeer: ["allowSelectDownPeer", "allowSelectDownPeer", booleanAttribute], showSetManuallyButton: ["showSetManuallyButton", "showSetManuallyButton", booleanAttribute], showSearchBar: ["showSearchBar", "showSearchBar", booleanAttribute], tabGroupAnimationDuration: "tabGroupAnimationDuration", onRefresh: "onRefresh", defaultPeers: "defaultPeers" }, viewQueries: [{ propertyName: "searchbar", first: true, predicate: ["searchbar"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"light\" style=\"z-index: 900\">\n <ion-buttons slot=\"start\">\n @if (canCancel) {\n <ion-button (click)=\"cancel()\" visible-mobile visible-sm visible-xs>\n <ion-icon name=\"arrow-back\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n }\n </ion-buttons>\n\n <ion-title>\n {{ title | translate }}\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <!-- loader -->\n @if (loading) {\n <ion-spinner></ion-spinner>\n } @else {\n <!-- refresh button -->\n <ion-button\n (click)=\"refresh($event)\"\n *ngIf=\"onRefresh.observed\"\n [matTooltip]=\"'COMMON.BTN_REFRESH' | translate\"\n >\n <mat-icon slot=\"icon-only\">refresh</mat-icon>\n </ion-button>\n }\n <!-- search button -->\n @if (!showSearchBar) {\n <ion-button (click)=\"toggleSearchBar()\">\n <ion-icon slot=\"icon-only\" name=\"search\"></ion-icon>\n </ion-button>\n }\n </ion-buttons>\n </ion-toolbar>\n\n <!-- search bar -->\n <ion-toolbar *ngIf=\"showSearchBar\">\n <ion-searchbar\n #searchbar\n animated\n type=\"search\"\n [class.cdk-visually-hidden]=\"!showSearchBar\"\n show-clear-button=\"always\"\n [placeholder]=\"'COMMON.BTN_SEARCH' | translate\"\n [cancelButtonText]=\"'COMMON.BTN_CANCEL' | translate\"\n [(ngModel)]=\"searchText\"\n (ionCancel)=\"toggleSearchBar()\"\n ></ion-searchbar>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <mat-tab-group\n #tabGroup\n [(selectedIndex)]=\"selectedTabIndex\"\n class=\"mat-mdc-tab-disabled-hidden\"\n [class.mat-mdc-tab-group-header-hidden]=\"!enableSelectPeerByFeature\"\n [dynamicHeight]=\"false\"\n [mat-stretch-tabs]=\"mobile\"\n [animationDuration]=\"mobile ? tabGroupAnimationDuration : '0s'\"\n >\n <mat-tab>\n <ng-template mat-tab-label>\n <ion-label\n [matBadge]=\"filteredPeerCount$ | async | badgeNumber\"\n [matBadgeHidden]=\"filteredPeerCount$ | async | isNil\"\n [matBadgeColor]=\"(filteredPeerCount$ | async) ? 'primary' : 'accent'\"\n matBadgeOverlap=\"false\"\n matBadgeColor=\"primary\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n >\n {{ 'NETWORK.PEER.SELECT_MODAL.TAB_NETWORK' | translate }}\n </ion-label>\n </ng-template>\n <ion-list>\n <ion-list-header>\n <ion-label class=\"ion-text-wrap ion-padding-end\">\n <p [innerHTML]=\"'NETWORK.PEER.SELECT_MODAL.NETWORK_HELP' | translate\"></p>\n </ion-label>\n </ion-list-header>\n\n @for (peer of filteredPeers$ | async; track $index) {\n <ion-item\n (click)=\"selectPeer(peer)\"\n @fadeInAnimation\n [class.selected]=\"selectedPeer && selectedPeer === peer.url\"\n detail\n matRipple\n tappable\n >\n <!-- Peer is UP -->\n @if (peer.reachable) {\n <!-- icon -->\n @if (peer.favicon != 'skip') {\n <ion-avatar slot=\"start\">\n <ion-img [src]=\"peer.favicon || peer.url + '/api/favicon'\" (ionError)=\"clearLogo(peer)\"></ion-img>\n <ion-icon name=\"server\" class=\"icon-secondary\" style=\"top: 12px; left: 44px\" color=\"dark\"></ion-icon>\n </ion-avatar>\n } @else {\n <ion-icon slot=\"start\" name=\"server\" class=\"ion-icon-avatar\" color=\"dark\"></ion-icon>\n }\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <ion-label class=\"ion-text-wrap\">\n <ion-text>\n @let url = peer.hostAndPort + peer.path;\n <h3 [innerHTML]=\"url | highlight: searchText\"></h3>\n </ion-text>\n <ion-text color=\"primary\">\n <h4 [innerHTML]=\"peer.label | highlight: searchText\"></h4>\n </ion-text>\n </ion-label>\n </ion-col>\n <ion-col size=\"12\" size-sm=\"4\">\n <ion-label class=\"ion-text-wrap ion-text-sm-center\" color=\"medium\">\n <h4>\n <small>{{ peer.softwareName }} </small>\n <br class=\"hidden-xxs hidden-xs\" />\n <!-- Compatible -->\n @if (!peerMinVersion || isCompatible(peer)) {\n <small>v{{ peer.softwareVersion }}</small>\n } @else {\n <!-- Incompatible -->\n <ion-text\n color=\"danger\"\n [matTooltip]=\"\n 'NETWORK.PEER.SELECT_MODAL.NOT_COMPATIBLE_HELP' | translate: { version: peerMinVersion }\n \"\n >\n <small class=\"ion-color-danger\">\n <mat-icon>warning</mat-icon>\n v{{ peer.softwareVersion }}\n </small>\n </ion-text>\n }\n </h4>\n </ion-label>\n </ion-col>\n </ion-row>\n </ion-grid>\n } @else {\n <!-- Peer is DOWN -->\n <ion-icon slot=\"start\" name=\"server\" class=\"disabled ion-icon-avatar\"></ion-icon>\n\n <ion-label class=\"ion-text-wrap\">\n <ion-text color=\"medium\">\n <h3>{{ peer.hostAndPort }}{{ peer.path }}</h3>\n </ion-text>\n <ion-text color=\"danger\">\n <h4>\n <small>\n <ion-icon size=\"small\" name=\"close-circle\"></ion-icon>\n </small>\n <span translate>NETWORK.PEER.OFFLINE</span>\n </h4>\n </ion-text>\n </ion-label>\n }\n </ion-item>\n }\n\n <!-- no result -->\n @if ((filteredPeerCount$ | async) === 0) {\n <ion-item>\n <ion-text color=\"danger\" class=\"text-italic\" translate>COMMON.NO_RESULT</ion-text>\n </ion-item>\n }\n </ion-list>\n </mat-tab>\n\n <!-- Select by features -->\n <mat-tab [disabled]=\"!enableSelectPeerByFeature\">\n <ng-template mat-tab-label>\n <ion-label\n [matBadge]=\"filteredFeaturesCount$ | async | badgeNumber\"\n [matBadgeHidden]=\"filteredFeaturesCount$ | async | isNil\"\n [matBadgeColor]=\"(filteredFeaturesCount$ | async) ? 'primary' : 'accent'\"\n matBadgeOverlap=\"false\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n >\n {{ 'NETWORK.PEER.SELECT_MODAL.TAB_FEATURES' | translate }}\n </ion-label>\n </ng-template>\n <ion-list>\n <ion-list-header>\n <ion-label class=\"ion-text-wrap ion-padding-end\">\n <p [innerHTML]=\"'NETWORK.PEER.SELECT_MODAL.FEATURES_HELP' | translate\"></p>\n </ion-label>\n </ion-list-header>\n\n @for (peer of filteredPeersByFeatures$ | async; track $index) {\n @let peerUrl = peer.hostAndPort + peer.path;\n <!-- Peer is UP -->\n @if (peer.reachable && peer.features | isNotEmptyArray) {\n @let collapsed = collapsedPeers[peerUrl];\n\n <ion-item-divider (click)=\"togglePeerFeatures(peerUrl)\" tappable @fadeInAnimation>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <ion-label>\n <h4>\n <ion-icon name=\"server\" color=\"medium\"></ion-icon>\n {{ peer.hostAndPort }}{{ peer.path }}\n </h4>\n @if (peerMinVersion && !isCompatible(peer)) {\n <ion-text\n color=\"danger\"\n [matTooltip]=\"\n 'NETWORK.PEER.SELECT_MODAL.NOT_COMPATIBLE_HELP' | translate: { version: peerMinVersion }\n \"\n >\n <h4 class=\"ion-color-danger\">\n <small>\n <mat-icon>warning</mat-icon>\n v{{ peer.softwareVersion }}\n </small>\n </h4>\n </ion-text>\n }\n </ion-label>\n </ion-col>\n <ion-col size=\"4\" class=\"ion-text-end\">\n <ion-label class=\"text-italic\">\n <h4>({{ 'COMMON.RESULT_COUNT' | translate: { count: peer.features.length } }})</h4>\n </ion-label>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <mat-icon slot=\"end\">\n @if (collapsed) {\n {{ mobile ? 'arrow_drop_down' : 'keyboard_arrow_down' }}\n } @else {\n {{ mobile ? 'arrow_drop_up' : 'keyboard_arrow_up' }}\n }\n </mat-icon>\n </ion-item-divider>\n\n @if (!collapsed) {\n @for (feature of peer.features; track feature.label) {\n <ion-item (click)=\"selectPeer(peer)\" tappable matRipple detail @fadeInAnimation>\n <!-- icon -->\n @if (feature.logo && feature.logo != 'skip') {\n <ion-avatar slot=\"start\">\n <ion-img [src]=\"feature.logo\" (ionError)=\"clearLogo(feature)\"></ion-img>\n </ion-avatar>\n } @else if (peer.favicon != 'skip') {\n <ion-avatar slot=\"start\">\n <ion-img [src]=\"peer.favicon || peer.url + '/api/favicon'\" (ionError)=\"clearLogo(peer)\"></ion-img>\n <ion-icon\n name=\"contract\"\n class=\"icon-secondary\"\n style=\"top: 12px; left: 44px\"\n color=\"dark\"\n ></ion-icon>\n </ion-avatar>\n } @else {\n <ion-icon slot=\"start\" name=\"contract\" class=\"ion-icon-avatar\" color=\"dark\"></ion-icon>\n }\n\n <ion-label class=\"ion-text-wrap\">\n <ion-text color=\"primary\">\n <h3 [innerHTML]=\"feature | referentialToString | highlight: searchText\"></h3>\n </ion-text>\n <ion-text>\n <p [innerHTML]=\"feature.description | highlight: searchText\"></p>\n </ion-text>\n </ion-label>\n </ion-item>\n }\n }\n }\n }\n\n <!-- no result -->\n @if ((filteredFeaturesCount$ | async) === 0) {\n <ion-item>\n <ion-text color=\"danger\" class=\"text-italic\" translate>COMMON.NO_RESULT</ion-text>\n </ion-item>\n }\n </ion-list>\n </mat-tab>\n </mat-tab-group>\n</ion-content>\n\n@if ((canCancel && !mobile) || showSetManuallyButton) {\n <ion-footer>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding ion-text-nowrap\">\n <ion-col></ion-col>\n\n <!-- buttons -->\n @if (showSetManuallyButton) {\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" (click)=\"clickSetManually($event)\">\n <ion-label translate>NETWORK.PEER.SELECT_MODAL.BTN_SET_MANUALLY</ion-label>\n </ion-button>\n </ion-col>\n }\n\n @if (canCancel) {\n <ion-col size=\"auto\" hidden-xs hidden-sm hidden-mobile>\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"cancel()\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n </ion-col>\n }\n </ion-row>\n </ion-toolbar>\n </ion-footer>\n}\n", styles: [".mat-mdc-tab-group{height:100%}.mat-mdc-tab-group .mat-tab-body-wrapper{height:calc(100% - var(--mat-tab-header-height))}ion-item-divider .ion-icon-avatar,ion-item .ion-icon-avatar{-webkit-margin-end:16px;margin-inline-end:16px;font-size:40px;width:40px;height:40px}ion-item-divider .ion-icon-avatar.disabled,ion-item .ion-icon-avatar.disabled{color:rgba(var(--ion-color-medium-rgb),.7)}ion-item-divider h4 ion-icon,ion-item-divider h4 mat-icon,ion-item h4 ion-icon,ion-item h4 mat-icon{height:14px;width:14px;font-size:14px;line-height:14px}ion-item-divider h4 small ion-icon,ion-item-divider h4 small mat-icon,ion-item h4 small ion-icon,ion-item h4 small mat-icon{height:12px;width:12px;font-size:12px;line-height:12px}ion-item-divider.selected,ion-item.selected{--ion-color-base: var(--ion-color-secondary100-contrast) !important;--ion-item-background: var(--ion-color-secondary100)}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.IonAvatar, selector: "ion-avatar" }, { kind: "component", type: i1.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: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: i1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i1.IonItemDivider, selector: "ion-item-divider", inputs: ["color", "mode", "sticky"] }, { kind: "component", type: i1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i1.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i1.IonListHeader, selector: "ion-list-header", inputs: ["color", "lines", "mode"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }, { kind: "component", type: i1.IonSearchbar, selector: "ion-searchbar", inputs: ["animated", "autocapitalize", "autocomplete", "autocorrect", "cancelButtonIcon", "cancelButtonText", "clearIcon", "color", "debounce", "disabled", "enterkeyhint", "inputmode", "maxlength", "minlength", "mode", "name", "placeholder", "searchIcon", "showCancelButton", "showClearButton", "spellcheck", "type", "value"] }, { kind: "component", type: i1.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i1.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar,ion-range" }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i7.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i7.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i7.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i8.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "directive", type: i9.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "pipe", type: i11.HighlightPipe, name: "highlight" }, { kind: "pipe", type: i12.NotEmptyArrayPipe, name: "isNotEmptyArray" }, { kind: "pipe", type: i13.IsNilPipe, name: "isNil" }, { kind: "pipe", type: i14.BadgeNumberPipe, name: "badgeNumber" }, { kind: "pipe", type: i15.ReferentialToStringPipe, name: "referentialToString" }], animations: [fadeInAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
307
|
-
}
|
|
308
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SelectPeerModal, decorators: [{
|
|
309
|
-
type: Component,
|
|
310
|
-
args: [{ selector: 'select-peer-modal', changeDetection: ChangeDetectionStrategy.OnPush, animations: [fadeInAnimation], template: "<ion-header>\n <ion-toolbar color=\"light\" style=\"z-index: 900\">\n <ion-buttons slot=\"start\">\n @if (canCancel) {\n <ion-button (click)=\"cancel()\" visible-mobile visible-sm visible-xs>\n <ion-icon name=\"arrow-back\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n }\n </ion-buttons>\n\n <ion-title>\n {{ title | translate }}\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <!-- loader -->\n @if (loading) {\n <ion-spinner></ion-spinner>\n } @else {\n <!-- refresh button -->\n <ion-button\n (click)=\"refresh($event)\"\n *ngIf=\"onRefresh.observed\"\n [matTooltip]=\"'COMMON.BTN_REFRESH' | translate\"\n >\n <mat-icon slot=\"icon-only\">refresh</mat-icon>\n </ion-button>\n }\n <!-- search button -->\n @if (!showSearchBar) {\n <ion-button (click)=\"toggleSearchBar()\">\n <ion-icon slot=\"icon-only\" name=\"search\"></ion-icon>\n </ion-button>\n }\n </ion-buttons>\n </ion-toolbar>\n\n <!-- search bar -->\n <ion-toolbar *ngIf=\"showSearchBar\">\n <ion-searchbar\n #searchbar\n animated\n type=\"search\"\n [class.cdk-visually-hidden]=\"!showSearchBar\"\n show-clear-button=\"always\"\n [placeholder]=\"'COMMON.BTN_SEARCH' | translate\"\n [cancelButtonText]=\"'COMMON.BTN_CANCEL' | translate\"\n [(ngModel)]=\"searchText\"\n (ionCancel)=\"toggleSearchBar()\"\n ></ion-searchbar>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <mat-tab-group\n #tabGroup\n [(selectedIndex)]=\"selectedTabIndex\"\n class=\"mat-mdc-tab-disabled-hidden\"\n [class.mat-mdc-tab-group-header-hidden]=\"!enableSelectPeerByFeature\"\n [dynamicHeight]=\"false\"\n [mat-stretch-tabs]=\"mobile\"\n [animationDuration]=\"mobile ? tabGroupAnimationDuration : '0s'\"\n >\n <mat-tab>\n <ng-template mat-tab-label>\n <ion-label\n [matBadge]=\"filteredPeerCount$ | async | badgeNumber\"\n [matBadgeHidden]=\"filteredPeerCount$ | async | isNil\"\n [matBadgeColor]=\"(filteredPeerCount$ | async) ? 'primary' : 'accent'\"\n matBadgeOverlap=\"false\"\n matBadgeColor=\"primary\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n >\n {{ 'NETWORK.PEER.SELECT_MODAL.TAB_NETWORK' | translate }}\n </ion-label>\n </ng-template>\n <ion-list>\n <ion-list-header>\n <ion-label class=\"ion-text-wrap ion-padding-end\">\n <p [innerHTML]=\"'NETWORK.PEER.SELECT_MODAL.NETWORK_HELP' | translate\"></p>\n </ion-label>\n </ion-list-header>\n\n @for (peer of filteredPeers$ | async; track $index) {\n <ion-item\n (click)=\"selectPeer(peer)\"\n @fadeInAnimation\n [class.selected]=\"selectedPeer && selectedPeer === peer.url\"\n detail\n matRipple\n tappable\n >\n <!-- Peer is UP -->\n @if (peer.reachable) {\n <!-- icon -->\n @if (peer.favicon != 'skip') {\n <ion-avatar slot=\"start\">\n <ion-img [src]=\"peer.favicon || peer.url + '/api/favicon'\" (ionError)=\"clearLogo(peer)\"></ion-img>\n <ion-icon name=\"server\" class=\"icon-secondary\" style=\"top: 12px; left: 44px\" color=\"dark\"></ion-icon>\n </ion-avatar>\n } @else {\n <ion-icon slot=\"start\" name=\"server\" class=\"ion-icon-avatar\" color=\"dark\"></ion-icon>\n }\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <ion-label class=\"ion-text-wrap\">\n <ion-text>\n @let url = peer.hostAndPort + peer.path;\n <h3 [innerHTML]=\"url | highlight: searchText\"></h3>\n </ion-text>\n <ion-text color=\"primary\">\n <h4 [innerHTML]=\"peer.label | highlight: searchText\"></h4>\n </ion-text>\n </ion-label>\n </ion-col>\n <ion-col size=\"12\" size-sm=\"4\">\n <ion-label class=\"ion-text-wrap ion-text-sm-center\" color=\"medium\">\n <h4>\n <small>{{ peer.softwareName }} </small>\n <br class=\"hidden-xxs hidden-xs\" />\n <!-- Compatible -->\n @if (!peerMinVersion || isCompatible(peer)) {\n <small>v{{ peer.softwareVersion }}</small>\n } @else {\n <!-- Incompatible -->\n <ion-text\n color=\"danger\"\n [matTooltip]=\"\n 'NETWORK.PEER.SELECT_MODAL.NOT_COMPATIBLE_HELP' | translate: { version: peerMinVersion }\n \"\n >\n <small class=\"ion-color-danger\">\n <mat-icon>warning</mat-icon>\n v{{ peer.softwareVersion }}\n </small>\n </ion-text>\n }\n </h4>\n </ion-label>\n </ion-col>\n </ion-row>\n </ion-grid>\n } @else {\n <!-- Peer is DOWN -->\n <ion-icon slot=\"start\" name=\"server\" class=\"disabled ion-icon-avatar\"></ion-icon>\n\n <ion-label class=\"ion-text-wrap\">\n <ion-text color=\"medium\">\n <h3>{{ peer.hostAndPort }}{{ peer.path }}</h3>\n </ion-text>\n <ion-text color=\"danger\">\n <h4>\n <small>\n <ion-icon size=\"small\" name=\"close-circle\"></ion-icon>\n </small>\n <span translate>NETWORK.PEER.OFFLINE</span>\n </h4>\n </ion-text>\n </ion-label>\n }\n </ion-item>\n }\n\n <!-- no result -->\n @if ((filteredPeerCount$ | async) === 0) {\n <ion-item>\n <ion-text color=\"danger\" class=\"text-italic\" translate>COMMON.NO_RESULT</ion-text>\n </ion-item>\n }\n </ion-list>\n </mat-tab>\n\n <!-- Select by features -->\n <mat-tab [disabled]=\"!enableSelectPeerByFeature\">\n <ng-template mat-tab-label>\n <ion-label\n [matBadge]=\"filteredFeaturesCount$ | async | badgeNumber\"\n [matBadgeHidden]=\"filteredFeaturesCount$ | async | isNil\"\n [matBadgeColor]=\"(filteredFeaturesCount$ | async) ? 'primary' : 'accent'\"\n matBadgeOverlap=\"false\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n >\n {{ 'NETWORK.PEER.SELECT_MODAL.TAB_FEATURES' | translate }}\n </ion-label>\n </ng-template>\n <ion-list>\n <ion-list-header>\n <ion-label class=\"ion-text-wrap ion-padding-end\">\n <p [innerHTML]=\"'NETWORK.PEER.SELECT_MODAL.FEATURES_HELP' | translate\"></p>\n </ion-label>\n </ion-list-header>\n\n @for (peer of filteredPeersByFeatures$ | async; track $index) {\n @let peerUrl = peer.hostAndPort + peer.path;\n <!-- Peer is UP -->\n @if (peer.reachable && peer.features | isNotEmptyArray) {\n @let collapsed = collapsedPeers[peerUrl];\n\n <ion-item-divider (click)=\"togglePeerFeatures(peerUrl)\" tappable @fadeInAnimation>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <ion-label>\n <h4>\n <ion-icon name=\"server\" color=\"medium\"></ion-icon>\n {{ peer.hostAndPort }}{{ peer.path }}\n </h4>\n @if (peerMinVersion && !isCompatible(peer)) {\n <ion-text\n color=\"danger\"\n [matTooltip]=\"\n 'NETWORK.PEER.SELECT_MODAL.NOT_COMPATIBLE_HELP' | translate: { version: peerMinVersion }\n \"\n >\n <h4 class=\"ion-color-danger\">\n <small>\n <mat-icon>warning</mat-icon>\n v{{ peer.softwareVersion }}\n </small>\n </h4>\n </ion-text>\n }\n </ion-label>\n </ion-col>\n <ion-col size=\"4\" class=\"ion-text-end\">\n <ion-label class=\"text-italic\">\n <h4>({{ 'COMMON.RESULT_COUNT' | translate: { count: peer.features.length } }})</h4>\n </ion-label>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <mat-icon slot=\"end\">\n @if (collapsed) {\n {{ mobile ? 'arrow_drop_down' : 'keyboard_arrow_down' }}\n } @else {\n {{ mobile ? 'arrow_drop_up' : 'keyboard_arrow_up' }}\n }\n </mat-icon>\n </ion-item-divider>\n\n @if (!collapsed) {\n @for (feature of peer.features; track feature.label) {\n <ion-item (click)=\"selectPeer(peer)\" tappable matRipple detail @fadeInAnimation>\n <!-- icon -->\n @if (feature.logo && feature.logo != 'skip') {\n <ion-avatar slot=\"start\">\n <ion-img [src]=\"feature.logo\" (ionError)=\"clearLogo(feature)\"></ion-img>\n </ion-avatar>\n } @else if (peer.favicon != 'skip') {\n <ion-avatar slot=\"start\">\n <ion-img [src]=\"peer.favicon || peer.url + '/api/favicon'\" (ionError)=\"clearLogo(peer)\"></ion-img>\n <ion-icon\n name=\"contract\"\n class=\"icon-secondary\"\n style=\"top: 12px; left: 44px\"\n color=\"dark\"\n ></ion-icon>\n </ion-avatar>\n } @else {\n <ion-icon slot=\"start\" name=\"contract\" class=\"ion-icon-avatar\" color=\"dark\"></ion-icon>\n }\n\n <ion-label class=\"ion-text-wrap\">\n <ion-text color=\"primary\">\n <h3 [innerHTML]=\"feature | referentialToString | highlight: searchText\"></h3>\n </ion-text>\n <ion-text>\n <p [innerHTML]=\"feature.description | highlight: searchText\"></p>\n </ion-text>\n </ion-label>\n </ion-item>\n }\n }\n }\n }\n\n <!-- no result -->\n @if ((filteredFeaturesCount$ | async) === 0) {\n <ion-item>\n <ion-text color=\"danger\" class=\"text-italic\" translate>COMMON.NO_RESULT</ion-text>\n </ion-item>\n }\n </ion-list>\n </mat-tab>\n </mat-tab-group>\n</ion-content>\n\n@if ((canCancel && !mobile) || showSetManuallyButton) {\n <ion-footer>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding ion-text-nowrap\">\n <ion-col></ion-col>\n\n <!-- buttons -->\n @if (showSetManuallyButton) {\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" (click)=\"clickSetManually($event)\">\n <ion-label translate>NETWORK.PEER.SELECT_MODAL.BTN_SET_MANUALLY</ion-label>\n </ion-button>\n </ion-col>\n }\n\n @if (canCancel) {\n <ion-col size=\"auto\" hidden-xs hidden-sm hidden-mobile>\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"cancel()\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n </ion-col>\n }\n </ion-row>\n </ion-toolbar>\n </ion-footer>\n}\n", styles: [".mat-mdc-tab-group{height:100%}.mat-mdc-tab-group .mat-tab-body-wrapper{height:calc(100% - var(--mat-tab-header-height))}ion-item-divider .ion-icon-avatar,ion-item .ion-icon-avatar{-webkit-margin-end:16px;margin-inline-end:16px;font-size:40px;width:40px;height:40px}ion-item-divider .ion-icon-avatar.disabled,ion-item .ion-icon-avatar.disabled{color:rgba(var(--ion-color-medium-rgb),.7)}ion-item-divider h4 ion-icon,ion-item-divider h4 mat-icon,ion-item h4 ion-icon,ion-item h4 mat-icon{height:14px;width:14px;font-size:14px;line-height:14px}ion-item-divider h4 small ion-icon,ion-item-divider h4 small mat-icon,ion-item h4 small ion-icon,ion-item h4 small mat-icon{height:12px;width:12px;font-size:12px;line-height:12px}ion-item-divider.selected,ion-item.selected{--ion-color-base: var(--ion-color-secondary100-contrast) !important;--ion-item-background: var(--ion-color-secondary100)}\n"] }]
|
|
311
|
-
}], ctorParameters: () => [{ type: i1.ModalController }, { type: i1.PopoverController }, { type: i2.TranslateService }, { type: i3.HttpClient }, { type: i0.ChangeDetectorRef }, { type: i16.Environment, decorators: [{
|
|
312
|
-
type: Inject,
|
|
313
|
-
args: [ENVIRONMENT]
|
|
314
|
-
}] }, { type: undefined, decorators: [{
|
|
315
|
-
type: Optional
|
|
316
|
-
}, {
|
|
317
|
-
type: Inject,
|
|
318
|
-
args: [APP_LOGGING_SERVICE]
|
|
319
|
-
}] }], propDecorators: { selectedTabIndex: [{
|
|
320
|
-
type: Input,
|
|
321
|
-
args: [{ transform: numberAttribute }]
|
|
322
|
-
}], selectedPeer: [{
|
|
323
|
-
type: Input
|
|
324
|
-
}], peerFilter: [{
|
|
325
|
-
type: Input
|
|
326
|
-
}], title: [{
|
|
327
|
-
type: Input
|
|
328
|
-
}], canCancel: [{
|
|
329
|
-
type: Input,
|
|
330
|
-
args: [{ transform: booleanAttribute }]
|
|
331
|
-
}], allowSelectDownPeer: [{
|
|
332
|
-
type: Input,
|
|
333
|
-
args: [{ transform: booleanAttribute }]
|
|
334
|
-
}], showSetManuallyButton: [{
|
|
335
|
-
type: Input,
|
|
336
|
-
args: [{ transform: booleanAttribute }]
|
|
337
|
-
}], showSearchBar: [{
|
|
338
|
-
type: Input,
|
|
339
|
-
args: [{ transform: booleanAttribute }]
|
|
340
|
-
}], tabGroupAnimationDuration: [{
|
|
341
|
-
type: Input
|
|
342
|
-
}], onRefresh: [{
|
|
343
|
-
type: Input
|
|
344
|
-
}], defaultPeers: [{
|
|
345
|
-
type: Input
|
|
346
|
-
}], searchbar: [{
|
|
347
|
-
type: ViewChild,
|
|
348
|
-
args: ['searchbar', { static: true }]
|
|
349
|
-
}] } });
|
|
350
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXBlZXIubW9kYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvcGVlci9zZWxlY3QtcGVlci5tb2RhbC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9wZWVyL3NlbGVjdC1wZWVyLm1vZGFsLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGdCQUFnQixFQUNoQix1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLGVBQWUsRUFFZixRQUFRLEVBQ1IsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUU1RSxPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBZSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsV0FBVyxFQUFzQixNQUFNLDZDQUE2QyxDQUFDO0FBRTlGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7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QWhDRSxnQkFBZ0I7c0JBQTFELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQVE1QixZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNrQyxTQUFTO3NCQUFoRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLG1CQUFtQjtzQkFBMUQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxxQkFBcUI7c0JBQTVELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsYUFBYTtzQkFBcEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDN0IseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRU8sWUFBWTtzQkFBeEIsS0FBSztnQkFJb0MsU0FBUztzQkFBbEQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgbnVtYmVyQXR0cmlidXRlLFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW9uU2VhcmNoYmFyLCBNb2RhbENvbnRyb2xsZXIsIFBvcG92ZXJDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgUGVlciB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL3BlZXIubW9kZWwnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmYWRlSW5BbmltYXRpb24gfSBmcm9tICcuLi8uLi9zaGFyZWQvbWF0ZXJpYWwvbWF0ZXJpYWwuYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgTmV0d29ya1V0aWxzLCBOb2RlSW5mbyB9IGZyb20gJy4uL3NlcnZpY2VzL25ldHdvcmsudXRpbHMnO1xuaW1wb3J0IHsgVmVyc2lvblV0aWxzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3ZlcnNpb24vdmVyc2lvbnMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQsIEVOVklST05NRU5UIH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IFRleHRQb3BvdmVyLCBUZXh0UG9wb3Zlck9wdGlvbnMgfSBmcm9tICcuLi9mb3JtL3RleHQtcG9wb3Zlci90ZXh0LXBvcG92ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3BsYXRmb3Jtcyc7XG5pbXBvcnQgeyBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUEVFUl9VUkxfUkVHRVhQIH0gZnJvbSAnLi4vc2VydmljZXMvbmV0d29yay5zZXJ2aWNlJztcbmltcG9ydCB7IEFQUF9MT0dHSU5HX1NFUlZJQ0UgfSBmcm9tICcuLi8uLi9zaGFyZWQvbG9nZ2luZy9sb2dnaW5nLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgSUxvZ2dlciwgSUxvZ2dpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xvZ2dpbmcvbG9nZ2VyLm1vZGVsJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVudGl0eVV0aWxzIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IFJ4U3RhdGUgfSBmcm9tICdAcngtYW5ndWxhci9zdGF0ZSc7XG5pbXBvcnQgeyBzdWdnZXN0RnJvbUFycmF5IH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzJztcbmltcG9ydCB7IGlzTmlsT3JCbGFuaywgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgTm9kZUZlYXR1cmUgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9ub2RlLWZlYXR1cmUubW9kZWwnO1xuaW1wb3J0IHsgRmlsdGVyRm4gfSBmcm9tICcuLi8uLi9zaGFyZWQvdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTZWxlY3RQZWVyTW9kYWxPcHRpb25zIHtcbiAgY2FuQ2FuY2VsOiBib29sZWFuO1xuICBhbGxvd1NlbGVjdERvd25QZWVyOiBib29sZWFuO1xuICBvblJlZnJlc2g6IEV2ZW50RW1pdHRlcjxFdmVudD47XG4gIHNob3dTZXRNYW51YWxseUJ1dHRvbjogYm9vbGVhbjtcbiAgc2VsZWN0ZWRQZWVyPzogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbiAgZGVmYXVsdFBlZXJzOiBQZWVyW107XG4gIC8qKlxuICAgKiBBbGxvdyB0byBmaWx0ZXIgc29tZSBwZWVycyAoZS5nLiB0byBleGNsdWRlIHRoZSBjdXJyZW50IHBlZXIpXG4gICAqL1xuICBwZWVyRmlsdGVyPzogRmlsdGVyRm48UGVlcj47XG4gIHNob3dTZWFyY2hCYXI/OiBib29sZWFuO1xuICBjc3NDbGFzcz86IHN0cmluZyB8IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTZWxlY3RQZWVyTW9kYWxTdGF0ZSB7XG4gIGRlZmF1bHRQZWVyczogUGVlcltdO1xuICBwZWVyczogUGVlcltdO1xuICBmaWx0ZXJlZFBlZXJzOiBQZWVyW107XG4gIGZpbHRlcmVkUGVlcnNCeUZlYXR1cmVzOiBQZWVyW107XG4gIGZpbHRlcmVkUGVlckNvdW50OiBudW1iZXI7XG4gIGZpbHRlcmVkRmVhdHVyZXNDb3VudDogbnVtYmVyO1xuICBzZWFyY2hUZXh0OiBzdHJpbmc7XG4gIHNlbGVjdGVkVGFiSW5kZXg6IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2VsZWN0LXBlZXItbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJ3NlbGVjdC1wZWVyLm1vZGFsLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3QtcGVlci5tb2RhbC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBhbmltYXRpb25zOiBbZmFkZUluQW5pbWF0aW9uXSxcbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0UGVlck1vZGFsIGV4dGVuZHMgUnhTdGF0ZTxJU2VsZWN0UGVlck1vZGFsU3RhdGU+IGltcGxlbWVudHMgT25EZXN0cm95LCBJU2VsZWN0UGVlck1vZGFsT3B0aW9ucyB7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyO1xuXG4gIHByb3RlY3RlZCBkZWZhdWx0UGVlcnMkID0gdGhpcy5zZWxlY3QoJ2RlZmF1bHRQZWVycycpO1xuICBwcm90ZWN0ZWQgcGVlcnMkID0gdGhpcy5zZWxlY3QoJ3BlZXJzJyk7XG4gIHByb3RlY3RlZCBmaWx0ZXJlZFBlZXJzJCA9IHRoaXMuc2VsZWN0KCdmaWx0ZXJlZFBlZXJzJyk7XG4gIHByb3RlY3RlZCBmaWx0ZXJlZFBlZXJzQnlGZWF0dXJlcyQgPSB0aGlzLnNlbGVjdCgnZmlsdGVyZWRQZWVyc0J5RmVhdHVyZXMnKTtcbiAgcHJvdGVjdGVkIGZpbHRlcmVkUGVlckNvdW50JCA9IHRoaXMuc2VsZWN0KCdmaWx0ZXJlZFBlZXJDb3VudCcpO1xuICBwcm90ZWN0ZWQgZmlsdGVyZWRGZWF0dXJlc0NvdW50JCA9IHRoaXMuc2VsZWN0KCdmaWx0ZXJlZEZlYXR1cmVzQ291bnQnKTtcblxuICBwcm90ZWN0ZWQgbG9hZGluZyA9IHRydWU7XG4gIHByb3RlY3RlZCBtb2JpbGU6IGJvb2xlYW47XG4gIHByb3RlY3RlZCBwZWVyTWluVmVyc2lvbjogc3RyaW5nO1xuICBwcm90ZWN0ZWQgcGVlckRlZmF1bHRQcmVmaXg6IHN0cmluZztcbiAgcHJvdGVjdGVkIGVuYWJsZVNlbGVjdFBlZXJCeUZlYXR1cmU6IGJvb2xlYW47XG4gIHByb3RlY3RlZCBjb2xsYXBzZWRQZWVyczogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcblxuICBzZXQgcGVlcnModmFsdWU6IFBlZXJbXSkge1xuICAgIHRoaXMuc2V0KCdwZWVycycsICgpID0+IHZhbHVlKTtcbiAgfVxuXG4gIGdldCBwZWVycygpOiBQZWVyW10ge1xuICAgIHJldHVybiB0aGlzLmdldCgncGVlcnMnKTtcbiAgfVxuXG4gIHNldCBzZWFyY2hUZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldCgnc2VhcmNoVGV4dCcsICgpID0+IHZhbHVlKTtcbiAgfVxuXG4gIGdldCBzZWFyY2hUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCdzZWFyY2hUZXh0Jyk7XG4gIH1cblxuICBzZXQgZmlsdGVyZWRQZWVycyh2YWx1ZTogUGVlcltdKSB7XG4gICAgdGhpcy5zZXQoJ2ZpbHRlcmVkUGVlcnMnLCAoKSA9PiB2YWx1ZSk7XG4gIH1cblxuICBnZXQgZmlsdGVyZWRQZWVycygpOiBQZWVyW10ge1xuICAgIHJldHVybiB0aGlzLmdldCgnZmlsdGVyZWRQZWVycycpO1xuICB9XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgc2V0IHNlbGVjdGVkVGFiSW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuc2V0KCdzZWxlY3RlZFRhYkluZGV4JywgKCkgPT4gdmFsdWUpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkVGFiSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoJ3NlbGVjdGVkVGFiSW5kZXgnKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNlbGVjdGVkUGVlcjogc3RyaW5nO1xuICBASW5wdXQoKSBwZWVyRmlsdGVyOiBGaWx0ZXJGbjxQZWVyPjtcbiAgQElucHV0KCkgdGl0bGUgPSAnTkVUV09SSy5QRUVSLlNFTEVDVF9NT0RBTC5USVRMRSc7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjYW5DYW5jZWwgPSB0cnVlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgYWxsb3dTZWxlY3REb3duUGVlciA9IHRydWU7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93U2V0TWFudWFsbHlCdXR0b24gPSB0cnVlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd1NlYXJjaEJhcjogYm9vbGVhbjtcbiAgQElucHV0KCkgdGFiR3JvdXBBbmltYXRpb25EdXJhdGlvbjogJzIwMG1zJztcblxuICBASW5wdXQoKSBvblJlZnJlc2ggPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuXG4gIEBJbnB1dCgpIHNldCBkZWZhdWx0UGVlcnModmFsdWU6IFBlZXJbXSkge1xuICAgIHRoaXMuc2V0KCdkZWZhdWx0UGVlcnMnLCAoKSA9PiB2YWx1ZSk7XG4gIH1cblxuICBAVmlld0NoaWxkKCdzZWFyY2hiYXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBzZWFyY2hiYXI6IElvblNlYXJjaGJhcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxuICAgIHByaXZhdGUgcG9wb3ZlckNvbnRyb2xsZXI6IFBvcG92ZXJDb250cm9sbGVyLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0xPR0dJTkdfU0VSVklDRSkgcHJvdGVjdGVkIGxvZ2dpbmdTZXJ2aWNlPzogSUxvZ2dpbmdTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zZXQoeyBzZWFyY2hUZXh0OiBudWxsLCBzZWxlY3RlZFRhYkluZGV4OiAwIH0pO1xuICAgIHRoaXMubW9iaWxlID0gaXNNb2JpbGUod2luZG93KTtcbiAgICB0aGlzLl9sb2dnZXIgPSBsb2dnaW5nU2VydmljZT8uZ2V0TG9nZ2VyKCduZXR3b3JrLW1vZGFsJyk7XG4gICAgdGhpcy5wZWVyTWluVmVyc2lvbiA9IGVudmlyb25tZW50LnBlZXJNaW5WZXJzaW9uO1xuICAgIHRoaXMucGVlckRlZmF1bHRQcmVmaXggPSBlbnZpcm9ubWVudC5wZWVyRGVmYXVsdFByZWZpeCB8fCAnaHR0cHM6Ly8nO1xuICAgIHRoaXMuZW5hYmxlU2VsZWN0UGVlckJ5RmVhdHVyZSA9IGVudmlyb25tZW50LmVuYWJsZVNlbGVjdFBlZXJCeUZlYXR1cmUgfHwgZmFsc2U7XG4gICAgdGhpcy5zaG93U2VhcmNoQmFyID0gdGhpcy5lbmFibGVTZWxlY3RQZWVyQnlGZWF0dXJlOyAvLyBTaG93IHNlYXJjaCBiYXIgYnkgZGVmYXVsdCwgaWYgdHdvIHRhYnNcblxuICAgIC8vIFJlZnJlc2hpbmcgcGVlcnNcbiAgICB0aGlzLmhvbGQodGhpcy5kZWZhdWx0UGVlcnMkLCAocmVzKSA9PiB0aGlzLnJlZnJlc2hQZWVycyhyZXMpKTtcblxuICAgIC8vIFNlYXJjaCBvbiBob3N0XG4gICAgdGhpcy5jb25uZWN0KFxuICAgICAgJ2ZpbHRlcmVkUGVlcnMnLFxuICAgICAgdGhpcy5zZWxlY3QoWydwZWVycycsICdzZWFyY2hUZXh0J10sIChyZXMpID0+IHJlcykucGlwZShcbiAgICAgICAgbWFwKCh7IHBlZXJzLCBzZWFyY2hUZXh0IH0pID0+IHtcbiAgICAgICAgICBpZiAoaXNOaWxPckJsYW5rKHNlYXJjaFRleHQpKSByZXR1cm4gcGVlcnM7IC8vIEFsbFxuXG4gICAgICAgICAgY29uc29sZS5kZWJ1ZygnW3NlbGVjdC1wZWVyLW1vZGFsXSBTZWFyY2hpbmcgb24gaG9zdHM6ICcgKyBzZWFyY2hUZXh0KTtcbiAgICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHN1Z2dlc3RGcm9tQXJyYXkocGVlcnMsIHNlYXJjaFRleHQsIHtcbiAgICAgICAgICAgIGFueVNlYXJjaDogdHJ1ZSxcbiAgICAgICAgICAgIHNlYXJjaEF0dHJpYnV0ZXM6IFsnbGFiZWwnLCAnaG9zdEFuZFBvcnQnXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMuY29ubmVjdCgnZmlsdGVyZWRQZWVyQ291bnQnLCB0aGlzLmZpbHRlcmVkUGVlcnMkLnBpcGUobWFwKChwZWVycykgPT4gcGVlcnM/Lmxlbmd0aCA/PyAwKSkpO1xuXG4gICAgLy8gU2VhcmNoIG9uIGZlYXR1cmVzXG4gICAgaWYgKHRoaXMuZW5hYmxlU2VsZWN0UGVlckJ5RmVhdHVyZSkge1xuICAgICAgdGhpcy5jb25uZWN0KFxuICAgICAgICAnZmlsdGVyZWRQZWVyc0J5RmVhdHVyZXMnLFxuICAgICAgICB0aGlzLnNlbGVjdChbJ3BlZXJzJywgJ3NlYXJjaFRleHQnXSwgKHJlcykgPT4gcmVzKS5waXBlKFxuICAgICAgICAgIG1hcCgoeyBwZWVycywgc2VhcmNoVGV4dCB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNOaWxPckJsYW5rKHNlYXJjaFRleHQpKSB7XG4gICAgICAgICAgICAgIHJldHVybiAocGVlcnMgfHwgW10pLmZpbHRlcigocCkgPT4gaXNOb3RFbXB0eUFycmF5KHA/LmZlYXR1cmVzKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1tzZWxlY3QtcGVlci1tb2RhbF0gU2VhcmNoaW5nIG9uIGZlYXR1cmVzOiAnICsgc2VhcmNoVGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gcGVlcnNcbiAgICAgICAgICAgICAgLm1hcCgocGVlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogZmVhdHVyZXMgfSA9IHN1Z2dlc3RGcm9tQXJyYXkocGVlci5mZWF0dXJlcyB8fCBbXSwgc2VhcmNoVGV4dCwge1xuICAgICAgICAgICAgICAgICAgYW55U2VhcmNoOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgc2VhcmNoQXR0cmlidXRlczogWydsYWJlbCcsICduYW1lJywgJ2Rlc2NyaXB0aW9uJ10sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTm90RW1wdHlBcnJheShmZWF0dXJlcykpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUGVlciA9IHBlZXIuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgIGZpbHRlcmVkUGVlci5mZWF0dXJlcyA9IGZlYXR1cmVzO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkUGVlcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5maWx0ZXIoaXNOb3ROaWwpO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICB0aGlzLmNvbm5lY3QoJ2ZpbHRlcmVkRmVhdHVyZXNDb3VudCcsIHRoaXMuZmlsdGVyZWRQZWVyc0J5RmVhdHVyZXMkLnBpcGUobWFwKFBlZXIuY291bnRBbGxGZWF0dXJlcykpKTtcbiAgICB9XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5tb2RhbEN0cmwuZGlzbWlzcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHNlbGVjdFBlZXIocGVlcjogUGVlcikge1xuICAgIGlmICh0aGlzLmFsbG93U2VsZWN0RG93blBlZXIgfHwgKHBlZXIucmVhY2hhYmxlICYmIHRoaXMuaXNDb21wYXRpYmxlKHBlZXIpKSkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhgW3NlbGVjdC1wZWVyLW1vZGFsXSBTZWxlY3RlZCBwZWVyOiB7dXJsOiAnJHtwZWVyLnVybH0nfWApO1xuICAgICAgdGhpcy5zZWxlY3RlZFBlZXIgPSBwZWVyLnVybDtcbiAgICAgIHRoaXMubW9kYWxDdHJsLmRpc21pc3MocGVlcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdG9nZ2xlU2VhcmNoQmFyKCkge1xuICAgIHRoaXMuc2hvd1NlYXJjaEJhciA9ICF0aGlzLnNob3dTZWFyY2hCYXI7XG4gICAgaWYgKHRoaXMuc2hvd1NlYXJjaEJhciAmJiB0aGlzLnNlYXJjaGJhcikge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2VhcmNoYmFyLnNldEZvY3VzKCk7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9LCAzMDApO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVBlZXJGZWF0dXJlcyhwZWVyVXJsOiBzdHJpbmcpIHtcbiAgICBpZiAoIXBlZXJVcmwpIHJldHVybjtcbiAgICB0aGlzLmNvbGxhcHNlZFBlZXJzW3BlZXJVcmxdID0gaXNOb3ROaWwodGhpcy5jb2xsYXBzZWRQZWVyc1twZWVyVXJsXSkgPyAhdGhpcy5jb2xsYXBzZWRQZWVyc1twZWVyVXJsXSA6IHRydWU7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQ2hlY2sgdGhlIG1pbiBwb2QgdmVyc2lvbiwgZGVmaW5lZCBieSB0aGUgYXBwXG4gICAqXG4gICAqIEBwYXJhbSBwZWVyXG4gICAqL1xuICBpc0NvbXBhdGlibGUocGVlcjogUGVlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5wZWVyTWluVmVyc2lvbiB8fCAocGVlciAmJiBwZWVyLnNvZnR3YXJlVmVyc2lvbiAmJiBWZXJzaW9uVXRpbHMuaXNDb21wYXRpYmxlKHRoaXMucGVlck1pblZlcnNpb24sIHBlZXIuc29mdHdhcmVWZXJzaW9uKSk7XG4gIH1cblxuICByZWZyZXNoKGV2ZW50OiBFdmVudCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5vblJlZnJlc2guZW1pdChldmVudCk7XG4gIH1cblxuICBhc3luYyBjbGlja1NldE1hbnVhbGx5KGV2ZW50PzogRXZlbnQpIHtcbiAgICBjb25zdCBwZWVyVXJsID0gYXdhaXQgdGhpcy5vcGVuUGVlclVybFBvcG92ZXIoZXZlbnQpO1xuICAgIGlmIChwZWVyVXJsKSB7XG4gICAgICBjb25zdCBwZWVyID0gUGVlci5wYXJzZVVybChwZWVyVXJsKTtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaFBlZXIocGVlcik7XG4gICAgICB0aGlzLnNlbGVjdFBlZXIocGVlcik7XG4gICAgfVxuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cbiAgcHJvdGVjdGVkIGNsZWFyTG9nbyhwZWVyOiBQZWVyIHwgTm9kZUZlYXR1cmUpIHtcbiAgICBpZiAocGVlciBpbnN0YW5jZW9mIFBlZXIpIHtcbiAgICAgIHBlZXIuZmF2aWNvbiA9ICdza2lwJztcbiAgICB9IGVsc2Uge1xuICAgICAgcGVlci5sb2dvID0gJ3NraXAnO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2hQZWVycyhwZWVyczogUGVlcltdKSB7XG4gICAgcGVlcnMgPSBwZWVycyB8fCBbXTtcblxuICAgIGNvbnN0IGRhdGE6IFBlZXJbXSA9IFtdO1xuICAgIGNvbnN0IGpvYnMgPSBQcm9taXNlLmFsbChcbiAgICAgIHBlZXJzXG4gICAgICAgIC5maWx0ZXIoKHBlZXIpID0+ICEodHlwZW9mIHRoaXMucGVlckZpbHRlciA9PT0gJ2Z1bmN0aW9uJykgfHwgdGhpcy5wZWVyRmlsdGVyKHBlZXIpKVxuICAgICAgICAubWFwKGFzeW5jIChwZWVyKSA9PiB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoUGVlcihwZWVyKTtcblxuICAgICAgICAgIGlmICh0aGlzLl9zdWJzY3JpcHRpb24uY2xvc2VkKSByZXR1cm47IC8vIGNvbXBvbmVudCBkZXN0cm95ZWRcblxuICAgICAgICAgIGRhdGEucHVzaChwZWVyKTtcblxuICAgICAgICAgIC8vIFNvcnQgKGJ5IHJlYWNoYWJsZSwgdGhlbiBob3N0KVxuICAgICAgICAgIGRhdGEuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgaWYgKGEucmVhY2hhYmxlICYmICFiLnJlYWNoYWJsZSkgcmV0dXJuIC0xO1xuICAgICAgICAgICAgaWYgKCFhLnJlYWNoYWJsZSAmJiBiLnJlYWNoYWJsZSkgcmV0dXJuIDE7XG4gICAgICAgICAgICBpZiAoYS5ob3N0QW5kUG9ydCA8IGIuaG9zdEFuZFBvcnQpIHJldHVybiAtMTtcbiAgICAgICAgICAgIGlmIChhLmhvc3RBbmRQb3J0ID4gYi5ob3N0QW5kUG9ydCkgcmV0dXJuIDE7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRoaXMucGVlcnMgPSBkYXRhLnNsaWNlKCk7IC8vIENvcHkgdG8gZm9yY2UgdXBkYXRlXG5cbiAgICAgICAgICByZXR1cm4gcGVlcjtcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGpvYnM7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoIXRoaXMuX3N1YnNjcmlwdGlvbi5jbG9zZWQpIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICB9XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyByZWZyZXNoUGVlcihwZWVyOiBQZWVyKTogUHJvbWlzZTxQZWVyPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2F3YWl0IHNsZWVwKE1hdGgucmFuZG9tKCkgKiAxMDApO1xuXG4gICAgICBjb25zdCBzdW1tYXJ5OiBOb2RlSW5mbyA9IGF3YWl0IE5ldHdvcmtVdGlscy5nZXROb2RlSW5mbyh0aGlzLmh0dHAsIHBlZXIudXJsKTtcbiAgICAgIHBlZXIuc3RhdHVzID0gJ1VQJztcbiAgICAgIHBlZXIuc29mdHdhcmVOYW1lID0gc3VtbWFyeS5zb2Z0d2FyZU5hbWU7XG4gICAgICBwZWVyLnNvZnR3YXJlVmVyc2lvbiA9IHN1bW1hcnkuc29mdHdhcmVWZXJzaW9uO1xuICAgICAgcGVlci5sYWJlbCA9IHN1bW1hcnkubm9kZUxhYmVsO1xuICAgICAgcGVlci5uYW1lID0gc3VtbWFyeS5ub2RlTmFtZTtcbiAgICAgIHBlZXIuZmVhdHVyZXMgPSBzdW1tYXJ5LmZlYXR1cmVzPy5tYXAoTm9kZUZlYXR1cmUuZnJvbU9iamVjdCkgfHwgW107XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBJZiBtb2RhbCB3YXMgbm90IGNsb3NlZCAoZS5nLiByZXNwb25zZSBhcnJpdmVkIHRvbyBsYXRlID0+IGlnbm9yZSlcbiAgICAgIGlmICghdGhpcy5fc3Vic2NyaXB0aW9uLmNsb3NlZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBbc2VsZWN0LXBlZXJdIEVycm9yIHdoaWxlIGNhbGxpbmcgJyR7cGVlci51cmx9L2FwaS9ub2RlL2luZm8nOiAke2Vycj8ubWVzc2FnZSB8fCBlcnJ9YCwgZXJyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyPy5lcnJvcigncmVmcmVzaFBlZXInLCBgRXJyb3Igd2hpbGUgY2FsbGluZyAnJHtwZWVyLnVybH0vYXBpL25vZGUvaW5mbyc6ICR7ZXJyPy5tZXNzYWdlIHx8IEpTT04uc3RyaW5naWZ5KGVycil9YCk7XG4gICAgICB9XG4gICAgICBwZWVyLnN0YXR1cyA9ICdET1dOJztcbiAgICB9XG4gICAgcmV0dXJuIHBlZXI7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb3BlblBlZXJVcmxQb3BvdmVyKGV2ZW50OiBFdmVudCwgb3B0cz86IFBhcnRpYWw8VGV4dFBvcG92ZXJPcHRpb25zPikge1xuICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgdGhpcy5wb3BvdmVyQ29udHJvbGxlci5jcmVhdGUoe1xuICAgICAgY29tcG9uZW50OiBUZXh0UG9wb3ZlcixcbiAgICAgIGNvbXBvbmVudFByb3BzOiA8VGV4dFBvcG92ZXJPcHRpb25zPntcbiAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ1NFVFRJTkdTLlBFRVJfVVJMJyksXG4gICAgICAgIG11bHRpbGluZTogZmFsc2UsXG4gICAgICAgIGF1dG9mb2N1czogIXRoaXMubW9iaWxlLFxuICAgICAgICBhdXRvY29tcGxldGU6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0b3I6IFZhbGlkYXRvcnMucGF0dGVybihQRUVSX1VSTF9SRUdFWFApLFxuICAgICAgICBtYXhMZW5ndGg6IG51bGwsXG4gICAgICAgIHRleHQ6IHRoaXMuc2VsZWN0ZWRQZWVyIHx8IHRoaXMucGVlckRlZmF1bHRQcmVmaXgsXG4gICAgICAgIC4uLm9wdHMsXG4gICAgICB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiBmYWxzZSxcbiAgICAgIGtleWJvYXJkQ2xvc2U6IGZhbHNlLFxuICAgICAgZXZlbnQ6IG51bGwsIC8vIElNUE9SVEFOVDogbnVsbCBldmVudCB3aWxsIGNlbnRlciB0aGUgcG9wb3ZlciwgYW5kIHRoaXMgd2lsbCBmaXgga2V5Ym9hcmQgb3ZlcmxhcCBvbiBtb2JpbGVcbiAgICAgIHRyYW5zbHVjZW50OiB0cnVlLFxuICAgICAgY3NzQ2xhc3M6ICdwb3BvdmVyLWxhcmdlJyxcbiAgICB9KTtcblxuICAgIGF3YWl0IG1vZGFsLnByZXNlbnQoKTtcbiAgICBjb25zdCB7IGRhdGEsIHJvbGUgfSA9IGF3YWl0IG1vZGFsLm9uRGlkRGlzbWlzcygpO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnUG9wb3ZlciByZXN1bHQ6ICcsIGRhdGEpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZUZpbHRlcmVkUGVlcihldmVudDogYW55KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuXG4gICAgY29uc3QgdGVzdCA9IHRoaXMuZmlsdGVyZWRQZWVycyQucGlwZShcbiAgICAgIG1hcCgocGVlcnMpID0+IHBlZXJzLmZpbHRlcihFbnRpdHlVdGlscy5zZWFyY2hUZXh0RmlsdGVyKFsnZmVhdHVyZXMubGFiZWwnLCAnZmVhdHVyZXMubmFtZScsICdmZWF0dXJlcy5kZXNjcmlwdGlvbiddLCB2YWx1ZSkpKVxuICAgICk7XG5cbiAgICBjb25zb2xlLmxvZyh0ZXN0KTtcbiAgICAvLyAoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iLCI8aW9uLWhlYWRlcj5cbiAgPGlvbi10b29sYmFyIGNvbG9yPVwibGlnaHRcIiBzdHlsZT1cInotaW5kZXg6IDkwMFwiPlxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwic3RhcnRcIj5cbiAgICAgIEBpZiAoY2FuQ2FuY2VsKSB7XG4gICAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJjYW5jZWwoKVwiIHZpc2libGUtbW9iaWxlIHZpc2libGUtc20gdmlzaWJsZS14cz5cbiAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImFycm93LWJhY2tcIiBzbG90PVwiaWNvbi1vbmx5XCI+PC9pb24taWNvbj5cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgfVxuICAgIDwvaW9uLWJ1dHRvbnM+XG5cbiAgICA8aW9uLXRpdGxlPlxuICAgICAge3sgdGl0bGUgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2lvbi10aXRsZT5cblxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICA8IS0tIGxvYWRlciAtLT5cbiAgICAgIEBpZiAobG9hZGluZykge1xuICAgICAgICA8aW9uLXNwaW5uZXI+PC9pb24tc3Bpbm5lcj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8IS0tIHJlZnJlc2ggYnV0dG9uIC0tPlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9XCJyZWZyZXNoKCRldmVudClcIlxuICAgICAgICAgICpuZ0lmPVwib25SZWZyZXNoLm9ic2VydmVkXCJcbiAgICAgICAgICBbbWF0VG9vbHRpcF09XCInQ09NTU9OLkJUTl9SRUZSRVNIJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bWF0LWljb24gc2xvdD1cImljb24tb25seVwiPnJlZnJlc2g8L21hdC1pY29uPlxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICB9XG4gICAgICA8IS0tIHNlYXJjaCBidXR0b24gLS0+XG4gICAgICBAaWYgKCFzaG93U2VhcmNoQmFyKSB7XG4gICAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJ0b2dnbGVTZWFyY2hCYXIoKVwiPlxuICAgICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cInNlYXJjaFwiPjwvaW9uLWljb24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIH1cbiAgICA8L2lvbi1idXR0b25zPlxuICA8L2lvbi10b29sYmFyPlxuXG4gIDwhLS0gc2VhcmNoIGJhciAtLT5cbiAgPGlvbi10b29sYmFyICpuZ0lmPVwic2hvd1NlYXJjaEJhclwiPlxuICAgIDxpb24tc2VhcmNoYmFyXG4gICAgICAjc2VhcmNoYmFyXG4gICAgICBhbmltYXRlZFxuICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICBbY2xhc3MuY2RrLXZpc3VhbGx5LWhpZGRlbl09XCIhc2hvd1NlYXJjaEJhclwiXG4gICAgICBzaG93LWNsZWFyLWJ1dHRvbj1cImFsd2F5c1wiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiJ0NPTU1PTi5CVE5fU0VBUkNIJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbY2FuY2VsQnV0dG9uVGV4dF09XCInQ09NTU9OLkJUTl9DQU5DRUwnIHwgdHJhbnNsYXRlXCJcbiAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiXG4gICAgICAoaW9uQ2FuY2VsKT1cInRvZ2dsZVNlYXJjaEJhcigpXCJcbiAgICA+PC9pb24tc2VhcmNoYmFyPlxuICA8L2lvbi10b29sYmFyPlxuPC9pb24taGVhZGVyPlxuXG48aW9uLWNvbnRlbnQ+XG4gIDxtYXQtdGFiLWdyb3VwXG4gICAgI3RhYkdyb3VwXG4gICAgWyhzZWxlY3RlZEluZGV4KV09XCJzZWxlY3RlZFRhYkluZGV4XCJcbiAgICBjbGFzcz1cIm1hdC1tZGMtdGFiLWRpc2FibGVkLWhpZGRlblwiXG4gICAgW2NsYXNzLm1hdC1tZGMtdGFiLWdyb3VwLWhlYWRlci1oaWRkZW5dPVwiIWVuYWJsZVNlbGVjdFBlZXJCeUZlYXR1cmVcIlxuICAgIFtkeW5hbWljSGVpZ2h0XT1cImZhbHNlXCJcbiAgICBbbWF0LXN0cmV0Y2gtdGFic109XCJtb2JpbGVcIlxuICAgIFthbmltYXRpb25EdXJhdGlvbl09XCJtb2JpbGUgPyB0YWJHcm91cEFuaW1hdGlvbkR1cmF0aW9uIDogJzBzJ1wiXG4gID5cbiAgICA8bWF0LXRhYj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBtYXQtdGFiLWxhYmVsPlxuICAgICAgICA8aW9uLWxhYmVsXG4gICAgICAgICAgW21hdEJhZGdlXT1cImZpbHRlcmVkUGVlckNvdW50JCB8IGFzeW5jIHwgYmFkZ2VOdW1iZXJcIlxuICAgICAgICAgIFttYXRCYWRnZUhpZGRlbl09XCJmaWx0ZXJlZFBlZXJDb3VudCQgfCBhc3luYyB8IGlzTmlsXCJcbiAgICAgICAgICBbbWF0QmFkZ2VDb2xvcl09XCIoZmlsdGVyZWRQZWVyQ291bnQkIHwgYXN5bmMpID8gJ3ByaW1hcnknIDogJ2FjY2VudCdcIlxuICAgICAgICAgIG1hdEJhZGdlT3ZlcmxhcD1cImZhbHNlXCJcbiAgICAgICAgICBtYXRCYWRnZUNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgbWF0QmFkZ2VTaXplPVwic21hbGxcIlxuICAgICAgICAgIG1hdEJhZGdlUG9zaXRpb249XCJhYm92ZSBhZnRlclwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyAnTkVUV09SSy5QRUVSLlNFTEVDVF9NT0RBTC5UQUJfTkVUV09SSycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGlvbi1saXN0PlxuICAgICAgICA8aW9uLWxpc3QtaGVhZGVyPlxuICAgICAgICAgIDxpb24tbGFiZWwgY2xhc3M9XCJpb24tdGV4dC13cmFwIGlvbi1wYWRkaW5nLWVuZFwiPlxuICAgICAgICAgICAgPHAgW2lubmVySFRNTF09XCInTkVUV09SSy5QRUVSLlNFTEVDVF9NT0RBTC5ORVRXT1JLX0hFTFAnIHwgdHJhbnNsYXRlXCI+PC9wPlxuICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICA8L2lvbi1saXN0LWhlYWRlcj5cblxuICAgICAgICBAZm9yIChwZWVyIG9mIGZpbHRlcmVkUGVlcnMkIHwgYXN5bmM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgIDxpb24taXRlbVxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFBlZXIocGVlcilcIlxuICAgICAgICAgICAgQGZhZGVJbkFuaW1hdGlvblxuICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cInNlbGVjdGVkUGVlciAmJiBzZWxlY3RlZFBlZXIgPT09IHBlZXIudXJsXCJcbiAgICAgICAgICAgIGRldGFpbFxuICAgICAgICAgICAgbWF0UmlwcGxlXG4gICAgICAgICAgICB0YXBwYWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDwhLS0gUGVlciBpcyBVUCAtLT5cbiAgICAgICAgICAgIEBpZiAocGVlci5yZWFjaGFibGUpIHtcbiAgICAgICAgICAgICAgPCEtLSBpY29uIC0tPlxuICAgICAgICAgICAgICBAaWYgKHBlZXIuZmF2aWNvbiAhPSAnc2tpcCcpIHtcbiAgICAgICAgICAgICAgICA8aW9uLWF2YXRhciBzbG90PVwic3RhcnRcIj5cbiAgICAgICAgICAgICAgICAgIDxpb24taW1nIFtzcmNdPVwicGVlci5mYXZpY29uIHx8IHBlZXIudXJsICsgJy9hcGkvZmF2aWNvbidcIiAoaW9uRXJyb3IpPVwiY2xlYXJMb2dvKHBlZXIpXCI+PC9pb24taW1nPlxuICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJzZXJ2ZXJcIiBjbGFzcz1cImljb24tc2Vjb25kYXJ5XCIgc3R5bGU9XCJ0b3A6IDEycHg7IGxlZnQ6IDQ0cHhcIiBjb2xvcj1cImRhcmtcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICAgIDwvaW9uLWF2YXRhcj5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJzZXJ2ZXJcIiBjbGFzcz1cImlvbi1pY29uLWF2YXRhclwiIGNvbG9yPVwiZGFya1wiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICA8aW9uLXJvdz5cbiAgICAgICAgICAgICAgICAgIDxpb24tY29sPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNsYXNzPVwiaW9uLXRleHQtd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBsZXQgdXJsID0gcGVlci5ob3N0QW5kUG9ydCArIHBlZXIucGF0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBbaW5uZXJIVE1MXT1cInVybCB8IGhpZ2hsaWdodDogc2VhcmNoVGV4dFwiPjwvaDM+XG4gICAgICAgICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDQgW2lubmVySFRNTF09XCJwZWVyLmxhYmVsIHwgaGlnaGxpZ2h0OiBzZWFyY2hUZXh0XCI+PC9oND5cbiAgICAgICAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCIxMlwiIHNpemUtc209XCI0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY2xhc3M9XCJpb24tdGV4dC13cmFwIGlvbi10ZXh0LXNtLWNlbnRlclwiIGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGg0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsPnt7IHBlZXIuc29mdHdhcmVOYW1lIH19Jm5ic3A7PC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiciBjbGFzcz1cImhpZGRlbi14eHMgaGlkZGVuLXhzXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ29tcGF0aWJsZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIXBlZXJNaW5WZXJzaW9uIHx8IGlzQ29tcGF0aWJsZShwZWVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+dnt7IHBlZXIuc29mdHdhcmVWZXJzaW9uIH19PC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEluY29tcGF0aWJsZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJkYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05FVFdPUksuUEVFUi5TRUxFQ1RfTU9EQUwuTk9UX0NPTVBBVElCTEVfSEVMUCcgfCB0cmFuc2xhdGU6IHsgdmVyc2lvbjogcGVlck1pblZlcnNpb24gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpb24tY29sb3ItZGFuZ2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+d2FybmluZzwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2e3sgcGVlci5zb2Z0d2FyZVZlcnNpb24gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICAgICAgPC9pb24tZ3JpZD5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8IS0tIFBlZXIgaXMgRE9XTiAtLT5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJzZXJ2ZXJcIiBjbGFzcz1cImRpc2FibGVkIGlvbi1pY29uLWF2YXRhclwiPjwvaW9uLWljb24+XG5cbiAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjbGFzcz1cImlvbi10ZXh0LXdyYXBcIj5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxoMz57eyBwZWVyLmhvc3RBbmRQb3J0IH19e3sgcGVlci5wYXRoIH19PC9oMz5cbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cImRhbmdlclwiPlxuICAgICAgICAgICAgICAgICAgPGg0PlxuICAgICAgICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIHNpemU9XCJzbWFsbFwiIG5hbWU9XCJjbG9zZS1jaXJjbGVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+TkVUV09SSy5QRUVSLk9GRkxJTkU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2g0PlxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIG5vIHJlc3VsdCAtLT5cbiAgICAgICAgQGlmICgoZmlsdGVyZWRQZWVyQ291bnQkIHwgYXN5bmMpID09PSAwKSB7XG4gICAgICAgICAgPGlvbi1pdGVtPlxuICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFuZ2VyXCIgY2xhc3M9XCJ0ZXh0LWl0YWxpY1wiIHRyYW5zbGF0ZT5DT01NT04uTk9fUkVTVUxUPC9pb24tdGV4dD5cbiAgICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICB9XG4gICAgICA8L2lvbi1saXN0PlxuICAgIDwvbWF0LXRhYj5cblxuICAgIDwhLS0gU2VsZWN0IGJ5IGZlYXR1cmVzIC0tPlxuICAgIDxtYXQtdGFiIFtkaXNhYmxlZF09XCIhZW5hYmxlU2VsZWN0UGVlckJ5RmVhdHVyZVwiPlxuICAgICAgPG5nLXRlbXBsYXRlIG1hdC10YWItbGFiZWw+XG4gICAgICAgIDxpb24tbGFiZWxcbiAgICAgICAgICBbbWF0QmFkZ2VdPVwiZmlsdGVyZWRGZWF0dXJlc0NvdW50JCB8IGFzeW5jIHwgYmFkZ2VOdW1iZXJcIlxuICAgICAgICAgIFttYXRCYWRnZUhpZGRlbl09XCJmaWx0ZXJlZEZlYXR1cmVzQ291bnQkIHwgYXN5bmMgfCBpc05pbFwiXG4gICAgICAgICAgW21hdEJhZGdlQ29sb3JdPVwiKGZpbHRlcmVkRmVhdHVyZXNDb3VudCQgfCBhc3luYykgPyAncHJpbWFyeScgOiAnYWNjZW50J1wiXG4gICAgICAgICAgbWF0QmFkZ2VPdmVybGFwPVwiZmFsc2VcIlxuICAgICAgICAgIG1hdEJhZGdlU2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICBtYXRCYWRnZVBvc2l0aW9uPVwiYWJvdmUgYWZ0ZXJcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgJ05FVFdPUksuUEVFUi5TRUxFQ1RfTU9EQUwuVEFCX0ZFQVRVUkVTJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8aW9uLWxpc3Q+XG4gICAgICAgIDxpb24tbGlzdC1oZWFkZXI+XG4gICAgICAgICAgPGlvbi1sYWJlbCBjbGFzcz1cImlvbi10ZXh0LXdyYXAgaW9uLXBhZGRpbmctZW5kXCI+XG4gICAgICAgICAgICA8cCBbaW5uZXJIVE1MXT1cIidORVRXT1JLLlBFRVIuU0VMRUNUX01PREFMLkZFQVRVUkVTX0hFTFAnIHwgdHJhbnNsYXRlXCI+PC9wPlxuICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICA8L2lvbi1saXN0LWhlYWRlcj5cblxuICAgICAgICBAZm9yIChwZWVyIG9mIGZpbHRlcmVkUGVlcnNCeUZlYXR1cmVzJCB8IGFzeW5jOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICBAbGV0IHBlZXJVcmwgPSBwZWVyLmhvc3RBbmRQb3J0ICsgcGVlci5wYXRoO1xuICAgICAgICAgIDwhLS0gUGVlciBpcyBVUCAtLT5cbiAgICAgICAgICBAaWYgKHBlZXIucmVhY2hhYmxlICYmIHBlZXIuZmVhdHVyZXMgfCBpc05vdEVtcHR5QXJyYXkpIHtcbiAgICAgICAgICAgIEBsZXQgY29sbGFwc2VkID0gY29sbGFwc2VkUGVlcnNbcGVlclVybF07XG5cbiAgICAgICAgICAgIDxpb24taXRlbS1kaXZpZGVyIChjbGljayk9XCJ0b2dnbGVQZWVyRmVhdHVyZXMocGVlclVybClcIiB0YXBwYWJsZSBAZmFkZUluQW5pbWF0aW9uPlxuICAgICAgICAgICAgICA8aW9uLWdyaWQgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICAgIDxpb24tcm93PlxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGg0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJzZXJ2ZXJcIiBjb2xvcj1cIm1lZGl1bVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBwZWVyLmhvc3RBbmRQb3J0IH19e3sgcGVlci5wYXRoIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9oND5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKHBlZXJNaW5WZXJzaW9uICYmICFpc0NvbXBhdGlibGUocGVlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdORVRXT1JLLlBFRVIuU0VMRUNUX01PREFMLk5PVF9DT01QQVRJQkxFX0hFTFAnIHwgdHJhbnNsYXRlOiB7IHZlcnNpb246IHBlZXJNaW5WZXJzaW9uIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwiaW9uLWNvbG9yLWRhbmdlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj53YXJuaW5nPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ7eyBwZWVyLnNvZnR3YXJlVmVyc2lvbiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiNFwiIGNsYXNzPVwiaW9uLXRleHQtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY2xhc3M9XCJ0ZXh0LWl0YWxpY1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxoND4oe3sgJ0NPTU1PTi5SRVNVTFRfQ09VTlQnIHwgdHJhbnNsYXRlOiB7IGNvdW50OiBwZWVyLmZlYXR1cmVzLmxlbmd0aCB9IH19KTwvaDQ+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICAgICAgPC9pb24tZ3JpZD5cblxuICAgICAgICAgICAgICA8bWF0LWljb24gc2xvdD1cImVuZFwiPlxuICAgICAgICAgICAgICAgIEBpZiAoY29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgICAgICB7eyBtb2JpbGUgPyAnYXJyb3dfZHJvcF9kb3duJyA6ICdrZXlib2FyZF9hcnJvd19kb3duJyB9fVxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAge3sgbW9iaWxlID8gJ2Fycm93X2Ryb3BfdXAnIDogJ2tleWJvYXJkX2Fycm93X3VwJyB9fVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvaW9uLWl0ZW0tZGl2aWRlcj5cblxuICAgICAgICAgICAgQGlmICghY29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgIEBmb3IgKGZlYXR1cmUgb2YgcGVlci5mZWF0dXJlczsgdHJhY2sgZmVhdHVyZS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIDxpb24taXRlbSAoY2xpY2spPVwic2VsZWN0UGVlcihwZWVyKVwiIHRhcHBhYmxlIG1hdFJpcHBsZSBkZXRhaWwgQGZhZGVJbkFuaW1hdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gaWNvbiAtLT5cbiAgICAgICAgICAgICAgICAgIEBpZiAoZmVhdHVyZS5sb2dvICYmIGZlYXR1cmUubG9nbyAhPSAnc2tpcCcpIHtcbiAgICAgICAgICAgICAgICAgICAgPGlvbi1hdmF0YXIgc2xvdD1cInN0YXJ0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlvbi1pbWcgW3NyY109XCJmZWF0dXJlLmxvZ29cIiAoaW9uRXJyb3IpPVwiY2xlYXJMb2dvKGZlYXR1cmUpXCI+PC9pb24taW1nPlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi1hdmF0YXI+XG4gICAgICAgICAgICAgICAgICB9IEBlbHNlIGlmIChwZWVyLmZhdmljb24gIT0gJ3NraXAnKSB7XG4gICAgICAgICAgICAgICAgICAgIDxpb24tYXZhdGFyIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpb24taW1nIFtzcmNdPVwicGVlci5mYXZpY29uIHx8IHBlZXIudXJsICsgJy9hcGkvZmF2aWNvbidcIiAoaW9uRXJyb3IpPVwiY2xlYXJMb2dvKHBlZXIpXCI+PC9pb24taW1nPlxuICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImNvbnRyYWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbi1zZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ0b3A6IDEycHg7IGxlZnQ6IDQ0cHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJkYXJrXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tYXZhdGFyPlxuICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBuYW1lPVwiY29udHJhY3RcIiBjbGFzcz1cImlvbi1pY29uLWF2YXRhclwiIGNvbG9yPVwiZGFya1wiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY2xhc3M9XCJpb24tdGV4dC13cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aDMgW2lubmVySFRNTF09XCJmZWF0dXJlIHwgcmVmZXJlbnRpYWxUb1N0cmluZyB8IGhpZ2hsaWdodDogc2VhcmNoVGV4dFwiPjwvaDM+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICA8cCBbaW5uZXJIVE1MXT1cImZlYXR1cmUuZGVzY3JpcHRpb24gfCBoaWdobGlnaHQ6IHNlYXJjaFRleHRcIj48L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBubyByZXN1bHQgLS0+XG4gICAgICAgIEBpZiAoKGZpbHRlcmVkRmVhdHVyZXNDb3VudCQgfCBhc3luYykgPT09IDApIHtcbiAgICAgICAgICA8aW9uLWl0ZW0+XG4gICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJkYW5nZXJcIiBjbGFzcz1cInRleHQtaXRhbGljXCIgdHJhbnNsYXRlPkNPTU1PTi5OT19SRVNVTFQ8L2lvbi10ZXh0PlxuICAgICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgIH1cbiAgICAgIDwvaW9uLWxpc3Q+XG4gICAgPC9tYXQtdGFiPlxuICA8L21hdC10YWItZ3JvdXA+XG48L2lvbi1jb250ZW50PlxuXG5AaWYgKChjYW5DYW5jZWwgJiYgIW1vYmlsZSkgfHwgc2hvd1NldE1hbnVhbGx5QnV0dG9uKSB7XG4gIDxpb24tZm9vdGVyPlxuICAgIDxpb24tdG9vbGJhcj5cbiAgICAgIDxpb24tcm93IGNsYXNzPVwiaW9uLW5vLXBhZGRpbmcgaW9uLXRleHQtbm93cmFwXCI+XG4gICAgICAgIDxpb24tY29sPjwvaW9uLWNvbD5cblxuICAgICAgICA8IS0tIGJ1dHRvbnMgLS0+XG4gICAgICAgIEBpZiAoc2hvd1NldE1hbnVhbGx5QnV0dG9uKSB7XG4gICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIj5cbiAgICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIChjbGljayk9XCJjbGlja1NldE1hbnVhbGx5KCRldmVudClcIj5cbiAgICAgICAgICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+TkVUV09SSy5QRUVSLlNFTEVDVF9NT0RBTC5CVE5fU0VUX01BTlVBTExZPC9pb24tbGFiZWw+XG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChjYW5DYW5jZWwpIHtcbiAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiIGhpZGRlbi14cyBoaWRkZW4tc20gaGlkZGVuLW1vYmlsZT5cbiAgICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIGNvbG9yPVwiZGFya1wiIChjbGljayk9XCJjYW5jZWwoKVwiPlxuICAgICAgICAgICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5DT01NT04uQlROX0NBTkNFTDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgfVxuICAgICAgPC9pb24tcm93PlxuICAgIDwvaW9uLXRvb2xiYXI+XG4gIDwvaW9uLWZvb3Rlcj5cbn1cbiJdfQ==
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
2
|
-
import { SharedModule } from '../../shared/shared.module';
|
|
3
|
-
import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
|
|
4
|
-
import { SelectPeerModal } from './select-peer.modal';
|
|
5
|
-
import { TranslateModule } from '@ngx-translate/core';
|
|
6
|
-
import { AppTextPopoverModule } from '../form/text-popover/text-popover.module';
|
|
7
|
-
import { CorePipesModule } from '../services/pipes/pipes.module';
|
|
8
|
-
import { FormsModule } from '@angular/forms';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "@ngx-translate/core";
|
|
11
|
-
export class AppSelectPeerModule {
|
|
12
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppSelectPeerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
13
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AppSelectPeerModule, declarations: [
|
|
14
|
-
// Network
|
|
15
|
-
SelectPeerModal], imports: [SharedModule, i1.TranslateModule, AppTextPopoverModule, CorePipesModule, FormsModule], exports: [TranslateModule,
|
|
16
|
-
// Components
|
|
17
|
-
SelectPeerModal] });
|
|
18
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppSelectPeerModule, providers: [provideHttpClient(withInterceptorsFromDi())], imports: [SharedModule, TranslateModule.forChild(), AppTextPopoverModule, CorePipesModule, FormsModule, TranslateModule] });
|
|
19
|
-
}
|
|
20
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppSelectPeerModule, decorators: [{
|
|
21
|
-
type: NgModule,
|
|
22
|
-
args: [{
|
|
23
|
-
declarations: [
|
|
24
|
-
// Network
|
|
25
|
-
SelectPeerModal,
|
|
26
|
-
],
|
|
27
|
-
exports: [
|
|
28
|
-
TranslateModule,
|
|
29
|
-
// Components
|
|
30
|
-
SelectPeerModal,
|
|
31
|
-
],
|
|
32
|
-
imports: [SharedModule, TranslateModule.forChild(), AppTextPopoverModule, CorePipesModule, FormsModule],
|
|
33
|
-
providers: [provideHttpClient(withInterceptorsFromDi())],
|
|
34
|
-
}]
|
|
35
|
-
}] });
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXBlZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3BlZXIvc2VsZWN0LXBlZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBZTdDLE1BQU0sT0FBTyxtQkFBbUI7d0dBQW5CLG1CQUFtQjt5R0FBbkIsbUJBQW1CO1lBWDVCLFVBQVU7WUFDVixlQUFlLGFBT1AsWUFBWSxzQkFBOEIsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLFdBQVcsYUFKcEcsZUFBZTtZQUNmLGFBQWE7WUFDYixlQUFlO3lHQUtOLG1CQUFtQixhQUZuQixDQUFDLGlCQUFpQixDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQyxZQUQ5QyxZQUFZLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRSxFQUFFLG9CQUFvQixFQUFFLGVBQWUsRUFBRSxXQUFXLEVBSnBHLGVBQWU7OzRGQU9OLG1CQUFtQjtrQkFiL0IsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osVUFBVTt3QkFDVixlQUFlO3FCQUNoQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGVBQWU7cUJBQ2hCO29CQUNELE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsUUFBUSxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLFdBQVcsQ0FBQztvQkFDdkcsU0FBUyxFQUFFLENBQUMsaUJBQWlCLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO2lCQUN6RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTaGFyZWRNb2R1bGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2hhcmVkLm1vZHVsZSc7XG5pbXBvcnQgeyBwcm92aWRlSHR0cENsaWVudCwgd2l0aEludGVyY2VwdG9yc0Zyb21EaSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFNlbGVjdFBlZXJNb2RhbCB9IGZyb20gJy4vc2VsZWN0LXBlZXIubW9kYWwnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBBcHBUZXh0UG9wb3Zlck1vZHVsZSB9IGZyb20gJy4uL2Zvcm0vdGV4dC1wb3BvdmVyL3RleHQtcG9wb3Zlci5tb2R1bGUnO1xuaW1wb3J0IHsgQ29yZVBpcGVzTW9kdWxlIH0gZnJvbSAnLi4vc2VydmljZXMvcGlwZXMvcGlwZXMubW9kdWxlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgICAvLyBOZXR3b3JrXG4gICAgU2VsZWN0UGVlck1vZGFsLFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIC8vIENvbXBvbmVudHNcbiAgICBTZWxlY3RQZWVyTW9kYWwsXG4gIF0sXG4gIGltcG9ydHM6IFtTaGFyZWRNb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZS5mb3JDaGlsZCgpLCBBcHBUZXh0UG9wb3Zlck1vZHVsZSwgQ29yZVBpcGVzTW9kdWxlLCBGb3Jtc01vZHVsZV0sXG4gIHByb3ZpZGVyczogW3Byb3ZpZGVIdHRwQ2xpZW50KHdpdGhJbnRlcmNlcHRvcnNGcm9tRGkoKSldLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBTZWxlY3RQZWVyTW9kdWxlIHt9XG4iXX0=
|