@sapphire-ion/framework 1.3.5 → 1.3.8
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 +212 -0
- package/esm2022/lib/components/default/default-view/abstract-view.mjs +22 -0
- package/esm2022/lib/components/default/default-view/default-view.component.mjs +76 -0
- package/esm2022/lib/components/default/default-view/header-view/header-view.component.mjs +81 -0
- package/esm2022/lib/components/default/default-view/view.mjs +198 -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 +263 -0
- package/esm2022/lib/components/inputs/input-date/input-date.configuration.mjs +11 -0
- package/esm2022/lib/components/inputs/input-decimal/input-decimal.component.mjs +276 -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 +102 -0
- package/esm2022/lib/components/inputs/input-file/input-file.component.mjs +100 -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 +376 -0
- package/esm2022/lib/components/inputs/input-select/input.select.configuration.mjs +233 -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 +20 -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 +82 -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 +188 -0
- package/esm2022/lib/pipes/secure.pipe.mjs +42 -0
- package/esm2022/lib/services/auth.service.mjs +146 -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/navigation-context.service.mjs +111 -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 +184 -0
- package/esm2022/lib/services/web/storage.service.mjs +186 -0
- package/esm2022/public-api.mjs +5 -0
- package/esm2022/sapphire-ion-framework.mjs +5 -0
- package/fesm2022/sapphire-ion-framework.mjs +12491 -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 +40 -0
- package/lib/components/default/default-view/header-view/header-view.component.d.ts +36 -0
- package/lib/components/default/default-view/view.d.ts +67 -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 +61 -0
- package/lib/components/inputs/input-date/input-date.configuration.d.ts +11 -0
- package/lib/components/inputs/input-decimal/input-decimal.component.d.ts +27 -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 +40 -0
- package/lib/components/inputs/input-file/input-file.component.d.ts +28 -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 +127 -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 +15 -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 +17 -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 +118 -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/navigation-context.service.d.ts +14 -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 -44
- package/public-api.d.ts +1 -0
- 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 -205
- 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 -56
- 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 -62
- package/src/lib/components/default/default-view/view.ts +0 -195
- 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 -89
- package/src/lib/components/inputs/input-date/input-date.component.ts +0 -269
- package/src/lib/components/inputs/input-date/input-date.configuration.ts +0 -8
- package/src/lib/components/inputs/input-decimal/input-decimal.component.html +0 -32
- package/src/lib/components/inputs/input-decimal/input-decimal.component.ts +0 -283
- 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 -91
- package/src/lib/components/inputs/input-file/input-file.component.html +0 -56
- package/src/lib/components/inputs/input-file/input-file.component.ts +0 -97
- 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 -366
- package/src/lib/components/inputs/input-select/input.select.configuration.ts +0 -300
- 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 -20
- 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 -75
- 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 -191
- package/src/lib/pipes/secure.pipe.ts +0 -39
- package/src/lib/services/auth.service.ts +0 -150
- 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/navigation-context.service.ts +0 -121
- 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 -206
- package/src/lib/services/web/storage.service.ts +0 -210
- package/src/public-api.ts +0 -5
- package/tailwind.config.js +0 -27
- package/tsconfig.lib.json +0 -31
- package/tsconfig.lib.prod.json +0 -23
- package/tsconfig.spec.json +0 -27
- /package/{src/lib → themes}/compiled-styles.scss +0 -0
- /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,12 @@
|
|
|
1
|
+
import { forwardRef } from "@angular/core";
|
|
2
|
+
import { NG_VALUE_ACCESSOR } from "@angular/forms";
|
|
3
|
+
export class InputProviderFactory {
|
|
4
|
+
static GetProviders(component) {
|
|
5
|
+
return [{
|
|
6
|
+
provide: NG_VALUE_ACCESSOR,
|
|
7
|
+
useExisting: forwardRef(() => component),
|
|
8
|
+
multi: true,
|
|
9
|
+
}];
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtcHJvdmlkZXItZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9pbnB1dHMvaW5wdXQtcHJvdmlkZXItZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE1BQU0sT0FBTyxvQkFBb0I7SUFDL0IsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFrQjtRQUNwQyxPQUFPLENBQUU7Z0JBQ0wsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7Z0JBQ3hDLEtBQUssRUFBRSxJQUFJO2FBQ2QsQ0FBRSxDQUFBO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9yd2FyZFJlZiwgUHJvdmlkZXIgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIElucHV0UHJvdmlkZXJGYWN0b3J5e1xyXG4gIHN0YXRpYyBHZXRQcm92aWRlcnMoY29tcG9uZW50OiB1bmtub3duKTogUHJvdmlkZXJbXSB7XHJcbiAgICByZXR1cm4gWyB7XHJcbiAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gY29tcG9uZW50KSxcclxuICAgICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0gXVxyXG4gIH1cclxufSJdfQ==
|
package/esm2022/lib/components/inputs/input-select/directives/sion-label-template.directive.mjs
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Directive, TemplateRef } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class SIonLabelTemplateDirective {
|
|
4
|
+
constructor(template) {
|
|
5
|
+
this.template = template;
|
|
6
|
+
}
|
|
7
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SIonLabelTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
8
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: SIonLabelTemplateDirective, selector: "[sionLabelTemplate]", ngImport: i0 }); }
|
|
9
|
+
}
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SIonLabelTemplateDirective, decorators: [{
|
|
11
|
+
type: Directive,
|
|
12
|
+
args: [{
|
|
13
|
+
selector: '[sionLabelTemplate]',
|
|
14
|
+
}]
|
|
15
|
+
}], ctorParameters: () => [{ type: i0.TemplateRef }] });
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lvbi1sYWJlbC10ZW1wbGF0ZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0LXNlbGVjdC9kaXJlY3RpdmVzL3Npb24tbGFiZWwtdGVtcGxhdGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUt2RCxNQUFNLE9BQU8sMEJBQTBCO0lBQ3JDLFlBQW1CLFFBQThDO1FBQTlDLGFBQVEsR0FBUixRQUFRLENBQXNDO0lBQUcsQ0FBQzsrR0FEMUQsMEJBQTBCO21HQUExQiwwQkFBMEI7OzRGQUExQiwwQkFBMEI7a0JBSHRDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtpQkFDaEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tzaW9uTGFiZWxUZW1wbGF0ZV0nLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU0lvbkxhYmVsVGVtcGxhdGVEaXJlY3RpdmU8VD4ge1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8TGFiZWxUZW1wbGF0ZUNvbnRleHQ8VD4+KSB7fVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIExhYmVsVGVtcGxhdGVDb250ZXh0PFQ+IHtcclxuICAvKipcclxuICAgKiBPIHZhbG9yIGRvIGl0ZW0gdmlhIGJpbmRMYWJlbCBxdWUgZXN0w6Egc2VuZG8gcmVuZGVyaXphZG8uXHJcbiAgICovXHJcbiAgJGltcGxpY2l0OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogTyBpdGVtIHNlbGVjaW9uYWRvIG5vIGNvbXBvbmVudGUgZGUgaW5wdXQgc2VsZWN0LlxyXG4gICAqL1xyXG4gIGl0ZW06IFQ7XHJcbn0iXX0=
|
package/esm2022/lib/components/inputs/input-select/directives/sion-option-template.directive.mjs
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Directive, TemplateRef } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class SIonOptionTemplateDirective {
|
|
4
|
+
constructor(template) {
|
|
5
|
+
this.template = template;
|
|
6
|
+
}
|
|
7
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SIonOptionTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
8
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: SIonOptionTemplateDirective, selector: "[sionOptionTemplate]", ngImport: i0 }); }
|
|
9
|
+
}
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SIonOptionTemplateDirective, decorators: [{
|
|
11
|
+
type: Directive,
|
|
12
|
+
args: [{
|
|
13
|
+
selector: '[sionOptionTemplate]',
|
|
14
|
+
}]
|
|
15
|
+
}], ctorParameters: () => [{ type: i0.TemplateRef }] });
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lvbi1vcHRpb24tdGVtcGxhdGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2lucHV0cy9pbnB1dC1zZWxlY3QvZGlyZWN0aXZlcy9zaW9uLW9wdGlvbi10ZW1wbGF0ZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBS3ZELE1BQU0sT0FBTywyQkFBMkI7SUFDdEMsWUFBbUIsUUFBK0M7UUFBL0MsYUFBUSxHQUFSLFFBQVEsQ0FBdUM7SUFBRyxDQUFDOytHQUQzRCwyQkFBMkI7bUdBQTNCLDJCQUEyQjs7NEZBQTNCLDJCQUEyQjtrQkFIdkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsc0JBQXNCO2lCQUNqQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW3Npb25PcHRpb25UZW1wbGF0ZV0nLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU0lvbk9wdGlvblRlbXBsYXRlRGlyZWN0aXZlPFQ+IHtcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPE9wdGlvblRlbXBsYXRlQ29udGV4dDxUPj4pIHt9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvblRlbXBsYXRlQ29udGV4dDxUPiB7XHJcbiAgLyoqXHJcbiAgICogTyBpdGVtIG5hcXVlbGEgb3DDp8Ojb1xyXG4gICAqL1xyXG4gIGl0ZW06IFQ7XHJcbn0iXX0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Directive, TemplateRef } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class SIonPlaceholderTemplateDirective {
|
|
4
|
+
constructor(template) {
|
|
5
|
+
this.template = template;
|
|
6
|
+
}
|
|
7
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SIonPlaceholderTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
8
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: SIonPlaceholderTemplateDirective, selector: "[sionPlaceholderTemplate]", ngImport: i0 }); }
|
|
9
|
+
}
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SIonPlaceholderTemplateDirective, decorators: [{
|
|
11
|
+
type: Directive,
|
|
12
|
+
args: [{
|
|
13
|
+
selector: '[sionPlaceholderTemplate]',
|
|
14
|
+
}]
|
|
15
|
+
}], ctorParameters: () => [{ type: i0.TemplateRef }] });
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lvbi1wbGFjZWhvbGRlci10ZW1wbGF0ZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0LXNlbGVjdC9kaXJlY3RpdmVzL3Npb24tcGxhY2Vob2xkZXItdGVtcGxhdGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUt2RCxNQUFNLE9BQU8sZ0NBQWdDO0lBQzNDLFlBQW1CLFFBQWlEO1FBQWpELGFBQVEsR0FBUixRQUFRLENBQXlDO0lBQUcsQ0FBQzsrR0FEN0QsZ0NBQWdDO21HQUFoQyxnQ0FBZ0M7OzRGQUFoQyxnQ0FBZ0M7a0JBSDVDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDJCQUEyQjtpQkFDdEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tzaW9uUGxhY2Vob2xkZXJUZW1wbGF0ZV0nLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU0lvblBsYWNlaG9sZGVyVGVtcGxhdGVEaXJlY3RpdmUge1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8UGxhY2Vob2xkZXJUZW1wbGF0ZUNvbnRleHQ+KSB7fVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBsYWNlaG9sZGVyVGVtcGxhdGVDb250ZXh0IHtcclxuICAvKipcclxuICAgKiBQbGFjZWhvbGRlciBuYSBjb25maWd1cmHDp8OjbyBkbyBjb21wb25lbnRlIGRlIGlucHV0IHNlbGVjdC5cclxuICAgKi9cclxuICAkaW1wbGljaXQ6IHN0cmluZztcclxuICAvKipcclxuICAgKiBQbGFjZWhvbGRlciBuYSBjb25maWd1cmHDp8OjbyBkbyBjb21wb25lbnRlIGRlIGlucHV0IHNlbGVjdC5cclxuICAgKi9cclxuICBwbGFjZWhvbGRlcjogc3RyaW5nO1xyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, ContentChild, effect, ElementRef, forwardRef, HostListener, input, model, signal, TemplateRef, ViewChild, } from '@angular/core';
|
|
2
|
+
import { FormControl } from '@angular/forms';
|
|
3
|
+
import { IonActionSheet, IonAlert, IonContent, IonModal } from '@ionic/angular';
|
|
4
|
+
import { debounceTime, distinctUntilChanged, Subject, takeUntil } from 'rxjs';
|
|
5
|
+
import { BindLabelFactory, BindValueFactory, InputSelectConfiguration, SelectInterfaces } from './input.select.configuration';
|
|
6
|
+
import { SIonPopoverComponent } from '../../popover/sion-popover/sion-popover.component';
|
|
7
|
+
import { InputProviderFactory } from '../input-provider-factory';
|
|
8
|
+
import { CustomInput } from '../custom-input';
|
|
9
|
+
import { Search, Timeout } from '../../../services/utils.service';
|
|
10
|
+
import { SIonPlaceholderTemplateDirective } from './directives/sion-placeholder-template.directive';
|
|
11
|
+
import { SIonOptionTemplateDirective } from './directives/sion-option-template.directive';
|
|
12
|
+
import { SIonLabelTemplateDirective } from './directives/sion-label-template.directive';
|
|
13
|
+
import { HttpServiceAtivo } from '../../../services/web/http.ativo.service';
|
|
14
|
+
import * as i0 from "@angular/core";
|
|
15
|
+
import * as i1 from "@ionic/angular";
|
|
16
|
+
import * as i2 from "@angular/common";
|
|
17
|
+
import * as i3 from "@angular/forms";
|
|
18
|
+
import * as i4 from "../../popover/sion-popover/sion-popover.component";
|
|
19
|
+
export class InputSelectComponent extends CustomInput {
|
|
20
|
+
SetCurrentItemLabel() {
|
|
21
|
+
if (this.configuration().multiple) {
|
|
22
|
+
this.currentLabel = this.lstOptionsItemValue().filter(p => p.selected).map(p => p.label).join(', ');
|
|
23
|
+
this.currentItems = this.lstOptionsItemValue().filter(p => p.selected);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
this.currentLabel = this.lstOptionsItemValue().find(p => p.selected)?.label;
|
|
27
|
+
this.currentItems = this.lstOptionsItemValue().find(p => p.selected);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
onResize(event) {
|
|
31
|
+
this.windowSize.set(window.innerWidth);
|
|
32
|
+
this.SetInterface();
|
|
33
|
+
}
|
|
34
|
+
SetInterface() {
|
|
35
|
+
var _interface = this.configuration().interface;
|
|
36
|
+
if (_interface == SelectInterfaces.Dynamic) {
|
|
37
|
+
_interface = isPortrait() ? SelectInterfaces.ActionSheet : SelectInterfaces.Popover;
|
|
38
|
+
}
|
|
39
|
+
this.interface.set(_interface);
|
|
40
|
+
}
|
|
41
|
+
AddPage(event) {
|
|
42
|
+
this.infiniteScrollPage.set(this.infiniteScrollPage() + 1);
|
|
43
|
+
event.target.complete();
|
|
44
|
+
}
|
|
45
|
+
UpdateLstOptions(search) {
|
|
46
|
+
// Update the search
|
|
47
|
+
if (search) {
|
|
48
|
+
this.lstOptions = Search(this.lstOptionsItemValue(), search, (item) => item.label);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
this.lstOptions = this.lstOptionsItemValue();
|
|
52
|
+
}
|
|
53
|
+
if (this.configuration().useInfiniteScroll) {
|
|
54
|
+
this.lstOptions = this.lstOptions.slice(0, this.infiniteScrollPage() * 25);
|
|
55
|
+
}
|
|
56
|
+
if (this.interface() == SelectInterfaces.ActionSheet) {
|
|
57
|
+
this.lstOptionsActionSheet = [...this.lstOptions.map(p => {
|
|
58
|
+
return {
|
|
59
|
+
text: p.label,
|
|
60
|
+
handler: () => { this.Select(p); },
|
|
61
|
+
role: p.selected ? 'selected' : '',
|
|
62
|
+
};
|
|
63
|
+
}),
|
|
64
|
+
{
|
|
65
|
+
text: 'Cancelar',
|
|
66
|
+
role: 'cancel',
|
|
67
|
+
data: { action: 'cancel', },
|
|
68
|
+
handler() {
|
|
69
|
+
this.renderInterface = false;
|
|
70
|
+
},
|
|
71
|
+
}
|
|
72
|
+
];
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
UpdateSelected() {
|
|
76
|
+
if (this.configuration().multiple) {
|
|
77
|
+
const arr = this.value() || [];
|
|
78
|
+
for (const item of this.lstOptions) {
|
|
79
|
+
item.selected = arr.find(p => p == item.value) != undefined;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
this.lstOptions.forEach((item) => { item.selected = this.value() == item.value; });
|
|
84
|
+
}
|
|
85
|
+
this.SetCurrentItemLabel();
|
|
86
|
+
}
|
|
87
|
+
setFocus(event) {
|
|
88
|
+
if (this.configuration().loader.error || this.loadingFromLoader || this.loading() || this.disabled()) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
this.Present(event);
|
|
92
|
+
}
|
|
93
|
+
constructor(cdr) {
|
|
94
|
+
super();
|
|
95
|
+
this.cdr = cdr;
|
|
96
|
+
this.SelectInterfaces = SelectInterfaces;
|
|
97
|
+
/** Items disponíveis no select */
|
|
98
|
+
this.items = model([]);
|
|
99
|
+
/** Configuração do select */
|
|
100
|
+
this.configuration = input(new InputSelectConfiguration());
|
|
101
|
+
this.loadingFromLoader = false;
|
|
102
|
+
this.currentLabel = undefined;
|
|
103
|
+
this.currentItems = undefined;
|
|
104
|
+
this.lstOptionsItemValue = computed(() => {
|
|
105
|
+
const bindLabel = BindLabelFactory(this.configuration());
|
|
106
|
+
const bindValue = BindValueFactory(this.configuration());
|
|
107
|
+
return this.items().filter(p => (this.somenteAtivos() && this.hasAtivo()) ? p.ativo : true).map(p => {
|
|
108
|
+
const item = new ItemValue();
|
|
109
|
+
item.label = bindLabel(p);
|
|
110
|
+
item.value = bindValue(p);
|
|
111
|
+
item.item = p;
|
|
112
|
+
item.selected = this.value() == item.value;
|
|
113
|
+
item.disabled = p.disabled || false || (this.hasAtivo() && p.ativo == false);
|
|
114
|
+
return item;
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
this.windowSize = signal(window.innerWidth);
|
|
118
|
+
this.interface = signal(undefined);
|
|
119
|
+
this.lstOptions = [];
|
|
120
|
+
this.lstOptionsAlert = [];
|
|
121
|
+
this.lstButtonsAlert = [];
|
|
122
|
+
this.lstOptionsActionSheet = [];
|
|
123
|
+
this.infiniteScrollPage = signal(1);
|
|
124
|
+
this.hasAtivo = computed(() => {
|
|
125
|
+
return (this.configuration().hasAtivo == true ||
|
|
126
|
+
this.configuration().loadFromService instanceof HttpServiceAtivo);
|
|
127
|
+
});
|
|
128
|
+
this.somenteAtivos = signal(true);
|
|
129
|
+
this.selectedIndex = undefined;
|
|
130
|
+
this.searchBarControl = new FormControl('');
|
|
131
|
+
this.searchValue = signal("");
|
|
132
|
+
this.searchBarSubscription = null;
|
|
133
|
+
this.destroy$ = new Subject();
|
|
134
|
+
this.destroyed = false;
|
|
135
|
+
this.floatingVisible = false;
|
|
136
|
+
this.renderInterface = false;
|
|
137
|
+
effect(() => {
|
|
138
|
+
this.cdr.markForCheck();
|
|
139
|
+
this.UpdateLstOptions(this.searchValue());
|
|
140
|
+
this.UpdateSelected();
|
|
141
|
+
}, { allowSignalWrites: true });
|
|
142
|
+
}
|
|
143
|
+
async ngOnInit() {
|
|
144
|
+
await super.ngOnInit();
|
|
145
|
+
this.SetInterface();
|
|
146
|
+
this.configuration().loader.AddComponent(this);
|
|
147
|
+
this.configuration().loader.Refresh(this.items());
|
|
148
|
+
}
|
|
149
|
+
HandleKeyboardEvent(event) {
|
|
150
|
+
// [ Popover ]
|
|
151
|
+
if (this.selectContent?.nativeElement?.contains(event.target)) {
|
|
152
|
+
if (event.key == "Tab") {
|
|
153
|
+
event.preventDefault();
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
else if (event.key == "Escape") {
|
|
157
|
+
event.preventDefault();
|
|
158
|
+
event.stopPropagation();
|
|
159
|
+
this.Dismiss();
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
// [ inputContainer ]
|
|
164
|
+
if (this.inputContainer?.nativeElement?.contains(event.target)) {
|
|
165
|
+
if (["ArrowDown", "ArrowUp"].includes(event.key)) {
|
|
166
|
+
event.preventDefault();
|
|
167
|
+
this.Present(event);
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// [ inputSelectSearchBar ]
|
|
172
|
+
if (this.inputSearchBar?.nativeElement == event.target) {
|
|
173
|
+
if (event.key == "Enter") {
|
|
174
|
+
event.preventDefault();
|
|
175
|
+
// If the select is not ativo ignore the selected item
|
|
176
|
+
const item = this.lstOptions[this.selectedIndex];
|
|
177
|
+
if (this.hasAtivo() && !item.item.ativo) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
this.Select(item);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
else if (event.key == "ArrowDown") {
|
|
184
|
+
if (this.selectedIndex == undefined) {
|
|
185
|
+
this.selectedIndex = 0;
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
event.preventDefault();
|
|
189
|
+
this.selectedIndex = (this.selectedIndex < this.lstOptions.length - 1 ? this.selectedIndex + 1 : this.selectedIndex);
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
else if (event.key == "ArrowUp") {
|
|
193
|
+
if (this.selectedIndex == undefined) {
|
|
194
|
+
this.selectedIndex = 0;
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
event.preventDefault();
|
|
198
|
+
this.selectedIndex = (this.selectedIndex > 0 ? this.selectedIndex - 1 : this.selectedIndex);
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
ngAfterViewInit() {
|
|
204
|
+
const observable = this.searchBarControl.valueChanges.pipe(takeUntil(this.destroy$), distinctUntilChanged(), debounceTime(200));
|
|
205
|
+
//OnSearchChange
|
|
206
|
+
this.searchBarSubscription = observable.subscribe(async (value) => {
|
|
207
|
+
this.selectedIndex = undefined;
|
|
208
|
+
this.searchValue.set(value);
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
ClearSearchBar() {
|
|
212
|
+
this.destroyed = true;
|
|
213
|
+
this.destroy$.next();
|
|
214
|
+
this.destroy$.complete();
|
|
215
|
+
if (this.searchBarSubscription) {
|
|
216
|
+
this.searchBarSubscription.unsubscribe();
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
ngOnDestroy() {
|
|
220
|
+
this.ClearSearchBar();
|
|
221
|
+
}
|
|
222
|
+
writeValue(obj) {
|
|
223
|
+
this.value.set(obj);
|
|
224
|
+
this.runValidation();
|
|
225
|
+
this.UpdateSelected();
|
|
226
|
+
}
|
|
227
|
+
SetValue(obj) {
|
|
228
|
+
this.value.set(obj);
|
|
229
|
+
this.runValidation();
|
|
230
|
+
this.UpdateSelected();
|
|
231
|
+
this.propagateChange(this.value());
|
|
232
|
+
if (!this.configuration().multiple) {
|
|
233
|
+
this.Dismiss();
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
Clear(event) {
|
|
237
|
+
event.stopPropagation();
|
|
238
|
+
if (this.configuration().multiple) {
|
|
239
|
+
this.SetValue([]);
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
this.SetValue(undefined);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
Select(itemValue) {
|
|
246
|
+
const item = itemValue.value;
|
|
247
|
+
if (this.configuration().multiple) {
|
|
248
|
+
const currentValue = this.value();
|
|
249
|
+
if (Array.isArray(currentValue)) {
|
|
250
|
+
const index = currentValue.findIndex(p => p == item);
|
|
251
|
+
if (index > -1) {
|
|
252
|
+
currentValue.splice(index, 1);
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
currentValue.push(item);
|
|
256
|
+
}
|
|
257
|
+
this.SetValue([...currentValue]);
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
this.SetValue([item]);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
this.SetValue(item);
|
|
265
|
+
this.Dismiss();
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
async Present(event) {
|
|
269
|
+
this.renderInterface = true;
|
|
270
|
+
this.cdr.markForCheck();
|
|
271
|
+
await Timeout(0); //Espera a renderização da interface
|
|
272
|
+
if (this.interface() == SelectInterfaces.Modal) {
|
|
273
|
+
await this.modal.present();
|
|
274
|
+
this.inputSearchBar.nativeElement.focus();
|
|
275
|
+
}
|
|
276
|
+
else if (this.interface() == SelectInterfaces.Popover) {
|
|
277
|
+
await this.popover.present(event);
|
|
278
|
+
this.inputSearchBar.nativeElement.focus();
|
|
279
|
+
}
|
|
280
|
+
else if (this.interface() == SelectInterfaces.ActionSheet) {
|
|
281
|
+
await this.actionSheet.present();
|
|
282
|
+
this.inputSearchBar?.nativeElement?.focus();
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
async Dismiss() {
|
|
286
|
+
if (this.modal) {
|
|
287
|
+
await this.modal.dismiss();
|
|
288
|
+
}
|
|
289
|
+
if (this.popover) {
|
|
290
|
+
await this.popover.dismiss();
|
|
291
|
+
}
|
|
292
|
+
this.selectedIndex = undefined;
|
|
293
|
+
if (this.inputSelectLabel?.nativeElement) {
|
|
294
|
+
this.inputSelectLabel.nativeElement.focus();
|
|
295
|
+
}
|
|
296
|
+
if (this.configuration().useInfiniteScroll) {
|
|
297
|
+
this.infiniteScrollPage.set(1);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
OnDismiss() {
|
|
301
|
+
this.renderInterface = false;
|
|
302
|
+
this.floatingVisible = false;
|
|
303
|
+
this.searchValue.set('');
|
|
304
|
+
this.searchBarControl.setValue('');
|
|
305
|
+
}
|
|
306
|
+
OnPresent() {
|
|
307
|
+
this.floatingVisible = true;
|
|
308
|
+
}
|
|
309
|
+
isArray(obj) {
|
|
310
|
+
return Array.isArray(obj);
|
|
311
|
+
}
|
|
312
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InputSelectComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
313
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: InputSelectComponent, selector: "input-select", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, configuration: { classPropertyName: "configuration", publicName: "configuration", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { items: "itemsChange" }, host: { listeners: { "window:resize": "onResize($event)", "document:keydown": "HandleKeyboardEvent($event)" } }, providers: [
|
|
314
|
+
...InputProviderFactory.GetProviders(InputSelectComponent),
|
|
315
|
+
{ provide: CustomInput, useExisting: forwardRef(() => InputSelectComponent) },
|
|
316
|
+
], queries: [{ propertyName: "labelTemplate", first: true, predicate: SIonLabelTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "optionTemplate", first: true, predicate: SIonOptionTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "placeholderTemplate", first: true, predicate: SIonPlaceholderTemplateDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "inputContainer", first: true, predicate: ["inputContainer"], descendants: true }, { propertyName: "inputSelectLabel", first: true, predicate: ["inputSelectLabel"], descendants: true }, { propertyName: "inputSearchBar", first: true, predicate: ["inputSearchBar"], descendants: true }, { propertyName: "selectContent", first: true, predicate: ["selectContent"], descendants: true }, { propertyName: "popover", first: true, predicate: SIonPopoverComponent, descendants: true }, { propertyName: "modal", first: true, predicate: IonModal, descendants: true }, { propertyName: "alert", first: true, predicate: IonAlert, descendants: true }, { propertyName: "actionSheet", first: true, predicate: IonActionSheet, descendants: true }, { propertyName: "ionContent", first: true, predicate: ["scrollContent"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div \r\n #inputContainer\r\n class=\"input-container\" \r\n (click)=\"setFocus($event);\"\r\n [class.required]=\"required()\" \r\n [class.submitted]=\"submitted()\" \r\n [class.manual-focus]=\"floatingVisible\"\r\n [class.invalid]=\"invalid\" \r\n [class.disabled]=\"loading() || loadingFromLoader || disabled()\"\r\n [class.loading]=\"loading() || loadingFromLoader\"\r\n>\r\n <div class=\"input-label\"> \r\n <span class=\"truncate\">\r\n {{label()}} \r\n </span>\r\n </div>\r\n \r\n <div class=\"w-full truncate outline-none\" [class.pr-7]=\"!configuration().clearable\" [class.pr-10]=\"configuration().clearable\" #inputSelectLabel tabindex=\"0\">\r\n @if (!configuration().multiple && currentLabel){\r\n @if(labelTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"labelTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: currentLabel, item: currentItems.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label\"> {{currentLabel}} </span>\r\n }\r\n }\r\n @else if (configuration().multiple && isArray(currentItems) && $any(currentItems).length) {\r\n <div class=\"w-full min-h-6 overflow-hidden relative\">\r\n <div class=\"absolute left-0 top-0 overflow-x-auto flex gap-2 size-full mask-x/2\">\r\n @for (item of currentItems; track $index) {\r\n <div class=\"translucid-border rounded-lg flex items-center justify-center gap-2 pl-2\">\r\n @if(labelTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"labelTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item.label, item: item.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label\"> {{item.label}} </span>\r\n }\r\n \r\n <div class=\"h-full aspect-square flex items-center justify-center cursor-pointer\" (click)=\"Select(item); $event.stopPropagation()\">\r\n <ion-icon name=\"close\" color=\"danger\" slot=\"icon-only\"></ion-icon>\r\n </div>\r\n <!-- <ion-button class=\"m-0 h-full\" (click)=\"Select(item.value); $event.stopPropagation()\" color=\"medium\" size=\"small\" fill=\"outline\" style=\"--border-radius: .5rem\">\r\n <ion-icon name=\"close\" color=\"danger\" slot=\"icon-only\"></ion-icon>\r\n </ion-button> -->\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @else {\r\n @if(placeholderTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"placeholderTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: this.configuration().placeholder, placeholder: this.configuration().placeholder }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label !text-medium\"> {{this.configuration().placeholder}} </span>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"absolute bottom-1 flex flex-col items-center justify-center size-7\" [class.right-1]=\"!configuration().clearable\" [class.right-8]=\"configuration().clearable\">\r\n <ion-icon class=\"-mb-0.5\" name=\"chevron-up\"></ion-icon>\r\n <ion-icon class=\"-mt-0.5\" name=\"chevron-down\"></ion-icon>\r\n </div>\r\n @if(configuration().clearable){\r\n <ion-button class=\"absolute right-1 bottom-1\" (click)=\"Clear($event)\" color=\"medium\" size=\"small\" fill=\"clear\" style=\"--border-radius: .5rem\">\r\n <ion-icon name=\"close\" slot=\"icon-only\"></ion-icon>\r\n </ion-button>\r\n } \r\n\r\n <div class=\"loading-container\" [class.loading]=\"loading() || loadingFromLoader\">\r\n <ion-spinner></ion-spinner>\r\n </div>\r\n <div class=\"error-container\" (click)=\"configuration().loader.Refresh()\" [class.active]=\"configuration().loader.error && !loadingFromLoader\">\r\n <ion-icon class=\"text-xl\" color=\"danger\" name=\"refresh-circle\"></ion-icon>\r\n </div>\r\n</div>\r\n\r\n@if(!disabled() && renderInterface){\r\n @switch (interface()) {\r\n @case (SelectInterfaces.Popover) {\r\n <sion-popover \r\n #popover \r\n [width]=\"inputContainer.offsetWidth + 'px'\" \r\n (onWillPresent)=\"OnPresent()\" \r\n (onDidDismiss)=\"OnDismiss()\" \r\n [anchor]=\"inputContainer\" \r\n [placement]=\"configuration().popoverConfiguration.placement\" \r\n [flip]=\"configuration().popoverConfiguration.flip\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"selectContentTemplate\"></ng-container>\r\n </sion-popover>\r\n }\r\n @case (SelectInterfaces.Modal) {\r\n <ion-modal #modal (ionModalWillPresent)=\"OnPresent()\" (didDismiss)=\"OnDismiss()\" [initialBreakpoint]=\"0.9\" [keepContentsMounted]=\"true\">\r\n <ng-template>\r\n <ion-header>\r\n <ion-toolbar>\r\n <ion-title class=\"text-center\">\r\n {{label()}}\r\n </ion-title>\r\n <ion-buttons slot=\"end\">\r\n <ion-button (click)=\"modal.dismiss()\">\r\n <ion-icon name=\"close-circle\"></ion-icon>\r\n </ion-button>\r\n </ion-buttons>\r\n </ion-toolbar>\r\n </ion-header>\r\n \r\n <ng-container [ngTemplateOutlet]=\"selectContentTemplate\" [ngTemplateOutletContext]=\"{ modal: true }\"></ng-container>\r\n </ng-template>\r\n </ion-modal>\r\n }\r\n @case (SelectInterfaces.ActionSheet) {\r\n <ion-action-sheet #actionSheet trigger=\"open-action-sheet\" [header]=\"label()\" [buttons]=\"lstOptionsActionSheet\"></ion-action-sheet>\r\n }\r\n }\r\n}\r\n\r\n<ng-template #selectContentTemplate let-modal=\"modal\">\r\n <div #selectContent class=\"select-content\" [class.!size-full]=\"modal\">\r\n <div class=\"select-search-bar-container\">\r\n <div class=\"select-search-bar-icon-container !border-r-0 border-primary/70 bg-primary/70 shrink-0\">\r\n <ion-icon color=\"dark\" name=\"search\"></ion-icon>\r\n </div>\r\n <input #inputSearchBar tabindex=\"-1\" class=\"select-search-bar border-primary/70 !rounded-l-none\" [formControl]=\"searchBarControl\"/>\r\n </div> \r\n <ul class=\"select-item-list mask-y\" role=\"listbox\" [attr.aria-activedescendant]=\"'sion-is-' + selectedIndex\">\r\n <ion-content #scrollContent class=\"size-full\" [scrollY]=\"true\">\r\n @for (item of lstOptions; track item.value) { \r\n <ng-container \r\n [ngTemplateOutlet]=\"baseOptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item, index: $index }\">\r\n </ng-container>\r\n }\r\n @if(configuration().useInfiniteScroll){\r\n <ion-infinite-scroll threshold=\"10px\" *ngIf=\"lstOptions.length && lstOptions.length != lstOptionsItemValue().length\" (ionInfinite)=\"AddPage($event)\">\r\n <ion-infinite-scroll-content></ion-infinite-scroll-content>\r\n </ion-infinite-scroll>\r\n }\r\n </ion-content>\r\n </ul>\r\n @if(hasAtivo()){\r\n <div class=\"w-full text-xs flex items-center justify-end\">\r\n <ion-checkbox [ngModel]=\"somenteAtivos()\" (ngModelChange)=\"somenteAtivos.set($event)\" class=\"scale-75\"> Somente ativos </ion-checkbox>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #baseOptionTemplate let-item=\"item\" let-index=\"index\">\r\n <li [id]=\"'sion-is-' + index\" class=\"select-item\" [class.disabled]=\"item.disabled\" [attr.aria-selected]=\"index == selectedIndex\" (mouseenter)=\"selectedIndex = index\" (click)=\"Select(item)\">\r\n <div class=\"select-item-checkmark-conteiner\">\r\n @if(item.selected) {\r\n <ion-icon class=\"select-item-checkmark\" color=\"primary\" name=\"checkmark\"></ion-icon>\r\n }\r\n </div>\r\n @if (optionTemplate) {\r\n <ng-container \r\n [ngTemplateOutlet]=\"optionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"select-item-label\"> {{item.label}} </span>\r\n }\r\n </li>\r\n</ng-template>", styles: [".input-container{cursor:pointer!important}.input-select-label{pointer-events:none;min-height:1.5rem;width:100%;outline:2px solid transparent;outline-offset:2px;color:var(--ion-color-dark)}.select-content{display:flex;height:18rem;width:100%;flex-direction:column;gap:.25rem;overflow:hidden;padding:.25rem}.select-content .select-search-bar-container{display:flex;width:100%;flex-shrink:1}.select-content .select-search-bar-container .select-search-bar-icon-container{display:flex;height:100%;width:1.75rem;align-items:center;justify-content:center;border-top-left-radius:.375rem;border-bottom-left-radius:.375rem;border-width:1px}.select-content .select-search-bar-container .select-search-bar{width:100%;flex-shrink:1;border-radius:.375rem;border-width:1px;background-color:transparent;padding-left:.5rem;padding-right:.5rem;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}@media (orientation: portrait){.select-content .select-search-bar-container .select-search-bar{height:2.5rem}}@media (orientation: landscape){.select-content .select-search-bar-container .select-search-bar{height:1.75rem}}.select-item-list{width:100%;height:100%;overflow-y:auto;display:flex;flex-direction:column;gap:.25rem}.select-item-list .select-item{color:var(--ion-color-dark);display:flex;width:100%;flex-shrink:0;align-items:center;justify-content:flex-start;border-radius:.375rem;padding-right:.5rem}@media (orientation: portrait){.select-item-list .select-item{min-height:2.5rem}}@media (orientation: landscape){.select-item-list .select-item{min-height:2rem}}.select-item-list .select-item{cursor:pointer}.select-item-list .select-item.disabled{opacity:.5;pointer-events:none}.select-item-list .select-item:hover,.select-item-list .select-item:focus,.select-item-list .select-item[aria-selected=true]{background-color:color-mix(in srgb,var(--ion-color-dark) 20%,transparent)}.select-item-list .select-item .select-item-checkmark-conteiner{display:flex;height:100%;width:1.75rem;flex-shrink:0;align-items:center;justify-content:center}.select-item-list .select-item .select-item-label{width:100%}.error-container{pointer-events:none;position:absolute;bottom:0;left:0;z-index:200;display:flex;width:100%;height:100%;--tw-translate-y: -3rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));align-items:center;justify-content:center;opacity:0;will-change:opacity,auto;transition:opacity .2s ease-in-out,transform .2s ease-in-out}.error-container.active{pointer-events:auto!important;--tw-translate-y: 0px !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important;opacity:1!important}\n", "@property --input-color{syntax: \"<color>\"; initial-value: transparent; inherits: false;}.input-container{position:relative;--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));cursor:text;border-radius:.75rem;padding:.25rem .75rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition:--input-color .2s ease-in-out,box-shadow .2s ease-in-out,opacity .2s ease-in-out,filter .2s ease-in-out;--color: var(--ion-color-dark);--input-color: var(--input-background, var(--ion-color-step-250));--shadow: 0 3px 4px -1px rgb(0 0 0 / .1);--inset-shadow: var(--input-color) 0px 1.75px 2px 0px inset;--focused-shadow: 0 0 1px 2px color-mix(in srgb, var(--ion-color-medium) 35%, transparent);box-shadow:var(--inset-shadow),var(--shadow);will-change:box-shadow,filter opacity;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;background:radial-gradient(ellipse at 0px top,hsl(from var(--input-color) h s l/.5),hsl(from var(--input-color) h s l/.4)),hsl(from var(--ion-color-light) h s l/.8)}.input-container:hover{--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container:focus-within,.input-container:focus,.input-container.manual-focus{box-shadow:var(--inset-shadow),var(--shadow),var(--focused-shadow);--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container .input-label{pointer-events:none;display:flex;height:1rem;width:100%;min-width:0px;max-width:100%;align-items:center;justify-content:flex-start;gap:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;color:var(--color)}.input-container input,.input-container textarea{height:1.5rem;width:100%;border-radius:.375rem;background-color:transparent;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}.input-container.loading{cursor:wait!important}.input-container.required .input-label:after{content:\"*\";color:var(--ion-color-danger);vertical-align:bottom}.input-container.submitted.invalid{--input-color: color-mix(in srgb, var(--ion-color-danger) 50%, transparent)}.input-container.disabled{cursor:not-allowed;opacity:.5;--tw-brightness: brightness(1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container.disabled *{pointer-events:none}.loading-container{position:absolute;pointer-events:none;width:100%;height:100%;top:0;left:0;display:flex;justify-content:end;align-items:center;padding-right:.5rem;will-change:opacity;transition:opacity .2s ease-in-out;overflow:hidden;opacity:0;z-index:10}.loading-container ion-spinner{will-change:auto;transition:transform .2s ease-in-out;transform:translateY(-100%)}.loading-container.loading{opacity:1}.loading-container.loading ion-spinner{transform:translateY(0)}ion-modal::part(content){border-radius:.75rem;border:1px solid var(--ion-color-step-250)}\n"], dependencies: [{ kind: "component", type: i1.IonActionSheet, selector: "ion-action-sheet", inputs: ["animated", "backdropDismiss", "buttons", "cssClass", "enterAnimation", "header", "htmlAttributes", "isOpen", "keyboardClose", "leaveAnimation", "mode", "subHeader", "translucent", "trigger"] }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonCheckbox, selector: "ion-checkbox", inputs: ["alignment", "checked", "color", "disabled", "errorText", "helperText", "indeterminate", "justify", "labelPlacement", "mode", "name", "required", "value"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonInfiniteScroll, selector: "ion-infinite-scroll", inputs: ["disabled", "position", "threshold"] }, { kind: "component", type: i1.IonInfiniteScrollContent, selector: "ion-infinite-scroll-content", inputs: ["loadingSpinner", "loadingText"] }, { kind: "component", type: i1.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i1.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonModal, selector: "ion-modal" }, { kind: "directive", type: i1.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.SIonPopoverComponent, selector: "sion-popover", inputs: ["fill", "arrow", "flip", "placement", "height", "width", "anchor"], outputs: ["onWillPresent", "onDidPresent", "onWillDismiss", "onDidDismiss"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
317
|
+
}
|
|
318
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InputSelectComponent, decorators: [{
|
|
319
|
+
type: Component,
|
|
320
|
+
args: [{ selector: 'input-select', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
321
|
+
...InputProviderFactory.GetProviders(InputSelectComponent),
|
|
322
|
+
{ provide: CustomInput, useExisting: forwardRef(() => InputSelectComponent) },
|
|
323
|
+
], template: "<div \r\n #inputContainer\r\n class=\"input-container\" \r\n (click)=\"setFocus($event);\"\r\n [class.required]=\"required()\" \r\n [class.submitted]=\"submitted()\" \r\n [class.manual-focus]=\"floatingVisible\"\r\n [class.invalid]=\"invalid\" \r\n [class.disabled]=\"loading() || loadingFromLoader || disabled()\"\r\n [class.loading]=\"loading() || loadingFromLoader\"\r\n>\r\n <div class=\"input-label\"> \r\n <span class=\"truncate\">\r\n {{label()}} \r\n </span>\r\n </div>\r\n \r\n <div class=\"w-full truncate outline-none\" [class.pr-7]=\"!configuration().clearable\" [class.pr-10]=\"configuration().clearable\" #inputSelectLabel tabindex=\"0\">\r\n @if (!configuration().multiple && currentLabel){\r\n @if(labelTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"labelTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: currentLabel, item: currentItems.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label\"> {{currentLabel}} </span>\r\n }\r\n }\r\n @else if (configuration().multiple && isArray(currentItems) && $any(currentItems).length) {\r\n <div class=\"w-full min-h-6 overflow-hidden relative\">\r\n <div class=\"absolute left-0 top-0 overflow-x-auto flex gap-2 size-full mask-x/2\">\r\n @for (item of currentItems; track $index) {\r\n <div class=\"translucid-border rounded-lg flex items-center justify-center gap-2 pl-2\">\r\n @if(labelTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"labelTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item.label, item: item.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label\"> {{item.label}} </span>\r\n }\r\n \r\n <div class=\"h-full aspect-square flex items-center justify-center cursor-pointer\" (click)=\"Select(item); $event.stopPropagation()\">\r\n <ion-icon name=\"close\" color=\"danger\" slot=\"icon-only\"></ion-icon>\r\n </div>\r\n <!-- <ion-button class=\"m-0 h-full\" (click)=\"Select(item.value); $event.stopPropagation()\" color=\"medium\" size=\"small\" fill=\"outline\" style=\"--border-radius: .5rem\">\r\n <ion-icon name=\"close\" color=\"danger\" slot=\"icon-only\"></ion-icon>\r\n </ion-button> -->\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @else {\r\n @if(placeholderTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"placeholderTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: this.configuration().placeholder, placeholder: this.configuration().placeholder }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label !text-medium\"> {{this.configuration().placeholder}} </span>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"absolute bottom-1 flex flex-col items-center justify-center size-7\" [class.right-1]=\"!configuration().clearable\" [class.right-8]=\"configuration().clearable\">\r\n <ion-icon class=\"-mb-0.5\" name=\"chevron-up\"></ion-icon>\r\n <ion-icon class=\"-mt-0.5\" name=\"chevron-down\"></ion-icon>\r\n </div>\r\n @if(configuration().clearable){\r\n <ion-button class=\"absolute right-1 bottom-1\" (click)=\"Clear($event)\" color=\"medium\" size=\"small\" fill=\"clear\" style=\"--border-radius: .5rem\">\r\n <ion-icon name=\"close\" slot=\"icon-only\"></ion-icon>\r\n </ion-button>\r\n } \r\n\r\n <div class=\"loading-container\" [class.loading]=\"loading() || loadingFromLoader\">\r\n <ion-spinner></ion-spinner>\r\n </div>\r\n <div class=\"error-container\" (click)=\"configuration().loader.Refresh()\" [class.active]=\"configuration().loader.error && !loadingFromLoader\">\r\n <ion-icon class=\"text-xl\" color=\"danger\" name=\"refresh-circle\"></ion-icon>\r\n </div>\r\n</div>\r\n\r\n@if(!disabled() && renderInterface){\r\n @switch (interface()) {\r\n @case (SelectInterfaces.Popover) {\r\n <sion-popover \r\n #popover \r\n [width]=\"inputContainer.offsetWidth + 'px'\" \r\n (onWillPresent)=\"OnPresent()\" \r\n (onDidDismiss)=\"OnDismiss()\" \r\n [anchor]=\"inputContainer\" \r\n [placement]=\"configuration().popoverConfiguration.placement\" \r\n [flip]=\"configuration().popoverConfiguration.flip\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"selectContentTemplate\"></ng-container>\r\n </sion-popover>\r\n }\r\n @case (SelectInterfaces.Modal) {\r\n <ion-modal #modal (ionModalWillPresent)=\"OnPresent()\" (didDismiss)=\"OnDismiss()\" [initialBreakpoint]=\"0.9\" [keepContentsMounted]=\"true\">\r\n <ng-template>\r\n <ion-header>\r\n <ion-toolbar>\r\n <ion-title class=\"text-center\">\r\n {{label()}}\r\n </ion-title>\r\n <ion-buttons slot=\"end\">\r\n <ion-button (click)=\"modal.dismiss()\">\r\n <ion-icon name=\"close-circle\"></ion-icon>\r\n </ion-button>\r\n </ion-buttons>\r\n </ion-toolbar>\r\n </ion-header>\r\n \r\n <ng-container [ngTemplateOutlet]=\"selectContentTemplate\" [ngTemplateOutletContext]=\"{ modal: true }\"></ng-container>\r\n </ng-template>\r\n </ion-modal>\r\n }\r\n @case (SelectInterfaces.ActionSheet) {\r\n <ion-action-sheet #actionSheet trigger=\"open-action-sheet\" [header]=\"label()\" [buttons]=\"lstOptionsActionSheet\"></ion-action-sheet>\r\n }\r\n }\r\n}\r\n\r\n<ng-template #selectContentTemplate let-modal=\"modal\">\r\n <div #selectContent class=\"select-content\" [class.!size-full]=\"modal\">\r\n <div class=\"select-search-bar-container\">\r\n <div class=\"select-search-bar-icon-container !border-r-0 border-primary/70 bg-primary/70 shrink-0\">\r\n <ion-icon color=\"dark\" name=\"search\"></ion-icon>\r\n </div>\r\n <input #inputSearchBar tabindex=\"-1\" class=\"select-search-bar border-primary/70 !rounded-l-none\" [formControl]=\"searchBarControl\"/>\r\n </div> \r\n <ul class=\"select-item-list mask-y\" role=\"listbox\" [attr.aria-activedescendant]=\"'sion-is-' + selectedIndex\">\r\n <ion-content #scrollContent class=\"size-full\" [scrollY]=\"true\">\r\n @for (item of lstOptions; track item.value) { \r\n <ng-container \r\n [ngTemplateOutlet]=\"baseOptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item, index: $index }\">\r\n </ng-container>\r\n }\r\n @if(configuration().useInfiniteScroll){\r\n <ion-infinite-scroll threshold=\"10px\" *ngIf=\"lstOptions.length && lstOptions.length != lstOptionsItemValue().length\" (ionInfinite)=\"AddPage($event)\">\r\n <ion-infinite-scroll-content></ion-infinite-scroll-content>\r\n </ion-infinite-scroll>\r\n }\r\n </ion-content>\r\n </ul>\r\n @if(hasAtivo()){\r\n <div class=\"w-full text-xs flex items-center justify-end\">\r\n <ion-checkbox [ngModel]=\"somenteAtivos()\" (ngModelChange)=\"somenteAtivos.set($event)\" class=\"scale-75\"> Somente ativos </ion-checkbox>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #baseOptionTemplate let-item=\"item\" let-index=\"index\">\r\n <li [id]=\"'sion-is-' + index\" class=\"select-item\" [class.disabled]=\"item.disabled\" [attr.aria-selected]=\"index == selectedIndex\" (mouseenter)=\"selectedIndex = index\" (click)=\"Select(item)\">\r\n <div class=\"select-item-checkmark-conteiner\">\r\n @if(item.selected) {\r\n <ion-icon class=\"select-item-checkmark\" color=\"primary\" name=\"checkmark\"></ion-icon>\r\n }\r\n </div>\r\n @if (optionTemplate) {\r\n <ng-container \r\n [ngTemplateOutlet]=\"optionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"select-item-label\"> {{item.label}} </span>\r\n }\r\n </li>\r\n</ng-template>", styles: [".input-container{cursor:pointer!important}.input-select-label{pointer-events:none;min-height:1.5rem;width:100%;outline:2px solid transparent;outline-offset:2px;color:var(--ion-color-dark)}.select-content{display:flex;height:18rem;width:100%;flex-direction:column;gap:.25rem;overflow:hidden;padding:.25rem}.select-content .select-search-bar-container{display:flex;width:100%;flex-shrink:1}.select-content .select-search-bar-container .select-search-bar-icon-container{display:flex;height:100%;width:1.75rem;align-items:center;justify-content:center;border-top-left-radius:.375rem;border-bottom-left-radius:.375rem;border-width:1px}.select-content .select-search-bar-container .select-search-bar{width:100%;flex-shrink:1;border-radius:.375rem;border-width:1px;background-color:transparent;padding-left:.5rem;padding-right:.5rem;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}@media (orientation: portrait){.select-content .select-search-bar-container .select-search-bar{height:2.5rem}}@media (orientation: landscape){.select-content .select-search-bar-container .select-search-bar{height:1.75rem}}.select-item-list{width:100%;height:100%;overflow-y:auto;display:flex;flex-direction:column;gap:.25rem}.select-item-list .select-item{color:var(--ion-color-dark);display:flex;width:100%;flex-shrink:0;align-items:center;justify-content:flex-start;border-radius:.375rem;padding-right:.5rem}@media (orientation: portrait){.select-item-list .select-item{min-height:2.5rem}}@media (orientation: landscape){.select-item-list .select-item{min-height:2rem}}.select-item-list .select-item{cursor:pointer}.select-item-list .select-item.disabled{opacity:.5;pointer-events:none}.select-item-list .select-item:hover,.select-item-list .select-item:focus,.select-item-list .select-item[aria-selected=true]{background-color:color-mix(in srgb,var(--ion-color-dark) 20%,transparent)}.select-item-list .select-item .select-item-checkmark-conteiner{display:flex;height:100%;width:1.75rem;flex-shrink:0;align-items:center;justify-content:center}.select-item-list .select-item .select-item-label{width:100%}.error-container{pointer-events:none;position:absolute;bottom:0;left:0;z-index:200;display:flex;width:100%;height:100%;--tw-translate-y: -3rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));align-items:center;justify-content:center;opacity:0;will-change:opacity,auto;transition:opacity .2s ease-in-out,transform .2s ease-in-out}.error-container.active{pointer-events:auto!important;--tw-translate-y: 0px !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important;opacity:1!important}\n", "@property --input-color{syntax: \"<color>\"; initial-value: transparent; inherits: false;}.input-container{position:relative;--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));cursor:text;border-radius:.75rem;padding:.25rem .75rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition:--input-color .2s ease-in-out,box-shadow .2s ease-in-out,opacity .2s ease-in-out,filter .2s ease-in-out;--color: var(--ion-color-dark);--input-color: var(--input-background, var(--ion-color-step-250));--shadow: 0 3px 4px -1px rgb(0 0 0 / .1);--inset-shadow: var(--input-color) 0px 1.75px 2px 0px inset;--focused-shadow: 0 0 1px 2px color-mix(in srgb, var(--ion-color-medium) 35%, transparent);box-shadow:var(--inset-shadow),var(--shadow);will-change:box-shadow,filter opacity;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;background:radial-gradient(ellipse at 0px top,hsl(from var(--input-color) h s l/.5),hsl(from var(--input-color) h s l/.4)),hsl(from var(--ion-color-light) h s l/.8)}.input-container:hover{--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container:focus-within,.input-container:focus,.input-container.manual-focus{box-shadow:var(--inset-shadow),var(--shadow),var(--focused-shadow);--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container .input-label{pointer-events:none;display:flex;height:1rem;width:100%;min-width:0px;max-width:100%;align-items:center;justify-content:flex-start;gap:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;color:var(--color)}.input-container input,.input-container textarea{height:1.5rem;width:100%;border-radius:.375rem;background-color:transparent;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}.input-container.loading{cursor:wait!important}.input-container.required .input-label:after{content:\"*\";color:var(--ion-color-danger);vertical-align:bottom}.input-container.submitted.invalid{--input-color: color-mix(in srgb, var(--ion-color-danger) 50%, transparent)}.input-container.disabled{cursor:not-allowed;opacity:.5;--tw-brightness: brightness(1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container.disabled *{pointer-events:none}.loading-container{position:absolute;pointer-events:none;width:100%;height:100%;top:0;left:0;display:flex;justify-content:end;align-items:center;padding-right:.5rem;will-change:opacity;transition:opacity .2s ease-in-out;overflow:hidden;opacity:0;z-index:10}.loading-container ion-spinner{will-change:auto;transition:transform .2s ease-in-out;transform:translateY(-100%)}.loading-container.loading{opacity:1}.loading-container.loading ion-spinner{transform:translateY(0)}ion-modal::part(content){border-radius:.75rem;border:1px solid var(--ion-color-step-250)}\n"] }]
|
|
324
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { onResize: [{
|
|
325
|
+
type: HostListener,
|
|
326
|
+
args: ['window:resize', ['$event']]
|
|
327
|
+
}], labelTemplate: [{
|
|
328
|
+
type: ContentChild,
|
|
329
|
+
args: [SIonLabelTemplateDirective, { read: TemplateRef }]
|
|
330
|
+
}], optionTemplate: [{
|
|
331
|
+
type: ContentChild,
|
|
332
|
+
args: [SIonOptionTemplateDirective, { read: TemplateRef }]
|
|
333
|
+
}], placeholderTemplate: [{
|
|
334
|
+
type: ContentChild,
|
|
335
|
+
args: [SIonPlaceholderTemplateDirective, { read: TemplateRef }]
|
|
336
|
+
}], inputContainer: [{
|
|
337
|
+
type: ViewChild,
|
|
338
|
+
args: ['inputContainer']
|
|
339
|
+
}], inputSelectLabel: [{
|
|
340
|
+
type: ViewChild,
|
|
341
|
+
args: ['inputSelectLabel']
|
|
342
|
+
}], HandleKeyboardEvent: [{
|
|
343
|
+
type: HostListener,
|
|
344
|
+
args: ['document:keydown', ['$event']]
|
|
345
|
+
}], inputSearchBar: [{
|
|
346
|
+
type: ViewChild,
|
|
347
|
+
args: ['inputSearchBar']
|
|
348
|
+
}], selectContent: [{
|
|
349
|
+
type: ViewChild,
|
|
350
|
+
args: ['selectContent']
|
|
351
|
+
}], popover: [{
|
|
352
|
+
type: ViewChild,
|
|
353
|
+
args: [SIonPopoverComponent]
|
|
354
|
+
}], modal: [{
|
|
355
|
+
type: ViewChild,
|
|
356
|
+
args: [IonModal]
|
|
357
|
+
}], alert: [{
|
|
358
|
+
type: ViewChild,
|
|
359
|
+
args: [IonAlert]
|
|
360
|
+
}], actionSheet: [{
|
|
361
|
+
type: ViewChild,
|
|
362
|
+
args: [IonActionSheet]
|
|
363
|
+
}], ionContent: [{
|
|
364
|
+
type: ViewChild,
|
|
365
|
+
args: ['scrollContent']
|
|
366
|
+
}] } });
|
|
367
|
+
class ItemValue {
|
|
368
|
+
constructor() {
|
|
369
|
+
this.selected = false;
|
|
370
|
+
this.disabled = false;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
function isPortrait() {
|
|
374
|
+
return window.innerHeight > window.innerWidth;
|
|
375
|
+
}
|
|
376
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9pbnB1dHMvaW5wdXQtc2VsZWN0L2lucHV0LXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0LXNlbGVjdC9pbnB1dC1zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFrQyx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQW9CLEtBQUssRUFBZSxLQUFLLEVBQWUsTUFBTSxFQUFVLFdBQVcsRUFBRSxTQUFTLEdBQW1CLE1BQU0sZUFBZSxDQUFDO0FBQy9TLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQXlFLGNBQWMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXZKLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsT0FBTyxFQUFnQixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLHdCQUF3QixFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDOUgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDekYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0saUNBQWlD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O3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBRU8sT0FBTztzQkFBdkMsU0FBUzt1QkFBQyxvQkFBb0I7Z0JBQ1IsS0FBSztzQkFBM0IsU0FBUzt1QkFBQyxRQUFRO2dCQUNJLEtBQUs7c0JBQTNCLFNBQVM7dUJBQUMsUUFBUTtnQkFDUSxXQUFXO3NCQUFyQyxTQUFTO3VCQUFDLGNBQWM7Z0JBSUcsVUFBVTtzQkFBckMsU0FBUzt1QkFBQyxlQUFlOztBQWlENUIsTUFBTSxTQUFTO0lBQWY7UUFHRSxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRTFCLGFBQVEsR0FBWSxLQUFLLENBQUM7SUFDNUIsQ0FBQztDQUFBO0FBRUQsU0FBUyxVQUFVO0lBQ2pCLE9BQU8sTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO0FBQ2hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhZnRlck5leHRSZW5kZXIsIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBjb21wdXRlZCwgQ29udGVudENoaWxkLCBlZmZlY3QsIEVsZW1lbnRSZWYsIGZvcndhcmRSZWYsIEhvc3RMaXN0ZW5lciwgaW5qZWN0LCBJbmplY3RvciwgaW5wdXQsIElucHV0U2lnbmFsLCBtb2RlbCwgTW9kZWxTaWduYWwsIHNpZ25hbCwgU2lnbmFsLCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBXcml0YWJsZVNpZ25hbCwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFjdGlvblNoZWV0QnV0dG9uLCBBbGVydEJ1dHRvbiwgQWxlcnRJbnB1dCwgSW5maW5pdGVTY3JvbGxDdXN0b21FdmVudCwgSW9uQWN0aW9uU2hlZXQsIElvbkFsZXJ0LCBJb25Db250ZW50LCBJb25Nb2RhbCB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcclxuXHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEJpbmRMYWJlbEZhY3RvcnksIEJpbmRWYWx1ZUZhY3RvcnksIElucHV0U2VsZWN0Q29uZmlndXJhdGlvbiwgU2VsZWN0SW50ZXJmYWNlcyB9IGZyb20gJy4vaW5wdXQuc2VsZWN0LmNvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQgeyBTSW9uUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BvcG92ZXIvc2lvbi1wb3BvdmVyL3Npb24tcG9wb3Zlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJbnB1dFByb3ZpZGVyRmFjdG9yeSB9IGZyb20gJy4uL2lucHV0LXByb3ZpZGVyLWZhY3RvcnknO1xyXG5pbXBvcnQgeyBDdXN0b21JbnB1dCB9IGZyb20gJy4uL2N1c3RvbS1pbnB1dCc7XHJcbmltcG9ydCB7IFNlYXJjaCwgVGltZW91dCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxzLnNlcnZpY2UnO1xyXG5cclxuaW1wb3J0IHsgUGxhY2Vob2xkZXJUZW1wbGF0ZUNvbnRleHQsIFNJb25QbGFjZWhvbGRlclRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL3Npb24tcGxhY2Vob2xkZXItdGVtcGxhdGUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgT3B0aW9uVGVtcGxhdGVDb250ZXh0LCBTSW9uT3B0aW9uVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvc2lvbi1vcHRpb24tdGVtcGxhdGUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgTGFiZWxUZW1wbGF0ZUNvbnRleHQsIFNJb25MYWJlbFRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL3Npb24tbGFiZWwtdGVtcGxhdGUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgSHR0cFNlcnZpY2VBdGl2byB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3dlYi9odHRwLmF0aXZvLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpbnB1dC1zZWxlY3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2lucHV0LXNlbGVjdC5jb21wb25lbnQuc2NzcycsICcuLi9pbnB1dHMuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgLi4uSW5wdXRQcm92aWRlckZhY3RvcnkuR2V0UHJvdmlkZXJzKElucHV0U2VsZWN0Q29tcG9uZW50KSxcclxuICAgIHsgcHJvdmlkZTogQ3VzdG9tSW5wdXQsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElucHV0U2VsZWN0Q29tcG9uZW50KSB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbnB1dFNlbGVjdENvbXBvbmVudDxUID0gYW55PiBleHRlbmRzIEN1c3RvbUlucHV0PFQgfCBUW10+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcblxyXG4gIFNlbGVjdEludGVyZmFjZXMgPSBTZWxlY3RJbnRlcmZhY2VzO1xyXG5cclxuICAvKiogSXRlbXMgZGlzcG9uw612ZWlzIG5vIHNlbGVjdCAqL1xyXG4gIGl0ZW1zICAgICAgICAgICAgOiBNb2RlbFNpZ25hbDxhbnlbXT4gICAgICAgICAgICAgICAgICAgICAgPSBtb2RlbDxhbnlbXT4oW10pO1xyXG4gIC8qKiBDb25maWd1cmHDp8OjbyBkbyBzZWxlY3QgKi9cclxuICBjb25maWd1cmF0aW9uICAgIDogSW5wdXRTaWduYWw8SW5wdXRTZWxlY3RDb25maWd1cmF0aW9uPiA9IGlucHV0PElucHV0U2VsZWN0Q29uZmlndXJhdGlvbj4obmV3IElucHV0U2VsZWN0Q29uZmlndXJhdGlvbigpKTsgXHJcbiAgbG9hZGluZ0Zyb21Mb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY3VycmVudExhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbiAgY3VycmVudEl0ZW1zIDogYW55IHwgSXRlbVZhbHVlPGFueT5bXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICBcclxuICBTZXRDdXJyZW50SXRlbUxhYmVsKCk6IHZvaWQge1xyXG4gICAgaWYodGhpcy5jb25maWd1cmF0aW9uKCkubXVsdGlwbGUpe1xyXG4gICAgICB0aGlzLmN1cnJlbnRMYWJlbCA9IHRoaXMubHN0T3B0aW9uc0l0ZW1WYWx1ZSgpLmZpbHRlcihwID0+IHAuc2VsZWN0ZWQpLm1hcChwID0+IHAubGFiZWwpLmpvaW4oJywgJyk7XHJcbiAgICAgIHRoaXMuY3VycmVudEl0ZW1zID0gdGhpcy5sc3RPcHRpb25zSXRlbVZhbHVlKCkuZmlsdGVyKHAgPT4gcC5zZWxlY3RlZCk7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICB0aGlzLmN1cnJlbnRMYWJlbCA9IHRoaXMubHN0T3B0aW9uc0l0ZW1WYWx1ZSgpLmZpbmQocCA9PiBwLnNlbGVjdGVkKT8ubGFiZWw7XHJcbiAgICAgIHRoaXMuY3VycmVudEl0ZW1zID0gdGhpcy5sc3RPcHRpb25zSXRlbVZhbHVlKCkuZmluZChwID0+IHAuc2VsZWN0ZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbHN0T3B0aW9uc0l0ZW1WYWx1ZTogU2lnbmFsPEl0ZW1WYWx1ZTxhbnk+W10+ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3QgYmluZExhYmVsID0gQmluZExhYmVsRmFjdG9yeSh0aGlzLmNvbmZpZ3VyYXRpb24oKSk7XHJcbiAgICBjb25zdCBiaW5kVmFsdWUgPSBCaW5kVmFsdWVGYWN0b3J5KHRoaXMuY29uZmlndXJhdGlvbigpKTtcclxuICAgIHJldHVybiB0aGlzLml0ZW1zKCkuZmlsdGVyKHAgPT4gKHRoaXMuc29tZW50ZUF0aXZvcygpICYmIHRoaXMuaGFzQXRpdm8oKSkgPyBwLmF0aXZvIDogdHJ1ZSkgLm1hcChwID0+IHtcclxuICAgICAgY29uc3QgaXRlbSA9IG5ldyBJdGVtVmFsdWU8YW55PigpO1xyXG4gICAgICBpdGVtLmxhYmVsID0gYmluZExhYmVsKHApO1xyXG4gICAgICBpdGVtLnZhbHVlID0gYmluZFZhbHVlKHApO1xyXG4gICAgICBpdGVtLml0ZW0gID0gcDtcclxuICAgICAgaXRlbS5zZWxlY3RlZCA9IHRoaXMudmFsdWUoKSA9PSBpdGVtLnZhbHVlO1xyXG4gICAgICBpdGVtLmRpc2FibGVkID0gcC5kaXNhYmxlZCB8fCBmYWxzZSB8fCAodGhpcy5oYXNBdGl2bygpICYmIHAuYXRpdm8gPT0gZmFsc2UpO1xyXG4gICAgICByZXR1cm4gaXRlbTtcclxuICAgIH0pO1xyXG4gIH0pO1xyXG5cclxuICB3aW5kb3dTaXplOiBXcml0YWJsZVNpZ25hbDxudW1iZXI+ID0gc2lnbmFsPG51bWJlcj4od2luZG93LmlubmVyV2lkdGgpO1xyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxyXG4gIG9uUmVzaXplKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMud2luZG93U2l6ZS5zZXQod2luZG93LmlubmVyV2lkdGgpO1xyXG4gICAgdGhpcy5TZXRJbnRlcmZhY2UoKTtcclxuICB9XHJcbiAgU2V0SW50ZXJmYWNlKCk6IHZvaWQge1xyXG4gICAgdmFyIF9pbnRlcmZhY2UgPSB0aGlzLmNvbmZpZ3VyYXRpb24oKS5pbnRlcmZhY2U7XHJcbiAgICBpZihfaW50ZXJmYWNlID09IFNlbGVjdEludGVyZmFjZXMuRHluYW1pYyl7XHJcbiAgICAgIF9pbnRlcmZhY2UgPSBpc1BvcnRyYWl0KCkgPyBTZWxlY3RJbnRlcmZhY2VzLkFjdGlvblNoZWV0IDogU2VsZWN0SW50ZXJmYWNlcy5Qb3BvdmVyO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbnRlcmZhY2Uuc2V0KF9pbnRlcmZhY2UpO1xyXG4gIH1cclxuICBpbnRlcmZhY2U6IFdyaXRhYmxlU2lnbmFsPFNlbGVjdEludGVyZmFjZXM+ID0gc2lnbmFsPFNlbGVjdEludGVyZmFjZXM+KHVuZGVmaW5lZCk7XHJcblxyXG4gIGxzdE9wdGlvbnM6IEl0ZW1WYWx1ZTxhbnk+W10gPSBbXTtcclxuICBsc3RPcHRpb25zQWxlcnQgICAgICA6IEFsZXJ0SW5wdXRbXSA9IFtdO1xyXG4gIGxzdEJ1dHRvbnNBbGVydCAgICAgIDogQWxlcnRCdXR0b25bXSA9IFtdO1xyXG4gIGxzdE9wdGlvbnNBY3Rpb25TaGVldDogQWN0aW9uU2hlZXRCdXR0b25bXSA9IFtdO1xyXG5cclxuICBpbmZpbml0ZVNjcm9sbFBhZ2U6IFdyaXRhYmxlU2lnbmFsPG51bWJlcj4gPSBzaWduYWw8bnVtYmVyPigxKTtcclxuICBBZGRQYWdlKGV2ZW50OiBJbmZpbml0ZVNjcm9sbEN1c3RvbUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmluZmluaXRlU2Nyb2xsUGFnZS5zZXQodGhpcy5pbmZpbml0ZVNjcm9sbFBhZ2UoKSArIDEpO1xyXG4gICAgZXZlbnQudGFyZ2V0LmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBVcGRhdGVMc3RPcHRpb25zKHNlYXJjaDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAvLyBVcGRhdGUgdGhlIHNlYXJjaCBcclxuICAgIGlmIChzZWFyY2gpIHtcclxuICAgICAgdGhpcy5sc3RPcHRpb25zID0gU2VhcmNoPEl0ZW1WYWx1ZTxhbnk+Pih0aGlzLmxzdE9wdGlvbnNJdGVtVmFsdWUoKSwgc2VhcmNoLCAoaXRlbTogSXRlbVZhbHVlPGFueT4pID0+IGl0ZW0ubGFiZWwpO1xyXG4gICAgfSBlbHNlIHsgXHJcbiAgICAgIHRoaXMubHN0T3B0aW9ucyA9IHRoaXMubHN0T3B0aW9uc0l0ZW1WYWx1ZSgpOyBcclxuICAgIH1cclxuICAgIGlmKHRoaXMuY29uZmlndXJhdGlvbigpLnVzZUluZmluaXRlU2Nyb2xsKXtcclxuICAgICAgdGhpcy5sc3RPcHRpb25zID0gdGhpcy5sc3RPcHRpb25zLnNsaWNlKDAsIHRoaXMuaW5maW5pdGVTY3JvbGxQYWdlKCkgKiAyNSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmKHRoaXMuaW50ZXJmYWNlKCkgPT0gU2VsZWN0SW50ZXJmYWNlcy5BY3Rpb25TaGVldCl7XHJcbiAgICAgIHRoaXMubHN0T3B0aW9uc0FjdGlvblNoZWV0ID0gWy4uLnRoaXMubHN0T3B0aW9ucy5tYXAocCA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHRleHQ6IHAubGFiZWwsXHJcbiAgICAgICAgICBoYW5kbGVyOiAoKSA9PiB7IHRoaXMuU2VsZWN0KHApOyB9LFxyXG4gICAgICAgICAgcm9sZSAgICA6IHAuc2VsZWN0ZWQgPyAnc2VsZWN0ZWQnIDogJycsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSksIFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRleHQ6ICdDYW5jZWxhcicsXHJcbiAgICAgICAgICByb2xlOiAnY2FuY2VsJyxcclxuICAgICAgICAgIGRhdGE6IHsgYWN0aW9uOiAnY2FuY2VsJywgfSxcclxuICAgICAgICAgIGhhbmRsZXIoKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVySW50ZXJmYWNlID0gZmFsc2U7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH1cclxuICAgICAgXTtcclxuICAgIH1cclxuICB9XHJcbiAgVXBkYXRlU2VsZWN0ZWQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uKCkubXVsdGlwbGUpe1xyXG4gICAgICBjb25zdCBhcnIgPSB0aGlzLnZhbHVlKCkgYXMgYW55W10gfHwgW107XHJcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmxzdE9wdGlvbnMpIHtcclxuICAgICAgICBpdGVtLnNlbGVjdGVkID0gYXJyLmZpbmQocCA9PiBwID09IGl0ZW0udmFsdWUpICE9IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5sc3RPcHRpb25zLmZvckVhY2goKGl0ZW06IEl0ZW1WYWx1ZTxhbnk+KSA9PiB7IGl0ZW0uc2VsZWN0ZWQgPSB0aGlzLnZhbHVlKCkgPT0gaXRlbS52YWx1ZTsgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLlNldEN1cnJlbnRJdGVtTGFiZWwoKTtcclxuICB9XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoU0lvbkxhYmVsVGVtcGxhdGVEaXJlY3RpdmUgICAgICAsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgbGFiZWxUZW1wbGF0ZSAgICAgIDogVGVtcGxhdGVSZWY8TGFiZWxUZW1wbGF0ZUNvbnRleHQ8VD4+O1xyXG4gIEBDb250ZW50Q2hpbGQoU0lvbk9wdGlvblRlbXBsYXRlRGlyZWN0aXZlICAgICAsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgb3B0aW9uVGVtcGxhdGUgICAgIDogVGVtcGxhdGVSZWY8T3B0aW9uVGVtcGxhdGVDb250ZXh0PFQ+PjtcclxuICBAQ29udGVudENoaWxkKFNJb25QbGFjZWhvbGRlclRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIHBsYWNlaG9sZGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPFBsYWNlaG9sZGVyVGVtcGxhdGVDb250ZXh0PjtcclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0Q29udGFpbmVyJykgaW5wdXRDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0U2VsZWN0TGFiZWwnKSBpbnB1dFNlbGVjdExhYmVsOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuICBvdmVycmlkZSBzZXRGb2N1cyhldmVudDogTW91c2VFdmVudCB8IG51bGwpOiB2b2lkIHsgXHJcbiAgICBpZih0aGlzLmNvbmZpZ3VyYXRpb24oKS5sb2FkZXIuZXJyb3IgfHwgdGhpcy5sb2FkaW5nRnJvbUxvYWRlciB8fCB0aGlzLmxvYWRpbmcoKSB8fCB0aGlzLmRpc2FibGVkKCkpIHsgcmV0dXJuOyB9XHJcbiAgICB0aGlzLlByZXNlbnQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHsgXHJcbiAgICBzdXBlcigpOyBcclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpOyAgICBcclxuICAgICAgdGhpcy5VcGRhdGVMc3RPcHRpb25zKHRoaXMuc2VhcmNoVmFsdWUoKSk7XHJcbiAgICAgIHRoaXMuVXBkYXRlU2VsZWN0ZWQoKTtcclxuXHJcbiAgICB9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pIFxyXG4gIH1cclxuICBvdmVycmlkZSBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICB0aGlzLlNldEludGVyZmFjZSgpO1xyXG4gICAgdGhpcy5jb25maWd1cmF0aW9uKCkubG9hZGVyLkFkZENvbXBvbmVudCh0aGlzKTtcclxuICAgIHRoaXMuY29uZmlndXJhdGlvbigpLmxvYWRlci5SZWZyZXNoKHRoaXMuaXRlbXMoKSk7XHJcbiAgfVxyXG4gIGhhc0F0aXZvOiBTaWduYWw8Ym9vbGVhbj4gPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24oKS5oYXNBdGl2byA9PSB0cnVlIHx8XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbigpLmxvYWRGcm9tU2VydmljZSBpbnN0YW5jZW9mIEh0dHBTZXJ2aWNlQXRpdm9cclxuICAgICk7XHJcbiAgfSk7XHJcbiAgc29tZW50ZUF0aXZvczogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj4gPSBzaWduYWw8Ym9vbGVhbj4odHJ1ZSk7XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIEhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIC8vIFsgUG9wb3ZlciBdXHJcbiAgICBpZih0aGlzLnNlbGVjdENvbnRlbnQ/Lm5hdGl2ZUVsZW1lbnQ/LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSl7XHJcbiAgICAgIGlmKGV2ZW50LmtleSA9PSBcIlRhYlwiKXtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlXHJcbiAgICAgIGlmIChldmVudC5rZXkgPT0gXCJFc2NhcGVcIil7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICB0aGlzLkRpc21pc3MoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIFsgaW5wdXRDb250YWluZXIgXVxyXG4gICAgaWYodGhpcy5pbnB1dENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8uY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKXsgXHJcbiAgICAgIGlmKFtcIkFycm93RG93blwiLCBcIkFycm93VXBcIl0uaW5jbHVkZXMoZXZlbnQua2V5KSl7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB0aGlzLlByZXNlbnQoZXZlbnQpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gWyBpbnB1dFNlbGVjdFNlYXJjaEJhciBdXHJcbiAgICBpZih0aGlzLmlucHV0U2VhcmNoQmFyPy5uYXRpdmVFbGVtZW50ID09IGV2ZW50LnRhcmdldCl7XHJcbiAgICAgIGlmKGV2ZW50LmtleSA9PSBcIkVudGVyXCIpe1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgLy8gSWYgdGhlIHNlbGVjdCBpcyBub3QgYXRpdm8gaWdub3JlIHRoZSBzZWxlY3RlZCBpdGVtXHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMubHN0T3B0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXghXTtcclxuICAgICAgICBpZih0aGlzLmhhc0F0aXZvKCkgJiYgIWl0ZW0uaXRlbS5hdGl2bykgeyByZXR1cm47IH1cclxuICAgICAgICB0aGlzLlNlbGVjdChpdGVtKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZSBcclxuICAgICAgaWYoZXZlbnQua2V5ID09IFwiQXJyb3dEb3duXCIpe1xyXG4gICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRJbmRleCA9PSB1bmRlZmluZWQpeyB0aGlzLnNlbGVjdGVkSW5kZXggPSAwOyByZXR1cm47IH1cclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9ICh0aGlzLnNlbGVjdGVkSW5kZXggPCB0aGlzLmxzdE9wdGlvbnMubGVuZ3RoIC0gMSA/IHRoaXMuc2VsZWN0ZWRJbmRleCArIDEgOiB0aGlzLnNlbGVjdGVkSW5kZXgpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2UgXHJcbiAgICAgIGlmKGV2ZW50LmtleSA9PSBcIkFycm93VXBcIil7XHJcbiAgICAgICAgaWYodGhpcy5zZWxlY3RlZEluZGV4ID09IHVuZGVmaW5lZCl7IHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7IHJldHVybjsgfVxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gKHRoaXMuc2VsZWN0ZWRJbmRleCA+IDAgPyB0aGlzLnNlbGVjdGVkSW5kZXggLSAxIDogdGhpcy5zZWxlY3RlZEluZGV4KVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBzZWxlY3RlZEluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcblxyXG4gIC8vWyBTZWFyY2ggQmFyIF1cclxuICBAVmlld0NoaWxkKCdpbnB1dFNlYXJjaEJhcicpIGlucHV0U2VhcmNoQmFyOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG4gIHNlYXJjaEJhckNvbnRyb2w6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuICBzZWFyY2hWYWx1ZSAgICAgOiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+ID0gIHNpZ25hbDxzdHJpbmc+KFwiXCIpO1xyXG4gIHByaXZhdGUgc2VhcmNoQmFyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwdWJsaWMgZGVzdHJveWVkOiBib29sZWFuID0gZmFsc2VcclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3Qgb2JzZXJ2YWJsZSA9IHRoaXMuc2VhcmNoQmFyQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMjAwKSxcclxuICAgIClcclxuICAgIC8vT25TZWFyY2hDaGFuZ2VcclxuICAgIHRoaXMuc2VhcmNoQmFyU3Vic2NyaXB0aW9uID0gb2JzZXJ2YWJsZS5zdWJzY3JpYmUoYXN5bmMgKHZhbHVlOiBzdHJpbmcpID0+IHsgXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5zZWFyY2hWYWx1ZS5zZXQodmFsdWUpOyBcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgQ2xlYXJTZWFyY2hCYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICAgIGlmICh0aGlzLnNlYXJjaEJhclN1YnNjcmlwdGlvbikgeyB0aGlzLnNlYXJjaEJhclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuQ2xlYXJTZWFyY2hCYXIoKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHdyaXRlVmFsdWUob2JqOiBUIHwgVFtdKTogdm9pZCB8IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy52YWx1ZS5zZXQob2JqKTtcclxuICAgIHRoaXMucnVuVmFsaWRhdGlvbigpO1xyXG4gICAgdGhpcy5VcGRhdGVTZWxlY3RlZCgpO1xyXG4gIH1cclxuICBcclxuICBvdmVycmlkZSBTZXRWYWx1ZShvYmo6IFQgfCBUW10pOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUuc2V0KG9iaik7XHJcbiAgICB0aGlzLnJ1blZhbGlkYXRpb24oKTtcclxuICAgIHRoaXMuVXBkYXRlU2VsZWN0ZWQoKTtcclxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMudmFsdWUoKSk7XHJcbiAgICBpZighdGhpcy5jb25maWd1cmF0aW9uKCkubXVsdGlwbGUpe1xyXG4gICAgICB0aGlzLkRpc21pc3MoKTtcclxuICAgIH1cclxuICB9XHJcbiAgQ2xlYXIoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgaWYodGhpcy5jb25maWd1cmF0aW9uKCkubXVsdGlwbGUpe1xyXG4gICAgICB0aGlzLlNldFZhbHVlKFtdKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLlNldFZhbHVlKHVuZGVmaW5lZCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyBTZWxlY3QoaXRlbVZhbHVlOiBJdGVtVmFsdWU8VD4pOiB2b2lke1xyXG4gICAgY29uc3QgaXRlbSA9IGl0ZW1WYWx1ZS52YWx1ZTtcclxuICAgIGlmKHRoaXMuY29uZmlndXJhdGlvbigpLm11bHRpcGxlKXtcclxuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy52YWx1ZSgpO1xyXG4gICAgICBpZihBcnJheS5pc0FycmF5KGN1cnJlbnRWYWx1ZSkpe1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gY3VycmVudFZhbHVlLmZpbmRJbmRleChwID0+IHAgPT0gaXRlbSk7XHJcbiAgICAgICAgaWYoaW5kZXggPiAtMSl7XHJcbiAgICAgICAgICBjdXJyZW50VmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY3VycmVudFZhbHVlLnB1c2goaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuU2V0VmFsdWUoWy4uLmN1cnJlbnRWYWx1ZV0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuU2V0VmFsdWUoW2l0ZW1dKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5TZXRWYWx1ZShpdGVtKTtcclxuICAgICAgdGhpcy5EaXNtaXNzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gWyBQb3BvdmVyIC8gTW9kYWwgXVxyXG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdENvbnRlbnQnKSBzZWxlY3RDb250ZW50OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuICBcclxuICBAVmlld0NoaWxkKFNJb25Qb3BvdmVyQ29tcG9uZW50KSBwb3BvdmVyOiBTSW9uUG9wb3ZlckNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKElvbk1vZGFsKSAgIG1vZGFsOiBJb25Nb2RhbDtcclxuICBAVmlld0NoaWxkKElvbkFsZXJ0KSAgIGFsZXJ0OiBJb25BbGVydDtcclxuICBAVmlld0NoaWxkKElvbkFjdGlvblNoZWV0KSBhY3Rpb25TaGVldDogSW9uQWN0aW9uU2hlZXQ7XHJcblxyXG4gIGZsb2F0aW5nVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHJlbmRlckludGVyZmFjZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbENvbnRlbnQnKSBpb25Db250ZW50OiBJb25Db250ZW50O1xyXG4gIGFzeW5jIFByZXNlbnQoZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnJlbmRlckludGVyZmFjZSA9IHRydWU7XHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIGF3YWl0IFRpbWVvdXQoMCk7IC8vRXNwZXJhIGEgcmVuZGVyaXphw6fDo28gZGEgaW50ZXJmYWNlXHJcbiAgICBpZih0aGlzLmludGVyZmFjZSgpID09IFNlbGVjdEludGVyZmFjZXMuTW9kYWwpe1xyXG4gICAgICBhd2FpdCB0aGlzLm1vZGFsLnByZXNlbnQoKTtcclxuICAgICAgdGhpcy5pbnB1dFNlYXJjaEJhci5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICB9IGVsc2VcclxuICAgIGlmKHRoaXMuaW50ZXJmYWNlKCkgPT0gU2VsZWN0SW50ZXJmYWNlcy5Qb3BvdmVyKXtcclxuICAgICAgYXdhaXQgdGhpcy5wb3BvdmVyLnByZXNlbnQoZXZlbnQpO1xyXG4gICAgICB0aGlzLmlucHV0U2VhcmNoQmFyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIH0gZWxzZVxyXG4gICAgaWYodGhpcy5pbnRlcmZhY2UoKSA9PSBTZWxlY3RJbnRlcmZhY2VzLkFjdGlvblNoZWV0KXtcclxuICAgICAgYXdhaXQgdGhpcy5hY3Rpb25TaGVldC5wcmVzZW50KCk7XHJcbiAgICAgIHRoaXMuaW5wdXRTZWFyY2hCYXI/Lm5hdGl2ZUVsZW1lbnQ/LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBEaXNtaXNzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYodGhpcy5tb2RhbCkge1xyXG4gICAgICBhd2FpdCB0aGlzLm1vZGFsLmRpc21pc3MoKTtcclxuICAgIH1cclxuICAgIGlmKHRoaXMucG9wb3Zlcikge1xyXG4gICAgICBhd2FpdCB0aGlzLnBvcG92ZXIuZGlzbWlzcygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gdW5kZWZpbmVkO1xyXG4gICAgaWYodGhpcy5pbnB1dFNlbGVjdExhYmVsPy5uYXRpdmVFbGVtZW50KXsgXHJcbiAgICAgIHRoaXMuaW5wdXRTZWxlY3RMYWJlbC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmNvbmZpZ3VyYXRpb24oKS51c2VJbmZpbml0ZVNjcm9sbCl7XHJcbiAgICAgIHRoaXMuaW5maW5pdGVTY3JvbGxQYWdlLnNldCgxKTtcclxuICAgIH1cclxuICB9XHJcbiAgT25EaXNtaXNzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZW5kZXJJbnRlcmZhY2UgPSBmYWxzZTtcclxuICAgIHRoaXMuZmxvYXRpbmdWaXNpYmxlID0gZmFsc2U7IFxyXG4gICAgdGhpcy5zZWFyY2hWYWx1ZS5zZXQoJycpO1xyXG4gICAgdGhpcy5zZWFyY2hCYXJDb250cm9sLnNldFZhbHVlKCcnKTtcclxuICB9XHJcbiAgT25QcmVzZW50KCk6IHZvaWQge1xyXG4gICAgdGhpcy5mbG9hdGluZ1Zpc2libGUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgaXNBcnJheShvYmogOiBhbnkgKSB7XHJcbiAgIHJldHVybiBBcnJheS5pc0FycmF5KG9iailcclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIEl0ZW1WYWx1ZTxUPntcclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIHZhbHVlOiBUO1xyXG4gIHNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXRlbSAgICA6IGFueTsgXHJcbiAgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNQb3J0cmFpdCgpIHtcclxuICByZXR1cm4gd2luZG93LmlubmVySGVpZ2h0ID4gd2luZG93LmlubmVyV2lkdGg7XHJcbn0iLCI8ZGl2IFxyXG4gICNpbnB1dENvbnRhaW5lclxyXG4gIGNsYXNzPVwiaW5wdXQtY29udGFpbmVyXCIgXHJcbiAgKGNsaWNrKT1cInNldEZvY3VzKCRldmVudCk7XCJcclxuICBbY2xhc3MucmVxdWlyZWRdPVwicmVxdWlyZWQoKVwiIFxyXG4gIFtjbGFzcy5zdWJtaXR0ZWRdPVwic3VibWl0dGVkKClcIiBcclxuICBbY2xhc3MubWFudWFsLWZvY3VzXT1cImZsb2F0aW5nVmlzaWJsZVwiXHJcbiAgW2NsYXNzLmludmFsaWRdPVwiaW52YWxpZFwiIFxyXG4gIFtjbGFzcy5kaXNhYmxlZF09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0Zyb21Mb2FkZXIgfHwgZGlzYWJsZWQoKVwiXHJcbiAgW2NsYXNzLmxvYWRpbmddPVwibG9hZGluZygpIHx8IGxvYWRpbmdGcm9tTG9hZGVyXCJcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJpbnB1dC1sYWJlbFwiPiBcclxuICAgIDxzcGFuIGNsYXNzPVwidHJ1bmNhdGVcIj5cclxuICAgICAge3tsYWJlbCgpfX0gXHJcbiAgICA8L3NwYW4+XHJcbiAgPC9kaXY+XHJcbiAgXHJcbiAgPGRpdiBjbGFzcz1cInctZnVsbCB0cnVuY2F0ZSBvdXRsaW5lLW5vbmVcIiBbY2xhc3MucHItN109XCIhY29uZmlndXJhdGlvbigpLmNsZWFyYWJsZVwiIFtjbGFzcy5wci0xMF09XCJjb25maWd1cmF0aW9uKCkuY2xlYXJhYmxlXCIgICNpbnB1dFNlbGVjdExhYmVsIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgQGlmICghY29uZmlndXJhdGlvbigpLm11bHRpcGxlICYmIGN1cnJlbnRMYWJlbCl7XHJcbiAgICAgIEBpZihsYWJlbFRlbXBsYXRlKXtcclxuICAgICAgICA8bmctY29udGFpbmVyIFxyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxUZW1wbGF0ZVwiXHJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGN1cnJlbnRMYWJlbCwgaXRlbTogY3VycmVudEl0ZW1zLml0ZW0gfVwiPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICB9XHJcbiAgICAgIEBlbHNlIHtcclxuICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LXNlbGVjdC1sYWJlbFwiPiB7e2N1cnJlbnRMYWJlbH19IDwvc3Bhbj5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgQGVsc2UgaWYgKGNvbmZpZ3VyYXRpb24oKS5tdWx0aXBsZSAmJiBpc0FycmF5KGN1cnJlbnRJdGVtcykgJiYgJGFueShjdXJyZW50SXRlbXMpLmxlbmd0aCkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIG1pbi1oLTYgb3ZlcmZsb3ctaGlkZGVuIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIGxlZnQtMCB0b3AtMCBvdmVyZmxvdy14LWF1dG8gZmxleCBnYXAtMiBzaXplLWZ1bGwgbWFzay14LzJcIj5cclxuICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgY3VycmVudEl0ZW1zOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyYW5zbHVjaWQtYm9yZGVyIHJvdW5kZWQtbGcgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcGwtMlwiPlxyXG4gICAgICAgICAgICAgIEBpZihsYWJlbFRlbXBsYXRlKXtcclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgXHJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0ubGFiZWwsIGl0ZW06IGl0ZW0uaXRlbSB9XCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1zZWxlY3QtbGFiZWxcIj4ge3tpdGVtLmxhYmVsfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtZnVsbCBhc3BlY3Qtc3F1YXJlIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIlNlbGVjdChpdGVtKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlXCIgY29sb3I9XCJkYW5nZXJcIiBzbG90PVwiaWNvbi1vbmx5XCI+PC9pb24taWNvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8IS0tIDxpb24tYnV0dG9uIGNsYXNzPVwibS0wIGgtZnVsbFwiIChjbGljayk9XCJTZWxlY3QoaXRlbS52YWx1ZSk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIGNvbG9yPVwibWVkaXVtXCIgc2l6ZT1cInNtYWxsXCIgZmlsbD1cIm91dGxpbmVcIiBzdHlsZT1cIi0tYm9yZGVyLXJhZGl1czogLjVyZW1cIj5cclxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2VcIiBjb2xvcj1cImRhbmdlclwiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxyXG4gICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIH1cclxuICAgIEBlbHNlIHtcclxuICAgICAgQGlmKHBsYWNlaG9sZGVyVGVtcGxhdGUpe1xyXG4gICAgICAgIDxuZy1jb250YWluZXIgXHJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJwbGFjZWhvbGRlclRlbXBsYXRlXCJcclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogdGhpcy5jb25maWd1cmF0aW9uKCkucGxhY2Vob2xkZXIsIHBsYWNlaG9sZGVyOiB0aGlzLmNvbmZpZ3VyYXRpb24oKS5wbGFjZWhvbGRlciB9XCI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIH1cclxuICAgICAgQGVsc2Uge1xyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtc2VsZWN0LWxhYmVsICF0ZXh0LW1lZGl1bVwiPiB7e3RoaXMuY29uZmlndXJhdGlvbigpLnBsYWNlaG9sZGVyfX0gPC9zcGFuPlxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBib3R0b20tMSBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBzaXplLTdcIiBbY2xhc3MucmlnaHQtMV09XCIhY29uZmlndXJhdGlvbigpLmNsZWFyYWJsZVwiIFtjbGFzcy5yaWdodC04XT1cImNvbmZpZ3VyYXRpb24oKS5jbGVhcmFibGVcIj5cclxuICAgIDxpb24taWNvbiBjbGFzcz1cIi1tYi0wLjVcIiBuYW1lPVwiY2hldnJvbi11cFwiPjwvaW9uLWljb24+XHJcbiAgICA8aW9uLWljb24gY2xhc3M9XCItbXQtMC41XCIgbmFtZT1cImNoZXZyb24tZG93blwiPjwvaW9uLWljb24+XHJcbiAgPC9kaXY+XHJcbiAgQGlmKGNvbmZpZ3VyYXRpb24oKS5jbGVhcmFibGUpe1xyXG4gICAgPGlvbi1idXR0b24gY2xhc3M9XCJhYnNvbHV0ZSByaWdodC0xIGJvdHRvbS0xXCIgKGNsaWNrKT1cIkNsZWFyKCRldmVudClcIiBjb2xvcj1cIm1lZGl1bVwiIHNpemU9XCJzbWFsbFwiIGZpbGw9XCJjbGVhclwiIHN0eWxlPVwiLS1ib3JkZXItcmFkaXVzOiAuNXJlbVwiPlxyXG4gICAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlXCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+XHJcbiAgICA8L2lvbi1idXR0b24+XHJcbiAgfSBcclxuXHJcbiAgPGRpdiBjbGFzcz1cImxvYWRpbmctY29udGFpbmVyXCIgW2NsYXNzLmxvYWRpbmddPVwibG9hZGluZygpIHx8IGxvYWRpbmdGcm9tTG9hZGVyXCI+XHJcbiAgICA8aW9uLXNwaW5uZXI+PC9pb24tc3Bpbm5lcj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiZXJyb3ItY29udGFpbmVyXCIgKGNsaWNrKT1cImNvbmZpZ3VyYXRpb24oKS5sb2FkZXIuUmVmcmVzaCgpXCIgW2NsYXNzLmFjdGl2ZV09XCJjb25maWd1cmF0aW9uKCkubG9hZGVyLmVycm9yICYmICFsb2FkaW5nRnJvbUxvYWRlclwiPlxyXG4gICAgPGlvbi1pY29uIGNsYXNzPVwidGV4dC14bFwiIGNvbG9yPVwiZGFuZ2VyXCIgbmFtZT1cInJlZnJlc2gtY2lyY2xlXCI+PC9pb24taWNvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG5AaWYoIWRpc2FibGVkKCkgJiYgcmVuZGVySW50ZXJmYWNlKXtcclxuICBAc3dpdGNoIChpbnRlcmZhY2UoKSkge1xyXG4gICAgQGNhc2UgKFNlbGVjdEludGVyZmFjZXMuUG9wb3Zlcikge1xyXG4gICAgICA8c2lvbi1wb3BvdmVyIFxyXG4gICAgICAgICAgI3BvcG92ZXIgXHJcbiAgICAgICAgICBbd2lkdGhdPVwiaW5wdXRDb250YWluZXIub2Zmc2V0V2lkdGggKyAncHgnXCIgXHJcbiAgICAgICAgICAob25XaWxsUHJlc2VudCk9XCJPblByZXNlbnQoKVwiIFxyXG4gICAgICAgICAgKG9uRGlkRGlzbWlzcyk9XCJPbkRpc21pc3MoKVwiIFxyXG4gICAgICAgICAgW2FuY2hvcl09XCJpbnB1dENvbnRhaW5lclwiIFxyXG4gICAgICAgICAgW3BsYWNlbWVudF09XCJjb25maWd1cmF0aW9uKCkucG9wb3ZlckNvbmZpZ3VyYXRpb24ucGxhY2VtZW50XCIgXHJcbiAgICAgICAgICBbZmxpcF09XCJjb25maWd1cmF0aW9uKCkucG9wb3ZlckNvbmZpZ3VyYXRpb24uZmxpcFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VsZWN0Q29udGVudFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvc2lvbi1wb3BvdmVyPlxyXG4gICAgfVxyXG4gICAgQGNhc2UgKFNlbGVjdEludGVyZmFjZXMuTW9kYWwpIHtcclxuICAgICAgPGlvbi1tb2RhbCAjbW9kYWwgKGlvbk1vZGFsV2lsbFByZXNlbnQpPVwiT25QcmVzZW50KClcIiAoZGlkRGlzbWlzcyk9XCJPbkRpc21pc3MoKVwiIFtpbml0aWFsQnJlYWtwb2ludF09XCIwLjlcIiBba2VlcENvbnRlbnRzTW91bnRlZF09XCJ0cnVlXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPGlvbi1oZWFkZXI+XHJcbiAgICAgICAgICAgIDxpb24tdG9vbGJhcj5cclxuICAgICAgICAgICAgICA8aW9uLXRpdGxlIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIHt7bGFiZWwoKX19XHJcbiAgICAgICAgICAgICAgPC9pb24tdGl0bGU+XHJcbiAgICAgICAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cclxuICAgICAgICAgICAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1jaXJjbGVcIj48L2lvbi1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbnM+XHJcbiAgICAgICAgICAgIDwvaW9uLXRvb2xiYXI+XHJcbiAgICAgICAgICA8L2lvbi1oZWFkZXI+XHJcbiAgICBcclxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VsZWN0Q29udGVudFRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgbW9kYWw6IHRydWUgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvaW9uLW1vZGFsPlxyXG4gICAgfVxyXG4gICAgQGNhc2UgKFNlbGVjdEludGVyZmFjZXMuQWN0aW9uU2hlZXQpIHtcclxuICAgICAgPGlvbi1hY3Rpb24tc2hlZXQgI2FjdGlvblNoZWV0IHRyaWdnZXI9XCJvcGVuLWFjdGlvbi1zaGVldFwiIFtoZWFkZXJdPVwibGFiZWwoKVwiIFtidXR0b25zXT1cImxzdE9wdGlvbnNBY3Rpb25TaGVldFwiPjwvaW9uLWFjdGlvbi1zaGVldD5cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbjxuZy10ZW1wbGF0ZSAjc2VsZWN0Q29udGVudFRlbXBsYXRlIGxldC1tb2RhbD1cIm1vZGFsXCI+XHJcbiAgPGRpdiAjc2VsZWN0Q29udGVudCBjbGFzcz1cInNlbGVjdC1jb250ZW50XCIgW2NsYXNzLiFzaXplLWZ1bGxdPVwibW9kYWxcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Qtc2VhcmNoLWJhci1jb250YWluZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdC1zZWFyY2gtYmFyLWljb24tY29udGFpbmVyICFib3JkZXItci0wIGJvcmRlci1wcmltYXJ5LzcwIGJnLXByaW1hcnkvNzAgc2hyaW5rLTBcIj5cclxuICAgICAgICA8aW9uLWljb24gY29sb3I9XCJkYXJrXCIgbmFtZT1cInNlYXJjaFwiPjwvaW9uLWljb24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8aW5wdXQgI2lucHV0U2VhcmNoQmFyIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cInNlbGVjdC1zZWFyY2gtYmFyIGJvcmRlci1wcmltYXJ5LzcwICFyb3VuZGVkLWwtbm9uZVwiIFtmb3JtQ29udHJvbF09XCJzZWFyY2hCYXJDb250cm9sXCIvPlxyXG4gICAgPC9kaXY+IFxyXG4gICAgPHVsIGNsYXNzPVwic2VsZWN0LWl0ZW0tbGlzdCBtYXNrLXlcIiByb2xlPVwibGlzdGJveFwiIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCInc2lvbi1pcy0nICsgc2VsZWN0ZWRJbmRleFwiPlxyXG4gICAgICA8aW9uLWNvbnRlbnQgI3Njcm9sbENvbnRlbnQgY2xhc3M9XCJzaXplLWZ1bGxcIiBbc2Nyb2xsWV09XCJ0cnVlXCI+XHJcbiAgICAgICAgQGZvciAoaXRlbSBvZiBsc3RPcHRpb25zOyB0cmFjayBpdGVtLnZhbHVlKSB7IFxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBcclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYmFzZU9wdGlvblRlbXBsYXRlXCJcclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgaXRlbTogaXRlbSwgaW5kZXg6ICRpbmRleCB9XCI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICB9XHJcbiAgICAgICAgQGlmKGNvbmZpZ3VyYXRpb24oKS51c2VJbmZpbml0ZVNjcm9sbCl7XHJcbiAgICAgICAgICA8aW9uLWluZmluaXRlLXNjcm9sbCB0aHJlc2hvbGQ9XCIxMHB4XCIgKm5nSWY9XCJsc3RPcHRpb25zLmxlbmd0aCAmJiBsc3RPcHRpb25zLmxlbmd0aCAhPSBsc3RPcHRpb25zSXRlbVZhbHVlKCkubGVuZ3RoXCIgKGlvbkluZmluaXRlKT1cIkFkZFBhZ2UoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8aW9uLWluZmluaXRlLXNjcm9sbC1jb250ZW50PjwvaW9uLWluZmluaXRlLXNjcm9sbC1jb250ZW50PlxyXG4gICAgICAgICAgPC9pb24taW5maW5pdGUtc2Nyb2xsPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9pb24tY29udGVudD5cclxuICAgIDwvdWw+XHJcbiAgICBAaWYoaGFzQXRpdm8oKSl7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgdGV4dC14cyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZFwiPlxyXG4gICAgICAgIDxpb24tY2hlY2tib3ggW25nTW9kZWxdPVwic29tZW50ZUF0aXZvcygpXCIgKG5nTW9kZWxDaGFuZ2UpPVwic29tZW50ZUF0aXZvcy5zZXQoJGV2ZW50KVwiIGNsYXNzPVwic2NhbGUtNzVcIj4gU29tZW50ZSBhdGl2b3MgPC9pb24tY2hlY2tib3g+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNiYXNlT3B0aW9uVGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWluZGV4PVwiaW5kZXhcIj5cclxuICA8bGkgW2lkXT1cIidzaW9uLWlzLScgKyBpbmRleFwiIGNsYXNzPVwic2VsZWN0LWl0ZW1cIiBbY2xhc3MuZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaW5kZXggPT0gc2VsZWN0ZWRJbmRleFwiIChtb3VzZWVudGVyKT1cInNlbGVjdGVkSW5kZXggPSBpbmRleFwiIChjbGljayk9XCJTZWxlY3QoaXRlbSlcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtaXRlbS1jaGVja21hcmstY29udGVpbmVyXCI+XHJcbiAgICAgIEBpZihpdGVtLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgPGlvbi1pY29uIGNsYXNzPVwic2VsZWN0LWl0ZW0tY2hlY2ttYXJrXCIgY29sb3I9XCJwcmltYXJ5XCIgbmFtZT1cImNoZWNrbWFya1wiPjwvaW9uLWljb24+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gICAgQGlmIChvcHRpb25UZW1wbGF0ZSkge1xyXG4gICAgICA8bmctY29udGFpbmVyIFxyXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvblRlbXBsYXRlXCJcclxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBpdGVtOiBpdGVtLml0ZW0gfVwiPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIH1cclxuICAgIEBlbHNlIHtcclxuICAgICAgPHNwYW4gY2xhc3M9XCJzZWxlY3QtaXRlbS1sYWJlbFwiPiB7e2l0ZW0ubGFiZWx9fSA8L3NwYW4+XHJcbiAgICB9XHJcbiAgPC9saT5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
|