@sumaris-net/ngx-components 1.23.8 → 2.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/doc/build.md +2 -2
- package/esm2020/public_api.mjs +274 -0
- package/esm2020/public_test_api.mjs +46 -0
- package/esm2020/src/app/admin/admin-routing.module.mjs +41 -0
- package/esm2020/src/app/admin/admin.module.mjs +49 -0
- package/esm2020/src/app/admin/services/filter/person.filter.mjs +59 -0
- package/esm2020/src/app/admin/services/person.service.mjs +161 -0
- package/esm2020/src/app/admin/services/validator/person.validator.mjs +34 -0
- package/esm2020/src/app/admin/users/list/users.mjs +227 -0
- package/esm2020/src/app/core/about/modal-about.mjs +71 -0
- package/esm2020/src/app/core/account/account.mjs +230 -0
- package/esm2020/src/app/core/auth/form/form-auth.mjs +131 -0
- package/esm2020/src/app/core/auth/modal/modal-auth.mjs +72 -0
- package/esm2020/src/app/core/core.module.mjs +223 -0
- package/esm2020/src/app/core/core.testing.module.mjs +72 -0
- package/esm2020/src/app/core/form/editor.class.mjs +608 -0
- package/esm2020/src/app/core/form/entity-editor-modal.class.mjs +406 -0
- package/esm2020/src/app/core/form/entity-editor.class.mjs +669 -0
- package/esm2020/src/app/core/form/entity-metadata.component.mjs +25 -0
- package/esm2020/src/app/core/form/form-buttons-bar.component.mjs +71 -0
- package/esm2020/src/app/core/form/form.class.mjs +334 -0
- package/esm2020/src/app/core/form/form.utils.mjs +264 -0
- package/esm2020/src/app/core/form/list.form.mjs +221 -0
- package/esm2020/src/app/core/form/properties.form.mjs +126 -0
- package/esm2020/src/app/core/graphql/graphql.module.mjs +22 -0
- package/esm2020/src/app/core/graphql/graphql.service.mjs +730 -0
- package/esm2020/src/app/core/graphql/graphql.utils.mjs +117 -0
- package/esm2020/src/app/core/home/home.mjs +257 -0
- package/esm2020/src/app/core/icon/icon.component.mjs +41 -0
- package/esm2020/src/app/core/icon/icon.module.mjs +29 -0
- package/esm2020/src/app/core/install/install-upgrade-card.component.mjs +337 -0
- package/esm2020/src/app/core/install/install-upgrade-card.module.mjs +33 -0
- package/esm2020/src/app/core/menu/menu.component.mjs +317 -0
- package/{esm2015/src/app/core/menu/menu.model.js → esm2020/src/app/core/menu/menu.model.mjs} +0 -0
- package/esm2020/src/app/core/menu/menu.module.mjs +45 -0
- package/{esm2015/src/app/core/menu/menu.service.js → esm2020/src/app/core/menu/menu.service.mjs} +9 -7
- package/esm2020/src/app/core/offline/update-offline-mode-card.component.mjs +27 -0
- package/esm2020/src/app/core/peer/select-peer.modal.mjs +130 -0
- package/esm2020/src/app/core/peer/select-peer.module.mjs +35 -0
- package/esm2020/src/app/core/register/confirm/confirm.mjs +81 -0
- package/esm2020/src/app/core/register/form/form-register.mjs +181 -0
- package/esm2020/src/app/core/register/modal/modal-register.mjs +52 -0
- package/esm2020/src/app/core/register/register.module.mjs +42 -0
- package/esm2020/src/app/core/services/account.service.mjs +1112 -0
- package/esm2020/src/app/core/services/auth-guard.service.mjs +71 -0
- package/esm2020/src/app/core/services/base-entity-service.class.mjs +433 -0
- package/esm2020/src/app/core/services/base-graphql-service.class.mjs +219 -0
- package/{esm2015/src/app/core/services/base58.js → esm2020/src/app/core/services/base58.mjs} +0 -0
- package/{esm2015/src/app/core/services/config/core.config.js → esm2020/src/app/core/services/config/core.config.mjs} +0 -0
- package/esm2020/src/app/core/services/config.service.mjs +354 -0
- package/{esm2015/src/app/core/services/crypto.service.js → esm2020/src/app/core/services/crypto.service.mjs} +7 -5
- package/{esm2015/src/app/core/services/errors.js → esm2020/src/app/core/services/errors.mjs} +0 -0
- package/esm2020/src/app/core/services/local-settings.service.mjs +442 -0
- package/esm2020/src/app/core/services/model/account.model.mjs +50 -0
- package/esm2020/src/app/core/services/model/config.model.mjs +89 -0
- package/esm2020/src/app/core/services/model/department.model.mjs +30 -0
- package/esm2020/src/app/core/services/model/entity.decorators.mjs +107 -0
- package/esm2020/src/app/core/services/model/entity.model.mjs +242 -0
- package/{esm2015/src/app/core/services/model/filter.model.js → esm2020/src/app/core/services/model/filter.model.mjs} +0 -0
- package/{esm2015/src/app/core/services/model/history.model.js → esm2020/src/app/core/services/model/history.model.mjs} +0 -0
- package/{esm2015/src/app/core/services/model/model.enum.js → esm2020/src/app/core/services/model/model.enum.mjs} +0 -0
- package/esm2020/src/app/core/services/model/peer.model.mjs +68 -0
- package/esm2020/src/app/core/services/model/person.model.mjs +83 -0
- package/esm2020/src/app/core/services/model/referential.model.mjs +145 -0
- package/esm2020/src/app/core/services/model/settings.model.mjs +75 -0
- package/esm2020/src/app/core/services/network.service.mjs +602 -0
- package/esm2020/src/app/core/services/network.utils.mjs +16 -0
- package/esm2020/src/app/core/services/pipes/account.pipes.mjs +38 -0
- package/esm2020/src/app/core/services/pipes/department-to-string.pipe.mjs +23 -0
- package/esm2020/src/app/core/services/pipes/person-to-string.pipe.mjs +23 -0
- package/esm2020/src/app/core/services/pipes/usage-mode.pipes.mjs +37 -0
- package/esm2020/src/app/core/services/platform.service.mjs +476 -0
- package/esm2020/src/app/core/services/storage/entities-storage.service.mjs +422 -0
- package/esm2020/src/app/core/services/storage/entity-store.class.mjs +449 -0
- package/esm2020/src/app/core/services/testing/referential-filter.model.mjs +23 -0
- package/esm2020/src/app/core/services/testing/referential.validator.mjs +45 -0
- package/esm2020/src/app/core/services/validator/account.validator.mjs +52 -0
- package/esm2020/src/app/core/services/validator/base.validator.class.mjs +47 -0
- package/esm2020/src/app/core/services/validator/local-settings.validator.mjs +66 -0
- package/esm2020/src/app/core/services/validator/user-settings.validator.mjs +29 -0
- package/esm2020/src/app/core/settings/settings.page.mjs +290 -0
- package/esm2020/src/app/core/table/actions-column.component.mjs +96 -0
- package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +385 -0
- package/esm2020/src/app/core/table/memory-table.class.mjs +53 -0
- package/esm2020/src/app/core/table/table-select-columns.component.mjs +43 -0
- package/esm2020/src/app/core/table/table.class.mjs +1654 -0
- package/{esm2015/src/app/core/table/table.utils.js → esm2020/src/app/core/table/table.utils.mjs} +0 -0
- package/esm2020/src/app/core/table/testing/table.testing.mjs +264 -0
- package/esm2020/src/app/core/table/testing/table.testing.module.mjs +38 -0
- package/esm2020/src/app/core/text-popover/testing/text-popover.testing.mjs +37 -0
- package/esm2020/src/app/core/text-popover/testing/text-popover.testing.module.mjs +45 -0
- package/esm2020/src/app/core/text-popover/text-form.component.mjs +84 -0
- package/esm2020/src/app/core/text-popover/text-popover.component.mjs +92 -0
- package/esm2020/src/app/shared/alerts.mjs +238 -0
- package/esm2020/src/app/shared/audio/audio.mjs +201 -0
- package/esm2020/src/app/shared/audio/audio.testing.mjs +31 -0
- package/esm2020/src/app/shared/audio/audio.testing.module.mjs +45 -0
- package/esm2020/src/app/shared/capacitor/keyboard.mjs +40 -0
- package/esm2020/src/app/shared/capacitor/plugins.mjs +9 -0
- package/{esm2015/src/app/shared/constants.js → esm2020/src/app/shared/constants.mjs} +2 -1
- package/esm2020/src/app/shared/dates.mjs +134 -0
- package/esm2020/src/app/shared/directives/autofocus.directive.mjs +92 -0
- package/esm2020/src/app/shared/directives/autotitle.directive.mjs +30 -0
- package/esm2020/src/app/shared/directives/directives.module.mjs +43 -0
- package/esm2020/src/app/shared/directives/drag-and-drop.directive.mjs +53 -0
- package/esm2020/src/app/shared/directives/ng-var.directive.mjs +31 -0
- package/esm2020/src/app/shared/directives/resizable/resizable.component.mjs +59 -0
- package/esm2020/src/app/shared/directives/resizable/resizable.directive.mjs +40 -0
- package/esm2020/src/app/shared/directives/resizable/resizable.module.mjs +17 -0
- package/esm2020/src/app/shared/events.mjs +64 -0
- package/esm2020/src/app/shared/file/csv.utils.mjs +74 -0
- package/esm2020/src/app/shared/file/file.service.mjs +117 -0
- package/esm2020/src/app/shared/file/file.utils.mjs +113 -0
- package/esm2020/src/app/shared/file/images.utils.mjs +161 -0
- package/{esm2015/src/app/shared/file/uri.utils.js → esm2020/src/app/shared/file/uri.utils.mjs} +0 -0
- package/{esm2015/src/app/shared/focusable.js → esm2020/src/app/shared/focusable.mjs} +0 -0
- package/esm2020/src/app/shared/form/field.component.mjs +241 -0
- package/{esm2015/src/app/shared/form/field.model.js → esm2020/src/app/shared/form/field.model.mjs} +1 -1
- package/esm2020/src/app/shared/form/loading-spinner.mjs +36 -0
- package/esm2020/src/app/shared/forms.mjs +355 -0
- package/esm2020/src/app/shared/functions.mjs +417 -0
- package/{esm2015/src/app/shared/gesture/gesture-config.js → esm2020/src/app/shared/gesture/gesture-config.mjs} +7 -5
- package/esm2020/src/app/shared/gesture/hammer.utils.mjs +2 -0
- package/{esm2015/src/app/shared/graph/colors.utils.js → esm2020/src/app/shared/graph/colors.utils.mjs} +0 -0
- package/esm2020/src/app/shared/graph/graph-colors.mjs +254 -0
- package/esm2020/src/app/shared/guard/component-dirty.guard.mjs +57 -0
- package/esm2020/src/app/shared/help/help.modal.mjs +53 -0
- package/esm2020/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +23 -0
- package/esm2020/src/app/shared/hotkeys/hotkeys.service.mjs +84 -0
- package/esm2020/src/app/shared/hotkeys/shared-hotkeys.module.mjs +42 -0
- package/esm2020/src/app/shared/http/http.utils.mjs +52 -0
- package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +279 -0
- package/esm2020/src/app/shared/image/gallery/image-gallery.module.mjs +46 -0
- package/esm2020/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +27 -0
- package/esm2020/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +89 -0
- package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +33 -0
- package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +56 -0
- package/esm2020/src/app/shared/image/image.model.mjs +2 -0
- package/esm2020/src/app/shared/image/image.module.mjs +29 -0
- package/esm2020/src/app/shared/image/image.service.mjs +99 -0
- package/{esm2015/src/app/shared/inputs.js → esm2020/src/app/shared/inputs.mjs} +4 -4
- package/{esm2015/src/app/shared/interceptors/progess.interceptor.js → esm2020/src/app/shared/interceptors/progess.interceptor.mjs} +0 -0
- package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +47 -0
- package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +836 -0
- package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +78 -0
- package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +19 -0
- package/esm2020/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +205 -0
- package/esm2020/src/app/shared/material/badge/badge-icon.directive.mjs +143 -0
- package/esm2020/src/app/shared/material/badge/badge-icon.module.mjs +32 -0
- package/esm2020/src/app/shared/material/badge/badge-icon.test.mjs +27 -0
- package/esm2020/src/app/shared/material/boolean/boolean.module.mjs +68 -0
- package/esm2020/src/app/shared/material/boolean/material.boolean.mjs +253 -0
- package/esm2020/src/app/shared/material/chips/chips.module.mjs +76 -0
- package/esm2020/src/app/shared/material/chips/material.chips.mjs +692 -0
- package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +136 -0
- package/esm2020/src/app/shared/material/datetime/datetime.module.mjs +91 -0
- package/esm2020/src/app/shared/material/datetime/material.date.mjs +392 -0
- package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +327 -0
- package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +416 -0
- package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +110 -0
- package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +111 -0
- package/esm2020/src/app/shared/material/duration/duration.module.mjs +67 -0
- package/{esm2015/src/app/shared/material/duration/duration.utils.js → esm2020/src/app/shared/material/duration/duration.utils.mjs} +0 -0
- package/esm2020/src/app/shared/material/duration/material.duration.mjs +257 -0
- package/esm2020/src/app/shared/material/latlong/latlong.utils.mjs +266 -0
- package/esm2020/src/app/shared/material/latlong/material.latlong.mjs +381 -0
- package/esm2020/src/app/shared/material/latlong/material.latlong.module.mjs +67 -0
- package/esm2020/src/app/shared/material/latlong/testing/latlong.test.mjs +74 -0
- package/{esm2015/src/app/shared/material/material.animations.js → esm2020/src/app/shared/material/material.animations.mjs} +0 -0
- package/esm2020/src/app/shared/material/material.module.mjs +224 -0
- package/{esm2015/src/app/shared/material/material.testing.module.js → esm2020/src/app/shared/material/material.testing.module.mjs} +68 -34
- package/esm2020/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +98 -0
- package/esm2020/src/app/shared/material/numpad/numpad.component.mjs +80 -0
- package/esm2020/src/app/shared/material/numpad/numpad.container.mjs +190 -0
- package/esm2020/src/app/shared/material/numpad/numpad.content.mjs +17 -0
- package/esm2020/src/app/shared/material/numpad/numpad.directive.mjs +162 -0
- package/esm2020/src/app/shared/material/numpad/numpad.dom-service.mjs +37 -0
- package/{esm2015/src/app/shared/material/numpad/numpad.model.js → esm2020/src/app/shared/material/numpad/numpad.model.mjs} +1 -1
- package/esm2020/src/app/shared/material/numpad/numpad.module.mjs +60 -0
- package/esm2020/src/app/shared/material/numpad/testing/numpad.test.mjs +46 -0
- package/esm2020/src/app/shared/material/paginator/material.paginator-i18n.mjs +42 -0
- package/esm2020/src/app/shared/material/stepper/material.stepper-i18n.mjs +22 -0
- package/esm2020/src/app/shared/material/swipe/material.swipe.mjs +334 -0
- package/esm2020/src/app/shared/material/swipe/swipe.module.mjs +51 -0
- package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +65 -0
- package/esm2020/src/app/shared/observables.mjs +96 -0
- package/esm2020/src/app/shared/pipes/arrays.pipe.mjs +114 -0
- package/esm2020/src/app/shared/pipes/colors.pipe.mjs +23 -0
- package/esm2020/src/app/shared/pipes/date-diff-duration.pipe.mjs +49 -0
- package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +42 -0
- package/{esm2015/src/app/shared/pipes/date-from-now.pipe.js → esm2020/src/app/shared/pipes/date-from-now.pipe.mjs} +13 -12
- package/{esm2015/src/app/shared/pipes/duration.pipe.js → esm2020/src/app/shared/pipes/duration.pipe.mjs} +13 -12
- package/esm2020/src/app/shared/pipes/file-size.pipe.mjs +62 -0
- package/esm2020/src/app/shared/pipes/form.pipes.mjs +187 -0
- package/esm2020/src/app/shared/pipes/highlight.pipe.mjs +48 -0
- package/esm2020/src/app/shared/pipes/latlong-format.pipe.mjs +46 -0
- package/esm2020/src/app/shared/pipes/maps.pipe.mjs +63 -0
- package/esm2020/src/app/shared/pipes/math.pipes.mjs +59 -0
- package/esm2020/src/app/shared/pipes/ng-init.pipe.mjs +21 -0
- package/{esm2015/src/app/shared/pipes/number-format.pipe.js → esm2020/src/app/shared/pipes/number-format.pipe.mjs} +14 -9
- package/esm2020/src/app/shared/pipes/pipes.module.mjs +206 -0
- package/esm2020/src/app/shared/pipes/property.pipes.mjs +96 -0
- package/esm2020/src/app/shared/pipes/string.pipes.mjs +69 -0
- package/esm2020/src/app/shared/pipes/translate-context.pipe.mjs +43 -0
- package/esm2020/src/app/shared/platforms.mjs +49 -0
- package/esm2020/src/app/shared/services/entity-service.class.mjs +19 -0
- package/esm2020/src/app/shared/services/job.utils.mjs +92 -0
- package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +253 -0
- package/esm2020/src/app/shared/services/progress-bar.service.mjs +32 -0
- package/esm2020/src/app/shared/services/startable-service.class.mjs +94 -0
- package/esm2020/src/app/shared/services/storage/storage.service.mjs +132 -0
- package/esm2020/src/app/shared/services/storage/storage.utils.mjs +13 -0
- package/esm2020/src/app/shared/services/translate-context.service.mjs +81 -0
- package/esm2020/src/app/shared/services/validator-service.class.mjs +2 -0
- package/esm2020/src/app/shared/services.mjs +62 -0
- package/esm2020/src/app/shared/shared-routing.module.mjs +63 -0
- package/esm2020/src/app/shared/shared.module.mjs +208 -0
- package/esm2020/src/app/shared/shared.testing.module.mjs +76 -0
- package/esm2020/src/app/shared/testing/tests.page.mjs +33 -0
- package/esm2020/src/app/shared/toast/toast.testing.mjs +52 -0
- package/esm2020/src/app/shared/toast/toast.testing.module.mjs +45 -0
- package/esm2020/src/app/shared/toast/toasts.mjs +121 -0
- package/esm2020/src/app/shared/toolbar/modal-toolbar.mjs +58 -0
- package/esm2020/src/app/shared/toolbar/toolbar.mjs +226 -0
- package/esm2020/src/app/shared/toolbar/toolbar.module.mjs +53 -0
- package/{esm2015/src/app/shared/types.js → esm2020/src/app/shared/types.mjs} +0 -0
- package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.mjs +57 -0
- package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +45 -0
- package/esm2020/src/app/shared/upload-file/upload-file-popover.component.mjs +97 -0
- package/esm2020/src/app/shared/upload-file/upload-file.component.mjs +204 -0
- package/esm2020/src/app/shared/upload-file/upload-file.model.mjs +20 -0
- package/esm2020/src/app/shared/validator/form-error-adapter.class.mjs +104 -0
- package/esm2020/src/app/shared/validator/validators.mjs +544 -0
- package/{esm2015/src/app/shared/version/versions.js → esm2020/src/app/shared/version/versions.mjs} +0 -0
- package/esm2020/src/app/social/job/job.model.mjs +26 -0
- package/esm2020/src/app/social/job/job.module.mjs +35 -0
- package/esm2020/src/app/social/job/job.service.mjs +59 -0
- package/esm2020/src/app/social/job/progression/job-progression.component.mjs +201 -0
- package/esm2020/src/app/social/job/progression/job-progression.list.mjs +22 -0
- package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +51 -0
- package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +33 -0
- package/esm2020/src/app/social/job/testing/job.testing.module.mjs +35 -0
- package/esm2020/src/app/social/message/message.form.mjs +81 -0
- package/esm2020/src/app/social/message/message.modal.mjs +93 -0
- package/esm2020/src/app/social/message/message.model.mjs +65 -0
- package/esm2020/src/app/social/message/message.module.mjs +35 -0
- package/esm2020/src/app/social/message/message.service.mjs +84 -0
- package/{esm2015/src/app/social/social.errors.js → esm2020/src/app/social/social.errors.mjs} +0 -0
- package/esm2020/src/app/social/social.module.mjs +47 -0
- package/esm2020/src/app/social/social.testing.module.mjs +51 -0
- package/esm2020/src/app/social/user-event/notification/user-event-notification.icon.mjs +97 -0
- package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +212 -0
- package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +228 -0
- package/esm2020/src/app/social/user-event/testing/user-event.testing.model.mjs +107 -0
- package/esm2020/src/app/social/user-event/testing/user-event.testing.module.mjs +35 -0
- package/esm2020/src/app/social/user-event/testing/user-event.testing.service.mjs +111 -0
- package/esm2020/src/app/social/user-event/user-event.model.mjs +2 -0
- package/esm2020/src/app/social/user-event/user-event.module.mjs +39 -0
- package/esm2020/src/app/social/user-event/user-event.service.mjs +486 -0
- package/{esm2015/src/app/vendor.js → esm2020/src/app/vendor.mjs} +1 -1
- package/esm2020/src/environments/environment.class.mjs +5 -0
- package/esm2020/src/environments/environment.mjs +86 -0
- package/esm2020/sumaris-net.ngx-components.mjs +5 -0
- package/fesm2015/sumaris-net.ngx-components.mjs +32493 -0
- package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -0
- package/fesm2020/sumaris-net.ngx-components.mjs +31739 -0
- package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/package.json +25 -34
- package/public_api.d.ts +23 -28
- package/public_test_api.d.ts +37 -0
- package/resources/README.md +8 -0
- package/src/app/admin/admin-routing.module.d.ts +7 -0
- package/src/app/admin/admin.module.d.ts +11 -0
- package/src/app/admin/services/person.service.d.ts +3 -0
- package/src/app/admin/services/validator/person.validator.d.ts +8 -5
- package/src/app/admin/users/list/users.d.ts +10 -7
- package/src/app/core/about/modal-about.d.ts +3 -0
- package/src/app/core/account/account.d.ts +11 -8
- package/src/app/core/auth/form/form-auth.d.ts +6 -3
- package/src/app/core/auth/modal/modal-auth.d.ts +3 -0
- package/src/app/core/core.module.d.ts +36 -0
- package/src/app/core/core.testing.module.d.ts +9 -0
- package/src/app/core/form/editor.class.d.ts +7 -2
- package/src/app/core/form/entity-editor-modal.class.d.ts +7 -4
- package/src/app/core/form/entity-editor.class.d.ts +4 -1
- package/src/app/core/form/entity-metadata.component.d.ts +3 -0
- package/src/app/core/form/form-buttons-bar.component.d.ts +3 -0
- package/src/app/core/form/form.class.d.ts +12 -9
- package/src/app/core/form/form.utils.d.ts +4 -4
- package/src/app/core/form/list.form.d.ts +10 -7
- package/src/app/core/form/properties.form.d.ts +10 -7
- package/src/app/core/graphql/graphql.module.d.ts +5 -0
- package/src/app/core/graphql/graphql.service.d.ts +9 -2
- package/src/app/core/graphql/graphql.utils.d.ts +8 -0
- package/src/app/core/home/home.d.ts +4 -1
- package/src/app/core/icon/icon.component.d.ts +5 -2
- package/src/app/core/icon/icon.module.d.ts +7 -0
- package/src/app/core/install/install-upgrade-card.component.d.ts +5 -2
- package/src/app/core/install/install-upgrade-card.module.d.ts +10 -0
- package/src/app/core/menu/menu.component.d.ts +7 -5
- package/src/app/core/menu/menu.module.d.ts +8 -0
- package/src/app/core/menu/menu.service.d.ts +3 -0
- package/src/app/core/offline/update-offline-mode-card.component.d.ts +3 -0
- package/src/app/core/peer/select-peer.modal.d.ts +7 -4
- package/src/app/core/peer/select-peer.module.d.ts +9 -0
- package/src/app/core/register/confirm/confirm.d.ts +3 -0
- package/src/app/core/register/form/form-register.d.ts +10 -7
- package/src/app/core/register/modal/modal-register.d.ts +3 -0
- package/src/app/core/register/register.module.d.ts +12 -0
- package/src/app/core/services/account.service.d.ts +5 -2
- package/src/app/core/services/auth-guard.service.d.ts +3 -0
- package/src/app/core/services/base-entity-service.class.d.ts +3 -0
- package/src/app/core/services/base-graphql-service.class.d.ts +3 -0
- package/src/app/core/services/config.service.d.ts +4 -1
- package/src/app/core/services/crypto.service.d.ts +3 -0
- package/src/app/core/services/local-settings.service.d.ts +5 -1
- package/src/app/core/services/model/referential.model.d.ts +1 -1
- package/src/app/core/services/network.service.d.ts +6 -5
- package/src/app/core/services/pipes/account.pipes.d.ts +7 -0
- package/src/app/core/services/pipes/department-to-string.pipe.d.ts +4 -0
- package/src/app/core/services/pipes/person-to-string.pipe.d.ts +4 -0
- package/src/app/core/services/pipes/usage-mode.pipes.d.ts +7 -0
- package/src/app/core/services/platform.service.d.ts +22 -21
- package/src/app/core/services/storage/entities-storage.service.d.ts +5 -2
- package/src/app/core/services/storage/entity-store.class.d.ts +3 -3
- package/src/app/core/services/testing/referential.validator.d.ts +8 -5
- package/src/app/core/services/validator/account.validator.d.ts +6 -3
- package/src/app/core/services/validator/base.validator.class.d.ts +8 -5
- package/src/app/core/services/validator/local-settings.validator.d.ts +8 -5
- package/src/app/core/services/validator/user-settings.validator.d.ts +6 -3
- package/src/app/core/settings/settings.page.d.ts +8 -5
- package/src/app/core/table/actions-column.component.d.ts +3 -0
- package/src/app/core/table/entities-table-datasource.class.d.ts +11 -9
- package/src/app/core/table/memory-table.class.d.ts +3 -0
- package/src/app/core/table/table-select-columns.component.d.ts +4 -5
- package/src/app/core/table/table.class.d.ts +53 -34
- package/src/app/core/table/testing/table.testing.d.ts +13 -15
- package/src/app/core/table/testing/table.testing.module.d.ts +9 -0
- package/src/app/core/text-popover/testing/text-popover.testing.d.ts +4 -1
- package/src/app/core/text-popover/testing/text-popover.testing.module.d.ts +9 -0
- package/src/app/core/text-popover/text-form.component.d.ts +7 -4
- package/src/app/core/text-popover/text-popover.component.d.ts +3 -0
- package/src/app/shared/alerts.d.ts +4 -4
- package/src/app/shared/audio/audio.d.ts +20 -11
- package/src/app/shared/audio/audio.testing.d.ts +13 -0
- package/src/app/shared/audio/audio.testing.module.d.ts +11 -0
- package/src/app/shared/capacitor/keyboard.d.ts +16 -0
- package/src/app/shared/capacitor/plugins.d.ts +7 -0
- package/src/app/shared/constants.d.ts +1 -0
- package/src/app/shared/directives/autofocus.directive.d.ts +9 -7
- package/src/app/shared/directives/autotitle.directive.d.ts +3 -0
- package/src/app/shared/directives/directives.module.d.ts +10 -0
- package/src/app/shared/directives/drag-and-drop.directive.d.ts +3 -0
- package/src/app/shared/directives/ng-var.directive.d.ts +3 -0
- package/src/app/shared/directives/resizable/resizable.component.d.ts +3 -0
- package/src/app/shared/directives/resizable/resizable.directive.d.ts +3 -0
- package/src/app/shared/directives/resizable/resizable.module.d.ts +6 -0
- package/src/app/shared/file/file.service.d.ts +3 -0
- package/src/app/shared/file/file.utils.d.ts +1 -1
- package/src/app/shared/form/field.component.d.ts +9 -3
- package/src/app/shared/form/field.model.d.ts +2 -2
- package/src/app/shared/form/loading-spinner.d.ts +3 -0
- package/src/app/shared/forms.d.ts +12 -12
- package/src/app/shared/gesture/gesture-config.d.ts +3 -0
- package/src/app/shared/gesture/hammer.utils.d.ts +11 -11
- package/src/app/shared/guard/component-dirty.guard.d.ts +3 -0
- package/src/app/shared/help/help.modal.d.ts +4 -1
- package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +3 -0
- package/src/app/shared/hotkeys/hotkeys.service.d.ts +4 -1
- package/src/app/shared/hotkeys/shared-hotkeys.module.d.ts +9 -0
- package/src/app/shared/image/gallery/image-gallery.component.d.ts +77 -0
- package/src/app/shared/image/gallery/image-gallery.module.d.ts +12 -0
- package/src/app/shared/image/gallery/testing/gallegry.model.testing.d.ts +12 -0
- package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +33 -0
- package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +15 -0
- package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +12 -0
- package/src/app/shared/image/image.model.d.ts +5 -0
- package/src/app/shared/image/image.module.d.ts +8 -0
- package/src/app/shared/image/image.service.d.ts +32 -0
- package/src/app/shared/inputs.d.ts +3 -3
- package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +36 -0
- package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +11 -40
- package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +19 -0
- package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +4 -0
- package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +12 -9
- package/src/app/shared/material/badge/badge-icon.directive.d.ts +6 -4
- package/src/app/shared/material/badge/badge-icon.module.d.ts +8 -0
- package/src/app/shared/material/badge/badge-icon.test.d.ts +4 -1
- package/src/app/shared/material/boolean/boolean.module.d.ts +17 -0
- package/src/app/shared/material/boolean/material.boolean.d.ts +7 -4
- package/src/app/shared/material/chips/chips.module.d.ts +19 -0
- package/src/app/shared/material/chips/material.chips.d.ts +11 -8
- package/src/app/shared/material/chips/testing/chips.test.d.ts +8 -5
- package/src/app/shared/material/datetime/datetime.module.d.ts +22 -0
- package/src/app/shared/material/datetime/material.date.d.ts +11 -9
- package/src/app/shared/material/datetime/material.dateshort.d.ts +10 -9
- package/src/app/shared/material/datetime/material.datetime.d.ts +13 -12
- package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +11 -9
- package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +11 -9
- package/src/app/shared/material/duration/duration.module.d.ts +16 -0
- package/src/app/shared/material/duration/material.duration.d.ts +8 -5
- package/src/app/shared/material/latlong/material.latlong.d.ts +8 -5
- package/src/app/shared/material/latlong/material.latlong.module.d.ts +17 -0
- package/src/app/shared/material/latlong/testing/latlong.test.d.ts +10 -7
- package/src/app/shared/material/material.module.d.ts +43 -0
- package/src/app/shared/material/material.testing.module.d.ts +19 -0
- package/src/app/shared/material/numpad/numpad.append-to-input.directive.d.ts +3 -0
- package/src/app/shared/material/numpad/numpad.component.d.ts +4 -1
- package/src/app/shared/material/numpad/numpad.container.d.ts +5 -2
- package/src/app/shared/material/numpad/numpad.content.d.ts +3 -0
- package/src/app/shared/material/numpad/numpad.directive.d.ts +4 -1
- package/src/app/shared/material/numpad/numpad.dom-service.d.ts +3 -0
- package/src/app/shared/material/numpad/numpad.model.d.ts +1 -1
- package/src/app/shared/material/numpad/numpad.module.d.ts +14 -0
- package/src/app/shared/material/numpad/testing/numpad.test.d.ts +7 -4
- package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +3 -0
- package/src/app/shared/material/stepper/material.stepper-i18n.d.ts +3 -0
- package/src/app/shared/material/swipe/material.swipe.d.ts +6 -3
- package/src/app/shared/material/swipe/swipe.module.d.ts +13 -0
- package/src/app/shared/material/swipe/testing/swipe.test.d.ts +7 -4
- package/src/app/shared/pipes/arrays.pipe.d.ts +15 -0
- package/src/app/shared/pipes/colors.pipe.d.ts +9 -0
- package/src/app/shared/pipes/date-diff-duration.pipe.d.ts +4 -0
- package/src/app/shared/pipes/date-format.pipe.d.ts +4 -0
- package/src/app/shared/pipes/date-from-now.pipe.d.ts +4 -0
- package/src/app/shared/pipes/duration.pipe.d.ts +4 -0
- package/src/app/shared/pipes/file-size.pipe.d.ts +3 -0
- package/src/app/shared/pipes/form.pipes.d.ts +18 -5
- package/src/app/shared/pipes/highlight.pipe.d.ts +4 -0
- package/src/app/shared/pipes/latlong-format.pipe.d.ts +7 -0
- package/src/app/shared/pipes/maps.pipe.d.ts +10 -0
- package/src/app/shared/pipes/math.pipes.d.ts +10 -0
- package/src/app/shared/pipes/ng-init.pipe.d.ts +3 -0
- package/src/app/shared/pipes/number-format.pipe.d.ts +4 -0
- package/src/app/shared/pipes/pipes.module.d.ts +24 -0
- package/src/app/shared/pipes/property.pipes.d.ts +6 -0
- package/src/app/shared/pipes/string.pipes.d.ts +11 -0
- package/src/app/shared/pipes/translate-context.pipe.d.ts +7 -0
- package/src/app/shared/platforms.d.ts +1 -0
- package/src/app/shared/services/entity-service.class.d.ts +3 -0
- package/src/app/shared/services/memory-entity-service.class.d.ts +3 -0
- package/src/app/shared/services/progress-bar.service.d.ts +4 -1
- package/src/app/shared/services/storage/storage.service.d.ts +23 -0
- package/src/app/shared/services/storage/storage.utils.d.ts +19 -0
- package/src/app/shared/services/translate-context.service.d.ts +3 -0
- package/src/app/shared/services/validator-service.class.d.ts +2 -2
- package/src/app/shared/shared-routing.module.d.ts +7 -0
- package/src/app/shared/shared.module.d.ts +23 -0
- package/src/app/shared/shared.testing.module.d.ts +12 -0
- package/src/app/shared/testing/tests.page.d.ts +3 -0
- package/src/app/shared/toast/toast.testing.d.ts +3 -0
- package/src/app/shared/toast/toast.testing.module.d.ts +9 -0
- package/src/app/shared/toolbar/modal-toolbar.d.ts +5 -2
- package/src/app/shared/toolbar/toolbar.d.ts +9 -5
- package/src/app/shared/toolbar/toolbar.module.d.ts +15 -0
- package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +4 -1
- package/src/app/shared/upload-file/testing/upload-file.testing.module.d.ts +9 -0
- package/src/app/shared/upload-file/upload-file-popover.component.d.ts +3 -0
- package/src/app/shared/upload-file/upload-file.component.d.ts +3 -0
- package/src/app/shared/validator/form-error-adapter.class.d.ts +3 -0
- package/src/app/shared/validator/validators.d.ts +9 -9
- package/src/app/social/job/job.module.d.ts +9 -0
- package/src/app/social/job/job.service.d.ts +3 -0
- package/src/app/social/job/progression/job-progression.component.d.ts +4 -1
- package/src/app/social/job/progression/job-progression.list.d.ts +3 -0
- package/src/app/social/job/testing/job-progression.testing.d.ts +3 -0
- package/src/app/social/job/testing/job-progression.testing.service.d.ts +3 -0
- package/src/app/social/job/testing/job.testing.module.d.ts +9 -0
- package/src/app/social/message/message.form.d.ts +5 -2
- package/src/app/social/message/message.modal.d.ts +5 -2
- package/src/app/social/message/message.module.d.ts +9 -0
- package/src/app/social/message/message.service.d.ts +3 -0
- package/src/app/social/social.module.d.ts +10 -0
- package/src/app/social/social.testing.module.d.ts +9 -0
- package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +4 -1
- package/src/app/social/user-event/notification/user-event-notification.list.d.ts +7 -4
- package/src/app/social/user-event/testing/user-event.testing.d.ts +3 -0
- package/src/app/social/user-event/testing/user-event.testing.model.d.ts +1 -0
- package/src/app/social/user-event/testing/user-event.testing.module.d.ts +9 -0
- package/src/app/social/user-event/testing/user-event.testing.service.d.ts +5 -1
- package/src/app/social/user-event/user-event.model.d.ts +3 -2
- package/src/app/social/user-event/user-event.module.d.ts +10 -0
- package/src/app/social/user-event/user-event.service.d.ts +16 -11
- package/src/assets/audio/beep-notification.mp3 +0 -0
- package/src/assets/i18n/fr.json +9 -2
- package/src/environments/environment.class.d.ts +2 -0
- package/src/environments/environment.d.ts +1 -1
- package/src/theme/_icons.scss +1 -1
- package/src/theme/_material.globals.scss +29 -31
- package/src/theme/_material.scss +3 -2
- package/src/theme/_mixins.scss +4 -4
- package/src/theme/_ngx-components.scss +6 -0
- package/src/theme/_print.scss +24 -0
- package/bundles/sumaris-net.ngx-components.umd.js +0 -35297
- package/bundles/sumaris-net.ngx-components.umd.js.map +0 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js +0 -25
- package/bundles/sumaris-net.ngx-components.umd.min.js.map +0 -1
- package/esm2015/public_api.js +0 -244
- package/esm2015/src/app/admin/admin-routing.module.js +0 -34
- package/esm2015/src/app/admin/admin.module.js +0 -34
- package/esm2015/src/app/admin/services/filter/person.filter.js +0 -59
- package/esm2015/src/app/admin/services/person.service.js +0 -175
- package/esm2015/src/app/admin/services/validator/person.validator.js +0 -37
- package/esm2015/src/app/admin/users/list/users.js +0 -216
- package/esm2015/src/app/core/about/modal-about.js +0 -63
- package/esm2015/src/app/core/account/account.js +0 -240
- package/esm2015/src/app/core/auth/form/form-auth.js +0 -134
- package/esm2015/src/app/core/auth/modal/modal-auth.js +0 -78
- package/esm2015/src/app/core/core.module.js +0 -127
- package/esm2015/src/app/core/core.testing.module.js +0 -51
- package/esm2015/src/app/core/form/editor.class.js +0 -632
- package/esm2015/src/app/core/form/entity-editor-modal.class.js +0 -421
- package/esm2015/src/app/core/form/entity-editor.class.js +0 -696
- package/esm2015/src/app/core/form/entity-metadata.component.js +0 -22
- package/esm2015/src/app/core/form/form-buttons-bar.component.js +0 -63
- package/esm2015/src/app/core/form/form.class.js +0 -338
- package/esm2015/src/app/core/form/form.utils.js +0 -264
- package/esm2015/src/app/core/form/list.form.js +0 -219
- package/esm2015/src/app/core/form/properties.form.js +0 -119
- package/esm2015/src/app/core/graphql/graphql.module.js +0 -18
- package/esm2015/src/app/core/graphql/graphql.service.js +0 -734
- package/esm2015/src/app/core/graphql/graphql.utils.js +0 -107
- package/esm2015/src/app/core/home/home.js +0 -265
- package/esm2015/src/app/core/icon/icon.component.js +0 -32
- package/esm2015/src/app/core/icon/icon.module.js +0 -26
- package/esm2015/src/app/core/install/install-upgrade-card.component.js +0 -358
- package/esm2015/src/app/core/menu/menu.component.js +0 -329
- package/esm2015/src/app/core/menu/menu.module.js +0 -28
- package/esm2015/src/app/core/offline/update-offline-mode-card.component.js +0 -26
- package/esm2015/src/app/core/peer/select-peer.modal.js +0 -134
- package/esm2015/src/app/core/register/confirm/confirm.js +0 -86
- package/esm2015/src/app/core/register/form/form-register.js +0 -172
- package/esm2015/src/app/core/register/modal/modal-register.js +0 -55
- package/esm2015/src/app/core/services/account.service.js +0 -1165
- package/esm2015/src/app/core/services/auth-guard.service.js +0 -77
- package/esm2015/src/app/core/services/base-entity-service.class.js +0 -455
- package/esm2015/src/app/core/services/base-graphql-service.class.js +0 -221
- package/esm2015/src/app/core/services/config.service.js +0 -385
- package/esm2015/src/app/core/services/local-settings.service.js +0 -460
- package/esm2015/src/app/core/services/model/account.model.js +0 -50
- package/esm2015/src/app/core/services/model/config.model.js +0 -89
- package/esm2015/src/app/core/services/model/department.model.js +0 -30
- package/esm2015/src/app/core/services/model/entity.decorators.js +0 -104
- package/esm2015/src/app/core/services/model/entity.model.js +0 -245
- package/esm2015/src/app/core/services/model/peer.model.js +0 -68
- package/esm2015/src/app/core/services/model/person.model.js +0 -83
- package/esm2015/src/app/core/services/model/referential.model.js +0 -147
- package/esm2015/src/app/core/services/model/settings.model.js +0 -75
- package/esm2015/src/app/core/services/network.service.js +0 -639
- package/esm2015/src/app/core/services/network.utils.js +0 -19
- package/esm2015/src/app/core/services/pipes/account.pipes.js +0 -28
- package/esm2015/src/app/core/services/pipes/department-to-string.pipe.js +0 -18
- package/esm2015/src/app/core/services/pipes/person-to-string.pipe.js +0 -18
- package/esm2015/src/app/core/services/pipes/usage-mode.pipes.js +0 -27
- package/esm2015/src/app/core/services/platform.service.js +0 -549
- package/esm2015/src/app/core/services/storage/entities-storage.service.js +0 -452
- package/esm2015/src/app/core/services/storage/entity-store.class.js +0 -461
- package/esm2015/src/app/core/services/testing/referential-filter.model.js +0 -23
- package/esm2015/src/app/core/services/testing/referential.validator.js +0 -44
- package/esm2015/src/app/core/services/validator/account.validator.js +0 -55
- package/esm2015/src/app/core/services/validator/base.validator.class.js +0 -48
- package/esm2015/src/app/core/services/validator/local-settings.validator.js +0 -72
- package/esm2015/src/app/core/services/validator/user-settings.validator.js +0 -30
- package/esm2015/src/app/core/settings/settings.page.js +0 -305
- package/esm2015/src/app/core/table/actions-column.component.js +0 -74
- package/esm2015/src/app/core/table/entities-table-datasource.class.js +0 -389
- package/esm2015/src/app/core/table/memory-table.class.js +0 -59
- package/esm2015/src/app/core/table/table-select-columns.component.js +0 -44
- package/esm2015/src/app/core/table/table.class.js +0 -1651
- package/esm2015/src/app/core/table/testing/table.testing.js +0 -241
- package/esm2015/src/app/core/table/testing/table.testing.module.js +0 -26
- package/esm2015/src/app/core/text-popover/testing/text-popover.testing.js +0 -37
- package/esm2015/src/app/core/text-popover/testing/text-popover.testing.module.js +0 -33
- package/esm2015/src/app/core/text-popover/text-form.component.js +0 -72
- package/esm2015/src/app/core/text-popover/text-popover.component.js +0 -90
- package/esm2015/src/app/shared/alerts.js +0 -251
- package/esm2015/src/app/shared/audio/audio.js +0 -178
- package/esm2015/src/app/shared/dates.js +0 -134
- package/esm2015/src/app/shared/directives/autofocus.directive.js +0 -90
- package/esm2015/src/app/shared/directives/autotitle.directive.js +0 -27
- package/esm2015/src/app/shared/directives/directives.module.js +0 -30
- package/esm2015/src/app/shared/directives/drag-and-drop.directive.js +0 -43
- package/esm2015/src/app/shared/directives/ng-var.directive.js +0 -32
- package/esm2015/src/app/shared/directives/resizable/resizable.component.js +0 -54
- package/esm2015/src/app/shared/directives/resizable/resizable.directive.js +0 -34
- package/esm2015/src/app/shared/directives/resizable/resizable.module.js +0 -12
- package/esm2015/src/app/shared/events.js +0 -61
- package/esm2015/src/app/shared/file/csv.utils.js +0 -70
- package/esm2015/src/app/shared/file/file.service.js +0 -121
- package/esm2015/src/app/shared/file/file.utils.js +0 -116
- package/esm2015/src/app/shared/file/images.utils.js +0 -166
- package/esm2015/src/app/shared/form/field.component.js +0 -206
- package/esm2015/src/app/shared/form/loading-spinner.js +0 -24
- package/esm2015/src/app/shared/forms.js +0 -339
- package/esm2015/src/app/shared/functions.js +0 -418
- package/esm2015/src/app/shared/gesture/hammer.utils.js +0 -2
- package/esm2015/src/app/shared/graph/graph-colors.js +0 -256
- package/esm2015/src/app/shared/guard/component-dirty.guard.js +0 -61
- package/esm2015/src/app/shared/help/help.modal.js +0 -56
- package/esm2015/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.js +0 -20
- package/esm2015/src/app/shared/hotkeys/hotkeys.service.js +0 -91
- package/esm2015/src/app/shared/hotkeys/shared-hotkeys.module.js +0 -29
- package/esm2015/src/app/shared/http/http.utils.js +0 -57
- package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.js +0 -825
- package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.module.js +0 -46
- package/esm2015/src/app/shared/material/autocomplete/testing/autocomplete.test.js +0 -200
- package/esm2015/src/app/shared/material/badge/badge-icon.directive.js +0 -135
- package/esm2015/src/app/shared/material/badge/badge-icon.module.js +0 -23
- package/esm2015/src/app/shared/material/badge/badge-icon.test.js +0 -17
- package/esm2015/src/app/shared/material/boolean/boolean.module.js +0 -41
- package/esm2015/src/app/shared/material/boolean/material.boolean.js +0 -223
- package/esm2015/src/app/shared/material/chips/chips.module.js +0 -45
- package/esm2015/src/app/shared/material/chips/material.chips.js +0 -636
- package/esm2015/src/app/shared/material/chips/testing/chips.test.js +0 -138
- package/esm2015/src/app/shared/material/datetime/datetime.module.js +0 -54
- package/esm2015/src/app/shared/material/datetime/material.date.js +0 -375
- package/esm2015/src/app/shared/material/datetime/material.dateshort.js +0 -316
- package/esm2015/src/app/shared/material/datetime/material.datetime.js +0 -398
- package/esm2015/src/app/shared/material/datetime/testing/mat-date-time.test.js +0 -110
- package/esm2015/src/app/shared/material/datetime/testing/mat-date.test.js +0 -108
- package/esm2015/src/app/shared/material/duration/duration.module.js +0 -40
- package/esm2015/src/app/shared/material/duration/material.duration.js +0 -246
- package/esm2015/src/app/shared/material/latlong/latlong.utils.js +0 -249
- package/esm2015/src/app/shared/material/latlong/material.latlong.js +0 -350
- package/esm2015/src/app/shared/material/latlong/material.latlong.module.js +0 -41
- package/esm2015/src/app/shared/material/latlong/testing/latlong.test.js +0 -70
- package/esm2015/src/app/shared/material/material.module.js +0 -93
- package/esm2015/src/app/shared/material/numpad/numpad.append-to-input.directive.js +0 -96
- package/esm2015/src/app/shared/material/numpad/numpad.component.js +0 -73
- package/esm2015/src/app/shared/material/numpad/numpad.container.js +0 -149
- package/esm2015/src/app/shared/material/numpad/numpad.content.js +0 -14
- package/esm2015/src/app/shared/material/numpad/numpad.directive.js +0 -148
- package/esm2015/src/app/shared/material/numpad/numpad.dom-service.js +0 -37
- package/esm2015/src/app/shared/material/numpad/numpad.module.js +0 -39
- package/esm2015/src/app/shared/material/numpad/testing/numpad.test.js +0 -44
- package/esm2015/src/app/shared/material/paginator/material.paginator-i18n.js +0 -44
- package/esm2015/src/app/shared/material/stepper/material.stepper-i18n.js +0 -24
- package/esm2015/src/app/shared/material/swipe/material.swipe.js +0 -308
- package/esm2015/src/app/shared/material/swipe/swipe.module.js +0 -33
- package/esm2015/src/app/shared/material/swipe/testing/swipe.test.js +0 -68
- package/esm2015/src/app/shared/observables.js +0 -99
- package/esm2015/src/app/shared/pipes/arrays.pipe.js +0 -92
- package/esm2015/src/app/shared/pipes/date-diff-duration.pipe.js +0 -50
- package/esm2015/src/app/shared/pipes/date-format.pipe.js +0 -43
- package/esm2015/src/app/shared/pipes/file-size.pipe.js +0 -58
- package/esm2015/src/app/shared/pipes/form.pipes.js +0 -177
- package/esm2015/src/app/shared/pipes/highlight.pipe.js +0 -43
- package/esm2015/src/app/shared/pipes/latlong-format.pipe.js +0 -36
- package/esm2015/src/app/shared/pipes/maps.pipe.js +0 -48
- package/esm2015/src/app/shared/pipes/math.pipes.js +0 -44
- package/esm2015/src/app/shared/pipes/ng-init.pipe.js +0 -18
- package/esm2015/src/app/shared/pipes/pipes.module.js +0 -115
- package/esm2015/src/app/shared/pipes/property.pipes.js +0 -98
- package/esm2015/src/app/shared/pipes/string.pipes.js +0 -53
- package/esm2015/src/app/shared/pipes/translate-context.pipe.js +0 -36
- package/esm2015/src/app/shared/platforms.js +0 -45
- package/esm2015/src/app/shared/services/entity-service.class.js +0 -17
- package/esm2015/src/app/shared/services/job.utils.js +0 -96
- package/esm2015/src/app/shared/services/memory-entity-service.class.js +0 -260
- package/esm2015/src/app/shared/services/progress-bar.service.js +0 -30
- package/esm2015/src/app/shared/services/startable-service.class.js +0 -98
- package/esm2015/src/app/shared/services/storage.utils.js +0 -41
- package/esm2015/src/app/shared/services/translate-context.service.js +0 -83
- package/esm2015/src/app/shared/services/validator-service.class.js +0 -2
- package/esm2015/src/app/shared/services.js +0 -61
- package/esm2015/src/app/shared/shared-routing.module.js +0 -54
- package/esm2015/src/app/shared/shared.module.js +0 -135
- package/esm2015/src/app/shared/shared.testing.module.js +0 -33
- package/esm2015/src/app/shared/testing/tests.page.js +0 -34
- package/esm2015/src/app/shared/toast/toast.testing.js +0 -39
- package/esm2015/src/app/shared/toast/toast.testing.module.js +0 -33
- package/esm2015/src/app/shared/toast/toasts.js +0 -119
- package/esm2015/src/app/shared/toolbar/modal-toolbar.js +0 -53
- package/esm2015/src/app/shared/toolbar/toolbar.js +0 -213
- package/esm2015/src/app/shared/upload-file/testing/upload-file.testing.js +0 -59
- package/esm2015/src/app/shared/upload-file/testing/upload-file.testing.module.js +0 -33
- package/esm2015/src/app/shared/upload-file/upload-file-popover.component.js +0 -98
- package/esm2015/src/app/shared/upload-file/upload-file.component.js +0 -202
- package/esm2015/src/app/shared/upload-file/upload-file.model.js +0 -20
- package/esm2015/src/app/shared/validator/form-error-adapter.class.js +0 -99
- package/esm2015/src/app/shared/validator/validators.js +0 -537
- package/esm2015/src/app/social/job/job.model.js +0 -26
- package/esm2015/src/app/social/job/job.module.js +0 -25
- package/esm2015/src/app/social/job/job.service.js +0 -54
- package/esm2015/src/app/social/job/progression/job-progression.component.js +0 -200
- package/esm2015/src/app/social/job/progression/job-progression.list.js +0 -20
- package/esm2015/src/app/social/job/testing/job-progression.testing.js +0 -48
- package/esm2015/src/app/social/job/testing/job-progression.testing.service.js +0 -30
- package/esm2015/src/app/social/job/testing/job.testing.module.js +0 -25
- package/esm2015/src/app/social/message/message.form.js +0 -73
- package/esm2015/src/app/social/message/message.modal.js +0 -96
- package/esm2015/src/app/social/message/message.model.js +0 -65
- package/esm2015/src/app/social/message/message.module.js +0 -25
- package/esm2015/src/app/social/message/message.service.js +0 -87
- package/esm2015/src/app/social/social.module.js +0 -28
- package/esm2015/src/app/social/social.testing.module.js +0 -39
- package/esm2015/src/app/social/user-event/notification/user-event-notification.icon.js +0 -95
- package/esm2015/src/app/social/user-event/notification/user-event-notification.list.js +0 -203
- package/esm2015/src/app/social/user-event/testing/user-event.testing.js +0 -230
- package/esm2015/src/app/social/user-event/testing/user-event.testing.model.js +0 -103
- package/esm2015/src/app/social/user-event/testing/user-event.testing.module.js +0 -25
- package/esm2015/src/app/social/user-event/testing/user-event.testing.service.js +0 -117
- package/esm2015/src/app/social/user-event/user-event.model.js +0 -2
- package/esm2015/src/app/social/user-event/user-event.module.js +0 -27
- package/esm2015/src/app/social/user-event/user-event.service.js +0 -509
- package/esm2015/src/environments/environment.class.js +0 -5
- package/esm2015/src/environments/environment.js +0 -81
- package/esm2015/sumaris-net.ngx-components.js +0 -21
- package/fesm2015/sumaris-net.ngx-components.js +0 -29932
- package/fesm2015/sumaris-net.ngx-components.js.map +0 -1
- package/src/app/shared/services/storage.utils.d.ts +0 -13
- package/sumaris-net.ngx-components.d.ts +0 -20
- package/sumaris-net.ngx-components.metadata.json +0 -1
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
// Import the core angular services.
|
|
2
|
+
import { Directive } from '@angular/core';
|
|
3
|
+
import { isMobile } from '../platforms';
|
|
4
|
+
import { timer } from 'rxjs';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../capacitor/keyboard";
|
|
7
|
+
// ----------------------------------------------------------------------------------- //
|
|
8
|
+
// ----------------------------------------------------------------------------------- //
|
|
9
|
+
const BASE_TIMER_DELAY = 100;
|
|
10
|
+
export class AutofocusDirective {
|
|
11
|
+
// I initialize the autofocus directive.
|
|
12
|
+
constructor(_elementRef, keyboard) {
|
|
13
|
+
this._elementRef = _elementRef;
|
|
14
|
+
this.keyboard = keyboard;
|
|
15
|
+
this._timer = null;
|
|
16
|
+
this.shouldFocusElement = '';
|
|
17
|
+
this._timer = null;
|
|
18
|
+
this.timerDelay = BASE_TIMER_DELAY;
|
|
19
|
+
this._mobile = isMobile(window);
|
|
20
|
+
}
|
|
21
|
+
// I get called once after the contents have been fully initialized.
|
|
22
|
+
ngAfterContentInit() {
|
|
23
|
+
// Because this directive can act on the stand-only "autofocus" attribute or
|
|
24
|
+
// the more specialized "appAutofocus" property, we need to check to see if the
|
|
25
|
+
// "shouldFocusElement" input property is the empty string. This will signify
|
|
26
|
+
// that the focus it not being data-driven and should be performed automatically.
|
|
27
|
+
if (this.shouldFocusElement === '') {
|
|
28
|
+
this._startFocus();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// I get called every time the input bindings are updated.
|
|
32
|
+
ngOnChanges(changes) {
|
|
33
|
+
// If the timer delay is being passed-in as a string (ie, someone is using
|
|
34
|
+
// attribute-input syntax, not property-input syntax), let's coalesce the
|
|
35
|
+
// attribute to a numeric value so that our type-annotations are consistent.
|
|
36
|
+
if (changes.autofocusDelay && (typeof (this.timerDelay) !== 'number')) {
|
|
37
|
+
// If the coalesce fails, just fall-back to a sane value.
|
|
38
|
+
if (isNaN(this.timerDelay = +this.timerDelay)) {
|
|
39
|
+
this.timerDelay = BASE_TIMER_DELAY;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// If the focus input is being data-driven, then we either need to start the
|
|
43
|
+
// focus workflow if focus is required; or, clear any existing workflow if focus
|
|
44
|
+
// is no longer required (so that we don't steal focus from another element).
|
|
45
|
+
if (changes.appAutofocus) {
|
|
46
|
+
(this.shouldFocusElement)
|
|
47
|
+
? this._startFocus()
|
|
48
|
+
: this._stop();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// I get called once when the directive is being unmounted.
|
|
52
|
+
ngOnDestroy() {
|
|
53
|
+
this._stop();
|
|
54
|
+
}
|
|
55
|
+
/* --- private functions -- */
|
|
56
|
+
// I start the timer-based workflow that will focus the current element.
|
|
57
|
+
_startFocus() {
|
|
58
|
+
// Skip focus when keyboard is visible
|
|
59
|
+
if (this.keyboard.visible)
|
|
60
|
+
return;
|
|
61
|
+
// If there is already a timer running for this element, just let it play out -
|
|
62
|
+
// resetting it at this point will only push-out the time at which the focus is
|
|
63
|
+
// applied to the element.
|
|
64
|
+
if (this._timer)
|
|
65
|
+
return;
|
|
66
|
+
this._timer = timer(this.timerDelay)
|
|
67
|
+
.subscribe(() => {
|
|
68
|
+
if (this._timer) {
|
|
69
|
+
this._stop();
|
|
70
|
+
this._elementRef.nativeElement.focus();
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
// I stop the timer-based workflow, preventing focus from taking place.
|
|
75
|
+
_stop() {
|
|
76
|
+
this._timer?.unsubscribe();
|
|
77
|
+
this._timer = null;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
AutofocusDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: AutofocusDirective, deps: [{ token: i0.ElementRef }, { token: i1.KeyboardService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
81
|
+
AutofocusDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.1", type: AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: { shouldFocusElement: ["appAutofocus", "shouldFocusElement"], timerDelay: ["autofocusDelay", "timerDelay"] }, usesOnChanges: true, ngImport: i0 });
|
|
82
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: AutofocusDirective, decorators: [{
|
|
83
|
+
type: Directive,
|
|
84
|
+
args: [{
|
|
85
|
+
selector: '[autofocus], input[appAutofocus]',
|
|
86
|
+
inputs: [
|
|
87
|
+
'shouldFocusElement: appAutofocus',
|
|
88
|
+
'timerDelay: autofocusDelay'
|
|
89
|
+
]
|
|
90
|
+
}]
|
|
91
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.KeyboardService }]; } });
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2ZvY3VzLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL2RpcmVjdGl2ZXMvYXV0b2ZvY3VzLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQ0FBb0M7QUFDcEMsT0FBTyxFQUFtQixTQUFTLEVBQWtELE1BQU0sZUFBZSxDQUFDO0FBQzNHLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFlLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQzs7O0FBR3pDLHlGQUF5RjtBQUN6Rix5RkFBeUY7QUFFekYsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7QUFTN0IsTUFBTSxPQUFPLGtCQUFrQjtJQVE3Qix3Q0FBd0M7SUFDeEMsWUFDbUIsV0FBdUIsRUFDdkIsUUFBeUI7UUFEekIsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFMcEMsV0FBTSxHQUFpQixJQUFJLENBQUM7UUFPbEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUMsVUFBVSxHQUFHLGdCQUFnQixDQUFDO1FBQ25DLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxvRUFBb0U7SUFDcEUsa0JBQWtCO1FBRWhCLDRFQUE0RTtRQUM1RSwrRUFBK0U7UUFDL0UsNkVBQTZFO1FBQzdFLGlGQUFpRjtRQUNqRixJQUFLLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxFQUFFLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3BCO0lBQ0gsQ0FBQztJQUVELDBEQUEwRDtJQUMxRCxXQUFXLENBQUUsT0FBc0I7UUFFakMsMEVBQTBFO1FBQzFFLHlFQUF5RTtRQUN6RSw0RUFBNEU7UUFDNUUsSUFBSyxPQUFPLENBQUMsY0FBYyxJQUFJLENBQUUsT0FBTSxDQUFFLElBQUksQ0FBQyxVQUFVLENBQUUsS0FBSyxRQUFRLENBQUUsRUFBRztZQUUxRSx5REFBeUQ7WUFDekQsSUFBSyxLQUFLLENBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUUsRUFBRztnQkFDakQsSUFBSSxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQzthQUNwQztTQUNGO1FBRUQsNEVBQTRFO1FBQzVFLGdGQUFnRjtRQUNoRiw2RUFBNkU7UUFDN0UsSUFBSyxPQUFPLENBQUMsWUFBWSxFQUFHO1lBRTFCLENBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFFO2dCQUN6QixDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDcEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FDZjtTQUNGO0lBQ0gsQ0FBQztJQUVELDJEQUEyRDtJQUMzRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVELDhCQUE4QjtJQUU5Qix3RUFBd0U7SUFDaEUsV0FBVztRQUVqQixzQ0FBc0M7UUFDdEMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBRWxDLCtFQUErRTtRQUMvRSwrRUFBK0U7UUFDL0UsMEJBQTBCO1FBQzFCLElBQUssSUFBSSxDQUFDLE1BQU07WUFBSSxPQUFPO1FBRTNCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7YUFDakMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDZixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDeEM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCx1RUFBdUU7SUFDL0QsS0FBSztRQUNYLElBQUksQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDckIsQ0FBQzs7K0dBeEZVLGtCQUFrQjttR0FBbEIsa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBUDlCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtDQUFrQztvQkFDNUMsTUFBTSxFQUFFO3dCQUNOLGtDQUFrQzt3QkFDbEMsNEJBQTRCO3FCQUM3QjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydCB0aGUgY29yZSBhbmd1bGFyIHNlcnZpY2VzLlxuaW1wb3J0IHtBZnRlckNvbnRlbnRJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBTaW1wbGVDaGFuZ2VzfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7aXNNb2JpbGV9IGZyb20gJy4uL3BsYXRmb3Jtcyc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbiwgdGltZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtLZXlib2FyZFNlcnZpY2V9IGZyb20gJy4uL2NhcGFjaXRvci9rZXlib2FyZCc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG5jb25zdCBCQVNFX1RJTUVSX0RFTEFZID0gMTAwO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYXV0b2ZvY3VzXSwgaW5wdXRbYXBwQXV0b2ZvY3VzXScsXG4gIGlucHV0czogW1xuICAgICdzaG91bGRGb2N1c0VsZW1lbnQ6IGFwcEF1dG9mb2N1cycsXG4gICAgJ3RpbWVyRGVsYXk6IGF1dG9mb2N1c0RlbGF5J1xuICBdXG59KVxuZXhwb3J0IGNsYXNzIEF1dG9mb2N1c0RpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICBwdWJsaWMgc2hvdWxkRm9jdXNFbGVtZW50OiBhbnk7XG4gIHB1YmxpYyB0aW1lckRlbGF5OiBudW1iZXI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbW9iaWxlOiBib29sZWFuO1xuICBwcml2YXRlIF90aW1lcjogU3Vic2NyaXB0aW9uID0gbnVsbDtcblxuICAvLyBJIGluaXRpYWxpemUgdGhlIGF1dG9mb2N1cyBkaXJlY3RpdmUuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSBrZXlib2FyZDogS2V5Ym9hcmRTZXJ2aWNlKSB7XG5cbiAgICB0aGlzLnNob3VsZEZvY3VzRWxlbWVudCA9ICcnO1xuICAgIHRoaXMuX3RpbWVyID0gbnVsbDtcbiAgICB0aGlzLnRpbWVyRGVsYXkgPSBCQVNFX1RJTUVSX0RFTEFZO1xuICAgIHRoaXMuX21vYmlsZSA9IGlzTW9iaWxlKHdpbmRvdyk7XG4gIH1cblxuICAvLyBJIGdldCBjYWxsZWQgb25jZSBhZnRlciB0aGUgY29udGVudHMgaGF2ZSBiZWVuIGZ1bGx5IGluaXRpYWxpemVkLlxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG5cbiAgICAvLyBCZWNhdXNlIHRoaXMgZGlyZWN0aXZlIGNhbiBhY3Qgb24gdGhlIHN0YW5kLW9ubHkgXCJhdXRvZm9jdXNcIiBhdHRyaWJ1dGUgb3JcbiAgICAvLyB0aGUgbW9yZSBzcGVjaWFsaXplZCBcImFwcEF1dG9mb2N1c1wiIHByb3BlcnR5LCB3ZSBuZWVkIHRvIGNoZWNrIHRvIHNlZSBpZiB0aGVcbiAgICAvLyBcInNob3VsZEZvY3VzRWxlbWVudFwiIGlucHV0IHByb3BlcnR5IGlzIHRoZSBlbXB0eSBzdHJpbmcuIFRoaXMgd2lsbCBzaWduaWZ5XG4gICAgLy8gdGhhdCB0aGUgZm9jdXMgaXQgbm90IGJlaW5nIGRhdGEtZHJpdmVuIGFuZCBzaG91bGQgYmUgcGVyZm9ybWVkIGF1dG9tYXRpY2FsbHkuXG4gICAgaWYgKCB0aGlzLnNob3VsZEZvY3VzRWxlbWVudCA9PT0gJycpIHtcbiAgICAgIHRoaXMuX3N0YXJ0Rm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICAvLyBJIGdldCBjYWxsZWQgZXZlcnkgdGltZSB0aGUgaW5wdXQgYmluZGluZ3MgYXJlIHVwZGF0ZWQuXG4gIG5nT25DaGFuZ2VzKCBjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzICkge1xuXG4gICAgLy8gSWYgdGhlIHRpbWVyIGRlbGF5IGlzIGJlaW5nIHBhc3NlZC1pbiBhcyBhIHN0cmluZyAoaWUsIHNvbWVvbmUgaXMgdXNpbmdcbiAgICAvLyBhdHRyaWJ1dGUtaW5wdXQgc3ludGF4LCBub3QgcHJvcGVydHktaW5wdXQgc3ludGF4KSwgbGV0J3MgY29hbGVzY2UgdGhlXG4gICAgLy8gYXR0cmlidXRlIHRvIGEgbnVtZXJpYyB2YWx1ZSBzbyB0aGF0IG91ciB0eXBlLWFubm90YXRpb25zIGFyZSBjb25zaXN0ZW50LlxuICAgIGlmICggY2hhbmdlcy5hdXRvZm9jdXNEZWxheSAmJiAoIHR5cGVvZiggdGhpcy50aW1lckRlbGF5ICkgIT09ICdudW1iZXInICkgKSB7XG5cbiAgICAgIC8vIElmIHRoZSBjb2FsZXNjZSBmYWlscywganVzdCBmYWxsLWJhY2sgdG8gYSBzYW5lIHZhbHVlLlxuICAgICAgaWYgKCBpc05hTiggdGhpcy50aW1lckRlbGF5ID0gK3RoaXMudGltZXJEZWxheSApICkge1xuICAgICAgICB0aGlzLnRpbWVyRGVsYXkgPSBCQVNFX1RJTUVSX0RFTEFZO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIHRoZSBmb2N1cyBpbnB1dCBpcyBiZWluZyBkYXRhLWRyaXZlbiwgdGhlbiB3ZSBlaXRoZXIgbmVlZCB0byBzdGFydCB0aGVcbiAgICAvLyBmb2N1cyB3b3JrZmxvdyBpZiBmb2N1cyBpcyByZXF1aXJlZDsgb3IsIGNsZWFyIGFueSBleGlzdGluZyB3b3JrZmxvdyBpZiBmb2N1c1xuICAgIC8vIGlzIG5vIGxvbmdlciByZXF1aXJlZCAoc28gdGhhdCB3ZSBkb24ndCBzdGVhbCBmb2N1cyBmcm9tIGFub3RoZXIgZWxlbWVudCkuXG4gICAgaWYgKCBjaGFuZ2VzLmFwcEF1dG9mb2N1cyApIHtcblxuICAgICAgKCB0aGlzLnNob3VsZEZvY3VzRWxlbWVudCApXG4gICAgICAgID8gdGhpcy5fc3RhcnRGb2N1cygpXG4gICAgICAgIDogdGhpcy5fc3RvcCgpXG4gICAgICA7XG4gICAgfVxuICB9XG5cbiAgLy8gSSBnZXQgY2FsbGVkIG9uY2Ugd2hlbiB0aGUgZGlyZWN0aXZlIGlzIGJlaW5nIHVubW91bnRlZC5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc3RvcCgpO1xuICB9XG5cbiAgLyogLS0tIHByaXZhdGUgZnVuY3Rpb25zIC0tICovXG5cbiAgLy8gSSBzdGFydCB0aGUgdGltZXItYmFzZWQgd29ya2Zsb3cgdGhhdCB3aWxsIGZvY3VzIHRoZSBjdXJyZW50IGVsZW1lbnQuXG4gIHByaXZhdGUgX3N0YXJ0Rm9jdXMoKSB7XG5cbiAgICAvLyBTa2lwIGZvY3VzIHdoZW4ga2V5Ym9hcmQgaXMgdmlzaWJsZVxuICAgIGlmICh0aGlzLmtleWJvYXJkLnZpc2libGUpIHJldHVybjtcblxuICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSB0aW1lciBydW5uaW5nIGZvciB0aGlzIGVsZW1lbnQsIGp1c3QgbGV0IGl0IHBsYXkgb3V0IC1cbiAgICAvLyByZXNldHRpbmcgaXQgYXQgdGhpcyBwb2ludCB3aWxsIG9ubHkgcHVzaC1vdXQgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIGZvY3VzIGlzXG4gICAgLy8gYXBwbGllZCB0byB0aGUgZWxlbWVudC5cbiAgICBpZiAoIHRoaXMuX3RpbWVyICkgIHJldHVybjtcblxuICAgIHRoaXMuX3RpbWVyID0gdGltZXIodGhpcy50aW1lckRlbGF5KVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl90aW1lcikge1xuICAgICAgICAgIHRoaXMuX3N0b3AoKTtcbiAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvLyBJIHN0b3AgdGhlIHRpbWVyLWJhc2VkIHdvcmtmbG93LCBwcmV2ZW50aW5nIGZvY3VzIGZyb20gdGFraW5nIHBsYWNlLlxuICBwcml2YXRlIF9zdG9wKCkge1xuICAgIHRoaXMuX3RpbWVyPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3RpbWVyID0gbnVsbDtcbiAgfVxuXG59XG4iXX0=
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Directive, ElementRef, Inject } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
const compatibleTagNames = ['ion-label', 'mat-label'];
|
|
4
|
+
export class AutoTitleDirective {
|
|
5
|
+
constructor(elementRef) {
|
|
6
|
+
this.elementRef = elementRef;
|
|
7
|
+
// Check compatible tag
|
|
8
|
+
if (compatibleTagNames.includes(elementRef.nativeElement.tagName?.toLowerCase())) {
|
|
9
|
+
this.element = elementRef.nativeElement;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
ngAfterContentChecked() {
|
|
13
|
+
// Update title if different
|
|
14
|
+
if (this.element && this.element.title !== this.element.textContent) {
|
|
15
|
+
this.element.title = this.element.textContent;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
AutoTitleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: AutoTitleDirective, deps: [{ token: ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
20
|
+
AutoTitleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.1", type: AutoTitleDirective, selector: "[appAutoTitle]", ngImport: i0 });
|
|
21
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: AutoTitleDirective, decorators: [{
|
|
22
|
+
type: Directive,
|
|
23
|
+
args: [{
|
|
24
|
+
selector: '[appAutoTitle]',
|
|
25
|
+
}]
|
|
26
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef, decorators: [{
|
|
27
|
+
type: Inject,
|
|
28
|
+
args: [ElementRef]
|
|
29
|
+
}] }]; } });
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b3RpdGxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL2RpcmVjdGl2ZXMvYXV0b3RpdGxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUVuRixNQUFNLGtCQUFrQixHQUFHLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBS3RELE1BQU0sT0FBTyxrQkFBa0I7SUFHN0IsWUFBaUQsVUFBbUM7UUFBbkMsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFDbEYsdUJBQXVCO1FBQ3ZCLElBQUksa0JBQWtCLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUU7WUFDaEYsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQztJQUVELHFCQUFxQjtRQUNuQiw0QkFBNEI7UUFDNUIsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFO1lBQ25FLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1NBQy9DO0lBQ0gsQ0FBQzs7K0dBZlUsa0JBQWtCLGtCQUdULFVBQVU7bUdBSG5CLGtCQUFrQjsyRkFBbEIsa0JBQWtCO2tCQUg5QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7aUJBQzNCOzswQkFJYyxNQUFNOzJCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRDaGVja2VkLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5jb25zdCBjb21wYXRpYmxlVGFnTmFtZXMgPSBbJ2lvbi1sYWJlbCcsICdtYXQtbGFiZWwnXTtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2FwcEF1dG9UaXRsZV0nLFxufSlcbmV4cG9ydCBjbGFzcyBBdXRvVGl0bGVEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRDaGVja2VkIHtcbiAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50OiBIVE1MRWxlbWVudDtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KEVsZW1lbnRSZWYpIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHtcbiAgICAvLyBDaGVjayBjb21wYXRpYmxlIHRhZ1xuICAgIGlmIChjb21wYXRpYmxlVGFnTmFtZXMuaW5jbHVkZXMoZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xuICAgIC8vIFVwZGF0ZSB0aXRsZSBpZiBkaWZmZXJlbnRcbiAgICBpZiAodGhpcy5lbGVtZW50ICYmIHRoaXMuZWxlbWVudC50aXRsZSAhPT0gdGhpcy5lbGVtZW50LnRleHRDb250ZW50KSB7XG4gICAgICB0aGlzLmVsZW1lbnQudGl0bGUgPSB0aGlzLmVsZW1lbnQudGV4dENvbnRlbnQ7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { IonicModule } from '@ionic/angular';
|
|
4
|
+
import { AutofocusDirective } from './autofocus.directive';
|
|
5
|
+
import { NgVarDirective } from './ng-var.directive';
|
|
6
|
+
import { DragAndDropDirective } from './drag-and-drop.directive';
|
|
7
|
+
import { AutoTitleDirective } from './autotitle.directive';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
export class SharedDirectivesModule {
|
|
10
|
+
}
|
|
11
|
+
SharedDirectivesModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: SharedDirectivesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
12
|
+
SharedDirectivesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.1", ngImport: i0, type: SharedDirectivesModule, declarations: [AutofocusDirective,
|
|
13
|
+
NgVarDirective,
|
|
14
|
+
DragAndDropDirective,
|
|
15
|
+
AutoTitleDirective], imports: [CommonModule,
|
|
16
|
+
IonicModule], exports: [AutofocusDirective,
|
|
17
|
+
NgVarDirective,
|
|
18
|
+
DragAndDropDirective,
|
|
19
|
+
AutoTitleDirective] });
|
|
20
|
+
SharedDirectivesModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: SharedDirectivesModule, imports: [CommonModule,
|
|
21
|
+
IonicModule] });
|
|
22
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: SharedDirectivesModule, decorators: [{
|
|
23
|
+
type: NgModule,
|
|
24
|
+
args: [{
|
|
25
|
+
imports: [
|
|
26
|
+
CommonModule,
|
|
27
|
+
IonicModule
|
|
28
|
+
],
|
|
29
|
+
declarations: [
|
|
30
|
+
AutofocusDirective,
|
|
31
|
+
NgVarDirective,
|
|
32
|
+
DragAndDropDirective,
|
|
33
|
+
AutoTitleDirective
|
|
34
|
+
],
|
|
35
|
+
exports: [
|
|
36
|
+
AutofocusDirective,
|
|
37
|
+
NgVarDirective,
|
|
38
|
+
DragAndDropDirective,
|
|
39
|
+
AutoTitleDirective
|
|
40
|
+
]
|
|
41
|
+
}]
|
|
42
|
+
}] });
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aXZlcy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9kaXJlY3RpdmVzL2RpcmVjdGl2ZXMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7O0FBcUJ6RCxNQUFNLE9BQU8sc0JBQXNCOzttSEFBdEIsc0JBQXNCO29IQUF0QixzQkFBc0IsaUJBWi9CLGtCQUFrQjtRQUNsQixjQUFjO1FBQ2Qsb0JBQW9CO1FBQ3BCLGtCQUFrQixhQVBsQixZQUFZO1FBQ1osV0FBVyxhQVNYLGtCQUFrQjtRQUNsQixjQUFjO1FBQ2Qsb0JBQW9CO1FBQ3BCLGtCQUFrQjtvSEFHVCxzQkFBc0IsWUFoQi9CLFlBQVk7UUFDWixXQUFXOzJGQWVGLHNCQUFzQjtrQkFsQmxDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osV0FBVztxQkFDWjtvQkFDRCxZQUFZLEVBQUU7d0JBQ1osa0JBQWtCO3dCQUNsQixjQUFjO3dCQUNkLG9CQUFvQjt3QkFDcEIsa0JBQWtCO3FCQUNuQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1Asa0JBQWtCO3dCQUNsQixjQUFjO3dCQUNkLG9CQUFvQjt3QkFDcEIsa0JBQWtCO3FCQUNuQjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0lvbmljTW9kdWxlfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQge0F1dG9mb2N1c0RpcmVjdGl2ZX0gZnJvbSAnLi9hdXRvZm9jdXMuZGlyZWN0aXZlJztcbmltcG9ydCB7TmdWYXJEaXJlY3RpdmV9IGZyb20gJy4vbmctdmFyLmRpcmVjdGl2ZSc7XG5pbXBvcnQge0RyYWdBbmREcm9wRGlyZWN0aXZlfSBmcm9tICcuL2RyYWctYW5kLWRyb3AuZGlyZWN0aXZlJztcbmltcG9ydCB7QXV0b1RpdGxlRGlyZWN0aXZlfSBmcm9tICcuL2F1dG90aXRsZS5kaXJlY3RpdmUnO1xuXG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgSW9uaWNNb2R1bGVcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgQXV0b2ZvY3VzRGlyZWN0aXZlLFxuICAgIE5nVmFyRGlyZWN0aXZlLFxuICAgIERyYWdBbmREcm9wRGlyZWN0aXZlLFxuICAgIEF1dG9UaXRsZURpcmVjdGl2ZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgQXV0b2ZvY3VzRGlyZWN0aXZlLFxuICAgIE5nVmFyRGlyZWN0aXZlLFxuICAgIERyYWdBbmREcm9wRGlyZWN0aXZlLFxuICAgIEF1dG9UaXRsZURpcmVjdGl2ZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFNoYXJlZERpcmVjdGl2ZXNNb2R1bGUge1xufVxuIl19
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Directive, EventEmitter, HostBinding, HostListener, Output } from '@angular/core';
|
|
2
|
+
import { isNotEmptyArray } from '../functions';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class DragAndDropDirective {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.fileDropped = new EventEmitter();
|
|
7
|
+
}
|
|
8
|
+
// Dragover listener
|
|
9
|
+
onDragOver(event) {
|
|
10
|
+
event.preventDefault();
|
|
11
|
+
event.stopPropagation();
|
|
12
|
+
this.fileOver = true;
|
|
13
|
+
}
|
|
14
|
+
// Dragleave listener
|
|
15
|
+
onDragLeave(event) {
|
|
16
|
+
event.preventDefault();
|
|
17
|
+
event.stopPropagation();
|
|
18
|
+
this.fileOver = false;
|
|
19
|
+
}
|
|
20
|
+
// Drop listener
|
|
21
|
+
ondrop(event) {
|
|
22
|
+
event.preventDefault();
|
|
23
|
+
event.stopPropagation();
|
|
24
|
+
this.fileOver = false;
|
|
25
|
+
const files = event.dataTransfer?.files;
|
|
26
|
+
if (isNotEmptyArray(files)) {
|
|
27
|
+
this.fileDropped.emit(files);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
DragAndDropDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: DragAndDropDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
32
|
+
DragAndDropDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.1", type: DragAndDropDirective, selector: "[appDragAndDrop]", outputs: { fileDropped: "fileDropped" }, host: { listeners: { "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)", "drop": "ondrop($event)" }, properties: { "class.fileover": "this.fileOver" } }, ngImport: i0 });
|
|
33
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: DragAndDropDirective, decorators: [{
|
|
34
|
+
type: Directive,
|
|
35
|
+
args: [{
|
|
36
|
+
selector: '[appDragAndDrop]',
|
|
37
|
+
}]
|
|
38
|
+
}], propDecorators: { fileOver: [{
|
|
39
|
+
type: HostBinding,
|
|
40
|
+
args: ['class.fileover']
|
|
41
|
+
}], fileDropped: [{
|
|
42
|
+
type: Output
|
|
43
|
+
}], onDragOver: [{
|
|
44
|
+
type: HostListener,
|
|
45
|
+
args: ['dragover', ['$event']]
|
|
46
|
+
}], onDragLeave: [{
|
|
47
|
+
type: HostListener,
|
|
48
|
+
args: ['dragleave', ['$event']]
|
|
49
|
+
}], ondrop: [{
|
|
50
|
+
type: HostListener,
|
|
51
|
+
args: ['drop', ['$event']]
|
|
52
|
+
}] } });
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1hbmQtZHJvcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9kaXJlY3RpdmVzL2RyYWctYW5kLWRyb3AuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxjQUFjLENBQUM7O0FBVzdDLE1BQU0sT0FBTyxvQkFBb0I7SUFIakM7UUFPWSxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7S0E4QnBEO0lBNUJDLG9CQUFvQjtJQUVwQixVQUFVLENBQUMsS0FBWTtRQUNyQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxxQkFBcUI7SUFFZCxXQUFXLENBQUMsS0FBWTtRQUM3QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxnQkFBZ0I7SUFFVCxNQUFNLENBQUMsS0FBZ0I7UUFDNUIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQztRQUV4QyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM5QjtJQUNILENBQUM7O2lIQWpDVSxvQkFBb0I7cUdBQXBCLG9CQUFvQjsyRkFBcEIsb0JBQW9CO2tCQUhoQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxrQkFBa0I7aUJBQzdCOzhCQUdnQyxRQUFRO3NCQUF0QyxXQUFXO3VCQUFDLGdCQUFnQjtnQkFFbkIsV0FBVztzQkFBcEIsTUFBTTtnQkFJUCxVQUFVO3NCQURULFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVM3QixXQUFXO3NCQURqQixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFTOUIsTUFBTTtzQkFEWixZQUFZO3VCQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7aXNOb3RFbXB0eUFycmF5fSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuXG5pbnRlcmZhY2UgRHJvcEV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICBkYXRhVHJhbnNmZXI/OiB7XG4gICAgZmlsZXM/OiBGaWxlW11cbiAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYXBwRHJhZ0FuZERyb3BdJyxcbn0pXG5leHBvcnQgY2xhc3MgRHJhZ0FuZERyb3BEaXJlY3RpdmUge1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZmlsZW92ZXInKSBmaWxlT3ZlcjogYm9vbGVhbjtcblxuICBAT3V0cHV0KCkgZmlsZURyb3BwZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGVbXT4oKTtcblxuICAvLyBEcmFnb3ZlciBsaXN0ZW5lclxuICBASG9zdExpc3RlbmVyKCdkcmFnb3ZlcicsIFsnJGV2ZW50J10pXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmZpbGVPdmVyID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIERyYWdsZWF2ZSBsaXN0ZW5lclxuICBASG9zdExpc3RlbmVyKCdkcmFnbGVhdmUnLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25EcmFnTGVhdmUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmZpbGVPdmVyID0gZmFsc2U7XG4gIH1cblxuICAvLyBEcm9wIGxpc3RlbmVyXG4gIEBIb3N0TGlzdGVuZXIoJ2Ryb3AnLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25kcm9wKGV2ZW50OiBEcm9wRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuZmlsZU92ZXIgPSBmYWxzZTtcbiAgICBjb25zdCBmaWxlcyA9IGV2ZW50LmRhdGFUcmFuc2Zlcj8uZmlsZXM7XG5cbiAgICBpZiAoaXNOb3RFbXB0eUFycmF5KGZpbGVzKSkge1xuICAgICAgdGhpcy5maWxlRHJvcHBlZC5lbWl0KGZpbGVzKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class NgVarDirective {
|
|
4
|
+
constructor(templateRef, vcRef) {
|
|
5
|
+
this.templateRef = templateRef;
|
|
6
|
+
this.vcRef = vcRef;
|
|
7
|
+
this.context = {
|
|
8
|
+
$implicit: null,
|
|
9
|
+
ngVar: null,
|
|
10
|
+
};
|
|
11
|
+
this.hasView = false;
|
|
12
|
+
}
|
|
13
|
+
set ngVar(context) {
|
|
14
|
+
this.context.$implicit = this.context.ngVar = context;
|
|
15
|
+
if (!this.hasView) {
|
|
16
|
+
this.vcRef.createEmbeddedView(this.templateRef, this.context);
|
|
17
|
+
this.hasView = true;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
NgVarDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: NgVarDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
22
|
+
NgVarDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.1", type: NgVarDirective, selector: "[ngVar]", inputs: { ngVar: "ngVar" }, ngImport: i0 });
|
|
23
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: NgVarDirective, decorators: [{
|
|
24
|
+
type: Directive,
|
|
25
|
+
args: [{
|
|
26
|
+
selector: '[ngVar]',
|
|
27
|
+
}]
|
|
28
|
+
}], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; }, propDecorators: { ngVar: [{
|
|
29
|
+
type: Input
|
|
30
|
+
}] } });
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmFyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL2RpcmVjdGl2ZXMvbmctdmFyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBZ0MsTUFBTSxlQUFlLENBQUM7O0FBSzlFLE1BQU0sT0FBTyxjQUFjO0lBc0J6QixZQUNVLFdBQTZCLEVBQzdCLEtBQXVCO1FBRHZCLGdCQUFXLEdBQVgsV0FBVyxDQUFrQjtRQUM3QixVQUFLLEdBQUwsS0FBSyxDQUFrQjtRQVp6QixZQUFPLEdBR1g7WUFDRixTQUFTLEVBQUUsSUFBSTtZQUNmLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQztRQUVNLFlBQU8sR0FBWSxLQUFLLENBQUM7SUFLOUIsQ0FBQztJQXZCSixJQUNJLEtBQUssQ0FBQyxPQUFnQjtRQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7UUFFdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztTQUNyQjtJQUNILENBQUM7OzJHQVZVLGNBQWM7K0ZBQWQsY0FBYzsyRkFBZCxjQUFjO2tCQUgxQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxTQUFTO2lCQUNwQjtpSUFJSyxLQUFLO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgSW5wdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW25nVmFyXScsXG59KVxuZXhwb3J0IGNsYXNzIE5nVmFyRGlyZWN0aXZlIHtcblxuICBASW5wdXQoKVxuICBzZXQgbmdWYXIoY29udGV4dDogdW5rbm93bikge1xuICAgIHRoaXMuY29udGV4dC4kaW1wbGljaXQgPSB0aGlzLmNvbnRleHQubmdWYXIgPSBjb250ZXh0O1xuXG4gICAgaWYgKCF0aGlzLmhhc1ZpZXcpIHtcbiAgICAgIHRoaXMudmNSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYsIHRoaXMuY29udGV4dCk7XG4gICAgICB0aGlzLmhhc1ZpZXcgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29udGV4dDoge1xuICAgICRpbXBsaWNpdDogdW5rbm93bjtcbiAgICBuZ1ZhcjogdW5rbm93bjtcbiAgfSA9IHtcbiAgICAkaW1wbGljaXQ6IG51bGwsXG4gICAgbmdWYXI6IG51bGwsXG4gIH07XG5cbiAgcHJpdmF0ZSBoYXNWaWV3OiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcbiAgICBwcml2YXRlIHZjUmVmOiBWaWV3Q29udGFpbmVyUmVmXG4gICkge31cbn1cbiJdfQ==
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Component, EventEmitter, HostBinding, Input, Optional, Output } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/material/table";
|
|
4
|
+
import * as i2 from "./resizable.directive";
|
|
5
|
+
export class ResizableComponent {
|
|
6
|
+
constructor(columnDef) {
|
|
7
|
+
this.columnDef = columnDef;
|
|
8
|
+
this.sizeChanged = new EventEmitter();
|
|
9
|
+
this.width = null;
|
|
10
|
+
this.minWidth = null;
|
|
11
|
+
this.maxWidth = null;
|
|
12
|
+
this.debug = false;
|
|
13
|
+
}
|
|
14
|
+
onResize(width, opts) {
|
|
15
|
+
if (!this.resizable)
|
|
16
|
+
return;
|
|
17
|
+
if (this.debug)
|
|
18
|
+
console.info(`resize:${width}`);
|
|
19
|
+
this.minWidth = width + 'px';
|
|
20
|
+
this.maxWidth = width + 'px';
|
|
21
|
+
if (!opts || opts.emitEvent) {
|
|
22
|
+
this.sizeChanged.emit(width);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
onFit(opts) {
|
|
26
|
+
if (!this.resizable)
|
|
27
|
+
return;
|
|
28
|
+
if (this.debug)
|
|
29
|
+
console.info('fit');
|
|
30
|
+
this.width = 'auto';
|
|
31
|
+
this.minWidth = null;
|
|
32
|
+
this.maxWidth = null;
|
|
33
|
+
if (!opts || opts.emitEvent) {
|
|
34
|
+
this.sizeChanged.emit(undefined);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
ResizableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: ResizableComponent, deps: [{ token: i1.MatColumnDef, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
39
|
+
ResizableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.1", type: ResizableComponent, selector: "th[resizable]", inputs: { resizable: "resizable" }, outputs: { sizeChanged: "sizeChanged" }, host: { properties: { "style.width": "this.width", "style.min-width": "this.minWidth", "style.max-width": "this.maxWidth" } }, ngImport: i0, template: "<div class=\"wrapper\">\n <div class=\"content\">\n <ng-content></ng-content>\n </div>\n <div class=\"bar\" [class.cdk-visually-hidden]=\"!resizable\" (resizable)=\"onResize($event)\" (fit)=\"onFit()\"></div>\n</div>\n", styles: [":host:last-child .bar{display:none}.wrapper{display:flex;justify-content:flex-end;align-items:center}.content{flex:1}.bar{height:var(--app-table-header-height, 55px);width:10px;justify-self:flex-end;border-left:4px solid transparent;border-right:4px solid transparent;background:var(--ion-color-secondary);background-clip:content-box;cursor:ew-resize;opacity:0;transition:opacity .3s}.bar:hover,.bar:active{opacity:1}:host-context(.mat-table-sticky) .bar{width:12px!important}\n"], dependencies: [{ kind: "directive", type: i2.ResizableDirective, selector: "[resizable]", outputs: ["resizable", "fit"] }] });
|
|
40
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: ResizableComponent, decorators: [{
|
|
41
|
+
type: Component,
|
|
42
|
+
args: [{ selector: 'th[resizable]', template: "<div class=\"wrapper\">\n <div class=\"content\">\n <ng-content></ng-content>\n </div>\n <div class=\"bar\" [class.cdk-visually-hidden]=\"!resizable\" (resizable)=\"onResize($event)\" (fit)=\"onFit()\"></div>\n</div>\n", styles: [":host:last-child .bar{display:none}.wrapper{display:flex;justify-content:flex-end;align-items:center}.content{flex:1}.bar{height:var(--app-table-header-height, 55px);width:10px;justify-self:flex-end;border-left:4px solid transparent;border-right:4px solid transparent;background:var(--ion-color-secondary);background-clip:content-box;cursor:ew-resize;opacity:0;transition:opacity .3s}.bar:hover,.bar:active{opacity:1}:host-context(.mat-table-sticky) .bar{width:12px!important}\n"] }]
|
|
43
|
+
}], ctorParameters: function () { return [{ type: i1.MatColumnDef, decorators: [{
|
|
44
|
+
type: Optional
|
|
45
|
+
}] }]; }, propDecorators: { resizable: [{
|
|
46
|
+
type: Input
|
|
47
|
+
}], sizeChanged: [{
|
|
48
|
+
type: Output
|
|
49
|
+
}], width: [{
|
|
50
|
+
type: HostBinding,
|
|
51
|
+
args: ['style.width']
|
|
52
|
+
}], minWidth: [{
|
|
53
|
+
type: HostBinding,
|
|
54
|
+
args: ['style.min-width']
|
|
55
|
+
}], maxWidth: [{
|
|
56
|
+
type: HostBinding,
|
|
57
|
+
args: ['style.max-width']
|
|
58
|
+
}] } });
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL2RpcmVjdGl2ZXMvcmVzaXphYmxlL3Jlc2l6YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9kaXJlY3RpdmVzL3Jlc2l6YWJsZS9yZXNpemFibGUudGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFTOUYsTUFBTSxPQUFPLGtCQUFrQjtJQWU3QixZQUF3QyxTQUF1QjtRQUF2QixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBYnJELGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUduRCxVQUFLLEdBQWtCLElBQUksQ0FBQztRQUc1QixhQUFRLEdBQWtCLElBQUksQ0FBQztRQUcvQixhQUFRLEdBQWtCLElBQUksQ0FBQztRQUV2QixVQUFLLEdBQUcsS0FBSyxDQUFDO0lBRTRDLENBQUM7SUFFbkUsUUFBUSxDQUFDLEtBQWEsRUFBRSxJQUE2QjtRQUNuRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPO1FBQzVCLElBQUksSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM5QjtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsSUFBNkI7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTztRQUM1QixJQUFJLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDbEM7SUFDSCxDQUFDOzsrR0FwQ1Usa0JBQWtCO21HQUFsQixrQkFBa0IsaVFDVC9CLGtPQU1BOzJGREdhLGtCQUFrQjtrQkFOOUIsU0FBUzsrQkFFRSxlQUFlOzswQkFtQlosUUFBUTs0Q0FkWixTQUFTO3NCQUFqQixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBR1AsS0FBSztzQkFESixXQUFXO3VCQUFDLGFBQWE7Z0JBSTFCLFFBQVE7c0JBRFAsV0FBVzt1QkFBQyxpQkFBaUI7Z0JBSTlCLFFBQVE7c0JBRFAsV0FBVzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPcHRpb25hbCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRDb2x1bW5EZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ3RoW3Jlc2l6YWJsZV0nLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVzaXphYmxlLnRlbXBsYXRlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZXNpemFibGUuc3R5bGUuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBSZXNpemFibGVDb21wb25lbnQge1xuICBASW5wdXQoKSByZXNpemFibGU6IGJvb2xlYW47XG4gIEBPdXRwdXQoKSBzaXplQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIEBIb3N0QmluZGluZygnc3R5bGUud2lkdGgnKVxuICB3aWR0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5taW4td2lkdGgnKVxuICBtaW5XaWR0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5tYXgtd2lkdGgnKVxuICBtYXhXaWR0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBkZWJ1ZyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHB1YmxpYyByZWFkb25seSBjb2x1bW5EZWY6IE1hdENvbHVtbkRlZikge31cblxuICBvblJlc2l6ZSh3aWR0aDogbnVtYmVyLCBvcHRzPzogeyBlbWl0RXZlbnQ6IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5yZXNpemFibGUpIHJldHVybjtcbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5pbmZvKGByZXNpemU6JHt3aWR0aH1gKTtcbiAgICB0aGlzLm1pbldpZHRoID0gd2lkdGggKyAncHgnO1xuICAgIHRoaXMubWF4V2lkdGggPSB3aWR0aCArICdweCc7XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50KSB7XG4gICAgICB0aGlzLnNpemVDaGFuZ2VkLmVtaXQod2lkdGgpO1xuICAgIH1cbiAgfVxuXG4gIG9uRml0KG9wdHM/OiB7IGVtaXRFdmVudDogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCF0aGlzLnJlc2l6YWJsZSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmluZm8oJ2ZpdCcpO1xuICAgIHRoaXMud2lkdGggPSAnYXV0byc7XG4gICAgdGhpcy5taW5XaWR0aCA9IG51bGw7XG4gICAgdGhpcy5tYXhXaWR0aCA9IG51bGw7XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50KSB7XG4gICAgICB0aGlzLnNpemVDaGFuZ2VkLmVtaXQodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XG4gIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImJhclwiIFtjbGFzcy5jZGstdmlzdWFsbHktaGlkZGVuXT1cIiFyZXNpemFibGVcIiAocmVzaXphYmxlKT1cIm9uUmVzaXplKCRldmVudClcIiAoZml0KT1cIm9uRml0KClcIj48L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { DOCUMENT } from '@angular/common';
|
|
2
|
+
import { Directive, ElementRef, Inject, Output } from '@angular/core';
|
|
3
|
+
import { bufferWhen, distinctUntilChanged, filter, map, switchMap, takeUntil, tap } from 'rxjs/operators';
|
|
4
|
+
import { fromEvent, interval } from 'rxjs';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class ResizableDirective {
|
|
7
|
+
constructor(document, elementRef) {
|
|
8
|
+
this.document = document;
|
|
9
|
+
this.elementRef = elementRef;
|
|
10
|
+
// resize: mousedown -> mousemove -> mouseup
|
|
11
|
+
this.resizable = fromEvent(this.elementRef.nativeElement, 'mousedown').pipe(tap((e) => {
|
|
12
|
+
e.preventDefault();
|
|
13
|
+
e.stopPropagation();
|
|
14
|
+
}), switchMap(() => {
|
|
15
|
+
const { width, right } = this.elementRef.nativeElement.closest('th').getBoundingClientRect();
|
|
16
|
+
return fromEvent(this.document, 'mousemove').pipe(map(({ clientX }) => width + clientX - right), distinctUntilChanged(), takeUntil(fromEvent(this.document, 'mouseup')));
|
|
17
|
+
}));
|
|
18
|
+
// fit: doubleclick
|
|
19
|
+
this.fit = fromEvent(this.elementRef.nativeElement, 'click').pipe(bufferWhen(() => interval(500)), filter((ar) => ar.length === 2));
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
ResizableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: ResizableDirective, deps: [{ token: DOCUMENT }, { token: ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
23
|
+
ResizableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.1", type: ResizableDirective, selector: "[resizable]", outputs: { resizable: "resizable", fit: "fit" }, ngImport: i0 });
|
|
24
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: ResizableDirective, decorators: [{
|
|
25
|
+
type: Directive,
|
|
26
|
+
args: [{
|
|
27
|
+
selector: '[resizable]',
|
|
28
|
+
}]
|
|
29
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
30
|
+
type: Inject,
|
|
31
|
+
args: [DOCUMENT]
|
|
32
|
+
}] }, { type: i0.ElementRef, decorators: [{
|
|
33
|
+
type: Inject,
|
|
34
|
+
args: [ElementRef]
|
|
35
|
+
}] }]; }, propDecorators: { resizable: [{
|
|
36
|
+
type: Output
|
|
37
|
+
}], fit: [{
|
|
38
|
+
type: Output
|
|
39
|
+
}] } });
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL2RpcmVjdGl2ZXMvcmVzaXphYmxlL3Jlc2l6YWJsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUcsT0FBTyxFQUFDLFNBQVMsRUFBRSxRQUFRLEVBQWEsTUFBTSxNQUFNLENBQUM7O0FBS3JELE1BQU0sT0FBTyxrQkFBa0I7SUFTN0IsWUFBK0MsUUFBYSxFQUNYLFVBQW1DO1FBRHJDLGFBQVEsR0FBUixRQUFRLENBQUs7UUFDWCxlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUVsRiw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQWEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUNyRixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNSLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNuQixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDN0YsT0FBTyxTQUFTLENBQWEsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQzNELEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssR0FBRyxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQzdDLG9CQUFvQixFQUFFLEVBQ3RCLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUMvQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVGLG1CQUFtQjtRQUNuQixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBYSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQzNFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDL0IsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUNoQyxDQUFDO0lBQ0osQ0FBQzs7K0dBakNVLGtCQUFrQixrQkFTVCxRQUFRLGFBQ1IsVUFBVTttR0FWbkIsa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBSDlCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGFBQWE7aUJBQ3hCOzswQkFVYyxNQUFNOzJCQUFDLFFBQVE7OzBCQUNmLE1BQU07MkJBQUMsVUFBVTs0Q0FQckIsU0FBUztzQkFEakIsTUFBTTtnQkFLRSxHQUFHO3NCQURYLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEluamVjdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBidWZmZXJXaGVuLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge2Zyb21FdmVudCwgaW50ZXJ2YWwsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbcmVzaXphYmxlXScsXG59KVxuZXhwb3J0IGNsYXNzIFJlc2l6YWJsZURpcmVjdGl2ZSB7XG5cbiAgQE91dHB1dCgpXG4gIHJlYWRvbmx5IHJlc2l6YWJsZTogT2JzZXJ2YWJsZTxudW1iZXI+O1xuXG4gIC8vIGZpdDogZG91YmxlY2xpY2tcbiAgQE91dHB1dCgpXG4gIHJlYWRvbmx5IGZpdDogT2JzZXJ2YWJsZTxNb3VzZUV2ZW50W10+XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudDogYW55LFxuICAgICAgICAgICAgICBASW5qZWN0KEVsZW1lbnRSZWYpIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHtcblxuICAgIC8vIHJlc2l6ZTogbW91c2Vkb3duIC0+IG1vdXNlbW92ZSAtPiBtb3VzZXVwXG4gICAgdGhpcy5yZXNpemFibGUgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWRvd24nKS5waXBlKFxuICAgICAgdGFwKChlKSA9PiB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH0pLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgcmlnaHQgfSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ3RoJykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHJldHVybiBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5kb2N1bWVudCwgJ21vdXNlbW92ZScpLnBpcGUoXG4gICAgICAgICAgbWFwKCh7IGNsaWVudFggfSkgPT4gd2lkdGggKyBjbGllbnRYIC0gcmlnaHQpLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgdGFrZVVudGlsKGZyb21FdmVudCh0aGlzLmRvY3VtZW50LCAnbW91c2V1cCcpKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gZml0OiBkb3VibGVjbGlja1xuICAgIHRoaXMuZml0ID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnY2xpY2snKS5waXBlKFxuICAgICAgYnVmZmVyV2hlbigoKSA9PiBpbnRlcnZhbCg1MDApKSxcbiAgICAgIGZpbHRlcigoYXIpID0+IGFyLmxlbmd0aCA9PT0gMilcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { ResizableComponent } from './resizable.component';
|
|
3
|
+
import { ResizableDirective } from './resizable.directive';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class ResizableModule {
|
|
6
|
+
}
|
|
7
|
+
ResizableModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: ResizableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
8
|
+
ResizableModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.1", ngImport: i0, type: ResizableModule, declarations: [ResizableComponent, ResizableDirective], exports: [ResizableComponent, ResizableDirective] });
|
|
9
|
+
ResizableModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: ResizableModule });
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: ResizableModule, decorators: [{
|
|
11
|
+
type: NgModule,
|
|
12
|
+
args: [{
|
|
13
|
+
declarations: [ResizableComponent, ResizableDirective],
|
|
14
|
+
exports: [ResizableComponent, ResizableDirective],
|
|
15
|
+
}]
|
|
16
|
+
}] });
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL2RpcmVjdGl2ZXMvcmVzaXphYmxlL3Jlc2l6YWJsZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFNM0QsTUFBTSxPQUFPLGVBQWU7OzRHQUFmLGVBQWU7NkdBQWYsZUFBZSxpQkFIWCxrQkFBa0IsRUFBRSxrQkFBa0IsYUFDM0Msa0JBQWtCLEVBQUUsa0JBQWtCOzZHQUVyQyxlQUFlOzJGQUFmLGVBQWU7a0JBSjNCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUM7b0JBQ3RELE9BQU8sRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDO2lCQUNsRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXNpemFibGVDb21wb25lbnQgfSBmcm9tICcuL3Jlc2l6YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVzaXphYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi9yZXNpemFibGUuZGlyZWN0aXZlJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbUmVzaXphYmxlQ29tcG9uZW50LCBSZXNpemFibGVEaXJlY3RpdmVdLFxuICBleHBvcnRzOiBbUmVzaXphYmxlQ29tcG9uZW50LCBSZXNpemFibGVEaXJlY3RpdmVdLFxufSlcbmV4cG9ydCBjbGFzcyBSZXNpemFibGVNb2R1bGUge31cbiJdfQ==
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { fromEvent, merge, timer } from 'rxjs';
|
|
3
|
+
import { filter } from 'rxjs/operators';
|
|
4
|
+
export function createPromiseEventEmitter() {
|
|
5
|
+
return new EventEmitter(true);
|
|
6
|
+
}
|
|
7
|
+
export function createPromiseEvent(eventType, promise, initArg) {
|
|
8
|
+
const detail = {
|
|
9
|
+
...(initArg && initArg.detail || {}),
|
|
10
|
+
...promise
|
|
11
|
+
};
|
|
12
|
+
return new CustomEvent(eventType, { detail });
|
|
13
|
+
}
|
|
14
|
+
export function emitPromiseEvent(emitter, eventType, initArg) {
|
|
15
|
+
return new Promise((resolve, reject) => {
|
|
16
|
+
const event = createPromiseEvent(eventType, {
|
|
17
|
+
success: resolve,
|
|
18
|
+
error: reject
|
|
19
|
+
}, initArg);
|
|
20
|
+
emitter.emit(event);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Listen end of scroll.
|
|
25
|
+
* <p>
|
|
26
|
+
* The threshold distance from the bottom of the content to call the infinite output event when scrolled.
|
|
27
|
+
* The threshold value can be either a percent, or in pixels.
|
|
28
|
+
* For example, use the value of 10% for the infinite output event to get called when the user has scrolled
|
|
29
|
+
* 10% from the bottom of the page. Use the value 100px when the scroll is within 100 pixels from the bottom of the page.
|
|
30
|
+
* </p>
|
|
31
|
+
* @param element
|
|
32
|
+
* @param threshold default to '15%'
|
|
33
|
+
*/
|
|
34
|
+
export function fromScrollEndEvent(element, threshold, dueTime) {
|
|
35
|
+
threshold = threshold || '15%';
|
|
36
|
+
let isEnd;
|
|
37
|
+
// Listen using percentage
|
|
38
|
+
if (threshold.endsWith('%')) {
|
|
39
|
+
const thresholdRatio = parseInt(threshold.slice(0, threshold.length - 1)) / 100;
|
|
40
|
+
isEnd = () => {
|
|
41
|
+
const endPosRatio = 1 - (element.scrollTop + element.offsetHeight) / element.scrollHeight;
|
|
42
|
+
return endPosRatio < thresholdRatio;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
// Listen using pixels
|
|
46
|
+
else if (threshold.endsWith('px')) {
|
|
47
|
+
const thresholdPx = parseInt(threshold.slice(0, threshold.length - 2));
|
|
48
|
+
isEnd = () => {
|
|
49
|
+
const endPosPx = element.scrollHeight - (element.scrollTop + element.offsetHeight);
|
|
50
|
+
return endPosPx < thresholdPx;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
throw new Error('Invalid argument \'threshold\'. Expected value unit: \'px\' or \'%\' ');
|
|
55
|
+
}
|
|
56
|
+
// Check bottom reach, even if NO scroll event (e.g. when already reach the bottom)
|
|
57
|
+
if (dueTime > 0) {
|
|
58
|
+
return merge(fromEvent(element, 'scroll'), timer(dueTime))
|
|
59
|
+
.pipe(filter(() => isEnd()));
|
|
60
|
+
}
|
|
61
|
+
return fromEvent(element, 'scroll')
|
|
62
|
+
.pipe(filter(() => isEnd()));
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZXZlbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQWMsS0FBSyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBQyxNQUFNLEVBQVksTUFBTSxnQkFBZ0IsQ0FBQztBQVNqRCxNQUFNLFVBQVUseUJBQXlCO0lBQ3ZDLE9BQU8sSUFBSSxZQUFZLENBQXFCLElBQUksQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQXFCLFNBQWlCLEVBQ2xCLE9BQStCLEVBQy9CLE9BQTRCO0lBR2hGLE1BQU0sTUFBTSxHQUE0QjtRQUN0QyxHQUFHLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ3BDLEdBQUcsT0FBTztLQUNYLENBQUM7SUFDRixPQUFPLElBQUksV0FBVyxDQUE2QixTQUFTLEVBQUUsRUFBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQW9CLE9BQXlDLEVBQzFDLFNBQWlCLEVBQ2pCLE9BQTRCO0lBQzdFLE9BQU8sSUFBSSxPQUFPLENBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDeEMsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxFQUFFO1lBQzFDLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLEtBQUssRUFBRSxNQUFNO1NBQ2QsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNaLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBTUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxPQUFvQixFQUFFLFNBQWtCLEVBQUUsT0FBZ0I7SUFFM0YsU0FBUyxHQUFHLFNBQVMsSUFBSSxLQUFLLENBQUM7SUFDL0IsSUFBSSxLQUFvQixDQUFDO0lBRXpCLDBCQUEwQjtJQUMxQixJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDM0IsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDaEYsS0FBSyxHQUFHLEdBQUcsRUFBRTtZQUNYLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7WUFDMUYsT0FBTyxXQUFXLEdBQUcsY0FBYyxDQUFDO1FBQ3RDLENBQUMsQ0FBQztLQUNIO0lBRUQsc0JBQXNCO1NBQ2pCLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNqQyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLEtBQUssR0FBRyxHQUFHLEVBQUU7WUFDWCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsWUFBWSxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDbkYsT0FBTyxRQUFRLEdBQUcsV0FBVyxDQUFDO1FBQ2hDLENBQUMsQ0FBQztLQUNIO1NBQ0k7UUFDSCxNQUFNLElBQUksS0FBSyxDQUFDLHVFQUF1RSxDQUFDLENBQUE7S0FDekY7SUFFRCxtRkFBbUY7SUFDbkYsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFO1FBQ2YsT0FBTyxLQUFLLENBQ1YsU0FBUyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFDNUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUNmO2FBQ0UsSUFBSSxDQUNILE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUN0QixDQUFDO0tBQ0w7SUFFRCxPQUFPLFNBQVMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDO1NBQ2hDLElBQUksQ0FDSCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FDdEIsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0V2ZW50RW1pdHRlcn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2Zyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUsIHRpbWVyfSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZmlsdGVyLCBzdGFydFdpdGh9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGludGVyZmFjZSBQcm9taXNlRXZlbnRQYXlsb2FkPFQgPSBhbnk+IHtcbiAgc3VjY2VzczogKFQpID0+IHZvaWQ7XG4gIGVycm9yOiAoZXJyOiBhbnkpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIFByb21pc2VFdmVudDxUID0gYW55LCBEID0gdm9pZD4gPSBDdXN0b21FdmVudDxQcm9taXNlRXZlbnRQYXlsb2FkPFQ+ICYgRD47XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9taXNlRXZlbnRFbWl0dGVyPFQgPSBhbnksIEQgPSB2b2lkPigpOiBFdmVudEVtaXR0ZXI8UHJvbWlzZUV2ZW50PFQsIEQ+PiB7XG4gIHJldHVybiBuZXcgRXZlbnRFbWl0dGVyPFByb21pc2VFdmVudDxULCBEPj4odHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9taXNlRXZlbnQ8VCA9IHZvaWQsIEQgPSB2b2lkPihldmVudFR5cGU6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2U6IFByb21pc2VFdmVudFBheWxvYWQ8VD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0QXJnPzogQ3VzdG9tRXZlbnRJbml0PEQ+XG4gICk6IFByb21pc2VFdmVudDxULCBEPiB7XG5cbiAgY29uc3QgZGV0YWlsID0gPFByb21pc2VFdmVudFBheWxvYWQgJiBEPntcbiAgICAuLi4oaW5pdEFyZyAmJiBpbml0QXJnLmRldGFpbCB8fCB7fSksXG4gICAgLi4ucHJvbWlzZVxuICB9O1xuICByZXR1cm4gbmV3IEN1c3RvbUV2ZW50PFByb21pc2VFdmVudFBheWxvYWQ8VD4gJiBEPihldmVudFR5cGUsIHtkZXRhaWx9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtaXRQcm9taXNlRXZlbnQ8VCA9IGFueSwgRCA9IHZvaWQ+KGVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxQcm9taXNlRXZlbnQ8VCwgRD4+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0QXJnPzogQ3VzdG9tRXZlbnRJbml0PEQ+KTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgZXZlbnQgPSBjcmVhdGVQcm9taXNlRXZlbnQoZXZlbnRUeXBlLCB7XG4gICAgICBzdWNjZXNzOiByZXNvbHZlLFxuICAgICAgZXJyb3I6IHJlamVjdFxuICAgIH0sIGluaXRBcmcpO1xuICAgIGVtaXR0ZXIuZW1pdChldmVudCk7XG4gIH0pO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsZXRhYmxlRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gIHRhcmdldDogRXZlbnRUYXJnZXQgJiB7IGNvbXBsZXRlPzogKCkgPT4gdm9pZCB9O1xufVxuXG4vKipcbiAqIExpc3RlbiBlbmQgb2Ygc2Nyb2xsLlxuICogPHA+XG4gKiAgIFRoZSB0aHJlc2hvbGQgZGlzdGFuY2UgZnJvbSB0aGUgYm90dG9tIG9mIHRoZSBjb250ZW50IHRvIGNhbGwgdGhlIGluZmluaXRlIG91dHB1dCBldmVudCB3aGVuIHNjcm9sbGVkLlxuICogICBUaGUgdGhyZXNob2xkIHZhbHVlIGNhbiBiZSBlaXRoZXIgYSBwZXJjZW50LCBvciBpbiBwaXhlbHMuXG4gKiAgIEZvciBleGFtcGxlLCB1c2UgdGhlIHZhbHVlIG9mIDEwJSBmb3IgdGhlIGluZmluaXRlIG91dHB1dCBldmVudCB0byBnZXQgY2FsbGVkIHdoZW4gdGhlIHVzZXIgaGFzIHNjcm9sbGVkXG4gKiAgIDEwJSBmcm9tIHRoZSBib3R0b20gb2YgdGhlIHBhZ2UuIFVzZSB0aGUgdmFsdWUgMTAwcHggd2hlbiB0aGUgc2Nyb2xsIGlzIHdpdGhpbiAxMDAgcGl4ZWxzIGZyb20gdGhlIGJvdHRvbSBvZiB0aGUgcGFnZS5cbiAqIDwvcD5cbiAqIEBwYXJhbSBlbGVtZW50XG4gKiBAcGFyYW0gdGhyZXNob2xkIGRlZmF1bHQgdG8gJzE1JSdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21TY3JvbGxFbmRFdmVudChlbGVtZW50OiBIVE1MRWxlbWVudCwgdGhyZXNob2xkPzogc3RyaW5nLCBkdWVUaW1lPzogbnVtYmVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICB0aHJlc2hvbGQgPSB0aHJlc2hvbGQgfHwgJzE1JSc7XG4gIGxldCBpc0VuZDogKCkgPT4gYm9vbGVhbjtcblxuICAvLyBMaXN0ZW4gdXNpbmcgcGVyY2VudGFnZVxuICBpZiAodGhyZXNob2xkLmVuZHNXaXRoKCclJykpIHtcbiAgICBjb25zdCB0aHJlc2hvbGRSYXRpbyA9IHBhcnNlSW50KHRocmVzaG9sZC5zbGljZSgwLCB0aHJlc2hvbGQubGVuZ3RoIC0gMSkpIC8gMTAwO1xuICAgIGlzRW5kID0gKCkgPT4ge1xuICAgICAgY29uc3QgZW5kUG9zUmF0aW8gPSAxIC0gKGVsZW1lbnQuc2Nyb2xsVG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQpIC8gZWxlbWVudC5zY3JvbGxIZWlnaHQ7XG4gICAgICByZXR1cm4gZW5kUG9zUmF0aW8gPCB0aHJlc2hvbGRSYXRpbztcbiAgICB9O1xuICB9XG5cbiAgLy8gTGlzdGVuIHVzaW5nIHBpeGVsc1xuICBlbHNlIGlmICh0aHJlc2hvbGQuZW5kc1dpdGgoJ3B4JykpIHtcbiAgICBjb25zdCB0aHJlc2hvbGRQeCA9IHBhcnNlSW50KHRocmVzaG9sZC5zbGljZSgwLCB0aHJlc2hvbGQubGVuZ3RoIC0gMikpO1xuICAgIGlzRW5kID0gKCkgPT4ge1xuICAgICAgY29uc3QgZW5kUG9zUHggPSBlbGVtZW50LnNjcm9sbEhlaWdodCAtIChlbGVtZW50LnNjcm9sbFRvcCArIGVsZW1lbnQub2Zmc2V0SGVpZ2h0KTtcbiAgICAgIHJldHVybiBlbmRQb3NQeCA8IHRocmVzaG9sZFB4O1xuICAgIH07XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50IFxcJ3RocmVzaG9sZFxcJy4gRXhwZWN0ZWQgdmFsdWUgdW5pdDogXFwncHhcXCcgb3IgXFwnJVxcJyAnKVxuICB9XG5cbiAgLy8gQ2hlY2sgYm90dG9tIHJlYWNoLCBldmVuIGlmIE5PIHNjcm9sbCBldmVudCAoZS5nLiB3aGVuIGFscmVhZHkgcmVhY2ggdGhlIGJvdHRvbSlcbiAgaWYgKGR1ZVRpbWUgPiAwKSB7XG4gICAgcmV0dXJuIG1lcmdlKFxuICAgICAgZnJvbUV2ZW50KGVsZW1lbnQsICdzY3JvbGwnKSxcbiAgICAgIHRpbWVyKGR1ZVRpbWUpXG4gICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiBpc0VuZCgpKVxuICAgICAgKTtcbiAgfVxuXG4gIHJldHVybiBmcm9tRXZlbnQoZWxlbWVudCwgJ3Njcm9sbCcpXG4gICAgLnBpcGUoXG4gICAgICBmaWx0ZXIoKCkgPT4gaXNFbmQoKSlcbiAgICApO1xufVxuIl19
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { filter, map } from 'rxjs/operators';
|
|
2
|
+
import { HttpEventType } from '@angular/common/http';
|
|
3
|
+
import { FileResponse } from '../upload-file/upload-file.model';
|
|
4
|
+
import { FilesUtils } from './file.utils';
|
|
5
|
+
import { isNotNil } from '../functions';
|
|
6
|
+
//@dynamic
|
|
7
|
+
export class CsvUtils {
|
|
8
|
+
static exportToFile(rows, opts) {
|
|
9
|
+
if (!rows || !rows.length)
|
|
10
|
+
return; // Skip if empty
|
|
11
|
+
// Create text content
|
|
12
|
+
const separator = opts?.separator || ',';
|
|
13
|
+
const protectCellRegexp = new RegExp("/(\"|" + separator + "|\n)/g");
|
|
14
|
+
const keys = Object.keys(rows[0]);
|
|
15
|
+
const headers = opts?.headers || keys;
|
|
16
|
+
const textContent =
|
|
17
|
+
// Header row
|
|
18
|
+
headers.join(separator) + '\n' +
|
|
19
|
+
// Data rows
|
|
20
|
+
rows.map(row => {
|
|
21
|
+
return keys.map(k => {
|
|
22
|
+
const cell = row[k] === null || row[k] === undefined ? '' : row[k];
|
|
23
|
+
let cellStr = cell instanceof Date
|
|
24
|
+
? cell.toLocaleString()
|
|
25
|
+
: cell.toString().replace(/"/g, '""');
|
|
26
|
+
if (protectCellRegexp.test(cellStr)) {
|
|
27
|
+
cellStr = `"${cellStr}"`;
|
|
28
|
+
}
|
|
29
|
+
return cellStr;
|
|
30
|
+
}).join(separator);
|
|
31
|
+
}).join('\n');
|
|
32
|
+
// Write to file
|
|
33
|
+
FilesUtils.writeTextToFile(textContent, {
|
|
34
|
+
type: 'text/csv',
|
|
35
|
+
filename: 'export.csv',
|
|
36
|
+
...opts,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
static parseFile(file, opts) {
|
|
40
|
+
return FilesUtils.readAsText(file, opts?.encoding)
|
|
41
|
+
.pipe(map(e => {
|
|
42
|
+
if (e.type === HttpEventType.UploadProgress) {
|
|
43
|
+
const loaded = Math.round(e.loaded * 0.8);
|
|
44
|
+
return { ...e, loaded };
|
|
45
|
+
}
|
|
46
|
+
else if (e instanceof FileResponse) {
|
|
47
|
+
const body = e.body;
|
|
48
|
+
const data = CsvUtils.parseCSV(body, opts);
|
|
49
|
+
return new FileResponse({ body: data });
|
|
50
|
+
}
|
|
51
|
+
}), filter(isNotNil));
|
|
52
|
+
}
|
|
53
|
+
static parseCSV(body, opts) {
|
|
54
|
+
const separator = opts?.separator || ',';
|
|
55
|
+
const skipEmptyLine = !opts || opts.skipEmptyLine !== false;
|
|
56
|
+
// Protect special characters (quote and /n)
|
|
57
|
+
body = body.replace('""', '<quote>') // Protect double quote
|
|
58
|
+
.replace(/("[^\n"]+)\n\r?/gm, '"$1<br>') // Protect \n inside a quoted expression
|
|
59
|
+
.replace(/\n\r/gm, '\n'); // Windows CR
|
|
60
|
+
const headerAndRows = body.split('\n', 2);
|
|
61
|
+
const headers = headerAndRows[0].split(separator);
|
|
62
|
+
return body.split('\n') // split into rows
|
|
63
|
+
.filter(line => !skipEmptyLine || line.trim().length > 0) // Skip empty line
|
|
64
|
+
.map(line => {
|
|
65
|
+
const cells = line.split(separator, headers.length) // split into cells
|
|
66
|
+
.map(cell => cell.replace(/^"([^"]*)"$/, '$1')) // Clean trailing quotes
|
|
67
|
+
.map(cell => cell.replace('<quote>', '"')) // restore protected quote
|
|
68
|
+
.map(cell => cell.replace('<br>', '\n')) // restore protected br
|
|
69
|
+
;
|
|
70
|
+
return cells;
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3N2LnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZmlsZS9jc3YudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFZLFlBQVksRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUV0QyxVQUFVO0FBQ1YsTUFBTSxPQUFPLFFBQVE7SUFFbkIsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFjLEVBQ2QsSUFNQztRQUNuQixJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLENBQUMsZ0JBQWdCO1FBRW5ELHNCQUFzQjtRQUN0QixNQUFNLFNBQVMsR0FBRyxJQUFJLEVBQUUsU0FBUyxJQUFJLEdBQUcsQ0FBQztRQUN6QyxNQUFNLGlCQUFpQixHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sR0FBRSxTQUFTLEdBQUUsUUFBUSxDQUFDLENBQUM7UUFDbkUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxNQUFNLE9BQU8sR0FBRyxJQUFJLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQztRQUN0QyxNQUFNLFdBQVc7UUFDZixhQUFhO1FBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJO1lBQzlCLFlBQVk7WUFDWixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNiLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDbEIsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbkUsSUFBSSxPQUFPLEdBQVcsSUFBSSxZQUFZLElBQUk7d0JBQ3hDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO3dCQUN2QixDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3hDLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUNuQyxPQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUcsQ0FBQztxQkFDMUI7b0JBQ0QsT0FBTyxPQUFPLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNyQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFaEIsZ0JBQWdCO1FBQ2hCLFVBQVUsQ0FBQyxlQUFlLENBQ3hCLFdBQVcsRUFBRTtZQUNYLElBQUksRUFBRSxVQUFVO1lBQ2hCLFFBQVEsRUFBRSxZQUFZO1lBQ3RCLEdBQUcsSUFBSTtTQUNSLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLElBQVUsRUFBRSxJQUErQztRQUMxRSxPQUFPLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUM7YUFDL0MsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsY0FBYyxFQUFFO2dCQUMzQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7Z0JBQzFDLE9BQU8sRUFBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUMsQ0FBQzthQUN2QjtpQkFDSSxJQUFJLENBQUMsWUFBWSxZQUFZLEVBQUM7Z0JBQ2pDLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3BCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUMzQyxPQUFPLElBQUksWUFBWSxDQUFhLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7YUFDbkQ7UUFDSCxDQUFDLENBQUMsRUFDRixNQUFNLENBQUMsUUFBUSxDQUFDLENBQ2pCLENBQUM7SUFDTixDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFZLEVBQUUsSUFBb0Q7UUFDaEYsTUFBTSxTQUFTLEdBQUcsSUFBSSxFQUFFLFNBQVMsSUFBSSxHQUFHLENBQUM7UUFDekMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxLQUFLLENBQUM7UUFFNUQsNENBQTRDO1FBQzVDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyx1QkFBdUI7YUFDekQsT0FBTyxDQUFDLG1CQUFtQixFQUFFLFNBQVMsQ0FBQyxDQUFDLHdDQUF3QzthQUNoRixPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUMsYUFBYTtRQUV4QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxQyxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWxELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxrQkFBa0I7YUFDdkMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxrQkFBa0I7YUFDM0UsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ1YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLG1CQUFtQjtpQkFDcEUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7aUJBQ3ZFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsMEJBQTBCO2lCQUNwRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLHVCQUF1QjthQUNqRTtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXIsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtIdHRwRXZlbnRUeXBlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0ZpbGVFdmVudCwgRmlsZVJlc3BvbnNlfSBmcm9tICcuLi91cGxvYWQtZmlsZS91cGxvYWQtZmlsZS5tb2RlbCc7XG5pbXBvcnQge0ZpbGVzVXRpbHN9IGZyb20gJy4vZmlsZS51dGlscyc7XG5pbXBvcnQge2lzTm90TmlsfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuXG4vL0BkeW5hbWljXG5leHBvcnQgY2xhc3MgQ3N2VXRpbHMge1xuXG4gIHN0YXRpYyBleHBvcnRUb0ZpbGUocm93czogb2JqZWN0W10sXG4gICAgICAgICAgICAgICAgICAgICAgb3B0cz86IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz86IHN0cmluZ1tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdG9yPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgIH0pIHtcbiAgICBpZiAoIXJvd3MgfHwgIXJvd3MubGVuZ3RoKSByZXR1cm47IC8vIFNraXAgaWYgZW1wdHlcblxuICAgIC8vIENyZWF0ZSB0ZXh0IGNvbnRlbnRcbiAgICBjb25zdCBzZXBhcmF0b3IgPSBvcHRzPy5zZXBhcmF0b3IgfHwgJywnO1xuICAgIGNvbnN0IHByb3RlY3RDZWxsUmVnZXhwID0gbmV3IFJlZ0V4cChcIi8oXFxcInxcIisgc2VwYXJhdG9yICtcInxcXG4pL2dcIik7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJvd3NbMF0pO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBvcHRzPy5oZWFkZXJzIHx8IGtleXM7XG4gICAgY29uc3QgdGV4dENvbnRlbnQgPVxuICAgICAgLy8gSGVhZGVyIHJvd1xuICAgICAgaGVhZGVycy5qb2luKHNlcGFyYXRvcikgKyAnXFxuJyArXG4gICAgICAvLyBEYXRhIHJvd3NcbiAgICAgIHJvd3MubWFwKHJvdyA9PiB7XG4gICAgICAgIHJldHVybiBrZXlzLm1hcChrID0+IHtcbiAgICAgICAgICBjb25zdCBjZWxsID0gcm93W2tdID09PSBudWxsIHx8IHJvd1trXSA9PT0gdW5kZWZpbmVkID8gJycgOiByb3dba107XG4gICAgICAgICAgbGV0IGNlbGxTdHI6IHN0cmluZyA9IGNlbGwgaW5zdGFuY2VvZiBEYXRlXG4gICAgICAgICAgICA/IGNlbGwudG9Mb2NhbGVTdHJpbmcoKVxuICAgICAgICAgICAgOiBjZWxsLnRvU3RyaW5nKCkucmVwbGFjZSgvXCIvZywgJ1wiXCInKTtcbiAgICAgICAgICBpZiAocHJvdGVjdENlbGxSZWdleHAudGVzdChjZWxsU3RyKSkge1xuICAgICAgICAgICAgY2VsbFN0ciA9IGBcIiR7Y2VsbFN0cn1cImA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjZWxsU3RyO1xuICAgICAgICB9KS5qb2luKHNlcGFyYXRvcik7XG4gICAgICB9KS5qb2luKCdcXG4nKTtcblxuICAgIC8vIFdyaXRlIHRvIGZpbGVcbiAgICBGaWxlc1V0aWxzLndyaXRlVGV4dFRvRmlsZShcbiAgICAgIHRleHRDb250ZW50LCB7XG4gICAgICAgIHR5cGU6ICd0ZXh0L2NzdicsXG4gICAgICAgIGZpbGVuYW1lOiAnZXhwb3J0LmNzdicsXG4gICAgICAgIC4uLm9wdHMsXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZUZpbGUoZmlsZTogRmlsZSwgb3B0cz86IHtzZXBhcmF0b3I/OiBzdHJpbmc7IGVuY29kaW5nPzogc3RyaW5nO30pOiBPYnNlcnZhYmxlPEZpbGVFdmVudDxzdHJpbmdbXVtdPj4ge1xuICAgIHJldHVybiBGaWxlc1V0aWxzLnJlYWRBc1RleHQoZmlsZSwgb3B0cz8uZW5jb2RpbmcpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKGUgPT4ge1xuICAgICAgICAgIGlmIChlLnR5cGUgPT09IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvYWRlZCA9IE1hdGgucm91bmQoZS5sb2FkZWQgKiAwLjgpO1xuICAgICAgICAgICAgcmV0dXJuIHsuLi5lLCBsb2FkZWR9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChlIGluc3RhbmNlb2YgRmlsZVJlc3BvbnNlKXtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBlLmJvZHk7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gQ3N2VXRpbHMucGFyc2VDU1YoYm9keSwgb3B0cyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVSZXNwb25zZTxzdHJpbmdbXVtdPih7Ym9keTogZGF0YX0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIGZpbHRlcihpc05vdE5pbClcbiAgICAgICk7XG4gIH1cblxuICBzdGF0aWMgcGFyc2VDU1YoYm9keTogc3RyaW5nLCBvcHRzPzoge3NlcGFyYXRvcj86IHN0cmluZzsgc2tpcEVtcHR5TGluZT86IGJvb2xlYW59KTogc3RyaW5nW11bXSB7XG4gICAgY29uc3Qgc2VwYXJhdG9yID0gb3B0cz8uc2VwYXJhdG9yIHx8ICcsJztcbiAgICBjb25zdCBza2lwRW1wdHlMaW5lID0gIW9wdHMgfHwgb3B0cy5za2lwRW1wdHlMaW5lICE9PSBmYWxzZTtcblxuICAgIC8vIFByb3RlY3Qgc3BlY2lhbCBjaGFyYWN0ZXJzIChxdW90ZSBhbmQgL24pXG4gICAgYm9keSA9IGJvZHkucmVwbGFjZSgnXCJcIicsICc8cXVvdGU+JykgLy8gUHJvdGVjdCBkb3VibGUgcXVvdGVcbiAgICAgIC5yZXBsYWNlKC8oXCJbXlxcblwiXSspXFxuXFxyPy9nbSwgJ1wiJDE8YnI+JykgLy8gUHJvdGVjdCBcXG4gaW5zaWRlIGEgcXVvdGVkIGV4cHJlc3Npb25cbiAgICAgIC5yZXBsYWNlKC9cXG5cXHIvZ20sICdcXG4nKSAvLyBXaW5kb3dzIENSXG5cbiAgICBjb25zdCBoZWFkZXJBbmRSb3dzID0gYm9keS5zcGxpdCgnXFxuJywgMik7XG4gICAgY29uc3QgaGVhZGVycyA9IGhlYWRlckFuZFJvd3NbMF0uc3BsaXQoc2VwYXJhdG9yKTtcblxuICAgIHJldHVybiBib2R5LnNwbGl0KCdcXG4nKSAvLyBzcGxpdCBpbnRvIHJvd3NcbiAgICAgIC5maWx0ZXIobGluZSA9PiAhc2tpcEVtcHR5TGluZSB8fCBsaW5lLnRyaW0oKS5sZW5ndGggPiAwKSAvLyBTa2lwIGVtcHR5IGxpbmVcbiAgICAgIC5tYXAobGluZSA9PiB7XG4gICAgICAgIGNvbnN0IGNlbGxzID0gbGluZS5zcGxpdChzZXBhcmF0b3IsIGhlYWRlcnMubGVuZ3RoKSAvLyBzcGxpdCBpbnRvIGNlbGxzXG4gICAgICAgICAgLm1hcChjZWxsID0+IGNlbGwucmVwbGFjZSgvXlwiKFteXCJdKilcIiQvLCAnJDEnKSkgLy8gQ2xlYW4gdHJhaWxpbmcgcXVvdGVzXG4gICAgICAgICAgLm1hcChjZWxsID0+IGNlbGwucmVwbGFjZSgnPHF1b3RlPicsICdcIicpKSAvLyByZXN0b3JlIHByb3RlY3RlZCBxdW90ZVxuICAgICAgICAgIC5tYXAoY2VsbCA9PiBjZWxsLnJlcGxhY2UoJzxicj4nLCAnXFxuJykpIC8vIHJlc3RvcmUgcHJvdGVjdGVkIGJyXG4gICAgICAgIDtcbiAgICAgICAgcmV0dXJuIGNlbGxzO1xuICAgICAgfSk7XG4gIH1cbn1cbiJdfQ==
|