@seniorsistemas/angular-components 19.6.2 → 19.7.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.
Files changed (33) hide show
  1. package/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.d.ts +1 -1
  2. package/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.d.ts +1 -1
  3. package/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.d.ts +1 -1
  4. package/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.d.ts +1 -2
  5. package/esm2022/alert/lib/alert/alert.component.mjs +3 -3
  6. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.mjs +1 -1
  7. package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +16 -17
  8. package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +20 -23
  9. package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +9 -10
  10. package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +9 -15
  11. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +4 -4
  12. package/esm2022/inline-edit/lib/inline-edit/fields/inline-edit-number-field.mjs +1 -1
  13. package/esm2022/inline-edit/lib/inline-edit/inline-edit.module.mjs +4 -5
  14. package/esm2022/input-mask/lib/input-mask/input-mask.directive.mjs +460 -0
  15. package/esm2022/input-mask/lib/input-mask/input-mask.module.mjs +16 -0
  16. package/esm2022/input-mask/public-api.mjs +3 -0
  17. package/esm2022/input-mask/seniorsistemas-angular-components-input-mask.mjs +5 -0
  18. package/fesm2022/seniorsistemas-angular-components-alert.mjs +2 -2
  19. package/fesm2022/seniorsistemas-angular-components-alert.mjs.map +1 -1
  20. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +53 -62
  21. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  22. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +6 -7
  23. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  24. package/fesm2022/seniorsistemas-angular-components-input-mask.mjs +480 -0
  25. package/fesm2022/seniorsistemas-angular-components-input-mask.mjs.map +1 -0
  26. package/inline-edit/lib/inline-edit/fields/inline-edit-number-field.d.ts +2 -2
  27. package/inline-edit/lib/inline-edit/inline-edit.module.d.ts +2 -2
  28. package/input-mask/README.md +183 -0
  29. package/input-mask/index.d.ts +5 -0
  30. package/input-mask/lib/input-mask/input-mask.directive.d.ts +103 -0
  31. package/input-mask/lib/input-mask/input-mask.module.d.ts +7 -0
  32. package/input-mask/public-api.d.ts +2 -0
  33. package/package.json +43 -37
@@ -34,4 +34,4 @@ export class InlineEditNumberField extends InlineEditField {
34
34
  this.placeholder = options.placeholder ?? "";
35
35
  }
36
36
  }
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLWVkaXQtbnVtYmVyLWZpZWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2lubGluZS1lZGl0L3NyYy9saWIvaW5saW5lLWVkaXQvZmllbGRzL2lubGluZS1lZGl0LW51bWJlci1maWVsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsZUFBZSxFQUEwQixNQUFNLHFCQUFxQixDQUFDO0FBcUI5RSxNQUFNLE9BQU8scUJBQXNCLFNBQVEsZUFBZTtJQUMvQyxhQUFhLENBQVc7SUFDeEIsbUJBQW1CLENBQXVCO0lBQzFDLG1CQUFtQixDQUFXO0lBQzlCLFNBQVMsQ0FBcUI7SUFDOUIsS0FBSyxDQUFxQjtJQUMxQixPQUFPLENBQW1CO0lBQzFCLElBQUksQ0FBb0I7SUFDeEIsU0FBUyxDQUFlO0lBQ3hCLFVBQVUsQ0FBZTtJQUN6QixXQUFXLENBQVU7SUFDckIsU0FBUyxDQUFXO0lBQ3BCLE1BQU0sQ0FBMEI7SUFDaEMsT0FBTyxDQUEwQjtJQUNqQyxVQUFVLENBQTBCO0lBQ3BDLE9BQU8sQ0FBMEI7SUFFeEMsWUFBWSxPQUFxQztRQUM3QyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDO1FBQ25ELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUM7UUFDdkQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztRQUN2RCxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzdDLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDO1FBQzNDLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7SUFDakQsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTnVtYmVyTG9jYWxlT3B0aW9ucyB9IGZyb20gXCJAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2xvY2FsZVwiO1xuXG5pbXBvcnQgeyBBZGRvbkNvbmZpZyB9IGZyb20gXCIuLi90eXBlcy9hZGRvbi1jb25maWdcIjtcbmltcG9ydCB7IElubGluZUVkaXRGaWVsZCwgSW5saW5lRWRpdEZpZWxkT3B0aW9ucyB9IGZyb20gXCIuL2lubGluZS1lZGl0LWZpZWxkXCI7XG5cbnR5cGUgc3RyaW5GbiA9ICgpID0+IHN0cmluZ1xuXG5leHBvcnQgaW50ZXJmYWNlIElubGluZUVkaXROdW1iZXJGaWVsZE9wdGlvbnMgZXh0ZW5kcyBJbmxpbmVFZGl0RmllbGRPcHRpb25zIHtcbiAgICBhbGxvd05lZ2F0aXZlPzogYm9vbGVhbjtcbiAgICBudW1iZXJMb2NhbGVPcHRpb25zPzogTnVtYmVyTG9jYWxlT3B0aW9ucztcbiAgICBicm93c2VyQXV0b2NvbXBsZXRlPzogYm9vbGVhbjtcbiAgICBwcmVjaXNpb24/OiBGdW5jdGlvbiB8IG51bWJlcjtcbiAgICBzY2FsZT86IEZ1bmN0aW9uIHwgbnVtYmVyO1xuICAgIG1hc2s/OiBzdHJpbkZuIHwgc3RyaW5nO1xuICAgIGxlZnRBZGRvbj86IEFkZG9uQ29uZmlnO1xuICAgIHJpZ2h0QWRkb24/OiBBZGRvbkNvbmZpZztcbiAgICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgICBhdXRvQ2xlYXI/OiBib29sZWFuO1xuICAgIG9uQmx1cj86IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG4gICAgb25Gb2N1cz86IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG4gICAgb25Db21wbGV0ZT86IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG4gICAgb25JbnB1dD86IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBJbmxpbmVFZGl0TnVtYmVyRmllbGQgZXh0ZW5kcyBJbmxpbmVFZGl0RmllbGQge1xuICAgIHB1YmxpYyBhbGxvd05lZ2F0aXZlPzogYm9vbGVhbjtcbiAgICBwdWJsaWMgbnVtYmVyTG9jYWxlT3B0aW9ucz86IE51bWJlckxvY2FsZU9wdGlvbnM7XG4gICAgcHVibGljIGJyb3dzZXJBdXRvY29tcGxldGU/OiBib29sZWFuO1xuICAgIHB1YmxpYyBwcmVjaXNpb24/OiBGdW5jdGlvbiB8IG51bWJlcjtcbiAgICBwdWJsaWMgc2NhbGU/OiBGdW5jdGlvbiB8IG51bWJlcjtcbiAgICBwdWJsaWMgYWxpZ25UbzogJ2xlZnQnIHwgJ3JpZ2h0JztcbiAgICBwdWJsaWMgbWFzaz86IHN0cmluRm4gfCBzdHJpbmc7XG4gICAgcHVibGljIGxlZnRBZGRvbj86IEFkZG9uQ29uZmlnO1xuICAgIHB1YmxpYyByaWdodEFkZG9uPzogQWRkb25Db25maWc7XG4gICAgcHVibGljIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAgIHB1YmxpYyBhdXRvQ2xlYXI/OiBib29sZWFuO1xuICAgIHB1YmxpYyBvbkJsdXI/OiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkO1xuICAgIHB1YmxpYyBvbkZvY3VzPzogKGV2ZW50OiBFdmVudCkgPT4gdm9pZDtcbiAgICBwdWJsaWMgb25Db21wbGV0ZT86IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG4gICAgcHVibGljIG9uSW5wdXQ/OiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogSW5saW5lRWRpdE51bWJlckZpZWxkT3B0aW9ucykge1xuICAgICAgICBzdXBlcihvcHRpb25zKTtcblxuICAgICAgICB0aGlzLmFsbG93TmVnYXRpdmUgPSBvcHRpb25zLmFsbG93TmVnYXRpdmUgPz8gdHJ1ZTtcbiAgICAgICAgdGhpcy5udW1iZXJMb2NhbGVPcHRpb25zID0gb3B0aW9ucy5udW1iZXJMb2NhbGVPcHRpb25zO1xuICAgICAgICB0aGlzLmJyb3dzZXJBdXRvY29tcGxldGUgPSBvcHRpb25zLmJyb3dzZXJBdXRvY29tcGxldGU7XG4gICAgICAgIHRoaXMucHJlY2lzaW9uID0gb3B0aW9ucy5wcmVjaXNpb247XG4gICAgICAgIHRoaXMuc2NhbGUgPSBvcHRpb25zLnNjYWxlID8/IDI7XG4gICAgICAgIHRoaXMuYWxpZ25UbyA9IHRoaXMuc2NhbGUgPyAncmlnaHQnIDogJ2xlZnQnO1xuICAgICAgICB0aGlzLm1hc2sgPSBvcHRpb25zLm1hc2s7XG4gICAgICAgIHRoaXMubGVmdEFkZG9uID0gb3B0aW9ucy5sZWZ0QWRkb247XG4gICAgICAgIHRoaXMucmlnaHRBZGRvbiA9IG9wdGlvbnMucmlnaHRBZGRvbjtcbiAgICAgICAgdGhpcy5vbkJsdXIgPSBvcHRpb25zLm9uQmx1cjtcbiAgICAgICAgdGhpcy5vbkZvY3VzID0gb3B0aW9ucy5vbkZvY3VzO1xuICAgICAgICB0aGlzLm9uQ29tcGxldGUgPSBvcHRpb25zLm9uQ29tcGxldGU7XG4gICAgICAgIHRoaXMub25JbnB1dCA9IG9wdGlvbnMub25JbnB1dDtcbiAgICAgICAgdGhpcy5hdXRvQ2xlYXIgPSBvcHRpb25zLmF1dG9DbGVhciA/PyB0cnVlO1xuICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gb3B0aW9ucy5wbGFjZWhvbGRlciA/PyBcIlwiO1xuICAgIH1cbn1cbiJdfQ==
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLWVkaXQtbnVtYmVyLWZpZWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2lubGluZS1lZGl0L3NyYy9saWIvaW5saW5lLWVkaXQvZmllbGRzL2lubGluZS1lZGl0LW51bWJlci1maWVsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsZUFBZSxFQUEwQixNQUFNLHFCQUFxQixDQUFDO0FBcUI5RSxNQUFNLE9BQU8scUJBQXNCLFNBQVEsZUFBZTtJQUMvQyxhQUFhLENBQVc7SUFDeEIsbUJBQW1CLENBQXVCO0lBQzFDLG1CQUFtQixDQUFXO0lBQzlCLFNBQVMsQ0FBcUI7SUFDOUIsS0FBSyxDQUFxQjtJQUMxQixPQUFPLENBQW1CO0lBQzFCLElBQUksQ0FBb0I7SUFDeEIsU0FBUyxDQUFlO0lBQ3hCLFVBQVUsQ0FBZTtJQUN6QixXQUFXLENBQVU7SUFDckIsU0FBUyxDQUFXO0lBQ3BCLE1BQU0sQ0FBMEI7SUFDaEMsT0FBTyxDQUEwQjtJQUNqQyxVQUFVLENBQXdCO0lBQ2xDLE9BQU8sQ0FBMEI7SUFFeEMsWUFBWSxPQUFxQztRQUM3QyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDO1FBQ25ELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUM7UUFDdkQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztRQUN2RCxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzdDLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDO1FBQzNDLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7SUFDakQsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTnVtYmVyTG9jYWxlT3B0aW9ucyB9IGZyb20gXCJAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2xvY2FsZVwiO1xuXG5pbXBvcnQgeyBBZGRvbkNvbmZpZyB9IGZyb20gXCIuLi90eXBlcy9hZGRvbi1jb25maWdcIjtcbmltcG9ydCB7IElubGluZUVkaXRGaWVsZCwgSW5saW5lRWRpdEZpZWxkT3B0aW9ucyB9IGZyb20gXCIuL2lubGluZS1lZGl0LWZpZWxkXCI7XG5cbnR5cGUgc3RyaW5GbiA9ICgpID0+IHN0cmluZ1xuXG5leHBvcnQgaW50ZXJmYWNlIElubGluZUVkaXROdW1iZXJGaWVsZE9wdGlvbnMgZXh0ZW5kcyBJbmxpbmVFZGl0RmllbGRPcHRpb25zIHtcbiAgICBhbGxvd05lZ2F0aXZlPzogYm9vbGVhbjtcbiAgICBudW1iZXJMb2NhbGVPcHRpb25zPzogTnVtYmVyTG9jYWxlT3B0aW9ucztcbiAgICBicm93c2VyQXV0b2NvbXBsZXRlPzogYm9vbGVhbjtcbiAgICBwcmVjaXNpb24/OiBGdW5jdGlvbiB8IG51bWJlcjtcbiAgICBzY2FsZT86IEZ1bmN0aW9uIHwgbnVtYmVyO1xuICAgIG1hc2s/OiBzdHJpbkZuIHwgc3RyaW5nO1xuICAgIGxlZnRBZGRvbj86IEFkZG9uQ29uZmlnO1xuICAgIHJpZ2h0QWRkb24/OiBBZGRvbkNvbmZpZztcbiAgICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgICBhdXRvQ2xlYXI/OiBib29sZWFuO1xuICAgIG9uQmx1cj86IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG4gICAgb25Gb2N1cz86IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG4gICAgb25Db21wbGV0ZT86IChldmVudDogYW55KSA9PiB2b2lkO1xuICAgIG9uSW5wdXQ/OiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgSW5saW5lRWRpdE51bWJlckZpZWxkIGV4dGVuZHMgSW5saW5lRWRpdEZpZWxkIHtcbiAgICBwdWJsaWMgYWxsb3dOZWdhdGl2ZT86IGJvb2xlYW47XG4gICAgcHVibGljIG51bWJlckxvY2FsZU9wdGlvbnM/OiBOdW1iZXJMb2NhbGVPcHRpb25zO1xuICAgIHB1YmxpYyBicm93c2VyQXV0b2NvbXBsZXRlPzogYm9vbGVhbjtcbiAgICBwdWJsaWMgcHJlY2lzaW9uPzogRnVuY3Rpb24gfCBudW1iZXI7XG4gICAgcHVibGljIHNjYWxlPzogRnVuY3Rpb24gfCBudW1iZXI7XG4gICAgcHVibGljIGFsaWduVG86ICdsZWZ0JyB8ICdyaWdodCc7XG4gICAgcHVibGljIG1hc2s/OiBzdHJpbkZuIHwgc3RyaW5nO1xuICAgIHB1YmxpYyBsZWZ0QWRkb24/OiBBZGRvbkNvbmZpZztcbiAgICBwdWJsaWMgcmlnaHRBZGRvbj86IEFkZG9uQ29uZmlnO1xuICAgIHB1YmxpYyBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgICBwdWJsaWMgYXV0b0NsZWFyPzogYm9vbGVhbjtcbiAgICBwdWJsaWMgb25CbHVyPzogKGV2ZW50OiBFdmVudCkgPT4gdm9pZDtcbiAgICBwdWJsaWMgb25Gb2N1cz86IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG4gICAgcHVibGljIG9uQ29tcGxldGU/OiAoZXZlbnQ6IGFueSkgPT4gdm9pZDtcbiAgICBwdWJsaWMgb25JbnB1dD86IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJbmxpbmVFZGl0TnVtYmVyRmllbGRPcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuYWxsb3dOZWdhdGl2ZSA9IG9wdGlvbnMuYWxsb3dOZWdhdGl2ZSA/PyB0cnVlO1xuICAgICAgICB0aGlzLm51bWJlckxvY2FsZU9wdGlvbnMgPSBvcHRpb25zLm51bWJlckxvY2FsZU9wdGlvbnM7XG4gICAgICAgIHRoaXMuYnJvd3NlckF1dG9jb21wbGV0ZSA9IG9wdGlvbnMuYnJvd3NlckF1dG9jb21wbGV0ZTtcbiAgICAgICAgdGhpcy5wcmVjaXNpb24gPSBvcHRpb25zLnByZWNpc2lvbjtcbiAgICAgICAgdGhpcy5zY2FsZSA9IG9wdGlvbnMuc2NhbGUgPz8gMjtcbiAgICAgICAgdGhpcy5hbGlnblRvID0gdGhpcy5zY2FsZSA/ICdyaWdodCcgOiAnbGVmdCc7XG4gICAgICAgIHRoaXMubWFzayA9IG9wdGlvbnMubWFzaztcbiAgICAgICAgdGhpcy5sZWZ0QWRkb24gPSBvcHRpb25zLmxlZnRBZGRvbjtcbiAgICAgICAgdGhpcy5yaWdodEFkZG9uID0gb3B0aW9ucy5yaWdodEFkZG9uO1xuICAgICAgICB0aGlzLm9uQmx1ciA9IG9wdGlvbnMub25CbHVyO1xuICAgICAgICB0aGlzLm9uRm9jdXMgPSBvcHRpb25zLm9uRm9jdXM7XG4gICAgICAgIHRoaXMub25Db21wbGV0ZSA9IG9wdGlvbnMub25Db21wbGV0ZTtcbiAgICAgICAgdGhpcy5vbklucHV0ID0gb3B0aW9ucy5vbklucHV0O1xuICAgICAgICB0aGlzLmF1dG9DbGVhciA9IG9wdGlvbnMuYXV0b0NsZWFyID8/IHRydWU7XG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBvcHRpb25zLnBsYWNlaG9sZGVyID8/IFwiXCI7XG4gICAgfVxufVxuIl19
@@ -2,7 +2,7 @@ import { CommonModule } from '@angular/common';
2
2
  import { NgModule } from '@angular/core';
3
3
  import { FormsModule, ReactiveFormsModule } from '@angular/forms';
4
4
  import { TranslateModule } from '@ngx-translate/core';
5
- import { InputMaskModule } from 'primeng/inputmask';
5
+ import { InputMaskDirective } from '@seniorsistemas/angular-components/input-mask';
6
6
  import { InputTextModule } from 'primeng/inputtext';
7
7
  import { KeyFilterModule } from 'primeng/keyfilter';
8
8
  import { TextareaModule } from 'primeng/textarea';
@@ -43,7 +43,7 @@ export class InlineEditModule {
43
43
  ContentGeneratorModule,
44
44
  TooltipModule,
45
45
  DatepickerComponent,
46
- InputMaskModule,
46
+ InputMaskDirective,
47
47
  InputTextModule,
48
48
  TextareaModule,
49
49
  KeyFilterModule,
@@ -59,7 +59,6 @@ export class InlineEditModule {
59
59
  ContentGeneratorModule,
60
60
  TooltipModule,
61
61
  DatepickerComponent,
62
- InputMaskModule,
63
62
  InputTextModule,
64
63
  TextareaModule,
65
64
  KeyFilterModule,
@@ -80,7 +79,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
80
79
  ContentGeneratorModule,
81
80
  TooltipModule,
82
81
  DatepickerComponent,
83
- InputMaskModule,
82
+ InputMaskDirective,
84
83
  InputTextModule,
85
84
  TextareaModule,
86
85
  KeyFilterModule,
@@ -99,4 +98,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
99
98
  exports: [InlineEditComponent],
100
99
  }]
101
100
  }] });
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLWVkaXQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2lubGluZS1lZGl0L3NyYy9saWIvaW5saW5lLWVkaXQvaW5saW5lLWVkaXQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWxELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHlFQUF5RSxDQUFDO0FBQ3RILE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQ2hILE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLDJGQUEyRixDQUFDO0FBQ2hKLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJFQUEyRSxDQUFDO0FBQ3hILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlFQUFpRSxDQUFDO0FBQzFHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBRW5HLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNwRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDOztBQWlDcEYsTUFBTSxPQUFPLGdCQUFnQjt3R0FBaEIsZ0JBQWdCO3lHQUFoQixnQkFBZ0IsaUJBWHJCLG1CQUFtQjtZQUNuQix1QkFBdUI7WUFDdkIsMkJBQTJCO1lBQzNCLHlCQUF5QjtZQUN6Qix5QkFBeUI7WUFDekIsdUJBQXVCO1lBQ3ZCLDJCQUEyQjtZQUMzQixtQ0FBbUMsYUF6Qm5DLFlBQVk7WUFDWixXQUFXO1lBQ1gsbUJBQW1CO1lBQ25CLGVBQWU7WUFDZixvQkFBb0I7WUFDcEIsWUFBWTtZQUNaLG1CQUFtQjtZQUNuQixjQUFjO1lBQ2Qsc0JBQXNCO1lBQ3RCLGFBQWE7WUFDYixtQkFBbUI7WUFDbkIsZUFBZTtZQUNmLGVBQWU7WUFDZixjQUFjO1lBQ2QsZUFBZTtZQUNmLGlCQUFpQixhQVlYLG1CQUFtQjt5R0FFcEIsZ0JBQWdCLFlBN0JyQixZQUFZO1lBQ1osV0FBVztZQUNYLG1CQUFtQjtZQUNuQixlQUFlO1lBQ2Ysb0JBQW9CO1lBQ3BCLFlBQVk7WUFDWixtQkFBbUI7WUFDbkIsY0FBYztZQUNkLHNCQUFzQjtZQUN0QixhQUFhO1lBQ2IsbUJBQW1CO1lBQ25CLGVBQWU7WUFDZixlQUFlO1lBQ2YsY0FBYztZQUNkLGVBQWU7WUFDZixpQkFBaUI7OzRGQWNaLGdCQUFnQjtrQkEvQjVCLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFO3dCQUNMLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2Ysb0JBQW9CO3dCQUNwQixZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsY0FBYzt3QkFDZCxzQkFBc0I7d0JBQ3RCLGFBQWE7d0JBQ2IsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGlCQUFpQjtxQkFDcEI7b0JBQ0QsWUFBWSxFQUFFO3dCQUNWLG1CQUFtQjt3QkFDbkIsdUJBQXVCO3dCQUN2QiwyQkFBMkI7d0JBQzNCLHlCQUF5Qjt3QkFDekIseUJBQXlCO3dCQUN6Qix1QkFBdUI7d0JBQ3ZCLDJCQUEyQjt3QkFDM0IsbUNBQW1DO3FCQUN0QztvQkFDRCxPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztpQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IElucHV0TWFza01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXRtYXNrJztcbmltcG9ydCB7IElucHV0VGV4dE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0JztcbmltcG9ydCB7IEtleUZpbHRlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcva2V5ZmlsdGVyJztcbmltcG9ydCB7IFRleHRhcmVhTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90ZXh0YXJlYSc7XG5cbmltcG9ydCB7IElubGluZUVkaXRDYWxlbmRhckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9maWVsZHMvaW5saW5lLWVkaXQtY2FsZW5kYXIvaW5saW5lLWVkaXQtY2FsZW5kYXIuY29tcG9uZW50JztcbmltcG9ydCB7IElubGluZUVkaXRMb29rdXBDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZmllbGRzL2lubGluZS1lZGl0LWxvb2t1cC9pbmxpbmUtZWRpdC1sb29rdXAuY29tcG9uZW50JztcbmltcG9ydCB7IElubGluZUVkaXROdW1iZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZmllbGRzL2lubGluZS1lZGl0LW51bWJlci9pbmxpbmUtZWRpdC1udW1iZXIuY29tcG9uZW50JztcbmltcG9ydCB7IElubGluZUVkaXRDb250ZW50R2VuZXJhdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2ZpZWxkcy9pbmxpbmUtZWRpdC1jb250ZW50LWdlbmVyYXRvci9pbmxpbmUtZWRpdC1jb250ZW50LWdlbmVyYXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW5saW5lRWRpdFRleHRBcmVhQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2ZpZWxkcy9pbmxpbmUtZWRpdC10ZXh0LWFyZWEvaW5saW5lLWVkaXQtdGV4dC1hcmVhLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbmxpbmVFZGl0VGV4dENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9maWVsZHMvaW5saW5lLWVkaXQtdGV4dC9pbmxpbmUtZWRpdC10ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbmxpbmVFZGl0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9pbmxpbmUtZWRpdC1pdGVtL2lubGluZS1lZGl0LWl0ZW0uY29tcG9uZW50JztcblxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgQ29udHJvbEVycm9yc01vZHVsZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvY29udHJvbC1lcnJvcnMnO1xuaW1wb3J0IHsgRGF0ZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBJbmxpbmVFZGl0Q29tcG9uZW50IH0gZnJvbSAnLi9pbmxpbmUtZWRpdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvdG9vbHRpcCc7XG5pbXBvcnQgeyBJbmZvU2lnbk1vZHVsZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvaW5mby1zaWduJztcbmltcG9ydCB7IEJpZ251bWJlcklucHV0TW9kdWxlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9iaWdudW1iZXItaW5wdXQnO1xuaW1wb3J0IHsgQ29udGVudEdlbmVyYXRvck1vZHVsZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvY29udGVudC1nZW5lcmF0b3InO1xuaW1wb3J0IHsgRHluYW1pY0Zvcm1Nb2R1bGUgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2R5bmFtaWMtZm9ybSc7XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIEJpZ251bWJlcklucHV0TW9kdWxlLFxuICAgICAgICBCdXR0b25Nb2R1bGUsXG4gICAgICAgIENvbnRyb2xFcnJvcnNNb2R1bGUsXG4gICAgICAgIEluZm9TaWduTW9kdWxlLFxuICAgICAgICBDb250ZW50R2VuZXJhdG9yTW9kdWxlLFxuICAgICAgICBUb29sdGlwTW9kdWxlLFxuICAgICAgICBEYXRlcGlja2VyQ29tcG9uZW50LFxuICAgICAgICBJbnB1dE1hc2tNb2R1bGUsXG4gICAgICAgIElucHV0VGV4dE1vZHVsZSxcbiAgICAgICAgVGV4dGFyZWFNb2R1bGUsXG4gICAgICAgIEtleUZpbHRlck1vZHVsZSxcbiAgICAgICAgRHluYW1pY0Zvcm1Nb2R1bGUsXG4gICAgXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgSW5saW5lRWRpdENvbXBvbmVudCxcbiAgICAgICAgSW5saW5lRWRpdEl0ZW1Db21wb25lbnQsXG4gICAgICAgIElubGluZUVkaXRDYWxlbmRhckNvbXBvbmVudCxcbiAgICAgICAgSW5saW5lRWRpdExvb2t1cENvbXBvbmVudCxcbiAgICAgICAgSW5saW5lRWRpdE51bWJlckNvbXBvbmVudCxcbiAgICAgICAgSW5saW5lRWRpdFRleHRDb21wb25lbnQsXG4gICAgICAgIElubGluZUVkaXRUZXh0QXJlYUNvbXBvbmVudCxcbiAgICAgICAgSW5saW5lRWRpdENvbnRlbnRHZW5lcmF0b3JDb21wb25lbnQsXG4gICAgXSxcbiAgICBleHBvcnRzOiBbSW5saW5lRWRpdENvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIElubGluZUVkaXRNb2R1bGUgeyB9XG4iXX0=
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLWVkaXQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2lubGluZS1lZGl0L3NyYy9saWIvaW5saW5lLWVkaXQvaW5saW5lLWVkaXQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbEQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0seUVBQXlFLENBQUM7QUFDdEgsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scUVBQXFFLENBQUM7QUFDaEgsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scUVBQXFFLENBQUM7QUFDaEgsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sMkZBQTJGLENBQUM7QUFDaEosT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMkVBQTJFLENBQUM7QUFDeEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFDMUcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFFbkcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDMUYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDOUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saURBQWlELENBQUM7O0FBaUNwRixNQUFNLE9BQU8sZ0JBQWdCO3dHQUFoQixnQkFBZ0I7eUdBQWhCLGdCQUFnQixpQkFYckIsbUJBQW1CO1lBQ25CLHVCQUF1QjtZQUN2QiwyQkFBMkI7WUFDM0IseUJBQXlCO1lBQ3pCLHlCQUF5QjtZQUN6Qix1QkFBdUI7WUFDdkIsMkJBQTJCO1lBQzNCLG1DQUFtQyxhQXpCbkMsWUFBWTtZQUNaLFdBQVc7WUFDWCxtQkFBbUI7WUFDbkIsZUFBZTtZQUNmLG9CQUFvQjtZQUNwQixZQUFZO1lBQ1osbUJBQW1CO1lBQ25CLGNBQWM7WUFDZCxzQkFBc0I7WUFDdEIsYUFBYTtZQUNiLG1CQUFtQjtZQUNuQixrQkFBa0I7WUFDbEIsZUFBZTtZQUNmLGNBQWM7WUFDZCxlQUFlO1lBQ2YsaUJBQWlCLGFBWVgsbUJBQW1CO3lHQUVwQixnQkFBZ0IsWUE3QnJCLFlBQVk7WUFDWixXQUFXO1lBQ1gsbUJBQW1CO1lBQ25CLGVBQWU7WUFDZixvQkFBb0I7WUFDcEIsWUFBWTtZQUNaLG1CQUFtQjtZQUNuQixjQUFjO1lBQ2Qsc0JBQXNCO1lBQ3RCLGFBQWE7WUFDYixtQkFBbUI7WUFFbkIsZUFBZTtZQUNmLGNBQWM7WUFDZCxlQUFlO1lBQ2YsaUJBQWlCOzs0RkFjWixnQkFBZ0I7a0JBL0I1QixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLG9CQUFvQjt3QkFDcEIsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGNBQWM7d0JBQ2Qsc0JBQXNCO3dCQUN0QixhQUFhO3dCQUNiLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixlQUFlO3dCQUNmLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixpQkFBaUI7cUJBQ3BCO29CQUNELFlBQVksRUFBRTt3QkFDVixtQkFBbUI7d0JBQ25CLHVCQUF1Qjt3QkFDdkIsMkJBQTJCO3dCQUMzQix5QkFBeUI7d0JBQ3pCLHlCQUF5Qjt3QkFDekIsdUJBQXVCO3dCQUN2QiwyQkFBMkI7d0JBQzNCLG1DQUFtQztxQkFDdEM7b0JBQ0QsT0FBTyxFQUFFLENBQUMsbUJBQW1CLENBQUM7aUJBQ2pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBJbnB1dE1hc2tEaXJlY3RpdmUgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2lucHV0LW1hc2snO1xuaW1wb3J0IHsgSW5wdXRUZXh0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHQnO1xuaW1wb3J0IHsgS2V5RmlsdGVyTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9rZXlmaWx0ZXInO1xuaW1wb3J0IHsgVGV4dGFyZWFNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RleHRhcmVhJztcblxuaW1wb3J0IHsgSW5saW5lRWRpdENhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2ZpZWxkcy9pbmxpbmUtZWRpdC1jYWxlbmRhci9pbmxpbmUtZWRpdC1jYWxlbmRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW5saW5lRWRpdExvb2t1cENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9maWVsZHMvaW5saW5lLWVkaXQtbG9va3VwL2lubGluZS1lZGl0LWxvb2t1cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW5saW5lRWRpdE51bWJlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9maWVsZHMvaW5saW5lLWVkaXQtbnVtYmVyL2lubGluZS1lZGl0LW51bWJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW5saW5lRWRpdENvbnRlbnRHZW5lcmF0b3JDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZmllbGRzL2lubGluZS1lZGl0LWNvbnRlbnQtZ2VuZXJhdG9yL2lubGluZS1lZGl0LWNvbnRlbnQtZ2VuZXJhdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbmxpbmVFZGl0VGV4dEFyZWFDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZmllbGRzL2lubGluZS1lZGl0LXRleHQtYXJlYS9pbmxpbmUtZWRpdC10ZXh0LWFyZWEuY29tcG9uZW50JztcbmltcG9ydCB7IElubGluZUVkaXRUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2ZpZWxkcy9pbmxpbmUtZWRpdC10ZXh0L2lubGluZS1lZGl0LXRleHQuY29tcG9uZW50JztcbmltcG9ydCB7IElubGluZUVkaXRJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2lubGluZS1lZGl0LWl0ZW0vaW5saW5lLWVkaXQtaXRlbS5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBDb250cm9sRXJyb3JzTW9kdWxlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9jb250cm9sLWVycm9ycyc7XG5pbXBvcnQgeyBEYXRlcGlja2VyQ29tcG9uZW50IH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9kYXRlcGlja2VyJztcbmltcG9ydCB7IElubGluZUVkaXRDb21wb25lbnQgfSBmcm9tICcuL2lubGluZS1lZGl0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy90b29sdGlwJztcbmltcG9ydCB7IEluZm9TaWduTW9kdWxlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9pbmZvLXNpZ24nO1xuaW1wb3J0IHsgQmlnbnVtYmVySW5wdXRNb2R1bGUgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2JpZ251bWJlci1pbnB1dCc7XG5pbXBvcnQgeyBDb250ZW50R2VuZXJhdG9yTW9kdWxlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9jb250ZW50LWdlbmVyYXRvcic7XG5pbXBvcnQgeyBEeW5hbWljRm9ybU1vZHVsZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvZHluYW1pYy1mb3JtJztcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICAgICAgQmlnbnVtYmVySW5wdXRNb2R1bGUsXG4gICAgICAgIEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgQ29udHJvbEVycm9yc01vZHVsZSxcbiAgICAgICAgSW5mb1NpZ25Nb2R1bGUsXG4gICAgICAgIENvbnRlbnRHZW5lcmF0b3JNb2R1bGUsXG4gICAgICAgIFRvb2x0aXBNb2R1bGUsXG4gICAgICAgIERhdGVwaWNrZXJDb21wb25lbnQsXG4gICAgICAgIElucHV0TWFza0RpcmVjdGl2ZSxcbiAgICAgICAgSW5wdXRUZXh0TW9kdWxlLFxuICAgICAgICBUZXh0YXJlYU1vZHVsZSxcbiAgICAgICAgS2V5RmlsdGVyTW9kdWxlLFxuICAgICAgICBEeW5hbWljRm9ybU1vZHVsZSxcbiAgICBdLFxuICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICBJbmxpbmVFZGl0Q29tcG9uZW50LFxuICAgICAgICBJbmxpbmVFZGl0SXRlbUNvbXBvbmVudCxcbiAgICAgICAgSW5saW5lRWRpdENhbGVuZGFyQ29tcG9uZW50LFxuICAgICAgICBJbmxpbmVFZGl0TG9va3VwQ29tcG9uZW50LFxuICAgICAgICBJbmxpbmVFZGl0TnVtYmVyQ29tcG9uZW50LFxuICAgICAgICBJbmxpbmVFZGl0VGV4dENvbXBvbmVudCxcbiAgICAgICAgSW5saW5lRWRpdFRleHRBcmVhQ29tcG9uZW50LFxuICAgICAgICBJbmxpbmVFZGl0Q29udGVudEdlbmVyYXRvckNvbXBvbmVudCxcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtJbmxpbmVFZGl0Q29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgSW5saW5lRWRpdE1vZHVsZSB7IH1cbiJdfQ==
@@ -0,0 +1,460 @@
1
+ import { Directive, ElementRef, forwardRef, inject, input, output, Renderer2, } from '@angular/core';
2
+ import { NG_VALIDATORS, NG_VALUE_ACCESSOR, } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * @description Diretiva de máscara de entrada para campos de texto.
6
+ *
7
+ * Aplique `[sInputMask]` em qualquer `<input>` para aplicar uma máscara de formatação,
8
+ * guiando a entrada do usuário com um padrão definido. Implementa ControlValueAccessor
9
+ * e Validator para integração nativa com Angular Forms.
10
+ *
11
+ * **Slots de máscara:**
12
+ * - `9` — dígito (0-9)
13
+ * - `a` — letra (conforme `characterPattern`, padrão `[A-Za-z]`)
14
+ * - `*` — alfanumérico (letra ou dígito)
15
+ * - Outros caracteres são tratados como literais (ex: `.`, `-`, `/`, `(`, `)`)
16
+ * - `?` — tudo após esse ponto na máscara é opcional
17
+ *
18
+ * @example
19
+ * ```html
20
+ * <!-- CPF -->
21
+ * <input type="text" [sInputMask]="'999.999.999-99'" [(ngModel)]="cpf" />
22
+ *
23
+ * <!-- Telefone com unmask -->
24
+ * <input type="text" [sInputMask]="'(99) 99999-9999'" [unmask]="true" [(ngModel)]="telefone" />
25
+ * ```
26
+ * @category Input
27
+ */
28
+ export class InputMaskDirective {
29
+ /**
30
+ * Padrão da máscara. Slots: `9` (dígito), `a` (letra), `*` (alfanumérico).
31
+ * Demais caracteres são literais. `?` torna o restante da máscara opcional.
32
+ */
33
+ mask = input(undefined, { alias: 'sInputMask' });
34
+ /**
35
+ * Caractere exibido nas posições ainda não preenchidas.
36
+ * @default '_'
37
+ */
38
+ slotChar = input('_');
39
+ /**
40
+ * Quando `true`, o modelo recebe apenas os caracteres digitados pelo usuário,
41
+ * sem os literais da máscara. Quando `false`, o modelo recebe o valor completo
42
+ * incluindo literais.
43
+ * @default false
44
+ */
45
+ unmask = input(false);
46
+ /**
47
+ * Expressão regular usada para validar o slot `a` (letra).
48
+ * @default '[A-Za-z]'
49
+ */
50
+ characterPattern = input('[A-Za-z]');
51
+ /**
52
+ * Quando `true`, limpa o campo ao perder o foco se a máscara estiver incompleta.
53
+ * @default true
54
+ */
55
+ autoClear = input(true);
56
+ /**
57
+ * Emitido quando todos os slots obrigatórios da máscara estão preenchidos.
58
+ * Emite o valor atual (mascarado ou não, conforme `unmask`).
59
+ */
60
+ maskComplete = output();
61
+ el = inject((ElementRef));
62
+ renderer = inject(Renderer2);
63
+ tokens = [];
64
+ buffer = [];
65
+ wasComplete = false;
66
+ lastValue = null;
67
+ onChange = () => { };
68
+ onTouched = () => { };
69
+ ngOnInit() {
70
+ this.buildMask();
71
+ }
72
+ ngOnChanges(changes) {
73
+ if (changes['mask'] || changes['slotChar'] || changes['characterPattern']) {
74
+ this.buildMask();
75
+ if (this.mask()) {
76
+ this.writeValue(this.lastValue);
77
+ }
78
+ }
79
+ }
80
+ buildMask() {
81
+ const maskStr = this.mask();
82
+ if (!maskStr) {
83
+ this.tokens = [];
84
+ this.buffer = [];
85
+ return;
86
+ }
87
+ this.tokens = this.parseMask(maskStr);
88
+ this.resetBuffer();
89
+ }
90
+ parseMask(mask) {
91
+ const tokens = [];
92
+ let optional = false;
93
+ for (let i = 0; i < mask.length; i++) {
94
+ const ch = mask[i];
95
+ if (ch === '?') {
96
+ optional = true;
97
+ continue;
98
+ }
99
+ switch (ch) {
100
+ case '9':
101
+ tokens.push({ type: 'digit', optional });
102
+ break;
103
+ case 'a':
104
+ tokens.push({ type: 'alpha', optional });
105
+ break;
106
+ case '*':
107
+ tokens.push({ type: 'alphanumeric', optional });
108
+ break;
109
+ default:
110
+ tokens.push({ type: 'literal', char: ch, optional: false });
111
+ break;
112
+ }
113
+ }
114
+ return tokens;
115
+ }
116
+ resetBuffer() {
117
+ this.buffer = this.tokens.map((t) => (t.type === 'literal' ? t.char : this.slotChar()));
118
+ }
119
+ isValidChar(char, token) {
120
+ switch (token.type) {
121
+ case 'digit':
122
+ return /[0-9]/.test(char);
123
+ case 'alpha':
124
+ return new RegExp(this.characterPattern()).test(char);
125
+ case 'alphanumeric':
126
+ return /[A-Za-z0-9]/.test(char);
127
+ default:
128
+ return false;
129
+ }
130
+ }
131
+ isEditable(token) {
132
+ return token.type !== 'literal';
133
+ }
134
+ nextEditablePos(from) {
135
+ for (let i = from; i < this.tokens.length; i++) {
136
+ if (this.isEditable(this.tokens[i])) {
137
+ return i;
138
+ }
139
+ }
140
+ return this.tokens.length;
141
+ }
142
+ prevEditablePos(from) {
143
+ for (let i = from; i >= 0; i--) {
144
+ if (this.tokens[i] && this.isEditable(this.tokens[i])) {
145
+ return i;
146
+ }
147
+ }
148
+ return -1;
149
+ }
150
+ setCursor(pos) {
151
+ const safePos = Math.min(pos, this.tokens.length);
152
+ this.el.nativeElement.setSelectionRange(safePos, safePos);
153
+ }
154
+ setInputValue(value) {
155
+ this.renderer.setProperty(this.el.nativeElement, 'value', value);
156
+ }
157
+ getDisplayValue() {
158
+ return this.buffer.join('');
159
+ }
160
+ getBlurDisplayValue() {
161
+ let lastFilledIndex = -1;
162
+ for (let i = 0; i < this.buffer.length; i++) {
163
+ if (this.tokens[i] && this.tokens[i].type !== 'literal' && this.buffer[i] !== this.slotChar()) {
164
+ lastFilledIndex = i;
165
+ }
166
+ }
167
+ if (lastFilledIndex === -1)
168
+ return '';
169
+ return this.buffer.slice(0, lastFilledIndex + 1).join('');
170
+ }
171
+ /**
172
+ * Returns the value that should be set on the model.
173
+ * Returns null when the user has not typed anything.
174
+ */
175
+ getModelValue() {
176
+ const hasInput = this.buffer.some((ch, i) => this.tokens[i] && this.tokens[i].type !== 'literal' && ch !== this.slotChar());
177
+ if (!hasInput) {
178
+ return null;
179
+ }
180
+ if (this.unmask()) {
181
+ return (this.buffer
182
+ .filter((ch, i) => this.tokens[i] && this.tokens[i].type !== 'literal' && ch !== this.slotChar())
183
+ .join('') || null);
184
+ }
185
+ return this.buffer.join('');
186
+ }
187
+ clearRange(startPos, endPos) {
188
+ for (let i = startPos; i < endPos; i++) {
189
+ if (this.tokens[i] && this.tokens[i].type !== 'literal') {
190
+ this.buffer[i] = this.slotChar();
191
+ }
192
+ }
193
+ this.setInputValue(this.getDisplayValue());
194
+ }
195
+ isMaskComplete() {
196
+ return this.tokens.every((token, i) => {
197
+ if (token.type === 'literal' || token.optional) {
198
+ return true;
199
+ }
200
+ return this.buffer[i] !== this.slotChar();
201
+ });
202
+ }
203
+ checkAndEmitComplete() {
204
+ const complete = this.isMaskComplete();
205
+ if (complete && !this.wasComplete) {
206
+ this.wasComplete = true;
207
+ this.maskComplete.emit(this.getModelValue() ?? '');
208
+ }
209
+ else if (!complete) {
210
+ this.wasComplete = false;
211
+ }
212
+ }
213
+ dispatchInputEvent() {
214
+ this.el.nativeElement.dispatchEvent(new Event('input', { bubbles: true }));
215
+ }
216
+ onKeyDown(event) {
217
+ if (!this.mask() || this.el.nativeElement.readOnly || this.el.nativeElement.disabled) {
218
+ return;
219
+ }
220
+ const key = event.key;
221
+ // Let the browser handle shortcuts (Ctrl/Cmd), Tab, and function keys
222
+ if (event.ctrlKey || event.metaKey || key === 'Tab' || key.startsWith('F')) {
223
+ return;
224
+ }
225
+ // Let the browser handle arrow navigation and Home/End natively
226
+ if (['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End'].includes(key)) {
227
+ return;
228
+ }
229
+ const input = this.el.nativeElement;
230
+ const startPos = input.selectionStart ?? 0;
231
+ const endPos = input.selectionEnd ?? 0;
232
+ if (key === 'Backspace') {
233
+ event.preventDefault();
234
+ if (startPos !== endPos) {
235
+ this.clearRange(startPos, endPos);
236
+ const nextPos = this.nextEditablePos(startPos);
237
+ this.setCursor(nextPos < this.tokens.length ? nextPos : startPos);
238
+ }
239
+ else if (startPos > 0) {
240
+ const pos = this.prevEditablePos(startPos - 1);
241
+ if (pos >= 0) {
242
+ this.buffer[pos] = this.slotChar();
243
+ this.setInputValue(this.getDisplayValue());
244
+ this.setCursor(pos);
245
+ }
246
+ }
247
+ this.onChange(this.getModelValue());
248
+ this.checkAndEmitComplete();
249
+ this.dispatchInputEvent();
250
+ return;
251
+ }
252
+ if (key === 'Delete') {
253
+ event.preventDefault();
254
+ if (startPos !== endPos) {
255
+ this.clearRange(startPos, endPos);
256
+ const nextPos = this.nextEditablePos(startPos);
257
+ this.setCursor(nextPos < this.tokens.length ? nextPos : startPos);
258
+ }
259
+ else {
260
+ const pos = this.nextEditablePos(startPos);
261
+ if (pos < this.tokens.length) {
262
+ this.buffer[pos] = this.slotChar();
263
+ this.setInputValue(this.getDisplayValue());
264
+ this.setCursor(pos);
265
+ }
266
+ }
267
+ this.onChange(this.getModelValue());
268
+ this.checkAndEmitComplete();
269
+ this.dispatchInputEvent();
270
+ return;
271
+ }
272
+ // Single printable character
273
+ if (key.length === 1) {
274
+ event.preventDefault();
275
+ let insertPos = startPos;
276
+ // Clear selection range if any
277
+ if (startPos !== endPos) {
278
+ this.clearRange(startPos, endPos);
279
+ insertPos = startPos;
280
+ }
281
+ const pos = this.nextEditablePos(insertPos);
282
+ if (pos >= this.tokens.length) {
283
+ return;
284
+ }
285
+ const token = this.tokens[pos];
286
+ if (!this.isValidChar(key, token)) {
287
+ return;
288
+ }
289
+ this.buffer[pos] = key;
290
+ this.setInputValue(this.getDisplayValue());
291
+ const next = this.nextEditablePos(pos + 1);
292
+ this.setCursor(next <= this.tokens.length ? next : this.tokens.length);
293
+ this.onChange(this.getModelValue());
294
+ this.checkAndEmitComplete();
295
+ this.dispatchInputEvent();
296
+ }
297
+ }
298
+ onFocus(_event) {
299
+ if (!this.mask()) {
300
+ return;
301
+ }
302
+ // Always restore full mask display on focus (slot chars become visible)
303
+ this.setInputValue(this.getDisplayValue());
304
+ // Move cursor to the first empty editable slot
305
+ const firstEmpty = this.buffer.findIndex((ch, i) => this.tokens[i] && this.tokens[i].type !== 'literal' && ch === this.slotChar());
306
+ this.setCursor(firstEmpty >= 0 ? firstEmpty : this.nextEditablePos(0));
307
+ }
308
+ onBlur(_event) {
309
+ if (!this.mask()) {
310
+ return;
311
+ }
312
+ this.onTouched();
313
+ if (!this.isMaskComplete()) {
314
+ if (this.autoClear()) {
315
+ this.resetBuffer();
316
+ this.onChange(null);
317
+ }
318
+ this.setInputValue(this.getBlurDisplayValue());
319
+ }
320
+ }
321
+ onPaste(event) {
322
+ if (!this.mask() || this.el.nativeElement.readOnly || this.el.nativeElement.disabled) {
323
+ return;
324
+ }
325
+ event.preventDefault();
326
+ const pastedText = event.clipboardData?.getData('text') ?? '';
327
+ const input = this.el.nativeElement;
328
+ const startPos = input.selectionStart ?? 0;
329
+ const endPos = input.selectionEnd ?? 0;
330
+ if (startPos !== endPos) {
331
+ this.clearRange(startPos, endPos);
332
+ }
333
+ let pos = this.nextEditablePos(startPos);
334
+ for (const ch of pastedText) {
335
+ if (pos >= this.tokens.length) {
336
+ break;
337
+ }
338
+ const token = this.tokens[pos];
339
+ if (token.type === 'literal') {
340
+ // Skip matching literal in pasted text; skip the literal slot regardless
341
+ if (ch === token.char) {
342
+ pos++;
343
+ }
344
+ pos = this.nextEditablePos(pos);
345
+ continue;
346
+ }
347
+ if (this.isValidChar(ch, token)) {
348
+ this.buffer[pos] = ch;
349
+ pos = this.nextEditablePos(pos + 1);
350
+ }
351
+ }
352
+ this.setInputValue(this.getDisplayValue());
353
+ this.setCursor(pos <= this.tokens.length ? pos : this.tokens.length);
354
+ this.onChange(this.getModelValue());
355
+ this.checkAndEmitComplete();
356
+ this.dispatchInputEvent();
357
+ }
358
+ onClick() {
359
+ if (!this.mask() || this.el.nativeElement.readOnly || this.el.nativeElement.disabled) {
360
+ return;
361
+ }
362
+ const input = this.el.nativeElement;
363
+ const pos = input.selectionStart ?? 0;
364
+ // If cursor landed on a literal, nudge it to the nearest editable slot
365
+ if (this.tokens[pos] && this.tokens[pos].type === 'literal') {
366
+ this.setCursor(this.nextEditablePos(pos));
367
+ }
368
+ }
369
+ writeValue(value) {
370
+ this.lastValue = value;
371
+ if (!this.mask()) {
372
+ return;
373
+ }
374
+ this.resetBuffer();
375
+ if (!value) {
376
+ this.setInputValue('');
377
+ return;
378
+ }
379
+ let bufferIdx = 0;
380
+ let valueIdx = 0;
381
+ while (valueIdx < value.length && bufferIdx < this.tokens.length) {
382
+ const token = this.tokens[bufferIdx];
383
+ const char = value[valueIdx];
384
+ if (token.type === 'literal') {
385
+ // Consume the literal character from value if it matches; always advance buffer
386
+ if (char === token.char)
387
+ valueIdx++;
388
+ bufferIdx++;
389
+ }
390
+ else if (this.isValidChar(char, token)) {
391
+ this.buffer[bufferIdx] = char;
392
+ bufferIdx++;
393
+ valueIdx++;
394
+ }
395
+ else {
396
+ // Skip characters from value that do not match the current slot
397
+ valueIdx++;
398
+ }
399
+ }
400
+ this.setInputValue(this.getDisplayValue());
401
+ }
402
+ registerOnChange(onChange) {
403
+ this.onChange = onChange;
404
+ }
405
+ registerOnTouched(onTouched) {
406
+ this.onTouched = onTouched;
407
+ }
408
+ setDisabledState(isDisabled) {
409
+ this.renderer.setProperty(this.el.nativeElement, 'disabled', isDisabled);
410
+ }
411
+ validate(control) {
412
+ if (!this.mask() || !control.value) {
413
+ return null;
414
+ }
415
+ if (!this.isMaskComplete()) {
416
+ return { incompleteMask: { mask: this.mask() } };
417
+ }
418
+ return null;
419
+ }
420
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InputMaskDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
421
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: InputMaskDirective, isStandalone: true, selector: "input[sInputMask]", inputs: { mask: { classPropertyName: "mask", publicName: "sInputMask", isSignal: true, isRequired: false, transformFunction: null }, slotChar: { classPropertyName: "slotChar", publicName: "slotChar", isSignal: true, isRequired: false, transformFunction: null }, unmask: { classPropertyName: "unmask", publicName: "unmask", isSignal: true, isRequired: false, transformFunction: null }, characterPattern: { classPropertyName: "characterPattern", publicName: "characterPattern", isSignal: true, isRequired: false, transformFunction: null }, autoClear: { classPropertyName: "autoClear", publicName: "autoClear", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { maskComplete: "maskComplete" }, host: { listeners: { "keydown": "onKeyDown($event)", "focus": "onFocus($event)", "blur": "onBlur($event)", "paste": "onPaste($event)", "click": "onClick()" } }, providers: [
422
+ {
423
+ provide: NG_VALUE_ACCESSOR,
424
+ useExisting: forwardRef(() => InputMaskDirective),
425
+ multi: true,
426
+ },
427
+ {
428
+ provide: NG_VALIDATORS,
429
+ useExisting: forwardRef(() => InputMaskDirective),
430
+ multi: true,
431
+ },
432
+ ], usesOnChanges: true, ngImport: i0 });
433
+ }
434
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InputMaskDirective, decorators: [{
435
+ type: Directive,
436
+ args: [{
437
+ selector: 'input[sInputMask]',
438
+ standalone: true,
439
+ host: {
440
+ '(keydown)': 'onKeyDown($event)',
441
+ '(focus)': 'onFocus($event)',
442
+ '(blur)': 'onBlur($event)',
443
+ '(paste)': 'onPaste($event)',
444
+ '(click)': 'onClick()',
445
+ },
446
+ providers: [
447
+ {
448
+ provide: NG_VALUE_ACCESSOR,
449
+ useExisting: forwardRef(() => InputMaskDirective),
450
+ multi: true,
451
+ },
452
+ {
453
+ provide: NG_VALIDATORS,
454
+ useExisting: forwardRef(() => InputMaskDirective),
455
+ multi: true,
456
+ },
457
+ ],
458
+ }]
459
+ }] });
460
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtbWFzay5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvaW5wdXQtbWFzay9zcmMvbGliL2lucHV0LW1hc2svaW5wdXQtbWFzay5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsR0FFWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0gsYUFBYSxFQUNiLGlCQUFpQixHQUdwQixNQUFNLGdCQUFnQixDQUFDOztBQVF4Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUF3QkgsTUFBTSxPQUFPLGtCQUFrQjtJQUMzQjs7O09BR0c7SUFDSSxJQUFJLEdBQUcsS0FBSyxDQUFxQixTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUU1RTs7O09BR0c7SUFDSSxRQUFRLEdBQUcsS0FBSyxDQUFTLEdBQUcsQ0FBQyxDQUFDO0lBRXJDOzs7OztPQUtHO0lBQ0ksTUFBTSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUV0Qzs7O09BR0c7SUFDSSxnQkFBZ0IsR0FBRyxLQUFLLENBQVMsVUFBVSxDQUFDLENBQUM7SUFFcEQ7OztPQUdHO0lBQ0ksU0FBUyxHQUFHLEtBQUssQ0FBVSxJQUFJLENBQUMsQ0FBQztJQUV4Qzs7O09BR0c7SUFDSSxZQUFZLEdBQUcsTUFBTSxFQUFVLENBQUM7SUFFdEIsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFBLFVBQTRCLENBQUEsQ0FBQyxDQUFDO0lBQzFDLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFdEMsTUFBTSxHQUFnQixFQUFFLENBQUM7SUFDekIsTUFBTSxHQUFhLEVBQUUsQ0FBQztJ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bUIsQ0FBQzs0QkFDakQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7d0JBQ0Q7NEJBQ0ksT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG1CQUFtQixDQUFDOzRCQUNqRCxLQUFLLEVBQUUsSUFBSTt5QkFDZDtxQkFDSjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgZm9yd2FyZFJlZixcbiAgICBpbmplY3QsXG4gICAgaW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBvdXRwdXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBYnN0cmFjdENvbnRyb2wsXG4gICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgTkdfVkFMSURBVE9SUyxcbiAgICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICBWYWxpZGF0aW9uRXJyb3JzLFxuICAgIFZhbGlkYXRvcixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbnRlcmZhY2UgTWFza1Rva2VuIHtcbiAgICB0eXBlOiAnbGl0ZXJhbCcgfCAnZGlnaXQnIHwgJ2FscGhhJyB8ICdhbHBoYW51bWVyaWMnO1xuICAgIGNoYXI/OiBzdHJpbmc7XG4gICAgb3B0aW9uYWw6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERpcmV0aXZhIGRlIG3DoXNjYXJhIGRlIGVudHJhZGEgcGFyYSBjYW1wb3MgZGUgdGV4dG8uXG4gKlxuICogQXBsaXF1ZSBgW3NJbnB1dE1hc2tdYCBlbSBxdWFscXVlciBgPGlucHV0PmAgcGFyYSBhcGxpY2FyIHVtYSBtw6FzY2FyYSBkZSBmb3JtYXRhw6fDo28sXG4gKiBndWlhbmRvIGEgZW50cmFkYSBkbyB1c3XDoXJpbyBjb20gdW0gcGFkcsOjbyBkZWZpbmlkby4gSW1wbGVtZW50YSBDb250cm9sVmFsdWVBY2Nlc3NvclxuICogZSBWYWxpZGF0b3IgcGFyYSBpbnRlZ3Jhw6fDo28gbmF0aXZhIGNvbSBBbmd1bGFyIEZvcm1zLlxuICpcbiAqICoqU2xvdHMgZGUgbcOhc2NhcmE6KipcbiAqIC0gYDlgIOKAlCBkw61naXRvICgwLTkpXG4gKiAtIGBhYCDigJQgbGV0cmEgKGNvbmZvcm1lIGBjaGFyYWN0ZXJQYXR0ZXJuYCwgcGFkcsOjbyBgW0EtWmEtel1gKVxuICogLSBgKmAg4oCUIGFsZmFudW3DqXJpY28gKGxldHJhIG91IGTDrWdpdG8pXG4gKiAtIE91dHJvcyBjYXJhY3RlcmVzIHPDo28gdHJhdGFkb3MgY29tbyBsaXRlcmFpcyAoZXg6IGAuYCwgYC1gLCBgL2AsIGAoYCwgYClgKVxuICogLSBgP2Ag4oCUIHR1ZG8gYXDDs3MgZXNzZSBwb250byBuYSBtw6FzY2FyYSDDqSBvcGNpb25hbFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8IS0tIENQRiAtLT5cbiAqIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtzSW5wdXRNYXNrXT1cIic5OTkuOTk5Ljk5OS05OSdcIiBbKG5nTW9kZWwpXT1cImNwZlwiIC8+XG4gKlxuICogPCEtLSBUZWxlZm9uZSBjb20gdW5tYXNrIC0tPlxuICogPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW3NJbnB1dE1hc2tdPVwiJyg5OSkgOTk5OTktOTk5OSdcIiBbdW5tYXNrXT1cInRydWVcIiBbKG5nTW9kZWwpXT1cInRlbGVmb25lXCIgLz5cbiAqIGBgYFxuICogQGNhdGVnb3J5IElucHV0XG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnaW5wdXRbc0lucHV0TWFza10nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaG9zdDoge1xuICAgICAgICAnKGtleWRvd24pJzogJ29uS2V5RG93bigkZXZlbnQpJyxcbiAgICAgICAgJyhmb2N1cyknOiAnb25Gb2N1cygkZXZlbnQpJyxcbiAgICAgICAgJyhibHVyKSc6ICdvbkJsdXIoJGV2ZW50KScsXG4gICAgICAgICcocGFzdGUpJzogJ29uUGFzdGUoJGV2ZW50KScsXG4gICAgICAgICcoY2xpY2spJzogJ29uQ2xpY2soKScsXG4gICAgfSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJbnB1dE1hc2tEaXJlY3RpdmUpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJbnB1dE1hc2tEaXJlY3RpdmUpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgSW5wdXRNYXNrRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3Ige1xuICAgIC8qKlxuICAgICAqIFBhZHLDo28gZGEgbcOhc2NhcmEuIFNsb3RzOiBgOWAgKGTDrWdpdG8pLCBgYWAgKGxldHJhKSwgYCpgIChhbGZhbnVtw6lyaWNvKS5cbiAgICAgKiBEZW1haXMgY2FyYWN0ZXJlcyBzw6NvIGxpdGVyYWlzLiBgP2AgdG9ybmEgbyByZXN0YW50ZSBkYSBtw6FzY2FyYSBvcGNpb25hbC5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWFzayA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7IGFsaWFzOiAnc0lucHV0TWFzaycgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDYXJhY3RlcmUgZXhpYmlkbyBuYXMgcG9zacOnw7VlcyBhaW5kYSBuw6NvIHByZWVuY2hpZGFzLlxuICAgICAqIEBkZWZhdWx0ICdfJ1xuICAgICAqL1xuICAgIHB1YmxpYyBzbG90Q2hhciA9IGlucHV0PHN0cmluZz4oJ18nKTtcblxuICAgIC8qKlxuICAgICAqIFF1YW5kbyBgdHJ1ZWAsIG8gbW9kZWxvIHJlY2ViZSBhcGVuYXMgb3MgY2FyYWN0ZXJlcyBkaWdpdGFkb3MgcGVsbyB1c3XDoXJpbyxcbiAgICAgKiBzZW0gb3MgbGl0ZXJhaXMgZGEgbcOhc2NhcmEuIFF1YW5kbyBgZmFsc2VgLCBvIG1vZGVsbyByZWNlYmUgbyB2YWxvciBjb21wbGV0b1xuICAgICAqIGluY2x1aW5kbyBsaXRlcmFpcy5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHB1YmxpYyB1bm1hc2sgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBFeHByZXNzw6NvIHJlZ3VsYXIgdXNhZGEgcGFyYSB2YWxpZGFyIG8gc2xvdCBgYWAgKGxldHJhKS5cbiAgICAgKiBAZGVmYXVsdCAnW0EtWmEtel0nXG4gICAgICovXG4gICAgcHVibGljIGNoYXJhY3RlclBhdHRlcm4gPSBpbnB1dDxzdHJpbmc+KCdbQS1aYS16XScpO1xuXG4gICAgLyoqXG4gICAgICogUXVhbmRvIGB0cnVlYCwgbGltcGEgbyBjYW1wbyBhbyBwZXJkZXIgbyBmb2NvIHNlIGEgbcOhc2NhcmEgZXN0aXZlciBpbmNvbXBsZXRhLlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBwdWJsaWMgYXV0b0NsZWFyID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0aWRvIHF1YW5kbyB0b2RvcyBvcyBzbG90cyBvYnJpZ2F0w7NyaW9zIGRhIG3DoXNjYXJhIGVzdMOjbyBwcmVlbmNoaWRvcy5cbiAgICAgKiBFbWl0ZSBvIHZhbG9yIGF0dWFsIChtYXNjYXJhZG8gb3UgbsOjbywgY29uZm9ybWUgYHVubWFza2ApLlxuICAgICAqL1xuICAgIHB1YmxpYyBtYXNrQ29tcGxldGUgPSBvdXRwdXQ8c3RyaW5nPigpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbCA9IGluamVjdChFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG5cbiAgICBwcml2YXRlIHRva2VuczogTWFza1Rva2VuW10gPSBbXTtcbiAgICBwcml2YXRlIGJ1ZmZlcjogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIHdhc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBsYXN0VmFsdWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgcHJpdmF0ZSBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcgfCBudWxsKSA9PiB2b2lkID0gKCkgPT4ge307XG4gICAgcHJpdmF0ZSBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5idWlsZE1hc2soKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlc1snbWFzayddIHx8IGNoYW5nZXNbJ3Nsb3RDaGFyJ10gfHwgY2hhbmdlc1snY2hhcmFjdGVyUGF0dGVybiddKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkTWFzaygpO1xuICAgICAgICAgICAgaWYgKHRoaXMubWFzaygpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMubGFzdFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRNYXNrKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBtYXNrU3RyID0gdGhpcy5tYXNrKCk7XG4gICAgICAgIGlmICghbWFza1N0cikge1xuICAgICAgICAgICAgdGhpcy50b2tlbnMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gW107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b2tlbnMgPSB0aGlzLnBhcnNlTWFzayhtYXNrU3RyKTtcbiAgICAgICAgdGhpcy5yZXNldEJ1ZmZlcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VNYXNrKG1hc2s6IHN0cmluZyk6IE1hc2tUb2tlbltdIHtcbiAgICAgICAgY29uc3QgdG9rZW5zOiBNYXNrVG9rZW5bXSA9IFtdO1xuICAgICAgICBsZXQgb3B0aW9uYWwgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hc2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNoID0gbWFza1tpXTtcblxuICAgICAgICAgICAgaWYgKGNoID09PSAnPycpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25hbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgICAgICAgICBjYXNlICc5JzpcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiAnZGlnaXQnLCBvcHRpb25hbCB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnYSc6XG4gICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogJ2FscGhhJywgb3B0aW9uYWwgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJyonOlxuICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh7IHR5cGU6ICdhbHBoYW51bWVyaWMnLCBvcHRpb25hbCB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiAnbGl0ZXJhbCcsIGNoYXI6IGNoLCBvcHRpb25hbDogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRva2VucztcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0QnVmZmVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMudG9rZW5zLm1hcCgodCkgPT4gKHQudHlwZSA9PT0gJ2xpdGVyYWwnID8gdC5jaGFyISA6IHRoaXMuc2xvdENoYXIoKSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNWYWxpZENoYXIoY2hhcjogc3RyaW5nLCB0b2tlbjogTWFza1Rva2VuKTogYm9vbGVhbiB7XG4gICAgICAgIHN3aXRjaCAodG9rZW4udHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnZGlnaXQnOlxuICAgICAgICAgICAgICAgIHJldHVybiAvWzAtOV0vLnRlc3QoY2hhcik7XG4gICAgICAgICAgICBjYXNlICdhbHBoYSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAodGhpcy5jaGFyYWN0ZXJQYXR0ZXJuKCkpLnRlc3QoY2hhcik7XG4gICAgICAgICAgICBjYXNlICdhbHBoYW51bWVyaWMnOlxuICAgICAgICAgICAgICAgIHJldHVybiAvW0EtWmEtejAtOV0vLnRlc3QoY2hhcik7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNFZGl0YWJsZSh0b2tlbjogTWFza1Rva2VuKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0b2tlbi50eXBlICE9PSAnbGl0ZXJhbCc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBuZXh0RWRpdGFibGVQb3MoZnJvbTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IGZyb207IGkgPCB0aGlzLnRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNFZGl0YWJsZSh0aGlzLnRva2Vuc1tpXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMubGVuZ3RoO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJldkVkaXRhYmxlUG9zKGZyb206IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGZvciAobGV0IGkgPSBmcm9tOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudG9rZW5zW2ldICYmIHRoaXMuaXNFZGl0YWJsZSh0aGlzLnRva2Vuc1tpXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRDdXJzb3IocG9zOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2FmZVBvcyA9IE1hdGgubWluKHBvcywgdGhpcy50b2tlbnMubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKHNhZmVQb3MsIHNhZmVQb3MpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SW5wdXRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAndmFsdWUnLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREaXNwbGF5VmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyLmpvaW4oJycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Qmx1ckRpc3BsYXlWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICBsZXQgbGFzdEZpbGxlZEluZGV4ID0gLTE7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5idWZmZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRva2Vuc1tpXSAmJiB0aGlzLnRva2Vuc1tpXS50eXBlICE9PSAnbGl0ZXJhbCcgJiYgdGhpcy5idWZmZXJbaV0gIT09IHRoaXMuc2xvdENoYXIoKSkge1xuICAgICAgICAgICAgICAgIGxhc3RGaWxsZWRJbmRleCA9IGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhc3RGaWxsZWRJbmRleCA9PT0gLTEpIHJldHVybiAnJztcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyLnNsaWNlKDAsIGxhc3RGaWxsZWRJbmRleCArIDEpLmpvaW4oJycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIHRoYXQgc2hvdWxkIGJlIHNldCBvbiB0aGUgbW9kZWwuXG4gICAgICogUmV0dXJucyBudWxsIHdoZW4gdGhlIHVzZXIgaGFzIG5vdCB0eXBlZCBhbnl0aGluZy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE1vZGVsVmFsdWUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGhhc0lucHV0ID0gdGhpcy5idWZmZXIuc29tZShcbiAgICAgICAgICAgIChjaCwgaSkgPT4gdGhpcy50b2tlbnNbaV0gJiYgdGhpcy50b2tlbnNbaV0udHlwZSAhPT0gJ2xpdGVyYWwnICYmIGNoICE9PSB0aGlzLnNsb3RDaGFyKCksXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFoYXNJbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy51bm1hc2soKSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlclxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChjaCwgaSkgPT4gdGhpcy50b2tlbnNbaV0gJiYgdGhpcy50b2tlbnNbaV0udHlwZSAhPT0gJ2xpdGVyYWwnICYmIGNoICE9PSB0aGlzLnNsb3RDaGFyKCkpXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCcnKSB8fCBudWxsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyLmpvaW4oJycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJSYW5nZShzdGFydFBvczogbnVtYmVyLCBlbmRQb3M6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnRQb3M7IGkgPCBlbmRQb3M7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMudG9rZW5zW2ldICYmIHRoaXMudG9rZW5zW2ldLnR5cGUgIT09ICdsaXRlcmFsJykge1xuICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyW2ldID0gdGhpcy5zbG90Q2hhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh0aGlzLmdldERpc3BsYXlWYWx1ZSgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTWFza0NvbXBsZXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMuZXZlcnkoKHRva2VuLCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gJ2xpdGVyYWwnIHx8IHRva2VuLm9wdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlcltpXSAhPT0gdGhpcy5zbG90Q2hhcigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrQW5kRW1pdENvbXBsZXRlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb21wbGV0ZSA9IHRoaXMuaXNNYXNrQ29tcGxldGUoKTtcbiAgICAgICAgaWYgKGNvbXBsZXRlICYmICF0aGlzLndhc0NvbXBsZXRlKSB7XG4gICAgICAgICAgICB0aGlzLndhc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMubWFza0NvbXBsZXRlLmVtaXQodGhpcy5nZXRNb2RlbFZhbHVlKCkgPz8gJycpO1xuICAgICAgICB9IGVsc2UgaWYgKCFjb21wbGV0ZSkge1xuICAgICAgICAgICAgdGhpcy53YXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkaXNwYXRjaElucHV0RXZlbnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm1hc2soKSB8fCB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucmVhZE9ubHkgfHwgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXk7XG5cbiAgICAgICAgLy8gTGV0IHRoZSBicm93c2VyIGhhbmRsZSBzaG9ydGN1dHMgKEN0cmwvQ21kKSwgVGFiLCBhbmQgZnVuY3Rpb24ga2V5c1xuICAgICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGtleSA9PT0gJ1RhYicgfHwga2V5LnN0YXJ0c1dpdGgoJ0YnKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTGV0IHRoZSBicm93c2VyIGhhbmRsZSBhcnJvdyBuYXZpZ2F0aW9uIGFuZCBIb21lL0VuZCBuYXRpdmVseVxuICAgICAgICBpZiAoWydBcnJvd0xlZnQnLCAnQXJyb3dSaWdodCcsICdBcnJvd1VwJywgJ0Fycm93RG93bicsICdIb21lJywgJ0VuZCddLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBzdGFydFBvcyA9IGlucHV0LnNlbGVjdGlvblN0YXJ0ID8/IDA7XG4gICAgICAgIGNvbnN0IGVuZFBvcyA9IGlucHV0LnNlbGVjdGlvbkVuZCA/PyAwO1xuXG4gICAgICAgIGlmIChrZXkgPT09ICdCYWNrc3BhY2UnKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaWYgKHN0YXJ0UG9zICE9PSBlbmRQb3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyUmFuZ2Uoc3RhcnRQb3MsIGVuZFBvcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFBvcyA9IHRoaXMubmV4dEVkaXRhYmxlUG9zKHN0YXJ0UG9zKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEN1cnNvcihuZXh0UG9zIDwgdGhpcy50b2tlbnMubGVuZ3RoID8gbmV4dFBvcyA6IHN0YXJ0UG9zKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRQb3MgPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5wcmV2RWRpdGFibGVQb3Moc3RhcnRQb3MgLSAxKTtcbiAgICAgICAgICAgICAgICBpZiAocG9zID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJbcG9zXSA9IHRoaXMuc2xvdENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKHRoaXMuZ2V0RGlzcGxheVZhbHVlKCkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEN1cnNvcihwb3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5nZXRNb2RlbFZhbHVlKCkpO1xuICAgICAgICAgICAgdGhpcy5jaGVja0FuZEVtaXRDb21wbGV0ZSgpO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaElucHV0RXZlbnQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXkgPT09ICdEZWxldGUnKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaWYgKHN0YXJ0UG9zICE9PSBlbmRQb3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyUmFuZ2Uoc3RhcnRQb3MsIGVuZFBvcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFBvcyA9IHRoaXMubmV4dEVkaXRhYmxlUG9zKHN0YXJ0UG9zKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEN1cnNvcihuZXh0UG9zIDwgdGhpcy50b2tlbnMubGVuZ3RoID8gbmV4dFBvcyA6IHN0YXJ0UG9zKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5uZXh0RWRpdGFibGVQb3Moc3RhcnRQb3MpO1xuICAgICAgICAgICAgICAgIGlmIChwb3MgPCB0aGlzLnRva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJbcG9zXSA9IHRoaXMuc2xvdENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKHRoaXMuZ2V0RGlzcGxheVZhbHVlKCkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEN1cnNvcihwb3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5nZXRNb2RlbFZhbHVlKCkpO1xuICAgICAgICAgICAgdGhpcy5jaGVja0FuZEVtaXRDb21wbGV0ZSgpO1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaElucHV0RXZlbnQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNpbmdsZSBwcmludGFibGUgY2hhcmFjdGVyXG4gICAgICAgIGlmIChrZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICBsZXQgaW5zZXJ0UG9zID0gc3RhcnRQb3M7XG5cbiAgICAgICAgICAgIC8vIENsZWFyIHNlbGVjdGlvbiByYW5nZSBpZiBhbnlcbiAgICAgICAgICAgIGlmIChzdGFydFBvcyAhPT0gZW5kUG9zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhclJhbmdlKHN0YXJ0UG9zLCBlbmRQb3MpO1xuICAgICAgICAgICAgICAgIGluc2VydFBvcyA9IHN0YXJ0UG9zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwb3MgPSB0aGlzLm5leHRFZGl0YWJsZVBvcyhpbnNlcnRQb3MpO1xuICAgICAgICAgICAgaWYgKHBvcyA+PSB0aGlzLnRva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy50b2tlbnNbcG9zXTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRDaGFyKGtleSwgdG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlcltwb3NdID0ga2V5O1xuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKHRoaXMuZ2V0RGlzcGxheVZhbHVlKCkpO1xuXG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gdGhpcy5uZXh0RWRpdGFibGVQb3MocG9zICsgMSk7XG4gICAgICAgICAgICB0aGlzLnNldEN1cnNvcihuZXh0IDw9IHRoaXMudG9rZW5zLmxlbmd0aCA/IG5leHQgOiB0aGlzLnRva2Vucy5sZW5ndGgpO1xuXG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZ2V0TW9kZWxWYWx1ZSgpKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tBbmRFbWl0Q29tcGxldGUoKTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hJbnB1dEV2ZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25Gb2N1cyhfZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm1hc2soKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWx3YXlzIHJlc3RvcmUgZnVsbCBtYXNrIGRpc3BsYXkgb24gZm9jdXMgKHNsb3QgY2hhcnMgYmVjb21lIHZpc2libGUpXG4gICAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh0aGlzLmdldERpc3BsYXlWYWx1ZSgpKTtcblxuICAgICAgICAvLyBNb3ZlIGN1cnNvciB0byB0aGUgZmlyc3QgZW1wdHkgZWRpdGFibGUgc2xvdFxuICAgICAgICBjb25zdCBmaXJzdEVtcHR5ID0gdGhpcy5idWZmZXIuZmluZEluZGV4KFxuICAgICAgICAgICAgKGNoLCBpKSA9PiB0aGlzLnRva2Vuc1tpXSAmJiB0aGlzLnRva2Vuc1tpXS50eXBlICE9PSAnbGl0ZXJhbCcgJiYgY2ggPT09IHRoaXMuc2xvdENoYXIoKSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNldEN1cnNvcihmaXJzdEVtcHR5ID49IDAgPyBmaXJzdEVtcHR5IDogdGhpcy5uZXh0RWRpdGFibGVQb3MoMCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkJsdXIoX2V2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMubWFzaygpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuXG4gICAgICAgIGlmICghdGhpcy5pc01hc2tDb21wbGV0ZSgpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvQ2xlYXIoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRCdWZmZXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKHRoaXMuZ2V0Qmx1ckRpc3BsYXlWYWx1ZSgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMubWFzaygpIHx8IHRoaXMuZWwubmF0aXZlRWxlbWVudC5yZWFkT25seSB8fCB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IGV2ZW50LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQnKSA/PyAnJztcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHN0YXJ0UG9zID0gaW5wdXQuc2VsZWN0aW9uU3RhcnQgPz8gMDtcbiAgICAgICAgY29uc3QgZW5kUG9zID0gaW5wdXQuc2VsZWN0aW9uRW5kID8/IDA7XG5cbiAgICAgICAgaWYgKHN0YXJ0UG9zICE9PSBlbmRQb3MpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJSYW5nZShzdGFydFBvcywgZW5kUG9zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwb3MgPSB0aGlzLm5leHRFZGl0YWJsZVBvcyhzdGFydFBvcyk7XG5cbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiBwYXN0ZWRUZXh0KSB7XG4gICAgICAgICAgICBpZiAocG9zID49IHRoaXMudG9rZW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5zW3Bvc107XG5cbiAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSAnbGl0ZXJhbCcpIHtcbiAgICAgICAgICAgICAgICAvLyBTa2lwIG1hdGNoaW5nIGxpdGVyYWwgaW4gcGFzdGVkIHRleHQ7IHNraXAgdGhlIGxpdGVyYWwgc2xvdCByZWdhcmRsZXNzXG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSB0b2tlbi5jaGFyKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvcysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwb3MgPSB0aGlzLm5leHRFZGl0YWJsZVBvcyhwb3MpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkQ2hhcihjaCwgdG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idWZmZXJbcG9zXSA9IGNoO1xuICAgICAgICAgICAgICAgIHBvcyA9IHRoaXMubmV4dEVkaXRhYmxlUG9zKHBvcyArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKHRoaXMuZ2V0RGlzcGxheVZhbHVlKCkpO1xuICAgICAgICB0aGlzLnNldEN1cnNvcihwb3MgPD0gdGhpcy50b2tlbnMubGVuZ3RoID8gcG9zIDogdGhpcy50b2tlbnMubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmdldE1vZGVsVmFsdWUoKSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbmRFbWl0Q29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaElucHV0RXZlbnQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm1hc2soKSB8fCB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucmVhZE9ubHkgfHwgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgcG9zID0gaW5wdXQuc2VsZWN0aW9uU3RhcnQgPz8gMDtcblxuICAgICAgICAvLyBJZiBjdXJzb3IgbGFuZGVkIG9uIGEgbGl0ZXJhbCwgbnVkZ2UgaXQgdG8gdGhlIG5lYXJlc3QgZWRpdGFibGUgc2xvdFxuICAgICAgICBpZiAodGhpcy50b2tlbnNbcG9zXSAmJiB0aGlzLnRva2Vuc1twb3NdLnR5cGUgPT09ICdsaXRlcmFsJykge1xuICAgICAgICAgICAgdGhpcy5zZXRDdXJzb3IodGhpcy5uZXh0RWRpdGFibGVQb3MocG9zKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxhc3RWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIGlmICghdGhpcy5tYXNrKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVzZXRCdWZmZXIoKTtcblxuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldElucHV0VmFsdWUoJycpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGJ1ZmZlcklkeCA9IDA7XG4gICAgICAgIGxldCB2YWx1ZUlkeCA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHZhbHVlSWR4IDwgdmFsdWUubGVuZ3RoICYmIGJ1ZmZlcklkeCA8IHRoaXMudG9rZW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2Vuc1tidWZmZXJJZHhdO1xuICAgICAgICAgICAgY29uc3QgY2hhciA9IHZhbHVlW3ZhbHVlSWR4XTtcblxuICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICdsaXRlcmFsJykge1xuICAgICAgICAgICAgICAgIC8vIENvbnN1bWUgdGhlIGxpdGVyYWwgY2hhcmFjdGVyIGZyb20gdmFsdWUgaWYgaXQgbWF0Y2hlczsgYWx3YXlzIGFkdmFuY2UgYnVmZmVyXG4gICAgICAgICAgICAgICAgaWYgKGNoYXIgPT09IHRva2VuLmNoYXIpIHZhbHVlSWR4Kys7XG4gICAgICAgICAgICAgICAgYnVmZmVySWR4Kys7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNWYWxpZENoYXIoY2hhciwgdG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idWZmZXJbYnVmZmVySWR4XSA9IGNoYXI7XG4gICAgICAgICAgICAgICAgYnVmZmVySWR4Kys7XG4gICAgICAgICAgICAgICAgdmFsdWVJZHgrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gU2tpcCBjaGFyYWN0ZXJzIGZyb20gdmFsdWUgdGhhdCBkbyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgc2xvdFxuICAgICAgICAgICAgICAgIHZhbHVlSWR4Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldElucHV0VmFsdWUodGhpcy5nZXREaXNwbGF5VmFsdWUoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2Uob25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nIHwgbnVsbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gb25DaGFuZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKG9uVG91Y2hlZDogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IG9uVG91Y2hlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnZGlzYWJsZWQnLCBpc0Rpc2FibGVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgICAgICBpZiAoIXRoaXMubWFzaygpIHx8ICFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pc01hc2tDb21wbGV0ZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBpbmNvbXBsZXRlTWFzazogeyBtYXNrOiB0aGlzLm1hc2soKSB9IH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5cbiJdfQ==