ngx-nz-formly 0.0.8 → 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/README.md +19 -21
  2. package/esm2022/index.mjs +5 -0
  3. package/esm2022/lib/components/nz-formly-button/nz-formly-button.component.mjs +21 -21
  4. package/esm2022/lib/components/nz-formly-field-checkbox/nz-formly-field-checkbox.component.mjs +36 -33
  5. package/esm2022/lib/components/nz-formly-field-input/nz-formly-field-input.component.mjs +107 -105
  6. package/esm2022/lib/components/nz-formly-field-input/phone-mask.config.mjs +1463 -1463
  7. package/esm2022/lib/components/nz-formly-field-radio/nz-formly-field-radio.component.mjs +42 -39
  8. package/esm2022/lib/components/nz-formly-field-select/nz-formly-field-select.component.mjs +37 -34
  9. package/esm2022/lib/components/nz-formly-field-switch/nz-formly-field-switch.component.mjs +41 -38
  10. package/esm2022/lib/ngx-nz-formly-props.model.mjs +6 -6
  11. package/esm2022/lib/ngx-nz-formly-type-safe.model.mjs +44 -44
  12. package/esm2022/lib/ngx-nz-formly-validators.mjs +52 -52
  13. package/esm2022/lib/ngx-nz-formly.module.mjs +272 -263
  14. package/esm2022/lib/wrappers/nz-formly-default-wrapper/nz-formly-default-wrapper.component.mjs +14 -37
  15. package/esm2022/lib/wrappers/nz-formly-label-wrapper/nz-formly-label-wrapper.component.mjs +13 -13
  16. package/esm2022/ngx-nz-formly.mjs +5 -5
  17. package/fesm2022/ngx-nz-formly.mjs +2042 -2042
  18. package/fesm2022/ngx-nz-formly.mjs.map +1 -1
  19. package/index.d.ts +4 -5
  20. package/lib/components/nz-formly-button/nz-formly-button.component.d.ts +8 -8
  21. package/lib/components/nz-formly-field-checkbox/nz-formly-field-checkbox.component.d.ts +13 -13
  22. package/lib/components/nz-formly-field-input/nz-formly-field-input.component.d.ts +24 -24
  23. package/lib/components/nz-formly-field-input/phone-mask.config.d.ts +11 -11
  24. package/lib/components/nz-formly-field-radio/nz-formly-field-radio.component.d.ts +14 -14
  25. package/lib/components/nz-formly-field-select/nz-formly-field-select.component.d.ts +13 -13
  26. package/lib/components/nz-formly-field-switch/nz-formly-field-switch.component.d.ts +14 -14
  27. package/lib/ngx-nz-formly-props.model.d.ts +144 -145
  28. package/lib/ngx-nz-formly-type-safe.model.d.ts +14 -14
  29. package/lib/ngx-nz-formly-validators.d.ts +16 -16
  30. package/lib/ngx-nz-formly.module.d.ts +2 -2
  31. package/lib/wrappers/nz-formly-default-wrapper/nz-formly-default-wrapper.component.d.ts +7 -7
  32. package/lib/wrappers/nz-formly-label-wrapper/nz-formly-label-wrapper.component.d.ts +7 -7
  33. package/package.json +7 -2
  34. package/esm2022/public-api.mjs +0 -5
  35. package/public-api.d.ts +0 -4
package/README.md CHANGED
@@ -110,13 +110,6 @@ Finally, your ``app.component.ts`` file could be something like following box. S
110
110
  documentation of available features, until I write one
111
111
 
112
112
  ```ts
113
- import {Component, OnInit} from "@angular/core";
114
- import {FormControl, FormGroup} from "@angular/forms";
115
- import {FormlyFieldConfig} from "@ngx-formly/core";
116
- import {BehaviorSubject, concatMap, delay, from, of} from "rxjs";
117
- import {NzOptionComponent} from "ng-zorro-antd/select";
118
- import {NzFormlyFieldBuilder} from "../../projects/ngx-nz-formly";
119
-
120
113
  class FormModel {
121
114
  firstName: string;
122
115
  lastName: string;
@@ -167,11 +160,12 @@ export class AppComponent implements OnInit {
167
160
  const fb = new NzFormlyFieldBuilder<FormModel>();
168
161
  this.fields = [
169
162
  fb.input("firstName", {
170
- className: "flex-50 px-2",
163
+ className: "px-2",
171
164
  props: {
172
165
  labelPosition: "float",
173
166
  required: true,
174
167
  minLen: 3,
168
+ showError: false,
175
169
  labelObs: this.labelObs$,
176
170
  focus: () => console.log("input focused"),
177
171
  blur: () => console.log("input blurred"),
@@ -185,10 +179,11 @@ export class AppComponent implements OnInit {
185
179
  },
186
180
  }),
187
181
  fb.input("lastName", {
188
- className: "flex-50 px-2",
182
+ className: "px-2",
189
183
  props: {
190
184
  required: true,
191
185
  maxLen: 10,
186
+ labelPosition: "top",
192
187
  label: "Last Name",
193
188
  styles: {
194
189
  labelWidth: "110px",
@@ -200,7 +195,7 @@ export class AppComponent implements OnInit {
200
195
  },
201
196
  }),
202
197
  fb.input("phoneNumber", {
203
- className: "flex-50 px-2",
198
+ className: "px-2",
204
199
  props: {
205
200
  label: "Phone No",
206
201
  mask: "phone",
@@ -212,7 +207,7 @@ export class AppComponent implements OnInit {
212
207
  },
213
208
  }),
214
209
  fb.input("email", {
215
- className: "flex-50 px-2",
210
+ className: "px-2",
216
211
  props: {
217
212
  required: true,
218
213
  label: "Email address",
@@ -228,7 +223,7 @@ export class AppComponent implements OnInit {
228
223
  },
229
224
  }),
230
225
  fb.input("password", {
231
- className: "flex-50 px-2",
226
+ className: "px-2",
232
227
  props: {
233
228
  required: true,
234
229
  type: "password",
@@ -244,7 +239,7 @@ export class AppComponent implements OnInit {
244
239
  },
245
240
  }),
246
241
  fb.input("budget", {
247
- className: "flex-50 px-2",
242
+ className: "px-2",
248
243
  props: {
249
244
  nzPrefix: "$",
250
245
  label: "Budget",
@@ -268,14 +263,14 @@ export class AppComponent implements OnInit {
268
263
  },
269
264
  }),
270
265
  fb.checkbox("olderThan20", {
271
- className: "flex-50 px-2 mb-4",
266
+ className: "px-2 mb-4",
272
267
  props: {
273
268
  label: "I am older that 20",
274
269
  change: (field, event) => console.log("checkbox changed to:", event),
275
270
  },
276
271
  }),
277
272
  fb.input("age", {
278
- className: "flex-50 px-2",
273
+ className: "px-2",
279
274
  props: {
280
275
  minValue: 20,
281
276
  maxValue: 100,
@@ -294,7 +289,7 @@ export class AppComponent implements OnInit {
294
289
  },
295
290
  }),
296
291
  fb.switch("allowNotifications", {
297
- className: "flex-50 px-2",
292
+ className: "px-2",
298
293
  props: {
299
294
  nzCheckedChildren: "1",
300
295
  nzUnCheckedChildren: "0",
@@ -310,7 +305,7 @@ export class AppComponent implements OnInit {
310
305
  },
311
306
  }),
312
307
  fb.select("city", {
313
- className: "flex-50 px-2",
308
+ className: "px-2",
314
309
  props: {
315
310
  objectValue: false,
316
311
  label: "City",
@@ -340,7 +335,7 @@ export class AppComponent implements OnInit {
340
335
  nzFilterOption: (input?: string, option?: NzOptionComponent) => {
341
336
  return option?.nzLabel?.toString().includes(input || "") || false;
342
337
  },
343
- compareWith: (o1: any, o2: any): boolean => o1?.value == o2?.value,
338
+ compareWith: (o1: any, o2: any): boolean => o1 == o2,
344
339
  nzOpenChange: event => console.log("selection open status:", event),
345
340
  nzScrollToBottom: () => console.log("scroll"),
346
341
  nzOnSearch: event => console.log("search", event),
@@ -351,7 +346,7 @@ export class AppComponent implements OnInit {
351
346
  },
352
347
  }),
353
348
  fb.radio("gender", {
354
- className: "flex-50 px-2",
349
+ className: "px-2",
355
350
  props: {
356
351
  label: "Gender",
357
352
  nzType: "nz-radio-button",
@@ -377,7 +372,7 @@ export class AppComponent implements OnInit {
377
372
  },
378
373
  }),
379
374
  fb.button({
380
- className: "flex-50 px-2",
375
+ className: "d-flex",
381
376
  props: {
382
377
  text: "Reset",
383
378
  nzType: "primary",
@@ -391,7 +386,10 @@ export class AppComponent implements OnInit {
391
386
  }
392
387
 
393
388
  onSubmit() {
394
- console.log(this.model);
389
+ // Object.keys(this.form.controls).forEach(key => {
390
+ // console.log(key, this.form.get(key)?.errors);
391
+ // });
392
+ // console.log(this.model);
395
393
  }
396
394
  }
397
395
  ```
@@ -0,0 +1,5 @@
1
+ export * from './lib/ngx-nz-formly.module';
2
+ export * from './lib/ngx-nz-formly-props.model';
3
+ export * from './lib/ngx-nz-formly-type-safe.model';
4
+ export * from './lib/ngx-nz-formly-validators';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL25neC1uei1mb3JtbHkvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsZ0NBQWdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9uZ3gtbnotZm9ybWx5Lm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL25neC1uei1mb3JtbHktcHJvcHMubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9uZ3gtbnotZm9ybWx5LXR5cGUtc2FmZS5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL25neC1uei1mb3JtbHktdmFsaWRhdG9ycyc7XHJcbiJdfQ==
@@ -1,21 +1,21 @@
1
- import { Component } from "@angular/core";
2
- import { FieldType } from "@ngx-formly/core";
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- import * as i2 from "ng-zorro-antd/button";
6
- import * as i3 from "ng-zorro-antd/core/transition-patch";
7
- import * as i4 from "ng-zorro-antd/core/wave";
8
- export class NzFormlyButtonComponent extends FieldType {
9
- onClick() {
10
- if (typeof this.props?.click == "function") {
11
- this.props.click();
12
- }
13
- }
14
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NzFormlyButtonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
15
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NzFormlyButtonComponent, selector: "app-nz-formly-button", usesInheritance: true, ngImport: i0, template: "<button\r\n nz-button\r\n type=\"button\"\r\n [disabled]=\"props.disabled\"\r\n [nzGhost]=\"props.nzGhost\"\r\n [nzLoading]=\"props.nzLoading\"\r\n [nzShape]=\"props.nzShape\"\r\n [nzSize]=\"props.nzSize\"\r\n [nzType]=\"props.nzType\"\r\n [nzBlock]=\"props.nzBlock\"\r\n [nzDanger]=\"props.nzDanger\"\r\n [ngClass]=\"props.classList\"\r\n (click)=\"onClick()\"\r\n>\r\n {{props.text}}\r\n</button>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i3.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i4.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }] });
16
- }
17
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NzFormlyButtonComponent, decorators: [{
18
- type: Component,
19
- args: [{ selector: "app-nz-formly-button", template: "<button\r\n nz-button\r\n type=\"button\"\r\n [disabled]=\"props.disabled\"\r\n [nzGhost]=\"props.nzGhost\"\r\n [nzLoading]=\"props.nzLoading\"\r\n [nzShape]=\"props.nzShape\"\r\n [nzSize]=\"props.nzSize\"\r\n [nzType]=\"props.nzType\"\r\n [nzBlock]=\"props.nzBlock\"\r\n [nzDanger]=\"props.nzDanger\"\r\n [ngClass]=\"props.classList\"\r\n (click)=\"onClick()\"\r\n>\r\n {{props.text}}\r\n</button>\r\n" }]
20
- }] });
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnotZm9ybWx5LWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbnotZm9ybWx5L3NyYy9saWIvY29tcG9uZW50cy9uei1mb3JtbHktYnV0dG9uL256LWZvcm1seS1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW56LWZvcm1seS9zcmMvbGliL2NvbXBvbmVudHMvbnotZm9ybWx5LWJ1dHRvbi9uei1mb3JtbHktYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7O0FBUWhFLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxTQUU1QztJQUNDLE9BQU87UUFDTCxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLElBQUksVUFBVSxFQUFFO1lBQzFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDcEI7SUFDSCxDQUFDO3dHQVBVLHVCQUF1Qjs0RkFBdkIsdUJBQXVCLG1GQ1RwQyxpYUFnQkE7OzRGRFBhLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGaWVsZFR5cGUsIEZvcm1seUZpZWxkQ29uZmlnIH0gZnJvbSBcIkBuZ3gtZm9ybWx5L2NvcmVcIjtcclxuaW1wb3J0IHsgTnpGb3JtbHlCdXR0b25Qcm9wcyB9IGZyb20gXCIuLi8uLi9uZ3gtbnotZm9ybWx5LXByb3BzLm1vZGVsXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtbnotZm9ybWx5LWJ1dHRvblwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vbnotZm9ybWx5LWJ1dHRvbi5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9uei1mb3JtbHktYnV0dG9uLmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTnpGb3JtbHlCdXR0b25Db21wb25lbnQgZXh0ZW5kcyBGaWVsZFR5cGU8XHJcbiAgRm9ybWx5RmllbGRDb25maWc8TnpGb3JtbHlCdXR0b25Qcm9wcz5cclxuPiB7XHJcbiAgb25DbGljaygpIHtcclxuICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcz8uY2xpY2sgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIHRoaXMucHJvcHMuY2xpY2soKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGJ1dHRvblxyXG4gIG56LWJ1dHRvblxyXG4gIHR5cGU9XCJidXR0b25cIlxyXG4gIFtkaXNhYmxlZF09XCJwcm9wcy5kaXNhYmxlZFwiXHJcbiAgW256R2hvc3RdPVwicHJvcHMubnpHaG9zdFwiXHJcbiAgW256TG9hZGluZ109XCJwcm9wcy5uekxvYWRpbmdcIlxyXG4gIFtuelNoYXBlXT1cInByb3BzLm56U2hhcGVcIlxyXG4gIFtuelNpemVdPVwicHJvcHMubnpTaXplXCJcclxuICBbbnpUeXBlXT1cInByb3BzLm56VHlwZVwiXHJcbiAgW256QmxvY2tdPVwicHJvcHMubnpCbG9ja1wiXHJcbiAgW256RGFuZ2VyXT1cInByb3BzLm56RGFuZ2VyXCJcclxuICBbbmdDbGFzc109XCJwcm9wcy5jbGFzc0xpc3RcIlxyXG4gIChjbGljayk9XCJvbkNsaWNrKClcIlxyXG4+XHJcbiAge3twcm9wcy50ZXh0fX1cclxuPC9idXR0b24+XHJcbiJdfQ==
1
+ import { Component } from "@angular/core";
2
+ import { FieldType } from "@ngx-formly/core";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "ng-zorro-antd/button";
6
+ import * as i3 from "ng-zorro-antd/core/transition-patch";
7
+ import * as i4 from "ng-zorro-antd/core/wave";
8
+ export class NzFormlyButtonComponent extends FieldType {
9
+ onClick() {
10
+ if (typeof this.props?.click == "function") {
11
+ this.props.click();
12
+ }
13
+ }
14
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NzFormlyButtonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
15
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NzFormlyButtonComponent, selector: "app-nz-formly-button", usesInheritance: true, ngImport: i0, template: "<button\r\n nz-button\r\n type=\"button\"\r\n [disabled]=\"props.disabled\"\r\n [nzGhost]=\"props.nzGhost\"\r\n [nzLoading]=\"props.nzLoading\"\r\n [nzShape]=\"props.nzShape\"\r\n [nzSize]=\"props.nzSize\"\r\n [nzType]=\"props.nzType\"\r\n [nzBlock]=\"props.nzBlock\"\r\n [nzDanger]=\"props.nzDanger\"\r\n [ngClass]=\"props.classList\"\r\n (click)=\"onClick()\"\r\n>\r\n {{props.text}}\r\n</button>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i3.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i4.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }] }); }
16
+ }
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NzFormlyButtonComponent, decorators: [{
18
+ type: Component,
19
+ args: [{ selector: "app-nz-formly-button", template: "<button\r\n nz-button\r\n type=\"button\"\r\n [disabled]=\"props.disabled\"\r\n [nzGhost]=\"props.nzGhost\"\r\n [nzLoading]=\"props.nzLoading\"\r\n [nzShape]=\"props.nzShape\"\r\n [nzSize]=\"props.nzSize\"\r\n [nzType]=\"props.nzType\"\r\n [nzBlock]=\"props.nzBlock\"\r\n [nzDanger]=\"props.nzDanger\"\r\n [ngClass]=\"props.classList\"\r\n (click)=\"onClick()\"\r\n>\r\n {{props.text}}\r\n</button>\r\n" }]
20
+ }] });
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnotZm9ybWx5LWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25neC1uei1mb3JtbHkvc3JjL2xpYi9jb21wb25lbnRzL256LWZvcm1seS1idXR0b24vbnotZm9ybWx5LWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25neC1uei1mb3JtbHkvc3JjL2xpYi9jb21wb25lbnRzL256LWZvcm1seS1idXR0b24vbnotZm9ybWx5LWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sa0JBQWtCLENBQUM7Ozs7OztBQVFoRSxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsU0FFNUM7SUFDQyxPQUFPO1FBQ0wsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLFVBQVUsRUFBRTtZQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ3BCO0lBQ0gsQ0FBQzsrR0FQVSx1QkFBdUI7bUdBQXZCLHVCQUF1QixtRkNUcEMsaWFBZ0JBOzs0RkRQYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0Usc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRmllbGRUeXBlLCBGb3JtbHlGaWVsZENvbmZpZyB9IGZyb20gXCJAbmd4LWZvcm1seS9jb3JlXCI7XHJcbmltcG9ydCB7IE56Rm9ybWx5QnV0dG9uUHJvcHMgfSBmcm9tIFwiLi4vLi4vbmd4LW56LWZvcm1seS1wcm9wcy5tb2RlbFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLW56LWZvcm1seS1idXR0b25cIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL256LWZvcm1seS1idXR0b24uY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vbnotZm9ybWx5LWJ1dHRvbi5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE56Rm9ybWx5QnV0dG9uQ29tcG9uZW50IGV4dGVuZHMgRmllbGRUeXBlPFxyXG4gIEZvcm1seUZpZWxkQ29uZmlnPE56Rm9ybWx5QnV0dG9uUHJvcHM+XHJcbj4ge1xyXG4gIG9uQ2xpY2soKSB7XHJcbiAgICBpZiAodHlwZW9mIHRoaXMucHJvcHM/LmNsaWNrID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICB0aGlzLnByb3BzLmNsaWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxidXR0b25cclxuICBuei1idXR0b25cclxuICB0eXBlPVwiYnV0dG9uXCJcclxuICBbZGlzYWJsZWRdPVwicHJvcHMuZGlzYWJsZWRcIlxyXG4gIFtuekdob3N0XT1cInByb3BzLm56R2hvc3RcIlxyXG4gIFtuekxvYWRpbmddPVwicHJvcHMubnpMb2FkaW5nXCJcclxuICBbbnpTaGFwZV09XCJwcm9wcy5uelNoYXBlXCJcclxuICBbbnpTaXplXT1cInByb3BzLm56U2l6ZVwiXHJcbiAgW256VHlwZV09XCJwcm9wcy5uelR5cGVcIlxyXG4gIFtuekJsb2NrXT1cInByb3BzLm56QmxvY2tcIlxyXG4gIFtuekRhbmdlcl09XCJwcm9wcy5uekRhbmdlclwiXHJcbiAgW25nQ2xhc3NdPVwicHJvcHMuY2xhc3NMaXN0XCJcclxuICAoY2xpY2spPVwib25DbGljaygpXCJcclxuPlxyXG4gIHt7cHJvcHMudGV4dH19XHJcbjwvYnV0dG9uPlxyXG4iXX0=
@@ -1,33 +1,36 @@
1
- import { Component } from "@angular/core";
2
- import { FieldType } from "@ngx-formly/core";
3
- import { Subject, takeUntil, tap } from "rxjs";
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@ngx-formly/core";
6
- import * as i2 from "@angular/forms";
7
- import * as i3 from "ng-zorro-antd/checkbox";
8
- export class NzFormlyFieldCheckboxComponent extends FieldType {
9
- unSubscribeAll$ = new Subject();
10
- ngOnInit() {
11
- this.formControl.valueChanges
12
- .pipe(takeUntil(this.unSubscribeAll$), tap((value) => {
13
- if (typeof this.props?.change == "function") {
14
- this.props.change(this.field, value);
15
- }
16
- }))
17
- .subscribe();
18
- }
19
- get fieldID() {
20
- return "control-" + this.field.key;
21
- }
22
- ngOnDestroy() {
23
- this.unSubscribeAll$.next();
24
- this.unSubscribeAll$.complete();
25
- }
26
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NzFormlyFieldCheckboxComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
27
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NzFormlyFieldCheckboxComponent, selector: "app-nz-formly-field-checkbox", usesInheritance: true, ngImport: i0, template: "<label\r\n nz-checkbox\r\n [nzId]=\"fieldID\"\r\n [formControl]=\"formControl\"\r\n [formlyAttributes]=\"field\"\r\n [nzDisabled]=\"props.disabled\"\r\n>\r\n {{props.label}}\r\n</label>\r\n", styles: ["label{display:flex;font-size:100%;font-weight:600;min-height:30px;width:-moz-fit-content;width:fit-content;align-items:center}\n"], dependencies: [{ kind: "directive", type: i1.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.NzCheckboxComponent, selector: "[nz-checkbox]", inputs: ["nzValue", "nzAutoFocus", "nzDisabled", "nzIndeterminate", "nzChecked", "nzId"], outputs: ["nzCheckedChange"], exportAs: ["nzCheckbox"] }] });
28
- }
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NzFormlyFieldCheckboxComponent, decorators: [{
30
- type: Component,
31
- args: [{ selector: "app-nz-formly-field-checkbox", template: "<label\r\n nz-checkbox\r\n [nzId]=\"fieldID\"\r\n [formControl]=\"formControl\"\r\n [formlyAttributes]=\"field\"\r\n [nzDisabled]=\"props.disabled\"\r\n>\r\n {{props.label}}\r\n</label>\r\n", styles: ["label{display:flex;font-size:100%;font-weight:600;min-height:30px;width:-moz-fit-content;width:fit-content;align-items:center}\n"] }]
32
- }] });
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnotZm9ybWx5LWZpZWxkLWNoZWNrYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1uei1mb3JtbHkvc3JjL2xpYi9jb21wb25lbnRzL256LWZvcm1seS1maWVsZC1jaGVja2JveC9uei1mb3JtbHktZmllbGQtY2hlY2tib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW56LWZvcm1seS9zcmMvbGliL2NvbXBvbmVudHMvbnotZm9ybWx5LWZpZWxkLWNoZWNrYm94L256LWZvcm1seS1maWVsZC1jaGVja2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFtQixNQUFNLGtCQUFrQixDQUFDO0FBRTlELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFPL0MsTUFBTSxPQUFPLDhCQUNYLFNBQVEsU0FBaUQ7SUFHekQsZUFBZSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFdEMsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWTthQUMxQixJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFDL0IsR0FBRyxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUU7WUFDcEIsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxJQUFJLFVBQVUsRUFBRTtnQkFDM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN0QztRQUNILENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7d0dBMUJVLDhCQUE4Qjs0RkFBOUIsOEJBQThCLDJGQ1YzQyxxTUFTQTs7NEZEQ2EsOEJBQThCO2tCQUwxQyxTQUFTOytCQUNFLDhCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGaWVsZFR5cGUsIEZpZWxkVHlwZUNvbmZpZyB9IGZyb20gXCJAbmd4LWZvcm1seS9jb3JlXCI7XHJcbmltcG9ydCB7IE56Rm9ybWx5Q2hlY2tib3hQcm9wcyB9IGZyb20gXCIuLi8uLi9uZ3gtbnotZm9ybWx5LXByb3BzLm1vZGVsXCI7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImFwcC1uei1mb3JtbHktZmllbGQtY2hlY2tib3hcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL256LWZvcm1seS1maWVsZC1jaGVja2JveC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9uei1mb3JtbHktZmllbGQtY2hlY2tib3guY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOekZvcm1seUZpZWxkQ2hlY2tib3hDb21wb25lbnRcclxuICBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc8TnpGb3JtbHlDaGVja2JveFByb3BzPj5cclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XHJcbntcclxuICB1blN1YnNjcmliZUFsbCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuU3Vic2NyaWJlQWxsJCksXHJcbiAgICAgICAgdGFwKCh2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHM/LmNoYW5nZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jaGFuZ2UodGhpcy5maWVsZCwgdmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIGdldCBmaWVsZElEKCkge1xyXG4gICAgcmV0dXJuIFwiY29udHJvbC1cIiArIHRoaXMuZmllbGQua2V5O1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnVuU3Vic2NyaWJlQWxsJC5uZXh0KCk7XHJcbiAgICB0aGlzLnVuU3Vic2NyaWJlQWxsJC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8bGFiZWxcclxuICBuei1jaGVja2JveFxyXG4gIFtueklkXT1cImZpZWxkSURcIlxyXG4gIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXHJcbiAgW2Zvcm1seUF0dHJpYnV0ZXNdPVwiZmllbGRcIlxyXG4gIFtuekRpc2FibGVkXT1cInByb3BzLmRpc2FibGVkXCJcclxuPlxyXG4gIHt7cHJvcHMubGFiZWx9fVxyXG48L2xhYmVsPlxyXG4iXX0=
1
+ import { Component } from "@angular/core";
2
+ import { FieldType } from "@ngx-formly/core";
3
+ import { Subject, takeUntil, tap } from "rxjs";
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@ngx-formly/core";
6
+ import * as i2 from "@angular/forms";
7
+ import * as i3 from "ng-zorro-antd/checkbox";
8
+ export class NzFormlyFieldCheckboxComponent extends FieldType {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.unSubscribeAll$ = new Subject();
12
+ }
13
+ ngOnInit() {
14
+ this.formControl.valueChanges
15
+ .pipe(takeUntil(this.unSubscribeAll$), tap((value) => {
16
+ if (typeof this.props?.change == "function") {
17
+ this.props.change(this.field, value);
18
+ }
19
+ }))
20
+ .subscribe();
21
+ }
22
+ get fieldID() {
23
+ return "control-" + this.field.key;
24
+ }
25
+ ngOnDestroy() {
26
+ this.unSubscribeAll$.next();
27
+ this.unSubscribeAll$.complete();
28
+ }
29
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NzFormlyFieldCheckboxComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
30
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NzFormlyFieldCheckboxComponent, selector: "app-nz-formly-field-checkbox", usesInheritance: true, ngImport: i0, template: "<label\r\n nz-checkbox\r\n [nzId]=\"fieldID\"\r\n [formControl]=\"formControl\"\r\n [formlyAttributes]=\"field\"\r\n [nzDisabled]=\"props.disabled\"\r\n>\r\n {{props.label}}\r\n</label>\r\n", styles: ["label{display:flex;font-size:100%;font-weight:600;min-height:30px;width:-moz-fit-content;width:fit-content;align-items:center}\n"], dependencies: [{ kind: "directive", type: i1.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.NzCheckboxComponent, selector: "[nz-checkbox]", inputs: ["nzValue", "nzAutoFocus", "nzDisabled", "nzIndeterminate", "nzChecked", "nzId"], outputs: ["nzCheckedChange"], exportAs: ["nzCheckbox"] }] }); }
31
+ }
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NzFormlyFieldCheckboxComponent, decorators: [{
33
+ type: Component,
34
+ args: [{ selector: "app-nz-formly-field-checkbox", template: "<label\r\n nz-checkbox\r\n [nzId]=\"fieldID\"\r\n [formControl]=\"formControl\"\r\n [formlyAttributes]=\"field\"\r\n [nzDisabled]=\"props.disabled\"\r\n>\r\n {{props.label}}\r\n</label>\r\n", styles: ["label{display:flex;font-size:100%;font-weight:600;min-height:30px;width:-moz-fit-content;width:fit-content;align-items:center}\n"] }]
35
+ }] });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnotZm9ybWx5LWZpZWxkLWNoZWNrYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmd4LW56LWZvcm1seS9zcmMvbGliL2NvbXBvbmVudHMvbnotZm9ybWx5LWZpZWxkLWNoZWNrYm94L256LWZvcm1seS1maWVsZC1jaGVja2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25neC1uei1mb3JtbHkvc3JjL2xpYi9jb21wb25lbnRzL256LWZvcm1seS1maWVsZC1jaGVja2JveC9uei1mb3JtbHktZmllbGQtY2hlY2tib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBbUIsTUFBTSxrQkFBa0IsQ0FBQztBQUU5RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7O0FBTy9DLE1BQU0sT0FBTyw4QkFDWCxTQUFRLFNBQWlEO0lBTjNEOztRQVNFLG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztLQXVCdkM7SUFyQkMsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWTthQUMxQixJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFDL0IsR0FBRyxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUU7WUFDcEIsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxJQUFJLFVBQVUsRUFBRTtnQkFDM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN0QztRQUNILENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7K0dBMUJVLDhCQUE4QjttR0FBOUIsOEJBQThCLDJGQ1YzQyxxTUFTQTs7NEZEQ2EsOEJBQThCO2tCQUwxQyxTQUFTOytCQUNFLDhCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGaWVsZFR5cGUsIEZpZWxkVHlwZUNvbmZpZyB9IGZyb20gXCJAbmd4LWZvcm1seS9jb3JlXCI7XHJcbmltcG9ydCB7IE56Rm9ybWx5Q2hlY2tib3hQcm9wcyB9IGZyb20gXCIuLi8uLi9uZ3gtbnotZm9ybWx5LXByb3BzLm1vZGVsXCI7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImFwcC1uei1mb3JtbHktZmllbGQtY2hlY2tib3hcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL256LWZvcm1seS1maWVsZC1jaGVja2JveC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9uei1mb3JtbHktZmllbGQtY2hlY2tib3guY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOekZvcm1seUZpZWxkQ2hlY2tib3hDb21wb25lbnRcclxuICBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc8TnpGb3JtbHlDaGVja2JveFByb3BzPj5cclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XHJcbntcclxuICB1blN1YnNjcmliZUFsbCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuU3Vic2NyaWJlQWxsJCksXHJcbiAgICAgICAgdGFwKCh2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHM/LmNoYW5nZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jaGFuZ2UodGhpcy5maWVsZCwgdmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIGdldCBmaWVsZElEKCkge1xyXG4gICAgcmV0dXJuIFwiY29udHJvbC1cIiArIHRoaXMuZmllbGQua2V5O1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnVuU3Vic2NyaWJlQWxsJC5uZXh0KCk7XHJcbiAgICB0aGlzLnVuU3Vic2NyaWJlQWxsJC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8bGFiZWxcclxuICBuei1jaGVja2JveFxyXG4gIFtueklkXT1cImZpZWxkSURcIlxyXG4gIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXHJcbiAgW2Zvcm1seUF0dHJpYnV0ZXNdPVwiZmllbGRcIlxyXG4gIFtuekRpc2FibGVkXT1cInByb3BzLmRpc2FibGVkXCJcclxuPlxyXG4gIHt7cHJvcHMubGFiZWx9fVxyXG48L2xhYmVsPlxyXG4iXX0=
@@ -1,105 +1,107 @@
1
- import { Component } from "@angular/core";
2
- import { FieldType } from "@ngx-formly/core";
3
- import { debounceTime, Subject, takeUntil, tap } from "rxjs";
4
- import { CountryMasks2 } from "./phone-mask.config";
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/common";
7
- import * as i2 from "@ngx-formly/core";
8
- import * as i3 from "@angular/forms";
9
- import * as i4 from "ngx-mask";
10
- import * as i5 from "ng-zorro-antd/input";
11
- import * as i6 from "ng-zorro-antd/core/transition-patch";
12
- import * as i7 from "ng-zorro-antd/icon";
13
- const DefaultPhoneMask = {
14
- countryShortName: "IR",
15
- prefix: "+98",
16
- globalMask: "+00(000)000-0000",
17
- };
18
- export class NzFormlyFieldInputComponent extends FieldType {
19
- mask;
20
- unSubscribeAll$ = new Subject();
21
- ngAfterViewInit() {
22
- this.createInitState();
23
- this.onValueChange();
24
- }
25
- createInitState() {
26
- if (this.props.mask === "phone") {
27
- this.mask = DefaultPhoneMask.globalMask;
28
- this.handlePhoneMask();
29
- }
30
- else {
31
- this.mask = this.props.mask;
32
- }
33
- }
34
- handlePhoneMask() {
35
- this.formControl.valueChanges
36
- .pipe(takeUntil(this.unSubscribeAll$), tap((value) => {
37
- if (value == "") {
38
- // hint: without setTimeout we don't have Ctrl + A -> delete
39
- setTimeout(() => {
40
- this.mask = DefaultPhoneMask.globalMask;
41
- });
42
- }
43
- else {
44
- let mask = this.findAppropriateMask(value);
45
- if (mask && this.mask !== mask.globalMask) {
46
- this.mask = mask.globalMask?.replace(/#|[1-9]/g, "0");
47
- }
48
- }
49
- }))
50
- .subscribe();
51
- }
52
- onValueChange() {
53
- this.formControl.valueChanges
54
- .pipe(takeUntil(this.unSubscribeAll$), debounceTime(300), tap((value) => {
55
- if (typeof this.props?.change == "function") {
56
- this.props.change(this.field, value);
57
- }
58
- }))
59
- .subscribe();
60
- }
61
- findAppropriateMask(value) {
62
- let newMask = CountryMasks2.filter(item => this.exactEquality(value, item.prefix)).find(item => value.length <= item.globalMask.length);
63
- if (newMask)
64
- return newMask;
65
- return null;
66
- }
67
- exactEquality(str, prefix) {
68
- // hint: replace function removes all characters except numbers to return clean numeric string
69
- // hint: index of convince us to match prefix on first index of input value
70
- let new_str = str.replace(/[^0-9.]/g, "");
71
- let new_prefix = prefix.replace(/[^0-9.]/g, "");
72
- return new_str.indexOf(new_prefix) == 0;
73
- }
74
- changeShowPassword(input) {
75
- if (input.type === "password") {
76
- input.type = "text";
77
- }
78
- else {
79
- input.type = "password";
80
- }
81
- }
82
- showPassword(input) {
83
- return input.type === "text";
84
- }
85
- get type() {
86
- return this.props.type ?? "text";
87
- }
88
- get fieldID() {
89
- return "control-" + this.field.key;
90
- }
91
- get status() {
92
- return this.formControl.touched && this.formControl.invalid ? "error" : "";
93
- }
94
- ngOnDestroy() {
95
- this.unSubscribeAll$.next();
96
- this.unSubscribeAll$.complete();
97
- }
98
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NzFormlyFieldInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
99
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NzFormlyFieldInputComponent, selector: "app-nz-formly-field-input", usesInheritance: true, ngImport: i0, template: "<nz-input-group\r\n [nzAddOnAfter]=\"props.nzAddOnAfter\"\r\n [nzAddOnBefore]=\"props.nzAddOnBefore\"\r\n [nzAddOnAfterIcon]=\"props.nzAddOnAfterIcon\"\r\n [nzAddOnBeforeIcon]=\"props.nzAddOnBeforeIcon\"\r\n [nzPrefix]=\"props.nzPrefix\"\r\n [nzSuffix]=\"props.nzSuffix\"\r\n [nzSize]=\"props.nzSize || 'default'\"\r\n>\r\n <input\r\n #input\r\n nz-input\r\n [id]=\"fieldID\"\r\n [formControl]=\"formControl\"\r\n [formlyAttributes]=\"field\"\r\n [mask]=\"mask\"\r\n [thousandSeparator]=\"props.thousandSeparator\"\r\n [type]=\"type\"\r\n [nzStatus]=\"status\"\r\n [disabled]=\"props.disabled\"\r\n [readonly]=\"props.readonly\"\r\n [placeholder]=\"props.placeholder\"\r\n [nzBorderless]=\"props.nzBorderless\"\r\n />\r\n <div class=\"show-password\" *ngIf=\"props.type === 'password'\">\r\n <span\r\n nz-icon\r\n nzTheme=\"outline\"\r\n (click)=\"changeShowPassword(input)\"\r\n [nzType]=\"showPassword(input) ? 'eye-invisible' : 'eye'\"\r\n ></span>\r\n </div>\r\n</nz-input-group>\r\n", styles: [".show-password{z-index:5;opacity:.6;cursor:pointer;position:absolute;inset-inline-end:10px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "showTemplate", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm", "inputTransformFn", "outputTransformFn", "keepCharacterPositions"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }, { kind: "directive", type: i5.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "component", type: i5.NzInputGroupComponent, selector: "nz-input-group", inputs: ["nzAddOnBeforeIcon", "nzAddOnAfterIcon", "nzPrefixIcon", "nzSuffixIcon", "nzAddOnBefore", "nzAddOnAfter", "nzPrefix", "nzStatus", "nzSuffix", "nzSize", "nzSearch", "nzCompact"], exportAs: ["nzInputGroup"] }, { kind: "directive", type: i5.NzInputGroupWhitSuffixOrPrefixDirective, selector: "nz-input-group[nzSuffix], nz-input-group[nzPrefix]" }, { kind: "directive", type: i6.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i7.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] });
100
- }
101
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NzFormlyFieldInputComponent, decorators: [{
102
- type: Component,
103
- args: [{ selector: "app-nz-formly-field-input", template: "<nz-input-group\r\n [nzAddOnAfter]=\"props.nzAddOnAfter\"\r\n [nzAddOnBefore]=\"props.nzAddOnBefore\"\r\n [nzAddOnAfterIcon]=\"props.nzAddOnAfterIcon\"\r\n [nzAddOnBeforeIcon]=\"props.nzAddOnBeforeIcon\"\r\n [nzPrefix]=\"props.nzPrefix\"\r\n [nzSuffix]=\"props.nzSuffix\"\r\n [nzSize]=\"props.nzSize || 'default'\"\r\n>\r\n <input\r\n #input\r\n nz-input\r\n [id]=\"fieldID\"\r\n [formControl]=\"formControl\"\r\n [formlyAttributes]=\"field\"\r\n [mask]=\"mask\"\r\n [thousandSeparator]=\"props.thousandSeparator\"\r\n [type]=\"type\"\r\n [nzStatus]=\"status\"\r\n [disabled]=\"props.disabled\"\r\n [readonly]=\"props.readonly\"\r\n [placeholder]=\"props.placeholder\"\r\n [nzBorderless]=\"props.nzBorderless\"\r\n />\r\n <div class=\"show-password\" *ngIf=\"props.type === 'password'\">\r\n <span\r\n nz-icon\r\n nzTheme=\"outline\"\r\n (click)=\"changeShowPassword(input)\"\r\n [nzType]=\"showPassword(input) ? 'eye-invisible' : 'eye'\"\r\n ></span>\r\n </div>\r\n</nz-input-group>\r\n", styles: [".show-password{z-index:5;opacity:.6;cursor:pointer;position:absolute;inset-inline-end:10px}\n"] }]
104
- }] });
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnotZm9ybWx5LWZpZWxkLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1uei1mb3JtbHkvc3JjL2xpYi9jb21wb25lbnRzL256LWZvcm1seS1maWVsZC1pbnB1dC9uei1mb3JtbHktZmllbGQtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW56LWZvcm1seS9zcmMvbGliL2NvbXBvbmVudHMvbnotZm9ybWx5LWZpZWxkLWlucHV0L256LWZvcm1seS1maWVsZC1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFtQixNQUFNLGtCQUFrQixDQUFDO0FBRTlELE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0QsT0FBTyxFQUFtQixhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7O0FBRXJFLE1BQU0sZ0JBQWdCLEdBQW9CO0lBQ3hDLGdCQUFnQixFQUFFLElBQUk7SUFDdEIsTUFBTSxFQUFFLEtBQUs7SUFDYixVQUFVLEVBQUUsa0JBQWtCO0NBQy9CLENBQUM7QUFPRixNQUFNLE9BQU8sMkJBQ1gsU0FBUSxTQUE4QztJQUd0RCxJQUFJLENBQXFCO0lBQ3pCLGVBQWUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRXRDLGVBQWU7UUFDYixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7WUFDL0IsSUFBSSxDQUFD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QUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7SUFDckMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzdFLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7d0dBbkdVLDJCQUEyQjs0RkFBM0IsMkJBQTJCLHdGQ2pCeEMsbWtDQWlDQTs7NEZEaEJhLDJCQUEyQjtrQkFMdkMsU0FBUzsrQkFDRSwyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIE9uRGVzdHJveSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZpZWxkVHlwZSwgRmllbGRUeXBlQ29uZmlnIH0gZnJvbSBcIkBuZ3gtZm9ybWx5L2NvcmVcIjtcclxuaW1wb3J0IHsgTnpGb3JtbHlJbnB1dFByb3BzIH0gZnJvbSBcIi4uLy4uL25neC1uei1mb3JtbHktcHJvcHMubW9kZWxcIjtcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBTdWJqZWN0LCB0YWtlVW50aWwsIHRhcCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IENvdW50cnlDb2RlTWFzaywgQ291bnRyeU1hc2tzMiB9IGZyb20gXCIuL3Bob25lLW1hc2suY29uZmlnXCI7XHJcblxyXG5jb25zdCBEZWZhdWx0UGhvbmVNYXNrOiBDb3VudHJ5Q29kZU1hc2sgPSB7XHJcbiAgY291bnRyeVNob3J0TmFtZTogXCJJUlwiLFxyXG4gIHByZWZpeDogXCIrOThcIixcclxuICBnbG9iYWxNYXNrOiBcIiswMCgwMDApMDAwLTAwMDBcIixcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImFwcC1uei1mb3JtbHktZmllbGQtaW5wdXRcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL256LWZvcm1seS1maWVsZC1pbnB1dC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9uei1mb3JtbHktZmllbGQtaW5wdXQuY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOekZvcm1seUZpZWxkSW5wdXRDb21wb25lbnRcclxuICBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc8TnpGb3JtbHlJbnB1dFByb3BzPj5cclxuICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveVxyXG57XHJcbiAgbWFzazogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHVuU3Vic2NyaWJlQWxsJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuY3JlYXRlSW5pdFN0YXRlKCk7XHJcbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUluaXRTdGF0ZSgpIHtcclxuICAgIGlmICh0aGlzLnByb3BzLm1hc2sgPT09IFwicGhvbmVcIikge1xyXG4gICAgICB0aGlzLm1hc2sgPSBEZWZhdWx0UGhvbmVNYXNrLmdsb2JhbE1hc2s7XHJcbiAgICAgIHRoaXMuaGFuZGxlUGhvbmVNYXNrKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm1hc2sgPSB0aGlzLnByb3BzLm1hc2s7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVQaG9uZU1hc2soKSB7XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy51blN1YnNjcmliZUFsbCQpLFxyXG4gICAgICAgIHRhcCgodmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgaWYgKHZhbHVlID09IFwiXCIpIHtcclxuICAgICAgICAgICAgLy8gaGludDogd2l0aG91dCBzZXRUaW1lb3V0IHdlIGRvbid0IGhhdmUgQ3RybCArIEEgLT4gZGVsZXRlXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMubWFzayA9IERlZmF1bHRQaG9uZU1hc2suZ2xvYmFsTWFzaztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgbWFzayA9IHRoaXMuZmluZEFwcHJvcHJpYXRlTWFzayh2YWx1ZSk7XHJcbiAgICAgICAgICAgIGlmIChtYXNrICYmIHRoaXMubWFzayAhPT0gbWFzay5nbG9iYWxNYXNrKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tYXNrID0gbWFzay5nbG9iYWxNYXNrPy5yZXBsYWNlKC8jfFsxLTldL2csIFwiMFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIG9uVmFsdWVDaGFuZ2UoKSB7XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy51blN1YnNjcmliZUFsbCQpLFxyXG4gICAgICAgIGRlYm91bmNlVGltZSgzMDApLFxyXG4gICAgICAgIHRhcCgodmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzPy5jaGFuZ2UgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hhbmdlKHRoaXMuZmllbGQsIHZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBmaW5kQXBwcm9wcmlhdGVNYXNrKHZhbHVlOiBzdHJpbmcpOiBDb3VudHJ5Q29kZU1hc2sgfCBudWxsIHtcclxuICAgIGxldCBuZXdNYXNrID0gQ291bnRyeU1hc2tzMi5maWx0ZXIoaXRlbSA9PlxyXG4gICAgICB0aGlzLmV4YWN0RXF1YWxpdHkodmFsdWUsIGl0ZW0ucHJlZml4KSxcclxuICAgICkuZmluZChpdGVtID0+IHZhbHVlLmxlbmd0aCA8PSBpdGVtLmdsb2JhbE1hc2subGVuZ3RoKTtcclxuICAgIGlmIChuZXdNYXNrKSByZXR1cm4gbmV3TWFzaztcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZXhhY3RFcXVhbGl0eShzdHI6IHN0cmluZywgcHJlZml4OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIC8vIGhpbnQ6IHJlcGxhY2UgZnVuY3Rpb24gcmVtb3ZlcyBhbGwgY2hhcmFjdGVycyBleGNlcHQgbnVtYmVycyB0byByZXR1cm4gY2xlYW4gbnVtZXJpYyBzdHJpbmdcclxuICAgIC8vIGhpbnQ6IGluZGV4IG9mIGNvbnZpbmNlIHVzIHRvIG1hdGNoIHByZWZpeCBvbiBmaXJzdCBpbmRleCBvZiBpbnB1dCB2YWx1ZVxyXG4gICAgbGV0IG5ld19zdHIgPSBzdHIucmVwbGFjZSgvW14wLTkuXS9nLCBcIlwiKTtcclxuICAgIGxldCBuZXdfcHJlZml4ID0gcHJlZml4LnJlcGxhY2UoL1teMC05Ll0vZywgXCJcIik7XHJcbiAgICByZXR1cm4gbmV3X3N0ci5pbmRleE9mKG5ld19wcmVmaXgpID09IDA7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VTaG93UGFzc3dvcmQoaW5wdXQ6IGFueSkge1xyXG4gICAgaWYgKGlucHV0LnR5cGUgPT09IFwicGFzc3dvcmRcIikge1xyXG4gICAgICBpbnB1dC50eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpbnB1dC50eXBlID0gXCJwYXNzd29yZFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd1Bhc3N3b3JkKGlucHV0OiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBpbnB1dC50eXBlID09PSBcInRleHRcIjtcclxuICB9XHJcblxyXG4gIGdldCB0eXBlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMudHlwZSA/PyBcInRleHRcIjtcclxuICB9XHJcblxyXG4gIGdldCBmaWVsZElEKCkge1xyXG4gICAgcmV0dXJuIFwiY29udHJvbC1cIiArIHRoaXMuZmllbGQua2V5O1xyXG4gIH1cclxuXHJcbiAgZ2V0IHN0YXR1cygpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Db250cm9sLnRvdWNoZWQgJiYgdGhpcy5mb3JtQ29udHJvbC5pbnZhbGlkID8gXCJlcnJvclwiIDogXCJcIjtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy51blN1YnNjcmliZUFsbCQubmV4dCgpO1xyXG4gICAgdGhpcy51blN1YnNjcmliZUFsbCQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPG56LWlucHV0LWdyb3VwXHJcbiAgW256QWRkT25BZnRlcl09XCJwcm9wcy5uekFkZE9uQWZ0ZXJcIlxyXG4gIFtuekFkZE9uQmVmb3JlXT1cInByb3BzLm56QWRkT25CZWZvcmVcIlxyXG4gIFtuekFkZE9uQWZ0ZXJJY29uXT1cInByb3BzLm56QWRkT25BZnRlckljb25cIlxyXG4gIFtuekFkZE9uQmVmb3JlSWNvbl09XCJwcm9wcy5uekFkZE9uQmVmb3JlSWNvblwiXHJcbiAgW256UHJlZml4XT1cInByb3BzLm56UHJlZml4XCJcclxuICBbbnpTdWZmaXhdPVwicHJvcHMubnpTdWZmaXhcIlxyXG4gIFtuelNpemVdPVwicHJvcHMubnpTaXplIHx8ICdkZWZhdWx0J1wiXHJcbj5cclxuICA8aW5wdXRcclxuICAgICAgI2lucHV0XHJcbiAgICAgIG56LWlucHV0XHJcbiAgICAgIFtpZF09XCJmaWVsZElEXCJcclxuICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcclxuICAgICAgW2Zvcm1seUF0dHJpYnV0ZXNdPVwiZmllbGRcIlxyXG4gICAgICBbbWFza109XCJtYXNrXCJcclxuICAgICAgW3Rob3VzYW5kU2VwYXJhdG9yXT1cInByb3BzLnRob3VzYW5kU2VwYXJhdG9yXCJcclxuICAgICAgW3R5cGVdPVwidHlwZVwiXHJcbiAgICAgIFtuelN0YXR1c109XCJzdGF0dXNcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwicHJvcHMuZGlzYWJsZWRcIlxyXG4gICAgICBbcmVhZG9ubHldPVwicHJvcHMucmVhZG9ubHlcIlxyXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicHJvcHMucGxhY2Vob2xkZXJcIlxyXG4gICAgICBbbnpCb3JkZXJsZXNzXT1cInByb3BzLm56Qm9yZGVybGVzc1wiXHJcbiAgLz5cclxuICA8ZGl2IGNsYXNzPVwic2hvdy1wYXNzd29yZFwiICpuZ0lmPVwicHJvcHMudHlwZSA9PT0gJ3Bhc3N3b3JkJ1wiPlxyXG4gICAgPHNwYW5cclxuICAgICAgbnotaWNvblxyXG4gICAgICBuelRoZW1lPVwib3V0bGluZVwiXHJcbiAgICAgIChjbGljayk9XCJjaGFuZ2VTaG93UGFzc3dvcmQoaW5wdXQpXCJcclxuICAgICAgW256VHlwZV09XCJzaG93UGFzc3dvcmQoaW5wdXQpID8gJ2V5ZS1pbnZpc2libGUnIDogJ2V5ZSdcIlxyXG4gICAgPjwvc3Bhbj5cclxuICA8L2Rpdj5cclxuPC9uei1pbnB1dC1ncm91cD5cclxuIl19
1
+ import { Component } from "@angular/core";
2
+ import { FieldType } from "@ngx-formly/core";
3
+ import { debounceTime, Subject, takeUntil, tap } from "rxjs";
4
+ import { CountryMasks2 } from "./phone-mask.config";
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "@ngx-formly/core";
8
+ import * as i3 from "@angular/forms";
9
+ import * as i4 from "ngx-mask";
10
+ import * as i5 from "ng-zorro-antd/input";
11
+ import * as i6 from "ng-zorro-antd/core/transition-patch";
12
+ import * as i7 from "ng-zorro-antd/icon";
13
+ const DefaultPhoneMask = {
14
+ countryShortName: "IR",
15
+ prefix: "+98",
16
+ globalMask: "+00(000)000-0000",
17
+ };
18
+ export class NzFormlyFieldInputComponent extends FieldType {
19
+ constructor() {
20
+ super(...arguments);
21
+ this.unSubscribeAll$ = new Subject();
22
+ }
23
+ ngAfterViewInit() {
24
+ this.createInitState();
25
+ this.onValueChange();
26
+ }
27
+ createInitState() {
28
+ if (this.props.mask === "phone") {
29
+ this.mask = DefaultPhoneMask.globalMask;
30
+ this.handlePhoneMask();
31
+ }
32
+ else {
33
+ this.mask = this.props.mask;
34
+ }
35
+ }
36
+ handlePhoneMask() {
37
+ this.formControl.valueChanges
38
+ .pipe(takeUntil(this.unSubscribeAll$), tap((value) => {
39
+ if (value == "") {
40
+ // hint: without setTimeout we don't have Ctrl + A -> delete
41
+ setTimeout(() => {
42
+ this.mask = DefaultPhoneMask.globalMask;
43
+ });
44
+ }
45
+ else {
46
+ let mask = this.findAppropriateMask(value);
47
+ if (mask && this.mask !== mask.globalMask) {
48
+ this.mask = mask.globalMask?.replace(/#|[1-9]/g, "0");
49
+ }
50
+ }
51
+ }))
52
+ .subscribe();
53
+ }
54
+ onValueChange() {
55
+ this.formControl.valueChanges
56
+ .pipe(takeUntil(this.unSubscribeAll$), debounceTime(300), tap((value) => {
57
+ if (typeof this.props?.change == "function") {
58
+ this.props.change(this.field, value);
59
+ }
60
+ }))
61
+ .subscribe();
62
+ }
63
+ findAppropriateMask(value) {
64
+ let newMask = CountryMasks2.filter(item => this.exactEquality(value, item.prefix)).find(item => value.length <= item.globalMask.length);
65
+ if (newMask)
66
+ return newMask;
67
+ return null;
68
+ }
69
+ exactEquality(str, prefix) {
70
+ // hint: replace function removes all characters except numbers to return clean numeric string
71
+ // hint: index of convince us to match prefix on first index of input value
72
+ let new_str = str.replace(/[^0-9.]/g, "");
73
+ let new_prefix = prefix.replace(/[^0-9.]/g, "");
74
+ return new_str.indexOf(new_prefix) == 0;
75
+ }
76
+ changeShowPassword(input) {
77
+ if (input.type === "password") {
78
+ input.type = "text";
79
+ }
80
+ else {
81
+ input.type = "password";
82
+ }
83
+ }
84
+ showPassword(input) {
85
+ return input.type === "text";
86
+ }
87
+ get type() {
88
+ return this.props.type ?? "text";
89
+ }
90
+ get fieldID() {
91
+ return "control-" + this.field.key;
92
+ }
93
+ get status() {
94
+ return this.formControl.touched && this.formControl.invalid ? "error" : "";
95
+ }
96
+ ngOnDestroy() {
97
+ this.unSubscribeAll$.next();
98
+ this.unSubscribeAll$.complete();
99
+ }
100
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NzFormlyFieldInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
101
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NzFormlyFieldInputComponent, selector: "app-nz-formly-field-input", usesInheritance: true, ngImport: i0, template: "<nz-input-group\r\n [nzAddOnAfter]=\"props.nzAddOnAfter\"\r\n [nzAddOnBefore]=\"props.nzAddOnBefore\"\r\n [nzAddOnAfterIcon]=\"props.nzAddOnAfterIcon\"\r\n [nzAddOnBeforeIcon]=\"props.nzAddOnBeforeIcon\"\r\n [nzPrefix]=\"props.nzPrefix\"\r\n [nzSuffix]=\"props.nzSuffix\"\r\n [nzSize]=\"props.nzSize || 'default'\"\r\n>\r\n <input\r\n #input\r\n nz-input\r\n [id]=\"fieldID\"\r\n [formControl]=\"formControl\"\r\n [formlyAttributes]=\"field\"\r\n [mask]=\"mask\"\r\n [thousandSeparator]=\"props.thousandSeparator\"\r\n [type]=\"type\"\r\n [nzStatus]=\"status\"\r\n [attr.disabled]=\"props.disabled\"\r\n [readonly]=\"props.readonly\"\r\n [placeholder]=\"props.placeholder\"\r\n [nzBorderless]=\"props.nzBorderless\"\r\n />\r\n <div class=\"show-password\" *ngIf=\"props.type === 'password'\">\r\n <span\r\n nz-icon\r\n nzTheme=\"outline\"\r\n (click)=\"changeShowPassword(input)\"\r\n [nzType]=\"showPassword(input) ? 'eye-invisible' : 'eye'\"\r\n ></span>\r\n </div>\r\n</nz-input-group>\r\n", styles: [".show-password{z-index:5;opacity:.6;cursor:pointer;position:absolute;inset-inline-end:10px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "showTemplate", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm", "inputTransformFn", "outputTransformFn", "keepCharacterPositions"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }, { kind: "directive", type: i5.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "component", type: i5.NzInputGroupComponent, selector: "nz-input-group", inputs: ["nzAddOnBeforeIcon", "nzAddOnAfterIcon", "nzPrefixIcon", "nzSuffixIcon", "nzAddOnBefore", "nzAddOnAfter", "nzPrefix", "nzStatus", "nzSuffix", "nzSize", "nzSearch", "nzCompact"], exportAs: ["nzInputGroup"] }, { kind: "directive", type: i5.NzInputGroupWhitSuffixOrPrefixDirective, selector: "nz-input-group[nzSuffix], nz-input-group[nzPrefix]" }, { kind: "directive", type: i6.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i7.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] }); }
102
+ }
103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NzFormlyFieldInputComponent, decorators: [{
104
+ type: Component,
105
+ args: [{ selector: "app-nz-formly-field-input", template: "<nz-input-group\r\n [nzAddOnAfter]=\"props.nzAddOnAfter\"\r\n [nzAddOnBefore]=\"props.nzAddOnBefore\"\r\n [nzAddOnAfterIcon]=\"props.nzAddOnAfterIcon\"\r\n [nzAddOnBeforeIcon]=\"props.nzAddOnBeforeIcon\"\r\n [nzPrefix]=\"props.nzPrefix\"\r\n [nzSuffix]=\"props.nzSuffix\"\r\n [nzSize]=\"props.nzSize || 'default'\"\r\n>\r\n <input\r\n #input\r\n nz-input\r\n [id]=\"fieldID\"\r\n [formControl]=\"formControl\"\r\n [formlyAttributes]=\"field\"\r\n [mask]=\"mask\"\r\n [thousandSeparator]=\"props.thousandSeparator\"\r\n [type]=\"type\"\r\n [nzStatus]=\"status\"\r\n [attr.disabled]=\"props.disabled\"\r\n [readonly]=\"props.readonly\"\r\n [placeholder]=\"props.placeholder\"\r\n [nzBorderless]=\"props.nzBorderless\"\r\n />\r\n <div class=\"show-password\" *ngIf=\"props.type === 'password'\">\r\n <span\r\n nz-icon\r\n nzTheme=\"outline\"\r\n (click)=\"changeShowPassword(input)\"\r\n [nzType]=\"showPassword(input) ? 'eye-invisible' : 'eye'\"\r\n ></span>\r\n </div>\r\n</nz-input-group>\r\n", styles: [".show-password{z-index:5;opacity:.6;cursor:pointer;position:absolute;inset-inline-end:10px}\n"] }]
106
+ }] });
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnotZm9ybWx5LWZpZWxkLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmd4LW56LWZvcm1seS9zcmMvbGliL2NvbXBvbmVudHMvbnotZm9ybWx5LWZpZWxkLWlucHV0L256LWZvcm1seS1maWVsZC1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25neC1uei1mb3JtbHkvc3JjL2xpYi9jb21wb25lbnRzL256LWZvcm1seS1maWVsZC1pbnB1dC9uei1mb3JtbHktZmllbGQtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBbUIsTUFBTSxrQkFBa0IsQ0FBQztBQUU5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBbUIsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7OztBQUVyRSxNQUFNLGdCQUFnQixHQUFvQjtJQUN4QyxnQkFBZ0IsRUFBRSxJQUFJO0lBQ3RCLE1BQU0sRUFBRSxLQUFLO0lBQ2IsVUFBVSxFQUFFLGtCQUFrQjtDQUMvQixDQUFDO0FBT0YsTUFBTSxPQUFPLDJCQUNYLFNBQVEsU0FBOEM7SUFOeEQ7O1FBVUUsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0tBK0Z2QztJQTdGQyxlQUFlO1FBQ2IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO1lBQy9CLElBQUksQ0FBQyxJQUFJ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RUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM3RSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQyxDQUFDOytHQW5HVSwyQkFBMkI7bUdBQTNCLDJCQUEyQix3RkNqQnhDLHdrQ0FpQ0E7OzRGRGhCYSwyQkFBMkI7a0JBTHZDLFNBQVM7K0JBQ0UsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBPbkRlc3Ryb3kgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGaWVsZFR5cGUsIEZpZWxkVHlwZUNvbmZpZyB9IGZyb20gXCJAbmd4LWZvcm1seS9jb3JlXCI7XHJcbmltcG9ydCB7IE56Rm9ybWx5SW5wdXRQcm9wcyB9IGZyb20gXCIuLi8uLi9uZ3gtbnotZm9ybWx5LXByb3BzLm1vZGVsXCI7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgU3ViamVjdCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBDb3VudHJ5Q29kZU1hc2ssIENvdW50cnlNYXNrczIgfSBmcm9tIFwiLi9waG9uZS1tYXNrLmNvbmZpZ1wiO1xyXG5cclxuY29uc3QgRGVmYXVsdFBob25lTWFzazogQ291bnRyeUNvZGVNYXNrID0ge1xyXG4gIGNvdW50cnlTaG9ydE5hbWU6IFwiSVJcIixcclxuICBwcmVmaXg6IFwiKzk4XCIsXHJcbiAgZ2xvYmFsTWFzazogXCIrMDAoMDAwKTAwMC0wMDAwXCIsXHJcbn07XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtbnotZm9ybWx5LWZpZWxkLWlucHV0XCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9uei1mb3JtbHktZmllbGQtaW5wdXQuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vbnotZm9ybWx5LWZpZWxkLWlucHV0LmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTnpGb3JtbHlGaWVsZElucHV0Q29tcG9uZW50XHJcbiAgZXh0ZW5kcyBGaWVsZFR5cGU8RmllbGRUeXBlQ29uZmlnPE56Rm9ybWx5SW5wdXRQcm9wcz4+XHJcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3lcclxue1xyXG4gIG1hc2s6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICB1blN1YnNjcmliZUFsbCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLmNyZWF0ZUluaXRTdGF0ZSgpO1xyXG4gICAgdGhpcy5vblZhbHVlQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVJbml0U3RhdGUoKSB7XHJcbiAgICBpZiAodGhpcy5wcm9wcy5tYXNrID09PSBcInBob25lXCIpIHtcclxuICAgICAgdGhpcy5tYXNrID0gRGVmYXVsdFBob25lTWFzay5nbG9iYWxNYXNrO1xyXG4gICAgICB0aGlzLmhhbmRsZVBob25lTWFzaygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tYXNrID0gdGhpcy5wcm9wcy5tYXNrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlUGhvbmVNYXNrKCkge1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5TdWJzY3JpYmVBbGwkKSxcclxuICAgICAgICB0YXAoKHZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIC8vIGhpbnQ6IHdpdGhvdXQgc2V0VGltZW91dCB3ZSBkb24ndCBoYXZlIEN0cmwgKyBBIC0+IGRlbGV0ZVxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLm1hc2sgPSBEZWZhdWx0UGhvbmVNYXNrLmdsb2JhbE1hc2s7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IG1hc2sgPSB0aGlzLmZpbmRBcHByb3ByaWF0ZU1hc2sodmFsdWUpO1xyXG4gICAgICAgICAgICBpZiAobWFzayAmJiB0aGlzLm1hc2sgIT09IG1hc2suZ2xvYmFsTWFzaykge1xyXG4gICAgICAgICAgICAgIHRoaXMubWFzayA9IG1hc2suZ2xvYmFsTWFzaz8ucmVwbGFjZSgvI3xbMS05XS9nLCBcIjBcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBvblZhbHVlQ2hhbmdlKCkge1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5TdWJzY3JpYmVBbGwkKSxcclxuICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcclxuICAgICAgICB0YXAoKHZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcz8uY2hhbmdlID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoYW5nZSh0aGlzLmZpZWxkLCB2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgZmluZEFwcHJvcHJpYXRlTWFzayh2YWx1ZTogc3RyaW5nKTogQ291bnRyeUNvZGVNYXNrIHwgbnVsbCB7XHJcbiAgICBsZXQgbmV3TWFzayA9IENvdW50cnlNYXNrczIuZmlsdGVyKGl0ZW0gPT5cclxuICAgICAgdGhpcy5leGFjdEVxdWFsaXR5KHZhbHVlLCBpdGVtLnByZWZpeCksXHJcbiAgICApLmZpbmQoaXRlbSA9PiB2YWx1ZS5sZW5ndGggPD0gaXRlbS5nbG9iYWxNYXNrLmxlbmd0aCk7XHJcbiAgICBpZiAobmV3TWFzaykgcmV0dXJuIG5ld01hc2s7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGV4YWN0RXF1YWxpdHkoc3RyOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAvLyBoaW50OiByZXBsYWNlIGZ1bmN0aW9uIHJlbW92ZXMgYWxsIGNoYXJhY3RlcnMgZXhjZXB0IG51bWJlcnMgdG8gcmV0dXJuIGNsZWFuIG51bWVyaWMgc3RyaW5nXHJcbiAgICAvLyBoaW50OiBpbmRleCBvZiBjb252aW5jZSB1cyB0byBtYXRjaCBwcmVmaXggb24gZmlyc3QgaW5kZXggb2YgaW5wdXQgdmFsdWVcclxuICAgIGxldCBuZXdfc3RyID0gc3RyLnJlcGxhY2UoL1teMC05Ll0vZywgXCJcIik7XHJcbiAgICBsZXQgbmV3X3ByZWZpeCA9IHByZWZpeC5yZXBsYWNlKC9bXjAtOS5dL2csIFwiXCIpO1xyXG4gICAgcmV0dXJuIG5ld19zdHIuaW5kZXhPZihuZXdfcHJlZml4KSA9PSAwO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlU2hvd1Bhc3N3b3JkKGlucHV0OiBhbnkpIHtcclxuICAgIGlmIChpbnB1dC50eXBlID09PSBcInBhc3N3b3JkXCIpIHtcclxuICAgICAgaW5wdXQudHlwZSA9IFwidGV4dFwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaW5wdXQudHlwZSA9IFwicGFzc3dvcmRcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNob3dQYXNzd29yZChpbnB1dDogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gaW5wdXQudHlwZSA9PT0gXCJ0ZXh0XCI7XHJcbiAgfVxyXG5cclxuICBnZXQgdHlwZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzLnR5cGUgPz8gXCJ0ZXh0XCI7XHJcbiAgfVxyXG5cclxuICBnZXQgZmllbGRJRCgpIHtcclxuICAgIHJldHVybiBcImNvbnRyb2wtXCIgKyB0aGlzLmZpZWxkLmtleTtcclxuICB9XHJcblxyXG4gIGdldCBzdGF0dXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29udHJvbC50b3VjaGVkICYmIHRoaXMuZm9ybUNvbnRyb2wuaW52YWxpZCA/IFwiZXJyb3JcIiA6IFwiXCI7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMudW5TdWJzY3JpYmVBbGwkLm5leHQoKTtcclxuICAgIHRoaXMudW5TdWJzY3JpYmVBbGwkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxuei1pbnB1dC1ncm91cFxyXG4gIFtuekFkZE9uQWZ0ZXJdPVwicHJvcHMubnpBZGRPbkFmdGVyXCJcclxuICBbbnpBZGRPbkJlZm9yZV09XCJwcm9wcy5uekFkZE9uQmVmb3JlXCJcclxuICBbbnpBZGRPbkFmdGVySWNvbl09XCJwcm9wcy5uekFkZE9uQWZ0ZXJJY29uXCJcclxuICBbbnpBZGRPbkJlZm9yZUljb25dPVwicHJvcHMubnpBZGRPbkJlZm9yZUljb25cIlxyXG4gIFtuelByZWZpeF09XCJwcm9wcy5uelByZWZpeFwiXHJcbiAgW256U3VmZml4XT1cInByb3BzLm56U3VmZml4XCJcclxuICBbbnpTaXplXT1cInByb3BzLm56U2l6ZSB8fCAnZGVmYXVsdCdcIlxyXG4+XHJcbiAgPGlucHV0XHJcbiAgICAgICNpbnB1dFxyXG4gICAgICBuei1pbnB1dFxyXG4gICAgICBbaWRdPVwiZmllbGRJRFwiXHJcbiAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXHJcbiAgICAgIFtmb3JtbHlBdHRyaWJ1dGVzXT1cImZpZWxkXCJcclxuICAgICAgW21hc2tdPVwibWFza1wiXHJcbiAgICAgIFt0aG91c2FuZFNlcGFyYXRvcl09XCJwcm9wcy50aG91c2FuZFNlcGFyYXRvclwiXHJcbiAgICAgIFt0eXBlXT1cInR5cGVcIlxyXG4gICAgICBbbnpTdGF0dXNdPVwic3RhdHVzXCJcclxuICAgICAgW2F0dHIuZGlzYWJsZWRdPVwicHJvcHMuZGlzYWJsZWRcIlxyXG4gICAgICBbcmVhZG9ubHldPVwicHJvcHMucmVhZG9ubHlcIlxyXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicHJvcHMucGxhY2Vob2xkZXJcIlxyXG4gICAgICBbbnpCb3JkZXJsZXNzXT1cInByb3BzLm56Qm9yZGVybGVzc1wiXHJcbiAgLz5cclxuICA8ZGl2IGNsYXNzPVwic2hvdy1wYXNzd29yZFwiICpuZ0lmPVwicHJvcHMudHlwZSA9PT0gJ3Bhc3N3b3JkJ1wiPlxyXG4gICAgPHNwYW5cclxuICAgICAgbnotaWNvblxyXG4gICAgICBuelRoZW1lPVwib3V0bGluZVwiXHJcbiAgICAgIChjbGljayk9XCJjaGFuZ2VTaG93UGFzc3dvcmQoaW5wdXQpXCJcclxuICAgICAgW256VHlwZV09XCJzaG93UGFzc3dvcmQoaW5wdXQpID8gJ2V5ZS1pbnZpc2libGUnIDogJ2V5ZSdcIlxyXG4gICAgPjwvc3Bhbj5cclxuICA8L2Rpdj5cclxuPC9uei1pbnB1dC1ncm91cD5cclxuIl19