@unipin/angular-applet 18.7.9 → 18.8.1

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.
@@ -42,7 +42,7 @@ export class FormInputComponent {
42
42
  }
43
43
  }
44
44
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormInputComponent, deps: [{ token: 'placeholder', attribute: true }, { token: 'type', attribute: true }, { token: 'autocomplete', attribute: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
45
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FormInputComponent, isStandalone: true, selector: "up-input", inputs: { label: "label", value: "value", required: "required", disabled: "disabled" }, outputs: { onInput: "onInput" }, host: { classAttribute: "d-block" }, providers: [
45
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FormInputComponent, isStandalone: true, selector: "up-input", inputs: { label: "label", value: "value", required: "required", disabled: "disabled", min: "min", max: "max" }, outputs: { onInput: "onInput" }, host: { classAttribute: "d-block" }, providers: [
46
46
  {
47
47
  multi: true,
48
48
  provide: NG_VALUE_ACCESSOR,
@@ -53,7 +53,7 @@ export class FormInputComponent {
53
53
  provide: NG_VALIDATORS,
54
54
  useExisting: FormInputComponent
55
55
  }
56
- ], ngImport: i0, template: "<label class=\"form-label d-flex align-items-center\">\n <ng-content select=\"[icon]\" />\n <span>{{ label }}</span>\n</label>\n\n<input type=\"{{ type }}\" autocomplete=\"{{ autocomplete }}\" placeholder=\"{{ placeholder }}\" class=\"form-control\" [required]=\"required\" [disabled]=\"disabled\" [value]=\"value\" (change)=\"change($event.target)\" (input)=\"input($event)\" />\n\n@if (errorMsg) {\n <label class=\"is-invalid\">{{ errorMsg }}</label>\n}\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
56
+ ], ngImport: i0, template: "<label class=\"form-label d-flex align-items-center\">\n <ng-content select=\"[icon]\" />\n <span>{{ label }}</span>\n</label>\n\n<input \n class=\"form-control\" \n min=\"{{ min }}\" \n max=\"{{ max }}\"\n type=\"{{ type }}\" \n placeholder=\"{{ placeholder }}\" \n autocomplete=\"{{ autocomplete }}\" \n [value]=\"value\" \n [required]=\"required\" \n [disabled]=\"disabled\" \n (input)=\"input($event)\" \n (change)=\"change($event.target)\" \n/>\n\n@if (errorMsg) {\n <label class=\"is-invalid\">{{ errorMsg }}</label>\n}\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
57
57
  }
58
58
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormInputComponent, decorators: [{
59
59
  type: Component,
@@ -70,7 +70,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
70
70
  provide: NG_VALIDATORS,
71
71
  useExisting: FormInputComponent
72
72
  }
73
- ], template: "<label class=\"form-label d-flex align-items-center\">\n <ng-content select=\"[icon]\" />\n <span>{{ label }}</span>\n</label>\n\n<input type=\"{{ type }}\" autocomplete=\"{{ autocomplete }}\" placeholder=\"{{ placeholder }}\" class=\"form-control\" [required]=\"required\" [disabled]=\"disabled\" [value]=\"value\" (change)=\"change($event.target)\" (input)=\"input($event)\" />\n\n@if (errorMsg) {\n <label class=\"is-invalid\">{{ errorMsg }}</label>\n}\n" }]
73
+ ], template: "<label class=\"form-label d-flex align-items-center\">\n <ng-content select=\"[icon]\" />\n <span>{{ label }}</span>\n</label>\n\n<input \n class=\"form-control\" \n min=\"{{ min }}\" \n max=\"{{ max }}\"\n type=\"{{ type }}\" \n placeholder=\"{{ placeholder }}\" \n autocomplete=\"{{ autocomplete }}\" \n [value]=\"value\" \n [required]=\"required\" \n [disabled]=\"disabled\" \n (input)=\"input($event)\" \n (change)=\"change($event.target)\" \n/>\n\n@if (errorMsg) {\n <label class=\"is-invalid\">{{ errorMsg }}</label>\n}\n" }]
74
74
  }], ctorParameters: () => [{ type: undefined, decorators: [{
75
75
  type: Attribute,
76
76
  args: ['placeholder']
@@ -88,7 +88,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
88
88
  type: Input
89
89
  }], disabled: [{
90
90
  type: Input
91
+ }], min: [{
92
+ type: Input
93
+ }], max: [{
94
+ type: Input
91
95
  }], onInput: [{
92
96
  type: Output
93
97
  }] } });
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvaW5wdXQvZm9ybS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvaW5wdXQvZm9ybS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUgsT0FBTyxFQUF5QyxhQUFhLEVBQUUsaUJBQWlCLEVBQStCLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEksT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBd0JyRCxNQUFNLE9BQU8sa0JBQWtCO0lBa0U3QixZQUNtQyxXQUFtQixFQUMxQixJQUF1RSxFQUMvRCxZQUF5eEIsRUFDeHlCLEVBQXFCO1FBSFAsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDMUIsU0FBSSxHQUFKLElBQUksQ0FBbUU7UUFDL0QsaUJBQVksR0FBWixZQUFZLENBQTZ3QjtRQUN4eUIsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFuRDFCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFPMUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQU16QixZQUFPLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFPL0QsY0FBUyxHQUFZLEtBQUssQ0FBQztRQW1CeEIsYUFBUSxHQUF3QixDQUFDLElBQVMsRUFBRSxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBTWxELGNBQVMsR0FBZSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFPdkMsQ0FBQztJQU1FLGdCQUFnQixDQUFDLEVBQU8sSUFBUyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFNdEQsaUJBQWlCLENBQUMsRUFBTyxJQUFTLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQU14RCxLQUFLLENBQUMsR0FBUSxJQUFTLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQU1oRCxVQUFVLENBQUMsR0FBUTtRQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUNqQixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFNTSxnQkFBZ0IsQ0FBRSxDQUFVO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQU9NLFFBQVEsQ0FBQyxPQUF3QjtRQUN0QyxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQztRQUMzQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFTTSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQU87UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDeEIsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0UsQ0FBQztJQUNILENBQUM7K0dBeklVLGtCQUFrQixrQkFtRWhCLGFBQWEsOEJBQ2IsTUFBTSw4QkFDTixjQUFjO21HQXJFaEIsa0JBQWtCLHFOQWJsQjtZQUNUO2dCQUNFLEtBQUssRUFBRSxJQUFJO2dCQUNYLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxrQkFBa0I7YUFDaEM7WUFDRDtnQkFDRSxLQUFLLEVBQUUsSUFBSTtnQkFDWCxPQUFPLEVBQUUsYUFBYTtnQkFDdEIsV0FBVyxFQUFFLGtCQUFrQjthQUNoQztTQUNGLDBCQ3hCSCxvZEFVQTs7NEZEZ0JhLGtCQUFrQjtrQkF0QjlCLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLFVBQVUsbUJBR0gsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDSixLQUFLLEVBQUUsU0FBUztxQkFDakIsYUFDVTt3QkFDVDs0QkFDRSxLQUFLLEVBQUUsSUFBSTs0QkFDWCxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLG9CQUFvQjt5QkFDaEM7d0JBQ0Q7NEJBQ0UsS0FBSyxFQUFFLElBQUk7NEJBQ1gsT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLFdBQVcsb0JBQW9CO3lCQUNoQztxQkFDRjs7MEJBcUVFLFNBQVM7MkJBQUMsYUFBYTs7MEJBQ3ZCLFNBQVM7MkJBQUMsTUFBTTs7MEJBQ2hCLFNBQVM7MkJBQUMsY0FBYzt5RUEvRFgsS0FBSztzQkFBcEIsS0FBSztnQkFNVSxLQUFLO3NCQUFwQixLQUFLO2dCQU9VLFFBQVE7c0JBQXZCLEtBQUs7Z0JBT1UsUUFBUTtzQkFBdkIsS0FBSztnQkFNVyxPQUFPO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXR0cmlidXRlLCBDaGFuZ2VEZXRlY3RvclJlZiwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZ2V0Rm9ybUVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAndXAtaW5wdXQnLFxuICBzdHlsZVVybDogJy4vZm9ybS1pbnB1dC5jb21wb25lbnQuc2NzcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2QtYmxvY2snXG4gIH0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogRm9ybUlucHV0Q29tcG9uZW50XG4gICAgfSxcbiAgICB7XG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogRm9ybUlucHV0Q29tcG9uZW50XG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1JbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3Ige1xuXG4gIC8qKlxuICAgKiBJbnB1dCB2YXJpYWJsZSBmb3IgdGhlIGxhYmVsIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5wdXQuXG4gICAqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgbGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElucHV0IHZhcmlhYmxlIGZvciB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgaW5wdXQuXG4gICAqIEB0eXBlIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIHZhbHVlPzogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogSW5wdXQgdmFyaWFibGUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGlucHV0IGlzIHJlcXVpcmVkLlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJbnB1dCB2YXJpYWJsZSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgaW5wdXQgaXMgZGlzYWJsZWQuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIE91dHB1dCB2YXJpYWJsZSBmb3IgZW1pdHRpbmcgaW5wdXQgZXZlbnRzLlxuICAgKiBAdHlwZSB7RXZlbnRFbWl0dGVyPGFueT59XG4gICAqL1xuICBAT3V0cHV0KCkgcHVibGljIG9uSW5wdXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEJvb2xlYW4gZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGlucHV0IGhhcyBiZWVuIHRvdWNoZWQuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcHVibGljIGlzVG91Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBFcnJvciBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5wdXQuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgcHVibGljIGVycm9yTXNnITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9ybSBjb250cm9sIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5wdXQuXG4gICAqIEB0eXBlIHtBYnN0cmFjdENvbnRyb2x9XG4gICAqL1xuICBwcm90ZWN0ZWQgZm9ybUNvbnRyb2whOiBBYnN0cmFjdENvbnRyb2w7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSB2YWx1ZSBjaGFuZ2VzIGluIHRoZSBpbnB1dC5cbiAgICogQHR5cGUgeyhfdmFsOiBhbnkpID0+IHZvaWR9XG4gICAqL1xuICBwcm90ZWN0ZWQgb25DaGFuZ2U6IChfdmFsOiBhbnkpID0+IHZvaWQgPSAoX3ZhbDogYW55KSA9PiB7fTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIHRvdWNoIGV2ZW50cyBpbiB0aGUgaW5wdXQuXG4gICAqIEB0eXBlIHsoKSA9PiB2b2lkfVxuICAgKi9cbiAgcHJvdGVjdGVkIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBBdHRyaWJ1dGUoJ3BsYWNlaG9sZGVyJykgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmcsXG4gICAgQEF0dHJpYnV0ZSgndHlwZScpIHB1YmxpYyB0eXBlOiAnZW1haWwnIHwgJ2hpZGRlbicgfCAnbnVtYmVyJyB8ICdzZWFyY2gnIHwgJ3RlbCcgfCAndGV4dCcgfCAndXJsJyxcbiAgICBAQXR0cmlidXRlKCdhdXRvY29tcGxldGUnKSBwdWJsaWMgYXV0b2NvbXBsZXRlOiAnbmFtZScgfCAnZW1haWwnIHwgJ3RlbCcgfCAndXJsJyB8ICdvbicgfCAnb2ZmJyB8ICdob25vcmlmaWMtcHJlZml4JyB8ICdnaXZlbi1uYW1lJyB8ICdhZGRpdGlvbmFsLW5hbWUnIHwgJ2ZhbWlseS1uYW1lJyB8ICdob25vcmlmaWMtc3VmZml4JyB8ICduaWNrbmFtZScgfCAndXNlcm5hbWUnIHwgJ29uZS10aW1lLWNvZGUnIHwgJ29yZ2FuaXphdGlvbi10aXRsZScgfCAnb3JnYW5pemF0aW9uJyB8ICdzdHJlZXQtYWRkcmVzcycgfCAnYWRkcmVzcy1saW5lMScgfCAnYWRkcmVzcy1saW5lMicgfCAnYWRkcmVzcy1saW5lMycgfCAnYWRkcmVzcy1sZXZlbDQnIHwgJ2FkZHJlc3MtbGV2ZWwzJyB8ICdhZGRyZXNzLWxldmVsMicgfCAnYWRkcmVzcy1sZXZlbDEnIHwgJ2NvdW50cnknIHwgJ2NvdW50cnktbmFtZScgfCAncG9zdGFsLWNvZGUnIHwgJ2NjLW5hbWUnIHwgJ2NjLWdpdmVuLW5hbWUnIHwgJ2NjLWFkZGl0aW9uYWwtbmFtZScgfCAnY2MtZmFtaWx5LW5hbWUnIHwgJ2NjLW51bWJlcicgfCAnY2MtZXhwJyB8ICdjYy1leHAtbW9udGgnIHwgJ2NjLWV4cC15ZWFyJyB8ICdjYy1jc2MnIHwgJ2NjLXR5cGUnIHwgJ3RyYW5zYWN0aW9uLWN1cnJlbmN5JyB8ICd0cmFuc2FjdGlvbi1hbW91bnQnIHwgJ2xhbmd1YWdlJyB8ICdiZGF5JyB8ICdiZGF5LWRheScgfCAnYmRheS1tb250aCcgfCAnYmRheS15ZWFyJyB8ICdzZXgnIHwgJ3RlbC1jb3VudHJ5LWNvZGUnIHwgJ3RlbC1uYXRpb25hbCcgfCAndGVsLWFyZWEtY29kZScgfCAndGVsLWxvY2FsJyB8ICd0ZWwtZXh0ZW5zaW9uJyxcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2g6IENoYW5nZURldGVjdG9yUmVmXG4gICkgeyB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBpbnB1dCB2YWx1ZSBjaGFuZ2VzLlxuICAgKiBAcGFyYW0geyhfdmFsOiBhbnkpID0+IHZvaWR9IGZuIC0gQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIHZhbHVlIGNoYW5nZXMuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZHsgdGhpcy5vbkNoYW5nZSA9IGZuOyB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBpbnB1dCBpcyB0b3VjaGVkLlxuICAgKiBAcGFyYW0geygpID0+IHZvaWR9IGZuIC0gQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRvdWNoIGV2ZW50cy5cbiAgICovXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZHsgdGhpcy5vblRvdWNoZWQgPSBmbjsgfSBcblxuICAvKipcbiAgICogRW1pdHMgYW4gaW5wdXQgZXZlbnQgd2hlbiB0aGUgaW5wdXQgdmFsdWUgY2hhbmdlcy5cbiAgICogQHBhcmFtIHthbnl9IHZhbCAtIFRoZSBuZXcgdmFsdWUgb2YgdGhlIGlucHV0LlxuICAgKi9cbiAgcHVibGljIGlucHV0KHZhbDogYW55KTogdm9pZHsgdGhpcy5vbklucHV0LmVtaXQodmFsKTsgfVxuXG4gIC8qKlxuICAgKiBXcml0ZXMgYSBuZXcgdmFsdWUgdG8gdGhlIGlucHV0LlxuICAgKiBAcGFyYW0geyp9IHZhbCAtIFRoZSBuZXcgdmFsdWUgdG8gYmUgc2V0LlxuICAgKi9cbiAgcHVibGljIHdyaXRlVmFsdWUodmFsOiBhbnkpOiB2b2lke1xuICAgIHRoaXMudmFsdWUgPSB2YWw7IFxuICAgIHRoaXMuY2gubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIGlucHV0LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGQgLSBXaGV0aGVyIHRoZSBpbnB1dCBzaG91bGQgYmUgZGlzYWJsZWQgb3Igbm90LlxuICAgKi9cbiAgcHVibGljIHNldERpc2FibGVkU3RhdGU/KGQ6IGJvb2xlYW4pOiB2b2lkeyBcbiAgICB0aGlzLmRpc2FibGVkID0gZDsgXG4gICAgdGhpcy5jaC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGlucHV0LlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0Q29udHJvbH0gY29udHJvbCAtIFRoZSBhYnN0cmFjdCBjb250cm9sIHJlcHJlc2VudGluZyB0aGUgaW5wdXQuXG4gICAqIEByZXR1cm5zIHsoVmFsaWRhdGlvbkVycm9ycyB8IG51bGwpfSAtIFZhbGlkYXRpb24gZXJyb3JzIGlmIGFueSwgb3RoZXJ3aXNlIG51bGwuXG4gICAqL1xuICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGx7XG4gICAgdGhpcy5mb3JtQ29udHJvbCA9IGNvbnRyb2w7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRXZlbnQgaGFuZGxlciBmb3IgaW5wdXQgY2hhbmdlcyBpbiB0aGUgaW5wdXQuXG4gICAqIElmIG5vdCB0b3VjaGVkLCBtYXJrcyB0aGUgaW5wdXQgYXMgdG91Y2hlZC5cbiAgICogSWYgbm90IGRpc2FibGVkLCB1cGRhdGVzIHRoZSB2YWx1ZSwgdHJpZ2dlcnMgY2hhbmdlIGRldGVjdGlvbiwgYW5kIGVtaXRzIHRoZSBpbnB1dCBldmVudC5cbiAgICogVXBkYXRlcyB0aGUgZXJyb3IgbWVzc2FnZSBiYXNlZCBvbiBmb3JtIGNvbnRyb2wgZXJyb3JzIGFuZCBsYWJlbC5cbiAgICogQHBhcmFtIHthbnl9IHBhcmFtMCAtIEV2ZW50IGRldGFpbCBjb250YWluaW5nIHRoZSBuZXcgaW5wdXQgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgY2hhbmdlKHsgdmFsdWUgfTogYW55KTogdm9pZHtcbiAgICBpZiAoIXRoaXMuaXNUb3VjaGVkKSB7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgdGhpcy5pc1RvdWNoZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgIHRoaXMuZXJyb3JNc2cgPSBnZXRGb3JtRXJyb3JNZXNzYWdlKHRoaXMuZm9ybUNvbnRyb2wuZXJyb3JzLCB0aGlzLmxhYmVsKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltpY29uXVwiIC8+XG4gICAgPHNwYW4+e3sgbGFiZWwgfX08L3NwYW4+XG48L2xhYmVsPlxuXG48aW5wdXQgdHlwZT1cInt7IHR5cGUgfX1cIiBhdXRvY29tcGxldGU9XCJ7eyBhdXRvY29tcGxldGUgfX1cIiBwbGFjZWhvbGRlcj1cInt7IHBsYWNlaG9sZGVyIH19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbdmFsdWVdPVwidmFsdWVcIiAoY2hhbmdlKT1cImNoYW5nZSgkZXZlbnQudGFyZ2V0KVwiIChpbnB1dCk9XCJpbnB1dCgkZXZlbnQpXCIgLz5cblxuQGlmIChlcnJvck1zZykge1xuICAgIDxsYWJlbCBjbGFzcz1cImlzLWludmFsaWRcIj57eyBlcnJvck1zZyB9fTwvbGFiZWw+XG59XG4iXX0=
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvaW5wdXQvZm9ybS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvaW5wdXQvZm9ybS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUgsT0FBTyxFQUF5QyxhQUFhLEVBQUUsaUJBQWlCLEVBQStCLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEksT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBd0JyRCxNQUFNLE9BQU8sa0JBQWtCO0lBOEU3QixZQUNtQyxXQUFtQixFQUMxQixJQUF1RSxFQUMvRCxZQUF5eEIsRUFDeHlCLEVBQXFCO1FBSFAsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDMUIsU0FBSSxHQUFKLElBQUksQ0FBbUU7UUFDL0QsaUJBQVksR0FBWixZQUFZLENBQTZ3QjtRQUN4eUIsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUEvRDFCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFPMUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQWtCekIsWUFBTyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBTy9ELGNBQVMsR0FBWSxLQUFLLENBQUM7UUFtQnhCLGFBQVEsR0FBd0IsQ0FBQyxJQUFTLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQztRQU1sRCxjQUFTLEdBQWUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBT3ZDLENBQUM7SUFNRSxnQkFBZ0IsQ0FBQyxFQUFPLElBQVMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBTXRELGlCQUFpQixDQUFDLEVBQU8sSUFBUyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFNeEQsS0FBSyxDQUFDLEdBQVEsSUFBUyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFNaEQsVUFBVSxDQUFDLEdBQVE7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7UUFDakIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBTU0sZ0JBQWdCLENBQUUsQ0FBVTtRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFPTSxRQUFRLENBQUMsT0FBd0I7UUFDdEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUM7UUFDM0IsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBU00sTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFPO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNFLENBQUM7SUFDSCxDQUFDOytHQXJKVSxrQkFBa0Isa0JBK0VoQixhQUFhLDhCQUNiLE1BQU0sOEJBQ04sY0FBYzttR0FqRmhCLGtCQUFrQiw2T0FibEI7WUFDVDtnQkFDRSxLQUFLLEVBQUUsSUFBSTtnQkFDWCxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsa0JBQWtCO2FBQ2hDO1lBQ0Q7Z0JBQ0UsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLFdBQVcsRUFBRSxrQkFBa0I7YUFDaEM7U0FDRiwwQkN4QkgsMmpCQXNCQTs7NEZESWEsa0JBQWtCO2tCQXRCOUIsU0FBUztpQ0FDSSxJQUFJLFlBQ04sVUFBVSxtQkFHSCx1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDO3dCQUNKLEtBQUssRUFBRSxTQUFTO3FCQUNqQixhQUNVO3dCQUNUOzRCQUNFLEtBQUssRUFBRSxJQUFJOzRCQUNYLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsb0JBQW9CO3lCQUNoQzt3QkFDRDs0QkFDRSxLQUFLLEVBQUUsSUFBSTs0QkFDWCxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsV0FBVyxvQkFBb0I7eUJBQ2hDO3FCQUNGOzswQkFpRkUsU0FBUzsyQkFBQyxhQUFhOzswQkFDdkIsU0FBUzsyQkFBQyxNQUFNOzswQkFDaEIsU0FBUzsyQkFBQyxjQUFjO3lFQTNFWCxLQUFLO3NCQUFwQixLQUFLO2dCQU1VLEtBQUs7c0JBQXBCLEtBQUs7Z0JBT1UsUUFBUTtzQkFBdkIsS0FBSztnQkFPVSxRQUFRO3NCQUF2QixLQUFLO2dCQU1VLEdBQUc7c0JBQWxCLEtBQUs7Z0JBTVUsR0FBRztzQkFBbEIsS0FBSztnQkFNVyxPQUFPO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXR0cmlidXRlLCBDaGFuZ2VEZXRlY3RvclJlZiwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZ2V0Rm9ybUVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAndXAtaW5wdXQnLFxuICBzdHlsZVVybDogJy4vZm9ybS1pbnB1dC5jb21wb25lbnQuc2NzcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2QtYmxvY2snXG4gIH0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogRm9ybUlucHV0Q29tcG9uZW50XG4gICAgfSxcbiAgICB7XG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogRm9ybUlucHV0Q29tcG9uZW50XG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1JbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3Ige1xuXG4gIC8qKlxuICAgKiBJbnB1dCB2YXJpYWJsZSBmb3IgdGhlIGxhYmVsIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5wdXQuXG4gICAqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgbGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElucHV0IHZhcmlhYmxlIGZvciB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgaW5wdXQuXG4gICAqIEB0eXBlIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIHZhbHVlPzogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogSW5wdXQgdmFyaWFibGUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGlucHV0IGlzIHJlcXVpcmVkLlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJbnB1dCB2YXJpYWJsZSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgaW5wdXQgaXMgZGlzYWJsZWQuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIFxuICAvKipcbiAgICogSW5wdXQgdmFyaWFibGUgZm9yIHRoZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSBpbnB1dC5cbiAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBtaW4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElucHV0IHZhcmlhYmxlIGZvciB0aGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgaW5wdXQuXG4gICAqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgbWF4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPdXRwdXQgdmFyaWFibGUgZm9yIGVtaXR0aW5nIGlucHV0IGV2ZW50cy5cbiAgICogQHR5cGUge0V2ZW50RW1pdHRlcjxhbnk+fVxuICAgKi9cbiAgQE91dHB1dCgpIHB1YmxpYyBvbklucHV0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBCb29sZWFuIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBpbnB1dCBoYXMgYmVlbiB0b3VjaGVkLlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHB1YmxpYyBpc1RvdWNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogRXJyb3IgbWVzc2FnZSBhc3NvY2lhdGVkIHdpdGggdGhlIGlucHV0LlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIHB1YmxpYyBlcnJvck1zZyE6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZvcm0gY29udHJvbCBhc3NvY2lhdGVkIHdpdGggdGhlIGlucHV0LlxuICAgKiBAdHlwZSB7QWJzdHJhY3RDb250cm9sfVxuICAgKi9cbiAgcHJvdGVjdGVkIGZvcm1Db250cm9sITogQWJzdHJhY3RDb250cm9sO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiB0byBoYW5kbGUgdmFsdWUgY2hhbmdlcyBpbiB0aGUgaW5wdXQuXG4gICAqIEB0eXBlIHsoX3ZhbDogYW55KSA9PiB2b2lkfVxuICAgKi9cbiAgcHJvdGVjdGVkIG9uQ2hhbmdlOiAoX3ZhbDogYW55KSA9PiB2b2lkID0gKF92YWw6IGFueSkgPT4ge307XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSB0b3VjaCBldmVudHMgaW4gdGhlIGlucHV0LlxuICAgKiBAdHlwZSB7KCkgPT4gdm9pZH1cbiAgICovXG4gIHByb3RlY3RlZCBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAQXR0cmlidXRlKCdwbGFjZWhvbGRlcicpIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nLFxuICAgIEBBdHRyaWJ1dGUoJ3R5cGUnKSBwdWJsaWMgdHlwZTogJ2VtYWlsJyB8ICdoaWRkZW4nIHwgJ251bWJlcicgfCAnc2VhcmNoJyB8ICd0ZWwnIHwgJ3RleHQnIHwgJ3VybCcsXG4gICAgQEF0dHJpYnV0ZSgnYXV0b2NvbXBsZXRlJykgcHVibGljIGF1dG9jb21wbGV0ZTogJ25hbWUnIHwgJ2VtYWlsJyB8ICd0ZWwnIHwgJ3VybCcgfCAnb24nIHwgJ29mZicgfCAnaG9ub3JpZmljLXByZWZpeCcgfCAnZ2l2ZW4tbmFtZScgfCAnYWRkaXRpb25hbC1uYW1lJyB8ICdmYW1pbHktbmFtZScgfCAnaG9ub3JpZmljLXN1ZmZpeCcgfCAnbmlja25hbWUnIHwgJ3VzZXJuYW1lJyB8ICdvbmUtdGltZS1jb2RlJyB8ICdvcmdhbml6YXRpb24tdGl0bGUnIHwgJ29yZ2FuaXphdGlvbicgfCAnc3RyZWV0LWFkZHJlc3MnIHwgJ2FkZHJlc3MtbGluZTEnIHwgJ2FkZHJlc3MtbGluZTInIHwgJ2FkZHJlc3MtbGluZTMnIHwgJ2FkZHJlc3MtbGV2ZWw0JyB8ICdhZGRyZXNzLWxldmVsMycgfCAnYWRkcmVzcy1sZXZlbDInIHwgJ2FkZHJlc3MtbGV2ZWwxJyB8ICdjb3VudHJ5JyB8ICdjb3VudHJ5LW5hbWUnIHwgJ3Bvc3RhbC1jb2RlJyB8ICdjYy1uYW1lJyB8ICdjYy1naXZlbi1uYW1lJyB8ICdjYy1hZGRpdGlvbmFsLW5hbWUnIHwgJ2NjLWZhbWlseS1uYW1lJyB8ICdjYy1udW1iZXInIHwgJ2NjLWV4cCcgfCAnY2MtZXhwLW1vbnRoJyB8ICdjYy1leHAteWVhcicgfCAnY2MtY3NjJyB8ICdjYy10eXBlJyB8ICd0cmFuc2FjdGlvbi1jdXJyZW5jeScgfCAndHJhbnNhY3Rpb24tYW1vdW50JyB8ICdsYW5ndWFnZScgfCAnYmRheScgfCAnYmRheS1kYXknIHwgJ2JkYXktbW9udGgnIHwgJ2JkYXkteWVhcicgfCAnc2V4JyB8ICd0ZWwtY291bnRyeS1jb2RlJyB8ICd0ZWwtbmF0aW9uYWwnIHwgJ3RlbC1hcmVhLWNvZGUnIHwgJ3RlbC1sb2NhbCcgfCAndGVsLWV4dGVuc2lvbicsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNoOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHsgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgaW5wdXQgdmFsdWUgY2hhbmdlcy5cbiAgICogQHBhcmFtIHsoX3ZhbDogYW55KSA9PiB2b2lkfSBmbiAtIENhbGxiYWNrIGZ1bmN0aW9uIGZvciB2YWx1ZSBjaGFuZ2VzLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWR7IHRoaXMub25DaGFuZ2UgPSBmbjsgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgaW5wdXQgaXMgdG91Y2hlZC5cbiAgICogQHBhcmFtIHsoKSA9PiB2b2lkfSBmbiAtIENhbGxiYWNrIGZ1bmN0aW9uIGZvciB0b3VjaCBldmVudHMuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWR7IHRoaXMub25Ub3VjaGVkID0gZm47IH0gXG5cbiAgLyoqXG4gICAqIEVtaXRzIGFuIGlucHV0IGV2ZW50IHdoZW4gdGhlIGlucHV0IHZhbHVlIGNoYW5nZXMuXG4gICAqIEBwYXJhbSB7YW55fSB2YWwgLSBUaGUgbmV3IHZhbHVlIG9mIHRoZSBpbnB1dC5cbiAgICovXG4gIHB1YmxpYyBpbnB1dCh2YWw6IGFueSk6IHZvaWR7IHRoaXMub25JbnB1dC5lbWl0KHZhbCk7IH1cblxuICAvKipcbiAgICogV3JpdGVzIGEgbmV3IHZhbHVlIHRvIHRoZSBpbnB1dC5cbiAgICogQHBhcmFtIHsqfSB2YWwgLSBUaGUgbmV3IHZhbHVlIHRvIGJlIHNldC5cbiAgICovXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbDogYW55KTogdm9pZHtcbiAgICB0aGlzLnZhbHVlID0gdmFsOyBcbiAgICB0aGlzLmNoLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGRpc2FibGVkIHN0YXRlIG9mIHRoZSBpbnB1dC5cbiAgICogQHBhcmFtIHtib29sZWFufSBkIC0gV2hldGhlciB0aGUgaW5wdXQgc2hvdWxkIGJlIGRpc2FibGVkIG9yIG5vdC5cbiAgICovXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlPyhkOiBib29sZWFuKTogdm9pZHsgXG4gICAgdGhpcy5kaXNhYmxlZCA9IGQ7IFxuICAgIHRoaXMuY2gubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBpbnB1dC5cbiAgICogQHBhcmFtIHtBYnN0cmFjdENvbnRyb2x9IGNvbnRyb2wgLSBUaGUgYWJzdHJhY3QgY29udHJvbCByZXByZXNlbnRpbmcgdGhlIGlucHV0LlxuICAgKiBAcmV0dXJucyB7KFZhbGlkYXRpb25FcnJvcnMgfCBudWxsKX0gLSBWYWxpZGF0aW9uIGVycm9ycyBpZiBhbnksIG90aGVyd2lzZSBudWxsLlxuICAgKi9cbiAgcHVibGljIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxse1xuICAgIHRoaXMuZm9ybUNvbnRyb2wgPSBjb250cm9sO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEV2ZW50IGhhbmRsZXIgZm9yIGlucHV0IGNoYW5nZXMgaW4gdGhlIGlucHV0LlxuICAgKiBJZiBub3QgdG91Y2hlZCwgbWFya3MgdGhlIGlucHV0IGFzIHRvdWNoZWQuXG4gICAqIElmIG5vdCBkaXNhYmxlZCwgdXBkYXRlcyB0aGUgdmFsdWUsIHRyaWdnZXJzIGNoYW5nZSBkZXRlY3Rpb24sIGFuZCBlbWl0cyB0aGUgaW5wdXQgZXZlbnQuXG4gICAqIFVwZGF0ZXMgdGhlIGVycm9yIG1lc3NhZ2UgYmFzZWQgb24gZm9ybSBjb250cm9sIGVycm9ycyBhbmQgbGFiZWwuXG4gICAqIEBwYXJhbSB7YW55fSBwYXJhbTAgLSBFdmVudCBkZXRhaWwgY29udGFpbmluZyB0aGUgbmV3IGlucHV0IHZhbHVlLlxuICAgKi9cbiAgcHVibGljIGNoYW5nZSh7IHZhbHVlIH06IGFueSk6IHZvaWR7XG4gICAgaWYgKCF0aGlzLmlzVG91Y2hlZCkge1xuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgIHRoaXMuaXNUb3VjaGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgICB0aGlzLmVycm9yTXNnID0gZ2V0Rm9ybUVycm9yTWVzc2FnZSh0aGlzLmZvcm1Db250cm9sLmVycm9ycywgdGhpcy5sYWJlbCk7XG4gICAgfVxuICB9XG59XG4iLCI8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaWNvbl1cIiAvPlxuICAgIDxzcGFuPnt7IGxhYmVsIH19PC9zcGFuPlxuPC9sYWJlbD5cblxuPGlucHV0IFxuICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgXG4gICAgbWluPVwie3sgbWluIH19XCIgXG4gICAgbWF4PVwie3sgbWF4IH19XCJcbiAgICB0eXBlPVwie3sgdHlwZSB9fVwiIFxuICAgIHBsYWNlaG9sZGVyPVwie3sgcGxhY2Vob2xkZXIgfX1cIiBcbiAgICBhdXRvY29tcGxldGU9XCJ7eyBhdXRvY29tcGxldGUgfX1cIiBcbiAgICBbdmFsdWVdPVwidmFsdWVcIiBcbiAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIiBcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBcbiAgICAoaW5wdXQpPVwiaW5wdXQoJGV2ZW50KVwiIFxuICAgIChjaGFuZ2UpPVwiY2hhbmdlKCRldmVudC50YXJnZXQpXCIgXG4vPlxuXG5AaWYgKGVycm9yTXNnKSB7XG4gICAgPGxhYmVsIGNsYXNzPVwiaXMtaW52YWxpZFwiPnt7IGVycm9yTXNnIH19PC9sYWJlbD5cbn1cbiJdfQ==
@@ -1,16 +1,18 @@
1
1
  import { inject, Injectable } from '@angular/core';
2
+ import { Router } from '@angular/router';
2
3
  import { catchError, switchMap, throwError } from 'rxjs';
3
4
  import { AuthService } from '../../services';
4
5
  import * as i0 from "@angular/core";
5
- import * as i1 from "../../services";
6
+ import * as i1 from "@angular/router";
7
+ import * as i2 from "../../services";
6
8
  export const refreshTokenInterceptor = (request, next) => {
9
+ const router = inject(Router);
7
10
  const authService = inject(AuthService);
8
11
  return next(request).pipe(catchError(({ error: { errors } }) => {
9
12
  if (errors[0].extensions.code !== 'USER_INVALID_TOKEN') {
10
13
  return throwError(() => errors[0]);
11
14
  }
12
15
  return authService.refreshToken({ refreshToken: AuthService.refreshToken }).pipe(switchMap(({ data }) => {
13
- console.log('data new refersh token: ', data);
14
16
  const { accessToken, refreshToken } = data.authMsRefreshAccessToken;
15
17
  AuthService.authToken = accessToken;
16
18
  AuthService.refreshToken = refreshToken;
@@ -29,20 +31,22 @@ export const refreshTokenInterceptor = (request, next) => {
29
31
  AuthService.authToken = '';
30
32
  AuthService.refreshToken = '';
31
33
  authService.user = undefined;
32
- location.href = '/auth/login';
34
+ setTimeout(() => {
35
+ location.href = `/auth/login?url=${encodeURIComponent(router.url + location.hash)}`;
36
+ }, 250);
33
37
  return throwError(() => errors[0]);
34
38
  }));
35
39
  }));
36
40
  };
37
41
  export class RefreshTokenInterceptor {
38
- constructor(authService) {
42
+ constructor(router, authService) {
43
+ this.router = router;
39
44
  this.authService = authService;
40
45
  }
41
46
  intercept(request, next) {
42
47
  return next.handle(request).pipe(catchError(({ error: { errors } }) => {
43
48
  if (errors[0].extensions.code === 'USER_INVALID_TOKEN') {
44
49
  return this.authService.refreshToken({ refreshToken: AuthService.refreshToken }).pipe(switchMap(({ data }) => {
45
- console.log('data new refresh token: ', data);
46
50
  const { accessToken, refreshToken } = data.authMsRefreshAccessToken;
47
51
  AuthService.authToken = accessToken;
48
52
  AuthService.refreshToken = refreshToken;
@@ -61,17 +65,19 @@ export class RefreshTokenInterceptor {
61
65
  AuthService.authToken = '';
62
66
  AuthService.refreshToken = '';
63
67
  this.authService.user = undefined;
64
- setTimeout(() => location.href = '/auth/login', 250);
68
+ setTimeout(() => {
69
+ location.href = `/auth/login?url=${encodeURIComponent(this.router.url + location.hash)}`;
70
+ }, 250);
65
71
  return throwError(() => errors[0]);
66
72
  }));
67
73
  }
68
74
  return throwError(() => errors[0]);
69
75
  }));
70
76
  }
71
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RefreshTokenInterceptor, deps: [{ token: i1.AuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
77
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RefreshTokenInterceptor, deps: [{ token: i1.Router }, { token: i2.AuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
72
78
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RefreshTokenInterceptor }); }
73
79
  }
74
80
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RefreshTokenInterceptor, decorators: [{
75
81
  type: Injectable
76
- }], ctorParameters: () => [{ type: i1.AuthService }] });
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmcmVzaC10b2tlbi5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvaW50ZXJjZXB0b3JzL3JlZnJlc2gtdG9rZW4vcmVmcmVzaC10b2tlbi5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsVUFBVSxFQUFjLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFFN0MsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQXNCLENBQ3hELE9BQXlCLEVBQ3pCLElBQW1CLEVBQ1MsRUFBRTtJQUM5QixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFeEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUN2QixVQUFVLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRTtRQUNuQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLG9CQUFvQixFQUFFLENBQUM7WUFDdkQsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUVELE9BQU8sV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQzlFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixFQUFF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QUFVLENBQUMsQ0FBQztvQkFDcEMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDckMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFFeEMsV0FBVyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7b0JBQzNCLFdBQVcsQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7b0JBRWxDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDckQsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLENBQUMsQ0FBQyxDQUNILENBQUM7WUFDSixDQUFDO1lBRUQsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7K0dBOUNVLHVCQUF1QjttSEFBdkIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQURuQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwRXZlbnQsIEh0dHBIYW5kbGVyLCBIdHRwSGFuZGxlckZuLCBIdHRwSW50ZXJjZXB0b3IsIEh0dHBJbnRlcmNlcHRvckZuLCBIdHRwUmVxdWVzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIE9ic2VydmFibGUsIHN3aXRjaE1hcCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbmV4cG9ydCBjb25zdCByZWZyZXNoVG9rZW5JbnRlcmNlcHRvcjogSHR0cEludGVyY2VwdG9yRm4gPSAoXG4gIHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sIFxuICBuZXh0OiBIdHRwSGFuZGxlckZuXG4pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiA9PiB7XG4gIGNvbnN0IGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcblxuICByZXR1cm4gbmV4dChyZXF1ZXN0KS5waXBlKFxuICAgIGNhdGNoRXJyb3IoKHsgZXJyb3I6IHsgZXJyb3JzIH0gfSkgPT4ge1xuICAgICAgaWYgKGVycm9yc1swXS5leHRlbnNpb25zLmNvZGUgIT09ICdVU0VSX0lOVkFMSURfVE9LRU4nKSB7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yc1swXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhdXRoU2VydmljZS5yZWZyZXNoVG9rZW4oeyByZWZyZXNoVG9rZW46IEF1dGhTZXJ2aWNlLnJlZnJlc2hUb2tlbiB9KS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHsgZGF0YSB9KSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ2RhdGEgbmV3IHJlZmVyc2ggdG9rZW46ICcsIGRhdGEpO1xuICAgICAgICAgIGNvbnN0IHsgYWNjZXNzVG9rZW4sIHJlZnJlc2hUb2tlbiB9ID0gZGF0YSEuYXV0aE1zUmVmcmVzaEFjY2Vzc1Rva2VuO1xuXG4gICAgICAgICAgQXV0aFNlcnZpY2UuYXV0aFRva2VuID0gYWNjZXNzVG9rZW4hO1xuICAgICAgICAgIEF1dGhTZXJ2aWNlLnJlZnJlc2hUb2tlbiA9IHJlZnJlc2hUb2tlbiE7XG5cbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXV0aFRva2VuJywgYWNjZXNzVG9rZW4hKTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgncmVmcmVzaFRva2VuJywgcmVmcmVzaFRva2VuISk7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dChyZXF1ZXN0LmNsb25lKHtcbiAgICAgICAgICAgIHNldEhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgYXV0aG9yaXphdGlvbjogYWNjZXNzVG9rZW4hLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgncm9sZXMnKTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgndXNlckd1aWQnKTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnYXV0aFRva2VuJyk7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3JlZnJlc2hUb2tlbicpO1xuXG4gICAgICAgICAgQXV0aFNlcnZpY2UuYXV0aFRva2VuID0gJyc7XG4gICAgICAgICAgQXV0aFNlcnZpY2UucmVmcmVzaFRva2VuID0gJyc7XG4gICAgICAgICAgYXV0aFNlcnZpY2UudXNlciA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSAnL2F1dGgvbG9naW4nO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yc1swXSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pXG4gICk7XG59O1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIC0gREkgYmFzZWQgaW50ZXJjZXB0b3Igd2lsbCBiZSByZW1vdmVkIGF0IHYxOS4wLjAsIHVzZSBmdW5jdGlvbiBiYXNlZCBpbnRlcmNlcHRvciBpbnN0ZWFkXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZWZyZXNoVG9rZW5JbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZVxuICApIHsgfVxuXG4gIHB1YmxpYyBpbnRlcmNlcHQocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PntcbiAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoKHsgZXJyb3I6IHsgZXJyb3JzIH0gfSkgPT4ge1xuICAgICAgICBpZiAoZXJyb3JzWzBdLmV4dGVuc2lvbnMuY29kZSA9PT0gJ1VTRVJfSU5WQUxJRF9UT0tFTicpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZS5yZWZyZXNoVG9rZW4oeyByZWZyZXNoVG9rZW46IEF1dGhTZXJ2aWNlLnJlZnJlc2hUb2tlbiB9KS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKCh7IGRhdGEgfSkgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZGF0YSBuZXcgcmVmcmVzaCB0b2tlbjogJywgZGF0YSk7XG4gICAgICAgICAgICAgIGNvbnN0IHsgYWNjZXNzVG9rZW4sIHJlZnJlc2hUb2tlbiB9ID0gZGF0YSEuYXV0aE1zUmVmcmVzaEFjY2Vzc1Rva2VuO1xuXG4gICAgICAgICAgICAgIEF1dGhTZXJ2aWNlLmF1dGhUb2tlbiA9IGFjY2Vzc1Rva2VuITtcbiAgICAgICAgICAgICAgQXV0aFNlcnZpY2UucmVmcmVzaFRva2VuID0gcmVmcmVzaFRva2VuITtcblxuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXV0aFRva2VuJywgYWNjZXNzVG9rZW4hKTtcbiAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3JlZnJlc2hUb2tlbicsIHJlZnJlc2hUb2tlbiEpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0LmNsb25lKHtcbiAgICAgICAgICAgICAgICBzZXRIZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICBhdXRob3JpemF0aW9uOiBhY2Nlc3NUb2tlbiFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdyb2xlcycpO1xuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgndXNlckd1aWQnKTtcbiAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2F1dGhUb2tlbicpO1xuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgncmVmcmVzaFRva2VuJyk7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBBdXRoU2VydmljZS5hdXRoVG9rZW4gPSAnJztcbiAgICAgICAgICAgICAgQXV0aFNlcnZpY2UucmVmcmVzaFRva2VuID0gJyc7XG4gICAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2UudXNlciA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IGxvY2F0aW9uLmhyZWYgPSAnL2F1dGgvbG9naW4nLCAyNTApO1xuICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcnNbMF0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3JzWzBdKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIl19
82
+ }], ctorParameters: () => [{ type: i1.Router }, { type: i2.AuthService }] });
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmcmVzaC10b2tlbi5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvaW50ZXJjZXB0b3JzL3JlZnJlc2gtdG9rZW4vcmVmcmVzaC10b2tlbi5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLFVBQVUsRUFBYyxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUU3QyxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBc0IsQ0FDeEQsT0FBeUIsRUFDekIsSUFBbUIsRUFDUyxFQUFFO0lBQzlCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFeEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUN2QixVQUFVLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRTtRQUNuQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLG9CQUFvQixFQUFFLENBQUM7WUFDdkQsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUVELE9BQU8sV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FB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O3FCQUNGLENBQ0YsQ0FDRixDQUFDO2dCQUNKLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDakMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDcEMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDckMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFFeEMsV0FBVyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7b0JBQzNCLFdBQVcsQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7b0JBRWxDLFVBQVUsQ0FDUixHQUFHLEVBQUU7d0JBQ0gsUUFBUSxDQUFDLElBQUksR0FBRyxtQkFBb0Isa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBRSxFQUFFLENBQUM7b0JBQzdGLENBQUMsRUFDRCxHQUFHLENBQ0osQ0FBQztvQkFDRixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztZQUNKLENBQUM7WUFFRCxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzsrR0F2RFUsdUJBQXVCO21IQUF2Qix1QkFBdUI7OzRGQUF2Qix1QkFBdUI7a0JBRG5DLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBFdmVudCwgSHR0cEhhbmRsZXIsIEh0dHBIYW5kbGVyRm4sIEh0dHBJbnRlcmNlcHRvciwgSHR0cEludGVyY2VwdG9yRm4sIEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIE9ic2VydmFibGUsIHN3aXRjaE1hcCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbmV4cG9ydCBjb25zdCByZWZyZXNoVG9rZW5JbnRlcmNlcHRvcjogSHR0cEludGVyY2VwdG9yRm4gPSAoXG4gIHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sIFxuICBuZXh0OiBIdHRwSGFuZGxlckZuXG4pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiA9PiB7XG4gIGNvbnN0IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBjb25zdCBhdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XG5cbiAgcmV0dXJuIG5leHQocmVxdWVzdCkucGlwZShcbiAgICBjYXRjaEVycm9yKCh7IGVycm9yOiB7IGVycm9ycyB9IH0pID0+IHtcbiAgICAgIGlmIChlcnJvcnNbMF0uZXh0ZW5zaW9ucy5jb2RlICE9PSAnVVNFUl9JTlZBTElEX1RPS0VOJykge1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcnNbMF0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXV0aFNlcnZpY2UucmVmcmVzaFRva2VuKHsgcmVmcmVzaFRva2VuOiBBdXRoU2VydmljZS5yZWZyZXNoVG9rZW4gfSkucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh7IGRhdGEgfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgYWNjZXNzVG9rZW4sIHJlZnJlc2hUb2tlbiB9ID0gZGF0YSEuYXV0aE1zUmVmcmVzaEFjY2Vzc1Rva2VuO1xuXG4gICAgICAgICAgQXV0aFNlcnZpY2UuYXV0aFRva2VuID0gYWNjZXNzVG9rZW4hO1xuICAgICAgICAgIEF1dGhTZXJ2aWNlLnJlZnJlc2hUb2tlbiA9IHJlZnJlc2hUb2tlbiE7XG5cbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXV0aFRva2VuJywgYWNjZXNzVG9rZW4hKTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgncmVmcmVzaFRva2VuJywgcmVmcmVzaFRva2VuISk7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dChcbiAgICAgICAgICAgIHJlcXVlc3QuY2xvbmUoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZXRIZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICBhdXRob3JpemF0aW9uOiBhY2Nlc3NUb2tlbiEsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgncm9sZXMnKTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgndXNlckd1aWQnKTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnYXV0aFRva2VuJyk7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3JlZnJlc2hUb2tlbicpO1xuXG4gICAgICAgICAgQXV0aFNlcnZpY2UuYXV0aFRva2VuID0gJyc7XG4gICAgICAgICAgQXV0aFNlcnZpY2UucmVmcmVzaFRva2VuID0gJyc7XG4gICAgICAgICAgYXV0aFNlcnZpY2UudXNlciA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgIHNldFRpbWVvdXQoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSBgL2F1dGgvbG9naW4/dXJsPSR7IGVuY29kZVVSSUNvbXBvbmVudChyb3V0ZXIudXJsICsgbG9jYXRpb24uaGFzaCkgfWA7XG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIDI1MFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3JzWzBdKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSlcbiAgKTtcbn07XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgLSBESSBiYXNlZCBpbnRlcmNlcHRvciB3aWxsIGJlIHJlbW92ZWQgYXQgdjE5LjAuMCwgdXNlIGZ1bmN0aW9uIGJhc2VkIGludGVyY2VwdG9yIGluc3RlYWRcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJlZnJlc2hUb2tlbkludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcbiAgKSB7IH1cblxuICBwdWJsaWMgaW50ZXJjZXB0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj57XG4gICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKCh7IGVycm9yOiB7IGVycm9ycyB9IH0pID0+IHtcbiAgICAgICAgaWYgKGVycm9yc1swXS5leHRlbnNpb25zLmNvZGUgPT09ICdVU0VSX0lOVkFMSURfVE9LRU4nKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UucmVmcmVzaFRva2VuKHsgcmVmcmVzaFRva2VuOiBBdXRoU2VydmljZS5yZWZyZXNoVG9rZW4gfSkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoeyBkYXRhIH0pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgeyBhY2Nlc3NUb2tlbiwgcmVmcmVzaFRva2VuIH0gPSBkYXRhIS5hdXRoTXNSZWZyZXNoQWNjZXNzVG9rZW47XG5cbiAgICAgICAgICAgICAgQXV0aFNlcnZpY2UuYXV0aFRva2VuID0gYWNjZXNzVG9rZW4hO1xuICAgICAgICAgICAgICBBdXRoU2VydmljZS5yZWZyZXNoVG9rZW4gPSByZWZyZXNoVG9rZW4hO1xuXG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhdXRoVG9rZW4nLCBhY2Nlc3NUb2tlbiEpO1xuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgncmVmcmVzaFRva2VuJywgcmVmcmVzaFRva2VuISk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKFxuICAgICAgICAgICAgICAgIHJlcXVlc3QuY2xvbmUoXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHNldEhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpemF0aW9uOiBhY2Nlc3NUb2tlbiFcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdyb2xlcycpO1xuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgndXNlckd1aWQnKTtcbiAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2F1dGhUb2tlbicpO1xuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgncmVmcmVzaFRva2VuJyk7XG5cbiAgICAgICAgICAgICAgQXV0aFNlcnZpY2UuYXV0aFRva2VuID0gJyc7XG4gICAgICAgICAgICAgIEF1dGhTZXJ2aWNlLnJlZnJlc2hUb2tlbiA9ICcnO1xuICAgICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLnVzZXIgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgc2V0VGltZW91dChcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gYC9hdXRoL2xvZ2luP3VybD0keyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5yb3V0ZXIudXJsICsgbG9jYXRpb24uaGFzaCkgfWA7XG4gICAgICAgICAgICAgICAgfSwgXG4gICAgICAgICAgICAgICAgMjUwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yc1swXSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcnNbMF0pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -776,7 +776,7 @@ class FormInputComponent {
776
776
  }
777
777
  }
778
778
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormInputComponent, deps: [{ token: 'placeholder', attribute: true }, { token: 'type', attribute: true }, { token: 'autocomplete', attribute: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
779
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FormInputComponent, isStandalone: true, selector: "up-input", inputs: { label: "label", value: "value", required: "required", disabled: "disabled" }, outputs: { onInput: "onInput" }, host: { classAttribute: "d-block" }, providers: [
779
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FormInputComponent, isStandalone: true, selector: "up-input", inputs: { label: "label", value: "value", required: "required", disabled: "disabled", min: "min", max: "max" }, outputs: { onInput: "onInput" }, host: { classAttribute: "d-block" }, providers: [
780
780
  {
781
781
  multi: true,
782
782
  provide: NG_VALUE_ACCESSOR,
@@ -787,7 +787,7 @@ class FormInputComponent {
787
787
  provide: NG_VALIDATORS,
788
788
  useExisting: FormInputComponent
789
789
  }
790
- ], ngImport: i0, template: "<label class=\"form-label d-flex align-items-center\">\n <ng-content select=\"[icon]\" />\n <span>{{ label }}</span>\n</label>\n\n<input type=\"{{ type }}\" autocomplete=\"{{ autocomplete }}\" placeholder=\"{{ placeholder }}\" class=\"form-control\" [required]=\"required\" [disabled]=\"disabled\" [value]=\"value\" (change)=\"change($event.target)\" (input)=\"input($event)\" />\n\n@if (errorMsg) {\n <label class=\"is-invalid\">{{ errorMsg }}</label>\n}\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
790
+ ], ngImport: i0, template: "<label class=\"form-label d-flex align-items-center\">\n <ng-content select=\"[icon]\" />\n <span>{{ label }}</span>\n</label>\n\n<input \n class=\"form-control\" \n min=\"{{ min }}\" \n max=\"{{ max }}\"\n type=\"{{ type }}\" \n placeholder=\"{{ placeholder }}\" \n autocomplete=\"{{ autocomplete }}\" \n [value]=\"value\" \n [required]=\"required\" \n [disabled]=\"disabled\" \n (input)=\"input($event)\" \n (change)=\"change($event.target)\" \n/>\n\n@if (errorMsg) {\n <label class=\"is-invalid\">{{ errorMsg }}</label>\n}\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
791
791
  }
792
792
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormInputComponent, decorators: [{
793
793
  type: Component,
@@ -804,7 +804,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
804
804
  provide: NG_VALIDATORS,
805
805
  useExisting: FormInputComponent
806
806
  }
807
- ], template: "<label class=\"form-label d-flex align-items-center\">\n <ng-content select=\"[icon]\" />\n <span>{{ label }}</span>\n</label>\n\n<input type=\"{{ type }}\" autocomplete=\"{{ autocomplete }}\" placeholder=\"{{ placeholder }}\" class=\"form-control\" [required]=\"required\" [disabled]=\"disabled\" [value]=\"value\" (change)=\"change($event.target)\" (input)=\"input($event)\" />\n\n@if (errorMsg) {\n <label class=\"is-invalid\">{{ errorMsg }}</label>\n}\n" }]
807
+ ], template: "<label class=\"form-label d-flex align-items-center\">\n <ng-content select=\"[icon]\" />\n <span>{{ label }}</span>\n</label>\n\n<input \n class=\"form-control\" \n min=\"{{ min }}\" \n max=\"{{ max }}\"\n type=\"{{ type }}\" \n placeholder=\"{{ placeholder }}\" \n autocomplete=\"{{ autocomplete }}\" \n [value]=\"value\" \n [required]=\"required\" \n [disabled]=\"disabled\" \n (input)=\"input($event)\" \n (change)=\"change($event.target)\" \n/>\n\n@if (errorMsg) {\n <label class=\"is-invalid\">{{ errorMsg }}</label>\n}\n" }]
808
808
  }], ctorParameters: () => [{ type: undefined, decorators: [{
809
809
  type: Attribute,
810
810
  args: ['placeholder']
@@ -822,6 +822,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
822
822
  type: Input
823
823
  }], disabled: [{
824
824
  type: Input
825
+ }], min: [{
826
+ type: Input
827
+ }], max: [{
828
+ type: Input
825
829
  }], onInput: [{
826
830
  type: Output
827
831
  }] } });
@@ -3084,7 +3088,7 @@ class FilterComponent {
3084
3088
  }));
3085
3089
  }
3086
3090
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FilterComponent, deps: [{ token: 'placeholder', attribute: true }, { token: i0.ChangeDetectorRef }, { token: i1.PopoverController }], target: i0.ɵɵFactoryTarget.Component }); }
3087
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FilterComponent, isStandalone: true, selector: "up-filter", inputs: { id: "id", config: "config" }, outputs: { onSearch: "onSearch" }, host: { classAttribute: "d-block position-relative" }, viewQueries: [{ propertyName: "searchBox", first: true, predicate: ["searchBox"], descendants: true }], ngImport: i0, template: "<ion-icon name=\"search\" class=\"fs-4 position-absolute\" />\n\n<div class=\"d-flex align-items-center form-control ps-5 py-0 pe-0 gap-3\">\n @if (activeFilter.length > 0) {\n <div class=\"d-flex flex-grow-1 flex-shrink-0 tag-container gap-2 text-nowrap overflow-auto\">\n @for (item of activeFilter; track item.key; let i = $index) {\n <div class=\"tag-item p-1 rounded d-flex align-items-center user-select-none\">\n <ion-icon name=\"close\" class=\"pe-1 me-1 cursor-pointer text-primary\" (click)=\"removeFilter(i);\" />\n {{ item.label }}\n </div>\n }\n </div>\n }\n\n <input #searchBox type=\"search\" placeholder=\"{{ placeholder }}\" class=\"flex-shrink-1 border-0 form-control ps-0 py-2\" [class.adv]=\"config.mode === 'advanced'\" (keyup.enter)=\"add();\" />\n</div>\n\n@if (config.mode === 'advanced') {\n <ion-icon name=\"filter\" class=\"position-absolute fs-4 cursor-pointer\" id=\"filter-{{ id }}\" />\n <ion-icon name=\"close\" class=\"position-absolute fs-4 cursor-pointer\" (click)=\"clear();\" />\n \n <ion-popover trigger=\"filter-{{ id }}\" triggerAction=\"click\">\n <ng-template>\n <div class=\"d-flex flex-column filter overflow-auto\">\n <div class=\"flex-shrink-0 border-bottom p-1 pe-4 d-flex align-items-center\">\n <ion-buttons>\n <ion-button size=\"small\" (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n \n <div class=\"fs-5 fw-medium\">Advanced Filter</div>\n </div>\n \n <form class=\"flex-grow-1 overflow-auto px-4\" [formGroup]=\"form\">\n @for (c of config.fields; track c.key) {\n @switch (c.type) {\n @case ('number') {\n <up-input type=\"number\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n\n @case ('checkbox') {\n <div class=\"my-4\">\n <ion-checkbox labelPlacement=\"end\" formControlName=\"{{ c.key }}\">{{ c.label }}</ion-checkbox>\n </div>\n }\n\n @case ('date-range') {\n <div class=\"d-flex gap-3 my-4\">\n <up-date class=\"flex-grow-1\" name=\"filter-from\" label=\"{{ c.label[0] }}\" formControlName=\"{{ c.key[0] }}\" />\n <up-date class=\"flex-grow-1\" name=\"filter-to\" label=\"{{ c.label[1] }}\" formControlName=\"{{ c.key[1] }}\" />\n </div>\n }\n\n @case ('select') { \n <up-select \n class=\"my-4\"\n appendTo=\"body\" \n label=\"{{ c.label }}\" \n formControlName=\"{{ c.key }}\" \n [items]=\"c.options!\"\n [multiple]=\"c.multiple || false\"\n /> \n }\n\n @case ('searchable-select') { \n <up-searchable-select \n class=\"my-4\" \n appendTo=\"body\" \n label=\"{{ c.label }}\" \n formControlName=\"{{ c.key }}\" \n [queryFunc]=\"c.getOptions!\" \n [initialItems]=\"c.options! || initialItems.get(c.key.toString())!\"\n [multiple]=\"c.multiple || false\"\n (onChange)=\"applyInitialItems($event, c.key.toString())\"\n /> \n }\n \n @default { \n <up-input type=\"text\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n }\n }\n </form>\n \n <div class=\"flex-shrink-0 py-3 px-4 border-top d-flex gap-3\">\n <ion-button class=\"flex-grow-1\" color=\"secondary\" (click)=\"form.reset();\">Reset</ion-button>\n <ion-button class=\"flex-grow-1\" color=\"primary\" (click)=\"search();\">Search</ion-button>\n </div>\n </div>\n </ng-template>\n </ion-popover> \n}\n", styles: ["ion-icon{top:7px}ion-icon[name=close]{right:16px}ion-icon[name=search]{left:14px}ion-icon[name=filter]{right:48px}ion-popover{--width: 80%;--max-width: 450px}.adv{padding-right:60px}.fs-5,ion-icon{color:#616161}.tag-container{max-width:45%}@media (max-width: 576px){.tag-container{max-width:35%}}.tag-container::-webkit-scrollbar{height:0px}.tag-item{color:#ed6b26;background-color:#fef3ee}.tag-item ion-icon{border-right:1px solid #fbd1be}input::-webkit-search-decoration,input::-webkit-search-cancel-button,input::-webkit-search-results-button,input::-webkit-search-results-decoration{-webkit-appearance:none}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonCheckbox, selector: "ion-checkbox", inputs: ["alignment", "checked", "color", "disabled", "indeterminate", "justify", "labelPlacement", "legacy", "mode", "name", "value"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonPopover, selector: "ion-popover" }, { kind: "directive", type: i1.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "component", type: FormDateComponent, selector: "up-date", inputs: ["label", "required", "disabled", "presentation", "minDate", "maxDate"] }, { kind: "component", type: FormInputComponent, selector: "up-input", inputs: ["label", "value", "required", "disabled"], outputs: ["onInput"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FormSelectComponent, selector: "up-select", inputs: ["items", "clearable", "label", "multiple", "required", "addTag", "disabled", "searchable", "bindLabel", "bindValue", "appendTo"] }, { kind: "component", type: FormSearchableSelectComponent, selector: "up-searchable-select", inputs: ["queryFunc", "clearable", "label", "initialItems", "required", "addTag", "disabled", "multiple", "bindLabel", "bindValue", "appendTo"], outputs: ["onChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3091
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FilterComponent, isStandalone: true, selector: "up-filter", inputs: { id: "id", config: "config" }, outputs: { onSearch: "onSearch" }, host: { classAttribute: "d-block position-relative" }, viewQueries: [{ propertyName: "searchBox", first: true, predicate: ["searchBox"], descendants: true }], ngImport: i0, template: "<ion-icon name=\"search\" class=\"fs-4 position-absolute\" />\n\n<div class=\"d-flex align-items-center form-control ps-5 py-0 pe-0 gap-3\">\n @if (activeFilter.length > 0) {\n <div class=\"d-flex flex-grow-1 flex-shrink-0 tag-container gap-2 text-nowrap overflow-auto\">\n @for (item of activeFilter; track item.key; let i = $index) {\n <div class=\"tag-item p-1 rounded d-flex align-items-center user-select-none\">\n <ion-icon name=\"close\" class=\"pe-1 me-1 cursor-pointer text-primary\" (click)=\"removeFilter(i);\" />\n {{ item.label }}\n </div>\n }\n </div>\n }\n\n <input #searchBox type=\"search\" placeholder=\"{{ placeholder }}\" class=\"flex-shrink-1 border-0 form-control ps-0 py-2\" [class.adv]=\"config.mode === 'advanced'\" (keyup.enter)=\"add();\" />\n</div>\n\n@if (config.mode === 'advanced') {\n <ion-icon name=\"filter\" class=\"position-absolute fs-4 cursor-pointer\" id=\"filter-{{ id }}\" />\n <ion-icon name=\"close\" class=\"position-absolute fs-4 cursor-pointer\" (click)=\"clear();\" />\n \n <ion-popover trigger=\"filter-{{ id }}\" triggerAction=\"click\">\n <ng-template>\n <div class=\"d-flex flex-column filter overflow-auto\">\n <div class=\"flex-shrink-0 border-bottom p-1 pe-4 d-flex align-items-center\">\n <ion-buttons>\n <ion-button size=\"small\" (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n \n <div class=\"fs-5 fw-medium\">Advanced Filter</div>\n </div>\n \n <form class=\"flex-grow-1 overflow-auto px-4\" [formGroup]=\"form\">\n @for (c of config.fields; track c.key) {\n @switch (c.type) {\n @case ('number') {\n <up-input type=\"number\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n\n @case ('checkbox') {\n <div class=\"my-4\">\n <ion-checkbox labelPlacement=\"end\" formControlName=\"{{ c.key }}\">{{ c.label }}</ion-checkbox>\n </div>\n }\n\n @case ('date-range') {\n <div class=\"d-flex gap-3 my-4\">\n <up-date class=\"flex-grow-1\" name=\"filter-from\" label=\"{{ c.label[0] }}\" formControlName=\"{{ c.key[0] }}\" />\n <up-date class=\"flex-grow-1\" name=\"filter-to\" label=\"{{ c.label[1] }}\" formControlName=\"{{ c.key[1] }}\" />\n </div>\n }\n\n @case ('select') { \n <up-select \n class=\"my-4\"\n appendTo=\"body\" \n label=\"{{ c.label }}\" \n formControlName=\"{{ c.key }}\" \n [items]=\"c.options!\"\n [multiple]=\"c.multiple || false\"\n /> \n }\n\n @case ('searchable-select') { \n <up-searchable-select \n class=\"my-4\" \n appendTo=\"body\" \n label=\"{{ c.label }}\" \n formControlName=\"{{ c.key }}\" \n [queryFunc]=\"c.getOptions!\" \n [initialItems]=\"c.options! || initialItems.get(c.key.toString())!\"\n [multiple]=\"c.multiple || false\"\n (onChange)=\"applyInitialItems($event, c.key.toString())\"\n /> \n }\n\n @case ('number-range') {\n <div class=\"d-flex gap-3 my-4\">\n <up-input type=\"number\" autocomplete=\"off\" class=\"flex-grow-1\" label=\"{{ c.label[0] }}\" formControlName=\"{{ c.key[0] }}\" [min]=\"c.min\" [max]=\"c.max\"/>\n <up-input type=\"number\" autocomplete=\"off\" class=\"flex-grow-1\" label=\"{{ c.label[1] }}\" formControlName=\"{{ c.key[1] }}\" [min]=\"c.min\" [max]=\"c.max\"/>\n </div>\n }\n \n @default { \n <up-input type=\"text\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n }\n }\n </form>\n \n <div class=\"flex-shrink-0 py-3 px-4 border-top d-flex gap-3\">\n <ion-button class=\"flex-grow-1\" color=\"secondary\" (click)=\"form.reset();\">Reset</ion-button>\n <ion-button class=\"flex-grow-1\" color=\"primary\" (click)=\"search();\">Search</ion-button>\n </div>\n </div>\n </ng-template>\n </ion-popover> \n}\n", styles: ["ion-icon{top:7px}ion-icon[name=close]{right:16px}ion-icon[name=search]{left:14px}ion-icon[name=filter]{right:48px}ion-popover{--width: 80%;--max-width: 450px}.adv{padding-right:60px}.fs-5,ion-icon{color:#616161}.tag-container{max-width:45%}@media (max-width: 576px){.tag-container{max-width:35%}}.tag-container::-webkit-scrollbar{height:0px}.tag-item{color:#ed6b26;background-color:#fef3ee}.tag-item ion-icon{border-right:1px solid #fbd1be}input::-webkit-search-decoration,input::-webkit-search-cancel-button,input::-webkit-search-results-button,input::-webkit-search-results-decoration{-webkit-appearance:none}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonCheckbox, selector: "ion-checkbox", inputs: ["alignment", "checked", "color", "disabled", "indeterminate", "justify", "labelPlacement", "legacy", "mode", "name", "value"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonPopover, selector: "ion-popover" }, { kind: "directive", type: i1.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "component", type: FormDateComponent, selector: "up-date", inputs: ["label", "required", "disabled", "presentation", "minDate", "maxDate"] }, { kind: "component", type: FormInputComponent, selector: "up-input", inputs: ["label", "value", "required", "disabled", "min", "max"], outputs: ["onInput"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FormSelectComponent, selector: "up-select", inputs: ["items", "clearable", "label", "multiple", "required", "addTag", "disabled", "searchable", "bindLabel", "bindValue", "appendTo"] }, { kind: "component", type: FormSearchableSelectComponent, selector: "up-searchable-select", inputs: ["queryFunc", "clearable", "label", "initialItems", "required", "addTag", "disabled", "multiple", "bindLabel", "bindValue", "appendTo"], outputs: ["onChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3088
3092
  }
3089
3093
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FilterComponent, decorators: [{
3090
3094
  type: Component,
@@ -3097,7 +3101,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
3097
3101
  ReactiveFormsModule,
3098
3102
  FormSelectComponent,
3099
3103
  FormSearchableSelectComponent
3100
- ], template: "<ion-icon name=\"search\" class=\"fs-4 position-absolute\" />\n\n<div class=\"d-flex align-items-center form-control ps-5 py-0 pe-0 gap-3\">\n @if (activeFilter.length > 0) {\n <div class=\"d-flex flex-grow-1 flex-shrink-0 tag-container gap-2 text-nowrap overflow-auto\">\n @for (item of activeFilter; track item.key; let i = $index) {\n <div class=\"tag-item p-1 rounded d-flex align-items-center user-select-none\">\n <ion-icon name=\"close\" class=\"pe-1 me-1 cursor-pointer text-primary\" (click)=\"removeFilter(i);\" />\n {{ item.label }}\n </div>\n }\n </div>\n }\n\n <input #searchBox type=\"search\" placeholder=\"{{ placeholder }}\" class=\"flex-shrink-1 border-0 form-control ps-0 py-2\" [class.adv]=\"config.mode === 'advanced'\" (keyup.enter)=\"add();\" />\n</div>\n\n@if (config.mode === 'advanced') {\n <ion-icon name=\"filter\" class=\"position-absolute fs-4 cursor-pointer\" id=\"filter-{{ id }}\" />\n <ion-icon name=\"close\" class=\"position-absolute fs-4 cursor-pointer\" (click)=\"clear();\" />\n \n <ion-popover trigger=\"filter-{{ id }}\" triggerAction=\"click\">\n <ng-template>\n <div class=\"d-flex flex-column filter overflow-auto\">\n <div class=\"flex-shrink-0 border-bottom p-1 pe-4 d-flex align-items-center\">\n <ion-buttons>\n <ion-button size=\"small\" (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n \n <div class=\"fs-5 fw-medium\">Advanced Filter</div>\n </div>\n \n <form class=\"flex-grow-1 overflow-auto px-4\" [formGroup]=\"form\">\n @for (c of config.fields; track c.key) {\n @switch (c.type) {\n @case ('number') {\n <up-input type=\"number\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n\n @case ('checkbox') {\n <div class=\"my-4\">\n <ion-checkbox labelPlacement=\"end\" formControlName=\"{{ c.key }}\">{{ c.label }}</ion-checkbox>\n </div>\n }\n\n @case ('date-range') {\n <div class=\"d-flex gap-3 my-4\">\n <up-date class=\"flex-grow-1\" name=\"filter-from\" label=\"{{ c.label[0] }}\" formControlName=\"{{ c.key[0] }}\" />\n <up-date class=\"flex-grow-1\" name=\"filter-to\" label=\"{{ c.label[1] }}\" formControlName=\"{{ c.key[1] }}\" />\n </div>\n }\n\n @case ('select') { \n <up-select \n class=\"my-4\"\n appendTo=\"body\" \n label=\"{{ c.label }}\" \n formControlName=\"{{ c.key }}\" \n [items]=\"c.options!\"\n [multiple]=\"c.multiple || false\"\n /> \n }\n\n @case ('searchable-select') { \n <up-searchable-select \n class=\"my-4\" \n appendTo=\"body\" \n label=\"{{ c.label }}\" \n formControlName=\"{{ c.key }}\" \n [queryFunc]=\"c.getOptions!\" \n [initialItems]=\"c.options! || initialItems.get(c.key.toString())!\"\n [multiple]=\"c.multiple || false\"\n (onChange)=\"applyInitialItems($event, c.key.toString())\"\n /> \n }\n \n @default { \n <up-input type=\"text\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n }\n }\n </form>\n \n <div class=\"flex-shrink-0 py-3 px-4 border-top d-flex gap-3\">\n <ion-button class=\"flex-grow-1\" color=\"secondary\" (click)=\"form.reset();\">Reset</ion-button>\n <ion-button class=\"flex-grow-1\" color=\"primary\" (click)=\"search();\">Search</ion-button>\n </div>\n </div>\n </ng-template>\n </ion-popover> \n}\n", styles: ["ion-icon{top:7px}ion-icon[name=close]{right:16px}ion-icon[name=search]{left:14px}ion-icon[name=filter]{right:48px}ion-popover{--width: 80%;--max-width: 450px}.adv{padding-right:60px}.fs-5,ion-icon{color:#616161}.tag-container{max-width:45%}@media (max-width: 576px){.tag-container{max-width:35%}}.tag-container::-webkit-scrollbar{height:0px}.tag-item{color:#ed6b26;background-color:#fef3ee}.tag-item ion-icon{border-right:1px solid #fbd1be}input::-webkit-search-decoration,input::-webkit-search-cancel-button,input::-webkit-search-results-button,input::-webkit-search-results-decoration{-webkit-appearance:none}\n"] }]
3104
+ ], template: "<ion-icon name=\"search\" class=\"fs-4 position-absolute\" />\n\n<div class=\"d-flex align-items-center form-control ps-5 py-0 pe-0 gap-3\">\n @if (activeFilter.length > 0) {\n <div class=\"d-flex flex-grow-1 flex-shrink-0 tag-container gap-2 text-nowrap overflow-auto\">\n @for (item of activeFilter; track item.key; let i = $index) {\n <div class=\"tag-item p-1 rounded d-flex align-items-center user-select-none\">\n <ion-icon name=\"close\" class=\"pe-1 me-1 cursor-pointer text-primary\" (click)=\"removeFilter(i);\" />\n {{ item.label }}\n </div>\n }\n </div>\n }\n\n <input #searchBox type=\"search\" placeholder=\"{{ placeholder }}\" class=\"flex-shrink-1 border-0 form-control ps-0 py-2\" [class.adv]=\"config.mode === 'advanced'\" (keyup.enter)=\"add();\" />\n</div>\n\n@if (config.mode === 'advanced') {\n <ion-icon name=\"filter\" class=\"position-absolute fs-4 cursor-pointer\" id=\"filter-{{ id }}\" />\n <ion-icon name=\"close\" class=\"position-absolute fs-4 cursor-pointer\" (click)=\"clear();\" />\n \n <ion-popover trigger=\"filter-{{ id }}\" triggerAction=\"click\">\n <ng-template>\n <div class=\"d-flex flex-column filter overflow-auto\">\n <div class=\"flex-shrink-0 border-bottom p-1 pe-4 d-flex align-items-center\">\n <ion-buttons>\n <ion-button size=\"small\" (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n \n <div class=\"fs-5 fw-medium\">Advanced Filter</div>\n </div>\n \n <form class=\"flex-grow-1 overflow-auto px-4\" [formGroup]=\"form\">\n @for (c of config.fields; track c.key) {\n @switch (c.type) {\n @case ('number') {\n <up-input type=\"number\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n\n @case ('checkbox') {\n <div class=\"my-4\">\n <ion-checkbox labelPlacement=\"end\" formControlName=\"{{ c.key }}\">{{ c.label }}</ion-checkbox>\n </div>\n }\n\n @case ('date-range') {\n <div class=\"d-flex gap-3 my-4\">\n <up-date class=\"flex-grow-1\" name=\"filter-from\" label=\"{{ c.label[0] }}\" formControlName=\"{{ c.key[0] }}\" />\n <up-date class=\"flex-grow-1\" name=\"filter-to\" label=\"{{ c.label[1] }}\" formControlName=\"{{ c.key[1] }}\" />\n </div>\n }\n\n @case ('select') { \n <up-select \n class=\"my-4\"\n appendTo=\"body\" \n label=\"{{ c.label }}\" \n formControlName=\"{{ c.key }}\" \n [items]=\"c.options!\"\n [multiple]=\"c.multiple || false\"\n /> \n }\n\n @case ('searchable-select') { \n <up-searchable-select \n class=\"my-4\" \n appendTo=\"body\" \n label=\"{{ c.label }}\" \n formControlName=\"{{ c.key }}\" \n [queryFunc]=\"c.getOptions!\" \n [initialItems]=\"c.options! || initialItems.get(c.key.toString())!\"\n [multiple]=\"c.multiple || false\"\n (onChange)=\"applyInitialItems($event, c.key.toString())\"\n /> \n }\n\n @case ('number-range') {\n <div class=\"d-flex gap-3 my-4\">\n <up-input type=\"number\" autocomplete=\"off\" class=\"flex-grow-1\" label=\"{{ c.label[0] }}\" formControlName=\"{{ c.key[0] }}\" [min]=\"c.min\" [max]=\"c.max\"/>\n <up-input type=\"number\" autocomplete=\"off\" class=\"flex-grow-1\" label=\"{{ c.label[1] }}\" formControlName=\"{{ c.key[1] }}\" [min]=\"c.min\" [max]=\"c.max\"/>\n </div>\n }\n \n @default { \n <up-input type=\"text\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n }\n }\n </form>\n \n <div class=\"flex-shrink-0 py-3 px-4 border-top d-flex gap-3\">\n <ion-button class=\"flex-grow-1\" color=\"secondary\" (click)=\"form.reset();\">Reset</ion-button>\n <ion-button class=\"flex-grow-1\" color=\"primary\" (click)=\"search();\">Search</ion-button>\n </div>\n </div>\n </ng-template>\n </ion-popover> \n}\n", styles: ["ion-icon{top:7px}ion-icon[name=close]{right:16px}ion-icon[name=search]{left:14px}ion-icon[name=filter]{right:48px}ion-popover{--width: 80%;--max-width: 450px}.adv{padding-right:60px}.fs-5,ion-icon{color:#616161}.tag-container{max-width:45%}@media (max-width: 576px){.tag-container{max-width:35%}}.tag-container::-webkit-scrollbar{height:0px}.tag-item{color:#ed6b26;background-color:#fef3ee}.tag-item ion-icon{border-right:1px solid #fbd1be}input::-webkit-search-decoration,input::-webkit-search-cancel-button,input::-webkit-search-results-button,input::-webkit-search-results-decoration{-webkit-appearance:none}\n"] }]
3101
3105
  }], ctorParameters: () => [{ type: undefined, decorators: [{
3102
3106
  type: Attribute,
3103
3107
  args: ['placeholder']
@@ -3734,7 +3738,7 @@ class AuditDetailComponent {
3734
3738
  this.gridApi.setGridOption('rowData', changedData);
3735
3739
  }
3736
3740
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuditDetailComponent, deps: [{ token: i1$3.FormBuilder }, { token: AuditService }, { token: i1$2.ActivatedRoute }, { token: i1.NavController }], target: i0.ɵɵFactoryTarget.Component }); }
3737
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AuditDetailComponent, isStandalone: true, selector: "up-audit-detail", ngImport: i0, template: "<up-tab-group class=\"h-100\">\n <up-tab-content header=\"Detail\" fragment=\"detail\">\n @if (isLoading) {\n @for(i of [0,1,2,3,4,5,6]; track $index) {\n <ion-skeleton-text class=\"sk-input mx-4 mb-4\" />\n }\n } @else {\n <form [formGroup]=\"form\" class=\"px-4 pb-4\">\n <div class=\"d-flex align-items-center gap-2 pb-3\">\n <ion-icon name=\"information-circle\" />\n <h5 class=\"m-0\">Information</h5>\n </div>\n \n <div class=\"d-flex flex-column flex-lg-row gap-4\">\n <div class=\"flex-grow-1\">\n <up-input class=\"mb-lg-4\" label=\"Action\" formControlName=\"action\" />\n </div>\n \n <div class=\"flex-grow-1\">\n <up-input class=\"mb-4\" label=\"Source IP\" formControlName=\"sourceIp\" />\n </div>\n </div>\n \n <up-input class=\"mb-4\" label=\"User Name\" formControlName=\"userName\" />\n <up-textarea class=\"mb-4\" label=\"Description\" formControlName=\"description\" />\n \n <div class=\"d-flex align-items-center gap-2 pb-3 pt-2\">\n <ion-icon name=\"laptop\" />\n <h5 class=\"m-0\">System Information</h5>\n </div>\n \n <div class=\"d-flex flex-column flex-lg-row gap-4\">\n <div class=\"flex-grow-1\">\n <up-input class=\"mb-4\" label=\"Action Date\" formControlName=\"createdAt\" />\n <up-input class=\"mb-lg-4\" label=\"Source Platform\" formControlName=\"sourcePlatform\" />\n </div>\n \n <div class=\"flex-grow-1\">\n <up-input class=\"mb-4\" label=\"MS Source\" formControlName=\"msSource\" />\n <up-input class=\"mb-4\" label=\"Function\" formControlName=\"function\" />\n </div>\n </div>\n </form>\n } \n </up-tab-content>\n\n <up-tab-content header=\"Attributes\" fragment=\"attributes\">\n <up-pagination-grid id=\"grid-audit-detail\" rowModelType=\"clientSide\" [config]=\"gridConfig\" (onGridReady)=\"setGridApi($event)\" />\n </up-tab-content>\n</up-tab-group>\n", styles: ["ion-icon{font-size:24px;margin-right:5px}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: TabGroupComponent, selector: "up-tab-group", outputs: ["onChange", "changed"] }, { kind: "component", type: TabContentComponent, selector: "up-tab-content", inputs: ["header"] }, { kind: "component", type: GridPaginationComponent, selector: "up-pagination-grid", inputs: ["config", "rowData", "id", "rowModelType", "rowSelection", "getRowClass"], outputs: ["onRowClick", "onGridReady", "onSelectionChanged"] }, { kind: "component", type: FormInputComponent, selector: "up-input", inputs: ["label", "value", "required", "disabled"], outputs: ["onInput"] }, { kind: "component", type: FormTextareaComponent, selector: "up-textarea", inputs: ["value", "required", "disabled"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
3741
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AuditDetailComponent, isStandalone: true, selector: "up-audit-detail", ngImport: i0, template: "<up-tab-group class=\"h-100\">\n <up-tab-content header=\"Detail\" fragment=\"detail\">\n @if (isLoading) {\n @for(i of [0,1,2,3,4,5,6]; track $index) {\n <ion-skeleton-text class=\"sk-input mx-4 mb-4\" />\n }\n } @else {\n <form [formGroup]=\"form\" class=\"px-4 pb-4\">\n <div class=\"d-flex align-items-center gap-2 pb-3\">\n <ion-icon name=\"information-circle\" />\n <h5 class=\"m-0\">Information</h5>\n </div>\n \n <div class=\"d-flex flex-column flex-lg-row gap-4\">\n <div class=\"flex-grow-1\">\n <up-input class=\"mb-lg-4\" label=\"Action\" formControlName=\"action\" />\n </div>\n \n <div class=\"flex-grow-1\">\n <up-input class=\"mb-4\" label=\"Source IP\" formControlName=\"sourceIp\" />\n </div>\n </div>\n \n <up-input class=\"mb-4\" label=\"User Name\" formControlName=\"userName\" />\n <up-textarea class=\"mb-4\" label=\"Description\" formControlName=\"description\" />\n \n <div class=\"d-flex align-items-center gap-2 pb-3 pt-2\">\n <ion-icon name=\"laptop\" />\n <h5 class=\"m-0\">System Information</h5>\n </div>\n \n <div class=\"d-flex flex-column flex-lg-row gap-4\">\n <div class=\"flex-grow-1\">\n <up-input class=\"mb-4\" label=\"Action Date\" formControlName=\"createdAt\" />\n <up-input class=\"mb-lg-4\" label=\"Source Platform\" formControlName=\"sourcePlatform\" />\n </div>\n \n <div class=\"flex-grow-1\">\n <up-input class=\"mb-4\" label=\"MS Source\" formControlName=\"msSource\" />\n <up-input class=\"mb-4\" label=\"Function\" formControlName=\"function\" />\n </div>\n </div>\n </form>\n } \n </up-tab-content>\n\n <up-tab-content header=\"Attributes\" fragment=\"attributes\">\n <up-pagination-grid id=\"grid-audit-detail\" rowModelType=\"clientSide\" [config]=\"gridConfig\" (onGridReady)=\"setGridApi($event)\" />\n </up-tab-content>\n</up-tab-group>\n", styles: ["ion-icon{font-size:24px;margin-right:5px}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: TabGroupComponent, selector: "up-tab-group", outputs: ["onChange", "changed"] }, { kind: "component", type: TabContentComponent, selector: "up-tab-content", inputs: ["header"] }, { kind: "component", type: GridPaginationComponent, selector: "up-pagination-grid", inputs: ["config", "rowData", "id", "rowModelType", "rowSelection", "getRowClass"], outputs: ["onRowClick", "onGridReady", "onSelectionChanged"] }, { kind: "component", type: FormInputComponent, selector: "up-input", inputs: ["label", "value", "required", "disabled", "min", "max"], outputs: ["onInput"] }, { kind: "component", type: FormTextareaComponent, selector: "up-textarea", inputs: ["value", "required", "disabled"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
3738
3742
  }
3739
3743
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuditDetailComponent, decorators: [{
3740
3744
  type: Component,
@@ -4000,7 +4004,7 @@ class ApprovalFormComponent {
4000
4004
  }
4001
4005
  async showAlert(header, message, buttons = ['OK'], inputs = []) { (await this.alertCtrl.create({ header, message, buttons, inputs })).present(); }
4002
4006
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApprovalFormComponent, deps: [{ token: i1$2.Router }, { token: i0.ChangeDetectorRef }, { token: ApprovalService }, { token: GridService }, { token: i1.AlertController }, { token: PermissionService }], target: i0.ɵɵFactoryTarget.Component }); }
4003
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ApprovalFormComponent, isStandalone: true, selector: "up-approval-form", inputs: { isLoading: "isLoading" }, host: { classAttribute: "px-4 pb-4 d-block" }, ngImport: i0, template: "@if (isLoading) {\n <div class=\"d-flex flex-column flex-lg-row gap-4\">\n <div class=\"flex-grow-1\">\n <ion-skeleton-text class=\"m-0 mb-4 sk-input\" />\n <ion-skeleton-text class=\"m-0 mb-4 sk-input\" />\n </div>\n\n <div class=\"flex-grow-1\">\n <ion-skeleton-text class=\"m-0 mb-4 sk-input\" />\n <ion-skeleton-text class=\"m-0 mb-4 sk-input\" />\n </div>\n </div>\n \n <ion-skeleton-text class=\"m-0 mb-4 sk-input\" />\n <ion-skeleton-text class=\"m-0 sk-input\" />\n}\n@else {\n @for (d of data; track $index) {\n @if (data.length > 1) {\n <div class=\"d-flex align-items-center gap-2 pb-3 pt-2\">\n <ion-icon name=\"document\" />\n <h5 class=\"m-0\">Approval {{ $index + 1 }}</h5>\n </div>\n }\n \n <div class=\"d-flex flex-column flex-lg-row gap-4\">\n <div class=\"flex-grow-1\">\n <up-input class=\"mb-4\" label=\"Entity\" [disabled]=\"true\" [value]=\"d.entity\" />\n <up-input class=\"mb-4\" label=\"Remark\" [disabled]=\"true\" [value]=\"d.remark\" />\n </div>\n\n <div class=\"flex-grow-1\">\n <up-input class=\"mb-4\" label=\"Created At\" [disabled]=\"true\" [value]=\"d.createdAt | date:'dd MMM yyyy HH:mm'\" />\n <up-input class=\"mb-4\" label=\"Status\" [disabled]=\"true\" [value]=\"d.status\" />\n </div>\n </div>\n\n <up-textarea label=\"JSON\" [disabled]=\"true\" [value]=\"d.data | json\" />\n <up-textarea class=\"mt-4\" label=\"Reason\" [disabled]=\"true\" [value]=\"d.reason\" *ngIf=\"d.status !== 'PENDING'\" />\n }\n}\n", styles: [""], dependencies: [{ kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: FormInputComponent, selector: "up-input", inputs: ["label", "value", "required", "disabled"], outputs: ["onInput"] }, { kind: "component", type: FormTextareaComponent, selector: "up-textarea", inputs: ["value", "required", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4007
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ApprovalFormComponent, isStandalone: true, selector: "up-approval-form", inputs: { isLoading: "isLoading" }, host: { classAttribute: "px-4 pb-4 d-block" }, ngImport: i0, template: "@if (isLoading) {\n <div class=\"d-flex flex-column flex-lg-row gap-4\">\n <div class=\"flex-grow-1\">\n <ion-skeleton-text class=\"m-0 mb-4 sk-input\" />\n <ion-skeleton-text class=\"m-0 mb-4 sk-input\" />\n </div>\n\n <div class=\"flex-grow-1\">\n <ion-skeleton-text class=\"m-0 mb-4 sk-input\" />\n <ion-skeleton-text class=\"m-0 mb-4 sk-input\" />\n </div>\n </div>\n \n <ion-skeleton-text class=\"m-0 mb-4 sk-input\" />\n <ion-skeleton-text class=\"m-0 sk-input\" />\n}\n@else {\n @for (d of data; track $index) {\n @if (data.length > 1) {\n <div class=\"d-flex align-items-center gap-2 pb-3 pt-2\">\n <ion-icon name=\"document\" />\n <h5 class=\"m-0\">Approval {{ $index + 1 }}</h5>\n </div>\n }\n \n <div class=\"d-flex flex-column flex-lg-row gap-4\">\n <div class=\"flex-grow-1\">\n <up-input class=\"mb-4\" label=\"Entity\" [disabled]=\"true\" [value]=\"d.entity\" />\n <up-input class=\"mb-4\" label=\"Remark\" [disabled]=\"true\" [value]=\"d.remark\" />\n </div>\n\n <div class=\"flex-grow-1\">\n <up-input class=\"mb-4\" label=\"Created At\" [disabled]=\"true\" [value]=\"d.createdAt | date:'dd MMM yyyy HH:mm'\" />\n <up-input class=\"mb-4\" label=\"Status\" [disabled]=\"true\" [value]=\"d.status\" />\n </div>\n </div>\n\n <up-textarea label=\"JSON\" [disabled]=\"true\" [value]=\"d.data | json\" />\n <up-textarea class=\"mt-4\" label=\"Reason\" [disabled]=\"true\" [value]=\"d.reason\" *ngIf=\"d.status !== 'PENDING'\" />\n }\n}\n", styles: [""], dependencies: [{ kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: FormInputComponent, selector: "up-input", inputs: ["label", "value", "required", "disabled", "min", "max"], outputs: ["onInput"] }, { kind: "component", type: FormTextareaComponent, selector: "up-textarea", inputs: ["value", "required", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4004
4008
  }
4005
4009
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApprovalFormComponent, decorators: [{
4006
4010
  type: Component,
@@ -4275,13 +4279,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
4275
4279
  }] });
4276
4280
 
4277
4281
  const refreshTokenInterceptor = (request, next) => {
4282
+ const router = inject(Router);
4278
4283
  const authService = inject(AuthService);
4279
4284
  return next(request).pipe(catchError(({ error: { errors } }) => {
4280
4285
  if (errors[0].extensions.code !== 'USER_INVALID_TOKEN') {
4281
4286
  return throwError(() => errors[0]);
4282
4287
  }
4283
4288
  return authService.refreshToken({ refreshToken: AuthService.refreshToken }).pipe(switchMap(({ data }) => {
4284
- console.log('data new refersh token: ', data);
4285
4289
  const { accessToken, refreshToken } = data.authMsRefreshAccessToken;
4286
4290
  AuthService.authToken = accessToken;
4287
4291
  AuthService.refreshToken = refreshToken;
@@ -4300,20 +4304,22 @@ const refreshTokenInterceptor = (request, next) => {
4300
4304
  AuthService.authToken = '';
4301
4305
  AuthService.refreshToken = '';
4302
4306
  authService.user = undefined;
4303
- location.href = '/auth/login';
4307
+ setTimeout(() => {
4308
+ location.href = `/auth/login?url=${encodeURIComponent(router.url + location.hash)}`;
4309
+ }, 250);
4304
4310
  return throwError(() => errors[0]);
4305
4311
  }));
4306
4312
  }));
4307
4313
  };
4308
4314
  class RefreshTokenInterceptor {
4309
- constructor(authService) {
4315
+ constructor(router, authService) {
4316
+ this.router = router;
4310
4317
  this.authService = authService;
4311
4318
  }
4312
4319
  intercept(request, next) {
4313
4320
  return next.handle(request).pipe(catchError(({ error: { errors } }) => {
4314
4321
  if (errors[0].extensions.code === 'USER_INVALID_TOKEN') {
4315
4322
  return this.authService.refreshToken({ refreshToken: AuthService.refreshToken }).pipe(switchMap(({ data }) => {
4316
- console.log('data new refresh token: ', data);
4317
4323
  const { accessToken, refreshToken } = data.authMsRefreshAccessToken;
4318
4324
  AuthService.authToken = accessToken;
4319
4325
  AuthService.refreshToken = refreshToken;
@@ -4332,19 +4338,21 @@ class RefreshTokenInterceptor {
4332
4338
  AuthService.authToken = '';
4333
4339
  AuthService.refreshToken = '';
4334
4340
  this.authService.user = undefined;
4335
- setTimeout(() => location.href = '/auth/login', 250);
4341
+ setTimeout(() => {
4342
+ location.href = `/auth/login?url=${encodeURIComponent(this.router.url + location.hash)}`;
4343
+ }, 250);
4336
4344
  return throwError(() => errors[0]);
4337
4345
  }));
4338
4346
  }
4339
4347
  return throwError(() => errors[0]);
4340
4348
  }));
4341
4349
  }
4342
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RefreshTokenInterceptor, deps: [{ token: AuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
4350
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RefreshTokenInterceptor, deps: [{ token: i1$2.Router }, { token: AuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
4343
4351
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RefreshTokenInterceptor }); }
4344
4352
  }
4345
4353
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RefreshTokenInterceptor, decorators: [{
4346
4354
  type: Injectable
4347
- }], ctorParameters: () => [{ type: AuthService }] });
4355
+ }], ctorParameters: () => [{ type: i1$2.Router }, { type: AuthService }] });
4348
4356
 
4349
4357
  export { APPROVAL_ENTITIES, AppletContainerComponent, ApprovalDetailComponent, ApprovalListComponent, AuditDetailComponent, AuditListComponent, AuthGuard, AuthResolver, AuthService, ButtonGroupComponent, ButtonLoadingComponent, ColumnContainerComponent, ColumnHeaderContainerComponent, CountryService, CurrencyService, FilterComponent, FormCountryInputComponent, FormCurrencyInputComponent, FormDateComponent, FormImagePickerComponent, FormInputComponent, FormNumberComponent, FormPasswordComponent, FormSearchableSelectComponent, FormSelectComponent, FormTextareaComponent, GridPaginationComponent, GridService, GridSnapshotComponent, HeaderInterceptor, InfiniteScrollComponent, InfiniteScrollDirective, ListPaginationContainerComponent, ListSnapshotContainerComponent, LoadingPage, ModalContainerComponent, PermissionDirective, PermissionGuard, PermissionService, ProfileService, RefreshTokenInterceptor, TabContentComponent, TabGroupComponent, UnauthorizedPage, bootstrap, formatCapitalize, generateContrastColor, getFormErrorMessage, headerInterceptor, provideAppletConfig, provideApprovalEntities, provideLoadingConfig, refreshTokenInterceptor };
4350
4358
  //# sourceMappingURL=unipin-angular-applet.mjs.map