ngx-nz-formly 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/nz-formly-button/nz-formly-button.component.mjs +21 -0
- package/esm2022/lib/components/nz-formly-field-checkbox/nz-formly-field-checkbox.component.mjs +33 -0
- package/esm2022/lib/components/nz-formly-field-input/nz-formly-field-input.component.mjs +105 -0
- package/esm2022/lib/components/nz-formly-field-input/phone-mask.config.mjs +1463 -0
- package/esm2022/lib/components/nz-formly-field-radio/nz-formly-field-radio.component.mjs +39 -0
- package/esm2022/lib/components/nz-formly-field-select/nz-formly-field-select.component.mjs +34 -0
- package/esm2022/lib/components/nz-formly-field-switch/nz-formly-field-switch.component.mjs +38 -0
- package/esm2022/lib/ngx-nz-formly-props.model.mjs +6 -0
- package/esm2022/lib/ngx-nz-formly-type-safe.model.mjs +44 -0
- package/esm2022/lib/ngx-nz-formly-validators.mjs +52 -0
- package/esm2022/lib/ngx-nz-formly.module.mjs +263 -0
- package/esm2022/lib/wrappers/nz-formly-default-wrapper/nz-formly-default-wrapper.component.mjs +37 -0
- package/esm2022/lib/wrappers/nz-formly-label-wrapper/nz-formly-label-wrapper.component.mjs +13 -0
- package/esm2022/ngx-nz-formly.mjs +5 -0
- package/esm2022/public-api.mjs +5 -0
- package/fesm2022/ngx-nz-formly.mjs +2101 -0
- package/fesm2022/ngx-nz-formly.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/nz-formly-button/nz-formly-button.component.d.ts +8 -0
- package/lib/components/nz-formly-field-checkbox/nz-formly-field-checkbox.component.d.ts +13 -0
- package/lib/components/nz-formly-field-input/nz-formly-field-input.component.d.ts +24 -0
- package/lib/components/nz-formly-field-input/phone-mask.config.d.ts +11 -0
- package/lib/components/nz-formly-field-radio/nz-formly-field-radio.component.d.ts +14 -0
- package/lib/components/nz-formly-field-select/nz-formly-field-select.component.d.ts +13 -0
- package/lib/components/nz-formly-field-switch/nz-formly-field-switch.component.d.ts +14 -0
- package/lib/ngx-nz-formly-props.model.d.ts +145 -0
- package/lib/ngx-nz-formly-type-safe.model.d.ts +14 -0
- package/lib/ngx-nz-formly-validators.d.ts +16 -0
- package/lib/ngx-nz-formly.module.d.ts +2 -0
- package/lib/wrappers/nz-formly-default-wrapper/nz-formly-default-wrapper.component.d.ts +7 -0
- package/lib/wrappers/nz-formly-label-wrapper/nz-formly-label-wrapper.component.d.ts +7 -0
- package/package.json +48 -43
- package/ng-package.json +0 -7
- package/src/lib/components/nz-formly-button/nz-formly-button.component.html +0 -16
- package/src/lib/components/nz-formly-button/nz-formly-button.component.scss +0 -0
- package/src/lib/components/nz-formly-button/nz-formly-button.component.ts +0 -18
- package/src/lib/components/nz-formly-field-checkbox/nz-formly-field-checkbox.component.html +0 -9
- package/src/lib/components/nz-formly-field-checkbox/nz-formly-field-checkbox.component.scss +0 -8
- package/src/lib/components/nz-formly-field-checkbox/nz-formly-field-checkbox.component.ts +0 -38
- package/src/lib/components/nz-formly-field-input/nz-formly-field-input.component.html +0 -33
- package/src/lib/components/nz-formly-field-input/nz-formly-field-input.component.scss +0 -7
- package/src/lib/components/nz-formly-field-input/nz-formly-field-input.component.ts +0 -118
- package/src/lib/components/nz-formly-field-input/phone-mask.config.ts +0 -1469
- package/src/lib/components/nz-formly-field-radio/nz-formly-field-radio.component.html +0 -32
- package/src/lib/components/nz-formly-field-radio/nz-formly-field-radio.component.scss +0 -0
- package/src/lib/components/nz-formly-field-radio/nz-formly-field-radio.component.ts +0 -44
- package/src/lib/components/nz-formly-field-select/nz-formly-field-select.component.html +0 -54
- package/src/lib/components/nz-formly-field-select/nz-formly-field-select.component.scss +0 -3
- package/src/lib/components/nz-formly-field-select/nz-formly-field-select.component.ts +0 -38
- package/src/lib/components/nz-formly-field-switch/nz-formly-field-switch.component.html +0 -10
- package/src/lib/components/nz-formly-field-switch/nz-formly-field-switch.component.scss +0 -0
- package/src/lib/components/nz-formly-field-switch/nz-formly-field-switch.component.ts +0 -44
- package/src/lib/ngx-nz-formly-props.model.ts +0 -158
- package/src/lib/ngx-nz-formly-type-safe.model.ts +0 -81
- package/src/lib/ngx-nz-formly-validators.ts +0 -92
- package/src/lib/ngx-nz-formly.module.ts +0 -260
- package/src/lib/wrappers/nz-formly-default-wrapper/nz-formly-default-wrapper.component.html +0 -16
- package/src/lib/wrappers/nz-formly-default-wrapper/nz-formly-default-wrapper.component.scss +0 -12
- package/src/lib/wrappers/nz-formly-default-wrapper/nz-formly-default-wrapper.component.ts +0 -25
- package/src/lib/wrappers/nz-formly-label-wrapper/nz-formly-label-wrapper.component.html +0 -27
- package/src/lib/wrappers/nz-formly-label-wrapper/nz-formly-label-wrapper.component.scss +0 -55
- package/src/lib/wrappers/nz-formly-label-wrapper/nz-formly-label-wrapper.component.ts +0 -12
- package/tsconfig.lib.json +0 -14
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -14
- /package/{src/public-api.ts → public-api.d.ts} +0 -0
|
@@ -0,0 +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==
|
package/esm2022/lib/components/nz-formly-field-checkbox/nz-formly-field-checkbox.component.mjs
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
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=
|
|
@@ -0,0 +1,105 @@
|
|
|
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
|