@sapphire-ion/framework 1.2.43 → 1.2.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/classes/comparison/comparison-operator.mjs +18 -0
- package/esm2022/lib/classes/comparison/comparison-value-type.mjs +25 -0
- package/esm2022/lib/classes/comparison/comparison.mjs +41 -0
- package/esm2022/lib/classes/comparison/properties/bool-property.mjs +15 -0
- package/esm2022/lib/classes/comparison/properties/date-property.mjs +27 -0
- package/esm2022/lib/classes/comparison/properties/datetime-property.mjs +27 -0
- package/esm2022/lib/classes/comparison/properties/decimal-property.mjs +27 -0
- package/esm2022/lib/classes/comparison/properties/enum-property.mjs +27 -0
- package/esm2022/lib/classes/comparison/properties/implicit-property.mjs +12 -0
- package/esm2022/lib/classes/comparison/properties/int-property.mjs +27 -0
- package/esm2022/lib/classes/comparison/properties/long-property.mjs +27 -0
- package/esm2022/lib/classes/comparison/properties/string-property.mjs +15 -0
- package/esm2022/lib/classes/comparison/properties/time-property.mjs +27 -0
- package/esm2022/lib/classes/credentials.mjs +2 -0
- package/esm2022/lib/classes/environment.mjs +34 -0
- package/esm2022/lib/classes/filters/view-filtros.mjs +18 -0
- package/esm2022/lib/classes/infinite-scroll.mjs +90 -0
- package/esm2022/lib/classes/inputs/table-field-form-builder.mjs +10 -0
- package/esm2022/lib/classes/inputs/table-field.mjs +79 -0
- package/esm2022/lib/classes/page-option.mjs +2 -0
- package/esm2022/lib/classes/routes/default-routing-factory.mjs +23 -0
- package/esm2022/lib/classes/routes/id-preloader-configuration.mjs +22 -0
- package/esm2022/lib/classes/routes/route-data.mjs +9 -0
- package/esm2022/lib/components/carousel/carousel-image/carousel-image.component.mjs +18 -0
- package/esm2022/lib/components/carousel/carousel-item/carousel-item.component.mjs +15 -0
- package/esm2022/lib/components/carousel/carousel.component.mjs +79 -0
- package/esm2022/lib/components/carousel/carousel.module.mjs +31 -0
- package/esm2022/lib/components/carousel/i-carousel-item.component.mjs +16 -0
- package/esm2022/lib/components/content-block/content-block.component.mjs +27 -0
- package/esm2022/lib/components/default/default-list/abstract-list.mjs +49 -0
- package/esm2022/lib/components/default/default-list/default-list.component.mjs +95 -0
- package/esm2022/lib/components/default/default-list/header-list/header-list.component.mjs +98 -0
- package/esm2022/lib/components/default/default-list/list.mjs +120 -0
- package/esm2022/lib/components/default/default-pagination/default-pagination.component.mjs +123 -0
- package/esm2022/lib/components/default/default-table/default-table.component.mjs +216 -0
- package/esm2022/lib/components/default/default-table/th-filter/th-filter.component.mjs +206 -0
- package/esm2022/lib/components/default/default-view/abstract-view.mjs +22 -0
- package/esm2022/lib/components/default/default-view/default-view.component.mjs +63 -0
- package/esm2022/lib/components/default/default-view/header-view/header-view.component.mjs +78 -0
- package/esm2022/lib/components/default/default-view/view.mjs +188 -0
- package/esm2022/lib/components/default/default.module.mjs +98 -0
- package/esm2022/lib/components/default-page/default.page.mjs +75 -0
- package/esm2022/lib/components/drag-drop-file/drag-drop-file.directive.mjs +60 -0
- package/esm2022/lib/components/drag-drop-file/drag-drop-file.module.mjs +31 -0
- package/esm2022/lib/components/drag-drop-file/drag-drop-overlay/drag-drop-overlay.component.mjs +15 -0
- package/esm2022/lib/components/drawer/default-drawer-end/default-drawer-end.component.mjs +34 -0
- package/esm2022/lib/components/drawer/drawer-group/drawer-group.component.mjs +52 -0
- package/esm2022/lib/components/drawer/drawer.component.mjs +156 -0
- package/esm2022/lib/components/drawer/menu.mjs +15 -0
- package/esm2022/lib/components/filter/filter.component.mjs +145 -0
- package/esm2022/lib/components/http-responses-pages/forbidden-403/forbidden-403.component.mjs +17 -0
- package/esm2022/lib/components/image/image.component.mjs +91 -0
- package/esm2022/lib/components/info-popover/info-popover.component.mjs +91 -0
- package/esm2022/lib/components/inputs/custom-input.mjs +85 -0
- package/esm2022/lib/components/inputs/input-bool/input-bool.component.mjs +46 -0
- package/esm2022/lib/components/inputs/input-bool/input-bool.configuration.mjs +16 -0
- package/esm2022/lib/components/inputs/input-cep/input-cep.component.mjs +50 -0
- package/esm2022/lib/components/inputs/input-cep/input-cep.configuration.mjs +4 -0
- package/esm2022/lib/components/inputs/input-color/input-color.component.mjs +481 -0
- package/esm2022/lib/components/inputs/input-configuration.mjs +2 -0
- package/esm2022/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.component.mjs +116 -0
- package/esm2022/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.configuration.mjs +6 -0
- package/esm2022/lib/components/inputs/input-date/input-date.component.mjs +235 -0
- package/esm2022/lib/components/inputs/input-date/input-date.configuration.mjs +8 -0
- package/esm2022/lib/components/inputs/input-decimal/input-decimal.component.mjs +243 -0
- package/esm2022/lib/components/inputs/input-decimal/input-decimal.configuration.mjs +50 -0
- package/esm2022/lib/components/inputs/input-default-configurations.mjs +14 -0
- package/esm2022/lib/components/inputs/input-file/download-button/download-button.component.mjs +99 -0
- package/esm2022/lib/components/inputs/input-file/input-file.component.mjs +101 -0
- package/esm2022/lib/components/inputs/input-file/input-file.configuration.mjs +24 -0
- package/esm2022/lib/components/inputs/input-icon/fluenticons.mjs +3734 -0
- package/esm2022/lib/components/inputs/input-icon/input-icon.component.mjs +60 -0
- package/esm2022/lib/components/inputs/input-icon/ionicons.mjs +1360 -0
- package/esm2022/lib/components/inputs/input-provider-factory.mjs +12 -0
- package/esm2022/lib/components/inputs/input-select/directives/sion-label-template.directive.mjs +16 -0
- package/esm2022/lib/components/inputs/input-select/directives/sion-option-template.directive.mjs +16 -0
- package/esm2022/lib/components/inputs/input-select/directives/sion-placeholder-template.directive.mjs +16 -0
- package/esm2022/lib/components/inputs/input-select/input-select.component.mjs +373 -0
- package/esm2022/lib/components/inputs/input-select/input.select.configuration.mjs +229 -0
- package/esm2022/lib/components/inputs/input-string/input-string.component.mjs +41 -0
- package/esm2022/lib/components/inputs/input-string/input-string.configuration.mjs +18 -0
- package/esm2022/lib/components/inputs/input-telefone/input-telefone.component.mjs +74 -0
- package/esm2022/lib/components/inputs/input-telefone/input-telefone.configuration.mjs +12 -0
- package/esm2022/lib/components/inputs/input-textarea/input-textarea.component.mjs +41 -0
- package/esm2022/lib/components/inputs/input-textarea/input-textarea.configuration.mjs +7 -0
- package/esm2022/lib/components/inputs/input-type.mjs +24 -0
- package/esm2022/lib/components/inputs/input-validators.mjs +121 -0
- package/esm2022/lib/components/inputs/inputs.module.mjs +133 -0
- package/esm2022/lib/components/loading/loading.component.mjs +34 -0
- package/esm2022/lib/components/login/login-admin/login-admin.component.mjs +52 -0
- package/esm2022/lib/components/login/login.component.mjs +99 -0
- package/esm2022/lib/components/main-content/main-content.component.mjs +100 -0
- package/esm2022/lib/components/popover/sion-popover/sion-popover.component.mjs +182 -0
- package/esm2022/lib/components/popover/sion-popover.module.mjs +21 -0
- package/esm2022/lib/components/sion-card/sion-card.component.mjs +26 -0
- package/esm2022/lib/components/stepper/step/step.component.mjs +43 -0
- package/esm2022/lib/components/stepper/stepper.component.mjs +36 -0
- package/esm2022/lib/components/stepper/stepper.module.mjs +25 -0
- package/esm2022/lib/components/tabs/tab/tab.component.mjs +41 -0
- package/esm2022/lib/components/tabs/tabs/tabs.component.mjs +56 -0
- package/esm2022/lib/components/tabs/tabs.module.mjs +22 -0
- package/esm2022/lib/components/text-tooltip/text-tooltip.component.mjs +51 -0
- package/esm2022/lib/components/tooltip/tooltip.component.mjs +21 -0
- package/esm2022/lib/core.module.mjs +38 -0
- package/esm2022/lib/directives/ng-var.directive.mjs +29 -0
- package/esm2022/lib/guards/auth.guard.mjs +26 -0
- package/esm2022/lib/guards/error.interceptor.mjs +107 -0
- package/esm2022/lib/guards/token.interceptor.mjs +25 -0
- package/esm2022/lib/index.mjs +187 -0
- package/esm2022/lib/pipes/secure.pipe.mjs +42 -0
- package/esm2022/lib/services/auth.service.mjs +150 -0
- package/esm2022/lib/services/environment.service.mjs +26 -0
- package/esm2022/lib/services/generic.service.mjs +84 -0
- package/esm2022/lib/services/modal-focus-trap.service.mjs +62 -0
- package/esm2022/lib/services/popover-focus-trap.service.mjs +62 -0
- package/esm2022/lib/services/route/route.cache.service.mjs +15 -0
- package/esm2022/lib/services/route/route.provider.service.mjs +42 -0
- package/esm2022/lib/services/usuario.service.mjs +49 -0
- package/esm2022/lib/services/utils.service.mjs +190 -0
- package/esm2022/lib/services/web/api-url-provider.service.mjs +29 -0
- package/esm2022/lib/services/web/http.ativo.service.mjs +37 -0
- package/esm2022/lib/services/web/http.service.mjs +177 -0
- package/esm2022/lib/services/web/storage.service.mjs +183 -0
- package/esm2022/public-api.mjs +5 -0
- package/esm2022/sapphire-ion-framework.mjs +5 -0
- package/fesm2022/sapphire-ion-framework.mjs +12234 -0
- package/fesm2022/sapphire-ion-framework.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/classes/comparison/comparison-operator.d.ts +9 -0
- package/lib/classes/comparison/comparison-value-type.d.ts +23 -0
- package/lib/classes/comparison/comparison.d.ts +25 -0
- package/lib/classes/comparison/properties/bool-property.d.ts +7 -0
- package/lib/classes/comparison/properties/date-property.d.ts +11 -0
- package/lib/classes/comparison/properties/datetime-property.d.ts +11 -0
- package/lib/classes/comparison/properties/decimal-property.d.ts +11 -0
- package/lib/classes/comparison/properties/enum-property.d.ts +11 -0
- package/lib/classes/comparison/properties/implicit-property.d.ts +6 -0
- package/lib/classes/comparison/properties/int-property.d.ts +11 -0
- package/lib/classes/comparison/properties/long-property.d.ts +11 -0
- package/lib/classes/comparison/properties/string-property.d.ts +7 -0
- package/lib/classes/comparison/properties/time-property.d.ts +11 -0
- package/{src/lib/classes/credentials.ts → lib/classes/credentials.d.ts} +5 -5
- package/lib/classes/environment.d.ts +14 -0
- package/lib/classes/filters/view-filtros.d.ts +10 -0
- package/lib/classes/infinite-scroll.d.ts +26 -0
- package/lib/classes/inputs/table-field-form-builder.d.ts +5 -0
- package/lib/classes/inputs/table-field.d.ts +20 -0
- package/lib/classes/page-option.d.ts +7 -0
- package/lib/classes/routes/default-routing-factory.d.ts +8 -0
- package/lib/classes/routes/id-preloader-configuration.d.ts +28 -0
- package/lib/classes/routes/route-data.d.ts +5 -0
- package/lib/components/carousel/carousel-image/carousel-image.component.d.ts +10 -0
- package/lib/components/carousel/carousel-item/carousel-item.component.d.ts +9 -0
- package/lib/components/carousel/carousel.component.d.ts +32 -0
- package/lib/components/carousel/carousel.module.d.ts +12 -0
- package/lib/components/carousel/i-carousel-item.component.d.ts +9 -0
- package/lib/components/content-block/content-block.component.d.ts +15 -0
- package/lib/components/default/default-list/abstract-list.d.ts +21 -0
- package/lib/components/default/default-list/default-list.component.d.ts +47 -0
- package/lib/components/default/default-list/header-list/header-list.component.d.ts +45 -0
- package/lib/components/default/default-list/list.d.ts +40 -0
- package/lib/components/default/default-pagination/default-pagination.component.d.ts +36 -0
- package/lib/components/default/default-table/default-table.component.d.ts +90 -0
- package/lib/components/default/default-table/th-filter/th-filter.component.d.ts +23 -0
- package/lib/components/default/default-view/abstract-view.d.ts +18 -0
- package/lib/components/default/default-view/default-view.component.d.ts +32 -0
- package/lib/components/default/default-view/header-view/header-view.component.d.ts +29 -0
- package/lib/components/default/default-view/view.d.ts +59 -0
- package/lib/components/default/default.module.d.ts +31 -0
- package/lib/components/default-page/default.page.d.ts +35 -0
- package/lib/components/drag-drop-file/drag-drop-file.directive.d.ts +14 -0
- package/lib/components/drag-drop-file/drag-drop-file.module.d.ts +10 -0
- package/lib/components/drag-drop-file/drag-drop-overlay/drag-drop-overlay.component.d.ts +9 -0
- package/lib/components/drawer/default-drawer-end/default-drawer-end.component.d.ts +13 -0
- package/lib/components/drawer/drawer-group/drawer-group.component.d.ts +22 -0
- package/lib/components/drawer/drawer.component.d.ts +31 -0
- package/lib/components/drawer/menu.d.ts +9 -0
- package/lib/components/filter/filter.component.d.ts +29 -0
- package/lib/components/http-responses-pages/forbidden-403/forbidden-403.component.d.ts +8 -0
- package/lib/components/image/image.component.d.ts +23 -0
- package/lib/components/info-popover/info-popover.component.d.ts +15 -0
- package/lib/components/inputs/custom-input.d.ts +40 -0
- package/lib/components/inputs/input-bool/input-bool.component.d.ts +16 -0
- package/lib/components/inputs/input-bool/input-bool.configuration.d.ts +17 -0
- package/lib/components/inputs/input-cep/input-cep.component.d.ts +18 -0
- package/lib/components/inputs/input-cep/input-cep.configuration.d.ts +3 -0
- package/lib/components/inputs/input-color/input-color.component.d.ts +77 -0
- package/{src/lib/components/inputs/input-configuration.ts → lib/components/inputs/input-configuration.d.ts} +10 -23
- package/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.component.d.ts +19 -0
- package/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.configuration.d.ts +5 -0
- package/lib/components/inputs/input-date/input-date.component.d.ts +60 -0
- package/lib/components/inputs/input-date/input-date.configuration.d.ts +7 -0
- package/lib/components/inputs/input-decimal/input-decimal.component.d.ts +26 -0
- package/lib/components/inputs/input-decimal/input-decimal.configuration.d.ts +28 -0
- package/lib/components/inputs/input-default-configurations.d.ts +13 -0
- package/lib/components/inputs/input-file/download-button/download-button.component.d.ts +39 -0
- package/lib/components/inputs/input-file/input-file.component.d.ts +27 -0
- package/lib/components/inputs/input-file/input-file.configuration.d.ts +8 -0
- package/lib/components/inputs/input-icon/fluenticons.d.ts +1 -0
- package/lib/components/inputs/input-icon/input-icon.component.d.ts +20 -0
- package/lib/components/inputs/input-icon/ionicons.d.ts +1 -0
- package/lib/components/inputs/input-provider-factory.d.ts +4 -0
- package/lib/components/inputs/input-select/directives/sion-label-template.directive.d.ts +18 -0
- package/lib/components/inputs/input-select/directives/sion-option-template.directive.d.ts +14 -0
- package/lib/components/inputs/input-select/directives/sion-placeholder-template.directive.d.ts +18 -0
- package/lib/components/inputs/input-select/input-select.component.d.ts +83 -0
- package/lib/components/inputs/input-select/input.select.configuration.d.ts +122 -0
- package/lib/components/inputs/input-string/input-string.component.d.ts +14 -0
- package/lib/components/inputs/input-string/input-string.configuration.d.ts +14 -0
- package/lib/components/inputs/input-telefone/input-telefone.component.d.ts +19 -0
- package/lib/components/inputs/input-telefone/input-telefone.configuration.d.ts +9 -0
- package/lib/components/inputs/input-textarea/input-textarea.component.d.ts +14 -0
- package/lib/components/inputs/input-textarea/input-textarea.configuration.d.ts +4 -0
- package/lib/components/inputs/input-type.d.ts +22 -0
- package/lib/components/inputs/input-validators.d.ts +25 -0
- package/lib/components/inputs/inputs.module.d.ts +33 -0
- package/lib/components/loading/loading.component.d.ts +18 -0
- package/lib/components/login/login-admin/login-admin.component.d.ts +20 -0
- package/lib/components/login/login.component.d.ts +29 -0
- package/lib/components/main-content/main-content.component.d.ts +27 -0
- package/lib/components/popover/sion-popover/sion-popover.component.d.ts +43 -0
- package/lib/components/popover/sion-popover.module.d.ts +9 -0
- package/lib/components/sion-card/sion-card.component.d.ts +11 -0
- package/lib/components/stepper/step/step.component.d.ts +15 -0
- package/lib/components/stepper/stepper.component.d.ts +14 -0
- package/lib/components/stepper/stepper.module.d.ts +10 -0
- package/lib/components/tabs/tab/tab.component.d.ts +19 -0
- package/lib/components/tabs/tabs/tabs.component.d.ts +18 -0
- package/lib/components/tabs/tabs.module.d.ts +12 -0
- package/lib/components/text-tooltip/text-tooltip.component.d.ts +16 -0
- package/lib/components/tooltip/tooltip.component.d.ts +7 -0
- package/lib/core.module.d.ts +16 -0
- package/lib/directives/ng-var.directive.d.ts +12 -0
- package/lib/guards/auth.guard.d.ts +11 -0
- package/lib/guards/error.interceptor.d.ts +32 -0
- package/lib/guards/token.interceptor.d.ts +11 -0
- package/lib/index.d.ts +117 -0
- package/lib/pipes/secure.pipe.d.ts +15 -0
- package/lib/services/auth.service.d.ts +47 -0
- package/lib/services/environment.service.d.ts +10 -0
- package/lib/services/generic.service.d.ts +22 -0
- package/lib/services/modal-focus-trap.service.d.ts +13 -0
- package/lib/services/popover-focus-trap.service.d.ts +13 -0
- package/lib/services/route/route.cache.service.d.ts +7 -0
- package/lib/services/route/route.provider.service.d.ts +13 -0
- package/lib/services/usuario.service.d.ts +21 -0
- package/lib/services/utils.service.d.ts +53 -0
- package/lib/services/web/api-url-provider.service.d.ts +13 -0
- package/lib/services/web/http.ativo.service.d.ts +20 -0
- package/lib/services/web/http.service.d.ts +59 -0
- package/lib/services/web/storage.service.d.ts +46 -0
- package/package.json +47 -43
- package/public-api.d.ts +1 -0
- package/{src/lib → themes}/compiled-styles.scss +2551 -2551
- package/build.ps1 +0 -39
- package/ng-package.json +0 -10
- package/src/lib/classes/comparison/comparison-operator.ts +0 -17
- package/src/lib/classes/comparison/comparison-value-type.ts +0 -34
- package/src/lib/classes/comparison/comparison.ts +0 -45
- package/src/lib/classes/comparison/properties/bool-property.ts +0 -16
- package/src/lib/classes/comparison/properties/date-property.ts +0 -28
- package/src/lib/classes/comparison/properties/datetime-property.ts +0 -28
- package/src/lib/classes/comparison/properties/decimal-property.ts +0 -28
- package/src/lib/classes/comparison/properties/enum-property.ts +0 -28
- package/src/lib/classes/comparison/properties/implicit-property.ts +0 -13
- package/src/lib/classes/comparison/properties/int-property.ts +0 -28
- package/src/lib/classes/comparison/properties/long-property.ts +0 -28
- package/src/lib/classes/comparison/properties/string-property.ts +0 -16
- package/src/lib/classes/comparison/properties/time-property.ts +0 -28
- package/src/lib/classes/environment.ts +0 -37
- package/src/lib/classes/filters/view-filtros.ts +0 -18
- package/src/lib/classes/infinite-scroll.ts +0 -112
- package/src/lib/classes/inputs/table-field-form-builder.ts +0 -12
- package/src/lib/classes/inputs/table-field.ts +0 -62
- package/src/lib/classes/page-option.ts +0 -8
- package/src/lib/classes/routes/default-routing-factory.ts +0 -24
- package/src/lib/classes/routes/id-preloader-configuration.ts +0 -21
- package/src/lib/classes/routes/route-data.ts +0 -9
- package/src/lib/components/carousel/carousel-image/carousel-image.component.html +0 -4
- package/src/lib/components/carousel/carousel-image/carousel-image.component.ts +0 -15
- package/src/lib/components/carousel/carousel-item/carousel-item.component.html +0 -3
- package/src/lib/components/carousel/carousel-item/carousel-item.component.ts +0 -14
- package/src/lib/components/carousel/carousel.component.html +0 -22
- package/src/lib/components/carousel/carousel.component.ts +0 -83
- package/src/lib/components/carousel/carousel.module.ts +0 -20
- package/src/lib/components/carousel/i-carousel-item.component.ts +0 -8
- package/src/lib/components/content-block/content-block.component.html +0 -6
- package/src/lib/components/content-block/content-block.component.ts +0 -25
- package/src/lib/components/default/default-list/abstract-list.ts +0 -56
- package/src/lib/components/default/default-list/default-list.component.html +0 -60
- package/src/lib/components/default/default-list/default-list.component.ts +0 -72
- package/src/lib/components/default/default-list/header-list/header-list.component.html +0 -32
- package/src/lib/components/default/default-list/header-list/header-list.component.ts +0 -85
- package/src/lib/components/default/default-list/list.ts +0 -127
- package/src/lib/components/default/default-pagination/default-pagination.component.html +0 -52
- package/src/lib/components/default/default-pagination/default-pagination.component.ts +0 -118
- package/src/lib/components/default/default-table/default-table.component.html +0 -104
- package/src/lib/components/default/default-table/default-table.component.ts +0 -255
- package/src/lib/components/default/default-table/th-filter/th-filter.component.html +0 -69
- package/src/lib/components/default/default-table/th-filter/th-filter.component.ts +0 -183
- package/src/lib/components/default/default-view/abstract-view.ts +0 -25
- package/src/lib/components/default/default-view/default-view.component.html +0 -111
- package/src/lib/components/default/default-view/default-view.component.ts +0 -44
- package/src/lib/components/default/default-view/header-view/header-view.component.html +0 -64
- package/src/lib/components/default/default-view/header-view/header-view.component.ts +0 -57
- package/src/lib/components/default/default-view/view.ts +0 -183
- package/src/lib/components/default/default.module.ts +0 -61
- package/src/lib/components/default-page/default.page.html +0 -63
- package/src/lib/components/default-page/default.page.ts +0 -84
- package/src/lib/components/drag-drop-file/drag-drop-file.directive.ts +0 -44
- package/src/lib/components/drag-drop-file/drag-drop-file.module.ts +0 -21
- package/src/lib/components/drag-drop-file/drag-drop-overlay/drag-drop-overlay.component.html +0 -5
- package/src/lib/components/drag-drop-file/drag-drop-overlay/drag-drop-overlay.component.ts +0 -17
- package/src/lib/components/drawer/default-drawer-end/default-drawer-end.component.html +0 -12
- package/src/lib/components/drawer/default-drawer-end/default-drawer-end.component.ts +0 -35
- package/src/lib/components/drawer/drawer-group/drawer-group.component.html +0 -79
- package/src/lib/components/drawer/drawer-group/drawer-group.component.ts +0 -49
- package/src/lib/components/drawer/drawer.component.html +0 -120
- package/src/lib/components/drawer/drawer.component.ts +0 -157
- package/src/lib/components/drawer/menu.ts +0 -20
- package/src/lib/components/filter/filter.component.html +0 -43
- package/src/lib/components/filter/filter.component.ts +0 -141
- package/src/lib/components/http-responses-pages/forbidden-403/forbidden-403.component.html +0 -35
- package/src/lib/components/http-responses-pages/forbidden-403/forbidden-403.component.ts +0 -19
- package/src/lib/components/image/image.component.html +0 -17
- package/src/lib/components/image/image.component.ts +0 -95
- package/src/lib/components/info-popover/info-popover.component.html +0 -23
- package/src/lib/components/info-popover/info-popover.component.ts +0 -75
- package/src/lib/components/inputs/custom-input.ts +0 -94
- package/src/lib/components/inputs/input-bool/input-bool.component.html +0 -26
- package/src/lib/components/inputs/input-bool/input-bool.component.ts +0 -39
- package/src/lib/components/inputs/input-bool/input-bool.configuration.ts +0 -14
- package/src/lib/components/inputs/input-cep/input-cep.component.html +0 -27
- package/src/lib/components/inputs/input-cep/input-cep.component.ts +0 -41
- package/src/lib/components/inputs/input-cep/input-cep.configuration.ts +0 -4
- package/src/lib/components/inputs/input-color/input-color.component.html +0 -79
- package/src/lib/components/inputs/input-color/input-color.component.ts +0 -544
- package/src/lib/components/inputs/input-color/input-color.configuration.ts +0 -0
- package/src/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.component.html +0 -28
- package/src/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.component.ts +0 -99
- package/src/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.configuration.ts +0 -4
- package/src/lib/components/inputs/input-date/input-date.component.html +0 -88
- package/src/lib/components/inputs/input-date/input-date.component.ts +0 -241
- package/src/lib/components/inputs/input-date/input-date.configuration.ts +0 -6
- package/src/lib/components/inputs/input-decimal/input-decimal.component.html +0 -31
- package/src/lib/components/inputs/input-decimal/input-decimal.component.ts +0 -249
- package/src/lib/components/inputs/input-decimal/input-decimal.configuration.ts +0 -47
- package/src/lib/components/inputs/input-default-configurations.ts +0 -15
- package/src/lib/components/inputs/input-file/download-button/download-button.component.html +0 -56
- package/src/lib/components/inputs/input-file/download-button/download-button.component.ts +0 -89
- package/src/lib/components/inputs/input-file/input-file.component.html +0 -59
- package/src/lib/components/inputs/input-file/input-file.component.ts +0 -96
- package/src/lib/components/inputs/input-file/input-file.configuration.ts +0 -25
- package/src/lib/components/inputs/input-icon/fluenticons.ts +0 -3733
- package/src/lib/components/inputs/input-icon/input-icon.component.html +0 -8
- package/src/lib/components/inputs/input-icon/input-icon.component.ts +0 -52
- package/src/lib/components/inputs/input-icon/ionicons.ts +0 -1359
- package/src/lib/components/inputs/input-provider-factory.ts +0 -12
- package/src/lib/components/inputs/input-select/directives/sion-label-template.directive.ts +0 -19
- package/src/lib/components/inputs/input-select/directives/sion-option-template.directive.ts +0 -16
- package/src/lib/components/inputs/input-select/directives/sion-placeholder-template.directive.ts +0 -19
- package/src/lib/components/inputs/input-select/input-select.component.html +0 -176
- package/src/lib/components/inputs/input-select/input-select.component.ts +0 -361
- package/src/lib/components/inputs/input-select/input.select.configuration.ts +0 -292
- package/src/lib/components/inputs/input-string/input-string.component.html +0 -27
- package/src/lib/components/inputs/input-string/input-string.component.ts +0 -31
- package/src/lib/components/inputs/input-string/input-string.configuration.ts +0 -18
- package/src/lib/components/inputs/input-telefone/input-telefone.component.html +0 -29
- package/src/lib/components/inputs/input-telefone/input-telefone.component.ts +0 -63
- package/src/lib/components/inputs/input-telefone/input-telefone.configuration.ts +0 -8
- package/src/lib/components/inputs/input-textarea/input-textarea.component.html +0 -27
- package/src/lib/components/inputs/input-textarea/input-textarea.component.ts +0 -31
- package/src/lib/components/inputs/input-textarea/input-textarea.configuration.ts +0 -7
- package/src/lib/components/inputs/input-type.ts +0 -22
- package/src/lib/components/inputs/input-validators.ts +0 -111
- package/src/lib/components/inputs/inputs.module.ts +0 -74
- package/src/lib/components/loading/loading.component.html +0 -28
- package/src/lib/components/loading/loading.component.ts +0 -29
- package/src/lib/components/login/login-admin/login-admin.component.html +0 -28
- package/src/lib/components/login/login-admin/login-admin.component.ts +0 -51
- package/src/lib/components/login/login.component.html +0 -104
- package/src/lib/components/login/login.component.ts +0 -96
- package/src/lib/components/main-content/main-content.component.html +0 -145
- package/src/lib/components/main-content/main-content.component.ts +0 -93
- package/src/lib/components/popover/sion-popover/sion-popover.component.html +0 -21
- package/src/lib/components/popover/sion-popover/sion-popover.component.ts +0 -182
- package/src/lib/components/popover/sion-popover.module.ts +0 -12
- package/src/lib/components/sion-card/sion-card.component.html +0 -12
- package/src/lib/components/sion-card/sion-card.component.ts +0 -23
- package/src/lib/components/stepper/step/step.component.html +0 -11
- package/src/lib/components/stepper/step/step.component.ts +0 -44
- package/src/lib/components/stepper/stepper.component.html +0 -3
- package/src/lib/components/stepper/stepper.component.ts +0 -37
- package/src/lib/components/stepper/stepper.module.ts +0 -15
- package/src/lib/components/tabs/tab/tab.component.html +0 -8
- package/src/lib/components/tabs/tab/tab.component.ts +0 -28
- package/src/lib/components/tabs/tabs/tabs.component.html +0 -14
- package/src/lib/components/tabs/tabs/tabs.component.ts +0 -42
- package/src/lib/components/tabs/tabs.module.ts +0 -15
- package/src/lib/components/text-tooltip/text-tooltip.component.html +0 -8
- package/src/lib/components/text-tooltip/text-tooltip.component.ts +0 -45
- package/src/lib/components/tooltip/tooltip.component.html +0 -53
- package/src/lib/components/tooltip/tooltip.component.ts +0 -16
- package/src/lib/core.module.ts +0 -29
- package/src/lib/directives/ng-var.directive.ts +0 -26
- package/src/lib/guards/auth.guard.ts +0 -19
- package/src/lib/guards/error.interceptor.ts +0 -108
- package/src/lib/guards/token.interceptor.ts +0 -28
- package/src/lib/index.ts +0 -190
- package/src/lib/pipes/secure.pipe.ts +0 -39
- package/src/lib/services/auth.service.ts +0 -153
- package/src/lib/services/crypto.service.ts +0 -164
- package/src/lib/services/environment.service.ts +0 -17
- package/src/lib/services/generic.service.ts +0 -85
- package/src/lib/services/modal-focus-trap.service.ts +0 -65
- package/src/lib/services/popover-focus-trap.service.ts +0 -65
- package/src/lib/services/route/route.cache.service.ts +0 -17
- package/src/lib/services/route/route.provider.service.ts +0 -49
- package/src/lib/services/usuario.service.ts +0 -44
- package/src/lib/services/utils.service.ts +0 -216
- package/src/lib/services/web/api-url-provider.service.ts +0 -48
- package/src/lib/services/web/http.ativo.service.ts +0 -37
- package/src/lib/services/web/http.service.ts +0 -193
- package/src/lib/services/web/storage.service.ts +0 -206
- package/src/public-api.ts +0 -5
- package/tailwind.config.js +0 -27
- package/tsconfig.lib.json +0 -29
- package/tsconfig.lib.prod.json +0 -23
- package/tsconfig.spec.json +0 -27
- /package/{src/lib → themes}/components/carousel/carousel-image/carousel-image.component.scss +0 -0
- /package/{src/lib → themes}/components/carousel/carousel-item/carousel-item.component.scss +0 -0
- /package/{src/lib → themes}/components/carousel/carousel.component.scss +0 -0
- /package/{src/lib → themes}/components/content-block/content-block.component.scss +0 -0
- /package/{src/lib → themes}/components/default/default-list/default-list.component.scss +0 -0
- /package/{src/lib → themes}/components/default/default-list/header-list/header-list.component.scss +0 -0
- /package/{src/lib → themes}/components/default/default-pagination/default-pagination.component.scss +0 -0
- /package/{src/lib → themes}/components/default/default-table/default-table.component.scss +0 -0
- /package/{src/lib → themes}/components/default/default-table/th-filter/th-filter.component.scss +0 -0
- /package/{src/lib → themes}/components/default/default-view/default-view.component.scss +0 -0
- /package/{src/lib → themes}/components/default/default-view/header-view/header-view.component.scss +0 -0
- /package/{src/lib → themes}/components/default-page/default.page.scss +0 -0
- /package/{src/lib → themes}/components/drag-drop-file/drag-drop-overlay/drag-drop-overlay.component.scss +0 -0
- /package/{src/lib → themes}/components/drawer/default-drawer-end/default-drawer-end.component.scss +0 -0
- /package/{src/lib → themes}/components/drawer/drawer-group/drawer-group.component.scss +0 -0
- /package/{src/lib → themes}/components/drawer/drawer.component.scss +0 -0
- /package/{src/lib → themes}/components/filter/filter.component.scss +0 -0
- /package/{src/lib → themes}/components/http-responses-pages/forbidden-403/forbidden-403.component.scss +0 -0
- /package/{src/lib → themes}/components/image/image.component.scss +0 -0
- /package/{src/lib → themes}/components/info-popover/info-popover.component.scss +0 -0
- /package/{src/lib → themes}/components/inputs/input-bool/input-bool.component.scss +0 -0
- /package/{src/lib → themes}/components/inputs/input-cep/input-cep.component.scss +0 -0
- /package/{src/lib → themes}/components/inputs/input-color/input-color.component.scss +0 -0
- /package/{src/lib → themes}/components/inputs/input-cpf-cnpj/input-cpf-cnpj.component.scss +0 -0
- /package/{src/lib → themes}/components/inputs/input-date/input-date.component.scss +0 -0
- /package/{src/lib → themes}/components/inputs/input-decimal/input-decimal.component.scss +0 -0
- /package/{src/lib → themes}/components/inputs/input-file/download-button/download-button.component.scss +0 -0
- /package/{src/lib → themes}/components/inputs/input-file/input-file.component.scss +0 -0
- /package/{src/lib → themes}/components/inputs/input-icon/input-icon.component.scss +0 -0
- /package/{src/lib → themes}/components/inputs/input-select/input-select.component.scss +0 -0
- /package/{src/lib → themes}/components/inputs/input-string/input-string.component.scss +0 -0
- /package/{src/lib → themes}/components/inputs/input-telefone/input-telefone.component.scss +0 -0
- /package/{src/lib → themes}/components/inputs/input-textarea/input-textarea.component.scss +0 -0
- /package/{src/lib → themes}/components/inputs/inputs.scss +0 -0
- /package/{src/lib → themes}/components/loading/loading.component.scss +0 -0
- /package/{src/lib → themes}/components/login/login-admin/login-admin.component.scss +0 -0
- /package/{src/lib → themes}/components/login/login.component.scss +0 -0
- /package/{src/lib → themes}/components/main-content/main-content.component.scss +0 -0
- /package/{src/lib → themes}/components/popover/sion-popover/sion-popover.component.scss +0 -0
- /package/{src/lib → themes}/components/sion-card/sion-card.component.scss +0 -0
- /package/{src/lib → themes}/components/stepper/step/step.component.scss +0 -0
- /package/{src/lib → themes}/components/stepper/stepper.component.scss +0 -0
- /package/{src/lib → themes}/components/tabs/tab/tab.component.scss +0 -0
- /package/{src/lib → themes}/components/tabs/tabs/tabs.component.scss +0 -0
- /package/{src/lib → themes}/components/text-tooltip/text-tooltip.component.scss +0 -0
- /package/{src/lib → themes}/components/tooltip/tooltip.component.scss +0 -0
- /package/{src/lib → themes}/styles/components.scss +0 -0
- /package/{src/lib → themes}/styles/core.styles.scss +0 -0
- /package/{src/lib → themes}/styles/ionic/ion-action-sheet.scss +0 -0
- /package/{src/lib → themes}/styles/ionic/ion-alert.scss +0 -0
- /package/{src/lib → themes}/styles/ionic/ion-button.scss +0 -0
- /package/{src/lib → themes}/styles/ionic/ion-card.scss +0 -0
- /package/{src/lib → themes}/styles/ionic/ion-content.scss +0 -0
- /package/{src/lib → themes}/styles/ionic/ion-datetime.scss +0 -0
- /package/{src/lib → themes}/styles/ionic/ion-item.scss +0 -0
- /package/{src/lib → themes}/styles/ionic/ion-list.scss +0 -0
- /package/{src/lib → themes}/styles/ionic/ion-modal.scss +0 -0
- /package/{src/lib → themes}/styles/ionic/ion-popover.scss +0 -0
- /package/{src/lib → themes}/styles/ionic/ion-progress-bar.scss +0 -0
- /package/{src/lib → themes}/styles/ionic/ion-searchbar.scss +0 -0
- /package/{src/lib → themes}/styles/ionic/ion-toast.scss +0 -0
- /package/{src/lib → themes}/styles/ionic.scss +0 -0
- /package/{src/lib → themes}/styles/login-default.scss +0 -0
- /package/{src/lib → themes}/styles/mixins.scss +0 -0
- /package/{src/lib → themes}/styles/styles.scss +0 -0
- /package/{src/lib → themes}/styles/translucid.scss +0 -0
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import { Component, computed, ElementRef, forwardRef, HostListener, model, ViewChild } from '@angular/core';
|
|
2
|
+
import { formatNumber } from '@angular/common';
|
|
3
|
+
import { InputCurrencyConfiguration, InputDecimalConfiguration, InputNumberConfiguration, InputPercentageConfiguration } from './input-decimal.configuration';
|
|
4
|
+
import { InputProviderFactory } from '../input-provider-factory';
|
|
5
|
+
import { CustomInput } from '../custom-input';
|
|
6
|
+
import { Timeout } from '../../../services/utils.service';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@ionic/angular";
|
|
9
|
+
import * as i2 from "@angular/common";
|
|
10
|
+
export class InputDecimalComponent extends CustomInput {
|
|
11
|
+
setFocus(event) {
|
|
12
|
+
if (this.input && event.target == this.inputContainer.nativeElement) {
|
|
13
|
+
this.input.nativeElement.focus();
|
|
14
|
+
this.input.nativeElement.setSelectionRange(this.valueString.length, this.valueString.length);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
constructor(elementRef) {
|
|
18
|
+
super();
|
|
19
|
+
this.elementRef = elementRef;
|
|
20
|
+
this.configuration = model();
|
|
21
|
+
this.digitsInfo = computed(() => `1.${this.configuration().precision}-${this.configuration().precision}`);
|
|
22
|
+
this.divider = computed(() => Math.pow(10, this.configuration().precision));
|
|
23
|
+
this.value.set(0);
|
|
24
|
+
const selector = this.elementRef.nativeElement.tagName.toLowerCase().split('-').at(-1);
|
|
25
|
+
if (selector == "number" && !this.configuration()) {
|
|
26
|
+
this.configuration.set(new InputNumberConfiguration());
|
|
27
|
+
}
|
|
28
|
+
else if (selector == "decimal" && !this.configuration()) {
|
|
29
|
+
this.configuration.set(new InputDecimalConfiguration());
|
|
30
|
+
}
|
|
31
|
+
else if (selector == "currency" && !this.configuration()) {
|
|
32
|
+
this.configuration.set(new InputCurrencyConfiguration());
|
|
33
|
+
}
|
|
34
|
+
else if (selector == "percentage" && !this.configuration()) {
|
|
35
|
+
this.configuration.set(new InputPercentageConfiguration());
|
|
36
|
+
}
|
|
37
|
+
this.SetValueString();
|
|
38
|
+
}
|
|
39
|
+
writeValue(obj) {
|
|
40
|
+
this.value.set(obj);
|
|
41
|
+
this.SetValueString();
|
|
42
|
+
this.runValidation();
|
|
43
|
+
}
|
|
44
|
+
SetValue(obj) {
|
|
45
|
+
this.value.set(obj);
|
|
46
|
+
this.SetValueString();
|
|
47
|
+
this.runValidation();
|
|
48
|
+
this.propagateChange(obj);
|
|
49
|
+
}
|
|
50
|
+
SetValueString() {
|
|
51
|
+
this.valueString = formatNumber(this.value(), "pt-BR", this.digitsInfo());
|
|
52
|
+
}
|
|
53
|
+
onPaste(event) {
|
|
54
|
+
event.preventDefault();
|
|
55
|
+
let clipboardData = event.clipboardData || window['clipboardData'];
|
|
56
|
+
let pastedText = clipboardData.getData('text');
|
|
57
|
+
const s = pastedText.replaceAll('.', '').replaceAll(',', '.');
|
|
58
|
+
const n = Number(s);
|
|
59
|
+
if (Number(s) && isFinite(n)) {
|
|
60
|
+
this.SetValue(n);
|
|
61
|
+
}
|
|
62
|
+
event.preventDefault();
|
|
63
|
+
}
|
|
64
|
+
async onKeyDown(event) {
|
|
65
|
+
const value = this.input.nativeElement.value;
|
|
66
|
+
const selectionStart = this.input.nativeElement.selectionStart;
|
|
67
|
+
const selectionEnd = this.input.nativeElement.selectionEnd;
|
|
68
|
+
const atLeft = value.slice(0, selectionStart);
|
|
69
|
+
const atRight = value.slice(selectionEnd, value.length);
|
|
70
|
+
if (["-"].includes(event.key)) {
|
|
71
|
+
return await this.HandleNegative(event, selectionStart, selectionEnd, value, atLeft, atRight);
|
|
72
|
+
}
|
|
73
|
+
else if (lstNumbers.includes(event.key)) {
|
|
74
|
+
return await this.HandleNumber(event, selectionStart, selectionEnd, value, atLeft, atRight);
|
|
75
|
+
}
|
|
76
|
+
else if (lstEspecialCases.includes(event.key)) {
|
|
77
|
+
return await this.HandleEspecial(event, selectionStart, selectionEnd, value, atLeft, atRight);
|
|
78
|
+
}
|
|
79
|
+
else if (["A", "a"].includes(event.key) && event.ctrlKey) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
else if (["C", "c"].includes(event.key) && event.ctrlKey) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
else if (["V", "v"].includes(event.key) && event.ctrlKey) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
else if (lstIgnoreNotPrevent.includes(event.key)) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
event.preventDefault();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async HandleNegative(event, selectionStart, selectionEnd, value, atLeft, atRight) {
|
|
96
|
+
event.preventDefault();
|
|
97
|
+
let focusEnd = (selectionStart == 0 && selectionEnd == this.valueString.length);
|
|
98
|
+
/** [ Remove decimalSeparator & thousandSeparator ] */
|
|
99
|
+
let f;
|
|
100
|
+
if (!atLeft.includes('-')) {
|
|
101
|
+
f = event.key + atLeft + atRight;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
f = (atLeft + atRight).replace('-', '');
|
|
105
|
+
}
|
|
106
|
+
if (f == "-") {
|
|
107
|
+
if (value.includes('-')) {
|
|
108
|
+
f = value.replace('-', '');
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
f = `-${value}`;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
const CurrentValue = this.SanitizeValue(f);
|
|
115
|
+
if (CurrentValue == this.value()) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
//[ Handle Set Cursor Position]
|
|
119
|
+
this.SetValue(CurrentValue);
|
|
120
|
+
const newPos = selectionStart + 1 + this.valueString.split('.').length - value.split('.').length;
|
|
121
|
+
//Horrivel, mas nao tem uma alternativa boa, https://stackoverflow.com/questions/511088/use-javascript-to-place-cursor-at-end-of-text-in-text-input-element
|
|
122
|
+
await Timeout(0);
|
|
123
|
+
this.input.nativeElement.setSelectionRange(newPos, newPos);
|
|
124
|
+
if (focusEnd) {
|
|
125
|
+
this.input.nativeElement.setSelectionRange(this.valueString.length, this.valueString.length);
|
|
126
|
+
}
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
async HandleNumber(event, selectionStart, selectionEnd, value, atLeft, atRight) {
|
|
130
|
+
event.preventDefault();
|
|
131
|
+
let focusEnd = (selectionStart == 0 && selectionEnd == this.valueString.length);
|
|
132
|
+
/** [ Remove decimalSeparator & thousandSeparator ] */
|
|
133
|
+
const f = atLeft + event.key + atRight;
|
|
134
|
+
const CurrentValue = this.SanitizeValue(f);
|
|
135
|
+
if (CurrentValue == this.value()) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
if (CurrentValue > decimalMaxValue) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
//[ Handle Set Cursor Position]
|
|
142
|
+
this.SetValue(CurrentValue);
|
|
143
|
+
const newPosition = selectionStart + 1 + this.valueString.split('.').length - value.split('.').length;
|
|
144
|
+
//Horrivel, mas nao sem uma alternativa boa, https://stackoverflow.com/questions/511088/use-javascript-to-place-cursor-at-end-of-text-in-text-input-element
|
|
145
|
+
await Timeout(0);
|
|
146
|
+
this.input.nativeElement.setSelectionRange(newPosition, newPosition);
|
|
147
|
+
if (focusEnd) {
|
|
148
|
+
this.input.nativeElement.setSelectionRange(this.valueString.length, this.valueString.length);
|
|
149
|
+
}
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
SanitizeValue(f) {
|
|
153
|
+
var CurrentValue = Number(Sanitize(f)) / this.divider();
|
|
154
|
+
if (CurrentValue >= decimalMaxValue) {
|
|
155
|
+
return this.value();
|
|
156
|
+
}
|
|
157
|
+
return CurrentValue;
|
|
158
|
+
}
|
|
159
|
+
async HandleEspecial(event, selectionStart, selectionEnd, value, atLeft, atRight) {
|
|
160
|
+
event.preventDefault();
|
|
161
|
+
if (selectionStart == selectionEnd) {
|
|
162
|
+
if (event.key == "Backspace") {
|
|
163
|
+
if (selectionStart == selectionEnd && selectionStart == 0) {
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const previousChar = atLeft.at(-1);
|
|
167
|
+
const isNumber = lstNumbers.includes(previousChar);
|
|
168
|
+
const f = atLeft.slice(0, atLeft.length - (isNumber ? 1 : 2)) + atRight;
|
|
169
|
+
const CurrentValue = this.SanitizeValue(f);
|
|
170
|
+
//[ Handle Set Cursor Position]
|
|
171
|
+
this.SetValue(CurrentValue);
|
|
172
|
+
await Timeout(0);
|
|
173
|
+
let pos = isNumber ? selectionStart - 1 : selectionStart - 2;
|
|
174
|
+
if (selectionEnd == this.valueString.length) {
|
|
175
|
+
pos++;
|
|
176
|
+
}
|
|
177
|
+
this.input.nativeElement.setSelectionRange(pos, pos);
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
else if (event.key == "Delete") {
|
|
181
|
+
const nextChar = atRight[0];
|
|
182
|
+
const isNumber = lstNumbers.includes(nextChar);
|
|
183
|
+
const f = atLeft + atRight.slice(isNumber ? 1 : 2);
|
|
184
|
+
const CurrentValue = this.SanitizeValue(f);
|
|
185
|
+
//[ Handle Set Cursor Position]
|
|
186
|
+
this.SetValue(CurrentValue);
|
|
187
|
+
var pos = selectionStart;
|
|
188
|
+
if (pos <= -1) {
|
|
189
|
+
pos = 0;
|
|
190
|
+
}
|
|
191
|
+
if (CurrentValue < 1) {
|
|
192
|
+
pos++;
|
|
193
|
+
}
|
|
194
|
+
if (!isNumber) {
|
|
195
|
+
pos++;
|
|
196
|
+
}
|
|
197
|
+
await Timeout(0);
|
|
198
|
+
this.input.nativeElement.setSelectionRange(pos, pos);
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
const f = atLeft + atRight;
|
|
204
|
+
const CurrentValue = this.SanitizeValue(f);
|
|
205
|
+
this.SetValue(CurrentValue);
|
|
206
|
+
await Timeout(0);
|
|
207
|
+
this.input.nativeElement.setSelectionRange(this.valueString.length, this.valueString.length);
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InputDecimalComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
212
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: InputDecimalComponent, selector: "input-decimal, input-number, input-currency, input-percentage", inputs: { configuration: { classPropertyName: "configuration", publicName: "configuration", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { configuration: "configurationChange" }, host: { listeners: { "paste": "onPaste($event)" } }, providers: [
|
|
213
|
+
...InputProviderFactory.GetProviders(InputDecimalComponent),
|
|
214
|
+
{ provide: CustomInput, useExisting: forwardRef(() => InputDecimalComponent) },
|
|
215
|
+
], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "inputContainer", first: true, predicate: ["inputContainer"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div \r\n #inputContainer\r\n class=\"input-container\" \r\n (click)=\"setFocus($event)\"\r\n [class.required]=\"required()\" \r\n [class.submitted]=\"submitted()\" \r\n [class.invalid]=\"invalid\" \r\n [class.disabled]=\"disabled() || loading()\"\r\n [class.loading]=\"loading()\"\r\n>\r\n <div class=\"input-label\"> \r\n <span class=\"truncate\">\r\n {{label()}} \r\n </span>\r\n </div>\r\n\r\n <div class=\"decimal-input-container text-dark\">\r\n <span *ngIf=\"configuration().prefix\" slot=\"start\">{{configuration().prefix}}</span>\r\n <input #input\r\n inputmode=\"numeric\"\r\n [value]=\"valueString\" \r\n (keydown)=\"onKeyDown($event)\"\r\n [disabled]=\"disabled() || loading()\"\r\n (blur)=\"blur.emit($event)\"\r\n />\r\n <span *ngIf=\"configuration().sufix\" slot=\"end\" >{{configuration().sufix}}</span>\r\n </div>\r\n <div class=\"loading-container\" [class.loading]=\"loading()\">\r\n <ion-spinner></ion-spinner>\r\n </div>\r\n</div>", styles: ["input{text-align:right;width:100%}.decimal-input-container{display:flex;width:100%;align-items:center;justify-content:center;gap:.25rem}.decimal-input-container span{flex-shrink:0}\n", "@property --input-color{syntax: \"<color>\"; initial-value: transparent; inherits: false;}.input-container{position:relative;--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));cursor:text;border-radius:.75rem;padding:.25rem .75rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition:--input-color .2s ease-in-out,box-shadow .2s ease-in-out,opacity .2s ease-in-out,filter .2s ease-in-out;--color: var(--ion-color-dark);--input-color: var(--input-background, var(--ion-color-step-250));--shadow: 0 3px 4px -1px rgb(0 0 0 / .1);--inset-shadow: var(--input-color) 0px 1.75px 2px 0px inset;--focused-shadow: 0 0 1px 2px color-mix(in srgb, var(--ion-color-medium) 35%, transparent);box-shadow:var(--inset-shadow),var(--shadow);will-change:box-shadow,filter opacity;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;background:radial-gradient(ellipse at 0px top,hsl(from var(--input-color) h s l/.5),hsl(from var(--input-color) h s l/.4)),hsl(from var(--ion-color-light) h s l/.8)}.input-container:hover{--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container:focus-within,.input-container:focus,.input-container.manual-focus{box-shadow:var(--inset-shadow),var(--shadow),var(--focused-shadow);--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container .input-label{pointer-events:none;display:flex;height:1rem;width:100%;min-width:0px;max-width:100%;align-items:center;justify-content:flex-start;gap:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;color:var(--color)}.input-container input,.input-container textarea{height:1.5rem;width:100%;border-radius:.375rem;background-color:transparent;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}.input-container.loading{cursor:wait!important}.input-container.required .input-label:after{content:\"*\";color:var(--ion-color-danger);vertical-align:bottom}.input-container.submitted.invalid{--input-color: color-mix(in srgb, var(--ion-color-danger) 50%, transparent)}.input-container.disabled{cursor:not-allowed;opacity:.5;--tw-brightness: brightness(1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container.disabled *{pointer-events:none}.loading-container{position:absolute;pointer-events:none;width:100%;height:100%;top:0;left:0;display:flex;justify-content:end;align-items:center;padding-right:.5rem;will-change:opacity;transition:opacity .2s ease-in-out;overflow:hidden;opacity:0;z-index:10}.loading-container ion-spinner{will-change:auto;transition:transform .2s ease-in-out;transform:translateY(-100%)}.loading-container.loading{opacity:1}.loading-container.loading ion-spinner{transform:translateY(0)}ion-modal::part(content){border-radius:.75rem;border:1px solid var(--ion-color-step-250)}\n"], dependencies: [{ kind: "component", type: i1.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
216
|
+
}
|
|
217
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InputDecimalComponent, decorators: [{
|
|
218
|
+
type: Component,
|
|
219
|
+
args: [{ selector: 'input-decimal, input-number, input-currency, input-percentage', providers: [
|
|
220
|
+
...InputProviderFactory.GetProviders(InputDecimalComponent),
|
|
221
|
+
{ provide: CustomInput, useExisting: forwardRef(() => InputDecimalComponent) },
|
|
222
|
+
], template: "<div \r\n #inputContainer\r\n class=\"input-container\" \r\n (click)=\"setFocus($event)\"\r\n [class.required]=\"required()\" \r\n [class.submitted]=\"submitted()\" \r\n [class.invalid]=\"invalid\" \r\n [class.disabled]=\"disabled() || loading()\"\r\n [class.loading]=\"loading()\"\r\n>\r\n <div class=\"input-label\"> \r\n <span class=\"truncate\">\r\n {{label()}} \r\n </span>\r\n </div>\r\n\r\n <div class=\"decimal-input-container text-dark\">\r\n <span *ngIf=\"configuration().prefix\" slot=\"start\">{{configuration().prefix}}</span>\r\n <input #input\r\n inputmode=\"numeric\"\r\n [value]=\"valueString\" \r\n (keydown)=\"onKeyDown($event)\"\r\n [disabled]=\"disabled() || loading()\"\r\n (blur)=\"blur.emit($event)\"\r\n />\r\n <span *ngIf=\"configuration().sufix\" slot=\"end\" >{{configuration().sufix}}</span>\r\n </div>\r\n <div class=\"loading-container\" [class.loading]=\"loading()\">\r\n <ion-spinner></ion-spinner>\r\n </div>\r\n</div>", styles: ["input{text-align:right;width:100%}.decimal-input-container{display:flex;width:100%;align-items:center;justify-content:center;gap:.25rem}.decimal-input-container span{flex-shrink:0}\n", "@property --input-color{syntax: \"<color>\"; initial-value: transparent; inherits: false;}.input-container{position:relative;--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));cursor:text;border-radius:.75rem;padding:.25rem .75rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition:--input-color .2s ease-in-out,box-shadow .2s ease-in-out,opacity .2s ease-in-out,filter .2s ease-in-out;--color: var(--ion-color-dark);--input-color: var(--input-background, var(--ion-color-step-250));--shadow: 0 3px 4px -1px rgb(0 0 0 / .1);--inset-shadow: var(--input-color) 0px 1.75px 2px 0px inset;--focused-shadow: 0 0 1px 2px color-mix(in srgb, var(--ion-color-medium) 35%, transparent);box-shadow:var(--inset-shadow),var(--shadow);will-change:box-shadow,filter opacity;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;background:radial-gradient(ellipse at 0px top,hsl(from var(--input-color) h s l/.5),hsl(from var(--input-color) h s l/.4)),hsl(from var(--ion-color-light) h s l/.8)}.input-container:hover{--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container:focus-within,.input-container:focus,.input-container.manual-focus{box-shadow:var(--inset-shadow),var(--shadow),var(--focused-shadow);--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container .input-label{pointer-events:none;display:flex;height:1rem;width:100%;min-width:0px;max-width:100%;align-items:center;justify-content:flex-start;gap:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;color:var(--color)}.input-container input,.input-container textarea{height:1.5rem;width:100%;border-radius:.375rem;background-color:transparent;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}.input-container.loading{cursor:wait!important}.input-container.required .input-label:after{content:\"*\";color:var(--ion-color-danger);vertical-align:bottom}.input-container.submitted.invalid{--input-color: color-mix(in srgb, var(--ion-color-danger) 50%, transparent)}.input-container.disabled{cursor:not-allowed;opacity:.5;--tw-brightness: brightness(1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container.disabled *{pointer-events:none}.loading-container{position:absolute;pointer-events:none;width:100%;height:100%;top:0;left:0;display:flex;justify-content:end;align-items:center;padding-right:.5rem;will-change:opacity;transition:opacity .2s ease-in-out;overflow:hidden;opacity:0;z-index:10}.loading-container ion-spinner{will-change:auto;transition:transform .2s ease-in-out;transform:translateY(-100%)}.loading-container.loading{opacity:1}.loading-container.loading ion-spinner{transform:translateY(0)}ion-modal::part(content){border-radius:.75rem;border:1px solid var(--ion-color-step-250)}\n"] }]
|
|
223
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { input: [{
|
|
224
|
+
type: ViewChild,
|
|
225
|
+
args: ['input']
|
|
226
|
+
}], inputContainer: [{
|
|
227
|
+
type: ViewChild,
|
|
228
|
+
args: ['inputContainer']
|
|
229
|
+
}], onPaste: [{
|
|
230
|
+
type: HostListener,
|
|
231
|
+
args: ['paste', ['$event']]
|
|
232
|
+
}] } });
|
|
233
|
+
const decimalMaxValue = 9_000_000_000_000.00;
|
|
234
|
+
const decimalSeparator = ",";
|
|
235
|
+
const thousandSeparator = ".";
|
|
236
|
+
const Sanitize = ((v) => {
|
|
237
|
+
return v.replaceAll(thousandSeparator, '')
|
|
238
|
+
.replace(decimalSeparator, '');
|
|
239
|
+
});
|
|
240
|
+
const lstNumbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
|
|
241
|
+
const lstIgnoreNotPrevent = ["Tab", "CapsLock", "Shift", "Control", "Alt", "ArrowRight", "ArrowUp", "ArrowDown", "ArrowLeft"];
|
|
242
|
+
const lstEspecialCases = ["Backspace", "Delete"];
|
|
243
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZGVjaW1hbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0LWRlY2ltYWwvaW5wdXQtZGVjaW1hbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0LWRlY2ltYWwvaW5wdXQtZGVjaW1hbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXVCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUosT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7OztBQVcxRCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsV0FBbUI7SUFRbkQsUUFBUSxDQUFDLEtBQXdCO1FBQ3hDLElBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFN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Q0FBQyxDQUFDO0FBQy9ILE1BQU0sZ0JBQWdCLEdBQU0sQ0FBRSxXQUFXLEVBQUUsUUFBUSxDQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBFbGVtZW50UmVmLCBmb3J3YXJkUmVmLCBIb3N0TGlzdGVuZXIsIG1vZGVsLCBNb2RlbFNpZ25hbCwgU2lnbmFsLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZm9ybWF0TnVtYmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSW5wdXRDdXJyZW5jeUNvbmZpZ3VyYXRpb24sIElucHV0RGVjaW1hbENvbmZpZ3VyYXRpb24sIElucHV0TnVtYmVyQ29uZmlndXJhdGlvbiwgSW5wdXRQZXJjZW50YWdlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vaW5wdXQtZGVjaW1hbC5jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHsgSW5wdXRQcm92aWRlckZhY3RvcnkgfSBmcm9tICcuLi9pbnB1dC1wcm92aWRlci1mYWN0b3J5JztcclxuaW1wb3J0IHsgQ3VzdG9tSW5wdXQgfSBmcm9tICcuLi9jdXN0b20taW5wdXQnO1xyXG5pbXBvcnQgeyBUaW1lb3V0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbHMuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lucHV0LWRlY2ltYWwsIGlucHV0LW51bWJlciwgaW5wdXQtY3VycmVuY3ksIGlucHV0LXBlcmNlbnRhZ2UnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC1kZWNpbWFsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC1kZWNpbWFsLmNvbXBvbmVudC5zY3NzJywgJy4uL2lucHV0cy5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICAuLi5JbnB1dFByb3ZpZGVyRmFjdG9yeS5HZXRQcm92aWRlcnMoSW5wdXREZWNpbWFsQ29tcG9uZW50KSxcclxuICAgIHsgcHJvdmlkZTogQ3VzdG9tSW5wdXQsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElucHV0RGVjaW1hbENvbXBvbmVudCkgfSxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5wdXREZWNpbWFsQ29tcG9uZW50IGV4dGVuZHMgQ3VzdG9tSW5wdXQ8bnVtYmVyPiB7XHJcblxyXG4gIGNvbmZpZ3VyYXRpb246IE1vZGVsU2lnbmFsPElucHV0RGVjaW1hbENvbmZpZ3VyYXRpb24+ID0gbW9kZWw8SW5wdXREZWNpbWFsQ29uZmlndXJhdGlvbj4oKTtcclxuICBkaWdpdHNJbmZvOiBTaWduYWw8c3RyaW5nPiA9IGNvbXB1dGVkKCgpID0+IGAxLiR7dGhpcy5jb25maWd1cmF0aW9uKCkucHJlY2lzaW9ufS0ke3RoaXMuY29uZmlndXJhdGlvbigpLnByZWNpc2lvbn1gKTtcclxuICBkaXZpZGVyOiBTaWduYWw8bnVtYmVyPiA9IGNvbXB1dGVkKCgpID0+IE1hdGgucG93KDEwLCB0aGlzLmNvbmZpZ3VyYXRpb24oKS5wcmVjaXNpb24pKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnaW5wdXQnKSBpbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcclxuICBAVmlld0NoaWxkKCdpbnB1dENvbnRhaW5lcicpIGlucHV0Q29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuICBvdmVycmlkZSBzZXRGb2N1cyhldmVudDogTW91c2VFdmVudCB8IG51bGwpOiB2b2lkIHtcclxuICAgIGlmKHRoaXMuaW5wdXQgJiYgZXZlbnQudGFyZ2V0ID09IHRoaXMuaW5wdXRDb250YWluZXIubmF0aXZlRWxlbWVudCkgeyBcclxuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7IFxyXG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UodGhpcy52YWx1ZVN0cmluZy5sZW5ndGgsIHRoaXMudmFsdWVTdHJpbmcubGVuZ3RoKTsgXHJcbiAgICB9ICAgICAgXHJcbiAgfVxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgb3ZlcnJpZGUgZWxlbWVudFJlZjogRWxlbWVudFJlZlxyXG4gICkgeyBcclxuICAgIHN1cGVyKCk7IFxyXG4gICAgdGhpcy52YWx1ZS5zZXQoMCk7XHJcbiAgICBjb25zdCBzZWxlY3Rvcjogc3RyaW5nID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpLnNwbGl0KCctJykuYXQoLTEpO1xyXG4gICAgaWYoc2VsZWN0b3IgPT0gXCJudW1iZXJcIiAgICAgJiYgIXRoaXMuY29uZmlndXJhdGlvbigpKXsgdGhpcy5jb25maWd1cmF0aW9uLnNldChuZXcgSW5wdXROdW1iZXJDb25maWd1cmF0aW9uKCkpOyAgICAgfSBlbHNlXHJcbiAgICBpZihzZWxlY3RvciA9PSBcImRlY2ltYWxcIiAgICAmJiAhdGhpcy5jb25maWd1cmF0aW9uKCkpeyB0aGlzLmNvbmZpZ3VyYXRpb24uc2V0KG5ldyBJbnB1dERlY2ltYWxDb25maWd1cmF0aW9uKCkpOyAgICB9IGVsc2VcclxuICAgIGlmKHNlbGVjdG9yID09IFwiY3VycmVuY3lcIiAgICYmICF0aGlzLmNvbmZpZ3VyYXRpb24oKSl7IHRoaXMuY29uZmlndXJhdGlvbi5zZXQobmV3IElucHV0Q3VycmVuY3lDb25maWd1cmF0aW9uKCkpOyAgIH0gZWxzZVxyXG4gICAgaWYoc2VsZWN0b3IgPT0gXCJwZXJjZW50YWdlXCIgJiYgIXRoaXMuY29uZmlndXJhdGlvbigpKXsgdGhpcy5jb25maWd1cmF0aW9uLnNldChuZXcgSW5wdXRQZXJjZW50YWdlQ29uZmlndXJhdGlvbigpKTsgfVxyXG4gICAgdGhpcy5TZXRWYWx1ZVN0cmluZygpOyBcclxuICB9XHJcbiAgXHJcbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZShvYmo6IG51bWJlcik6IHZvaWQgfCBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMudmFsdWUuc2V0KG9iaik7XHJcbiAgICB0aGlzLlNldFZhbHVlU3RyaW5nKCk7XHJcbiAgICB0aGlzLnJ1blZhbGlkYXRpb24oKTtcclxuICB9XHJcbiAgb3ZlcnJpZGUgU2V0VmFsdWUob2JqOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUuc2V0KG9iaik7XHJcbiAgICB0aGlzLlNldFZhbHVlU3RyaW5nKCk7XHJcbiAgICB0aGlzLnJ1blZhbGlkYXRpb24oKTtcclxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKG9iaik7IFxyXG4gIH1cclxuICBTZXRWYWx1ZVN0cmluZygpOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWVTdHJpbmcgPSBmb3JtYXROdW1iZXIodGhpcy52YWx1ZSgpLCBcInB0LUJSXCIsIHRoaXMuZGlnaXRzSW5mbygpKTtcclxuICB9XHJcbiAgXHJcbiAgdmFsdWVTdHJpbmc6IHN0cmluZztcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcigncGFzdGUnLCBbJyRldmVudCddKVxyXG4gIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgXHJcbiAgICBsZXQgY2xpcGJvYXJkRGF0YSA9IGV2ZW50LmNsaXBib2FyZERhdGEgfHwgd2luZG93WydjbGlwYm9hcmREYXRhJ107XHJcbiAgICBsZXQgcGFzdGVkVGV4dCAgICA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xyXG5cclxuICAgIGNvbnN0IHMgPSBwYXN0ZWRUZXh0LnJlcGxhY2VBbGwoJy4nLCAnJykucmVwbGFjZUFsbCgnLCcsICcuJyk7XHJcbiAgICBjb25zdCBuID0gTnVtYmVyKHMpO1xyXG5cclxuICAgIGlmKE51bWJlcihzKSAmJiBpc0Zpbml0ZShuKSl7IFxyXG4gICAgICB0aGlzLlNldFZhbHVlKG4pO1xyXG4gICAgfVxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IFByb21pc2U8dm9pZD57XHJcbiAgICBjb25zdCB2YWx1ZTogc3RyaW5nID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0OiBudW1iZXIgPSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25FbmQgIDogbnVtYmVyID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvbkVuZDtcclxuXHJcbiAgICBjb25zdCBhdExlZnQgID0gdmFsdWUuc2xpY2UoMCwgc2VsZWN0aW9uU3RhcnQpOyBcclxuICAgIGNvbnN0IGF0UmlnaHQgPSB2YWx1ZS5zbGljZShzZWxlY3Rpb25FbmQsIHZhbHVlLmxlbmd0aCk7IFxyXG4gICAgaWYoW1wiLVwiXS5pbmNsdWRlcyhldmVudC5rZXkpKXsgXHJcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLkhhbmRsZU5lZ2F0aXZlKGV2ZW50LCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kLCB2YWx1ZSwgYXRMZWZ0LCBhdFJpZ2h0KTtcclxuICAgIH1lbHNlXHJcbiAgICBpZihsc3ROdW1iZXJzLmluY2x1ZGVzKGV2ZW50LmtleSkpeyBcclxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuSGFuZGxlTnVtYmVyKGV2ZW50LCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kLCB2YWx1ZSwgYXRMZWZ0LCBhdFJpZ2h0KTsgXHJcbiAgICB9ZWxzZVxyXG4gICAgaWYobHN0RXNwZWNpYWxDYXNlcy5pbmNsdWRlcyhldmVudC5rZXkpKXsgXHJcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLkhhbmRsZUVzcGVjaWFsKGV2ZW50LCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kLCB2YWx1ZSwgYXRMZWZ0LCBhdFJpZ2h0KTsgXHJcbiAgICB9ZWxzZVxyXG4gICAgaWYoW1wiQVwiLCBcImFcIl0uaW5jbHVkZXMoZXZlbnQua2V5KSAmJiBldmVudC5jdHJsS2V5KXsgXHJcbiAgICAgIHJldHVybjsgXHJcbiAgICB9ZWxzZVxyXG4gICAgaWYoW1wiQ1wiLCBcImNcIl0uaW5jbHVkZXMoZXZlbnQua2V5KSAmJiBldmVudC5jdHJsS2V5KXsgXHJcbiAgICAgIHJldHVybjsgXHJcbiAgICB9ZWxzZVxyXG4gICAgaWYoW1wiVlwiLCBcInZcIl0uaW5jbHVkZXMoZXZlbnQua2V5KSAmJiBldmVudC5jdHJsS2V5KXsgXHJcbiAgICAgIHJldHVybjsgXHJcbiAgICB9ZWxzZVxyXG4gICAgaWYobHN0SWdub3JlTm90UHJldmVudC5pbmNsdWRlcyhldmVudC5rZXkpKXsgXHJcbiAgICAgIHJldHVybjsgXHJcbiAgICB9ZWxzZXtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIEhhbmRsZU5lZ2F0aXZlKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBzZWxlY3Rpb25TdGFydDogbnVtYmVyLCBzZWxlY3Rpb25FbmQ6IG51bWJlciwgdmFsdWU6IHN0cmluZywgYXRMZWZ0OiBzdHJpbmcsIGF0UmlnaHQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD57XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGxldCBmb2N1c0VuZCA9IChzZWxlY3Rpb25TdGFydCA9PSAwICYmIHNlbGVjdGlvbkVuZCA9PSB0aGlzLnZhbHVlU3RyaW5nLmxlbmd0aCk7XHJcbiAgICAvKiogWyBSZW1vdmUgZGVjaW1hbFNlcGFyYXRvciAmIHRob3VzYW5kU2VwYXJhdG9yIF0gKi9cclxuICAgIGxldCBmO1xyXG4gICAgaWYoIWF0TGVmdC5pbmNsdWRlcygnLScpKXtcclxuICAgICAgZiA9IGV2ZW50LmtleSArIGF0TGVmdCArIGF0UmlnaHQ7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgZiA9IChhdExlZnQgKyBhdFJpZ2h0KS5yZXBsYWNlKCctJywgJycpXHJcbiAgICB9XHJcblxyXG4gICAgaWYoZiA9PSBcIi1cIil7IFxyXG4gICAgICBpZih2YWx1ZS5pbmNsdWRlcygnLScpKXtcclxuICAgICAgICBmID0gdmFsdWUucmVwbGFjZSgnLScsICcnKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNle1xyXG4gICAgICAgIGYgPSBgLSR7dmFsdWV9YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IEN1cnJlbnRWYWx1ZTogbnVtYmVyID0gdGhpcy5TYW5pdGl6ZVZhbHVlKGYpO1xyXG4gICAgaWYoQ3VycmVudFZhbHVlID09IHRoaXMudmFsdWUoKSl7IHJldHVybjsgfVxyXG4gICAgXHJcbiAgICAvL1sgSGFuZGxlIFNldCBDdXJzb3IgUG9zaXRpb25dXHJcbiAgICB0aGlzLlNldFZhbHVlKEN1cnJlbnRWYWx1ZSk7XHJcbiAgICBjb25zdCBuZXdQb3MgPSBzZWxlY3Rpb25TdGFydCArIDEgKyB0aGlzLnZhbHVlU3RyaW5nLnNwbGl0KCcuJykubGVuZ3RoIC0gdmFsdWUuc3BsaXQoJy4nKS5sZW5ndGg7XHJcbiAgICBcclxuICAgIC8vSG9ycml2ZWwsIG1hcyBuYW8gdGVtIHVtYSBhbHRlcm5hdGl2YSBib2EsIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzUxMTA4OC91c2UtamF2YXNjcmlwdC10by1wbGFjZS1jdXJzb3ItYXQtZW5kLW9mLXRleHQtaW4tdGV4dC1pbnB1dC1lbGVtZW50XHJcbiAgICBhd2FpdCBUaW1lb3V0KDApO1xyXG4gICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKG5ld1BvcywgbmV3UG9zKTsgXHJcbiAgICBpZihmb2N1c0VuZCl7XHJcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZSh0aGlzLnZhbHVlU3RyaW5nLmxlbmd0aCwgdGhpcy52YWx1ZVN0cmluZy5sZW5ndGgpOyBcclxuICAgIH1cclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGFzeW5jIEhhbmRsZU51bWJlcihldmVudDogS2V5Ym9hcmRFdmVudCwgc2VsZWN0aW9uU3RhcnQ6IG51bWJlciwgc2VsZWN0aW9uRW5kOiBudW1iZXIsIHZhbHVlOiBzdHJpbmcsIGF0TGVmdDogc3RyaW5nLCBhdFJpZ2h0OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBcclxuICAgIGxldCBmb2N1c0VuZCA9IChzZWxlY3Rpb25TdGFydCA9PSAwICYmIHNlbGVjdGlvbkVuZCA9PSB0aGlzLnZhbHVlU3RyaW5nLmxlbmd0aCk7XHJcbiAgICAvKiogWyBSZW1vdmUgZGVjaW1hbFNlcGFyYXRvciAmIHRob3VzYW5kU2VwYXJhdG9yIF0gKi9cclxuICAgIGNvbnN0IGYgPSBhdExlZnQgKyBldmVudC5rZXkgKyBhdFJpZ2h0O1xyXG4gICAgY29uc3QgQ3VycmVudFZhbHVlOiBudW1iZXIgPSB0aGlzLlNhbml0aXplVmFsdWUoZik7XHJcbiAgICBpZihDdXJyZW50VmFsdWUgPT0gdGhpcy52YWx1ZSgpKXsgcmV0dXJuOyB9XHJcbiAgICBpZihDdXJyZW50VmFsdWUgPiBkZWNpbWFsTWF4VmFsdWUpeyByZXR1cm47IH1cclxuICAgIFxyXG4gICAgLy9bIEhhbmRsZSBTZXQgQ3Vyc29yIFBvc2l0aW9uXVxyXG4gICAgdGhpcy5TZXRWYWx1ZShDdXJyZW50VmFsdWUpO1xyXG4gICAgY29uc3QgbmV3UG9zaXRpb24gPSBzZWxlY3Rpb25TdGFydCArIDEgKyB0aGlzLnZhbHVlU3RyaW5nLnNwbGl0KCcuJykubGVuZ3RoIC0gdmFsdWUuc3BsaXQoJy4nKS5sZW5ndGg7XHJcbiAgICBcclxuICAgIC8vSG9ycml2ZWwsIG1hcyBuYW8gc2VtIHVtYSBhbHRlcm5hdGl2YSBib2EsIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzUxMTA4OC91c2UtamF2YXNjcmlwdC10by1wbGFjZS1jdXJzb3ItYXQtZW5kLW9mLXRleHQtaW4tdGV4dC1pbnB1dC1lbGVtZW50XHJcbiAgICBhd2FpdCBUaW1lb3V0KDApO1xyXG4gICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKG5ld1Bvc2l0aW9uLCBuZXdQb3NpdGlvbik7IFxyXG4gICAgaWYoZm9jdXNFbmQpe1xyXG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UodGhpcy52YWx1ZVN0cmluZy5sZW5ndGgsIHRoaXMudmFsdWVTdHJpbmcubGVuZ3RoKTsgXHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBTYW5pdGl6ZVZhbHVlKGY6IHN0cmluZyk6IG51bWJlcntcclxuICAgIHZhciBDdXJyZW50VmFsdWU6IG51bWJlciA9IE51bWJlcihTYW5pdGl6ZShmKSkgLyB0aGlzLmRpdmlkZXIoKTtcclxuICAgIGlmKEN1cnJlbnRWYWx1ZSA+PSBkZWNpbWFsTWF4VmFsdWUpeyBcclxuICAgICAgcmV0dXJuIHRoaXMudmFsdWUoKTsgXHJcbiAgICB9XHJcbiAgICByZXR1cm4gQ3VycmVudFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgSGFuZGxlRXNwZWNpYWwoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHNlbGVjdGlvblN0YXJ0OiBudW1iZXIsIHNlbGVjdGlvbkVuZDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nLCBhdExlZnQ6IHN0cmluZywgYXRSaWdodDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYoc2VsZWN0aW9uU3RhcnQgPT0gc2VsZWN0aW9uRW5kKXtcclxuICAgICAgaWYoZXZlbnQua2V5ID09IFwiQmFja3NwYWNlXCIpe1xyXG4gICAgICAgIGlmKHNlbGVjdGlvblN0YXJ0ID09ICBzZWxlY3Rpb25FbmQgJiYgc2VsZWN0aW9uU3RhcnQgPT0gMCl7IFxyXG4gICAgICAgICAgcmV0dXJuOyBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzQ2hhcjogc3RyaW5nID0gYXRMZWZ0LmF0KC0xKTtcclxuICAgICAgICBjb25zdCBpc051bWJlciA9IGxzdE51bWJlcnMuaW5jbHVkZXMocHJldmlvdXNDaGFyKTtcclxuICAgICAgICBjb25zdCBmID0gYXRMZWZ0LnNsaWNlKDAsIGF0TGVmdC5sZW5ndGggLSAoaXNOdW1iZXIgPyAxIDogMikpICsgYXRSaWdodDtcclxuICAgICAgICBjb25zdCBDdXJyZW50VmFsdWUgPSB0aGlzLlNhbml0aXplVmFsdWUoZik7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9bIEhhbmRsZSBTZXQgQ3Vyc29yIFBvc2l0aW9uXVxyXG4gICAgICAgIHRoaXMuU2V0VmFsdWUoQ3VycmVudFZhbHVlKTtcclxuICAgICAgICBhd2FpdCBUaW1lb3V0KDApO1xyXG4gICAgICAgIGxldCBwb3MgPSBpc051bWJlciA/IHNlbGVjdGlvblN0YXJ0IC0gMSA6IHNlbGVjdGlvblN0YXJ0IC0gMjtcclxuXHJcbiAgICAgICAgaWYgKHNlbGVjdGlvbkVuZCA9PSB0aGlzLnZhbHVlU3RyaW5nLmxlbmd0aCkge1xyXG4gICAgICAgICAgcG9zKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShwb3MsIHBvcyk7IFxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfWVsc2VcclxuICAgICAgaWYoZXZlbnQua2V5ID09IFwiRGVsZXRlXCIpe1xyXG4gICAgICAgIGNvbnN0IG5leHRDaGFyOiBzdHJpbmcgPSAgYXRSaWdodFswXTtcclxuICAgICAgICBjb25zdCBpc051bWJlciA9IGxzdE51bWJlcnMuaW5jbHVkZXMobmV4dENoYXIpO1xyXG4gICAgICAgIGNvbnN0IGYgPSBhdExlZnQgKyBhdFJpZ2h0LnNsaWNlKGlzTnVtYmVyID8gMSA6IDIpO1xyXG4gICAgICAgIGNvbnN0IEN1cnJlbnRWYWx1ZSA9ICB0aGlzLlNhbml0aXplVmFsdWUoZik7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9bIEhhbmRsZSBTZXQgQ3Vyc29yIFBvc2l0aW9uXVxyXG4gICAgICAgIHRoaXMuU2V0VmFsdWUoQ3VycmVudFZhbHVlKTtcclxuICAgICAgICB2YXIgcG9zOiBudW1iZXIgPSBzZWxlY3Rpb25TdGFydDtcclxuICAgICAgICBpZihwb3MgPD0gLTEpeyBwb3MgPSAwOyB9XHJcbiAgICAgICAgaWYoQ3VycmVudFZhbHVlIDwgMSl7XHJcbiAgICAgICAgICBwb3MrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWlzTnVtYmVyKXtcclxuICAgICAgICAgIHBvcysrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgVGltZW91dCgwKTtcclxuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UocG9zLCBwb3MpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfWVsc2V7XHJcbiAgICAgIGNvbnN0IGYgPSBhdExlZnQgKyBhdFJpZ2h0O1xyXG4gICAgICBjb25zdCBDdXJyZW50VmFsdWUgPSB0aGlzLlNhbml0aXplVmFsdWUoZik7XHJcbiAgICAgIHRoaXMuU2V0VmFsdWUoQ3VycmVudFZhbHVlKTtcclxuICAgICAgXHJcbiAgICAgIGF3YWl0IFRpbWVvdXQoMCk7XHJcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZSh0aGlzLnZhbHVlU3RyaW5nLmxlbmd0aCwgdGhpcy52YWx1ZVN0cmluZy5sZW5ndGgpOyBcclxuXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblxyXG5jb25zdCBkZWNpbWFsTWF4VmFsdWUgPSA5XzAwMF8wMDBfMDAwXzAwMC4wMFxyXG5cclxuY29uc3QgZGVjaW1hbFNlcGFyYXRvciA6IHN0cmluZyA9IFwiLFwiO1xyXG5jb25zdCB0aG91c2FuZFNlcGFyYXRvcjogc3RyaW5nID0gXCIuXCI7XHJcblxyXG5jb25zdCBTYW5pdGl6ZTogRnVuY3Rpb24gPSAoKHY6IHN0cmluZyk6IHN0cmluZyA9PiB7IFxyXG4gIHJldHVybiB2LnJlcGxhY2VBbGwodGhvdXNhbmRTZXBhcmF0b3IsICcnKVxyXG4gICAgICAgICAgLnJlcGxhY2UgICAoZGVjaW1hbFNlcGFyYXRvciAsICcnKSBcclxuICAgICAgICB9KTtcclxuXHJcbmNvbnN0IGxzdE51bWJlcnMgICAgICAgICAgPSBbIFwiMFwiLFwiMVwiLFwiMlwiLFwiM1wiLFwiNFwiLFwiNVwiLFwiNlwiLFwiN1wiLFwiOFwiLFwiOVwiIF07XHJcbmNvbnN0IGxzdElnbm9yZU5vdFByZXZlbnQgPSBbIFwiVGFiXCIsIFwiQ2Fwc0xvY2tcIiwgXCJTaGlmdFwiLCBcIkNvbnRyb2xcIiwgXCJBbHRcIiwgXCJBcnJvd1JpZ2h0XCIsIFwiQXJyb3dVcFwiLCBcIkFycm93RG93blwiLCBcIkFycm93TGVmdFwiXTtcclxuY29uc3QgbHN0RXNwZWNpYWxDYXNlcyAgICA9IFsgXCJCYWNrc3BhY2VcIiwgXCJEZWxldGVcIiBdOyIsIjxkaXYgXHJcbiAgI2lucHV0Q29udGFpbmVyXHJcbiAgY2xhc3M9XCJpbnB1dC1jb250YWluZXJcIiBcclxuICAoY2xpY2spPVwic2V0Rm9jdXMoJGV2ZW50KVwiXHJcbiAgW2NsYXNzLnJlcXVpcmVkXT1cInJlcXVpcmVkKClcIiBcclxuICBbY2xhc3Muc3VibWl0dGVkXT1cInN1Ym1pdHRlZCgpXCIgXHJcbiAgW2NsYXNzLmludmFsaWRdPVwiaW52YWxpZFwiIFxyXG4gIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZCgpIHx8IGxvYWRpbmcoKVwiXHJcbiAgW2NsYXNzLmxvYWRpbmddPVwibG9hZGluZygpXCJcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJpbnB1dC1sYWJlbFwiPiBcclxuICAgIDxzcGFuIGNsYXNzPVwidHJ1bmNhdGVcIj5cclxuICAgICAge3tsYWJlbCgpfX0gXHJcbiAgICA8L3NwYW4+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJkZWNpbWFsLWlucHV0LWNvbnRhaW5lciB0ZXh0LWRhcmtcIj5cclxuICAgIDxzcGFuICpuZ0lmPVwiY29uZmlndXJhdGlvbigpLnByZWZpeFwiIHNsb3Q9XCJzdGFydFwiPnt7Y29uZmlndXJhdGlvbigpLnByZWZpeH19PC9zcGFuPlxyXG4gICAgPGlucHV0ICNpbnB1dFxyXG4gICAgICBpbnB1dG1vZGU9XCJudW1lcmljXCJcclxuICAgICAgW3ZhbHVlXT1cInZhbHVlU3RyaW5nXCIgXHJcbiAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkKCkgfHwgbG9hZGluZygpXCJcclxuICAgICAgKGJsdXIpPVwiYmx1ci5lbWl0KCRldmVudClcIlxyXG4gICAgLz5cclxuICAgIDxzcGFuICpuZ0lmPVwiY29uZmlndXJhdGlvbigpLnN1Zml4XCIgIHNsb3Q9XCJlbmRcIiAgPnt7Y29uZmlndXJhdGlvbigpLnN1Zml4fX08L3NwYW4+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImxvYWRpbmctY29udGFpbmVyXCIgW2NsYXNzLmxvYWRpbmddPVwibG9hZGluZygpXCI+XHJcbiAgICA8aW9uLXNwaW5uZXI+PC9pb24tc3Bpbm5lcj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export class InputDecimalConfiguration {
|
|
2
|
+
constructor(
|
|
3
|
+
/** Declara a quantidade de numeros apos o ponto */
|
|
4
|
+
precision = 2,
|
|
5
|
+
/** Texto no inicio do input */
|
|
6
|
+
prefix = null,
|
|
7
|
+
/** Texto no fim do input */
|
|
8
|
+
sufix = null,
|
|
9
|
+
/** Se = false não aplica virgulas no lugar do separador a cada 3 unidades */
|
|
10
|
+
thousandSeparator = '.', decimalSeparator = ',') {
|
|
11
|
+
this.precision = precision;
|
|
12
|
+
this.thousandSeparator = thousandSeparator;
|
|
13
|
+
this.decimalSeparator = decimalSeparator;
|
|
14
|
+
if (!prefix) {
|
|
15
|
+
this.prefix = '';
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
this.prefix = prefix;
|
|
19
|
+
}
|
|
20
|
+
if (!sufix) {
|
|
21
|
+
this.sufix = '';
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
this.sufix = sufix;
|
|
25
|
+
}
|
|
26
|
+
this.placeholder = "-";
|
|
27
|
+
if (precision > 0) {
|
|
28
|
+
this.placeholder += this.decimalSeparator;
|
|
29
|
+
for (let i = precision; i > 0; i--) {
|
|
30
|
+
this.placeholder += "-";
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export class InputNumberConfiguration extends InputDecimalConfiguration {
|
|
36
|
+
constructor(prefix = "", sufix = "", thousandSeparator = '.') {
|
|
37
|
+
super(0, prefix, sufix, thousandSeparator);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export class InputCurrencyConfiguration extends InputDecimalConfiguration {
|
|
41
|
+
constructor(prefix = "R$", sufix = "", thousandSeparator = '.') {
|
|
42
|
+
super(2, prefix, sufix, thousandSeparator);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export class InputPercentageConfiguration extends InputDecimalConfiguration {
|
|
46
|
+
constructor(prefix = "", sufix = "%", thousandSeparator = '.') {
|
|
47
|
+
super(2, prefix, sufix, thousandSeparator);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZGVjaW1hbC5jb25maWd1cmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2lucHV0cy9pbnB1dC1kZWNpbWFsL2lucHV0LWRlY2ltYWwuY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8seUJBQXlCO0lBS3BDO0lBQ0Usb0RBQW9EO0lBQzdDLFlBQW9CLENBQUM7SUFDNUIsK0JBQStCO0lBQy9CLFNBQXdCLElBQUk7SUFDNUIsNEJBQTRCO0lBQzVCLFFBQXVCLElBQUk7SUFDM0IsNkVBQTZFO0lBQ3RFLG9CQUE0QixHQUFHLEVBQy9CLG1CQUE0QixHQUFHO1FBUC9CLGNBQVMsR0FBVCxTQUFTLENBQVk7UUFNckIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFjO1FBQy9CLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBZTtRQUV0QyxJQUFHLENBQUMsTUFBTSxFQUFDLENBQUM7WUFBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUFDLENBQUM7YUFBSSxDQUFDO1lBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFBQyxDQUFDO1FBQzdELElBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUFDLElBQUksQ0FBQyxLQUFLLEdBQUksRUFBRSxDQUFDO1FBQUMsQ0FBQzthQUFJLENBQUM7WUFBQyxJQUFJLENBQUMsS0FBSyxHQUFJLEtBQUssQ0FBQztRQUFDLENBQUM7UUFFNUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7UUFDdkIsSUFBRyxTQUFTLEdBQUcsQ0FBQyxFQUFDLENBQUM7WUFDaEIsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDMUMsS0FBSSxJQUFJLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBQyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQztZQUMxQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRjtBQUNELE1BQU0sT0FBTyx3QkFBeUIsU0FBUSx5QkFBeUI7SUFDckUsWUFDRSxTQUFpQixFQUFFLEVBQ25CLFFBQWlCLEVBQUUsRUFDbkIsb0JBQTRCLEdBQUc7UUFFL0IsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNGO0FBQ0QsTUFBTSxPQUFPLDBCQUEyQixTQUFRLHlCQUF5QjtJQUN2RSxZQUFZLFNBQWlCLElBQUksRUFBRSxRQUFnQixFQUFFLEVBQUUsb0JBQTRCLEdBQUc7UUFDcEYsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNGO0FBQ0QsTUFBTSxPQUFPLDRCQUE2QixTQUFRLHlCQUF5QjtJQUN6RSxZQUFZLFNBQWlCLEVBQUUsRUFBRSxRQUFnQixHQUFHLEVBQUUsb0JBQTRCLEdBQUc7UUFDbkYsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIElucHV0RGVjaW1hbENvbmZpZ3VyYXRpb257XHJcbiAgcHJlZml4ICAgICAgOiBzdHJpbmc7XHJcbiAgc3VmaXggICAgICAgOiBzdHJpbmc7XHJcbiAgcGxhY2Vob2xkZXIgOiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLyoqIERlY2xhcmEgYSBxdWFudGlkYWRlIGRlIG51bWVyb3MgYXBvcyBvIHBvbnRvICAqL1xyXG4gICAgcHVibGljIHByZWNpc2lvbjogbnVtYmVyID0gMiwgXHJcbiAgICAvKiogVGV4dG8gbm8gaW5pY2lvIGRvIGlucHV0ICovXHJcbiAgICBwcmVmaXg6IHN0cmluZyB8IG51bGwgPSBudWxsLCBcclxuICAgIC8qKiBUZXh0byBubyBmaW0gZG8gaW5wdXQgKi9cclxuICAgIHN1Zml4OiBzdHJpbmcgfCBudWxsID0gbnVsbCwgXHJcbiAgICAvKiogU2UgPSBmYWxzZSBuw6NvIGFwbGljYSB2aXJndWxhcyBubyBsdWdhciBkbyBzZXBhcmFkb3IgYSBjYWRhIDMgdW5pZGFkZXMgKi9cclxuICAgIHB1YmxpYyB0aG91c2FuZFNlcGFyYXRvcjogc3RyaW5nID0gJy4nLFxyXG4gICAgcHVibGljIGRlY2ltYWxTZXBhcmF0b3IgOiBzdHJpbmcgPSAnLCdcclxuICApe1xyXG4gICAgaWYoIXByZWZpeCl7IHRoaXMucHJlZml4ID0gJyc7IH1lbHNleyB0aGlzLnByZWZpeCA9IHByZWZpeDsgfVxyXG4gICAgaWYoIXN1Zml4ICl7IHRoaXMuc3VmaXggID0gJyc7IH1lbHNleyB0aGlzLnN1Zml4ICA9IHN1Zml4OyB9XHJcblxyXG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IFwiLVwiO1xyXG4gICAgaWYocHJlY2lzaW9uID4gMCl7XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgKz0gdGhpcy5kZWNpbWFsU2VwYXJhdG9yO1xyXG4gICAgICBmb3IobGV0IGkgPSBwcmVjaXNpb247IGkgPiAwOyBpLS0pe1xyXG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXIgKz0gXCItXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn0gXHJcbmV4cG9ydCBjbGFzcyBJbnB1dE51bWJlckNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBJbnB1dERlY2ltYWxDb25maWd1cmF0aW9uIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByZWZpeDogc3RyaW5nID0gXCJcIiwgXHJcbiAgICBzdWZpeCA6IHN0cmluZyA9IFwiXCIsIFxyXG4gICAgdGhvdXNhbmRTZXBhcmF0b3I6IHN0cmluZyA9ICcuJ1xyXG4gICl7XHJcbiAgICBzdXBlcigwLCBwcmVmaXgsIHN1Zml4LCB0aG91c2FuZFNlcGFyYXRvcik7XHJcbiAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBJbnB1dEN1cnJlbmN5Q29uZmlndXJhdGlvbiBleHRlbmRzIElucHV0RGVjaW1hbENvbmZpZ3VyYXRpb24ge1xyXG4gIGNvbnN0cnVjdG9yKHByZWZpeDogc3RyaW5nID0gXCJSJFwiLCBzdWZpeDogc3RyaW5nID0gXCJcIiwgdGhvdXNhbmRTZXBhcmF0b3I6IHN0cmluZyA9ICcuJyl7XHJcbiAgICBzdXBlcigyLCBwcmVmaXgsIHN1Zml4LCB0aG91c2FuZFNlcGFyYXRvcik7XHJcbiAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBJbnB1dFBlcmNlbnRhZ2VDb25maWd1cmF0aW9uIGV4dGVuZHMgSW5wdXREZWNpbWFsQ29uZmlndXJhdGlvbiB7XHJcbiAgY29uc3RydWN0b3IocHJlZml4OiBzdHJpbmcgPSBcIlwiLCBzdWZpeDogc3RyaW5nID0gXCIlXCIsIHRob3VzYW5kU2VwYXJhdG9yOiBzdHJpbmcgPSAnLicpe1xyXG4gICAgc3VwZXIoMiwgcHJlZml4LCBzdWZpeCwgdGhvdXNhbmRTZXBhcmF0b3IpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { InputDecimalConfiguration, InputNumberConfiguration } from "./input-decimal/input-decimal.configuration";
|
|
2
|
+
export class InputsDefaultConfigurations {
|
|
3
|
+
static { this.configurationDecimalPercentage = new InputDecimalConfiguration(2, null, '%'); }
|
|
4
|
+
static { this.configurationDecimalDegree = new InputDecimalConfiguration(2, null, "°C"); }
|
|
5
|
+
static { this.configurationDecimalM3H = new InputDecimalConfiguration(2, null, "m³/h"); }
|
|
6
|
+
static { this.configurationDecimalMeters = new InputDecimalConfiguration(2, null, "m"); }
|
|
7
|
+
static { this.configurationDecimalMilimeters = new InputDecimalConfiguration(2, null, "mm"); }
|
|
8
|
+
static { this.configurationNumberPercentage = new InputNumberConfiguration(null, '%'); }
|
|
9
|
+
static { this.configurationNumberDegree = new InputNumberConfiguration(null, "°C"); }
|
|
10
|
+
static { this.configurationNumberM3H = new InputNumberConfiguration(null, "m³/h"); }
|
|
11
|
+
static { this.configurationNumberMeters = new InputNumberConfiguration(null, "m"); }
|
|
12
|
+
static { this.configurationNumberMilimeters = new InputNumberConfiguration(null, "mm"); }
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZGVmYXVsdC1jb25maWd1cmF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9pbnB1dHMvaW5wdXQtZGVmYXVsdC1jb25maWd1cmF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUVsSCxNQUFNLE9BQU8sMkJBQTJCO2FBQ3RCLG1DQUE4QixHQUE4QixJQUFJLHlCQUF5QixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDeEcsK0JBQTBCLEdBQWtDLElBQUkseUJBQXlCLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzthQUN6Ryw0QkFBdUIsR0FBcUMsSUFBSSx5QkFBeUIsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQzNHLCtCQUEwQixHQUFrQyxJQUFJLHlCQUF5QixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDeEcsbUNBQThCLEdBQThCLElBQUkseUJBQXlCLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzthQUV6RyxrQ0FBNkIsR0FBNkIsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDbEcsOEJBQXlCLEdBQWlDLElBQUksd0JBQXdCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ25HLDJCQUFzQixHQUFvQyxJQUFJLHdCQUF3QixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQzthQUNyRyw4QkFBeUIsR0FBaUMsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDbEcsa0NBQTZCLEdBQTZCLElBQUksd0JBQXdCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5wdXREZWNpbWFsQ29uZmlndXJhdGlvbiwgSW5wdXROdW1iZXJDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4vaW5wdXQtZGVjaW1hbC9pbnB1dC1kZWNpbWFsLmNvbmZpZ3VyYXRpb25cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBJbnB1dHNEZWZhdWx0Q29uZmlndXJhdGlvbnMge1xyXG4gIHN0YXRpYyByZWFkb25seSBjb25maWd1cmF0aW9uRGVjaW1hbFBlcmNlbnRhZ2U6IElucHV0RGVjaW1hbENvbmZpZ3VyYXRpb24gPSBuZXcgSW5wdXREZWNpbWFsQ29uZmlndXJhdGlvbigyLCBudWxsLCAnJScpO1xyXG4gIHN0YXRpYyByZWFkb25seSBjb25maWd1cmF0aW9uRGVjaW1hbERlZ3JlZSAgICA6IElucHV0RGVjaW1hbENvbmZpZ3VyYXRpb24gPSBuZXcgSW5wdXREZWNpbWFsQ29uZmlndXJhdGlvbigyLCBudWxsLCBcIsKwQ1wiKTtcclxuICBzdGF0aWMgcmVhZG9ubHkgY29uZmlndXJhdGlvbkRlY2ltYWxNM0ggICAgICAgOiBJbnB1dERlY2ltYWxDb25maWd1cmF0aW9uID0gbmV3IElucHV0RGVjaW1hbENvbmZpZ3VyYXRpb24oMiwgbnVsbCwgXCJtwrMvaFwiKTtcclxuICBzdGF0aWMgcmVhZG9ubHkgY29uZmlndXJhdGlvbkRlY2ltYWxNZXRlcnMgICAgOiBJbnB1dERlY2ltYWxDb25maWd1cmF0aW9uID0gbmV3IElucHV0RGVjaW1hbENvbmZpZ3VyYXRpb24oMiwgbnVsbCwgXCJtXCIpO1xyXG4gIHN0YXRpYyByZWFkb25seSBjb25maWd1cmF0aW9uRGVjaW1hbE1pbGltZXRlcnM6IElucHV0RGVjaW1hbENvbmZpZ3VyYXRpb24gPSBuZXcgSW5wdXREZWNpbWFsQ29uZmlndXJhdGlvbigyLCBudWxsLCBcIm1tXCIpO1xyXG5cclxuICBzdGF0aWMgcmVhZG9ubHkgY29uZmlndXJhdGlvbk51bWJlclBlcmNlbnRhZ2U6IElucHV0TnVtYmVyQ29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dE51bWJlckNvbmZpZ3VyYXRpb24obnVsbCwgJyUnKTtcclxuICBzdGF0aWMgcmVhZG9ubHkgY29uZmlndXJhdGlvbk51bWJlckRlZ3JlZSAgICA6IElucHV0TnVtYmVyQ29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dE51bWJlckNvbmZpZ3VyYXRpb24obnVsbCwgXCLCsENcIik7XHJcbiAgc3RhdGljIHJlYWRvbmx5IGNvbmZpZ3VyYXRpb25OdW1iZXJNM0ggICAgICAgOiBJbnB1dE51bWJlckNvbmZpZ3VyYXRpb24gPSBuZXcgSW5wdXROdW1iZXJDb25maWd1cmF0aW9uKG51bGwsIFwibcKzL2hcIik7XHJcbiAgc3RhdGljIHJlYWRvbmx5IGNvbmZpZ3VyYXRpb25OdW1iZXJNZXRlcnMgICAgOiBJbnB1dE51bWJlckNvbmZpZ3VyYXRpb24gPSBuZXcgSW5wdXROdW1iZXJDb25maWd1cmF0aW9uKG51bGwsIFwibVwiKTtcclxuICBzdGF0aWMgcmVhZG9ubHkgY29uZmlndXJhdGlvbk51bWJlck1pbGltZXRlcnM6IElucHV0TnVtYmVyQ29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dE51bWJlckNvbmZpZ3VyYXRpb24obnVsbCwgXCJtbVwiKTtcclxufSJdfQ==
|
package/esm2022/lib/components/inputs/input-file/download-button/download-button.component.mjs
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { Component, computed, ElementRef, Input, model } from '@angular/core';
|
|
2
|
+
import { InputFileConfiguration } from '../input-file.configuration';
|
|
3
|
+
import { ApiUrlProviderService } from '../../../../services/web/api-url-provider.service';
|
|
4
|
+
import { InputProviderFactory } from '../../input-provider-factory';
|
|
5
|
+
import { StorageService } from '../../../../services/web/storage.service';
|
|
6
|
+
import { lstImageTypes } from '../input-file.configuration';
|
|
7
|
+
import { Utils } from '../../../../services/utils.service';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "../../../../services/web/storage.service";
|
|
10
|
+
import * as i2 from "../../../../services/web/api-url-provider.service";
|
|
11
|
+
import * as i3 from "@ionic/angular";
|
|
12
|
+
import * as i4 from "@angular/common";
|
|
13
|
+
import * as i5 from "../../../loading/loading.component";
|
|
14
|
+
import * as i6 from "../../../../directives/ng-var.directive";
|
|
15
|
+
export class DownloadButtonComponent {
|
|
16
|
+
constructor(storageService, elementRef, apiUrlProviderService) {
|
|
17
|
+
this.storageService = storageService;
|
|
18
|
+
this.elementRef = elementRef;
|
|
19
|
+
this.apiUrlProviderService = apiUrlProviderService;
|
|
20
|
+
this.expand = "";
|
|
21
|
+
this.value = model();
|
|
22
|
+
this.size = "small";
|
|
23
|
+
this.color = "primary";
|
|
24
|
+
this.post = false;
|
|
25
|
+
this.configuration = new InputFileConfiguration();
|
|
26
|
+
this.customLabel = false;
|
|
27
|
+
this.label = "";
|
|
28
|
+
this.guid = "";
|
|
29
|
+
this.lstFiles = computed(() => {
|
|
30
|
+
if (typeof (this.value()) == "string") {
|
|
31
|
+
return this.value().split(';');
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
this.lstLoading = [];
|
|
38
|
+
}
|
|
39
|
+
registerOnChange(fn) {
|
|
40
|
+
//throw new Error('Method not implemented.');
|
|
41
|
+
}
|
|
42
|
+
registerOnTouched(fn) {
|
|
43
|
+
//throw new Error('Method not implemented.');
|
|
44
|
+
}
|
|
45
|
+
setDisabledState(isDisabled) {
|
|
46
|
+
//throw new Error('Method not implemented.');
|
|
47
|
+
}
|
|
48
|
+
ngOnInit() {
|
|
49
|
+
this.apiUrl = this.apiUrlProviderService.apiUrl;
|
|
50
|
+
this.guid = `${Utils.GenerateGUID()}${this.elementRef.nativeElement.tagName.toLowerCase()}`;
|
|
51
|
+
}
|
|
52
|
+
writeValue(value) { this.value.set(value); }
|
|
53
|
+
Download(value) {
|
|
54
|
+
this.storageService.StartDownload(value, this.params, this.post);
|
|
55
|
+
}
|
|
56
|
+
Sanitize(v) {
|
|
57
|
+
return StorageService.SanitizeFileName(v);
|
|
58
|
+
}
|
|
59
|
+
ExtensionIsImage(v) {
|
|
60
|
+
try {
|
|
61
|
+
return lstImageTypes.includes(v.split('.')[v.split('.').length - 1]);
|
|
62
|
+
}
|
|
63
|
+
catch { }
|
|
64
|
+
}
|
|
65
|
+
SetLoading(path) {
|
|
66
|
+
this.lstLoading.push(path);
|
|
67
|
+
}
|
|
68
|
+
SetNotLoading(path) {
|
|
69
|
+
this.lstLoading.splice(this.lstLoading.indexOf(path), 1);
|
|
70
|
+
}
|
|
71
|
+
isLoading(path) {
|
|
72
|
+
return this.lstLoading.indexOf(path) != -1;
|
|
73
|
+
}
|
|
74
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DownloadButtonComponent, deps: [{ token: i1.StorageService }, { token: i0.ElementRef }, { token: i2.ApiUrlProviderService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
75
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DownloadButtonComponent, selector: "download-button", inputs: { expand: { classPropertyName: "expand", publicName: "expand", isSignal: false, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: false, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: false, isRequired: false, transformFunction: null }, params: { classPropertyName: "params", publicName: "params", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, post: { classPropertyName: "post", publicName: "post", isSignal: false, isRequired: false, transformFunction: null }, configuration: { classPropertyName: "configuration", publicName: "configuration", isSignal: false, isRequired: false, transformFunction: null }, customLabel: { classPropertyName: "customLabel", publicName: "customLabel", isSignal: false, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, providers: InputProviderFactory.GetProviders(DownloadButtonComponent), ngImport: i0, template: "@if(lstFiles().length == 0){\r\n <ion-button [color]=\"color\" fill=\"outline\" [disabled]=\"true\" [size]=\"size\"> \r\n <ion-icon name=\"close-circle\" slot=\"start\"></ion-icon> \r\n <ion-label> Sem arquivos... </ion-label>\r\n </ion-button>\r\n}\r\n@else if(lstFiles().length == 1){\r\n <ion-button [color]=\"color\" *ngVar=\"storageService.GetProgress(lstFiles()[0]) as val\" class=\"relative block {{expand == 'block' ? 'size-full' : ''}}\" [disabled]=\"val != 0 || disabled\" (click)=\"Download(lstFiles()[0])\" fill=\"outline\" [size]=\"size\"> \r\n <ion-icon name=\"download\" slot=\"start\"></ion-icon> \r\n <ion-label> {{customLabel ? label : Sanitize(lstFiles()[0])}} </ion-label>\r\n <div class=\"absolute size-full h-[calc(100%+var(--padding-top)+var(--padding-bottom))] w-[calc(100%+var(--padding-end)+var(--padding-start))]\">\r\n <loading [type]=\"3\" [loading]=\"val != 0\"></loading>\r\n <div class=\"size-full flex flex-row-reverse relative\">\r\n <ion-progress-bar class=\"absolute bottom-0 left-0 w-full h-1 default-transition\" [ngClass]=\"{'-translate-y-4 opacity-0': (!val || val == 0)}\" [value]=\"val\"></ion-progress-bar>\r\n </div>\r\n </div>\r\n </ion-button>\r\n}\r\n@else{\r\n <ion-button [color]=\"color\" [id]=\"guid\" fill=\"outline\" [size]=\"size\"> \r\n <ion-icon name=\"download\" slot=\"start\"></ion-icon> \r\n <ion-label> {{lstFiles().length}} Arquivos </ion-label>\r\n </ion-button>\r\n\r\n <ion-popover [trigger]=\"guid\" [keepContentsMounted]=\"true\" triggerAction=\"click\">\r\n <ng-template>\r\n <ion-content class=\"p-0 bg-transparent\">\r\n <ion-list>\r\n @for (item of lstFiles(); track item; let i = $index; let l = $last) {\r\n <section *ngVar=\"storageService.GetProgress(item) as val\">\r\n <ion-item style=\"--background: transparent\" lines=\"{{l ? 'none' : 'full'}}\" button [detail]=\"false\">\r\n\r\n <ion-icon name=\"download\" (click)=\"Download(item)\" slot=\"start\"></ion-icon> \r\n @if (ExtensionIsImage(item)) {\r\n <ion-icon [id]=\"guid + '-' + i + '-nested-popover'\" name=\"image\" slot=\"start\"></ion-icon> \r\n }\r\n\r\n <ion-label>{{Sanitize(item)}}</ion-label>\r\n <ion-text *ngIf=\"val != 0\" slot=\"end\" class=\"text-sm\"><b>{{val * 100 | number : '1.2-2'}}%</b></ion-text>\r\n </ion-item>\r\n <ion-progress-bar class=\"h-0 default-transition\" [ngClass]=\"{'h-1': val != 0 }\" [value]=\"val\"></ion-progress-bar>\r\n <ion-popover *ngIf=\"ExtensionIsImage(item)\" side=\"end\" alignment=\"center\" [trigger]=\"guid + '-' + i + '-nested-popover'\" [dismissOnSelect]=\"true\" triggerAction=\"click\">\r\n <ng-template>\r\n <ion-content *ngVar=\"isLoading(item) as isLoading\">\r\n <loading [hidden]=\"!isLoading\"></loading>\r\n <ion-img [hidden]=\"isLoading\" [src]=\"apiUrl + item\" (ionImgWillLoad)=\"SetLoading(item)\" (ionImgDidLoad)=\"SetNotLoading(item)\"></ion-img>\r\n </ion-content>\r\n </ng-template>\r\n </ion-popover>\r\n </section>\r\n }\r\n </ion-list>\r\n </ion-content>\r\n </ng-template>\r\n </ion-popover>\r\n}", styles: ["ion-popover{--width: 30rem }\n"], dependencies: [{ kind: "component", type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i3.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: i3.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i3.IonProgressBar, selector: "ion-progress-bar", inputs: ["buffer", "color", "mode", "reversed", "type", "value"] }, { kind: "component", type: i3.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonPopover, selector: "ion-popover" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.LoadingComponent, selector: "loading", inputs: ["text", "type", "loading"] }, { kind: "directive", type: i6.NgVarDirective, selector: "[ngVar]", inputs: ["ngVar"] }, { kind: "pipe", type: i4.DecimalPipe, name: "number" }] }); }
|
|
76
|
+
}
|
|
77
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DownloadButtonComponent, decorators: [{
|
|
78
|
+
type: Component,
|
|
79
|
+
args: [{ selector: 'download-button', providers: InputProviderFactory.GetProviders(DownloadButtonComponent), template: "@if(lstFiles().length == 0){\r\n <ion-button [color]=\"color\" fill=\"outline\" [disabled]=\"true\" [size]=\"size\"> \r\n <ion-icon name=\"close-circle\" slot=\"start\"></ion-icon> \r\n <ion-label> Sem arquivos... </ion-label>\r\n </ion-button>\r\n}\r\n@else if(lstFiles().length == 1){\r\n <ion-button [color]=\"color\" *ngVar=\"storageService.GetProgress(lstFiles()[0]) as val\" class=\"relative block {{expand == 'block' ? 'size-full' : ''}}\" [disabled]=\"val != 0 || disabled\" (click)=\"Download(lstFiles()[0])\" fill=\"outline\" [size]=\"size\"> \r\n <ion-icon name=\"download\" slot=\"start\"></ion-icon> \r\n <ion-label> {{customLabel ? label : Sanitize(lstFiles()[0])}} </ion-label>\r\n <div class=\"absolute size-full h-[calc(100%+var(--padding-top)+var(--padding-bottom))] w-[calc(100%+var(--padding-end)+var(--padding-start))]\">\r\n <loading [type]=\"3\" [loading]=\"val != 0\"></loading>\r\n <div class=\"size-full flex flex-row-reverse relative\">\r\n <ion-progress-bar class=\"absolute bottom-0 left-0 w-full h-1 default-transition\" [ngClass]=\"{'-translate-y-4 opacity-0': (!val || val == 0)}\" [value]=\"val\"></ion-progress-bar>\r\n </div>\r\n </div>\r\n </ion-button>\r\n}\r\n@else{\r\n <ion-button [color]=\"color\" [id]=\"guid\" fill=\"outline\" [size]=\"size\"> \r\n <ion-icon name=\"download\" slot=\"start\"></ion-icon> \r\n <ion-label> {{lstFiles().length}} Arquivos </ion-label>\r\n </ion-button>\r\n\r\n <ion-popover [trigger]=\"guid\" [keepContentsMounted]=\"true\" triggerAction=\"click\">\r\n <ng-template>\r\n <ion-content class=\"p-0 bg-transparent\">\r\n <ion-list>\r\n @for (item of lstFiles(); track item; let i = $index; let l = $last) {\r\n <section *ngVar=\"storageService.GetProgress(item) as val\">\r\n <ion-item style=\"--background: transparent\" lines=\"{{l ? 'none' : 'full'}}\" button [detail]=\"false\">\r\n\r\n <ion-icon name=\"download\" (click)=\"Download(item)\" slot=\"start\"></ion-icon> \r\n @if (ExtensionIsImage(item)) {\r\n <ion-icon [id]=\"guid + '-' + i + '-nested-popover'\" name=\"image\" slot=\"start\"></ion-icon> \r\n }\r\n\r\n <ion-label>{{Sanitize(item)}}</ion-label>\r\n <ion-text *ngIf=\"val != 0\" slot=\"end\" class=\"text-sm\"><b>{{val * 100 | number : '1.2-2'}}%</b></ion-text>\r\n </ion-item>\r\n <ion-progress-bar class=\"h-0 default-transition\" [ngClass]=\"{'h-1': val != 0 }\" [value]=\"val\"></ion-progress-bar>\r\n <ion-popover *ngIf=\"ExtensionIsImage(item)\" side=\"end\" alignment=\"center\" [trigger]=\"guid + '-' + i + '-nested-popover'\" [dismissOnSelect]=\"true\" triggerAction=\"click\">\r\n <ng-template>\r\n <ion-content *ngVar=\"isLoading(item) as isLoading\">\r\n <loading [hidden]=\"!isLoading\"></loading>\r\n <ion-img [hidden]=\"isLoading\" [src]=\"apiUrl + item\" (ionImgWillLoad)=\"SetLoading(item)\" (ionImgDidLoad)=\"SetNotLoading(item)\"></ion-img>\r\n </ion-content>\r\n </ng-template>\r\n </ion-popover>\r\n </section>\r\n }\r\n </ion-list>\r\n </ion-content>\r\n </ng-template>\r\n </ion-popover>\r\n}", styles: ["ion-popover{--width: 30rem }\n"] }]
|
|
80
|
+
}], ctorParameters: () => [{ type: i1.StorageService }, { type: i0.ElementRef }, { type: i2.ApiUrlProviderService }], propDecorators: { expand: [{
|
|
81
|
+
type: Input
|
|
82
|
+
}], size: [{
|
|
83
|
+
type: Input
|
|
84
|
+
}], color: [{
|
|
85
|
+
type: Input
|
|
86
|
+
}], params: [{
|
|
87
|
+
type: Input
|
|
88
|
+
}], disabled: [{
|
|
89
|
+
type: Input
|
|
90
|
+
}], post: [{
|
|
91
|
+
type: Input
|
|
92
|
+
}], configuration: [{
|
|
93
|
+
type: Input
|
|
94
|
+
}], customLabel: [{
|
|
95
|
+
type: Input
|
|
96
|
+
}], label: [{
|
|
97
|
+
type: Input
|
|
98
|
+
}] } });
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG93bmxvYWQtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9pbnB1dHMvaW5wdXQtZmlsZS9kb3dubG9hZC1idXR0b24vZG93bmxvYWQtYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9pbnB1dHMvaW5wdXQtZmlsZS9kb3dubG9hZC1idXR0b24vZG93bmxvYWQtYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUF1QixNQUFNLGVBQWUsQ0FBQztBQUduRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUMxRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7Ozs7QUFRM0QsTUFBTSxPQUFPLHVCQUF1QjtJQWNsQyxZQUNTLGNBQThCLEVBQzdCLFVBQXNCLEVBQ3RCLHFCQUE0QztRQUY3QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDN0IsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBZjdDLFdBQU0sR0FBVyxFQUFFLENBQUM7UUFDN0IsVUFBSyxHQUF3QixLQUFLLEVBQVUsQ0FBQztRQUNwQyxTQUFJLEdBQVcsT0FBTyxDQUFD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QkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgRWxlbWVudFJlZiwgSW5wdXQsIG1vZGVsLCBNb2RlbFNpZ25hbCwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuaW1wb3J0IHsgSW5wdXRGaWxlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2lucHV0LWZpbGUuY29uZmlndXJhdGlvbic7XHJcbmltcG9ydCB7IEFwaVVybFByb3ZpZGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3dlYi9hcGktdXJsLXByb3ZpZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJbnB1dFByb3ZpZGVyRmFjdG9yeSB9IGZyb20gJy4uLy4uL2lucHV0LXByb3ZpZGVyLWZhY3RvcnknO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3dlYi9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBsc3RJbWFnZVR5cGVzIH0gZnJvbSAnLi4vaW5wdXQtZmlsZS5jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy91dGlscy5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZG93bmxvYWQtYnV0dG9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZG93bmxvYWQtYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kb3dubG9hZC1idXR0b24uY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IElucHV0UHJvdmlkZXJGYWN0b3J5LkdldFByb3ZpZGVycyhEb3dubG9hZEJ1dHRvbkNvbXBvbmVudClcclxufSlcclxuZXhwb3J0IGNsYXNzIERvd25sb2FkQnV0dG9uQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG5cclxuICBASW5wdXQoKSBleHBhbmQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgdmFsdWU6IE1vZGVsU2lnbmFsPHN0cmluZz4gPSBtb2RlbDxzdHJpbmc+KCk7XHJcbiAgQElucHV0KCkgc2l6ZTogc3RyaW5nID0gXCJzbWFsbFwiO1xyXG4gIEBJbnB1dCgpIGNvbG9yOiBzdHJpbmcgPSBcInByaW1hcnlcIjtcclxuICBASW5wdXQoKSBwYXJhbXM6IGFueTtcclxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcclxuICBASW5wdXQoKSBwb3N0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbjogSW5wdXRGaWxlQ29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dEZpbGVDb25maWd1cmF0aW9uKCk7XHJcbiAgXHJcbiAgQElucHV0KCkgY3VzdG9tTGFiZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgbGFiZWwgOiBzdHJpbmcgPSBcIlwiO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgYXBpVXJsUHJvdmlkZXJTZXJ2aWNlOiBBcGlVcmxQcm92aWRlclNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIC8vdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xyXG4gIH1cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICAvL3Rocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcclxuICB9XHJcbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgLy90aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XHJcbiAgfVxyXG5cclxuICBndWlkIDogc3RyaW5nID0gXCJcIjtcclxuICBhcGlVcmw6IHN0cmluZztcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmFwaVVybCA9IHRoaXMuYXBpVXJsUHJvdmlkZXJTZXJ2aWNlLmFwaVVybDtcclxuICAgIHRoaXMuZ3VpZCAgPSBgJHtVdGlscy5HZW5lcmF0ZUdVSUQoKX0ke3RoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKX1gXHJcbiAgfVxyXG5cclxuICBsc3RGaWxlczogU2lnbmFsPHN0cmluZ1tdPiA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGlmKHR5cGVvZih0aGlzLnZhbHVlKCkpID09IFwic3RyaW5nXCIpe1xyXG4gICAgICByZXR1cm4gdGhpcy52YWx1ZSgpLnNwbGl0KCc7Jyk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHsgdGhpcy52YWx1ZS5zZXQodmFsdWUpOyB9XHJcblxyXG4gIERvd25sb2FkKHZhbHVlOiBzdHJpbmcpOiB2b2lke1xyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5TdGFydERvd25sb2FkKHZhbHVlLCB0aGlzLnBhcmFtcywgdGhpcy5wb3N0KTtcclxuICB9XHJcblxyXG4gIFNhbml0aXplKHYpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFN0b3JhZ2VTZXJ2aWNlLlNhbml0aXplRmlsZU5hbWUodik7XHJcbiAgfVxyXG5cclxuICBFeHRlbnNpb25Jc0ltYWdlKHYpe1xyXG4gICAgdHJ5e1xyXG4gICAgICByZXR1cm4gbHN0SW1hZ2VUeXBlcy5pbmNsdWRlcyh2LnNwbGl0KCcuJylbdi5zcGxpdCgnLicpLmxlbmd0aCAtIDFdKVxyXG4gICAgfWNhdGNoe31cclxuICB9XHJcblxyXG4gIGxzdExvYWRpbmc6IHN0cmluZ1tdID0gW107XHJcbiAgU2V0TG9hZGluZyhwYXRoOiBzdHJpbmcpe1xyXG4gICAgdGhpcy5sc3RMb2FkaW5nLnB1c2gocGF0aCk7XHJcbiAgfVxyXG4gIFNldE5vdExvYWRpbmcocGF0aDogc3RyaW5nKXtcclxuICAgIHRoaXMubHN0TG9hZGluZy5zcGxpY2UodGhpcy5sc3RMb2FkaW5nLmluZGV4T2YocGF0aCksIDEpO1xyXG4gIH1cclxuICBpc0xvYWRpbmcocGF0aDogc3RyaW5nKXtcclxuICAgIHJldHVybiB0aGlzLmxzdExvYWRpbmcuaW5kZXhPZihwYXRoKSAhPSAtMTtcclxuICB9XHJcbn1cclxuIiwiQGlmKGxzdEZpbGVzKCkubGVuZ3RoID09IDApe1xyXG4gIDxpb24tYnV0dG9uIFtjb2xvcl09XCJjb2xvclwiIGZpbGw9XCJvdXRsaW5lXCIgW2Rpc2FibGVkXT1cInRydWVcIiBbc2l6ZV09XCJzaXplXCI+IFxyXG4gICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1jaXJjbGVcIiBzbG90PVwic3RhcnRcIj48L2lvbi1pY29uPiAgXHJcbiAgICA8aW9uLWxhYmVsPiBTZW0gYXJxdWl2b3MuLi4gPC9pb24tbGFiZWw+XHJcbiAgPC9pb24tYnV0dG9uPlxyXG59XHJcbkBlbHNlIGlmKGxzdEZpbGVzKCkubGVuZ3RoID09IDEpe1xyXG4gIDxpb24tYnV0dG9uIFtjb2xvcl09XCJjb2xvclwiICpuZ1Zhcj1cInN0b3JhZ2VTZXJ2aWNlLkdldFByb2dyZXNzKGxzdEZpbGVzKClbMF0pIGFzIHZhbFwiIGNsYXNzPVwicmVsYXRpdmUgYmxvY2sge3tleHBhbmQgPT0gJ2Jsb2NrJyA/ICdzaXplLWZ1bGwnIDogJyd9fVwiIFtkaXNhYmxlZF09XCJ2YWwgIT0gMCB8fCBkaXNhYmxlZFwiIChjbGljayk9XCJEb3dubG9hZChsc3RGaWxlcygpWzBdKVwiIGZpbGw9XCJvdXRsaW5lXCIgW3NpemVdPVwic2l6ZVwiPiBcclxuICAgIDxpb24taWNvbiBuYW1lPVwiZG93bmxvYWRcIiBzbG90PVwic3RhcnRcIj48L2lvbi1pY29uPiAgXHJcbiAgICA8aW9uLWxhYmVsPiAge3tjdXN0b21MYWJlbCA/IGxhYmVsIDogU2FuaXRpemUobHN0RmlsZXMoKVswXSl9fSA8L2lvbi1sYWJlbD5cclxuICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBzaXplLWZ1bGwgaC1bY2FsYygxMDAlK3ZhcigtLXBhZGRpbmctdG9wKSt2YXIoLS1wYWRkaW5nLWJvdHRvbSkpXSB3LVtjYWxjKDEwMCUrdmFyKC0tcGFkZGluZy1lbmQpK3ZhcigtLXBhZGRpbmctc3RhcnQpKV1cIj5cclxuICAgICAgPGxvYWRpbmcgW3R5cGVdPVwiM1wiIFtsb2FkaW5nXT1cInZhbCAhPSAwXCI+PC9sb2FkaW5nPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2l6ZS1mdWxsIGZsZXggZmxleC1yb3ctcmV2ZXJzZSByZWxhdGl2ZVwiPlxyXG4gICAgICAgIDxpb24tcHJvZ3Jlc3MtYmFyIGNsYXNzPVwiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHctZnVsbCBoLTEgZGVmYXVsdC10cmFuc2l0aW9uXCIgW25nQ2xhc3NdPVwieyctdHJhbnNsYXRlLXktNCBvcGFjaXR5LTAnOiAoIXZhbCB8fCB2YWwgPT0gMCl9XCIgW3ZhbHVlXT1cInZhbFwiPjwvaW9uLXByb2dyZXNzLWJhcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2lvbi1idXR0b24+XHJcbn1cclxuQGVsc2V7XHJcbiAgPGlvbi1idXR0b24gW2NvbG9yXT1cImNvbG9yXCIgW2lkXT1cImd1aWRcIiBmaWxsPVwib3V0bGluZVwiIFtzaXplXT1cInNpemVcIj4gXHJcbiAgICA8aW9uLWljb24gbmFtZT1cImRvd25sb2FkXCIgc2xvdD1cInN0YXJ0XCI+PC9pb24taWNvbj4gIFxyXG4gICAgPGlvbi1sYWJlbD4ge3tsc3RGaWxlcygpLmxlbmd0aH19IEFycXVpdm9zIDwvaW9uLWxhYmVsPlxyXG4gIDwvaW9uLWJ1dHRvbj5cclxuXHJcbiAgPGlvbi1wb3BvdmVyIFt0cmlnZ2VyXT1cImd1aWRcIiBba2VlcENvbnRlbnRzTW91bnRlZF09XCJ0cnVlXCIgdHJpZ2dlckFjdGlvbj1cImNsaWNrXCI+XHJcbiAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgIDxpb24tY29udGVudCBjbGFzcz1cInAtMCBiZy10cmFuc3BhcmVudFwiPlxyXG4gICAgICAgIDxpb24tbGlzdD5cclxuICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgbHN0RmlsZXMoKTsgdHJhY2sgaXRlbTsgbGV0IGkgPSAkaW5kZXg7IGxldCBsID0gJGxhc3QpIHtcclxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nVmFyPVwic3RvcmFnZVNlcnZpY2UuR2V0UHJvZ3Jlc3MoaXRlbSkgYXMgdmFsXCI+XHJcbiAgICAgICAgICAgICAgPGlvbi1pdGVtIHN0eWxlPVwiLS1iYWNrZ3JvdW5kOiB0cmFuc3BhcmVudFwiIGxpbmVzPVwie3tsID8gJ25vbmUnIDogJ2Z1bGwnfX1cIiBidXR0b24gW2RldGFpbF09XCJmYWxzZVwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiZG93bmxvYWRcIiAoY2xpY2spPVwiRG93bmxvYWQoaXRlbSlcIiBzbG90PVwic3RhcnRcIj48L2lvbi1pY29uPiBcclxuICAgICAgICAgICAgICAgIEBpZiAoRXh0ZW5zaW9uSXNJbWFnZShpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICA8aW9uLWljb24gW2lkXT1cImd1aWQgKyAnLScgKyBpICsgJy1uZXN0ZWQtcG9wb3ZlcidcIiBuYW1lPVwiaW1hZ2VcIiBzbG90PVwic3RhcnRcIj48L2lvbi1pY29uPiBcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPnt7U2FuaXRpemUoaXRlbSl9fTwvaW9uLWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0ICpuZ0lmPVwidmFsICE9IDBcIiBzbG90PVwiZW5kXCIgY2xhc3M9XCJ0ZXh0LXNtXCI+PGI+e3t2YWwgKiAxMDAgfCBudW1iZXIgOiAnMS4yLTInfX0lPC9iPjwvaW9uLXRleHQ+XHJcbiAgICAgICAgICAgICAgPC9pb24taXRlbT5cclxuICAgICAgICAgICAgICA8aW9uLXByb2dyZXNzLWJhciBjbGFzcz1cImgtMCBkZWZhdWx0LXRyYW5zaXRpb25cIiBbbmdDbGFzc109XCJ7J2gtMSc6IHZhbCAhPSAwIH1cIiBbdmFsdWVdPVwidmFsXCI+PC9pb24tcHJvZ3Jlc3MtYmFyPlxyXG4gICAgICAgICAgICAgIDxpb24tcG9wb3ZlciAqbmdJZj1cIkV4dGVuc2lvbklzSW1hZ2UoaXRlbSlcIiBzaWRlPVwiZW5kXCIgYWxpZ25tZW50PVwiY2VudGVyXCIgW3RyaWdnZXJdPVwiZ3VpZCArICctJyArIGkgKyAnLW5lc3RlZC1wb3BvdmVyJ1wiIFtkaXNtaXNzT25TZWxlY3RdPVwidHJ1ZVwiIHRyaWdnZXJBY3Rpb249XCJjbGlja1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbnRlbnQgKm5nVmFyPVwiaXNMb2FkaW5nKGl0ZW0pIGFzIGlzTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsb2FkaW5nICAgIFtoaWRkZW5dPVwiIWlzTG9hZGluZ1wiPjwvbG9hZGluZz5cclxuICAgICAgICAgICAgICAgICAgICA8aW9uLWltZyAgICBbaGlkZGVuXT1cImlzTG9hZGluZ1wiIFtzcmNdPVwiYXBpVXJsICsgaXRlbVwiIChpb25JbWdXaWxsTG9hZCk9XCJTZXRMb2FkaW5nKGl0ZW0pXCIgKGlvbkltZ0RpZExvYWQpPVwiU2V0Tm90TG9hZGluZyhpdGVtKVwiPjwvaW9uLWltZz5cclxuICAgICAgICAgICAgICAgICAgPC9pb24tY29udGVudD5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9pb24tcG9wb3Zlcj5cclxuICAgICAgICAgICAgPC9zZWN0aW9uPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9pb24tbGlzdD5cclxuICAgICAgPC9pb24tY29udGVudD5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9pb24tcG9wb3Zlcj5cclxufSJdfQ==
|