ngx-sp-infra 0.0.0
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/.angular/cache/16.2.0/ng-packagr/content-v2/sha512/2a/a3/eba6ea21e2e566c49202226aa3c1a4d439fa0a2c077374e48d864f20f5f804dbd931f042ddaa359fd35903a0bd3663a223e24dc11e1ec44501cc688a0a9c +1 -0
- package/.angular/cache/16.2.0/ng-packagr/content-v2/sha512/46/44/91b55887c08130e8014b3dbe56b69c0c29f4e127bceafcd610165f4c8e77fefa799ab68c415c1b45cc4fa114565650f3fc3c258e1dc7b792935cbee43fa7 +1 -0
- package/.angular/cache/16.2.0/ng-packagr/content-v2/sha512/7e/62/f8e6238b8f05aeaee2346bcaeda2226be7ab048d3b15e3dbbdf37170d9d7fade0fdfc6cc265d1ecc1b47509c962115d0d4b9a503907d6790c632e191001b +1 -0
- package/.angular/cache/16.2.0/ng-packagr/content-v2/sha512/8d/53/ad58764bc240411378ae1c47c0c20525da378a3b143795a11bc3fdbf6c9cde6fb2de6c3947d673d5872b9ce205d6274114b3b4dfd27609a636df7fd0b600 +1 -0
- package/.angular/cache/16.2.0/ng-packagr/content-v2/sha512/9e/70/9fc33090191a9df303901910a34f5d1cc7ea38ac92e21006bf923a814a4dffe9ad5b7357989f95d4e371cd00318c29339ec3e935832e84f3571ba0ed5f25 +1 -0
- package/.angular/cache/16.2.0/ng-packagr/content-v2/sha512/a1/3a/6a6f351adef4b7c8b7d643b092ca26e0ceeb2a285456285f866504493c9c7db8d420d3a4f282c699a11f2f9933c828c8f8388f28e96372408d7b456f32a1 +1 -0
- package/.angular/cache/16.2.0/ng-packagr/content-v2/sha512/d3/e3/2852d10551b620a4dfaabb1268bf0ac681e206bfb66451e18ac43a2e5c7cdc8a75291e3a1a4038129f3e40cc11317edffe8434d7110d9579585a25843e15 +1 -0
- package/.angular/cache/16.2.0/ng-packagr/content-v2/sha512/f2/ee/05ff4c2260f161b6295a8507440a1b86c0f666f313866e5bf1de6829ae5fe384d6612d732d09c815fe515bd3d6379ed5f8136cf4a4e228b322309840240e +1 -0
- package/.angular/cache/16.2.0/ng-packagr/content-v2/sha512/fe/15/fb0370939f075c14617e0d5fd8411f76edb53e439e19683e5c4554ae7cabd0387c922f6ec6893ced3321ed77df2c851b82eea6a70b38b7396f68493eea19 +1 -0
- package/.angular/cache/16.2.0/ng-packagr/index-v5/10/17/ae308ad3e0cad0afd27bf9eafe0177fdb23b463e70e0dd30d23c117517f6 +2 -0
- package/.angular/cache/16.2.0/ng-packagr/index-v5/14/18/88eabde022c32e7a38011f4ab6f7945e52f018be1abbe6a96864f8f9e22c +2 -0
- package/.angular/cache/16.2.0/ng-packagr/index-v5/1c/b7/dcd00bf2f1de70eab7d9e1d9601fbd87f49d46c7b49671d81ccd4b20b3f1 +2 -0
- package/.angular/cache/16.2.0/ng-packagr/index-v5/4b/31/217b5311dae6305f9b5dc82062276c77f272d61fc3e27c2df5eb0d6b1fb7 +2 -0
- package/.angular/cache/16.2.0/ng-packagr/index-v5/6a/b0/e5091f9ee02b3fcac9821e92cc5113d6b0593bd8bacfb5cbac7dfca306c3 +2 -0
- package/.angular/cache/16.2.0/ng-packagr/index-v5/9b/66/70a7c5990683795072c8b98eb25407b36f55f8efa8d2e0bdef67a8e989ab +2 -0
- package/.angular/cache/16.2.0/ng-packagr/index-v5/a6/8b/af2670adca8f5d06d3d9577ffad4449e4897eaf85de2f4e7f43f93934a16 +2 -0
- package/.angular/cache/16.2.0/ng-packagr/index-v5/da/da/502cfd37a0e9e7f413a569ccf28dc682f9e942ec5e460c93c1dd7c4e531f +3 -0
- package/.angular/cache/16.2.0/ng-packagr/index-v5/f3/8b/4e00bb8eddd473ae09b0b5dee39fa8416aee7b659a770d18c767e5027992 +2 -0
- package/.editorconfig +16 -0
- package/README.md +27 -0
- package/angular.json +41 -0
- package/dist/ngx-sp-infra/README.md +12 -0
- package/dist/ngx-sp-infra/esm2022/lib/infra.module.mjs +137 -0
- package/dist/ngx-sp-infra/esm2022/lib/message/alert/alert.component.mjs +32 -0
- package/dist/ngx-sp-infra/esm2022/lib/message/confirm/confirm.component.mjs +52 -0
- package/dist/ngx-sp-infra/esm2022/lib/message/confirm-modal/confirm-modal.component.mjs +72 -0
- package/dist/ngx-sp-infra/esm2022/lib/message/message-enum.mjs +23 -0
- package/dist/ngx-sp-infra/esm2022/lib/message/message.service.mjs +132 -0
- package/dist/ngx-sp-infra/esm2022/lib/message/save/save.component.mjs +46 -0
- package/dist/ngx-sp-infra/esm2022/lib/models/DownloadArquivos.mjs +3 -0
- package/dist/ngx-sp-infra/esm2022/lib/models/email-model.mjs +35 -0
- package/dist/ngx-sp-infra/esm2022/lib/models/ierror.mjs +2 -0
- package/dist/ngx-sp-infra/esm2022/lib/models/ipagination.mjs +2 -0
- package/dist/ngx-sp-infra/esm2022/lib/models/report-file.mjs +7 -0
- package/dist/ngx-sp-infra/esm2022/lib/models/ret-error.mjs +3 -0
- package/dist/ngx-sp-infra/esm2022/lib/models/ret-feedback-message.mjs +7 -0
- package/dist/ngx-sp-infra/esm2022/lib/models/ret-report-file.mjs +3 -0
- package/dist/ngx-sp-infra/esm2022/lib/pipes/cpf-cnpj.pipe.mjs +23 -0
- package/dist/ngx-sp-infra/esm2022/lib/pipes/currency.pipe.mjs +16 -0
- package/dist/ngx-sp-infra/esm2022/lib/pipes/to-url.pipe.mjs +32 -0
- package/dist/ngx-sp-infra/esm2022/lib/utils/check-url-and-method.service.mjs +70 -0
- package/dist/ngx-sp-infra/esm2022/lib/utils/form-utils.mjs +38 -0
- package/dist/ngx-sp-infra/esm2022/lib/utils/ip-service.service.mjs +22 -0
- package/dist/ngx-sp-infra/esm2022/lib/utils/settings.service.mjs +32 -0
- package/dist/ngx-sp-infra/esm2022/lib/utils/utils.mjs +335 -0
- package/dist/ngx-sp-infra/esm2022/lib/validators/cpf-cnpj.validator.directive.mjs +24 -0
- package/dist/ngx-sp-infra/esm2022/lib/validators/cpf-cnpj.validator.mjs +54 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/breadcrumb/infra-breadcrumb/infra-breadcrumb.component.mjs +35 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/breadcrumb/infra-breadcrumb-item/infra-breadcrumb-item.component.mjs +28 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/breadcrumb/portalrh-breadcrumb/breadcrumb.component.mjs +21 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/click-outside/clickoutside.directive.mjs +167 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/combobox/combobox.component.mjs +545 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/combobox/pipes/filter-by.pipe.mjs +44 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/combobox/pipes/limit-to.pipe.mjs +19 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/field-control-error/field-control-error.component.mjs +23 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/field-error-message/field-error-message.component.mjs +33 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/loading/loading.component.mjs +12 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/loading-button/loading-button.component.mjs +15 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/ordering/ordering.component.mjs +56 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/svg-storage/svg-storage.component.mjs +94 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/tree/models/ret-tree.mjs +3 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/tree/models/tree-item.mjs +7 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/tree/pipes/search-tree.pipe.mjs +17 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/tree/tree.component.mjs +91 -0
- package/dist/ngx-sp-infra/esm2022/ngx-sp-infra.mjs +5 -0
- package/dist/ngx-sp-infra/esm2022/public-api.mjs +51 -0
- package/dist/ngx-sp-infra/fesm2022/ngx-sp-infra.mjs +2313 -0
- package/dist/ngx-sp-infra/fesm2022/ngx-sp-infra.mjs.map +1 -0
- package/dist/ngx-sp-infra/index.d.ts +5 -0
- package/dist/ngx-sp-infra/lib/infra.module.d.ts +32 -0
- package/dist/ngx-sp-infra/lib/message/alert/alert.component.d.ts +14 -0
- package/dist/ngx-sp-infra/lib/message/confirm/confirm.component.d.ts +22 -0
- package/dist/ngx-sp-infra/lib/message/confirm-modal/confirm-modal.component.d.ts +33 -0
- package/dist/ngx-sp-infra/lib/message/message-enum.d.ts +20 -0
- package/dist/ngx-sp-infra/lib/message/message.service.d.ts +31 -0
- package/dist/ngx-sp-infra/lib/message/save/save.component.d.ts +21 -0
- package/dist/ngx-sp-infra/lib/models/DownloadArquivos.d.ts +11 -0
- package/dist/ngx-sp-infra/lib/models/email-model.d.ts +30 -0
- package/dist/ngx-sp-infra/lib/models/ierror.d.ts +4 -0
- package/dist/ngx-sp-infra/lib/models/ipagination.d.ts +5 -0
- package/dist/ngx-sp-infra/lib/models/report-file.d.ts +4 -0
- package/dist/ngx-sp-infra/lib/models/ret-error.d.ts +5 -0
- package/dist/ngx-sp-infra/lib/models/ret-feedback-message.d.ts +7 -0
- package/dist/ngx-sp-infra/lib/models/ret-report-file.d.ts +7 -0
- package/dist/ngx-sp-infra/lib/pipes/cpf-cnpj.pipe.d.ts +7 -0
- package/dist/ngx-sp-infra/lib/pipes/currency.pipe.d.ts +7 -0
- package/dist/ngx-sp-infra/lib/pipes/to-url.pipe.d.ts +16 -0
- package/dist/ngx-sp-infra/lib/utils/check-url-and-method.service.d.ts +35 -0
- package/dist/ngx-sp-infra/lib/utils/form-utils.d.ts +7 -0
- package/dist/ngx-sp-infra/lib/utils/ip-service.service.d.ts +9 -0
- package/dist/ngx-sp-infra/lib/utils/settings.service.d.ts +9 -0
- package/dist/ngx-sp-infra/lib/utils/utils.d.ts +58 -0
- package/dist/ngx-sp-infra/lib/validators/cpf-cnpj.validator.d.ts +18 -0
- package/dist/ngx-sp-infra/lib/validators/cpf-cnpj.validator.directive.d.ts +7 -0
- package/dist/ngx-sp-infra/lib/widgets/breadcrumb/infra-breadcrumb/infra-breadcrumb.component.d.ts +29 -0
- package/dist/ngx-sp-infra/lib/widgets/breadcrumb/infra-breadcrumb-item/infra-breadcrumb-item.component.d.ts +14 -0
- package/dist/ngx-sp-infra/lib/widgets/breadcrumb/portalrh-breadcrumb/breadcrumb.component.d.ts +10 -0
- package/dist/ngx-sp-infra/lib/widgets/click-outside/clickoutside.directive.d.ts +40 -0
- package/dist/ngx-sp-infra/lib/widgets/combobox/combobox.component.d.ts +174 -0
- package/dist/ngx-sp-infra/lib/widgets/combobox/pipes/filter-by.pipe.d.ts +10 -0
- package/dist/ngx-sp-infra/lib/widgets/combobox/pipes/limit-to.pipe.d.ts +7 -0
- package/dist/ngx-sp-infra/lib/widgets/field-control-error/field-control-error.component.d.ts +12 -0
- package/dist/ngx-sp-infra/lib/widgets/field-error-message/field-error-message.component.d.ts +14 -0
- package/dist/ngx-sp-infra/lib/widgets/loading/loading.component.d.ts +6 -0
- package/dist/ngx-sp-infra/lib/widgets/loading-button/loading-button.component.d.ts +7 -0
- package/dist/ngx-sp-infra/lib/widgets/ordering/ordering.component.d.ts +18 -0
- package/dist/ngx-sp-infra/lib/widgets/svg-storage/svg-storage.component.d.ts +16 -0
- package/dist/ngx-sp-infra/lib/widgets/tree/models/ret-tree.d.ts +7 -0
- package/dist/ngx-sp-infra/lib/widgets/tree/models/tree-item.d.ts +11 -0
- package/dist/ngx-sp-infra/lib/widgets/tree/pipes/search-tree.pipe.d.ts +8 -0
- package/dist/ngx-sp-infra/lib/widgets/tree/tree.component.d.ts +20 -0
- package/dist/ngx-sp-infra/package.json +37 -0
- package/dist/ngx-sp-infra/public-api.d.ts +47 -0
- package/package.json +43 -0
- package/projects/ngx-sp-infra/README.md +12 -0
- package/projects/ngx-sp-infra/karma.conf.js +44 -0
- package/projects/ngx-sp-infra/ng-package.json +7 -0
- package/projects/ngx-sp-infra/package-lock.json +225 -0
- package/projects/ngx-sp-infra/package.json +18 -0
- package/projects/ngx-sp-infra/src/lib/infra.module.ts +85 -0
- package/projects/ngx-sp-infra/src/lib/message/alert/alert.component.html +6 -0
- package/projects/ngx-sp-infra/src/lib/message/alert/alert.component.scss +5 -0
- package/projects/ngx-sp-infra/src/lib/message/alert/alert.component.ts +39 -0
- package/projects/ngx-sp-infra/src/lib/message/confirm/confirm.component.html +15 -0
- package/projects/ngx-sp-infra/src/lib/message/confirm/confirm.component.scss +0 -0
- package/projects/ngx-sp-infra/src/lib/message/confirm/confirm.component.ts +52 -0
- package/projects/ngx-sp-infra/src/lib/message/confirm-modal/confirm-modal.component.html +39 -0
- package/projects/ngx-sp-infra/src/lib/message/confirm-modal/confirm-modal.component.scss +0 -0
- package/projects/ngx-sp-infra/src/lib/message/confirm-modal/confirm-modal.component.ts +73 -0
- package/projects/ngx-sp-infra/src/lib/message/message-enum.ts +21 -0
- package/projects/ngx-sp-infra/src/lib/message/message.service.ts +169 -0
- package/projects/ngx-sp-infra/src/lib/message/save/save.component.html +35 -0
- package/projects/ngx-sp-infra/src/lib/message/save/save.component.scss +110 -0
- package/projects/ngx-sp-infra/src/lib/message/save/save.component.ts +44 -0
- package/projects/ngx-sp-infra/src/lib/models/DownloadArquivos.ts +12 -0
- package/projects/ngx-sp-infra/src/lib/models/email-model.ts +33 -0
- package/projects/ngx-sp-infra/src/lib/models/ierror.ts +4 -0
- package/projects/ngx-sp-infra/src/lib/models/ipagination.ts +5 -0
- package/projects/ngx-sp-infra/src/lib/models/report-file.ts +4 -0
- package/projects/ngx-sp-infra/src/lib/models/ret-error.ts +6 -0
- package/projects/ngx-sp-infra/src/lib/models/ret-feedback-message.ts +8 -0
- package/projects/ngx-sp-infra/src/lib/models/ret-report-file.ts +8 -0
- package/projects/ngx-sp-infra/src/lib/pipes/cpf-cnpj.pipe.ts +21 -0
- package/projects/ngx-sp-infra/src/lib/pipes/currency.pipe.ts +13 -0
- package/projects/ngx-sp-infra/src/lib/pipes/to-url.pipe.ts +33 -0
- package/projects/ngx-sp-infra/src/lib/utils/check-url-and-method.service.ts +84 -0
- package/projects/ngx-sp-infra/src/lib/utils/form-utils.ts +50 -0
- package/projects/ngx-sp-infra/src/lib/utils/ip-service.service.ts +22 -0
- package/projects/ngx-sp-infra/src/lib/utils/settings.service.ts +32 -0
- package/projects/ngx-sp-infra/src/lib/utils/utils.ts +427 -0
- package/projects/ngx-sp-infra/src/lib/validators/cpf-cnpj.validator.directive.ts +14 -0
- package/projects/ngx-sp-infra/src/lib/validators/cpf-cnpj.validator.ts +74 -0
- package/projects/ngx-sp-infra/src/lib/widgets/breadcrumb/infra-breadcrumb/infra-breadcrumb.component.css +0 -0
- package/projects/ngx-sp-infra/src/lib/widgets/breadcrumb/infra-breadcrumb/infra-breadcrumb.component.html +3 -0
- package/projects/ngx-sp-infra/src/lib/widgets/breadcrumb/infra-breadcrumb/infra-breadcrumb.component.ts +34 -0
- package/projects/ngx-sp-infra/src/lib/widgets/breadcrumb/infra-breadcrumb-item/infra-breadcrumb-item.component.css +0 -0
- package/projects/ngx-sp-infra/src/lib/widgets/breadcrumb/infra-breadcrumb-item/infra-breadcrumb-item.component.html +1 -0
- package/projects/ngx-sp-infra/src/lib/widgets/breadcrumb/infra-breadcrumb-item/infra-breadcrumb-item.component.ts +29 -0
- package/projects/ngx-sp-infra/src/lib/widgets/breadcrumb/portalrh-breadcrumb/breadcrumb.component.css +0 -0
- package/projects/ngx-sp-infra/src/lib/widgets/breadcrumb/portalrh-breadcrumb/breadcrumb.component.html +5 -0
- package/projects/ngx-sp-infra/src/lib/widgets/breadcrumb/portalrh-breadcrumb/breadcrumb.component.ts +18 -0
- package/projects/ngx-sp-infra/src/lib/widgets/click-outside/clickoutside.directive.ts +183 -0
- package/projects/ngx-sp-infra/src/lib/widgets/combobox/combobox.component.html +40 -0
- package/projects/ngx-sp-infra/src/lib/widgets/combobox/combobox.component.scss +185 -0
- package/projects/ngx-sp-infra/src/lib/widgets/combobox/combobox.component.ts +637 -0
- package/projects/ngx-sp-infra/src/lib/widgets/combobox/combobox.service.ts +15 -0
- package/projects/ngx-sp-infra/src/lib/widgets/combobox/pipes/filter-by.pipe.ts +38 -0
- package/projects/ngx-sp-infra/src/lib/widgets/combobox/pipes/limit-to.pipe.ts +13 -0
- package/projects/ngx-sp-infra/src/lib/widgets/field-control-error/field-control-error.component.css +0 -0
- package/projects/ngx-sp-infra/src/lib/widgets/field-control-error/field-control-error.component.html +4 -0
- package/projects/ngx-sp-infra/src/lib/widgets/field-control-error/field-control-error.component.ts +18 -0
- package/projects/ngx-sp-infra/src/lib/widgets/field-error-message/field-error-message.component.css +0 -0
- package/projects/ngx-sp-infra/src/lib/widgets/field-error-message/field-error-message.component.html +4 -0
- package/projects/ngx-sp-infra/src/lib/widgets/field-error-message/field-error-message.component.ts +35 -0
- package/projects/ngx-sp-infra/src/lib/widgets/loading/loading.component.css +7 -0
- package/projects/ngx-sp-infra/src/lib/widgets/loading/loading.component.html +4 -0
- package/projects/ngx-sp-infra/src/lib/widgets/loading/loading.component.ts +12 -0
- package/projects/ngx-sp-infra/src/lib/widgets/loading-button/loading-button.component.css +3 -0
- package/projects/ngx-sp-infra/src/lib/widgets/loading-button/loading-button.component.html +2 -0
- package/projects/ngx-sp-infra/src/lib/widgets/loading-button/loading-button.component.ts +13 -0
- package/projects/ngx-sp-infra/src/lib/widgets/ordering/ordering.component.html +23 -0
- package/projects/ngx-sp-infra/src/lib/widgets/ordering/ordering.component.scss +0 -0
- package/projects/ngx-sp-infra/src/lib/widgets/ordering/ordering.component.ts +50 -0
- package/projects/ngx-sp-infra/src/lib/widgets/svg-storage/svg-storage.component.html +728 -0
- package/projects/ngx-sp-infra/src/lib/widgets/svg-storage/svg-storage.component.scss +0 -0
- package/projects/ngx-sp-infra/src/lib/widgets/svg-storage/svg-storage.component.ts +105 -0
- package/projects/ngx-sp-infra/src/lib/widgets/tree/README.md +33 -0
- package/projects/ngx-sp-infra/src/lib/widgets/tree/models/ret-tree.ts +8 -0
- package/projects/ngx-sp-infra/src/lib/widgets/tree/models/tree-item.ts +11 -0
- package/projects/ngx-sp-infra/src/lib/widgets/tree/pipes/search-tree.pipe.ts +15 -0
- package/projects/ngx-sp-infra/src/lib/widgets/tree/tree.component.html +51 -0
- package/projects/ngx-sp-infra/src/lib/widgets/tree/tree.component.scss +57 -0
- package/projects/ngx-sp-infra/src/lib/widgets/tree/tree.component.ts +88 -0
- package/projects/ngx-sp-infra/src/public-api.ts +58 -0
- package/projects/ngx-sp-infra/src/test.ts +15 -0
- package/projects/ngx-sp-infra/tsconfig.lib.json +15 -0
- package/projects/ngx-sp-infra/tsconfig.lib.prod.json +10 -0
- package/projects/ngx-sp-infra/tsconfig.spec.json +17 -0
- package/sp-ng-infra-0.0.0.tgz +0 -0
- package/tsconfig.json +42 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
//Origem https://pedrohtbranco.com.br/validacao-cpf-e-cnpj-com-angular-12/
|
|
2
|
+
export class CpfCnpjValidator {
|
|
3
|
+
static { this.cpfLength = 11; }
|
|
4
|
+
static { this.cnpjLength = 14; }
|
|
5
|
+
/**
|
|
6
|
+
* Calcula o dígito verificador do CPF ou CNPJ.
|
|
7
|
+
*/
|
|
8
|
+
static buildDigit(arr) {
|
|
9
|
+
const isCpf = arr.length < CpfCnpjValidator.cpfLength;
|
|
10
|
+
const digit = arr
|
|
11
|
+
.map((val, idx) => val * ((!isCpf ? idx % 8 : idx) + 2))
|
|
12
|
+
.reduce((total, current) => total + current) % CpfCnpjValidator.cpfLength;
|
|
13
|
+
if (digit < 2 && isCpf) {
|
|
14
|
+
return 0;
|
|
15
|
+
}
|
|
16
|
+
else if (digit < 2) {
|
|
17
|
+
return 0;
|
|
18
|
+
}
|
|
19
|
+
return CpfCnpjValidator.cpfLength - digit;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Valida um CPF ou CNPJ de acordo com seu dígito verificador.
|
|
23
|
+
*/
|
|
24
|
+
static validate(c) {
|
|
25
|
+
const cpfCnpj = c.value.replace(/\D/g, '');
|
|
26
|
+
if (cpfCnpj === '') {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
// Verifica o tamanho da string.
|
|
30
|
+
if ([CpfCnpjValidator.cpfLength, CpfCnpjValidator.cnpjLength].indexOf(cpfCnpj.length) < 0) {
|
|
31
|
+
return { cpcnpjInvalid: true };
|
|
32
|
+
}
|
|
33
|
+
// Verifica se todos os dígitos são iguais, exceto para CPF com dígitos zerados.
|
|
34
|
+
if (/^([0-9])\1*$/.test(cpfCnpj) && cpfCnpj !== '00000000000') {
|
|
35
|
+
return { cpcnpjInvalid: true };
|
|
36
|
+
}
|
|
37
|
+
// A seguir é realizado o cálculo verificador.
|
|
38
|
+
const cpfCnpjArr = cpfCnpj.split('').reverse().slice(2);
|
|
39
|
+
cpfCnpjArr.unshift(CpfCnpjValidator.buildDigit(cpfCnpjArr));
|
|
40
|
+
cpfCnpjArr.unshift(CpfCnpjValidator.buildDigit(cpfCnpjArr));
|
|
41
|
+
if (cpfCnpj !== cpfCnpjArr.reverse().join('')) {
|
|
42
|
+
// Dígito verificador não é válido, resultando em falha.
|
|
43
|
+
return { cpcnpjInvalidDigit: true };
|
|
44
|
+
}
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Implementa a interface de um validator.
|
|
49
|
+
*/
|
|
50
|
+
validate(c) {
|
|
51
|
+
return CpfCnpjValidator.validate(c);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BmLWNucGoudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNwLWluZnJhL3NyYy9saWIvdmFsaWRhdG9ycy9jcGYtY25wai52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsMkVBQTJFO0FBRTNFLE1BQU0sT0FBTyxnQkFBZ0I7YUFFcEIsY0FBUyxHQUFHLEVBQUUsQ0FBQzthQUNmLGVBQVUsR0FBRyxFQUFFLENBQUM7SUFFdkI7O01BRUU7SUFDRixNQUFNLENBQUMsVUFBVSxDQUFDLEdBQWE7UUFFN0IsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7UUFDdEQsTUFBTSxLQUFLLEdBQUcsR0FBRzthQUNkLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ3ZELE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7UUFFNUUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssRUFBRTtZQUN0QixPQUFPLENBQUMsQ0FBQztTQUNWO2FBQ0ksSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUNsQjtZQUNFLE9BQU8sQ0FBQyxDQUFDO1NBQ1Y7UUFFRCxPQUFPLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDNUMsQ0FBQztJQUdEOztNQUVFO0lBQ0YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFrQjtRQUVoQyxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFM0MsSUFBSSxPQUFPLEtBQUssRUFBRSxFQUFFO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN6RixPQUFPLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ2hDO1FBRUQsZ0ZBQWdGO1FBQ2hGLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLEtBQUssYUFBYSxFQUFFO1lBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDaEM7UUFFRCw4Q0FBOEM7UUFDOUMsTUFBTSxVQUFVLEdBQWEsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbEUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUM1RCxVQUFVLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBRTVELElBQUksT0FBTyxLQUFLLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDN0Msd0RBQXdEO1lBQ3hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUNyQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztNQUVFO0lBQ0YsUUFBUSxDQUFDLENBQWtCO1FBQ3pCLE9BQU8sZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWYWxpZGF0b3IsIEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbi8vT3JpZ2VtICBodHRwczovL3BlZHJvaHRicmFuY28uY29tLmJyL3ZhbGlkYWNhby1jcGYtZS1jbnBqLWNvbS1hbmd1bGFyLTEyL1xyXG5cclxuZXhwb3J0IGNsYXNzIENwZkNucGpWYWxpZGF0b3IgaW1wbGVtZW50cyBWYWxpZGF0b3Ige1xyXG5cclxuICBzdGF0aWMgY3BmTGVuZ3RoID0gMTE7XHJcbiAgc3RhdGljIGNucGpMZW5ndGggPSAxNDtcclxuXHJcbiAgLyoqXHJcbiAgKiBDYWxjdWxhIG8gZMOtZ2l0byB2ZXJpZmljYWRvciBkbyBDUEYgb3UgQ05QSi5cclxuICAqL1xyXG4gIHN0YXRpYyBidWlsZERpZ2l0KGFycjogbnVtYmVyW10pOiBudW1iZXIge1xyXG5cclxuICAgIGNvbnN0IGlzQ3BmID0gYXJyLmxlbmd0aCA8IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoO1xyXG4gICAgY29uc3QgZGlnaXQgPSBhcnJcclxuICAgICAgLm1hcCgodmFsLCBpZHgpID0+IHZhbCAqICgoIWlzQ3BmID8gaWR4ICUgOCA6IGlkeCkgKyAyKSlcclxuICAgICAgLnJlZHVjZSgodG90YWwsIGN1cnJlbnQpID0+IHRvdGFsICsgY3VycmVudCkgJSBDcGZDbnBqVmFsaWRhdG9yLmNwZkxlbmd0aDtcclxuXHJcbiAgICBpZiAoZGlnaXQgPCAyICYmIGlzQ3BmKSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfSBcclxuICAgIGVsc2UgaWYgKGRpZ2l0IDwgMikgXHJcbiAgICB7IFxyXG4gICAgICByZXR1cm4gMDsgXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoIC0gZGlnaXQ7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgKiBWYWxpZGEgdW0gQ1BGIG91IENOUEogZGUgYWNvcmRvIGNvbSBzZXUgZMOtZ2l0byB2ZXJpZmljYWRvci5cclxuICAqL1xyXG4gIHN0YXRpYyB2YWxpZGF0ZShjOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcblxyXG4gICAgY29uc3QgY3BmQ25waiA9IGMudmFsdWUucmVwbGFjZSgvXFxEL2csICcnKTtcclxuXHJcbiAgICBpZiAoY3BmQ25waiA9PT0gJycpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVmVyaWZpY2EgbyB0YW1hbmhvIGRhIHN0cmluZy5cclxuICAgIGlmIChbQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGgsIENwZkNucGpWYWxpZGF0b3IuY25wakxlbmd0aF0uaW5kZXhPZihjcGZDbnBqLmxlbmd0aCkgPCAwKSB7XHJcbiAgICAgIHJldHVybiB7IGNwY25wakludmFsaWQ6IHRydWUgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBWZXJpZmljYSBzZSB0b2RvcyBvcyBkw61naXRvcyBzw6NvIGlndWFpcywgZXhjZXRvIHBhcmEgQ1BGIGNvbSBkw61naXRvcyB6ZXJhZG9zLlxyXG4gICAgaWYgKC9eKFswLTldKVxcMSokLy50ZXN0KGNwZkNucGopICYmIGNwZkNucGogIT09ICcwMDAwMDAwMDAwMCcpIHtcclxuICAgICAgcmV0dXJuIHsgY3BjbnBqSW52YWxpZDogdHJ1ZSB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEEgc2VndWlyIMOpIHJlYWxpemFkbyBvIGPDoWxjdWxvIHZlcmlmaWNhZG9yLlxyXG4gICAgY29uc3QgY3BmQ25wakFycjogbnVtYmVyW10gPSBjcGZDbnBqLnNwbGl0KCcnKS5yZXZlcnNlKCkuc2xpY2UoMik7XHJcblxyXG4gICAgY3BmQ25wakFyci51bnNoaWZ0KENwZkNucGpWYWxpZGF0b3IuYnVpbGREaWdpdChjcGZDbnBqQXJyKSk7XHJcbiAgICBjcGZDbnBqQXJyLnVuc2hpZnQoQ3BmQ25walZhbGlkYXRvci5idWlsZERpZ2l0KGNwZkNucGpBcnIpKTtcclxuXHJcbiAgICBpZiAoY3BmQ25waiAhPT0gY3BmQ25wakFyci5yZXZlcnNlKCkuam9pbignJykpIHtcclxuICAgICAgLy8gRMOtZ2l0byB2ZXJpZmljYWRvciBuw6NvIMOpIHbDoWxpZG8sIHJlc3VsdGFuZG8gZW0gZmFsaGEuXHJcbiAgICAgIHJldHVybiB7IGNwY25wakludmFsaWREaWdpdDogdHJ1ZSB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBJbXBsZW1lbnRhIGEgaW50ZXJmYWNlIGRlIHVtIHZhbGlkYXRvci5cclxuICAqL1xyXG4gIHZhbGlkYXRlKGM6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIHJldHVybiBDcGZDbnBqVmFsaWRhdG9yLnZhbGlkYXRlKGMpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Breadcrumbs padrão Sispro.
|
|
5
|
+
*
|
|
6
|
+
* ## Utilização
|
|
7
|
+
*
|
|
8
|
+
* Colocar o componente infra-breadcrumb com elementos li que possuem o seletor infra-breadcrumb-item.
|
|
9
|
+
* Como demonstrado da seguinte forma:
|
|
10
|
+
*
|
|
11
|
+
* <infra-breadcrumb>
|
|
12
|
+
* <li infra-breadcrumb-item>
|
|
13
|
+
* <a routerLinkActive="/home">Home</a>
|
|
14
|
+
* </li>
|
|
15
|
+
* <li infra-breadcrumb-item>
|
|
16
|
+
* Consultar
|
|
17
|
+
* </li>
|
|
18
|
+
* </infra-breadcrumb>
|
|
19
|
+
*
|
|
20
|
+
* ## Peculiaridades
|
|
21
|
+
*
|
|
22
|
+
* Não é necessário colocar o item como ativo pois ele verifica se algum dos filhos do elemento li é
|
|
23
|
+
* uma âncora (<a></a>)
|
|
24
|
+
*
|
|
25
|
+
*/
|
|
26
|
+
export class InfraBreadcrumbComponent {
|
|
27
|
+
constructor() { }
|
|
28
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: InfraBreadcrumbComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
29
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: InfraBreadcrumbComponent, selector: "infra-breadcrumb", ngImport: i0, template: "<ol class=\"breadcrumb position\">\n <ng-content></ng-content>\n</ol>", styles: [""] }); }
|
|
30
|
+
}
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: InfraBreadcrumbComponent, decorators: [{
|
|
32
|
+
type: Component,
|
|
33
|
+
args: [{ selector: 'infra-breadcrumb', template: "<ol class=\"breadcrumb position\">\n <ng-content></ng-content>\n</ol>" }]
|
|
34
|
+
}], ctorParameters: function () { return []; } });
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mcmEtYnJlYWRjcnVtYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL2JyZWFkY3J1bWIvaW5mcmEtYnJlYWRjcnVtYi9pbmZyYS1icmVhZGNydW1iLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zcC1pbmZyYS9zcmMvbGliL3dpZGdldHMvYnJlYWRjcnVtYi9pbmZyYS1icmVhZGNydW1iL2luZnJhLWJyZWFkY3J1bWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFDMUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFNSCxNQUFNLE9BQU8sd0JBQXdCO0lBRW5DLGdCQUFnQixDQUFDOzhHQUZOLHdCQUF3QjtrR0FBeEIsd0JBQXdCLHdEQzdCckMsMEVBRUs7OzJGRDJCUSx3QkFBd0I7a0JBTHBDLFNBQVM7K0JBQ0Usa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4vKipcbiAqIEJyZWFkY3J1bWJzIHBhZHLDo28gU2lzcHJvLlxuICogXG4gKiAjIyBVdGlsaXphw6fDo29cbiAqIFxuICogQ29sb2NhciBvIGNvbXBvbmVudGUgaW5mcmEtYnJlYWRjcnVtYiBjb20gZWxlbWVudG9zIGxpIHF1ZSBwb3NzdWVtIG8gc2VsZXRvciBpbmZyYS1icmVhZGNydW1iLWl0ZW0uXG4gKiBDb21vIGRlbW9uc3RyYWRvIGRhIHNlZ3VpbnRlIGZvcm1hOlxuICogXG4gKiAgPGluZnJhLWJyZWFkY3J1bWI+XG4gKiAgICA8bGkgaW5mcmEtYnJlYWRjcnVtYi1pdGVtPlxuICogICAgICA8YSByb3V0ZXJMaW5rQWN0aXZlPVwiL2hvbWVcIj5Ib21lPC9hPlxuICogICAgPC9saT5cbiAqICAgIDxsaSBpbmZyYS1icmVhZGNydW1iLWl0ZW0+XG4gKiAgICAgIENvbnN1bHRhclxuICogICAgPC9saT5cbiAqICA8L2luZnJhLWJyZWFkY3J1bWI+XG4gKiBcbiAqICMjIFBlY3VsaWFyaWRhZGVzXG4gKiBcbiAqIE7Do28gw6kgbmVjZXNzw6FyaW8gY29sb2NhciBvIGl0ZW0gY29tbyBhdGl2byBwb2lzIGVsZSB2ZXJpZmljYSBzZSBhbGd1bSBkb3MgZmlsaG9zIGRvIGVsZW1lbnRvIGxpIMOpXG4gKiB1bWEgw6JuY29yYSAoPGE+PC9hPilcbiAqIFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpbmZyYS1icmVhZGNydW1iJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2luZnJhLWJyZWFkY3J1bWIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbmZyYS1icmVhZGNydW1iLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBJbmZyYUJyZWFkY3J1bWJDb21wb25lbnQge1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbn1cbiIsIjxvbCBjbGFzcz1cImJyZWFkY3J1bWIgcG9zaXRpb25cIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L29sPiJdfQ==
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Item da lista padrão da Sispro.
|
|
5
|
+
*
|
|
6
|
+
* Deve ser utilizado em conjunto com o InfraBreadCrumb
|
|
7
|
+
*/
|
|
8
|
+
export class InfraBreadcrumbItemComponent {
|
|
9
|
+
constructor(elem) {
|
|
10
|
+
this.elem = elem;
|
|
11
|
+
}
|
|
12
|
+
ngOnInit() {
|
|
13
|
+
this.elem.nativeElement.classList.add("breadcrumb-item");
|
|
14
|
+
if (this.elem.nativeElement.children.length > 0) {
|
|
15
|
+
let isAnchor = this.elem.nativeElement.children[0] instanceof HTMLAnchorElement;
|
|
16
|
+
if (isAnchor) {
|
|
17
|
+
this.elem.nativeElement.classList.add("active");
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: InfraBreadcrumbItemComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
22
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: InfraBreadcrumbItemComponent, selector: "li[infra-breadcrumb-item]", ngImport: i0, template: "<ng-content></ng-content>", styles: [""] }); }
|
|
23
|
+
}
|
|
24
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: InfraBreadcrumbItemComponent, decorators: [{
|
|
25
|
+
type: Component,
|
|
26
|
+
args: [{ selector: 'li[infra-breadcrumb-item]', template: "<ng-content></ng-content>" }]
|
|
27
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mcmEtYnJlYWRjcnVtYi1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zcC1pbmZyYS9zcmMvbGliL3dpZGdldHMvYnJlYWRjcnVtYi9pbmZyYS1icmVhZGNydW1iLWl0ZW0vaW5mcmEtYnJlYWRjcnVtYi1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zcC1pbmZyYS9zcmMvbGliL3dpZGdldHMvYnJlYWRjcnVtYi9pbmZyYS1icmVhZGNydW1iLWl0ZW0vaW5mcmEtYnJlYWRjcnVtYi1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXNCLE1BQU0sZUFBZSxDQUFDOztBQUU5RDs7OztHQUlHO0FBT0gsTUFBTSxPQUFPLDRCQUE0QjtJQUV2QyxZQUFvQixJQUFxQztRQUFyQyxTQUFJLEdBQUosSUFBSSxDQUFpQztJQUFJLENBQUM7SUFFOUQsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtRQUV4RCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQy9DLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWSxpQkFBaUIsQ0FBQztZQUVoRixJQUFJLFFBQVEsRUFBRTtnQkFDWixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ2pEO1NBQ0Y7SUFDSCxDQUFDOzhHQWRVLDRCQUE0QjtrR0FBNUIsNEJBQTRCLGlFQ2J6QywyQkFBeUI7OzJGRGFaLDRCQUE0QjtrQkFOeEMsU0FBUzsrQkFFRSwyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEl0ZW0gZGEgbGlzdGEgcGFkcsOjbyBkYSBTaXNwcm8uXG4gKiBcbiAqIERldmUgc2VyIHV0aWxpemFkbyBlbSBjb25qdW50byBjb20gbyBJbmZyYUJyZWFkQ3J1bWJcbiAqL1xuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlbaW5mcmEtYnJlYWRjcnVtYi1pdGVtXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbmZyYS1icmVhZGNydW1iLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbmZyYS1icmVhZGNydW1iLWl0ZW0uY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIEluZnJhQnJlYWRjcnVtYkl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbTogRWxlbWVudFJlZjxIVE1MRGF0YUxpc3RFbGVtZW50PikgeyB9XG4gIFxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmVsZW0ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiYnJlYWRjcnVtYi1pdGVtXCIpXG4gICAgXG4gICAgaWYgKHRoaXMuZWxlbS5uYXRpdmVFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBpc0FuY2hvciA9IHRoaXMuZWxlbS5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdIGluc3RhbmNlb2YgSFRNTEFuY2hvckVsZW1lbnQ7XG4gICAgICBcbiAgICAgIGlmIChpc0FuY2hvcikge1xuICAgICAgICB0aGlzLmVsZW0ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PiJdfQ==
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class BreadcrumbComponent {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.menu = '';
|
|
6
|
+
this.opcao = '';
|
|
7
|
+
}
|
|
8
|
+
ngOnInit() {
|
|
9
|
+
}
|
|
10
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: BreadcrumbComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: BreadcrumbComponent, selector: "app-breadcrumb", inputs: { menu: "menu", opcao: "opcao" }, ngImport: i0, template: "<!-- Breadcrumb -->\n<ol class=\"breadcrumb\">\n <li class=\"breadcrumb-item active\">{{ menu }}</li>\n <li class=\"breadcrumb-item\">{{ opcao }}</li>\n</ol>\n", styles: [""] }); }
|
|
12
|
+
}
|
|
13
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: BreadcrumbComponent, decorators: [{
|
|
14
|
+
type: Component,
|
|
15
|
+
args: [{ selector: 'app-breadcrumb', template: "<!-- Breadcrumb -->\n<ol class=\"breadcrumb\">\n <li class=\"breadcrumb-item active\">{{ menu }}</li>\n <li class=\"breadcrumb-item\">{{ opcao }}</li>\n</ol>\n" }]
|
|
16
|
+
}], ctorParameters: function () { return []; }, propDecorators: { menu: [{
|
|
17
|
+
type: Input
|
|
18
|
+
}], opcao: [{
|
|
19
|
+
type: Input
|
|
20
|
+
}] } });
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL2JyZWFkY3J1bWIvcG9ydGFscmgtYnJlYWRjcnVtYi9icmVhZGNydW1iLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zcC1pbmZyYS9zcmMvbGliL3dpZGdldHMvYnJlYWRjcnVtYi9wb3J0YWxyaC1icmVhZGNydW1iL2JyZWFkY3J1bWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBT3pELE1BQU0sT0FBTyxtQkFBbUI7SUFLOUI7UUFIUyxTQUFJLEdBQVcsRUFBRSxDQUFDO1FBQ2xCLFVBQUssR0FBVyxFQUFFLENBQUM7SUFFWixDQUFDO0lBRWpCLFFBQVE7SUFDUixDQUFDOzhHQVJVLG1CQUFtQjtrR0FBbkIsbUJBQW1CLGdHQ1BoQyx1S0FLQTs7MkZERWEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGdCQUFnQjswRUFNakIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtYnJlYWRjcnVtYicsXG4gIHRlbXBsYXRlVXJsOiAnLi9icmVhZGNydW1iLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYnJlYWRjcnVtYi5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQnJlYWRjcnVtYkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIFxuICBASW5wdXQoKSBtZW51OiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgb3BjYW86IHN0cmluZyA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gIH1cblxufVxuIiwiPCEtLSBCcmVhZGNydW1iIC0tPlxuPG9sIGNsYXNzPVwiYnJlYWRjcnVtYlwiPlxuICAgIDxsaSBjbGFzcz1cImJyZWFkY3J1bWItaXRlbSBhY3RpdmVcIj57eyBtZW51IH19PC9saT5cbiAgICA8bGkgY2xhc3M9XCJicmVhZGNydW1iLWl0ZW1cIj57eyBvcGNhbyB9fTwvbGk+XG48L29sPlxuIl19
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { Directive, EventEmitter, Inject, Input, Output, } from '@angular/core';
|
|
2
|
+
import { DOCUMENT } from '@angular/common';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class ClickOutsideDirective {
|
|
5
|
+
constructor(_el, _ngZone, document) {
|
|
6
|
+
this._el = _el;
|
|
7
|
+
this._ngZone = _ngZone;
|
|
8
|
+
this.document = document;
|
|
9
|
+
this.clickOutsideEnabled = true;
|
|
10
|
+
this.attachOutsideOnClick = false;
|
|
11
|
+
this.delayClickOutsideInit = false;
|
|
12
|
+
this.emitOnBlur = false;
|
|
13
|
+
this.exclude = '';
|
|
14
|
+
this.excludeBeforeClick = false;
|
|
15
|
+
this.clickOutsideEvents = '';
|
|
16
|
+
this.clickOutside = new EventEmitter();
|
|
17
|
+
this._nodesExcluded = [];
|
|
18
|
+
this._events = ['click'];
|
|
19
|
+
this._initOnClickBody = this._initOnClickBody.bind(this);
|
|
20
|
+
this._onClickBody = this._onClickBody.bind(this);
|
|
21
|
+
this._onWindowBlur = this._onWindowBlur.bind(this);
|
|
22
|
+
}
|
|
23
|
+
ngOnInit() {
|
|
24
|
+
this._init();
|
|
25
|
+
}
|
|
26
|
+
ngOnDestroy() {
|
|
27
|
+
this._removeClickOutsideListener();
|
|
28
|
+
this._removeAttachOutsideOnClickListener();
|
|
29
|
+
this._removeWindowBlurListener();
|
|
30
|
+
}
|
|
31
|
+
ngOnChanges(changes) {
|
|
32
|
+
if (changes['attachOutsideOnClick'] || changes['exclude'] || changes['emitOnBlur']) {
|
|
33
|
+
this._init();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
_init() {
|
|
37
|
+
if (this.clickOutsideEvents !== '') {
|
|
38
|
+
this._events = this.clickOutsideEvents.split(',').map(e => e.trim());
|
|
39
|
+
}
|
|
40
|
+
this._excludeCheck();
|
|
41
|
+
if (this.attachOutsideOnClick) {
|
|
42
|
+
this._initAttachOutsideOnClickListener();
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
this._initOnClickBody();
|
|
46
|
+
}
|
|
47
|
+
if (this.emitOnBlur) {
|
|
48
|
+
this._initWindowBlurListener();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
_initOnClickBody() {
|
|
52
|
+
if (this.delayClickOutsideInit) {
|
|
53
|
+
setTimeout(this._initClickOutsideListener.bind(this));
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
this._initClickOutsideListener();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
_excludeCheck() {
|
|
60
|
+
if (this.exclude) {
|
|
61
|
+
try {
|
|
62
|
+
const nodes = Array.from(this.document.querySelectorAll(this.exclude));
|
|
63
|
+
if (nodes) {
|
|
64
|
+
this._nodesExcluded = nodes;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
console.error('[ng-click-outside] Check your exclude selector syntax.', err);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
_onClickBody(ev) {
|
|
73
|
+
if (!this.clickOutsideEnabled) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (this.excludeBeforeClick) {
|
|
77
|
+
this._excludeCheck();
|
|
78
|
+
}
|
|
79
|
+
if (!this._el.nativeElement.contains(ev.target) && !this._shouldExclude(ev.target)) {
|
|
80
|
+
this._emit(ev);
|
|
81
|
+
if (this.attachOutsideOnClick) {
|
|
82
|
+
this._removeClickOutsideListener();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Resolves problem with outside click on iframe
|
|
88
|
+
* @see https://github.com/arkon/ng-click-outside/issues/32
|
|
89
|
+
*/
|
|
90
|
+
_onWindowBlur(ev) {
|
|
91
|
+
setTimeout(() => {
|
|
92
|
+
if (!this.document.hidden) {
|
|
93
|
+
this._emit(ev);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
_emit(ev) {
|
|
98
|
+
if (!this.clickOutsideEnabled) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
this._ngZone.run(() => this.clickOutside.emit(ev));
|
|
102
|
+
}
|
|
103
|
+
_shouldExclude(target) {
|
|
104
|
+
for (let excludedNode of this._nodesExcluded) {
|
|
105
|
+
if (excludedNode.contains(target)) {
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
_initClickOutsideListener() {
|
|
112
|
+
this._ngZone.runOutsideAngular(() => {
|
|
113
|
+
this._events.forEach(e => this.document.addEventListener(e, this._onClickBody));
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
_removeClickOutsideListener() {
|
|
117
|
+
this._ngZone.runOutsideAngular(() => {
|
|
118
|
+
this._events.forEach(e => this.document.removeEventListener(e, this._onClickBody));
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
_initAttachOutsideOnClickListener() {
|
|
122
|
+
this._ngZone.runOutsideAngular(() => {
|
|
123
|
+
this._events.forEach(e => this._el.nativeElement.addEventListener(e, this._initOnClickBody));
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
_removeAttachOutsideOnClickListener() {
|
|
127
|
+
this._ngZone.runOutsideAngular(() => {
|
|
128
|
+
this._events.forEach(e => this._el.nativeElement.removeEventListener(e, this._initOnClickBody));
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
_initWindowBlurListener() {
|
|
132
|
+
this._ngZone.runOutsideAngular(() => {
|
|
133
|
+
window.addEventListener('blur', this._onWindowBlur);
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
_removeWindowBlurListener() {
|
|
137
|
+
this._ngZone.runOutsideAngular(() => {
|
|
138
|
+
window.removeEventListener('blur', this._onWindowBlur);
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: ClickOutsideDirective, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
142
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.2", type: ClickOutsideDirective, selector: "[clickOutside]", inputs: { clickOutsideEnabled: "clickOutsideEnabled", attachOutsideOnClick: "attachOutsideOnClick", delayClickOutsideInit: "delayClickOutsideInit", emitOnBlur: "emitOnBlur", exclude: "exclude", excludeBeforeClick: "excludeBeforeClick", clickOutsideEvents: "clickOutsideEvents" }, outputs: { clickOutside: "clickOutside" }, usesOnChanges: true, ngImport: i0 }); }
|
|
143
|
+
}
|
|
144
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: ClickOutsideDirective, decorators: [{
|
|
145
|
+
type: Directive,
|
|
146
|
+
args: [{ selector: '[clickOutside]' }]
|
|
147
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: Document, decorators: [{
|
|
148
|
+
type: Inject,
|
|
149
|
+
args: [DOCUMENT]
|
|
150
|
+
}] }]; }, propDecorators: { clickOutsideEnabled: [{
|
|
151
|
+
type: Input
|
|
152
|
+
}], attachOutsideOnClick: [{
|
|
153
|
+
type: Input
|
|
154
|
+
}], delayClickOutsideInit: [{
|
|
155
|
+
type: Input
|
|
156
|
+
}], emitOnBlur: [{
|
|
157
|
+
type: Input
|
|
158
|
+
}], exclude: [{
|
|
159
|
+
type: Input
|
|
160
|
+
}], excludeBeforeClick: [{
|
|
161
|
+
type: Input
|
|
162
|
+
}], clickOutsideEvents: [{
|
|
163
|
+
type: Input
|
|
164
|
+
}], clickOutside: [{
|
|
165
|
+
type: Output
|
|
166
|
+
}] } });
|
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpY2tvdXRzaWRlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zcC1pbmZyYS9zcmMvbGliL3dpZGdldHMvY2xpY2stb3V0c2lkZS9jbGlja291dHNpZGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixTQUFTLEVBRVQsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBS0wsTUFBTSxHQUVGLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7QUFHekMsTUFBTSxPQUFPLHFCQUFxQjtJQWtCckMsWUFDVSxHQUFlLEVBQ2YsT0FBZSxFQUNHLFFBQWtCO1FBRnBDLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFDZixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ0csYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQW5CckMsd0JBQW1CLEdBQUcsSUFBSSxDQUFDO1FBRTNCLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUM3QiwwQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDOUIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUVuQixZQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBRTNCLHVCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUV2QixpQkFBWSxHQUF3QixJQUFJLFlBQVksRUFBUyxDQUFDO1FBRWhFLG1CQUFjLEdBQXVCLEVBQUUsQ0FBQztRQUN4QyxZQUFPLEdBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFNekMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztR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O3NCQUEzQixLQUFLO2dCQUVHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFSSxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0RGlyZWN0aXZlLFxuXHRFbGVtZW50UmVmLFxuXHRFdmVudEVtaXR0ZXIsXG5cdEluamVjdCxcblx0SW5wdXQsXG5cdE5nWm9uZSxcblx0T25DaGFuZ2VzLFxuXHRPbkRlc3Ryb3ksXG5cdE9uSW5pdCxcblx0T3V0cHV0LFxuXHRTaW1wbGVDaGFuZ2VzLFxuICAgIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gICAgaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbiAgICBcbiAgICBARGlyZWN0aXZlKHtzZWxlY3RvcjogJ1tjbGlja091dHNpZGVdJ30pXG4gICAgZXhwb3J0IGNsYXNzIENsaWNrT3V0c2lkZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAgIFxuXHRASW5wdXQoKSBjbGlja091dHNpZGVFbmFibGVkID0gdHJ1ZTtcbiAgICBcblx0QElucHV0KCkgYXR0YWNoT3V0c2lkZU9uQ2xpY2sgPSBmYWxzZTtcblx0QElucHV0KCkgZGVsYXlDbGlja091dHNpZGVJbml0ID0gZmFsc2U7XG5cdEBJbnB1dCgpIGVtaXRPbkJsdXIgPSBmYWxzZTtcbiAgICBcblx0QElucHV0KCkgZXhjbHVkZSA9ICcnO1xuXHRASW5wdXQoKSBleGNsdWRlQmVmb3JlQ2xpY2sgPSBmYWxzZTtcbiAgICBcblx0QElucHV0KCkgY2xpY2tPdXRzaWRlRXZlbnRzID0gJyc7XG4gICAgXG5cdEBPdXRwdXQoKSBjbGlja091dHNpZGU6IEV2ZW50RW1pdHRlcjxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICAgIFxuXHRwcml2YXRlIF9ub2Rlc0V4Y2x1ZGVkOiBBcnJheTxIVE1MRWxlbWVudD4gPSBbXTtcblx0cHJpdmF0ZSBfZXZlbnRzOiBBcnJheTxzdHJpbmc+ID0gWydjbGljayddO1xuICAgIFxuXHRjb25zdHJ1Y3Rvcihcblx0ICBwcml2YXRlIF9lbDogRWxlbWVudFJlZixcblx0ICBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSxcblx0ICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCkge1xuXHQgIHRoaXMuX2luaXRPbkNsaWNrQm9keSA9IHRoaXMuX2luaXRPbkNsaWNrQm9keS5iaW5kKHRoaXMpO1xuXHQgIHRoaXMuX29uQ2xpY2tCb2R5ID0gdGhpcy5fb25DbGlja0JvZHkuYmluZCh0aGlzKTtcblx0ICB0aGlzLl9vbldpbmRvd0JsdXIgPSB0aGlzLl9vbldpbmRvd0JsdXIuYmluZCh0aGlzKTtcblx0fVxuICAgIFxuXHRuZ09uSW5pdCgpIHtcblx0ICB0aGlzLl9pbml0KCk7XG5cdH1cbiAgICBcblx0bmdPbkRlc3Ryb3koKSB7XG5cdCAgdGhpcy5fcmVtb3ZlQ2xpY2tPdXRzaWRlTGlzdGVuZXIoKTtcblx0ICB0aGlzLl9yZW1vdmVBdHRhY2hPdXRzaWRlT25DbGlja0xpc3RlbmVyKCk7XG5cdCAgdGhpcy5fcmVtb3ZlV2luZG93Qmx1ckxpc3RlbmVyKCk7XG5cdH1cbiAgICBcblx0bmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuXHQgIGlmIChjaGFuZ2VzWydhdHRhY2hPdXRzaWRlT25DbGljayddIHx8IGNoYW5nZXNbJ2V4Y2x1ZGUnXSB8fCBjaGFuZ2VzWydlbWl0T25CbHVyJ10pIHtcblx0ICAgIHRoaXMuX2luaXQoKTtcblx0ICB9XG5cdH1cbiAgICBcblx0cHJpdmF0ZSBfaW5pdCgpIHtcblx0ICBpZiAodGhpcy5jbGlja091dHNpZGVFdmVudHMgIT09ICcnKSB7XG5cdCAgICB0aGlzLl9ldmVudHMgPSB0aGlzLmNsaWNrT3V0c2lkZUV2ZW50cy5zcGxpdCgnLCcpLm1hcChlID0+IGUudHJpbSgpKTtcblx0ICB9XG4gICAgXG5cdCAgdGhpcy5fZXhjbHVkZUNoZWNrKCk7XG4gICAgXG5cdCAgaWYgKHRoaXMuYXR0YWNoT3V0c2lkZU9uQ2xpY2spIHtcblx0ICAgIHRoaXMuX2luaXRBdHRhY2hPdXRzaWRlT25DbGlja0xpc3RlbmVyKCk7XG5cdCAgfSBlbHNlIHtcblx0ICAgIHRoaXMuX2luaXRPbkNsaWNrQm9keSgpO1xuXHQgIH1cbiAgICBcblx0ICBpZiAodGhpcy5lbWl0T25CbHVyKSB7XG5cdCAgICB0aGlzLl9pbml0V2luZG93Qmx1ckxpc3RlbmVyKCk7XG5cdCAgfVxuXHR9XG4gICAgXG5cdHByaXZhdGUgX2luaXRPbkNsaWNrQm9keSgpIHtcblx0ICBpZiAodGhpcy5kZWxheUNsaWNrT3V0c2lkZUluaXQpIHtcblx0ICAgIHNldFRpbWVvdXQodGhpcy5faW5pdENsaWNrT3V0c2lkZUxpc3RlbmVyLmJpbmQodGhpcykpO1xuXHQgIH0gZWxzZSB7XG5cdCAgICB0aGlzLl9pbml0Q2xpY2tPdXRzaWRlTGlzdGVuZXIoKTtcblx0ICB9XG5cdH1cbiAgICBcblx0cHJpdmF0ZSBfZXhjbHVkZUNoZWNrKCkge1xuXHQgIGlmICh0aGlzLmV4Y2x1ZGUpIHtcblx0ICAgIHRyeSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0aGlzLmV4Y2x1ZGUpKSBhcyBBcnJheTxIVE1MRWxlbWVudD47XG5cdFx0aWYgKG5vZGVzKSB7XG5cdFx0ICB0aGlzLl9ub2Rlc0V4Y2x1ZGVkID0gbm9kZXM7XG5cdFx0fVxuXHQgICAgfSBjYXRjaCAoZXJyKSB7XG5cdFx0Y29uc29sZS5lcnJvcignW25nLWNsaWNrLW91dHNpZGVdIENoZWNrIHlvdXIgZXhjbHVkZSBzZWxlY3RvciBzeW50YXguJywgZXJyKTtcblx0ICAgIH1cblx0ICB9XG5cdH1cbiAgICBcblx0cHJpdmF0ZSBfb25DbGlja0JvZHkoZXY6IEV2ZW50KSB7XG5cdCAgaWYgKCF0aGlzLmNsaWNrT3V0c2lkZUVuYWJsZWQpIHtcblx0ICAgIHJldHVybjtcblx0ICB9XG4gICAgXG5cdCAgaWYgKHRoaXMuZXhjbHVkZUJlZm9yZUNsaWNrKSB7XG5cdCAgICB0aGlzLl9leGNsdWRlQ2hlY2soKTtcblx0ICB9XG4gICAgXG5cdCAgaWYgKCF0aGlzLl9lbC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2LnRhcmdldCkgJiYgIXRoaXMuX3Nob3VsZEV4Y2x1ZGUoZXYudGFyZ2V0KSkge1xuXHQgICAgdGhpcy5fZW1pdChldik7XG4gICAgXG5cdCAgICBpZiAodGhpcy5hdHRhY2hPdXRzaWRlT25DbGljaykge1xuXHRcdHRoaXMuX3JlbW92ZUNsaWNrT3V0c2lkZUxpc3RlbmVyKCk7XG5cdCAgICB9XG5cdCAgfVxuXHR9XG4gICAgXG5cdC8qKlxuXHQgKiBSZXNvbHZlcyBwcm9ibGVtIHdpdGggb3V0c2lkZSBjbGljayBvbiBpZnJhbWVcblx0ICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXJrb24vbmctY2xpY2stb3V0c2lkZS9pc3N1ZXMvMzJcblx0ICovXG5cdHByaXZhdGUgX29uV2luZG93Qmx1cihldjogRXZlbnQpIHtcblx0ICBzZXRUaW1lb3V0KCgpID0+IHtcblx0ICAgIGlmICghdGhpcy5kb2N1bWVudC5oaWRkZW4pIHtcblx0XHR0aGlzLl9lbWl0KGV2KTtcblx0ICAgIH1cblx0ICB9KTtcblx0fVxuICAgIFxuXHRwcml2YXRlIF9lbWl0KGV2OiBFdmVudCkge1xuXHQgIGlmICghdGhpcy5jbGlja091dHNpZGVFbmFibGVkKSB7XG5cdCAgICByZXR1cm47XG5cdCAgfVxuICAgIFxuXHQgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5jbGlja091dHNpZGUuZW1pdChldikpO1xuXHR9XG4gICAgXG5cdHByaXZhdGUgX3Nob3VsZEV4Y2x1ZGUodGFyZ2V0OiBhbnkpOiBib29sZWFuIHtcblx0ICBmb3IgKGxldCBleGNsdWRlZE5vZGUgb2YgdGhpcy5fbm9kZXNFeGNsdWRlZCkge1xuXHQgICAgaWYgKGV4Y2x1ZGVkTm9kZS5jb250YWlucyh0YXJnZXQpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdCAgICB9XG5cdCAgfVxuICAgIFxuXHQgIHJldHVybiBmYWxzZTtcblx0fVxuICAgIFxuXHRwcml2YXRlIF9pbml0Q2xpY2tPdXRzaWRlTGlzdGVuZXIoKSB7XG5cdCAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblx0ICAgIHRoaXMuX2V2ZW50cy5mb3JFYWNoKGUgPT4gdGhpcy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGUsIHRoaXMuX29uQ2xpY2tCb2R5KSk7XG5cdCAgfSk7XG5cdH1cbiAgICBcblx0cHJpdmF0ZSBfcmVtb3ZlQ2xpY2tPdXRzaWRlTGlzdGVuZXIoKSB7XG5cdCAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblx0ICAgIHRoaXMuX2V2ZW50cy5mb3JFYWNoKGUgPT4gdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGUsIHRoaXMuX29uQ2xpY2tCb2R5KSk7XG5cdCAgfSk7XG5cdH1cbiAgICBcblx0cHJpdmF0ZSBfaW5pdEF0dGFjaE91dHNpZGVPbkNsaWNrTGlzdGVuZXIoKSB7XG5cdCAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblx0ICAgIHRoaXMuX2V2ZW50cy5mb3JFYWNoKGUgPT4gdGhpcy5fZWwubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGUsIHRoaXMuX2luaXRPbkNsaWNrQm9keSkpO1xuXHQgIH0pO1xuXHR9XG4gICAgXG5cdHByaXZhdGUgX3JlbW92ZUF0dGFjaE91dHNpZGVPbkNsaWNrTGlzdGVuZXIoKSB7XG5cdCAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblx0ICAgIHRoaXMuX2V2ZW50cy5mb3JFYWNoKGUgPT4gdGhpcy5fZWwubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGUsIHRoaXMuX2luaXRPbkNsaWNrQm9keSkpO1xuXHQgIH0pO1xuXHR9XG4gICAgXG5cdHByaXZhdGUgX2luaXRXaW5kb3dCbHVyTGlzdGVuZXIoKSB7XG5cdCAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblx0ICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5fb25XaW5kb3dCbHVyKTtcblx0ICB9KTtcblx0fVxuICAgIFxuXHRwcml2YXRlIF9yZW1vdmVXaW5kb3dCbHVyTGlzdGVuZXIoKSB7XG5cdCAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblx0ICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5fb25XaW5kb3dCbHVyKTtcblx0ICB9KTtcblx0fVxuICAgIFxuICAgIH0iXX0=
|