@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,156 @@
|
|
|
1
|
+
import { Component, computed, effect, EventEmitter, input, Input, Output, signal } from '@angular/core';
|
|
2
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { IonicModule, NavController } from '@ionic/angular';
|
|
5
|
+
import { Menu } from './menu';
|
|
6
|
+
import { DrawerGroupComponent } from './drawer-group/drawer-group.component';
|
|
7
|
+
import { LoadingComponent } from '../../components/loading/loading.component';
|
|
8
|
+
import { SIonPopoverModule } from '../popover/sion-popover.module';
|
|
9
|
+
import { Router, RouterLinkWithHref } from '@angular/router';
|
|
10
|
+
import { GenericService } from '../../services/generic.service';
|
|
11
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
import * as i1 from "@angular/router";
|
|
14
|
+
import * as i2 from "@ionic/angular";
|
|
15
|
+
import * as i3 from "../../services/generic.service";
|
|
16
|
+
import * as i4 from "@angular/common";
|
|
17
|
+
import * as i5 from "@ngx-translate/core";
|
|
18
|
+
import * as i6 from "../popover/sion-popover/sion-popover.component";
|
|
19
|
+
import * as i7 from "@angular/forms";
|
|
20
|
+
export class DrawerComponent {
|
|
21
|
+
constructor(router, navController, genericService) {
|
|
22
|
+
this.router = router;
|
|
23
|
+
this.navController = navController;
|
|
24
|
+
this.genericService = genericService;
|
|
25
|
+
this.TranslationModule = {
|
|
26
|
+
Permissao: 'Entities.Permissao.',
|
|
27
|
+
PermissaoGrupo: 'Entities.PermissaoGrupo.',
|
|
28
|
+
SemResultado: 'Messages.SemResultado'
|
|
29
|
+
};
|
|
30
|
+
this.loading = true;
|
|
31
|
+
this.lstMenu = input();
|
|
32
|
+
this.lstFlattenMenu = computed(() => { return FlattenMenus(this.lstMenu()); });
|
|
33
|
+
this.colapsed = false;
|
|
34
|
+
this.colapsedChange = new EventEmitter;
|
|
35
|
+
this.useTranslation = false;
|
|
36
|
+
this.CurrentGroupActive = null;
|
|
37
|
+
this._enterColapsed = false;
|
|
38
|
+
this.search = signal("");
|
|
39
|
+
this.lstMenuFiltered = computed(() => {
|
|
40
|
+
const str = this.search().toLowerCase();
|
|
41
|
+
const lstS1 = this.lstMenu().map(p => {
|
|
42
|
+
return new Menu(p.type, p.title, p.icon, p.lstMenu.filter(x => x.title.toLowerCase().includes(str)), p.route);
|
|
43
|
+
});
|
|
44
|
+
const lstS2 = lstS1.filter(p => p.lstMenu.length > 0);
|
|
45
|
+
return lstS2;
|
|
46
|
+
});
|
|
47
|
+
effect(() => {
|
|
48
|
+
//Handle Menu Title
|
|
49
|
+
const lstFlat = this.lstFlattenMenu();
|
|
50
|
+
const currentMenu = lstFlat.find(p => window.location.pathname.includes('/' + p.route));
|
|
51
|
+
const group = FindMenuParent(this.lstMenu(), currentMenu);
|
|
52
|
+
if (group) {
|
|
53
|
+
this.CurrentGroupActive = group;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
this.CurrentGroupActive = this.lstMenu()[0];
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
ToggleCollapsed() {
|
|
61
|
+
this.colapsedChange.emit(!this._enterColapsed);
|
|
62
|
+
this._enterColapsed = false;
|
|
63
|
+
}
|
|
64
|
+
onMouseEnter() {
|
|
65
|
+
if (this.colapsed) {
|
|
66
|
+
this._enterColapsed = true;
|
|
67
|
+
this.colapsedChange.emit(false);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
onMouseLeave() {
|
|
71
|
+
if (this._enterColapsed) {
|
|
72
|
+
this._enterColapsed = false;
|
|
73
|
+
this.colapsedChange.emit(true);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
HandleNav(item, event) {
|
|
77
|
+
if (event.ctrlKey || event.metaKey) {
|
|
78
|
+
window.open(window.origin + '/' + item.route, '_blank');
|
|
79
|
+
event.preventDefault();
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
this.SetTitle(item);
|
|
83
|
+
const vGroup = FindMenuParent(this.lstMenu(), item);
|
|
84
|
+
if (vGroup) {
|
|
85
|
+
this.CurrentGroupActive = vGroup;
|
|
86
|
+
}
|
|
87
|
+
this.navController.navigateRoot('/' + item.route);
|
|
88
|
+
}
|
|
89
|
+
SetTitle(item) {
|
|
90
|
+
this.genericService.SetTitle(item.title);
|
|
91
|
+
}
|
|
92
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DrawerComponent, deps: [{ token: i1.Router }, { token: i2.NavController }, { token: i3.GenericService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
93
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DrawerComponent, isStandalone: true, selector: "drawer", inputs: { loading: { classPropertyName: "loading", publicName: "loading", isSignal: false, isRequired: false, transformFunction: null }, lstMenu: { classPropertyName: "lstMenu", publicName: "lstMenu", isSignal: true, isRequired: false, transformFunction: null }, colapsed: { classPropertyName: "colapsed", publicName: "colapsed", isSignal: false, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: false, isRequired: false, transformFunction: null }, useTranslation: { classPropertyName: "useTranslation", publicName: "useTranslation", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { colapsedChange: "colapsedChange" }, ngImport: i0, template: "<div class=\"absolute left-0 top-0 h-full bg-light size-full flex flex-col p-2 !pr-0 w-[19rem] overflow-hidden\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\r\n <!-- [ Header ] -->\r\n <div class=\"shrink-0 w-full flex justify-between items-center\">\r\n <div #anchor\r\n (click)=\"ToggleCollapsed()\" \r\n class=\"toggle size-10 aspect-square shrink-0 rounded-xl bg-inactive gradient-background menu\"\r\n >\r\n <ion-icon name=\"menu\" slot=\"icon-only\"></ion-icon>\r\n </div>\r\n <!-- <ion-button class=\"size-10 shrink-0 aspect-square\" size=\"small\" color=\"medium\" (click)=\"ToggleCollapsed()\">\r\n <ion-icon name=\"menu\" slot=\"icon-only\"></ion-icon>\r\n </ion-button> -->\r\n\r\n <div class=\"size-full shrink flex pl-2 \">\r\n <div class=\"size-full max-h-10 flex flex-wrap overflow-hidden\">\r\n @if (!ref.children.length) {\r\n <ion-text class=\"size-full flex items-center justify-center default-transition z-0\" [ngClass]=\"{'opacity-0 -translate-x-1/2 pointer-events-none': colapsed }\"> \r\n {{title}}\r\n </ion-text>\r\n }\r\n <div #ref class=\"size-full flex items-center justify-center shrink-0\">\r\n <ng-content select=\"[slot=logo]\"></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- [ Content ] -->\r\n <div class=\"size-full shrink flex flex-col relative overflow-hidden\">\r\n <loading [type]=\"3\" [loading]=\"loading\" text=\"\"></loading>\r\n <div class=\"size-full shrink flex gap-2\">\r\n <div class=\"h-full w-12 pr-2 py-2 mask-y shrink-0 flex flex-col gap-2 overflow-y-auto overflow-x-hidden border-dashed border-r border-r-medium/30\">\r\n <div #searchAnchor (click)=\"modal.present()\" class=\"search-button size-10 aspect-square shrink-0 rounded-xl bg-inactive gradient-background menu\">\r\n <ion-icon name=\"search\" slot=\"icon-only\"></ion-icon>\r\n </div>\r\n\r\n @for (item of lstMenu(); track $index) {\r\n <div>\r\n <div\r\n [class.bg-active]=\"CurrentGroupActive == item\"\r\n #anchor (mouseenter)=\"popover.present($event)\" \r\n (mouseleave)=\"popover.dismiss()\" \r\n (click)=\"CurrentGroupActive = item\" \r\n class=\"w-10 aspect-square shrink-0 rounded-xl bg-inactive gradient-background menu\"\r\n >\r\n <ion-icon [name]=\"item.icon\"></ion-icon>\r\n </div>\r\n <sion-popover #popover [anchor]=\"anchor\" [flip]=\"false\" placement=\"right\" fill=\"solid\">\r\n <div class=\"p-1\">\r\n {{useTranslation ? (TranslationModule.PermissaoGrupo + item.id | translate) : item.title}}\r\n </div>\r\n </sion-popover>\r\n </div>\r\n }\r\n\r\n </div>\r\n <div class=\"size-full shrink relative\">\r\n @for (mGroup of lstMenu(); track $index) {\r\n <div class=\"absolute top-0 left-0 size-full py-2 default-transition opacity-0 translate-x-full z-0 overflow-hidden\" [ngClass]=\"{'opacity-100 !translate-x-0': CurrentGroupActive == mGroup}\">\r\n <drawer-group [MenuGroup]=\"mGroup\" [useTranslation]=\"useTranslation\" [colapsed]=\"colapsed\"></drawer-group>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- [ End ] -->\r\n <div class=\"shrink-0 w-full\">\r\n <ng-content select=\"[slot=drawer]\"></ng-content>\r\n </div>\r\n</div>\r\n\r\n<ion-modal #modal [keepContentsMounted]=\"true\" (onWillDismiss)=\"search.set('')\">\r\n <ng-template>\r\n <ion-content>\r\n <ion-card class=\"size-full m-0 overflow-hidden\">\r\n <ion-card-content class=\"size-full flex flex-col overflow-hidden p-0\">\r\n <div class=\"shrink-0 w-full flex items-center justify-center\">\r\n <ion-searchbar class=\"p-0 !pl-2 !py-2\" [ngModel]=\"this.search()\" (ngModelChange)=\"this.search.set($event)\" [debounce]=\"200\"></ion-searchbar>\r\n <ion-button size=\"small\" fill=\"clear\" (click)=\"modal.dismiss()\">\r\n <ion-icon name=\"close\"></ion-icon>\r\n </ion-button>\r\n </div>\r\n\r\n <div class=\"size-full flex flex-col shrink gap-2 overflow-y-auto p-2 mask-y\">\r\n @for (vGroup of lstMenuFiltered(); track $index) {\r\n <ion-card class=\"m-0 shrink-0\">\r\n <ion-card-content class=\"p-0 gradient-background bg-inactive flex flex-col\">\r\n <div class=\"w-10 flex items-center !justify-start gap-2 text-dark shrink-0 p-2\">\r\n <ion-icon [name]=\"vGroup.icon\"></ion-icon>\r\n <ion-text>\r\n {{useTranslation ? (TranslationModule.PermissaoGrupo + vGroup.id | translate) : vGroup.title}} \r\n </ion-text>\r\n </div>\r\n @for (vMenu of vGroup.lstMenu; track $index) {\r\n <div \r\n (click)=\"HandleNav(vMenu, $event); modal.dismiss()\"\r\n [class.bg-active]=\"router.isActive('/' + vMenu.route, false)\"\r\n class=\"w-full flex items-center !justify-start gap-2 text-dark shrink-0 !pl-8 p-1.5 border-t border-t-medium/30 menu-search\">\r\n <ion-icon [name]=\"vMenu.icon\"></ion-icon>\r\n <ion-text>\r\n {{useTranslation ? (TranslationModule.Permissao + vMenu.id | translate) : vMenu.title}} \r\n </ion-text>\r\n </div>\r\n }\r\n </ion-card-content>\r\n </ion-card>\r\n }\r\n\r\n @if (lstMenuFiltered().length == 0) {\r\n <ion-text class=\"text-center text-medium\">\r\n {{useTranslation ? (TranslationModule.SemResultado | translate) : 'Sem resultados encontrados'}}\r\n </ion-text>\r\n }\r\n </div>\r\n </ion-card-content>\r\n </ion-card>\r\n </ion-content>\r\n </ng-template>\r\n</ion-modal>", styles: [".bg-active{--color-primary: var(--ion-color-primary) !important;--step-1-opacity: .7 !important;--step-2-opacity: .3 !important}.bg-inactive{--color-primary: var(--ion-color-step-250);--step-1-opacity: .5;--step-2-opacity: .4;--step-3-opacity: .8}.menu{display:flex;cursor:pointer;align-items:center;justify-content:center;gap:.5rem;border-radius:.75rem;padding:.5rem;transition:--color-primary,--step-1-opacity,--step-2-opacity .2s ease-in-out;--inset: var(--color-primary) 0px 1.75px 2px 0px inset;box-shadow:var(--inset)}.toggle:hover{--color-primary: var(--ion-color-step-500) !important;transition:--color-primary .2s ease-in-out}.search-button{--inset2: var(--ion-color-medium) 0px 0px 5px -1px inset;box-shadow:var(--inset2)}.menu-search{position:relative;cursor:pointer;overflow:hidden}.menu-search.bg-active:after{content:\"\";position:absolute;top:50%;right:0;width:.375rem;height:75%;transform:translateY(-50%);border-radius:1rem;background-color:color-mix(in srgb,var(--ion-color-primary) 70%,transparent);opacity:1!important;filter:drop-shadow(color-mix(in srgb,var(--ion-color-primary) 70%,transparent) 0px 0px 3px)}.menu-search.bg-active:before{content:\"\";position:absolute;top:50%;right:-2.3rem;width:5rem;height:7rem;transform:translateY(-50%);border-radius:1rem;opacity:.5!important;background:radial-gradient(color-mix(in srgb,var(--ion-color-primary) 70%,transparent) 0%,transparent 66%)}.menu-search.bg-inactive{--color-primary: var(--ion-color-step-250);--step-1-opacity: .5;--step-2-opacity: .4;--step-3-opacity: .8;position:relative}.menu-search.bg-inactive:after{content:\"\";opacity:0;transition:opacity .2s ease-in-out;will-change:opacity}.menu-search.bg-inactive:before{content:\"\";opacity:0;transition:opacity .2s ease-in-out;will-change:opacity}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: IonicModule }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonSearchbar, selector: "ion-searchbar", inputs: ["animated", "autocapitalize", "autocomplete", "autocorrect", "cancelButtonIcon", "cancelButtonText", "clearIcon", "color", "debounce", "disabled", "enterkeyhint", "inputmode", "maxlength", "minlength", "mode", "name", "placeholder", "searchIcon", "showCancelButton", "showClearButton", "spellcheck", "type", "value"] }, { kind: "component", type: i2.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonModal, selector: "ion-modal" }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-input-otp[type=text],ion-textarea,ion-searchbar" }, { kind: "component", type: LoadingComponent, selector: "loading", inputs: ["text", "type", "loading"] }, { kind: "component", type: DrawerGroupComponent, selector: "drawer-group", inputs: ["MenuGroup", "colapsed", "useTranslation"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: SIonPopoverModule }, { kind: "component", type: i6.SIonPopoverComponent, selector: "sion-popover", inputs: ["fill", "arrow", "flip", "placement", "height", "width", "anchor"], outputs: ["onWillPresent", "onDidPresent", "onWillDismiss", "onDidDismiss"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
94
|
+
}
|
|
95
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DrawerComponent, decorators: [{
|
|
96
|
+
type: Component,
|
|
97
|
+
args: [{ standalone: true, imports: [
|
|
98
|
+
CommonModule,
|
|
99
|
+
IonicModule,
|
|
100
|
+
LoadingComponent,
|
|
101
|
+
DrawerGroupComponent,
|
|
102
|
+
TranslateModule,
|
|
103
|
+
SIonPopoverModule,
|
|
104
|
+
RouterLinkWithHref,
|
|
105
|
+
ReactiveFormsModule,
|
|
106
|
+
FormsModule
|
|
107
|
+
], selector: 'drawer', template: "<div class=\"absolute left-0 top-0 h-full bg-light size-full flex flex-col p-2 !pr-0 w-[19rem] overflow-hidden\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\r\n <!-- [ Header ] -->\r\n <div class=\"shrink-0 w-full flex justify-between items-center\">\r\n <div #anchor\r\n (click)=\"ToggleCollapsed()\" \r\n class=\"toggle size-10 aspect-square shrink-0 rounded-xl bg-inactive gradient-background menu\"\r\n >\r\n <ion-icon name=\"menu\" slot=\"icon-only\"></ion-icon>\r\n </div>\r\n <!-- <ion-button class=\"size-10 shrink-0 aspect-square\" size=\"small\" color=\"medium\" (click)=\"ToggleCollapsed()\">\r\n <ion-icon name=\"menu\" slot=\"icon-only\"></ion-icon>\r\n </ion-button> -->\r\n\r\n <div class=\"size-full shrink flex pl-2 \">\r\n <div class=\"size-full max-h-10 flex flex-wrap overflow-hidden\">\r\n @if (!ref.children.length) {\r\n <ion-text class=\"size-full flex items-center justify-center default-transition z-0\" [ngClass]=\"{'opacity-0 -translate-x-1/2 pointer-events-none': colapsed }\"> \r\n {{title}}\r\n </ion-text>\r\n }\r\n <div #ref class=\"size-full flex items-center justify-center shrink-0\">\r\n <ng-content select=\"[slot=logo]\"></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- [ Content ] -->\r\n <div class=\"size-full shrink flex flex-col relative overflow-hidden\">\r\n <loading [type]=\"3\" [loading]=\"loading\" text=\"\"></loading>\r\n <div class=\"size-full shrink flex gap-2\">\r\n <div class=\"h-full w-12 pr-2 py-2 mask-y shrink-0 flex flex-col gap-2 overflow-y-auto overflow-x-hidden border-dashed border-r border-r-medium/30\">\r\n <div #searchAnchor (click)=\"modal.present()\" class=\"search-button size-10 aspect-square shrink-0 rounded-xl bg-inactive gradient-background menu\">\r\n <ion-icon name=\"search\" slot=\"icon-only\"></ion-icon>\r\n </div>\r\n\r\n @for (item of lstMenu(); track $index) {\r\n <div>\r\n <div\r\n [class.bg-active]=\"CurrentGroupActive == item\"\r\n #anchor (mouseenter)=\"popover.present($event)\" \r\n (mouseleave)=\"popover.dismiss()\" \r\n (click)=\"CurrentGroupActive = item\" \r\n class=\"w-10 aspect-square shrink-0 rounded-xl bg-inactive gradient-background menu\"\r\n >\r\n <ion-icon [name]=\"item.icon\"></ion-icon>\r\n </div>\r\n <sion-popover #popover [anchor]=\"anchor\" [flip]=\"false\" placement=\"right\" fill=\"solid\">\r\n <div class=\"p-1\">\r\n {{useTranslation ? (TranslationModule.PermissaoGrupo + item.id | translate) : item.title}}\r\n </div>\r\n </sion-popover>\r\n </div>\r\n }\r\n\r\n </div>\r\n <div class=\"size-full shrink relative\">\r\n @for (mGroup of lstMenu(); track $index) {\r\n <div class=\"absolute top-0 left-0 size-full py-2 default-transition opacity-0 translate-x-full z-0 overflow-hidden\" [ngClass]=\"{'opacity-100 !translate-x-0': CurrentGroupActive == mGroup}\">\r\n <drawer-group [MenuGroup]=\"mGroup\" [useTranslation]=\"useTranslation\" [colapsed]=\"colapsed\"></drawer-group>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- [ End ] -->\r\n <div class=\"shrink-0 w-full\">\r\n <ng-content select=\"[slot=drawer]\"></ng-content>\r\n </div>\r\n</div>\r\n\r\n<ion-modal #modal [keepContentsMounted]=\"true\" (onWillDismiss)=\"search.set('')\">\r\n <ng-template>\r\n <ion-content>\r\n <ion-card class=\"size-full m-0 overflow-hidden\">\r\n <ion-card-content class=\"size-full flex flex-col overflow-hidden p-0\">\r\n <div class=\"shrink-0 w-full flex items-center justify-center\">\r\n <ion-searchbar class=\"p-0 !pl-2 !py-2\" [ngModel]=\"this.search()\" (ngModelChange)=\"this.search.set($event)\" [debounce]=\"200\"></ion-searchbar>\r\n <ion-button size=\"small\" fill=\"clear\" (click)=\"modal.dismiss()\">\r\n <ion-icon name=\"close\"></ion-icon>\r\n </ion-button>\r\n </div>\r\n\r\n <div class=\"size-full flex flex-col shrink gap-2 overflow-y-auto p-2 mask-y\">\r\n @for (vGroup of lstMenuFiltered(); track $index) {\r\n <ion-card class=\"m-0 shrink-0\">\r\n <ion-card-content class=\"p-0 gradient-background bg-inactive flex flex-col\">\r\n <div class=\"w-10 flex items-center !justify-start gap-2 text-dark shrink-0 p-2\">\r\n <ion-icon [name]=\"vGroup.icon\"></ion-icon>\r\n <ion-text>\r\n {{useTranslation ? (TranslationModule.PermissaoGrupo + vGroup.id | translate) : vGroup.title}} \r\n </ion-text>\r\n </div>\r\n @for (vMenu of vGroup.lstMenu; track $index) {\r\n <div \r\n (click)=\"HandleNav(vMenu, $event); modal.dismiss()\"\r\n [class.bg-active]=\"router.isActive('/' + vMenu.route, false)\"\r\n class=\"w-full flex items-center !justify-start gap-2 text-dark shrink-0 !pl-8 p-1.5 border-t border-t-medium/30 menu-search\">\r\n <ion-icon [name]=\"vMenu.icon\"></ion-icon>\r\n <ion-text>\r\n {{useTranslation ? (TranslationModule.Permissao + vMenu.id | translate) : vMenu.title}} \r\n </ion-text>\r\n </div>\r\n }\r\n </ion-card-content>\r\n </ion-card>\r\n }\r\n\r\n @if (lstMenuFiltered().length == 0) {\r\n <ion-text class=\"text-center text-medium\">\r\n {{useTranslation ? (TranslationModule.SemResultado | translate) : 'Sem resultados encontrados'}}\r\n </ion-text>\r\n }\r\n </div>\r\n </ion-card-content>\r\n </ion-card>\r\n </ion-content>\r\n </ng-template>\r\n</ion-modal>", styles: [".bg-active{--color-primary: var(--ion-color-primary) !important;--step-1-opacity: .7 !important;--step-2-opacity: .3 !important}.bg-inactive{--color-primary: var(--ion-color-step-250);--step-1-opacity: .5;--step-2-opacity: .4;--step-3-opacity: .8}.menu{display:flex;cursor:pointer;align-items:center;justify-content:center;gap:.5rem;border-radius:.75rem;padding:.5rem;transition:--color-primary,--step-1-opacity,--step-2-opacity .2s ease-in-out;--inset: var(--color-primary) 0px 1.75px 2px 0px inset;box-shadow:var(--inset)}.toggle:hover{--color-primary: var(--ion-color-step-500) !important;transition:--color-primary .2s ease-in-out}.search-button{--inset2: var(--ion-color-medium) 0px 0px 5px -1px inset;box-shadow:var(--inset2)}.menu-search{position:relative;cursor:pointer;overflow:hidden}.menu-search.bg-active:after{content:\"\";position:absolute;top:50%;right:0;width:.375rem;height:75%;transform:translateY(-50%);border-radius:1rem;background-color:color-mix(in srgb,var(--ion-color-primary) 70%,transparent);opacity:1!important;filter:drop-shadow(color-mix(in srgb,var(--ion-color-primary) 70%,transparent) 0px 0px 3px)}.menu-search.bg-active:before{content:\"\";position:absolute;top:50%;right:-2.3rem;width:5rem;height:7rem;transform:translateY(-50%);border-radius:1rem;opacity:.5!important;background:radial-gradient(color-mix(in srgb,var(--ion-color-primary) 70%,transparent) 0%,transparent 66%)}.menu-search.bg-inactive{--color-primary: var(--ion-color-step-250);--step-1-opacity: .5;--step-2-opacity: .4;--step-3-opacity: .8;position:relative}.menu-search.bg-inactive:after{content:\"\";opacity:0;transition:opacity .2s ease-in-out;will-change:opacity}.menu-search.bg-inactive:before{content:\"\";opacity:0;transition:opacity .2s ease-in-out;will-change:opacity}\n"] }]
|
|
108
|
+
}], ctorParameters: () => [{ type: i1.Router }, { type: i2.NavController }, { type: i3.GenericService }], propDecorators: { loading: [{
|
|
109
|
+
type: Input
|
|
110
|
+
}], colapsed: [{
|
|
111
|
+
type: Input
|
|
112
|
+
}], colapsedChange: [{
|
|
113
|
+
type: Output
|
|
114
|
+
}], title: [{
|
|
115
|
+
type: Input
|
|
116
|
+
}], useTranslation: [{
|
|
117
|
+
type: Input
|
|
118
|
+
}] } });
|
|
119
|
+
/**
|
|
120
|
+
* Flattens a hierarchical Menu[] structure into a single array
|
|
121
|
+
* containing all Menu items from the original array and all nested items
|
|
122
|
+
* @param menus The array of Menu items to flatten
|
|
123
|
+
* @returns A flattened array containing all Menu items
|
|
124
|
+
*/
|
|
125
|
+
function FlattenMenus(menus) {
|
|
126
|
+
const result = [];
|
|
127
|
+
function addMenuItems(items) {
|
|
128
|
+
for (const menu of items) {
|
|
129
|
+
// Add current menu to result
|
|
130
|
+
result.push(menu);
|
|
131
|
+
// Process nested menus if they exist
|
|
132
|
+
if (menu.lstMenu && menu.lstMenu.length > 0) {
|
|
133
|
+
addMenuItems(menu.lstMenu);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
addMenuItems(menus);
|
|
138
|
+
return result;
|
|
139
|
+
}
|
|
140
|
+
function FindMenuParent(menus, targetMenu) {
|
|
141
|
+
for (const menu of menus) {
|
|
142
|
+
// Check if current menu has the target in its direct children
|
|
143
|
+
if (menu.lstMenu && menu.lstMenu.some(m => m === targetMenu)) {
|
|
144
|
+
return menu;
|
|
145
|
+
}
|
|
146
|
+
// Search deeper in the hierarchy
|
|
147
|
+
if (menu.lstMenu && menu.lstMenu.length > 0) {
|
|
148
|
+
const parent = FindMenuParent(menu.lstMenu, targetMenu);
|
|
149
|
+
if (parent) {
|
|
150
|
+
return parent;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhd2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kcmF3ZXIvZHJhd2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kcmF3ZXIvZHJhd2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBZSxNQUFNLEVBQUUsTUFBTSxFQUEwQixNQUFNLGVBQWUsQ0FBQztBQUM3SSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUU5QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWhFLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBa0JsRSxNQUFNLE9BQU8sZUFBZTtJQWlCMUIsWUFDUyxNQUFjLEVBQ2IsYUFBNEIsRUFDNUIsY0FBOEI7UUFGL0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNi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QUFVLENBQUMsRUFBRSxDQUFDO1lBQzdELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELGlDQUFpQztRQUNqQyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUMsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDeEQsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIEV2ZW50RW1pdHRlciwgaW5wdXQsIElucHV0LCBJbnB1dFNpZ25hbCwgT3V0cHV0LCBzaWduYWwsIFNpZ25hbCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IElvbmljTW9kdWxlLCBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xyXG5pbXBvcnQgeyBNZW51IH0gZnJvbSAnLi9tZW51JztcclxuXHJcbmltcG9ydCB7IERyYXdlckdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi9kcmF3ZXItZ3JvdXAvZHJhd2VyLWdyb3VwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExvYWRpbmdDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2xvYWRpbmcvbG9hZGluZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTSW9uUG9wb3Zlck1vZHVsZSB9IGZyb20gJy4uL3BvcG92ZXIvc2lvbi1wb3BvdmVyLm1vZHVsZSc7XHJcbmltcG9ydCB7IFJvdXRlciwgUm91dGVyTGlua1dpdGhIcmVmIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgR2VuZXJpY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9nZW5lcmljLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZWFyY2ggfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91dGlscy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgSW9uaWNNb2R1bGUsXHJcbiAgICBMb2FkaW5nQ29tcG9uZW50LFxyXG4gICAgRHJhd2VyR3JvdXBDb21wb25lbnQsXHJcbiAgICBUcmFuc2xhdGVNb2R1bGUsXHJcbiAgICBTSW9uUG9wb3Zlck1vZHVsZSxcclxuICAgIFJvdXRlckxpbmtXaXRoSHJlZixcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZVxyXG4gIF0sXHJcbiAgc2VsZWN0b3I6ICdkcmF3ZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kcmF3ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RyYXdlci5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHJhd2VyQ29tcG9uZW50IHtcclxuXHJcbiAgVHJhbnNsYXRpb25Nb2R1bGU6IGFueSA9IHtcclxuICAgIFBlcm1pc3NhbyAgICAgOiAnRW50aXRpZXMuUGVybWlzc2FvLicsXHJcbiAgICBQZXJtaXNzYW9HcnVwbzogJ0VudGl0aWVzLlBlcm1pc3Nhb0dydXBvLicsXHJcbiAgICBTZW1SZXN1bHRhZG8gIDogJ01lc3NhZ2VzLlNlbVJlc3VsdGFkbydcclxuICB9O1xyXG5cclxuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBsc3RNZW51OiBJbnB1dFNpZ25hbDxNZW51W10+ID0gaW5wdXQ8TWVudVtdPigpO1xyXG4gIGxzdEZsYXR0ZW5NZW51OiBTaWduYWw8TWVudVtdPiA9IGNvbXB1dGVkKCgpID0+IHsgcmV0dXJuIEZsYXR0ZW5NZW51cyh0aGlzLmxzdE1lbnUoKSkgfSk7XHJcblxyXG4gIEBJbnB1dCgpIGNvbGFwc2VkOiBib29sZWFuID0gZmFsc2U7ICBcclxuICBAT3V0cHV0KCkgY29sYXBzZWRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj47ICBcclxuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHVzZVRyYW5zbGF0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIG5hdkNvbnRyb2xsZXI6IE5hdkNvbnRyb2xsZXIsXHJcbiAgICBwcml2YXRlIGdlbmVyaWNTZXJ2aWNlOiBHZW5lcmljU2VydmljZVxyXG4gICkgeyBcclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIC8vSGFuZGxlIE1lbnUgVGl0bGVcclxuICAgICAgY29uc3QgbHN0RmxhdCA9IHRoaXMubHN0RmxhdHRlbk1lbnUoKTtcclxuICAgICAgY29uc3QgY3VycmVudE1lbnUgPSBsc3RGbGF0LmZpbmQocCA9PiB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuaW5jbHVkZXMoJy8nICsgcC5yb3V0ZSkpO1xyXG4gICAgICBjb25zdCBncm91cDogTWVudSB8IG51bGwgPSBGaW5kTWVudVBhcmVudCh0aGlzLmxzdE1lbnUoKSwgY3VycmVudE1lbnUpO1xyXG4gICAgICBpZihncm91cCl7XHJcbiAgICAgICAgdGhpcy5DdXJyZW50R3JvdXBBY3RpdmUgPSBncm91cDtcclxuICAgICAgfVxyXG4gICAgICBlbHNle1xyXG4gICAgICAgIHRoaXMuQ3VycmVudEdyb3VwQWN0aXZlID0gdGhpcy5sc3RNZW51KClbMF07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBDdXJyZW50R3JvdXBBY3RpdmU6IE1lbnUgPSBudWxsO1xyXG5cclxuICBUb2dnbGVDb2xsYXBzZWQoKXtcclxuICAgIHRoaXMuY29sYXBzZWRDaGFuZ2UuZW1pdCghdGhpcy5fZW50ZXJDb2xhcHNlZCk7XHJcbiAgICB0aGlzLl9lbnRlckNvbGFwc2VkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBfZW50ZXJDb2xhcHNlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG9uTW91c2VFbnRlcigpe1xyXG4gICAgaWYodGhpcy5jb2xhcHNlZCl7XHJcbiAgICAgIHRoaXMuX2VudGVyQ29sYXBzZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmNvbGFwc2VkQ2hhbmdlLmVtaXQoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuICBvbk1vdXNlTGVhdmUoKXtcclxuICAgIGlmKHRoaXMuX2VudGVyQ29sYXBzZWQpe1xyXG4gICAgICB0aGlzLl9lbnRlckNvbGFwc2VkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY29sYXBzZWRDaGFuZ2UuZW1pdCh0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEhhbmRsZU5hdihpdGVtOiBNZW51IHwgYW55LCBldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KXtcclxuICAgICAgd2luZG93Lm9wZW4od2luZG93Lm9yaWdpbiArICcvJyArIGl0ZW0ucm91dGUsICdfYmxhbmsnKTtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5TZXRUaXRsZShpdGVtKTtcclxuICAgIGNvbnN0IHZHcm91cDogTWVudSB8IG51bGwgPSBGaW5kTWVudVBhcmVudCh0aGlzLmxzdE1lbnUoKSwgaXRlbSk7XHJcbiAgICBpZih2R3JvdXApe1xyXG4gICAgICB0aGlzLkN1cnJlbnRHcm91cEFjdGl2ZSA9IHZHcm91cDtcclxuICAgIH1cclxuICAgIHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZVJvb3QoJy8nICsgaXRlbS5yb3V0ZSk7XHJcbiAgfVxyXG4gIFNldFRpdGxlKGl0ZW06IE1lbnUpe1xyXG4gICAgdGhpcy5nZW5lcmljU2VydmljZS5TZXRUaXRsZShpdGVtLnRpdGxlKTtcclxuICB9XHJcblxyXG4gIHNlYXJjaDogV3JpdGFibGVTaWduYWw8c3RyaW5nPiA9IHNpZ25hbDxzdHJpbmc+KFwiXCIpO1xyXG4gIGxzdE1lbnVGaWx0ZXJlZDogU2lnbmFsPE1lbnVbXT4gPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBjb25zdCBzdHIgPSB0aGlzLnNlYXJjaCgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBjb25zdCBsc3RTMSA9IHRoaXMubHN0TWVudSgpLm1hcChwID0+IHtcclxuICAgICAgcmV0dXJuIG5ldyBNZW51KHAudHlwZSwgcC50aXRsZSwgcC5pY29uLCBwLmxzdE1lbnUuZmlsdGVyKHggPT4geC50aXRsZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHN0cikpLCBwLnJvdXRlKTtcclxuICAgIH0pO1xyXG4gICAgY29uc3QgbHN0UzIgPSBsc3RTMS5maWx0ZXIocCA9PiBwLmxzdE1lbnUubGVuZ3RoID4gMCk7XHJcbiAgICByZXR1cm4gbHN0UzI7XHJcbiAgfSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBGbGF0dGVucyBhIGhpZXJhcmNoaWNhbCBNZW51W10gc3RydWN0dXJlIGludG8gYSBzaW5nbGUgYXJyYXlcclxuICogY29udGFpbmluZyBhbGwgTWVudSBpdGVtcyBmcm9tIHRoZSBvcmlnaW5hbCBhcnJheSBhbmQgYWxsIG5lc3RlZCBpdGVtc1xyXG4gKiBAcGFyYW0gbWVudXMgVGhlIGFycmF5IG9mIE1lbnUgaXRlbXMgdG8gZmxhdHRlblxyXG4gKiBAcmV0dXJucyBBIGZsYXR0ZW5lZCBhcnJheSBjb250YWluaW5nIGFsbCBNZW51IGl0ZW1zXHJcbiAqL1xyXG5mdW5jdGlvbiBGbGF0dGVuTWVudXMobWVudXM6IE1lbnVbXSk6IE1lbnVbXSB7XHJcbiAgY29uc3QgcmVzdWx0OiBNZW51W10gPSBbXTtcclxuICBcclxuICBmdW5jdGlvbiBhZGRNZW51SXRlbXMoaXRlbXM6IE1lbnVbXSkge1xyXG4gICAgZm9yIChjb25zdCBtZW51IG9mIGl0ZW1zKSB7XHJcbiAgICAgIC8vIEFkZCBjdXJyZW50IG1lbnUgdG8gcmVzdWx0XHJcbiAgICAgIHJlc3VsdC5wdXNoKG1lbnUpO1xyXG4gICAgICBcclxuICAgICAgLy8gUHJvY2VzcyBuZXN0ZWQgbWVudXMgaWYgdGhleSBleGlzdFxyXG4gICAgICBpZiAobWVudS5sc3RNZW51ICYmIG1lbnUubHN0TWVudS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgYWRkTWVudUl0ZW1zKG1lbnUubHN0TWVudSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgYWRkTWVudUl0ZW1zKG1lbnVzKTtcclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBGaW5kTWVudVBhcmVudChtZW51czogTWVudVtdLCB0YXJnZXRNZW51OiBNZW51KTogTWVudSB8IG51bGwge1xyXG4gIGZvciAoY29uc3QgbWVudSBvZiBtZW51cykge1xyXG4gICAgLy8gQ2hlY2sgaWYgY3VycmVudCBtZW51IGhhcyB0aGUgdGFyZ2V0IGluIGl0cyBkaXJlY3QgY2hpbGRyZW5cclxuICAgIGlmIChtZW51LmxzdE1lbnUgJiYgbWVudS5sc3RNZW51LnNvbWUobSA9PiBtID09PSB0YXJnZXRNZW51KSkge1xyXG4gICAgICByZXR1cm4gbWVudTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gU2VhcmNoIGRlZXBlciBpbiB0aGUgaGllcmFyY2h5XHJcbiAgICBpZiAobWVudS5sc3RNZW51ICYmIG1lbnUubHN0TWVudS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IEZpbmRNZW51UGFyZW50KG1lbnUubHN0TWVudSwgdGFyZ2V0TWVudSk7XHJcbiAgICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgICByZXR1cm4gcGFyZW50O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIHJldHVybiBudWxsO1xyXG59IiwiPGRpdiBjbGFzcz1cImFic29sdXRlIGxlZnQtMCB0b3AtMCBoLWZ1bGwgYmctbGlnaHQgc2l6ZS1mdWxsIGZsZXggZmxleC1jb2wgcC0yICFwci0wIHctWzE5cmVtXSBvdmVyZmxvdy1oaWRkZW5cIiAobW91c2VlbnRlcik9XCJvbk1vdXNlRW50ZXIoKVwiIChtb3VzZWxlYXZlKT1cIm9uTW91c2VMZWF2ZSgpXCI+XHJcbiAgPCEtLSBbIEhlYWRlciBdIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJzaHJpbmstMCB3LWZ1bGwgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyXCI+XHJcbiAgICA8ZGl2ICNhbmNob3JcclxuICAgICAgKGNsaWNrKT1cIlRvZ2dsZUNvbGxhcHNlZCgpXCIgXHJcbiAgICAgIGNsYXNzPVwidG9nZ2xlIHNpemUtMTAgYXNwZWN0LXNxdWFyZSBzaHJpbmstMCByb3VuZGVkLXhsIGJnLWluYWN0aXZlIGdyYWRpZW50LWJhY2tncm91bmQgbWVudVwiXHJcbiAgICA+XHJcbiAgICAgIDxpb24taWNvbiBuYW1lPVwibWVudVwiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIDxpb24tYnV0dG9uIGNsYXNzPVwic2l6ZS0xMCBzaHJpbmstMCBhc3BlY3Qtc3F1YXJlXCIgc2l6ZT1cInNtYWxsXCIgY29sb3I9XCJtZWRpdW1cIiAoY2xpY2spPVwiVG9nZ2xlQ29sbGFwc2VkKClcIj5cclxuICAgICAgPGlvbi1pY29uIG5hbWU9XCJtZW51XCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+XHJcbiAgICA8L2lvbi1idXR0b24+IC0tPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJzaXplLWZ1bGwgc2hyaW5rIGZsZXggcGwtMiBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNpemUtZnVsbCBtYXgtaC0xMCBmbGV4IGZsZXgtd3JhcCBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgICAgICBAaWYgKCFyZWYuY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICA8aW9uLXRleHQgY2xhc3M9XCJzaXplLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZGVmYXVsdC10cmFuc2l0aW9uIHotMFwiIFtuZ0NsYXNzXT1cInsnb3BhY2l0eS0wIC10cmFuc2xhdGUteC0xLzIgcG9pbnRlci1ldmVudHMtbm9uZSc6IGNvbGFwc2VkIH1cIj4gXHJcbiAgICAgICAgICAgIHt7dGl0bGV9fVxyXG4gICAgICAgICAgPC9pb24tdGV4dD5cclxuICAgICAgICB9XHJcbiAgICAgICAgPGRpdiAjcmVmIGNsYXNzPVwic2l6ZS1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHNocmluay0wXCI+XHJcbiAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc2xvdD1sb2dvXVwiPjwvbmctY29udGVudD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBbIENvbnRlbnQgXSAtLT5cclxuICA8ZGl2IGNsYXNzPVwic2l6ZS1mdWxsIHNocmluayBmbGV4IGZsZXgtY29sIHJlbGF0aXZlIG92ZXJmbG93LWhpZGRlblwiPlxyXG4gICAgPGxvYWRpbmcgW3R5cGVdPVwiM1wiIFtsb2FkaW5nXT1cImxvYWRpbmdcIiB0ZXh0PVwiXCI+PC9sb2FkaW5nPlxyXG4gICAgPGRpdiBjbGFzcz1cInNpemUtZnVsbCBzaHJpbmsgZmxleCBnYXAtMlwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaC1mdWxsIHctMTIgcHItMiBweS0yIG1hc2steSBzaHJpbmstMCBmbGV4IGZsZXgtY29sIGdhcC0yIG92ZXJmbG93LXktYXV0byBvdmVyZmxvdy14LWhpZGRlbiBib3JkZXItZGFzaGVkIGJvcmRlci1yIGJvcmRlci1yLW1lZGl1bS8zMFwiPlxyXG4gICAgICAgIDxkaXYgI3NlYXJjaEFuY2hvciAoY2xpY2spPVwibW9kYWwucHJlc2VudCgpXCIgY2xhc3M9XCJzZWFyY2gtYnV0dG9uIHNpemUtMTAgYXNwZWN0LXNxdWFyZSBzaHJpbmstMCByb3VuZGVkLXhsIGJnLWluYWN0aXZlIGdyYWRpZW50LWJhY2tncm91bmQgbWVudVwiPlxyXG4gICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJzZWFyY2hcIiBzbG90PVwiaWNvbi1vbmx5XCI+PC9pb24taWNvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgQGZvciAoaXRlbSBvZiBsc3RNZW51KCk7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIFtjbGFzcy5iZy1hY3RpdmVdPVwiQ3VycmVudEdyb3VwQWN0aXZlID09IGl0ZW1cIlxyXG4gICAgICAgICAgICAgICNhbmNob3IgKG1vdXNlZW50ZXIpPVwicG9wb3Zlci5wcmVzZW50KCRldmVudClcIiBcclxuICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJwb3BvdmVyLmRpc21pc3MoKVwiIFxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJDdXJyZW50R3JvdXBBY3RpdmUgPSBpdGVtXCIgXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3LTEwIGFzcGVjdC1zcXVhcmUgc2hyaW5rLTAgcm91bmRlZC14bCBiZy1pbmFjdGl2ZSBncmFkaWVudC1iYWNrZ3JvdW5kIG1lbnVcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGlvbi1pY29uIFtuYW1lXT1cIml0ZW0uaWNvblwiPjwvaW9uLWljb24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8c2lvbi1wb3BvdmVyICNwb3BvdmVyIFthbmNob3JdPVwiYW5jaG9yXCIgW2ZsaXBdPVwiZmFsc2VcIiBwbGFjZW1lbnQ9XCJyaWdodFwiIGZpbGw9XCJzb2xpZFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTFcIj5cclxuICAgICAgICAgICAgICAgIHt7dXNlVHJhbnNsYXRpb24gPyAoVHJhbnNsYXRpb25Nb2R1bGUuUGVybWlzc2FvR3J1cG8gKyBpdGVtLmlkIHwgdHJhbnNsYXRlKSA6IGl0ZW0udGl0bGV9fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3Npb24tcG9wb3Zlcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2l6ZS1mdWxsIHNocmluayByZWxhdGl2ZVwiPlxyXG4gICAgICAgIEBmb3IgKG1Hcm91cCBvZiBsc3RNZW51KCk7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIHRvcC0wIGxlZnQtMCBzaXplLWZ1bGwgcHktMiBkZWZhdWx0LXRyYW5zaXRpb24gb3BhY2l0eS0wIHRyYW5zbGF0ZS14LWZ1bGwgei0wIG92ZXJmbG93LWhpZGRlblwiIFtuZ0NsYXNzXT1cInsnb3BhY2l0eS0xMDAgIXRyYW5zbGF0ZS14LTAnOiBDdXJyZW50R3JvdXBBY3RpdmUgPT0gbUdyb3VwfVwiPlxyXG4gICAgICAgICAgICA8ZHJhd2VyLWdyb3VwIFtNZW51R3JvdXBdPVwibUdyb3VwXCIgW3VzZVRyYW5zbGF0aW9uXT1cInVzZVRyYW5zbGF0aW9uXCIgW2NvbGFwc2VkXT1cImNvbGFwc2VkXCI+PC9kcmF3ZXItZ3JvdXA+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gWyBFbmQgXSAtLT5cclxuICA8ZGl2IGNsYXNzPVwic2hyaW5rLTAgdy1mdWxsXCI+XHJcbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc2xvdD1kcmF3ZXJdXCI+PC9uZy1jb250ZW50PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxpb24tbW9kYWwgI21vZGFsIFtrZWVwQ29udGVudHNNb3VudGVkXT1cInRydWVcIiAob25XaWxsRGlzbWlzcyk9XCJzZWFyY2guc2V0KCcnKVwiPlxyXG4gIDxuZy10ZW1wbGF0ZT5cclxuICAgIDxpb24tY29udGVudD5cclxuICAgICAgPGlvbi1jYXJkIGNsYXNzPVwic2l6ZS1mdWxsIG0tMCBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgICAgICA8aW9uLWNhcmQtY29udGVudCBjbGFzcz1cInNpemUtZnVsbCBmbGV4IGZsZXgtY29sIG92ZXJmbG93LWhpZGRlbiBwLTBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaHJpbmstMCB3LWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPGlvbi1zZWFyY2hiYXIgY2xhc3M9XCJwLTAgIXBsLTIgIXB5LTJcIiBbbmdNb2RlbF09XCJ0aGlzLnNlYXJjaCgpXCIgKG5nTW9kZWxDaGFuZ2UpPVwidGhpcy5zZWFyY2guc2V0KCRldmVudClcIiBbZGVib3VuY2VdPVwiMjAwXCI+PC9pb24tc2VhcmNoYmFyPlxyXG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiBzaXplPVwic21hbGxcIiBmaWxsPVwiY2xlYXJcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZVwiPjwvaW9uLWljb24+XHJcbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaXplLWZ1bGwgZmxleCBmbGV4LWNvbCBzaHJpbmsgZ2FwLTIgb3ZlcmZsb3cteS1hdXRvIHAtMiBtYXNrLXlcIj5cclxuICAgICAgICAgICAgQGZvciAodkdyb3VwIG9mIGxzdE1lbnVGaWx0ZXJlZCgpOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICA8aW9uLWNhcmQgY2xhc3M9XCJtLTAgc2hyaW5rLTBcIj5cclxuICAgICAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50IGNsYXNzPVwicC0wIGdyYWRpZW50LWJhY2tncm91bmQgYmctaW5hY3RpdmUgZmxleCBmbGV4LWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMCBmbGV4IGl0ZW1zLWNlbnRlciAhanVzdGlmeS1zdGFydCBnYXAtMiB0ZXh0LWRhcmsgc2hyaW5rLTAgcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIFtuYW1lXT1cInZHcm91cC5pY29uXCI+PC9pb24taWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8aW9uLXRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e3VzZVRyYW5zbGF0aW9uID8gKFRyYW5zbGF0aW9uTW9kdWxlLlBlcm1pc3Nhb0dydXBvICsgdkdyb3VwLmlkIHwgdHJhbnNsYXRlKSA6IHZHcm91cC50aXRsZX19IFxyXG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICBAZm9yICh2TWVudSBvZiB2R3JvdXAubHN0TWVudTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJIYW5kbGVOYXYodk1lbnUsICRldmVudCk7IG1vZGFsLmRpc21pc3MoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYmctYWN0aXZlXT1cInJvdXRlci5pc0FjdGl2ZSgnLycgKyB2TWVudS5yb3V0ZSwgZmFsc2UpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIGZsZXggaXRlbXMtY2VudGVyICFqdXN0aWZ5LXN0YXJ0IGdhcC0yIHRleHQtZGFyayBzaHJpbmstMCAhcGwtOCBwLTEuNSBib3JkZXItdCBib3JkZXItdC1tZWRpdW0vMzAgbWVudS1zZWFyY2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBbbmFtZV09XCJ2TWVudS5pY29uXCI+PC9pb24taWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3t1c2VUcmFuc2xhdGlvbiA/IChUcmFuc2xhdGlvbk1vZHVsZS5QZXJtaXNzYW8gKyB2TWVudS5pZCB8IHRyYW5zbGF0ZSkgOiB2TWVudS50aXRsZX19IFxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxyXG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQ+XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIEBpZiAobHN0TWVudUZpbHRlcmVkKCkubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICA8aW9uLXRleHQgY2xhc3M9XCJ0ZXh0LWNlbnRlciB0ZXh0LW1lZGl1bVwiPlxyXG4gICAgICAgICAgICAgICAge3t1c2VUcmFuc2xhdGlvbiA/IChUcmFuc2xhdGlvbk1vZHVsZS5TZW1SZXN1bHRhZG8gfCB0cmFuc2xhdGUpIDogJ1NlbSByZXN1bHRhZG9zIGVuY29udHJhZG9zJ319XHJcbiAgICAgICAgICAgICAgPC9pb24tdGV4dD5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxyXG4gICAgICA8L2lvbi1jYXJkPlxyXG4gICAgPC9pb24tY29udGVudD5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L2lvbi1tb2RhbD4iXX0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export class Menu {
|
|
2
|
+
constructor(type, title, icon, lstMenu = [], route = null) {
|
|
3
|
+
this.type = type;
|
|
4
|
+
this.title = title;
|
|
5
|
+
this.route = route;
|
|
6
|
+
if (icon) {
|
|
7
|
+
this.icon = icon;
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
this.icon = "layers";
|
|
11
|
+
}
|
|
12
|
+
this.lstMenu = lstMenu;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kcmF3ZXIvbWVudS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxNQUFNLE9BQU8sSUFBSTtJQU9mLFlBQVksSUFBMEIsRUFBRSxLQUFhLEVBQUUsSUFBb0IsRUFBRSxVQUFrQixFQUFFLEVBQUUsUUFBdUIsSUFBSTtRQUM1SCxJQUFJLENBQUMsSUFBSSxHQUFJLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFHLElBQUksRUFBQyxDQUFDO1lBQ1AsSUFBSSxDQUFDLElBQUksR0FBSSxJQUFJLENBQUM7UUFDcEIsQ0FBQzthQUFJLENBQUM7WUFDSixJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztRQUN2QixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmV4cG9ydCBjbGFzcyBNZW51e1xyXG4gIGlkOiBudW1iZXI7XHJcbiAgcm91dGU6IHN0cmluZyB8IG51bGw7XHJcbiAgaWNvbiA6IHN0cmluZyB8IG51bGw7XHJcbiAgdGl0bGU6IHN0cmluZztcclxuICBsc3RNZW51OiBNZW51W107XHJcbiAgdHlwZTogJ01lbnUnIHwgJ01lbnVHcm91cCdcclxuICBjb25zdHJ1Y3Rvcih0eXBlOiAnTWVudScgfCAnTWVudUdyb3VwJywgdGl0bGU6IHN0cmluZywgaWNvbiA6IHN0cmluZyB8IG51bGwsIGxzdE1lbnU6IE1lbnVbXSA9IFtdLCByb3V0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpe1xyXG4gICAgdGhpcy50eXBlICA9IHR5cGU7IFxyXG4gICAgdGhpcy50aXRsZSA9IHRpdGxlO1xyXG4gICAgdGhpcy5yb3V0ZSA9IHJvdXRlO1xyXG4gICAgaWYoaWNvbil7XHJcbiAgICAgIHRoaXMuaWNvbiAgPSBpY29uO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMuaWNvbiA9IFwibGF5ZXJzXCI7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxzdE1lbnUgPSBsc3RNZW51O1xyXG4gIH1cclxufSJdfQ==
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { Component, effect, EventEmitter, Input, model, Output } from '@angular/core';
|
|
2
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { IonicModule } from '@ionic/angular';
|
|
5
|
+
import moment from 'moment';
|
|
6
|
+
import { InputSelectConfiguration } from '../inputs/input-select/input.select.configuration';
|
|
7
|
+
import { ComparisonOperator } from '../../classes/comparison/comparison-operator';
|
|
8
|
+
import { InputsModule } from '../inputs/inputs.module';
|
|
9
|
+
import { InputType } from '../inputs/input-type';
|
|
10
|
+
import { Utils } from '../../services/utils.service';
|
|
11
|
+
import { InputCurrencyConfiguration, InputDecimalConfiguration, InputNumberConfiguration } from '../inputs/input-decimal/input-decimal.configuration';
|
|
12
|
+
import { InputStringConfiguration } from '../inputs/input-string/input-string.configuration';
|
|
13
|
+
import { InputDateConfiguration } from '../inputs/input-date/input-date.configuration';
|
|
14
|
+
import { InputFileConfiguration } from '../inputs/input-file/input-file.configuration';
|
|
15
|
+
import { InputBoolConfiguration } from '../inputs/input-bool/input-bool.configuration';
|
|
16
|
+
import { InputCpfCnpjConfiguration } from '../inputs/input-cpf-cnpj/input-cpf-cnpj.configuration';
|
|
17
|
+
import { InputCepConfiguration } from '../inputs/input-cep/input-cep.configuration';
|
|
18
|
+
import * as i0 from "@angular/core";
|
|
19
|
+
import * as i1 from "../inputs/input-cep/input-cep.component";
|
|
20
|
+
import * as i2 from "../inputs/input-cpf-cnpj/input-cpf-cnpj.component";
|
|
21
|
+
import * as i3 from "../inputs/input-date/input-date.component";
|
|
22
|
+
import * as i4 from "../inputs/input-decimal/input-decimal.component";
|
|
23
|
+
import * as i5 from "../inputs/input-select/input-select.component";
|
|
24
|
+
import * as i6 from "../inputs/input-string/input-string.component";
|
|
25
|
+
import * as i7 from "@angular/forms";
|
|
26
|
+
/** Componente padrão de filtro */
|
|
27
|
+
export class FilterComponent {
|
|
28
|
+
constructor() {
|
|
29
|
+
/** Filtro que sera utilizado na pesquisa (usando two way data binding) */
|
|
30
|
+
this.filter = model();
|
|
31
|
+
this.guid = Utils.GenerateGUID();
|
|
32
|
+
/** Configuração input do filtro */
|
|
33
|
+
this._configuration = null;
|
|
34
|
+
this.configuration = model(null);
|
|
35
|
+
this.isFilterActive = false;
|
|
36
|
+
this.model = null;
|
|
37
|
+
/** Evento emitido quando o valor do filtro muda */
|
|
38
|
+
this.changeEmitter = new EventEmitter();
|
|
39
|
+
effect(() => {
|
|
40
|
+
if ([InputType.Date, InputType.DateTime].includes(this.type)) {
|
|
41
|
+
if (this.filter().value) {
|
|
42
|
+
this.model = moment(this.filter().value).format("YYYY-MM-DDTHH:mm:ss");
|
|
43
|
+
this.filter().value = this.model;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
this.SetConfiguration();
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
get index() { return this.filter().propertyName; }
|
|
50
|
+
SetConfiguration() {
|
|
51
|
+
if (!this.configuration()) {
|
|
52
|
+
if ([InputType.Date, InputType.DateTime, InputType.Time].includes(this.type)) {
|
|
53
|
+
this._configuration = new InputDateConfiguration(true);
|
|
54
|
+
}
|
|
55
|
+
else if (this.type == InputType.File) {
|
|
56
|
+
this._configuration = new InputFileConfiguration();
|
|
57
|
+
}
|
|
58
|
+
else if (this.type == InputType.Number) {
|
|
59
|
+
this._configuration = new InputNumberConfiguration();
|
|
60
|
+
}
|
|
61
|
+
else if (this.type == InputType.Decimal) {
|
|
62
|
+
this._configuration = new InputDecimalConfiguration();
|
|
63
|
+
}
|
|
64
|
+
else if (this.type == InputType.Currency) {
|
|
65
|
+
this._configuration = new InputCurrencyConfiguration();
|
|
66
|
+
}
|
|
67
|
+
else if (this.type == InputType.String) {
|
|
68
|
+
this._configuration = new InputStringConfiguration();
|
|
69
|
+
}
|
|
70
|
+
else if (this.type == InputType.Select) {
|
|
71
|
+
this._configuration = new InputSelectConfiguration();
|
|
72
|
+
}
|
|
73
|
+
else if (this.type == InputType.TextArea) {
|
|
74
|
+
this._configuration = new InputStringConfiguration();
|
|
75
|
+
}
|
|
76
|
+
else if (this.type == InputType.Bool) {
|
|
77
|
+
this._configuration = new InputBoolConfiguration();
|
|
78
|
+
}
|
|
79
|
+
else if (this.type == InputType.Cpf) {
|
|
80
|
+
this._configuration = new InputCpfCnpjConfiguration("CPF");
|
|
81
|
+
}
|
|
82
|
+
else if (this.type == InputType.Cnpj) {
|
|
83
|
+
this._configuration = new InputCpfCnpjConfiguration("CNPJ");
|
|
84
|
+
}
|
|
85
|
+
else if (this.type == InputType.CpfCnpj) {
|
|
86
|
+
this._configuration = new InputCpfCnpjConfiguration("CPFCNPJ");
|
|
87
|
+
}
|
|
88
|
+
if (this.type == InputType.Cep) {
|
|
89
|
+
this._configuration = new InputCepConfiguration();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (this.configuration() && this.configuration() instanceof InputSelectConfiguration) {
|
|
93
|
+
this._configuration = new InputSelectConfiguration(this.configuration().bindValue, this.configuration().bindLabel, true, true, this.configuration().loadFrom, true);
|
|
94
|
+
}
|
|
95
|
+
if (this.configuration() instanceof InputDateConfiguration) {
|
|
96
|
+
this._configuration = new InputDateConfiguration(true);
|
|
97
|
+
}
|
|
98
|
+
if (this.type == InputType.Bool) {
|
|
99
|
+
if (this.index == "ativo") {
|
|
100
|
+
this._configuration = new InputSelectConfiguration('value', 'label', true, true, [
|
|
101
|
+
{ label: 'Somente Ativos', value: true },
|
|
102
|
+
{ label: 'Somente Não Ativos', value: false },
|
|
103
|
+
]);
|
|
104
|
+
this.model = true;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
this._configuration = new InputSelectConfiguration('value', 'label', true, false, [
|
|
108
|
+
{ label: 'Sim', value: true },
|
|
109
|
+
{ label: 'Não', value: false },
|
|
110
|
+
]);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (!this._configuration) {
|
|
114
|
+
this._configuration = this.configuration();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
Change() {
|
|
118
|
+
if (this.model) {
|
|
119
|
+
if (this.type == InputType.Date && (this.filter().operator == ComparisonOperator.LessThan ||
|
|
120
|
+
this.filter().operator == ComparisonOperator.LessThanOrEqual)) {
|
|
121
|
+
this.model = this.FormatDateModel(moment(this.model).endOf("day").toISOString());
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
this.filter().value = this.model;
|
|
125
|
+
this.filter.set(this.filter());
|
|
126
|
+
this.changeEmitter.emit();
|
|
127
|
+
}
|
|
128
|
+
FormatDateModel(model) {
|
|
129
|
+
return moment(model).format("YYYY-MM-DDTHH:mm:ss");
|
|
130
|
+
}
|
|
131
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
132
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: FilterComponent, isStandalone: true, selector: "filter", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: false, isRequired: false, transformFunction: null }, filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: false, isRequired: false, transformFunction: null }, configuration: { classPropertyName: "configuration", publicName: "configuration", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filter: "filterChange", configuration: "configurationChange", changeEmitter: "change" }, ngImport: i0, template: "@if(_configuration){\r\n @switch (type) {\r\n @case ('String') {\r\n <input-string [(ngModel)]=\"model\" [label]=\"label\" (blur)=\"Change()\"></input-string>\r\n }\r\n @case ('Number') {\r\n <input-number (change)=\"Change()\" [(ngModel)]=\"model\" [label]=\"label\" [configuration]=\"_configuration\"></input-number>\r\n }\r\n @case ('Decimal') {\r\n <input-decimal (change)=\"Change()\" [(ngModel)]=\"model\" [label]=\"label\" [configuration]=\"_configuration\"></input-decimal>\r\n }\r\n @case ('Currency') {\r\n <input-currency (change)=\"Change()\" [(ngModel)]=\"model\" [label]=\"label\" [configuration]=\"_configuration\"></input-currency>\r\n }\r\n @case ('Select') {\r\n <input-select (change)=\"Change()\" [(ngModel)]=\"model\" class=\"th-select\" [label]=\"label\" [configuration]=\"_configuration\"></input-select>\r\n }\r\n @case ('TextArea') {\r\n <input-string (change)=\"Change()\" [(ngModel)]=\"model\" class=\"th-select\" [label]=\"label\"></input-string>\r\n }\r\n @case ('Bool') {\r\n <input-select (change)=\"Change()\" [(ngModel)]=\"model\" class=\"th-select\" [label]=\"label\" placeholder=\"\" [configuration]=\"_configuration\"></input-select>\r\n }\r\n @case ('Date') {\r\n <input-date (change)=\"Change()\" [(ngModel)]=\"model\" [label]=\"label\" [configuration]=\"_configuration\"></input-date>\r\n }\r\n @case ('DateTime') {\r\n <input-date-time (change)=\"Change()\" [(ngModel)]=\"model\" [label]=\"label\" [configuration]=\"_configuration\"></input-date-time>\r\n }\r\n @case (\"Cep\") {\r\n <input-cep (change)=\"Change()\" [(ngModel)]=\"model\" [label]=\"label\"></input-cep>\r\n }\r\n @case (\"Cpf\") {\r\n <input-cpf (change)=\"Change()\" [(ngModel)]=\"model\" [label]=\"label\" [configuration]=\"_configuration\"></input-cpf>\r\n }\r\n @case (\"Cnpj\") {\r\n <input-cnpj (change)=\"Change()\" [(ngModel)]=\"model\" [label]=\"label\" [configuration]=\"_configuration\"></input-cnpj>\r\n }\r\n @case (\"CpfCnpj\") {\r\n <input-cpf-cnpj (change)=\"Change()\" [(ngModel)]=\"model\" [label]=\"label\" [configuration]=\"_configuration\"></input-cpf-cnpj>\r\n }\r\n }\r\n}", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: IonicModule }, { kind: "ngmodule", type: InputsModule }, { kind: "component", type: i1.InputCepComponent, selector: "input-cep", inputs: ["configuration"] }, { kind: "component", type: i2.InputCpfCnpjComponent, selector: "input-cpf-cnpj, input-cpf, input-cnpj", inputs: ["configuration"], outputs: ["configurationChange"] }, { kind: "component", type: i3.InputDateComponent, selector: "input-date, input-date-time, input-time", inputs: ["configuration"] }, { kind: "component", type: i4.InputDecimalComponent, selector: "input-decimal, input-number, input-currency, input-percentage", inputs: ["configuration"], outputs: ["configurationChange"] }, { kind: "component", type: i5.InputSelectComponent, selector: "input-select", inputs: ["items", "configuration"], outputs: ["itemsChange"] }, { kind: "component", type: i6.InputStringComponent, selector: "input-string", inputs: ["configuration"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
133
|
+
}
|
|
134
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FilterComponent, decorators: [{
|
|
135
|
+
type: Component,
|
|
136
|
+
args: [{ standalone: true, imports: [CommonModule, IonicModule, InputsModule, ReactiveFormsModule, FormsModule], selector: 'filter', template: "@if(_configuration){\r\n @switch (type) {\r\n @case ('String') {\r\n <input-string [(ngModel)]=\"model\" [label]=\"label\" (blur)=\"Change()\"></input-string>\r\n }\r\n @case ('Number') {\r\n <input-number (change)=\"Change()\" [(ngModel)]=\"model\" [label]=\"label\" [configuration]=\"_configuration\"></input-number>\r\n }\r\n @case ('Decimal') {\r\n <input-decimal (change)=\"Change()\" [(ngModel)]=\"model\" [label]=\"label\" [configuration]=\"_configuration\"></input-decimal>\r\n }\r\n @case ('Currency') {\r\n <input-currency (change)=\"Change()\" [(ngModel)]=\"model\" [label]=\"label\" [configuration]=\"_configuration\"></input-currency>\r\n }\r\n @case ('Select') {\r\n <input-select (change)=\"Change()\" [(ngModel)]=\"model\" class=\"th-select\" [label]=\"label\" [configuration]=\"_configuration\"></input-select>\r\n }\r\n @case ('TextArea') {\r\n <input-string (change)=\"Change()\" [(ngModel)]=\"model\" class=\"th-select\" [label]=\"label\"></input-string>\r\n }\r\n @case ('Bool') {\r\n <input-select (change)=\"Change()\" [(ngModel)]=\"model\" class=\"th-select\" [label]=\"label\" placeholder=\"\" [configuration]=\"_configuration\"></input-select>\r\n }\r\n @case ('Date') {\r\n <input-date (change)=\"Change()\" [(ngModel)]=\"model\" [label]=\"label\" [configuration]=\"_configuration\"></input-date>\r\n }\r\n @case ('DateTime') {\r\n <input-date-time (change)=\"Change()\" [(ngModel)]=\"model\" [label]=\"label\" [configuration]=\"_configuration\"></input-date-time>\r\n }\r\n @case (\"Cep\") {\r\n <input-cep (change)=\"Change()\" [(ngModel)]=\"model\" [label]=\"label\"></input-cep>\r\n }\r\n @case (\"Cpf\") {\r\n <input-cpf (change)=\"Change()\" [(ngModel)]=\"model\" [label]=\"label\" [configuration]=\"_configuration\"></input-cpf>\r\n }\r\n @case (\"Cnpj\") {\r\n <input-cnpj (change)=\"Change()\" [(ngModel)]=\"model\" [label]=\"label\" [configuration]=\"_configuration\"></input-cnpj>\r\n }\r\n @case (\"CpfCnpj\") {\r\n <input-cpf-cnpj (change)=\"Change()\" [(ngModel)]=\"model\" [label]=\"label\" [configuration]=\"_configuration\"></input-cpf-cnpj>\r\n }\r\n }\r\n}" }]
|
|
137
|
+
}], ctorParameters: () => [], propDecorators: { label: [{
|
|
138
|
+
type: Input
|
|
139
|
+
}], type: [{
|
|
140
|
+
type: Input
|
|
141
|
+
}], changeEmitter: [{
|
|
142
|
+
type: Output,
|
|
143
|
+
args: ['change']
|
|
144
|
+
}] } });
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFlLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFNUIsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFFN0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDbEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXZELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFckQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDdEosT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDN0YsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDdkYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0NBQStD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QVM7aUNBQ0ksSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxDQUFDLFlBQzFFLFFBQVE7d0RBUVQsS0FBSztzQkFBYixLQUFLO2dCQUtHLElBQUk7c0JBQVosS0FBSztnQkFnRlksYUFBYTtzQkFBOUIsTUFBTTt1QkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBlZmZlY3QsIEV2ZW50RW1pdHRlciwgSW5wdXQsIG1vZGVsLCBNb2RlbFNpZ25hbCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBJb25pY01vZHVsZSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcclxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuaW1wb3J0IHsgSW5wdXRTZWxlY3RDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vaW5wdXRzL2lucHV0LXNlbGVjdC9pbnB1dC5zZWxlY3QuY29uZmlndXJhdGlvbic7XHJcbmltcG9ydCB7IENvbXBhcmlzb25WYWx1ZVR5cGUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NvbXBhcmlzb24vY29tcGFyaXNvbi12YWx1ZS10eXBlJztcclxuaW1wb3J0IHsgQ29tcGFyaXNvbk9wZXJhdG9yIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9jb21wYXJpc29uL2NvbXBhcmlzb24tb3BlcmF0b3InO1xyXG5pbXBvcnQgeyBJbnB1dHNNb2R1bGUgfSBmcm9tICcuLi9pbnB1dHMvaW5wdXRzLm1vZHVsZSc7XHJcbmltcG9ydCB7IENvbXBhcmlzb24gfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NvbXBhcmlzb24vY29tcGFyaXNvbic7XHJcbmltcG9ydCB7IElucHV0VHlwZSB9IGZyb20gJy4uL2lucHV0cy9pbnB1dC10eXBlJztcclxuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91dGlscy5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IElucHV0Q3VycmVuY3lDb25maWd1cmF0aW9uLCBJbnB1dERlY2ltYWxDb25maWd1cmF0aW9uLCBJbnB1dE51bWJlckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9pbnB1dHMvaW5wdXQtZGVjaW1hbC9pbnB1dC1kZWNpbWFsLmNvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQgeyBJbnB1dFN0cmluZ0NvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9pbnB1dHMvaW5wdXQtc3RyaW5nL2lucHV0LXN0cmluZy5jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHsgSW5wdXREYXRlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2lucHV0cy9pbnB1dC1kYXRlL2lucHV0LWRhdGUuY29uZmlndXJhdGlvbic7XHJcbmltcG9ydCB7IElucHV0RmlsZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9pbnB1dHMvaW5wdXQtZmlsZS9pbnB1dC1maWxlLmNvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQgeyBJbnB1dEJvb2xDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vaW5wdXRzL2lucHV0LWJvb2wvaW5wdXQtYm9vbC5jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHsgSW5wdXRDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vaW5wdXRzL2lucHV0LWNvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQgeyBJbnB1dENwZkNucGpDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vaW5wdXRzL2lucHV0LWNwZi1jbnBqL2lucHV0LWNwZi1jbnBqLmNvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQgeyBJbnB1dENlcENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9pbnB1dHMvaW5wdXQtY2VwL2lucHV0LWNlcC5jb25maWd1cmF0aW9uJztcclxuXHJcbi8qKiBDb21wb25lbnRlIHBhZHLDo28gZGUgZmlsdHJvICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSW9uaWNNb2R1bGUsIElucHV0c01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybXNNb2R1bGVdLFxyXG4gIHNlbGVjdG9yOiAnZmlsdGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXIuY29tcG9uZW50LnNjc3MnXSxcclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWx0ZXJDb21wb25lbnQge1xyXG5cclxuICAvKiogTGFiZWwgZG8gaW5wdXQgKi9cclxuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xyXG4gIC8qKiBGaWx0cm8gcXVlIHNlcmEgdXRpbGl6YWRvIG5hIHBlc3F1aXNhICh1c2FuZG8gdHdvIHdheSBkYXRhIGJpbmRpbmcpICovXHJcbiAgZmlsdGVyOiBNb2RlbFNpZ25hbDxDb21wYXJpc29uPiA9IG1vZGVsPENvbXBhcmlzb24+KCk7XHJcblxyXG4gIC8qKiBUaXBvIGRlIGlucHV0IGRvIGZpbHRybyAqL1xyXG4gIEBJbnB1dCgpIHR5cGU6IElucHV0VHlwZTtcclxuICBcclxuICBndWlkOiBzdHJpbmcgPSBVdGlscy5HZW5lcmF0ZUdVSUQoKTtcclxuICBcclxuICAvKiogQ29uZmlndXJhw6fDo28gaW5wdXQgZG8gZmlsdHJvICovXHJcbiAgX2NvbmZpZ3VyYXRpb246IElucHV0Q29uZmlndXJhdGlvbiB8IG51bGwgPSBudWxsO1xyXG4gIGNvbmZpZ3VyYXRpb246IE1vZGVsU2lnbmFsPElucHV0Q29uZmlndXJhdGlvbiB8IG51bGw+ID0gbW9kZWw8SW5wdXRDb25maWd1cmF0aW9uIHwgbnVsbD4obnVsbCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyBcclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIGlmKFtJbnB1dFR5cGUuRGF0ZSwgSW5wdXRUeXBlLkRhdGVUaW1lXS5pbmNsdWRlcyh0aGlzLnR5cGUpKXsgXHJcbiAgICAgICAgaWYodGhpcy5maWx0ZXIoKS52YWx1ZSl7XHJcbiAgICAgICAgICB0aGlzLm1vZGVsID0gbW9tZW50KHRoaXMuZmlsdGVyKCkudmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERUSEg6bW06c3NcIik7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcigpLnZhbHVlID0gdGhpcy5tb2RlbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5TZXRDb25maWd1cmF0aW9uKCk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGluZGV4KCkgeyByZXR1cm4gdGhpcy5maWx0ZXIoKS5wcm9wZXJ0eU5hbWU7IH1cclxuXHJcbiAgU2V0Q29uZmlndXJhdGlvbigpIHtcclxuICAgIGlmKCF0aGlzLmNvbmZpZ3VyYXRpb24oKSl7XHJcbiAgICAgIGlmKFtJbnB1dFR5cGUuRGF0ZSwgSW5wdXRUeXBlLkRhdGVUaW1lLCBJbnB1dFR5cGUuVGltZV0uaW5jbHVkZXModGhpcy50eXBlKSl7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dERhdGVDb25maWd1cmF0aW9uKHRydWUpIH0gZWxzZVxyXG4gICAgICBpZih0aGlzLnR5cGUgPT0gSW5wdXRUeXBlLkZpbGUgICAgKXsgdGhpcy5fY29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dEZpbGVDb25maWd1cmF0aW9uKCkgICAgIH0gZWxzZVxyXG4gICAgICBpZih0aGlzLnR5cGUgPT0gSW5wdXRUeXBlLk51bWJlciAgKXsgdGhpcy5fY29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dE51bWJlckNvbmZpZ3VyYXRpb24oKSAgIH0gZWxzZVxyXG4gICAgICBpZih0aGlzLnR5cGUgPT0gSW5wdXRUeXBlLkRlY2ltYWwgKXsgdGhpcy5fY29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dERlY2ltYWxDb25maWd1cmF0aW9uKCkgIH0gZWxzZVxyXG4gICAgICBpZih0aGlzLnR5cGUgPT0gSW5wdXRUeXBlLkN1cnJlbmN5KXsgdGhpcy5fY29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dEN1cnJlbmN5Q29uZmlndXJhdGlvbigpIH0gZWxzZVxyXG4gICAgICBpZih0aGlzLnR5cGUgPT0gSW5wdXRUeXBlLlN0cmluZyAgKXsgdGhpcy5fY29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dFN0cmluZ0NvbmZpZ3VyYXRpb24oKSAgIH0gZWxzZVxyXG4gICAgICBpZih0aGlzLnR5cGUgPT0gSW5wdXRUeXBlLlNlbGVjdCAgKXsgdGhpcy5fY29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dFNlbGVjdENvbmZpZ3VyYXRpb24oKSAgIH0gZWxzZVxyXG4gICAgICBpZih0aGlzLnR5cGUgPT0gSW5wdXRUeXBlLlRleHRBcmVhKXsgdGhpcy5fY29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dFN0cmluZ0NvbmZpZ3VyYXRpb24oKTsgIH0gZWxzZSBcclxuICAgICAgaWYodGhpcy50eXBlID09IElucHV0VHlwZS5Cb29sICAgICl7IHRoaXMuX2NvbmZpZ3VyYXRpb24gPSBuZXcgSW5wdXRCb29sQ29uZmlndXJhdGlvbigpOyAgICB9IGVsc2VcclxuICAgICAgaWYodGhpcy50eXBlID09IElucHV0VHlwZS5DcGYgICAgICl7IHRoaXMuX2NvbmZpZ3VyYXRpb24gPSBuZXcgSW5wdXRDcGZDbnBqQ29uZmlndXJhdGlvbihcIkNQRlwiKTsgIH0gZWxzZVxyXG4gICAgICBpZih0aGlzLnR5cGUgPT0gSW5wdXRUeXBlLkNucGogICAgKXsgdGhpcy5fY29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dENwZkNucGpDb25maWd1cmF0aW9uKFwiQ05QSlwiKTsgIH0gZWxzZSAgXHJcbiAgICAgIGlmKHRoaXMudHlwZSA9PSBJbnB1dFR5cGUuQ3BmQ25waiApeyB0aGlzLl9jb25maWd1cmF0aW9uID0gbmV3IElucHV0Q3BmQ25wakNvbmZpZ3VyYXRpb24oXCJDUEZDTlBKXCIpOyAgfVxyXG4gICAgICBpZih0aGlzLnR5cGUgPT0gSW5wdXRUeXBlLkNlcCAgICAgKXsgdGhpcy5fY29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dENlcENvbmZpZ3VyYXRpb24oKTsgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZih0aGlzLmNvbmZpZ3VyYXRpb24oKSAmJiB0aGlzLmNvbmZpZ3VyYXRpb24oKSBpbnN0YW5jZW9mIElucHV0U2VsZWN0Q29uZmlndXJhdGlvbil7XHJcbiAgICAgIHRoaXMuX2NvbmZpZ3VyYXRpb24gPSBuZXcgSW5wdXRTZWxlY3RDb25maWd1cmF0aW9uKFxyXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbigpLmJpbmRWYWx1ZSxcclxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24oKS5iaW5kTGFiZWwsXHJcbiAgICAgICAgdHJ1ZSxcclxuICAgICAgICB0cnVlLFxyXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbigpLmxvYWRGcm9tLFxyXG4gICAgICAgIHRydWUsXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYodGhpcy5jb25maWd1cmF0aW9uKCkgaW5zdGFuY2VvZiBJbnB1dERhdGVDb25maWd1cmF0aW9uKXtcclxuICAgICAgdGhpcy5fY29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dERhdGVDb25maWd1cmF0aW9uKHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKHRoaXMudHlwZSA9PSBJbnB1dFR5cGUuQm9vbCl7XHJcbiAgICAgIGlmKHRoaXMuaW5kZXggPT0gXCJhdGl2b1wiKXtcclxuICAgICAgICB0aGlzLl9jb25maWd1cmF0aW9uID0gbmV3IElucHV0U2VsZWN0Q29uZmlndXJhdGlvbigndmFsdWUnLCAnbGFiZWwnLCB0cnVlLCB0cnVlLCBbXHJcbiAgICAgICAgICB7IGxhYmVsOiAnU29tZW50ZSBBdGl2b3MnICAgICwgdmFsdWU6IHRydWUgIH0sXHJcbiAgICAgICAgICB7IGxhYmVsOiAnU29tZW50ZSBOw6NvIEF0aXZvcycsIHZhbHVlOiBmYWxzZSB9LFxyXG4gICAgICAgIF0pO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2V7XHJcbiAgICAgICAgdGhpcy5fY29uZmlndXJhdGlvbiA9IG5ldyBJbnB1dFNlbGVjdENvbmZpZ3VyYXRpb24oJ3ZhbHVlJywgJ2xhYmVsJywgdHJ1ZSwgZmFsc2UsIFtcclxuICAgICAgICAgIHsgbGFiZWw6ICdTaW0nLCB2YWx1ZTogdHJ1ZSAgfSxcclxuICAgICAgICAgIHsgbGFiZWw6ICdOw6NvJywgdmFsdWU6IGZhbHNlIH0sXHJcbiAgICAgICAgXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZighdGhpcy5fY29uZmlndXJhdGlvbil7XHJcbiAgICAgIHRoaXMuX2NvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbmZpZ3VyYXRpb24oKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNGaWx0ZXJBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgbW9kZWw6IGFueSB8IG51bGwgPSBudWxsO1xyXG4gIC8qKiBFdmVudG8gZW1pdGlkbyBxdWFuZG8gbyB2YWxvciBkbyBmaWx0cm8gbXVkYSAqL1xyXG4gIEBPdXRwdXQoJ2NoYW5nZScpIGNoYW5nZUVtaXR0ZXI6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgQ2hhbmdlKCk6IHZvaWR7XHJcbiAgICBpZih0aGlzLm1vZGVsKXtcclxuICAgICAgaWYodGhpcy50eXBlID09IElucHV0VHlwZS5EYXRlICYmIChcclxuICAgICAgICAgIHRoaXMuZmlsdGVyKCkub3BlcmF0b3IgPT0gQ29tcGFyaXNvbk9wZXJhdG9yLkxlc3NUaGFuIHx8IFxyXG4gICAgICAgICAgdGhpcy5maWx0ZXIoKS5vcGVyYXRvciA9PSBDb21wYXJpc29uT3BlcmF0b3IuTGVzc1RoYW5PckVxdWFsKVxyXG4gICAgICAgIClcclxuICAgICAgeyBcclxuICAgICAgICB0aGlzLm1vZGVsID0gdGhpcy5Gb3JtYXREYXRlTW9kZWwobW9tZW50KHRoaXMubW9kZWwpLmVuZE9mKFwiZGF5XCIpLnRvSVNPU3RyaW5nKCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmZpbHRlcigpLnZhbHVlID0gdGhpcy5tb2RlbDtcclxuICAgIHRoaXMuZmlsdGVyLnNldCh0aGlzLmZpbHRlcigpKTtcclxuICAgIHRoaXMuY2hhbmdlRW1pdHRlci5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBGb3JtYXREYXRlTW9kZWwobW9kZWw6IHN0cmluZyk6IHN0cmluZ3tcclxuICAgIHJldHVybiBtb21lbnQobW9kZWwpLmZvcm1hdChcIllZWVktTU0tRERUSEg6bW06c3NcIik7XHJcbiAgfVxyXG59XHJcbiIsIkBpZihfY29uZmlndXJhdGlvbil7XHJcbiAgQHN3aXRjaCAodHlwZSkge1xyXG4gICAgQGNhc2UgKCdTdHJpbmcnKSB7XHJcbiAgICAgIDxpbnB1dC1zdHJpbmcgWyhuZ01vZGVsKV09XCJtb2RlbFwiIFtsYWJlbF09XCJsYWJlbFwiIChibHVyKT1cIkNoYW5nZSgpXCI+PC9pbnB1dC1zdHJpbmc+XHJcbiAgICB9XHJcbiAgICBAY2FzZSAoJ051bWJlcicpIHtcclxuICAgICAgPGlucHV0LW51bWJlciAoY2hhbmdlKT1cIkNoYW5nZSgpXCIgWyhuZ01vZGVsKV09XCJtb2RlbFwiIFtsYWJlbF09XCJsYWJlbFwiIFtjb25maWd1cmF0aW9uXT1cIl9jb25maWd1cmF0aW9uXCI+PC9pbnB1dC1udW1iZXI+XHJcbiAgICB9XHJcbiAgICBAY2FzZSAoJ0RlY2ltYWwnKSB7XHJcbiAgICAgIDxpbnB1dC1kZWNpbWFsIChjaGFuZ2UpPVwiQ2hhbmdlKClcIiBbKG5nTW9kZWwpXT1cIm1vZGVsXCIgW2xhYmVsXT1cImxhYmVsXCIgW2NvbmZpZ3VyYXRpb25dPVwiX2NvbmZpZ3VyYXRpb25cIj48L2lucHV0LWRlY2ltYWw+XHJcbiAgICB9XHJcbiAgICBAY2FzZSAoJ0N1cnJlbmN5Jykge1xyXG4gICAgICA8aW5wdXQtY3VycmVuY3kgKGNoYW5nZSk9XCJDaGFuZ2UoKVwiIFsobmdNb2RlbCldPVwibW9kZWxcIiBbbGFiZWxdPVwibGFiZWxcIiBbY29uZmlndXJhdGlvbl09XCJfY29uZmlndXJhdGlvblwiPjwvaW5wdXQtY3VycmVuY3k+XHJcbiAgICB9XHJcbiAgICBAY2FzZSAoJ1NlbGVjdCcpIHtcclxuICAgICAgPGlucHV0LXNlbGVjdCAoY2hhbmdlKT1cIkNoYW5nZSgpXCIgWyhuZ01vZGVsKV09XCJtb2RlbFwiIGNsYXNzPVwidGgtc2VsZWN0XCIgW2xhYmVsXT1cImxhYmVsXCIgW2NvbmZpZ3VyYXRpb25dPVwiX2NvbmZpZ3VyYXRpb25cIj48L2lucHV0LXNlbGVjdD5cclxuICAgIH1cclxuICAgIEBjYXNlICgnVGV4dEFyZWEnKSB7XHJcbiAgICAgIDxpbnB1dC1zdHJpbmcgKGNoYW5nZSk9XCJDaGFuZ2UoKVwiIFsobmdNb2RlbCldPVwibW9kZWxcIiBjbGFzcz1cInRoLXNlbGVjdFwiIFtsYWJlbF09XCJsYWJlbFwiPjwvaW5wdXQtc3RyaW5nPlxyXG4gICAgfVxyXG4gICAgQGNhc2UgKCdCb29sJykge1xyXG4gICAgICA8aW5wdXQtc2VsZWN0IChjaGFuZ2UpPVwiQ2hhbmdlKClcIiBbKG5nTW9kZWwpXT1cIm1vZGVsXCIgY2xhc3M9XCJ0aC1zZWxlY3RcIiBbbGFiZWxdPVwibGFiZWxcIiBwbGFjZWhvbGRlcj1cIlwiIFtjb25maWd1cmF0aW9uXT1cIl9jb25maWd1cmF0aW9uXCI+PC9pbnB1dC1zZWxlY3Q+XHJcbiAgICB9XHJcbiAgICBAY2FzZSAoJ0RhdGUnKSB7XHJcbiAgICAgIDxpbnB1dC1kYXRlIChjaGFuZ2UpPVwiQ2hhbmdlKClcIiBbKG5nTW9kZWwpXT1cIm1vZGVsXCIgW2xhYmVsXT1cImxhYmVsXCIgW2NvbmZpZ3VyYXRpb25dPVwiX2NvbmZpZ3VyYXRpb25cIj48L2lucHV0LWRhdGU+XHJcbiAgICB9XHJcbiAgICBAY2FzZSAoJ0RhdGVUaW1lJykge1xyXG4gICAgICA8aW5wdXQtZGF0ZS10aW1lIChjaGFuZ2UpPVwiQ2hhbmdlKClcIiBbKG5nTW9kZWwpXT1cIm1vZGVsXCIgW2xhYmVsXT1cImxhYmVsXCIgW2NvbmZpZ3VyYXRpb25dPVwiX2NvbmZpZ3VyYXRpb25cIj48L2lucHV0LWRhdGUtdGltZT5cclxuICAgIH1cclxuICAgIEBjYXNlIChcIkNlcFwiKSB7XHJcbiAgICAgIDxpbnB1dC1jZXAgKGNoYW5nZSk9XCJDaGFuZ2UoKVwiIFsobmdNb2RlbCldPVwibW9kZWxcIiBbbGFiZWxdPVwibGFiZWxcIj48L2lucHV0LWNlcD5cclxuICAgIH1cclxuICAgIEBjYXNlIChcIkNwZlwiKSB7XHJcbiAgICAgIDxpbnB1dC1jcGYgKGNoYW5nZSk9XCJDaGFuZ2UoKVwiIFsobmdNb2RlbCldPVwibW9kZWxcIiBbbGFiZWxdPVwibGFiZWxcIiBbY29uZmlndXJhdGlvbl09XCJfY29uZmlndXJhdGlvblwiPjwvaW5wdXQtY3BmPlxyXG4gICAgfVxyXG4gICAgQGNhc2UgKFwiQ25walwiKSB7XHJcbiAgICAgIDxpbnB1dC1jbnBqIChjaGFuZ2UpPVwiQ2hhbmdlKClcIiBbKG5nTW9kZWwpXT1cIm1vZGVsXCIgW2xhYmVsXT1cImxhYmVsXCIgW2NvbmZpZ3VyYXRpb25dPVwiX2NvbmZpZ3VyYXRpb25cIj48L2lucHV0LWNucGo+XHJcbiAgICB9XHJcbiAgICBAY2FzZSAoXCJDcGZDbnBqXCIpIHtcclxuICAgICAgPGlucHV0LWNwZi1jbnBqIChjaGFuZ2UpPVwiQ2hhbmdlKClcIiBbKG5nTW9kZWwpXT1cIm1vZGVsXCIgW2xhYmVsXT1cImxhYmVsXCIgW2NvbmZpZ3VyYXRpb25dPVwiX2NvbmZpZ3VyYXRpb25cIj48L2lucHV0LWNwZi1jbnBqPlxyXG4gICAgfVxyXG4gIH1cclxufSJdfQ==
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { Component } from '@angular/core';
|
|
3
|
+
import { RouterLink } from '@angular/router';
|
|
4
|
+
import { IonicModule } from '@ionic/angular';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@ionic/angular";
|
|
7
|
+
export class Forbidden403Component {
|
|
8
|
+
constructor() { }
|
|
9
|
+
ngOnInit() { }
|
|
10
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: Forbidden403Component, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: Forbidden403Component, isStandalone: true, selector: "forbidden-403", ngImport: i0, template: "<div class=\"bg-white size-full\">\r\n <div class=\"relative flex flex-col items-center justify-center min-h-screen overflow-hidden\">\r\n <div class=\"absolute inset-0 w-full h-full bg-gradient-to-br from-red-500 to-red-900 animate-gradient-fade\"></div>\r\n \r\n <ion-card class=\"m-0 max-w-md\">\r\n <ion-card-content class=\"size-full bg-light/10 p-8 flex flex-col items-center justify-center text-center space-y-6\">\r\n <div class=\"p-3 rounded-full relative translucid-border\">\r\n <div class=\"size-12 flex items-center justify-center\">\r\n <ion-icon class=\"text-5xl text-white/70\" name=\"shield-outline\"></ion-icon>\r\n </div>\r\n \r\n \r\n <div class=\"absolute -inset-1 rounded-full bg-gradient-to-r from-rose-400 to-pink-500 opacity-25 blur-sm\"></div>\r\n </div>\r\n \r\n <ion-text class=\"text-4xl font-bold tracking-tight text-white/70\">\r\n Acesso Negado\r\n </ion-text>\r\n \r\n <ion-text color=\"light\" class=\"text-white/70\">\r\n Voc\u00EA n\u00E3o tem permiss\u00E3o para acessar este recurso. Por favor, entre em contato com o administrador se acreditar que isso \u00E9 um erro.\r\n </ion-text>\r\n \r\n <div class=\"flex flex-col sm:flex-row gap-4 mt-4\">\r\n <ion-button [routerLink]=\"['/']\" color=\"danger\" class=\"text-red-600 px-4 py-2 rounded-md font-medium\">\r\n <ion-icon name=\"chevron-back\" slot=\"start\"></ion-icon>\r\n Retornar a navega\u00E7\u00E3o\r\n </ion-button>\r\n </div>\r\n \r\n </ion-card-content>\r\n </ion-card>\r\n </div>\r\n</div>\r\n ", styles: ["@keyframes gradientFade{0%{background-position:0% 50%;opacity:1}50%{background-position:100% 50%;opacity:.7}to{background-position:0% 50%;opacity:1}}.animate-gradient-fade{background-size:200% 200%;animation:gradientFade 8s ease 1}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i1.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i1.RouterLinkDelegate, selector: ":not(a):not(area)[routerLink]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
|
|
12
|
+
}
|
|
13
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: Forbidden403Component, decorators: [{
|
|
14
|
+
type: Component,
|
|
15
|
+
args: [{ selector: 'forbidden-403', standalone: true, imports: [CommonModule, IonicModule, RouterLink], template: "<div class=\"bg-white size-full\">\r\n <div class=\"relative flex flex-col items-center justify-center min-h-screen overflow-hidden\">\r\n <div class=\"absolute inset-0 w-full h-full bg-gradient-to-br from-red-500 to-red-900 animate-gradient-fade\"></div>\r\n \r\n <ion-card class=\"m-0 max-w-md\">\r\n <ion-card-content class=\"size-full bg-light/10 p-8 flex flex-col items-center justify-center text-center space-y-6\">\r\n <div class=\"p-3 rounded-full relative translucid-border\">\r\n <div class=\"size-12 flex items-center justify-center\">\r\n <ion-icon class=\"text-5xl text-white/70\" name=\"shield-outline\"></ion-icon>\r\n </div>\r\n \r\n \r\n <div class=\"absolute -inset-1 rounded-full bg-gradient-to-r from-rose-400 to-pink-500 opacity-25 blur-sm\"></div>\r\n </div>\r\n \r\n <ion-text class=\"text-4xl font-bold tracking-tight text-white/70\">\r\n Acesso Negado\r\n </ion-text>\r\n \r\n <ion-text color=\"light\" class=\"text-white/70\">\r\n Voc\u00EA n\u00E3o tem permiss\u00E3o para acessar este recurso. Por favor, entre em contato com o administrador se acreditar que isso \u00E9 um erro.\r\n </ion-text>\r\n \r\n <div class=\"flex flex-col sm:flex-row gap-4 mt-4\">\r\n <ion-button [routerLink]=\"['/']\" color=\"danger\" class=\"text-red-600 px-4 py-2 rounded-md font-medium\">\r\n <ion-icon name=\"chevron-back\" slot=\"start\"></ion-icon>\r\n Retornar a navega\u00E7\u00E3o\r\n </ion-button>\r\n </div>\r\n \r\n </ion-card-content>\r\n </ion-card>\r\n </div>\r\n</div>\r\n ", styles: ["@keyframes gradientFade{0%{background-position:0% 50%;opacity:1}50%{background-position:100% 50%;opacity:.7}to{background-position:0% 50%;opacity:1}}.animate-gradient-fade{background-size:200% 200%;animation:gradientFade 8s ease 1}\n"] }]
|
|
16
|
+
}], ctorParameters: () => [] });
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yYmlkZGVuLTQwMy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvaHR0cC1yZXNwb25zZXMtcGFnZXMvZm9yYmlkZGVuLTQwMy9mb3JiaWRkZW4tNDAzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9odHRwLXJlc3BvbnNlcy1wYWdlcy9mb3JiaWRkZW4tNDAzL2ZvcmJpZGRlbi00MDMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBUzdDLE1BQU0sT0FBTyxxQkFBcUI7SUFFaEMsZ0JBQWdCLENBQUM7SUFFakIsUUFBUSxLQUFJLENBQUM7K0dBSkYscUJBQXFCO21HQUFyQixxQkFBcUIseUVDWmxDLG1xREFrQ0Usa1NEMUJVLFlBQVksOEJBQUUsV0FBVyxnNkJBQUUsVUFBVTs7NEZBSXBDLHFCQUFxQjtrQkFQakMsU0FBUzsrQkFDRSxlQUFlLGNBQ2IsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXJMaW5rIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgSW9uaWNNb2R1bGUgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2ZvcmJpZGRlbi00MDMnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSW9uaWNNb2R1bGUsIFJvdXRlckxpbmtdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JiaWRkZW4tNDAzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9mb3JiaWRkZW4tNDAzLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JiaWRkZW40MDNDb21wb25lbnQgIGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7fVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiYmctd2hpdGUgc2l6ZS1mdWxsXCI+XHJcbiAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1pbi1oLXNjcmVlbiBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIHctZnVsbCBoLWZ1bGwgYmctZ3JhZGllbnQtdG8tYnIgZnJvbS1yZWQtNTAwIHRvLXJlZC05MDAgYW5pbWF0ZS1ncmFkaWVudC1mYWRlXCI+PC9kaXY+XHJcbiAgXHJcbiAgICA8aW9uLWNhcmQgY2xhc3M9XCJtLTAgbWF4LXctbWRcIj5cclxuICAgICAgPGlvbi1jYXJkLWNvbnRlbnQgY2xhc3M9XCJzaXplLWZ1bGwgYmctbGlnaHQvMTAgcC04IGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtY2VudGVyIHNwYWNlLXktNlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLTMgcm91bmRlZC1mdWxsIHJlbGF0aXZlIHRyYW5zbHVjaWQtYm9yZGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2l6ZS0xMiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8aW9uLWljb24gY2xhc3M9XCJ0ZXh0LTV4bCB0ZXh0LXdoaXRlLzcwXCIgbmFtZT1cInNoaWVsZC1vdXRsaW5lXCI+PC9pb24taWNvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICBcclxuICAgICAgXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgLWluc2V0LTEgcm91bmRlZC1mdWxsIGJnLWdyYWRpZW50LXRvLXIgZnJvbS1yb3NlLTQwMCB0by1waW5rLTUwMCBvcGFjaXR5LTI1IGJsdXItc21cIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgXHJcbiAgICAgICAgPGlvbi10ZXh0IGNsYXNzPVwidGV4dC00eGwgZm9udC1ib2xkIHRyYWNraW5nLXRpZ2h0IHRleHQtd2hpdGUvNzBcIj5cclxuICAgICAgICAgIEFjZXNzbyBOZWdhZG9cclxuICAgICAgICA8L2lvbi10ZXh0PlxyXG4gICAgICBcclxuICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJsaWdodFwiIGNsYXNzPVwidGV4dC13aGl0ZS83MFwiPlxyXG4gICAgICAgICAgVm9jw6ogbsOjbyB0ZW0gcGVybWlzc8OjbyBwYXJhIGFjZXNzYXIgZXN0ZSByZWN1cnNvLiBQb3IgZmF2b3IsIGVudHJlIGVtIGNvbnRhdG8gY29tIG8gYWRtaW5pc3RyYWRvciBzZSBhY3JlZGl0YXIgcXVlIGlzc28gw6kgdW0gZXJyby5cclxuICAgICAgICA8L2lvbi10ZXh0PlxyXG4gICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBzbTpmbGV4LXJvdyBnYXAtNCBtdC00XCI+XHJcbiAgICAgICAgICA8aW9uLWJ1dHRvbiBbcm91dGVyTGlua109XCJbJy8nXVwiIGNvbG9yPVwiZGFuZ2VyXCIgY2xhc3M9XCJ0ZXh0LXJlZC02MDAgcHgtNCBweS0yIHJvdW5kZWQtbWQgZm9udC1tZWRpdW1cIj5cclxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjaGV2cm9uLWJhY2tcIiBzbG90PVwic3RhcnRcIj48L2lvbi1pY29uPlxyXG4gICAgICAgICAgICBSZXRvcm5hciBhIG5hdmVnYcOnw6NvXHJcbiAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgXHJcbiAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cclxuICAgIDwvaW9uLWNhcmQ+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4gICJdfQ==
|