pdm-ui-kit 1.5.0 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,7 +14,6 @@ export class PdmSelectComponent {
14
14
  this.viewContainerRef = viewContainerRef;
15
15
  this.id = "";
16
16
  this.value = "";
17
- this.options = [];
18
17
  this.disabled = false;
19
18
  this.invalid = false;
20
19
  this.className = "";
@@ -23,12 +22,34 @@ export class PdmSelectComponent {
23
22
  this.valueChange = new EventEmitter();
24
23
  this.overlayRef = null;
25
24
  this.backdropSub = null;
25
+ this.projectedOptionsSub = null;
26
+ this.inputOptions = [];
27
+ this.projectedOptionCache = new WeakMap();
28
+ this.cachedProjectedOptions = [];
29
+ }
30
+ set options(value) {
31
+ this.inputOptions = value ?? [];
32
+ this.cdr.markForCheck();
33
+ }
34
+ get options() {
35
+ return this.inputOptions;
26
36
  }
27
37
  ngAfterContentInit() {
38
+ this.syncProjectedOptions();
28
39
  // Re-render when projected options change (e.g. *ngFor on pdm-select-option).
29
- this.projectedOptions.changes.subscribe(() => this.cdr.markForCheck());
40
+ this.projectedOptionsSub = this.projectedOptions.changes.subscribe(() => {
41
+ this.syncProjectedOptions();
42
+ this.cdr.markForCheck();
43
+ });
44
+ }
45
+ ngDoCheck() {
46
+ this.syncProjectedOptions();
30
47
  }
31
48
  ngOnDestroy() {
49
+ if (this.projectedOptionsSub) {
50
+ this.projectedOptionsSub.unsubscribe();
51
+ this.projectedOptionsSub = null;
52
+ }
32
53
  this.destroyOverlay();
33
54
  }
34
55
  /**
@@ -38,13 +59,9 @@ export class PdmSelectComponent {
38
59
  */
39
60
  get resolvedOptions() {
40
61
  if (this.projectedOptions && this.projectedOptions.length > 0) {
41
- return this.projectedOptions.map((d) => ({
42
- label: d.resolvedLabel,
43
- value: d.value,
44
- disabled: d.disabled,
45
- }));
62
+ return this.cachedProjectedOptions;
46
63
  }
47
- return this.options;
64
+ return this.inputOptions;
48
65
  }
49
66
  get selectedOption() {
50
67
  return this.resolvedOptions.find((option) => option.value === this.value);
@@ -71,11 +88,46 @@ export class PdmSelectComponent {
71
88
  this.valueChange.emit(option.value);
72
89
  this.closePanel();
73
90
  }
91
+ trackByOptionValue(index, option) {
92
+ return this.optionKey(option, index);
93
+ }
74
94
  onEscape() {
75
95
  if (this.open) {
76
96
  this.closePanel();
77
97
  }
78
98
  }
99
+ syncProjectedOptions() {
100
+ if (!this.projectedOptions || this.projectedOptions.length === 0) {
101
+ if (this.cachedProjectedOptions.length > 0) {
102
+ this.cachedProjectedOptions.length = 0;
103
+ }
104
+ return;
105
+ }
106
+ let index = 0;
107
+ this.projectedOptions.forEach((directive) => {
108
+ let option = this.projectedOptionCache.get(directive);
109
+ if (!option) {
110
+ option = {
111
+ label: directive.resolvedLabel,
112
+ value: directive.value,
113
+ disabled: directive.disabled,
114
+ };
115
+ this.projectedOptionCache.set(directive, option);
116
+ }
117
+ option.label = directive.resolvedLabel;
118
+ option.value = directive.value;
119
+ option.disabled = directive.disabled;
120
+ this.cachedProjectedOptions[index] = option;
121
+ index += 1;
122
+ });
123
+ if (this.cachedProjectedOptions.length !== index) {
124
+ this.cachedProjectedOptions.length = index;
125
+ }
126
+ }
127
+ optionKey(option, index) {
128
+ const value = option?.value;
129
+ return value == null ? `index:${index}` : `value:${String(value)}`;
130
+ }
79
131
  openPanel() {
80
132
  if (this.overlayRef)
81
133
  return;
@@ -126,10 +178,10 @@ export class PdmSelectComponent {
126
178
  }
127
179
  }
128
180
  PdmSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmSelectComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.Overlay }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
129
- PdmSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmSelectComponent, selector: "pdm-select", inputs: { id: "id", value: "value", options: "options", disabled: "disabled", invalid: "invalid", className: "className", placeholder: "placeholder", overlayOptions: "overlayOptions" }, outputs: { valueChange: "valueChange" }, host: { listeners: { "document:keydown.escape": "onEscape()" } }, queries: [{ propertyName: "projectedOptions", predicate: PdmSelectOptionDirective }], viewQueries: [{ propertyName: "triggerRef", first: true, predicate: ["triggerEl"], descendants: true }, { propertyName: "panelTemplateRef", first: true, predicate: ["panelTemplate"], descendants: true }], ngImport: i0, template: "<div [ngClass]=\"['relative', className || 'w-full']\">\n <button\n #triggerEl\n type=\"button\"\n [id]=\"id\"\n [disabled]=\"disabled\"\n [attr.aria-invalid]=\"invalid\"\n [attr.aria-expanded]=\"open\"\n [attr.data-state]=\"open ? 'open' : 'closed'\"\n aria-haspopup=\"listbox\"\n (click)=\"toggle()\"\n [ngClass]=\"[\n 'border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive flex h-9 w-full appearance-none box-border items-center justify-between rounded-md border border-solid bg-background px-3 py-2 text-sm shadow-sm outline-none disabled:cursor-not-allowed disabled:opacity-50',\n ]\"\n >\n <span\n [ngClass]=\"[\n 'min-w-0 flex-1 truncate text-left leading-5',\n selectedOption\n ? 'font-medium text-foreground'\n : 'font-normal text-muted-foreground',\n ]\"\n >\n {{ selectedLabel }}\n </span>\n <pdm-icon\n name=\"chevron-down\"\n [size]=\"16\"\n className=\"shrink-0 text-muted-foreground\"\n ></pdm-icon>\n </button>\n\n <!-- Hidden native select kept for screen-reader / form fallback -->\n <select\n class=\"sr-only\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [value]=\"value\"\n (change)=\"onChange($event)\"\n >\n <option\n *ngFor=\"let option of resolvedOptions\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n\n <!-- Slot for content-projected pdm-select-option elements (hidden from layout) -->\n <span class=\"hidden\">\n <ng-content select=\"pdm-select-option\"></ng-content>\n </span>\n</div>\n\n<ng-template #panelTemplate>\n <div\n role=\"listbox\"\n [attr.aria-labelledby]=\"id || null\"\n class=\"w-full overflow-y-auto rounded-md border border-solid border-border bg-popover p-1 text-popover-foreground shadow-md max-h-96\"\n >\n <button\n *ngFor=\"let option of resolvedOptions\"\n type=\"button\"\n role=\"option\"\n [attr.aria-selected]=\"option.value === value\"\n [disabled]=\"option.disabled\"\n (click)=\"selectOption(option)\"\n [ngClass]=\"[\n 'flex w-full appearance-none box-border items-center justify-between rounded-sm border-0 bg-transparent px-2 py-1.5 text-left text-sm outline-none transition-colors',\n option.disabled\n ? 'cursor-not-allowed opacity-50'\n : 'hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground',\n option.value === value ? 'text-foreground' : '',\n ]\"\n >\n <span class=\"min-w-0 flex-1 truncate leading-5\">{{ option.label }}</span>\n <span\n *ngIf=\"option.value === value\"\n class=\"ml-2 flex shrink-0 items-center justify-end\"\n >\n <pdm-icon\n name=\"check\"\n [size]=\"16\"\n className=\"shrink-0 text-current\"\n ></pdm-icon>\n </span>\n </button>\n </div>\n</ng-template>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.PdmIconComponent, selector: "pdm-icon", inputs: ["name", "library", "assetUrl", "size", "strokeWidth", "className", "ariaLabel", "decorative"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
181
+ PdmSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmSelectComponent, selector: "pdm-select", inputs: { id: "id", value: "value", options: "options", disabled: "disabled", invalid: "invalid", className: "className", placeholder: "placeholder", overlayOptions: "overlayOptions" }, outputs: { valueChange: "valueChange" }, host: { listeners: { "document:keydown.escape": "onEscape()" } }, queries: [{ propertyName: "projectedOptions", predicate: PdmSelectOptionDirective }], viewQueries: [{ propertyName: "triggerRef", first: true, predicate: ["triggerEl"], descendants: true }, { propertyName: "panelTemplateRef", first: true, predicate: ["panelTemplate"], descendants: true }], ngImport: i0, template: "<div [ngClass]=\"['relative', className || 'w-full']\">\n <button\n #triggerEl\n type=\"button\"\n [id]=\"id\"\n [disabled]=\"disabled\"\n [attr.aria-invalid]=\"invalid\"\n [attr.aria-expanded]=\"open\"\n [attr.data-state]=\"open ? 'open' : 'closed'\"\n aria-haspopup=\"listbox\"\n (click)=\"toggle()\"\n [ngClass]=\"[\n 'border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive flex h-9 w-full appearance-none box-border items-center justify-between rounded-md border border-solid bg-background px-3 py-2 text-sm shadow-sm outline-none disabled:cursor-not-allowed disabled:opacity-50',\n ]\"\n >\n <span\n [ngClass]=\"[\n 'min-w-0 flex-1 truncate text-left leading-5',\n selectedOption\n ? 'font-medium text-foreground'\n : 'font-normal text-muted-foreground',\n ]\"\n >\n {{ selectedLabel }}\n </span>\n <pdm-icon\n name=\"chevron-down\"\n [size]=\"16\"\n className=\"shrink-0 text-muted-foreground\"\n ></pdm-icon>\n </button>\n\n <!-- Hidden native select kept for screen-reader / form fallback -->\n <select\n class=\"sr-only\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [value]=\"value\"\n (change)=\"onChange($event)\"\n >\n <option\n *ngFor=\"let option of resolvedOptions; trackBy: trackByOptionValue\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n\n <!-- Slot for content-projected pdm-select-option elements (hidden from layout) -->\n <span class=\"hidden\">\n <ng-content select=\"pdm-select-option\"></ng-content>\n </span>\n</div>\n\n<ng-template #panelTemplate>\n <div\n role=\"listbox\"\n [attr.aria-labelledby]=\"id || null\"\n class=\"w-full overflow-y-auto rounded-md border border-solid border-border bg-popover p-1 text-popover-foreground shadow-md max-h-96\"\n >\n <button\n *ngFor=\"let option of resolvedOptions; trackBy: trackByOptionValue\"\n type=\"button\"\n role=\"option\"\n [attr.aria-selected]=\"option.value === value\"\n [disabled]=\"option.disabled\"\n (click)=\"selectOption(option)\"\n [ngClass]=\"[\n 'flex w-full appearance-none box-border items-center justify-between rounded-sm border-0 bg-transparent px-2 py-1.5 text-left text-sm outline-none transition-colors',\n option.disabled\n ? 'cursor-not-allowed opacity-50'\n : 'hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground',\n option.value === value ? 'text-foreground' : '',\n ]\"\n >\n <span class=\"min-w-0 flex-1 truncate leading-5\">{{ option.label }}</span>\n <span\n *ngIf=\"option.value === value\"\n class=\"ml-2 flex shrink-0 items-center justify-end\"\n >\n <pdm-icon\n name=\"check\"\n [size]=\"16\"\n className=\"shrink-0 text-current\"\n ></pdm-icon>\n </span>\n </button>\n </div>\n</ng-template>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.PdmIconComponent, selector: "pdm-icon", inputs: ["name", "library", "assetUrl", "size", "strokeWidth", "className", "ariaLabel", "decorative"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
130
182
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmSelectComponent, decorators: [{
131
183
  type: Component,
132
- args: [{ selector: "pdm-select", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [ngClass]=\"['relative', className || 'w-full']\">\n <button\n #triggerEl\n type=\"button\"\n [id]=\"id\"\n [disabled]=\"disabled\"\n [attr.aria-invalid]=\"invalid\"\n [attr.aria-expanded]=\"open\"\n [attr.data-state]=\"open ? 'open' : 'closed'\"\n aria-haspopup=\"listbox\"\n (click)=\"toggle()\"\n [ngClass]=\"[\n 'border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive flex h-9 w-full appearance-none box-border items-center justify-between rounded-md border border-solid bg-background px-3 py-2 text-sm shadow-sm outline-none disabled:cursor-not-allowed disabled:opacity-50',\n ]\"\n >\n <span\n [ngClass]=\"[\n 'min-w-0 flex-1 truncate text-left leading-5',\n selectedOption\n ? 'font-medium text-foreground'\n : 'font-normal text-muted-foreground',\n ]\"\n >\n {{ selectedLabel }}\n </span>\n <pdm-icon\n name=\"chevron-down\"\n [size]=\"16\"\n className=\"shrink-0 text-muted-foreground\"\n ></pdm-icon>\n </button>\n\n <!-- Hidden native select kept for screen-reader / form fallback -->\n <select\n class=\"sr-only\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [value]=\"value\"\n (change)=\"onChange($event)\"\n >\n <option\n *ngFor=\"let option of resolvedOptions\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n\n <!-- Slot for content-projected pdm-select-option elements (hidden from layout) -->\n <span class=\"hidden\">\n <ng-content select=\"pdm-select-option\"></ng-content>\n </span>\n</div>\n\n<ng-template #panelTemplate>\n <div\n role=\"listbox\"\n [attr.aria-labelledby]=\"id || null\"\n class=\"w-full overflow-y-auto rounded-md border border-solid border-border bg-popover p-1 text-popover-foreground shadow-md max-h-96\"\n >\n <button\n *ngFor=\"let option of resolvedOptions\"\n type=\"button\"\n role=\"option\"\n [attr.aria-selected]=\"option.value === value\"\n [disabled]=\"option.disabled\"\n (click)=\"selectOption(option)\"\n [ngClass]=\"[\n 'flex w-full appearance-none box-border items-center justify-between rounded-sm border-0 bg-transparent px-2 py-1.5 text-left text-sm outline-none transition-colors',\n option.disabled\n ? 'cursor-not-allowed opacity-50'\n : 'hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground',\n option.value === value ? 'text-foreground' : '',\n ]\"\n >\n <span class=\"min-w-0 flex-1 truncate leading-5\">{{ option.label }}</span>\n <span\n *ngIf=\"option.value === value\"\n class=\"ml-2 flex shrink-0 items-center justify-end\"\n >\n <pdm-icon\n name=\"check\"\n [size]=\"16\"\n className=\"shrink-0 text-current\"\n ></pdm-icon>\n </span>\n </button>\n </div>\n</ng-template>\n", styles: [":host{display:block}\n"] }]
184
+ args: [{ selector: "pdm-select", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [ngClass]=\"['relative', className || 'w-full']\">\n <button\n #triggerEl\n type=\"button\"\n [id]=\"id\"\n [disabled]=\"disabled\"\n [attr.aria-invalid]=\"invalid\"\n [attr.aria-expanded]=\"open\"\n [attr.data-state]=\"open ? 'open' : 'closed'\"\n aria-haspopup=\"listbox\"\n (click)=\"toggle()\"\n [ngClass]=\"[\n 'border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive flex h-9 w-full appearance-none box-border items-center justify-between rounded-md border border-solid bg-background px-3 py-2 text-sm shadow-sm outline-none disabled:cursor-not-allowed disabled:opacity-50',\n ]\"\n >\n <span\n [ngClass]=\"[\n 'min-w-0 flex-1 truncate text-left leading-5',\n selectedOption\n ? 'font-medium text-foreground'\n : 'font-normal text-muted-foreground',\n ]\"\n >\n {{ selectedLabel }}\n </span>\n <pdm-icon\n name=\"chevron-down\"\n [size]=\"16\"\n className=\"shrink-0 text-muted-foreground\"\n ></pdm-icon>\n </button>\n\n <!-- Hidden native select kept for screen-reader / form fallback -->\n <select\n class=\"sr-only\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [value]=\"value\"\n (change)=\"onChange($event)\"\n >\n <option\n *ngFor=\"let option of resolvedOptions; trackBy: trackByOptionValue\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n\n <!-- Slot for content-projected pdm-select-option elements (hidden from layout) -->\n <span class=\"hidden\">\n <ng-content select=\"pdm-select-option\"></ng-content>\n </span>\n</div>\n\n<ng-template #panelTemplate>\n <div\n role=\"listbox\"\n [attr.aria-labelledby]=\"id || null\"\n class=\"w-full overflow-y-auto rounded-md border border-solid border-border bg-popover p-1 text-popover-foreground shadow-md max-h-96\"\n >\n <button\n *ngFor=\"let option of resolvedOptions; trackBy: trackByOptionValue\"\n type=\"button\"\n role=\"option\"\n [attr.aria-selected]=\"option.value === value\"\n [disabled]=\"option.disabled\"\n (click)=\"selectOption(option)\"\n [ngClass]=\"[\n 'flex w-full appearance-none box-border items-center justify-between rounded-sm border-0 bg-transparent px-2 py-1.5 text-left text-sm outline-none transition-colors',\n option.disabled\n ? 'cursor-not-allowed opacity-50'\n : 'hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground',\n option.value === value ? 'text-foreground' : '',\n ]\"\n >\n <span class=\"min-w-0 flex-1 truncate leading-5\">{{ option.label }}</span>\n <span\n *ngIf=\"option.value === value\"\n class=\"ml-2 flex shrink-0 items-center justify-end\"\n >\n <pdm-icon\n name=\"check\"\n [size]=\"16\"\n className=\"shrink-0 text-current\"\n ></pdm-icon>\n </span>\n </button>\n </div>\n</ng-template>\n", styles: [":host{display:block}\n"] }]
133
185
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.Overlay }, { type: i0.ViewContainerRef }]; }, propDecorators: { id: [{
134
186
  type: Input
135
187
  }], value: [{
@@ -161,4 +213,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
161
213
  type: HostListener,
162
214
  args: ["document:keydown.escape"]
163
215
  }] } });
164
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTix1QkFBdUIsRUFFdkIsU0FBUyxFQUNULGVBQWUsRUFFZixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBRU4sU0FBUyxHQUVULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVyRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7O0FBYy9DLE1BQU0sT0FBTyxrQkFBa0I7SUE2QjlCLFlBQ2tCLEdBQXNCLEVBQ3RCLE9BQWdCLEVBQ2hCLGdCQUFrQztRQUZsQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUEvQjNDLE9BQUUsR0FBRyxFQUFFLENBQUM7UUFDUixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsWUFBTyxHQUFzQixFQUFFLENBQUM7UUFDaEMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixnQkFBVyxHQUFHLGtCQUFrQixDQUFDO1FBUTFDLFNBQUksR0FBRyxLQUFLLENBQUM7UUFFSCxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFTM0MsZUFBVSxHQUFzQixJ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LElBQUksQ0FBQztTQUN2QjtJQUNGLENBQUM7OytHQTNKVyxrQkFBa0I7bUdBQWxCLGtCQUFrQix3WEF1QmIsd0JBQXdCLDBPQzNEMUMseWpHQTBGQTsyRkR0RGEsa0JBQWtCO2tCQU45QixTQUFTOytCQUNDLFlBQVksbUJBR0wsdUJBQXVCLENBQUMsTUFBTTs2SkFHdEMsRUFBRTtzQkFBVixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQU1HLGNBQWM7c0JBQXRCLEtBQUs7Z0JBSUksV0FBVztzQkFBcEIsTUFBTTtnQkFFeUIsVUFBVTtzQkFBekMsU0FBUzt1QkFBQyxXQUFXO2dCQUNjLGdCQUFnQjtzQkFBbkQsU0FBUzt1QkFBQyxlQUFlO2dCQUlsQixnQkFBZ0I7c0JBRHZCLGVBQWU7dUJBQUMsd0JBQXdCO2dCQWlFekMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdEFmdGVyQ29udGVudEluaXQsXG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRDaGFuZ2VEZXRlY3RvclJlZixcblx0Q29tcG9uZW50LFxuXHRDb250ZW50Q2hpbGRyZW4sXG5cdEVsZW1lbnRSZWYsXG5cdEV2ZW50RW1pdHRlcixcblx0SG9zdExpc3RlbmVyLFxuXHRJbnB1dCxcblx0T25EZXN0cm95LFxuXHRPdXRwdXQsXG5cdFF1ZXJ5TGlzdCxcblx0Vmlld0NoaWxkLFxuXHRWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheVJlZiB9IGZyb20gXCJAYW5ndWxhci9jZGsvb3ZlcmxheVwiO1xuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL3BvcnRhbFwiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IFBkbVNlbGVjdE9wdGlvbkRpcmVjdGl2ZSB9IGZyb20gXCIuL3NlbGVjdC1vcHRpb24uZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBQZG1PdmVybGF5T3B0aW9ucyB9IGZyb20gXCJwZG0tdWkta2l0L3NyYy9vdmVybGF5XCI7XG5pbXBvcnQgeyBjcmVhdGVGbGV4aWJsZVBvc2l0aW9uU3RyYXRlZ3kgfSBmcm9tIFwicGRtLXVpLWtpdC9zcmMvb3ZlcmxheVwiO1xuaW1wb3J0IHsgWl9JTkRFWCB9IGZyb20gXCJwZG0tdWkta2l0L3NyYy91dGlsc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBkbVNlbGVjdE9wdGlvbiB7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdHZhbHVlOiBzdHJpbmc7XG5cdGRpc2FibGVkPzogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcInBkbS1zZWxlY3RcIixcblx0dGVtcGxhdGVVcmw6IFwiLi9zZWxlY3QuY29tcG9uZW50Lmh0bWxcIixcblx0c3R5bGVzOiBbXCI6aG9zdCB7IGRpc3BsYXk6IGJsb2NrOyB9XCJdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUGRtU2VsZWN0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcblx0QElucHV0KCkgaWQgPSBcIlwiO1xuXHRASW5wdXQoKSB2YWx1ZSA9IFwiXCI7XG5cdEBJbnB1dCgpIG9wdGlvbnM6IFBkbVNlbGVjdE9wdGlvbltdID0gW107XG5cdEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cdEBJbnB1dCgpIGludmFsaWQgPSBmYWxzZTtcblx0QElucHV0KCkgY2xhc3NOYW1lID0gXCJcIjtcblx0QElucHV0KCkgcGxhY2Vob2xkZXIgPSBcIlNlbGVjdCBhbiBvcHRpb25cIjtcblx0LyoqXG5cdCAqIE9wdGlvbmFsIENESyBPdmVybGF5Q29uZmlnIG92ZXJyaWRlcy5cblx0ICogU2hhbGxvdy1tZXJnZWQgb24gdG9wIG9mIGNvbXBvbmVudCBkZWZhdWx0cyDigJQgY29uc3VtZXIgYWx3YXlzIHdpbnMuXG5cdCAqIFByb3ZpZGluZyBgcG9zaXRpb25TdHJhdGVneWAgb3IgYHNjcm9sbFN0cmF0ZWd5YCByZXBsYWNlcyB0aGUgY29tcG9uZW50IGRlZmF1bHQgZW50aXJlbHkuXG5cdCAqL1xuXHRASW5wdXQoKSBvdmVybGF5T3B0aW9ucz86IFBkbU92ZXJsYXlPcHRpb25zO1xuXG5cdG9wZW4gPSBmYWxzZTtcblxuXHRAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuXHRAVmlld0NoaWxkKFwidHJpZ2dlckVsXCIpIHByaXZhdGUgdHJpZ2dlclJlZj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXHRAVmlld0NoaWxkKFwicGFuZWxUZW1wbGF0ZVwiKSBwcml2YXRlIHBhbmVsVGVtcGxhdGVSZWYhOiBhbnk7XG5cblx0LyoqIENvbGxlY3RzIGFueSBgPHBkbS1zZWxlY3Qtb3B0aW9uPmAgY2hpbGRyZW4gcHJvamVjdGVkIGludG8gdGhpcyBjb21wb25lbnQuICovXG5cdEBDb250ZW50Q2hpbGRyZW4oUGRtU2VsZWN0T3B0aW9uRGlyZWN0aXZlKVxuXHRwcml2YXRlIHByb2plY3RlZE9wdGlvbnMhOiBRdWVyeUxpc3Q8UGRtU2VsZWN0T3B0aW9uRGlyZWN0aXZlPjtcblxuXHRwcml2YXRlIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWYgfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSBiYWNrZHJvcFN1YjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheTogT3ZlcmxheSxcblx0XHRwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG5cdCkge31cblxuXHRuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG5cdFx0Ly8gUmUtcmVuZGVyIHdoZW4gcHJvamVjdGVkIG9wdGlvbnMgY2hhbmdlIChlLmcuICpuZ0ZvciBvbiBwZG0tc2VsZWN0LW9wdGlvbikuXG5cdFx0dGhpcy5wcm9qZWN0ZWRPcHRpb25zLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpKTtcblx0fVxuXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdHRoaXMuZGVzdHJveU92ZXJsYXkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBlZmZlY3RpdmUgbGlzdCBvZiBvcHRpb25zLlxuXHQgKiBQcm9qZWN0ZWQgYDxwZG0tc2VsZWN0LW9wdGlvbj5gIGNoaWxkcmVuIHRha2UgcHJpb3JpdHkgb3ZlciB0aGUgYFtvcHRpb25zXWAgaW5wdXQuXG5cdCAqIEZhbGxzIGJhY2sgdG8gYFtvcHRpb25zXWAgd2hlbiBubyBjaGlsZHJlbiBhcmUgcHJvamVjdGVkLlxuXHQgKi9cblx0Z2V0IHJlc29sdmVkT3B0aW9ucygpOiBQZG1TZWxlY3RPcHRpb25bXSB7XG5cdFx0aWYgKHRoaXMucHJvamVjdGVkT3B0aW9ucyAmJiB0aGlzLnByb2plY3RlZE9wdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIHRoaXMucHJvamVjdGVkT3B0aW9ucy5tYXAoKGQpID0+ICh7XG5cdFx0XHRcdGxhYmVsOiBkLnJlc29sdmVkTGFiZWwsXG5cdFx0XHRcdHZhbHVlOiBkLnZhbHVlLFxuXHRcdFx0XHRkaXNhYmxlZDogZC5kaXNhYmxlZCxcblx0XHRcdH0pKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMub3B0aW9ucztcblx0fVxuXG5cdGdldCBzZWxlY3RlZE9wdGlvbigpOiBQZG1TZWxlY3RPcHRpb24gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLnJlc29sdmVkT3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PT0gdGhpcy52YWx1ZSk7XG5cdH1cblxuXHRnZXQgc2VsZWN0ZWRMYWJlbCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLnNlbGVjdGVkT3B0aW9uPy5sYWJlbCB8fCB0aGlzLnBsYWNlaG9sZGVyO1xuXHR9XG5cblx0dG9nZ2xlKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG5cdFx0aWYgKHRoaXMub3Blbikge1xuXHRcdFx0dGhpcy5jbG9zZVBhbmVsKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMub3BlblBhbmVsKCk7XG5cdFx0fVxuXHR9XG5cblx0b25DaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG5cdFx0dGhpcy52YWx1ZUNoYW5nZS5lbWl0KChldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQpLnZhbHVlKTtcblx0fVxuXG5cdHNlbGVjdE9wdGlvbihvcHRpb246IFBkbVNlbGVjdE9wdGlvbik6IHZvaWQge1xuXHRcdGlmIChvcHRpb24uZGlzYWJsZWQpIHJldHVybjtcblx0XHR0aGlzLnZhbHVlQ2hhbmdlLmVtaXQob3B0aW9uLnZhbHVlKTtcblx0XHR0aGlzLmNsb3NlUGFuZWwoKTtcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoXCJkb2N1bWVudDprZXlkb3duLmVzY2FwZVwiKVxuXHRvbkVzY2FwZSgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5vcGVuKSB7XG5cdFx0XHR0aGlzLmNsb3NlUGFuZWwoKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIG9wZW5QYW5lbCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5vdmVybGF5UmVmKSByZXR1cm47XG5cblx0XHRjb25zdCB0cmlnZ2VyRWwgPSB0aGlzLnRyaWdnZXJSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0aWYgKCF0cmlnZ2VyRWwpIHJldHVybjtcblxuXHRcdHRoaXMub3BlbiA9IHRydWU7XG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cblx0XHRjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gY3JlYXRlRmxleGlibGVQb3NpdGlvblN0cmF0ZWd5KFxuXHRcdFx0dGhpcy5vdmVybGF5LFxuXHRcdFx0dHJpZ2dlckVsLFxuXHRcdFx0NCxcblx0XHQpO1xuXG5cdFx0dGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XG5cdFx0XHQvLyBDUsONVElDTzogei1bNzBdIHBhcmEgYXBhcmVjZXIgU09CUkUgbW9kYWxzICh6LVs2MF0pXG5cdFx0XHQvLyBwYW5lbENsYXNzIHNlIGFwbGljYSBhbCBjZGstb3ZlcmxheS1wYW5lIHdyYXBwZXJcblx0XHRcdHBhbmVsQ2xhc3M6IFtaX0lOREVYLnBvcG92ZXJdLFxuXHRcdFx0cG9zaXRpb25TdHJhdGVneSxcblx0XHRcdHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCksXG5cdFx0XHR3aWR0aDogdHJpZ2dlckVsLm9mZnNldFdpZHRoLFxuXHRcdFx0Ly8gQ29uc3VtZXIgb3ZlcnJpZGVzIGFyZSBzcHJlYWQgbGFzdCDigJQgdGhleSB3aW4gb3ZlciBldmVyeSBkZWZhdWx0IGFib3ZlLlxuXHRcdFx0Li4udGhpcy5vdmVybGF5T3B0aW9ucyxcblx0XHR9KTtcblxuXHRcdGNvbnN0IHBvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbChcblx0XHRcdHRoaXMucGFuZWxUZW1wbGF0ZVJlZixcblx0XHRcdHRoaXMudmlld0NvbnRhaW5lclJlZixcblx0XHQpO1xuXHRcdHRoaXMub3ZlcmxheVJlZi5hdHRhY2gocG9ydGFsKTtcblxuXHRcdHRoaXMuYmFja2Ryb3BTdWIgPSB0aGlzLm92ZXJsYXlSZWZcblx0XHRcdC5vdXRzaWRlUG9pbnRlckV2ZW50cygpXG5cdFx0XHQuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuXHRcdFx0XHRjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgTm9kZTtcblx0XHRcdFx0aWYgKCF0cmlnZ2VyRWwuY29udGFpbnModGFyZ2V0KSkge1xuXHRcdFx0XHRcdHRoaXMuY2xvc2VQYW5lbCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0cHJpdmF0ZSBjbG9zZVBhbmVsKCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5vdmVybGF5UmVmKSByZXR1cm47XG5cblx0XHR0aGlzLm9wZW4gPSBmYWxzZTtcblx0XHR0aGlzLmRlc3Ryb3lPdmVybGF5KCk7XG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdH1cblxuXHRwcml2YXRlIGRlc3Ryb3lPdmVybGF5KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmJhY2tkcm9wU3ViKSB7XG5cdFx0XHR0aGlzLmJhY2tkcm9wU3ViLnVuc3Vic2NyaWJlKCk7XG5cdFx0XHR0aGlzLmJhY2tkcm9wU3ViID0gbnVsbDtcblx0XHR9XG5cdFx0aWYgKHRoaXMub3ZlcmxheVJlZikge1xuXHRcdFx0dGhpcy5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcblx0XHRcdHRoaXMub3ZlcmxheVJlZiA9IG51bGw7XG5cdFx0fVxuXHR9XG59XG4iLCI8ZGl2IFtuZ0NsYXNzXT1cIlsncmVsYXRpdmUnLCBjbGFzc05hbWUgfHwgJ3ctZnVsbCddXCI+XG4gIDxidXR0b25cbiAgICAjdHJpZ2dlckVsXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgW2lkXT1cImlkXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJpbnZhbGlkXCJcbiAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm9wZW5cIlxuICAgIFthdHRyLmRhdGEtc3RhdGVdPVwib3BlbiA/ICdvcGVuJyA6ICdjbG9zZWQnXCJcbiAgICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG4gICAgKGNsaWNrKT1cInRvZ2dsZSgpXCJcbiAgICBbbmdDbGFzc109XCJbXG4gICAgICAnYm9yZGVyLWlucHV0IGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgYXJpYS1pbnZhbGlkOnJpbmctMiBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZSBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlIGZsZXggaC05IHctZnVsbCBhcHBlYXJhbmNlLW5vbmUgYm94LWJvcmRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1zb2xpZCBiZy1iYWNrZ3JvdW5kIHB4LTMgcHktMiB0ZXh0LXNtIHNoYWRvdy1zbSBvdXRsaW5lLW5vbmUgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAnLFxuICAgIF1cIlxuICA+XG4gICAgPHNwYW5cbiAgICAgIFtuZ0NsYXNzXT1cIltcbiAgICAgICAgJ21pbi13LTAgZmxleC0xIHRydW5jYXRlIHRleHQtbGVmdCBsZWFkaW5nLTUnLFxuICAgICAgICBzZWxlY3RlZE9wdGlvblxuICAgICAgICAgID8gJ2ZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZCdcbiAgICAgICAgICA6ICdmb250LW5vcm1hbCB0ZXh0LW11dGVkLWZvcmVncm91bmQnLFxuICAgICAgXVwiXG4gICAgPlxuICAgICAge3sgc2VsZWN0ZWRMYWJlbCB9fVxuICAgIDwvc3Bhbj5cbiAgICA8cGRtLWljb25cbiAgICAgIG5hbWU9XCJjaGV2cm9uLWRvd25cIlxuICAgICAgW3NpemVdPVwiMTZcIlxuICAgICAgY2xhc3NOYW1lPVwic2hyaW5rLTAgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCJcbiAgICA+PC9wZG0taWNvbj5cbiAgPC9idXR0b24+XG5cbiAgPCEtLSBIaWRkZW4gbmF0aXZlIHNlbGVjdCBrZXB0IGZvciBzY3JlZW4tcmVhZGVyIC8gZm9ybSBmYWxsYmFjayAtLT5cbiAgPHNlbGVjdFxuICAgIGNsYXNzPVwic3Itb25seVwiXG4gICAgdGFiaW5kZXg9XCItMVwiXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgIChjaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiXG4gID5cbiAgICA8b3B0aW9uXG4gICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHJlc29sdmVkT3B0aW9uc1wiXG4gICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgIFtkaXNhYmxlZF09XCJvcHRpb24uZGlzYWJsZWRcIlxuICAgID5cbiAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxuICAgIDwvb3B0aW9uPlxuICA8L3NlbGVjdD5cblxuICA8IS0tIFNsb3QgZm9yIGNvbnRlbnQtcHJvamVjdGVkIHBkbS1zZWxlY3Qtb3B0aW9uIGVsZW1lbnRzIChoaWRkZW4gZnJvbSBsYXlvdXQpIC0tPlxuICA8c3BhbiBjbGFzcz1cImhpZGRlblwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInBkbS1zZWxlY3Qtb3B0aW9uXCI+PC9uZy1jb250ZW50PlxuICA8L3NwYW4+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNwYW5lbFRlbXBsYXRlPlxuICA8ZGl2XG4gICAgcm9sZT1cImxpc3Rib3hcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJpZCB8fCBudWxsXCJcbiAgICBjbGFzcz1cInctZnVsbCBvdmVyZmxvdy15LWF1dG8gcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXNvbGlkIGJvcmRlci1ib3JkZXIgYmctcG9wb3ZlciBwLTEgdGV4dC1wb3BvdmVyLWZvcmVncm91bmQgc2hhZG93LW1kIG1heC1oLTk2XCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcmVzb2x2ZWRPcHRpb25zXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cIm9wdGlvbi52YWx1ZSA9PT0gdmFsdWVcIlxuICAgICAgW2Rpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZFwiXG4gICAgICAoY2xpY2spPVwic2VsZWN0T3B0aW9uKG9wdGlvbilcIlxuICAgICAgW25nQ2xhc3NdPVwiW1xuICAgICAgICAnZmxleCB3LWZ1bGwgYXBwZWFyYW5jZS1ub25lIGJveC1ib3JkZXIgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiByb3VuZGVkLXNtIGJvcmRlci0wIGJnLXRyYW5zcGFyZW50IHB4LTIgcHktMS41IHRleHQtbGVmdCB0ZXh0LXNtIG91dGxpbmUtbm9uZSB0cmFuc2l0aW9uLWNvbG9ycycsXG4gICAgICAgIG9wdGlvbi5kaXNhYmxlZFxuICAgICAgICAgID8gJ2N1cnNvci1ub3QtYWxsb3dlZCBvcGFjaXR5LTUwJ1xuICAgICAgICAgIDogJ2hvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6YmctYWNjZW50IGZvY3VzLXZpc2libGU6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCcsXG4gICAgICAgIG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUgPyAndGV4dC1mb3JlZ3JvdW5kJyA6ICcnLFxuICAgICAgXVwiXG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtaW4tdy0wIGZsZXgtMSB0cnVuY2F0ZSBsZWFkaW5nLTVcIj57eyBvcHRpb24ubGFiZWwgfX08L3NwYW4+XG4gICAgICA8c3BhblxuICAgICAgICAqbmdJZj1cIm9wdGlvbi52YWx1ZSA9PT0gdmFsdWVcIlxuICAgICAgICBjbGFzcz1cIm1sLTIgZmxleCBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmRcIlxuICAgICAgPlxuICAgICAgICA8cGRtLWljb25cbiAgICAgICAgICBuYW1lPVwiY2hlY2tcIlxuICAgICAgICAgIFtzaXplXT1cIjE2XCJcbiAgICAgICAgICBjbGFzc05hbWU9XCJzaHJpbmstMCB0ZXh0LWN1cnJlbnRcIlxuICAgICAgICA+PC9wZG0taWNvbj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
216
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTix1QkFBdUIsRUFFdkIsU0FBUyxFQUNULGVBQWUsRUFHZixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBRU4sU0FBUyxHQUVULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVyRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7O0FBYy9DLE1BQU0sT0FBTyxrQkFBa0I7SUEyQzlCLFlBQ2tCLEdBQXNCLEVBQ3RCLE9BQWdCLEVBQ2hCLGdCQUFrQztRQUZsQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUE3QzNDLE9BQUUsR0FBRyxFQUFFLENBQUM7UUFDUixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBU1gsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixnQkFBVyxHQUFHLGtCQUFrQixDQUFDO1FBUTFDLFNBQUksR0FBRyxLQUFLLENBQUM7UUFFSCxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFTM0MsZUFBVSxHQUFzQixJQUFJLENBQUM7UUFDckMsZ0JBQVcsR0FBd0Is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QUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFRixPQUFPO3NCQURWLEtBQUs7Z0JBUUcsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQU1HLGNBQWM7c0JBQXRCLEtBQUs7Z0JBSUksV0FBVztzQkFBcEIsTUFBTTtnQkFFeUIsVUFBVTtzQkFBekMsU0FBUzt1QkFBQyxXQUFXO2dCQUNjLGdCQUFnQjtzQkFBbkQsU0FBUzt1QkFBQyxlQUFlO2dCQUlsQixnQkFBZ0I7c0JBRHZCLGVBQWU7dUJBQUMsd0JBQXdCO2dCQW9GekMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdEFmdGVyQ29udGVudEluaXQsXG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRDaGFuZ2VEZXRlY3RvclJlZixcblx0Q29tcG9uZW50LFxuXHRDb250ZW50Q2hpbGRyZW4sXG5cdERvQ2hlY2ssXG5cdEVsZW1lbnRSZWYsXG5cdEV2ZW50RW1pdHRlcixcblx0SG9zdExpc3RlbmVyLFxuXHRJbnB1dCxcblx0T25EZXN0cm95LFxuXHRPdXRwdXQsXG5cdFF1ZXJ5TGlzdCxcblx0Vmlld0NoaWxkLFxuXHRWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheVJlZiB9IGZyb20gXCJAYW5ndWxhci9jZGsvb3ZlcmxheVwiO1xuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL3BvcnRhbFwiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IFBkbVNlbGVjdE9wdGlvbkRpcmVjdGl2ZSB9IGZyb20gXCIuL3NlbGVjdC1vcHRpb24uZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBQZG1PdmVybGF5T3B0aW9ucyB9IGZyb20gXCJwZG0tdWkta2l0L3NyYy9vdmVybGF5XCI7XG5pbXBvcnQgeyBjcmVhdGVGbGV4aWJsZVBvc2l0aW9uU3RyYXRlZ3kgfSBmcm9tIFwicGRtLXVpLWtpdC9zcmMvb3ZlcmxheVwiO1xuaW1wb3J0IHsgWl9JTkRFWCB9IGZyb20gXCJwZG0tdWkta2l0L3NyYy91dGlsc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBkbVNlbGVjdE9wdGlvbiB7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdHZhbHVlOiBzdHJpbmc7XG5cdGRpc2FibGVkPzogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcInBkbS1zZWxlY3RcIixcblx0dGVtcGxhdGVVcmw6IFwiLi9zZWxlY3QuY29tcG9uZW50Lmh0bWxcIixcblx0c3R5bGVzOiBbXCI6aG9zdCB7IGRpc3BsYXk6IGJsb2NrOyB9XCJdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUGRtU2VsZWN0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgRG9DaGVjaywgT25EZXN0cm95IHtcblx0QElucHV0KCkgaWQgPSBcIlwiO1xuXHRASW5wdXQoKSB2YWx1ZSA9IFwiXCI7XG5cdEBJbnB1dCgpXG5cdHNldCBvcHRpb25zKHZhbHVlOiBQZG1TZWxlY3RPcHRpb25bXSB8IG51bGwgfCB1bmRlZmluZWQpIHtcblx0XHR0aGlzLmlucHV0T3B0aW9ucyA9IHZhbHVlID8/IFtdO1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cdGdldCBvcHRpb25zKCk6IFBkbVNlbGVjdE9wdGlvbltdIHtcblx0XHRyZXR1cm4gdGhpcy5pbnB1dE9wdGlvbnM7XG5cdH1cblx0QElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblx0QElucHV0KCkgaW52YWxpZCA9IGZhbHNlO1xuXHRASW5wdXQoKSBjbGFzc05hbWUgPSBcIlwiO1xuXHRASW5wdXQoKSBwbGFjZWhvbGRlciA9IFwiU2VsZWN0IGFuIG9wdGlvblwiO1xuXHQvKipcblx0ICogT3B0aW9uYWwgQ0RLIE92ZXJsYXlDb25maWcgb3ZlcnJpZGVzLlxuXHQgKiBTaGFsbG93LW1lcmdlZCBvbiB0b3Agb2YgY29tcG9uZW50IGRlZmF1bHRzIOKAlCBjb25zdW1lciBhbHdheXMgd2lucy5cblx0ICogUHJvdmlkaW5nIGBwb3NpdGlvblN0cmF0ZWd5YCBvciBgc2Nyb2xsU3RyYXRlZ3lgIHJlcGxhY2VzIHRoZSBjb21wb25lbnQgZGVmYXVsdCBlbnRpcmVseS5cblx0ICovXG5cdEBJbnB1dCgpIG92ZXJsYXlPcHRpb25zPzogUGRtT3ZlcmxheU9wdGlvbnM7XG5cblx0b3BlbiA9IGZhbHNlO1xuXG5cdEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG5cdEBWaWV3Q2hpbGQoXCJ0cmlnZ2VyRWxcIikgcHJpdmF0ZSB0cmlnZ2VyUmVmPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cdEBWaWV3Q2hpbGQoXCJwYW5lbFRlbXBsYXRlXCIpIHByaXZhdGUgcGFuZWxUZW1wbGF0ZVJlZiE6IGFueTtcblxuXHQvKiogQ29sbGVjdHMgYW55IGA8cGRtLXNlbGVjdC1vcHRpb24+YCBjaGlsZHJlbiBwcm9qZWN0ZWQgaW50byB0aGlzIGNvbXBvbmVudC4gKi9cblx0QENvbnRlbnRDaGlsZHJlbihQZG1TZWxlY3RPcHRpb25EaXJlY3RpdmUpXG5cdHByaXZhdGUgcHJvamVjdGVkT3B0aW9ucyE6IFF1ZXJ5TGlzdDxQZG1TZWxlY3RPcHRpb25EaXJlY3RpdmU+O1xuXG5cdHByaXZhdGUgb3ZlcmxheVJlZjogT3ZlcmxheVJlZiB8IG51bGwgPSBudWxsO1xuXHRwcml2YXRlIGJhY2tkcm9wU3ViOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSBwcm9qZWN0ZWRPcHRpb25zU3ViOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSBpbnB1dE9wdGlvbnM6IFBkbVNlbGVjdE9wdGlvbltdID0gW107XG5cdHByaXZhdGUgcmVhZG9ubHkgcHJvamVjdGVkT3B0aW9uQ2FjaGUgPSBuZXcgV2Vha01hcDxcblx0XHRQZG1TZWxlY3RPcHRpb25EaXJlY3RpdmUsXG5cdFx0UGRtU2VsZWN0T3B0aW9uXG5cdD4oKTtcblx0cHJpdmF0ZSByZWFkb25seSBjYWNoZWRQcm9qZWN0ZWRPcHRpb25zOiBQZG1TZWxlY3RPcHRpb25bXSA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcblx0XHRwcml2YXRlIHJlYWRvbmx5IG92ZXJsYXk6IE92ZXJsYXksXG5cdFx0cHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuXHQpIHt9XG5cblx0bmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuc3luY1Byb2plY3RlZE9wdGlvbnMoKTtcblx0XHQvLyBSZS1yZW5kZXIgd2hlbiBwcm9qZWN0ZWQgb3B0aW9ucyBjaGFuZ2UgKGUuZy4gKm5nRm9yIG9uIHBkbS1zZWxlY3Qtb3B0aW9uKS5cblx0XHR0aGlzLnByb2plY3RlZE9wdGlvbnNTdWIgPSB0aGlzLnByb2plY3RlZE9wdGlvbnMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5zeW5jUHJvamVjdGVkT3B0aW9ucygpO1xuXHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0fSk7XG5cdH1cblxuXHRuZ0RvQ2hlY2soKTogdm9pZCB7XG5cdFx0dGhpcy5zeW5jUHJvamVjdGVkT3B0aW9ucygpO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMucHJvamVjdGVkT3B0aW9uc1N1Yikge1xuXHRcdFx0dGhpcy5wcm9qZWN0ZWRPcHRpb25zU3ViLnVuc3Vic2NyaWJlKCk7XG5cdFx0XHR0aGlzLnByb2plY3RlZE9wdGlvbnNTdWIgPSBudWxsO1xuXHRcdH1cblx0XHR0aGlzLmRlc3Ryb3lPdmVybGF5KCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZWZmZWN0aXZlIGxpc3Qgb2Ygb3B0aW9ucy5cblx0ICogUHJvamVjdGVkIGA8cGRtLXNlbGVjdC1vcHRpb24+YCBjaGlsZHJlbiB0YWtlIHByaW9yaXR5IG92ZXIgdGhlIGBbb3B0aW9uc11gIGlucHV0LlxuXHQgKiBGYWxscyBiYWNrIHRvIGBbb3B0aW9uc11gIHdoZW4gbm8gY2hpbGRyZW4gYXJlIHByb2plY3RlZC5cblx0ICovXG5cdGdldCByZXNvbHZlZE9wdGlvbnMoKTogUGRtU2VsZWN0T3B0aW9uW10ge1xuXHRcdGlmICh0aGlzLnByb2plY3RlZE9wdGlvbnMgJiYgdGhpcy5wcm9qZWN0ZWRPcHRpb25zLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiB0aGlzLmNhY2hlZFByb2plY3RlZE9wdGlvbnM7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmlucHV0T3B0aW9ucztcblx0fVxuXG5cdGdldCBzZWxlY3RlZE9wdGlvbigpOiBQZG1TZWxlY3RPcHRpb24gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLnJlc29sdmVkT3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PT0gdGhpcy52YWx1ZSk7XG5cdH1cblxuXHRnZXQgc2VsZWN0ZWRMYWJlbCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLnNlbGVjdGVkT3B0aW9uPy5sYWJlbCB8fCB0aGlzLnBsYWNlaG9sZGVyO1xuXHR9XG5cblx0dG9nZ2xlKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG5cdFx0aWYgKHRoaXMub3Blbikge1xuXHRcdFx0dGhpcy5jbG9zZVBhbmVsKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMub3BlblBhbmVsKCk7XG5cdFx0fVxuXHR9XG5cblx0b25DaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG5cdFx0dGhpcy52YWx1ZUNoYW5nZS5lbWl0KChldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQpLnZhbHVlKTtcblx0fVxuXG5cdHNlbGVjdE9wdGlvbihvcHRpb246IFBkbVNlbGVjdE9wdGlvbik6IHZvaWQge1xuXHRcdGlmIChvcHRpb24uZGlzYWJsZWQpIHJldHVybjtcblx0XHR0aGlzLnZhbHVlQ2hhbmdlLmVtaXQob3B0aW9uLnZhbHVlKTtcblx0XHR0aGlzLmNsb3NlUGFuZWwoKTtcblx0fVxuXG5cdHRyYWNrQnlPcHRpb25WYWx1ZShpbmRleDogbnVtYmVyLCBvcHRpb246IFBkbVNlbGVjdE9wdGlvbik6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMub3B0aW9uS2V5KG9wdGlvbiwgaW5kZXgpO1xuXHR9XG5cblx0QEhvc3RMaXN0ZW5lcihcImRvY3VtZW50OmtleWRvd24uZXNjYXBlXCIpXG5cdG9uRXNjYXBlKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLm9wZW4pIHtcblx0XHRcdHRoaXMuY2xvc2VQYW5lbCgpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgc3luY1Byb2plY3RlZE9wdGlvbnMoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLnByb2plY3RlZE9wdGlvbnMgfHwgdGhpcy5wcm9qZWN0ZWRPcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0aWYgKHRoaXMuY2FjaGVkUHJvamVjdGVkT3B0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHRoaXMuY2FjaGVkUHJvamVjdGVkT3B0aW9ucy5sZW5ndGggPSAwO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCBpbmRleCA9IDA7XG5cdFx0dGhpcy5wcm9qZWN0ZWRPcHRpb25zLmZvckVhY2goKGRpcmVjdGl2ZSkgPT4ge1xuXHRcdFx0bGV0IG9wdGlvbiA9IHRoaXMucHJvamVjdGVkT3B0aW9uQ2FjaGUuZ2V0KGRpcmVjdGl2ZSk7XG5cdFx0XHRpZiAoIW9wdGlvbikge1xuXHRcdFx0XHRvcHRpb24gPSB7XG5cdFx0XHRcdFx0bGFiZWw6IGRpcmVjdGl2ZS5yZXNvbHZlZExhYmVsLFxuXHRcdFx0XHRcdHZhbHVlOiBkaXJlY3RpdmUudmFsdWUsXG5cdFx0XHRcdFx0ZGlzYWJsZWQ6IGRpcmVjdGl2ZS5kaXNhYmxlZCxcblx0XHRcdFx0fTtcblx0XHRcdFx0dGhpcy5wcm9qZWN0ZWRPcHRpb25DYWNoZS5zZXQoZGlyZWN0aXZlLCBvcHRpb24pO1xuXHRcdFx0fVxuXG5cdFx0XHRvcHRpb24ubGFiZWwgPSBkaXJlY3RpdmUucmVzb2x2ZWRMYWJlbDtcblx0XHRcdG9wdGlvbi52YWx1ZSA9IGRpcmVjdGl2ZS52YWx1ZTtcblx0XHRcdG9wdGlvbi5kaXNhYmxlZCA9IGRpcmVjdGl2ZS5kaXNhYmxlZDtcblx0XHRcdHRoaXMuY2FjaGVkUHJvamVjdGVkT3B0aW9uc1tpbmRleF0gPSBvcHRpb247XG5cdFx0XHRpbmRleCArPSAxO1xuXHRcdH0pO1xuXG5cdFx0aWYgKHRoaXMuY2FjaGVkUHJvamVjdGVkT3B0aW9ucy5sZW5ndGggIT09IGluZGV4KSB7XG5cdFx0XHR0aGlzLmNhY2hlZFByb2plY3RlZE9wdGlvbnMubGVuZ3RoID0gaW5kZXg7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBvcHRpb25LZXkob3B0aW9uOiBQZG1TZWxlY3RPcHRpb24gfCBudWxsIHwgdW5kZWZpbmVkLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcblx0XHRjb25zdCB2YWx1ZSA9IG9wdGlvbj8udmFsdWU7XG5cdFx0cmV0dXJuIHZhbHVlID09IG51bGwgPyBgaW5kZXg6JHtpbmRleH1gIDogYHZhbHVlOiR7U3RyaW5nKHZhbHVlKX1gO1xuXHR9XG5cblx0cHJpdmF0ZSBvcGVuUGFuZWwoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMub3ZlcmxheVJlZikgcmV0dXJuO1xuXG5cdFx0Y29uc3QgdHJpZ2dlckVsID0gdGhpcy50cmlnZ2VyUmVmPy5uYXRpdmVFbGVtZW50O1xuXHRcdGlmICghdHJpZ2dlckVsKSByZXR1cm47XG5cblx0XHR0aGlzLm9wZW4gPSB0cnVlO1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG5cdFx0Y29uc3QgcG9zaXRpb25TdHJhdGVneSA9IGNyZWF0ZUZsZXhpYmxlUG9zaXRpb25TdHJhdGVneShcblx0XHRcdHRoaXMub3ZlcmxheSxcblx0XHRcdHRyaWdnZXJFbCxcblx0XHRcdDQsXG5cdFx0KTtcblxuXHRcdHRoaXMub3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoe1xuXHRcdFx0Ly8gQ1LDjVRJQ086IHotWzcwXSBwYXJhIGFwYXJlY2VyIFNPQlJFIG1vZGFscyAoei1bNjBdKVxuXHRcdFx0Ly8gcGFuZWxDbGFzcyBzZSBhcGxpY2EgYWwgY2RrLW92ZXJsYXktcGFuZSB3cmFwcGVyXG5cdFx0XHRwYW5lbENsYXNzOiBbWl9JTkRFWC5wb3BvdmVyXSxcblx0XHRcdHBvc2l0aW9uU3RyYXRlZ3ksXG5cdFx0XHRzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpLFxuXHRcdFx0d2lkdGg6IHRyaWdnZXJFbC5vZmZzZXRXaWR0aCxcblx0XHRcdC8vIENvbnN1bWVyIG92ZXJyaWRlcyBhcmUgc3ByZWFkIGxhc3Qg4oCUIHRoZXkgd2luIG92ZXIgZXZlcnkgZGVmYXVsdCBhYm92ZS5cblx0XHRcdC4uLnRoaXMub3ZlcmxheU9wdGlvbnMsXG5cdFx0fSk7XG5cblx0XHRjb25zdCBwb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwoXG5cdFx0XHR0aGlzLnBhbmVsVGVtcGxhdGVSZWYsXG5cdFx0XHR0aGlzLnZpZXdDb250YWluZXJSZWYsXG5cdFx0KTtcblx0XHR0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHBvcnRhbCk7XG5cblx0XHR0aGlzLmJhY2tkcm9wU3ViID0gdGhpcy5vdmVybGF5UmVmXG5cdFx0XHQub3V0c2lkZVBvaW50ZXJFdmVudHMoKVxuXHRcdFx0LnN1YnNjcmliZSgoZXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIE5vZGU7XG5cdFx0XHRcdGlmICghdHJpZ2dlckVsLmNvbnRhaW5zKHRhcmdldCkpIHtcblx0XHRcdFx0XHR0aGlzLmNsb3NlUGFuZWwoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdHByaXZhdGUgY2xvc2VQYW5lbCgpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMub3ZlcmxheVJlZikgcmV0dXJuO1xuXG5cdFx0dGhpcy5vcGVuID0gZmFsc2U7XG5cdFx0dGhpcy5kZXN0cm95T3ZlcmxheSgpO1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0cHJpdmF0ZSBkZXN0cm95T3ZlcmxheSgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5iYWNrZHJvcFN1Yikge1xuXHRcdFx0dGhpcy5iYWNrZHJvcFN1Yi51bnN1YnNjcmliZSgpO1xuXHRcdFx0dGhpcy5iYWNrZHJvcFN1YiA9IG51bGw7XG5cdFx0fVxuXHRcdGlmICh0aGlzLm92ZXJsYXlSZWYpIHtcblx0XHRcdHRoaXMub3ZlcmxheVJlZi5kaXNwb3NlKCk7XG5cdFx0XHR0aGlzLm92ZXJsYXlSZWYgPSBudWxsO1xuXHRcdH1cblx0fVxufVxuIiwiPGRpdiBbbmdDbGFzc109XCJbJ3JlbGF0aXZlJywgY2xhc3NOYW1lIHx8ICd3LWZ1bGwnXVwiPlxuICA8YnV0dG9uXG4gICAgI3RyaWdnZXJFbFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIFtpZF09XCJpZFwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiaW52YWxpZFwiXG4gICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJvcGVuXCJcbiAgICBbYXR0ci5kYXRhLXN0YXRlXT1cIm9wZW4gPyAnb3BlbicgOiAnY2xvc2VkJ1wiXG4gICAgYXJpYS1oYXNwb3B1cD1cImxpc3Rib3hcIlxuICAgIChjbGljayk9XCJ0b2dnbGUoKVwiXG4gICAgW25nQ2xhc3NdPVwiW1xuICAgICAgJ2JvcmRlci1pbnB1dCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLTIgYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBmbGV4IGgtOSB3LWZ1bGwgYXBwZWFyYW5jZS1ub25lIGJveC1ib3JkZXIgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItc29saWQgYmctYmFja2dyb3VuZCBweC0zIHB5LTIgdGV4dC1zbSBzaGFkb3ctc20gb3V0bGluZS1ub25lIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwJyxcbiAgICBdXCJcbiAgPlxuICAgIDxzcGFuXG4gICAgICBbbmdDbGFzc109XCJbXG4gICAgICAgICdtaW4tdy0wIGZsZXgtMSB0cnVuY2F0ZSB0ZXh0LWxlZnQgbGVhZGluZy01JyxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25cbiAgICAgICAgICA/ICdmb250LW1lZGl1bSB0ZXh0LWZvcmVncm91bmQnXG4gICAgICAgICAgOiAnZm9udC1ub3JtYWwgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcbiAgICAgIF1cIlxuICAgID5cbiAgICAgIHt7IHNlbGVjdGVkTGFiZWwgfX1cbiAgICA8L3NwYW4+XG4gICAgPHBkbS1pY29uXG4gICAgICBuYW1lPVwiY2hldnJvbi1kb3duXCJcbiAgICAgIFtzaXplXT1cIjE2XCJcbiAgICAgIGNsYXNzTmFtZT1cInNocmluay0wIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiXG4gICAgPjwvcGRtLWljb24+XG4gIDwvYnV0dG9uPlxuXG4gIDwhLS0gSGlkZGVuIG5hdGl2ZSBzZWxlY3Qga2VwdCBmb3Igc2NyZWVuLXJlYWRlciAvIGZvcm0gZmFsbGJhY2sgLS0+XG4gIDxzZWxlY3RcbiAgICBjbGFzcz1cInNyLW9ubHlcIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIlxuICA+XG4gICAgPG9wdGlvblxuICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiByZXNvbHZlZE9wdGlvbnM7IHRyYWNrQnk6IHRyYWNrQnlPcHRpb25WYWx1ZVwiXG4gICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgIFtkaXNhYmxlZF09XCJvcHRpb24uZGlzYWJsZWRcIlxuICAgID5cbiAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxuICAgIDwvb3B0aW9uPlxuICA8L3NlbGVjdD5cblxuICA8IS0tIFNsb3QgZm9yIGNvbnRlbnQtcHJvamVjdGVkIHBkbS1zZWxlY3Qtb3B0aW9uIGVsZW1lbnRzIChoaWRkZW4gZnJvbSBsYXlvdXQpIC0tPlxuICA8c3BhbiBjbGFzcz1cImhpZGRlblwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInBkbS1zZWxlY3Qtb3B0aW9uXCI+PC9uZy1jb250ZW50PlxuICA8L3NwYW4+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNwYW5lbFRlbXBsYXRlPlxuICA8ZGl2XG4gICAgcm9sZT1cImxpc3Rib3hcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJpZCB8fCBudWxsXCJcbiAgICBjbGFzcz1cInctZnVsbCBvdmVyZmxvdy15LWF1dG8gcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXNvbGlkIGJvcmRlci1ib3JkZXIgYmctcG9wb3ZlciBwLTEgdGV4dC1wb3BvdmVyLWZvcmVncm91bmQgc2hhZG93LW1kIG1heC1oLTk2XCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcmVzb2x2ZWRPcHRpb25zOyB0cmFja0J5OiB0cmFja0J5T3B0aW9uVmFsdWVcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwib3B0aW9uLnZhbHVlID09PSB2YWx1ZVwiXG4gICAgICBbZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkXCJcbiAgICAgIChjbGljayk9XCJzZWxlY3RPcHRpb24ob3B0aW9uKVwiXG4gICAgICBbbmdDbGFzc109XCJbXG4gICAgICAgICdmbGV4IHctZnVsbCBhcHBlYXJhbmNlLW5vbmUgYm94LWJvcmRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHJvdW5kZWQtc20gYm9yZGVyLTAgYmctdHJhbnNwYXJlbnQgcHgtMiBweS0xLjUgdGV4dC1sZWZ0IHRleHQtc20gb3V0bGluZS1ub25lIHRyYW5zaXRpb24tY29sb3JzJyxcbiAgICAgICAgb3B0aW9uLmRpc2FibGVkXG4gICAgICAgICAgPyAnY3Vyc29yLW5vdC1hbGxvd2VkIG9wYWNpdHktNTAnXG4gICAgICAgICAgOiAnaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgZm9jdXMtdmlzaWJsZTpiZy1hY2NlbnQgZm9jdXMtdmlzaWJsZTp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJyxcbiAgICAgICAgb3B0aW9uLnZhbHVlID09PSB2YWx1ZSA/ICd0ZXh0LWZvcmVncm91bmQnIDogJycsXG4gICAgICBdXCJcbiAgICA+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1pbi13LTAgZmxleC0xIHRydW5jYXRlIGxlYWRpbmctNVwiPnt7IG9wdGlvbi5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgIDxzcGFuXG4gICAgICAgICpuZ0lmPVwib3B0aW9uLnZhbHVlID09PSB2YWx1ZVwiXG4gICAgICAgIGNsYXNzPVwibWwtMiBmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZFwiXG4gICAgICA+XG4gICAgICAgIDxwZG0taWNvblxuICAgICAgICAgIG5hbWU9XCJjaGVja1wiXG4gICAgICAgICAgW3NpemVdPVwiMTZcIlxuICAgICAgICAgIGNsYXNzTmFtZT1cInNocmluay0wIHRleHQtY3VycmVudFwiXG4gICAgICAgID48L3BkbS1pY29uPlxuICAgICAgPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -17,6 +17,8 @@ class PdmInputComponent {
17
17
  this.invalid = false;
18
18
  this.size = "regular";
19
19
  this.roundness = "default";
20
+ this.icon = "";
21
+ this.iconPosition = "left";
20
22
  this.className = "";
21
23
  this.inputClassName = "";
22
24
  this.label = "";
@@ -45,10 +47,10 @@ class PdmInputComponent {
45
47
  }
46
48
  }
47
49
  PdmInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
48
- PdmInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmInputComponent, selector: "pdm-input", inputs: { id: "id", type: "type", value: "value", placeholder: "placeholder", disabled: "disabled", readonly: "readonly", required: "required", invalid: "invalid", size: "size", roundness: "roundness", className: "className", inputClassName: "inputClassName", label: "label", helperText: "helperText", errorText: "errorText" }, outputs: { valueChange: "valueChange", blurred: "blurred" }, ngImport: i0, template: "<div [ngClass]=\"['grid w-full gap-3', className]\">\n <label\n *ngIf=\"label\"\n [attr.for]=\"id\"\n [ngClass]=\"[\n 'text-sm font-medium leading-none',\n invalid ? 'text-destructive' : 'text-foreground',\n ]\"\n >{{ label }}</label\n >\n <input\n [id]=\"id\"\n [type]=\"type\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n [attr.aria-describedby]=\"descriptionAttrId\"\n [ngClass]=\"[\n 'border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive aria-invalid:placeholder:text-destructive/70 placeholder:text-muted-foreground w-full min-w-0 appearance-none box-border rounded-lg border border-solid bg-transparent px-3 py-1 text-sm shadow-sm transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n size === 'large' ? 'h-10 px-4 text-sm' : '',\n size === 'regular' ? 'h-9 px-3 text-sm' : '',\n size === 'small' ? 'h-8 px-2 text-sm' : '',\n size === 'mini' ? 'h-6 px-1.5 text-xs' : '',\n roundness === 'round' ? 'rounded-full' : 'rounded-lg',\n type === 'file' ? 'text-sm' : 'text-foreground',\n inputClassName,\n ]\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n />\n <p *ngIf=\"!invalid && helperText\" [id]=\"helperAttrId\" class=\"m-0 text-sm text-muted-foreground\">\n {{ helperText }}\n </p>\n <p *ngIf=\"invalid && errorText\" [id]=\"errorAttrId\" class=\"m-0 text-sm text-destructive\">\n {{ errorText }}\n </p>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
50
+ PdmInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmInputComponent, selector: "pdm-input", inputs: { id: "id", type: "type", value: "value", placeholder: "placeholder", disabled: "disabled", readonly: "readonly", required: "required", invalid: "invalid", size: "size", roundness: "roundness", icon: "icon", iconPosition: "iconPosition", className: "className", inputClassName: "inputClassName", label: "label", helperText: "helperText", errorText: "errorText" }, outputs: { valueChange: "valueChange", blurred: "blurred" }, ngImport: i0, template: "<div [ngClass]=\"['grid w-full gap-3', className]\">\n <label\n *ngIf=\"label\"\n [attr.for]=\"id\"\n [ngClass]=\"[\n 'text-sm font-medium leading-none',\n invalid ? 'text-destructive' : 'text-foreground',\n ]\"\n >{{ label }}</label\n >\n <div [ngClass]=\"icon ? 'relative' : ''\">\n <pdm-icon\n *ngIf=\"icon\"\n [name]=\"icon\"\n [size]=\"16\"\n aria-hidden=\"true\"\n [ngClass]=\"[\n 'pointer-events-none absolute top-1/2 -translate-y-1/2 text-muted-foreground',\n iconPosition === 'right' ? 'right-3' : 'left-3',\n ]\"\n ></pdm-icon>\n <input\n [id]=\"id\"\n [type]=\"type\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n [attr.aria-describedby]=\"descriptionAttrId\"\n [ngClass]=\"[\n 'border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive aria-invalid:placeholder:text-destructive/70 placeholder:text-muted-foreground w-full min-w-0 appearance-none box-border rounded-lg border border-solid bg-transparent px-3 py-1 text-sm shadow-sm transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n size === 'large' ? 'h-10 px-4 text-sm' : '',\n size === 'regular' ? 'h-9 px-3 text-sm' : '',\n size === 'small' ? 'h-8 px-2 text-sm' : '',\n size === 'mini' ? 'h-6 px-1.5 text-xs' : '',\n icon && iconPosition === 'left' ? 'pl-9' : '',\n icon && iconPosition === 'right' ? 'pr-9' : '',\n roundness === 'round' ? 'rounded-full' : 'rounded-lg',\n type === 'file' ? 'text-sm' : 'text-foreground',\n inputClassName,\n ]\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n />\n </div>\n <p *ngIf=\"!invalid && helperText\" [id]=\"helperAttrId\" class=\"m-0 text-sm text-muted-foreground\">\n {{ helperText }}\n </p>\n <p *ngIf=\"invalid && errorText\" [id]=\"errorAttrId\" class=\"m-0 text-sm text-destructive\">\n {{ errorText }}\n </p>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.PdmIconComponent, selector: "pdm-icon", inputs: ["name", "library", "assetUrl", "size", "strokeWidth", "className", "ariaLabel", "decorative"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
49
51
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmInputComponent, decorators: [{
50
52
  type: Component,
51
- args: [{ selector: "pdm-input", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [ngClass]=\"['grid w-full gap-3', className]\">\n <label\n *ngIf=\"label\"\n [attr.for]=\"id\"\n [ngClass]=\"[\n 'text-sm font-medium leading-none',\n invalid ? 'text-destructive' : 'text-foreground',\n ]\"\n >{{ label }}</label\n >\n <input\n [id]=\"id\"\n [type]=\"type\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n [attr.aria-describedby]=\"descriptionAttrId\"\n [ngClass]=\"[\n 'border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive aria-invalid:placeholder:text-destructive/70 placeholder:text-muted-foreground w-full min-w-0 appearance-none box-border rounded-lg border border-solid bg-transparent px-3 py-1 text-sm shadow-sm transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n size === 'large' ? 'h-10 px-4 text-sm' : '',\n size === 'regular' ? 'h-9 px-3 text-sm' : '',\n size === 'small' ? 'h-8 px-2 text-sm' : '',\n size === 'mini' ? 'h-6 px-1.5 text-xs' : '',\n roundness === 'round' ? 'rounded-full' : 'rounded-lg',\n type === 'file' ? 'text-sm' : 'text-foreground',\n inputClassName,\n ]\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n />\n <p *ngIf=\"!invalid && helperText\" [id]=\"helperAttrId\" class=\"m-0 text-sm text-muted-foreground\">\n {{ helperText }}\n </p>\n <p *ngIf=\"invalid && errorText\" [id]=\"errorAttrId\" class=\"m-0 text-sm text-destructive\">\n {{ errorText }}\n </p>\n</div>\n", styles: [":host{display:block}\n"] }]
53
+ args: [{ selector: "pdm-input", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [ngClass]=\"['grid w-full gap-3', className]\">\n <label\n *ngIf=\"label\"\n [attr.for]=\"id\"\n [ngClass]=\"[\n 'text-sm font-medium leading-none',\n invalid ? 'text-destructive' : 'text-foreground',\n ]\"\n >{{ label }}</label\n >\n <div [ngClass]=\"icon ? 'relative' : ''\">\n <pdm-icon\n *ngIf=\"icon\"\n [name]=\"icon\"\n [size]=\"16\"\n aria-hidden=\"true\"\n [ngClass]=\"[\n 'pointer-events-none absolute top-1/2 -translate-y-1/2 text-muted-foreground',\n iconPosition === 'right' ? 'right-3' : 'left-3',\n ]\"\n ></pdm-icon>\n <input\n [id]=\"id\"\n [type]=\"type\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n [attr.aria-describedby]=\"descriptionAttrId\"\n [ngClass]=\"[\n 'border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive aria-invalid:placeholder:text-destructive/70 placeholder:text-muted-foreground w-full min-w-0 appearance-none box-border rounded-lg border border-solid bg-transparent px-3 py-1 text-sm shadow-sm transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n size === 'large' ? 'h-10 px-4 text-sm' : '',\n size === 'regular' ? 'h-9 px-3 text-sm' : '',\n size === 'small' ? 'h-8 px-2 text-sm' : '',\n size === 'mini' ? 'h-6 px-1.5 text-xs' : '',\n icon && iconPosition === 'left' ? 'pl-9' : '',\n icon && iconPosition === 'right' ? 'pr-9' : '',\n roundness === 'round' ? 'rounded-full' : 'rounded-lg',\n type === 'file' ? 'text-sm' : 'text-foreground',\n inputClassName,\n ]\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n />\n </div>\n <p *ngIf=\"!invalid && helperText\" [id]=\"helperAttrId\" class=\"m-0 text-sm text-muted-foreground\">\n {{ helperText }}\n </p>\n <p *ngIf=\"invalid && errorText\" [id]=\"errorAttrId\" class=\"m-0 text-sm text-destructive\">\n {{ errorText }}\n </p>\n</div>\n", styles: [":host{display:block}\n"] }]
52
54
  }], ctorParameters: function () { return []; }, propDecorators: { id: [{
53
55
  type: Input
54
56
  }], type: [{
@@ -69,6 +71,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
69
71
  type: Input
70
72
  }], roundness: [{
71
73
  type: Input
74
+ }], icon: [{
75
+ type: Input
76
+ }], iconPosition: [{
77
+ type: Input
72
78
  }], className: [{
73
79
  type: Input
74
80
  }], inputClassName: [{
@@ -1 +1 @@
1
- {"version":3,"file":"pdm-ui-kit-src-input.mjs","sources":["../../../src/input/input.component.ts","../../../src/input/input.component.html","../../../src/input/input-group.component.ts","../../../src/input/input-group.component.html","../../../src/input/input-otp.component.ts","../../../src/input/input-otp.component.html","../../../src/input/input-password.component.ts","../../../src/input/input-password.component.html","../../../src/input/textarea.component.ts","../../../src/input/textarea.component.html","../../../src/input/input.module.ts","../../../src/input/pdm-ui-kit-src-input.ts"],"sourcesContent":["import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tEventEmitter,\n\tInput,\n\tOutput,\n} from \"@angular/core\";\n\nexport type PdmInputSize = \"mini\" | \"small\" | \"regular\" | \"large\";\nexport type PdmInputRoundness = \"default\" | \"round\";\n\n@Component({\n\tselector: \"pdm-input\",\n\ttemplateUrl: \"./input.component.html\",\n\tstyles: [\":host { display: block; }\"],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PdmInputComponent {\n\t@Input() id = \"\";\n\t@Input() type = \"text\";\n\t@Input() value = \"\";\n\t@Input() placeholder = \"\";\n\t@Input() disabled = false;\n\t@Input() readonly = false;\n\t@Input() required = false;\n\t@Input() invalid = false;\n\t@Input() size: PdmInputSize = \"regular\";\n\t@Input() roundness: PdmInputRoundness = \"default\";\n\t@Input() className = \"\";\n\t@Input() inputClassName = \"\";\n\t@Input() label = \"\";\n\t@Input() helperText = \"\";\n\t@Input() errorText = \"\";\n\n\t@Output() valueChange = new EventEmitter<string>();\n\t@Output() blurred = new EventEmitter<FocusEvent>();\n\n\tconstructor() {\n\t\tif (this.required && this.disabled) {\n\t\t\tconsole.warn('PdmInputComponent: required + disabled is invalid — a required field cannot be disabled');\n\t\t}\n\t}\n\n\tonInput(event: Event): void {\n\t\tthis.valueChange.emit((event.target as HTMLInputElement).value);\n\t}\n\n\tonBlur(event: FocusEvent): void {\n\t\tthis.blurred.emit(event);\n\t}\n\n\tget helperAttrId(): string | null {\n\t\treturn this.id ? `${this.id}-helper` : null;\n\t}\n\n\tget errorAttrId(): string | null {\n\t\treturn this.id ? `${this.id}-error` : null;\n\t}\n\n\tget descriptionAttrId(): string | null {\n\t\treturn this.invalid && this.errorText ? this.errorAttrId : this.helperAttrId;\n\t}\n}\n","<div [ngClass]=\"['grid w-full gap-3', className]\">\n <label\n *ngIf=\"label\"\n [attr.for]=\"id\"\n [ngClass]=\"[\n 'text-sm font-medium leading-none',\n invalid ? 'text-destructive' : 'text-foreground',\n ]\"\n >{{ label }}</label\n >\n <input\n [id]=\"id\"\n [type]=\"type\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n [attr.aria-describedby]=\"descriptionAttrId\"\n [ngClass]=\"[\n 'border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive aria-invalid:placeholder:text-destructive/70 placeholder:text-muted-foreground w-full min-w-0 appearance-none box-border rounded-lg border border-solid bg-transparent px-3 py-1 text-sm shadow-sm transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n size === 'large' ? 'h-10 px-4 text-sm' : '',\n size === 'regular' ? 'h-9 px-3 text-sm' : '',\n size === 'small' ? 'h-8 px-2 text-sm' : '',\n size === 'mini' ? 'h-6 px-1.5 text-xs' : '',\n roundness === 'round' ? 'rounded-full' : 'rounded-lg',\n type === 'file' ? 'text-sm' : 'text-foreground',\n inputClassName,\n ]\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n />\n <p *ngIf=\"!invalid && helperText\" [id]=\"helperAttrId\" class=\"m-0 text-sm text-muted-foreground\">\n {{ helperText }}\n </p>\n <p *ngIf=\"invalid && errorText\" [id]=\"errorAttrId\" class=\"m-0 text-sm text-destructive\">\n {{ errorText }}\n </p>\n</div>\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tEventEmitter,\n\tInput,\n\tOutput,\n} from \"@angular/core\";\n\n@Component({\n\tselector: \"pdm-input-group\",\n\ttemplateUrl: \"./input-group.component.html\",\n\tstyles: [\":host { display: block; }\"],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PdmInputGroupComponent {\n\t@Input() id = \"\";\n\t@Input() type = \"text\";\n\t@Input() value = \"\";\n\t@Input() placeholder = \"\";\n\t@Input() disabled = false;\n\t@Input() invalid = false;\n\t@Input() prefixText = \"\";\n\t@Input() suffixText = \"\";\n\t@Input() prefixIcon = \"\";\n\t@Input() suffixIcon = \"\";\n\t@Input() buttonText = \"\";\n\t@Input() className = \"\";\n\n\t@Output() valueChange = new EventEmitter<string>();\n\t@Output() buttonClick = new EventEmitter<MouseEvent>();\n\n\tonInput(event: Event): void {\n\t\tthis.valueChange.emit((event.target as HTMLInputElement).value);\n\t}\n\n\tonButtonClick(event: MouseEvent): void {\n\t\tthis.buttonClick.emit(event);\n\t}\n}\n","<div\n [ngClass]=\"[\n 'flex w-full flex-col items-stretch gap-2 sm:flex-row sm:items-center',\n disabled ? 'opacity-50' : '',\n className,\n ]\"\n>\n <div\n [ngClass]=\"[\n 'flex h-9 min-w-0 flex-1 box-border items-center overflow-hidden rounded-md border border-solid border-input bg-transparent px-3 py-1 text-sm text-foreground shadow-sm transition-colors focus-within:border-ring focus-within:ring-2 focus-within:ring-ring/50',\n invalid ? 'border-destructive focus-within:ring-destructive' : '',\n disabled ? 'cursor-not-allowed' : '',\n ]\"\n >\n <div\n *ngIf=\"prefixText || prefixIcon\"\n class=\"inline-flex h-full shrink-0 items-center gap-2 pr-2 text-sm text-muted-foreground\"\n >\n <pdm-icon *ngIf=\"prefixIcon\" [name]=\"prefixIcon\" [size]=\"16\"></pdm-icon>\n <span *ngIf=\"prefixText\">{{ prefixText }}</span>\n <ng-content select=\"[pdmInputGroupPrefix]\"></ng-content>\n </div>\n\n <input\n [id]=\"id\"\n [type]=\"type\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [attr.aria-invalid]=\"invalid\"\n [ngClass]=\"[\n 'h-full min-w-0 flex-1 appearance-none box-border border-0 bg-transparent p-0 text-sm text-foreground outline-none placeholder:text-muted-foreground aria-invalid:placeholder:text-destructive/70',\n type === 'file'\n ? 'text-sm file:mr-2 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground'\n : '',\n ]\"\n (input)=\"onInput($event)\"\n />\n\n <div\n *ngIf=\"!buttonText && (suffixText || suffixIcon)\"\n class=\"inline-flex h-full shrink-0 items-center gap-2 pl-2 text-sm text-muted-foreground\"\n >\n <pdm-icon *ngIf=\"suffixIcon\" [name]=\"suffixIcon\" [size]=\"16\"></pdm-icon>\n <span *ngIf=\"suffixText\" class=\"font-medium\">{{ suffixText }}</span>\n <ng-content select=\"[pdmInputGroupSuffix]\"></ng-content>\n </div>\n </div>\n\n <button\n *ngIf=\"buttonText\"\n type=\"button\"\n [disabled]=\"disabled\"\n class=\"inline-flex h-9 w-full shrink-0 appearance-none box-border items-center justify-center rounded-md border border-solid border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring/50 disabled:cursor-not-allowed sm:w-auto\"\n (click)=\"onButtonClick($event)\"\n >\n {{ buttonText }}\n </button>\n</div>\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\ttype ElementRef,\n\tEventEmitter,\n\tInput,\n\tOutput,\n\ttype QueryList,\n\tViewChildren,\n} from \"@angular/core\";\n\n@Component({\n\tselector: \"pdm-input-otp\",\n\ttemplateUrl: \"./input-otp.component.html\",\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PdmInputOtpComponent {\n\t@Input() length = 6;\n\t@Input() groupSize = 3;\n\t@Input() disabled = false;\n\t@Input() invalid = false;\n\t@Input() className = \"\";\n\n\t@Output() valueChange = new EventEmitter<string>();\n\t@Output() completed = new EventEmitter<string>();\n\n\t@ViewChildren(\"otpInput\") private readonly inputs?: QueryList<\n\t\tElementRef<HTMLInputElement>\n\t>;\n\n\tvalues: string[] = Array.from({ length: this.length }, () => \"\");\n\n\tngOnChanges(): void {\n\t\tif (this.values.length !== this.length) {\n\t\t\tthis.values = Array.from(\n\t\t\t\t{ length: this.length },\n\t\t\t\t(_, index) => this.values[index] ?? \"\",\n\t\t\t);\n\t\t}\n\t}\n\n\ttrackByIndex(index: number): number {\n\t\treturn index;\n\t}\n\n\tonInput(index: number, event: Event): void {\n\t\tconst input = event.target as HTMLInputElement;\n\t\tconst char = (input.value || \"\").replace(/\\D+/g, \"\").slice(-1);\n\n\t\tthis.values[index] = char;\n\t\tinput.value = char;\n\t\tthis.emit();\n\n\t\tif (char) {\n\t\t\tthis.focusInput(index + 1, true);\n\t\t}\n\t}\n\n\tonKeyDown(index: number, event: KeyboardEvent): void {\n\t\tif (event.key === \"Backspace\" && !this.values[index]) {\n\t\t\tthis.focusInput(index - 1);\n\t\t\treturn;\n\t\t}\n\n\t\tif (event.key === \"ArrowLeft\") {\n\t\t\tevent.preventDefault();\n\t\t\tthis.focusInput(index - 1);\n\t\t\treturn;\n\t\t}\n\n\t\tif (event.key === \"ArrowRight\") {\n\t\t\tevent.preventDefault();\n\t\t\tthis.focusInput(index + 1);\n\t\t}\n\t}\n\n\tonPaste(event: ClipboardEvent): void {\n\t\tevent.preventDefault();\n\n\t\tconst pastedText = (event.clipboardData?.getData(\"text\") ?? \"\")\n\t\t\t.replace(/\\D+/g, \"\")\n\t\t\t.slice(0, this.length);\n\n\t\tif (!pastedText) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.values = Array.from(\n\t\t\t{ length: this.length },\n\t\t\t(_, index) => pastedText[index] ?? \"\",\n\t\t);\n\t\tthis.emit();\n\n\t\tconst nextIndex = Math.min(pastedText.length, this.length - 1);\n\t\tthis.focusInput(nextIndex);\n\t}\n\n\tgetInputClasses(index: number): string {\n\t\tconst classes = [\n\t\t\t\"h-9 w-9 appearance-none box-border border border-solid bg-background text-center text-sm font-normal text-foreground outline-none transition focus:outline-none focus-visible:outline-none\",\n\t\t\t\"shadow-sm\",\n\t\t\t\"focus:border-input focus:ring-1 focus:ring-primary/30\",\n\t\t\t\"disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t];\n\n\t\tif (this.invalid) {\n\t\t\tclasses.push(\n\t\t\t\t\"border-destructive focus:border-destructive focus:ring-destructive\",\n\t\t\t);\n\t\t} else {\n\t\t\tclasses.push(\"border-input\");\n\t\t}\n\n\t\tif (this.isGroupStart(index)) {\n\t\t\tclasses.push(\"rounded-l-md border-l\");\n\t\t} else {\n\t\t\tclasses.push(\"border-l-0\");\n\t\t}\n\n\t\tif (this.isGroupEnd(index)) {\n\t\t\tclasses.push(\"rounded-r-md\");\n\t\t}\n\n\t\treturn classes.join(\" \");\n\t}\n\n\tshouldShowSeparator(index: number): boolean {\n\t\treturn (\n\t\t\tthis.groupSize > 0 &&\n\t\t\t(index + 1) % this.groupSize === 0 &&\n\t\t\tindex < this.length - 1\n\t\t);\n\t}\n\n\tprivate isGroupStart(index: number): boolean {\n\t\treturn this.groupSize <= 0 || index % this.groupSize === 0;\n\t}\n\n\tprivate isGroupEnd(index: number): boolean {\n\t\tif (this.groupSize <= 0) {\n\t\t\treturn index === this.length - 1;\n\t\t}\n\t\treturn (index + 1) % this.groupSize === 0 || index === this.length - 1;\n\t}\n\n\tprivate emit(): void {\n\t\tconst value = this.values.join(\"\");\n\t\tthis.valueChange.emit(value);\n\n\t\tif (value.length === this.length && !this.values.includes(\"\")) {\n\t\t\tthis.completed.emit(value);\n\t\t}\n\t}\n\n\tprivate focusInput(index: number, deferred = false): void {\n\t\tif (deferred) {\n\t\t\trequestAnimationFrame(() => this.focusInput(index, false));\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.inputs || index < 0 || index >= this.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst input = this.inputs.get(index)?.nativeElement;\n\t\tif (input) {\n\t\t\tinput.focus();\n\t\t\tinput.select();\n\t\t}\n\t}\n}\n","<div [ngClass]=\"['inline-flex items-center justify-center', className]\" (paste)=\"onPaste($event)\">\n <ng-container *ngFor=\"let value of values; let index = index; trackBy: trackByIndex\">\n <input\n #otpInput\n [class]=\"getInputClasses(index)\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n inputmode=\"numeric\"\n maxlength=\"1\"\n [attr.name]=\"'otp-digit-' + index\"\n autocomplete=\"off\"\n autocapitalize=\"off\"\n spellcheck=\"false\"\n [attr.aria-invalid]=\"invalid\"\n [attr.aria-label]=\"'OTP digit ' + (index + 1)\"\n (input)=\"onInput(index, $event)\"\n (keydown)=\"onKeyDown(index, $event)\"\n />\n <span\n *ngIf=\"shouldShowSeparator(index)\"\n class=\"mx-2 mt-[-1px] h-px w-6 bg-foreground opacity-80\"\n aria-hidden=\"true\"\n ></span>\n </ng-container>\n</div>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { PdmInputRoundness, PdmInputSize } from './input.component';\n\n@Component({\n selector: 'pdm-input-password',\n templateUrl: './input-password.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PdmInputPasswordComponent {\n @Input() id = '';\n @Input() value = '';\n @Input() placeholder = '';\n @Input() disabled = false;\n @Input() readonly = false;\n @Input() required = false;\n @Input() invalid = false;\n @Input() size: PdmInputSize = 'regular';\n @Input() roundness: PdmInputRoundness = 'default';\n @Input() className = '';\n @Input() inputClassName = '';\n @Input() label = '';\n @Input() helperText = '';\n @Input() errorText = '';\n\n @Output() valueChange = new EventEmitter<string>();\n @Output() blurred = new EventEmitter<FocusEvent>();\n\n showPassword = false;\n\n get inputType(): 'text' | 'password' {\n return this.showPassword ? 'text' : 'password';\n }\n\n onInput(event: Event): void {\n this.valueChange.emit((event.target as HTMLInputElement).value);\n }\n\n onBlur(event: FocusEvent): void {\n this.blurred.emit(event);\n }\n\n toggleVisibility(): void {\n if (this.disabled) {\n return;\n }\n\n this.showPassword = !this.showPassword;\n }\n}\n","<div [ngClass]=\"['grid w-full gap-3', className]\">\n <label\n *ngIf=\"label\"\n [attr.for]=\"id\"\n [ngClass]=\"[\n 'text-sm font-medium leading-none',\n invalid ? 'text-destructive' : 'text-foreground',\n ]\"\n >{{ label }}</label\n >\n <div class=\"relative\">\n <input\n [id]=\"id\"\n [type]=\"inputType\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n [ngClass]=\"[\n 'border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive aria-invalid:placeholder:text-destructive/70 file:text-foreground placeholder:text-muted-foreground w-full min-w-0 appearance-none box-border rounded-lg border border-solid bg-transparent px-3 py-1 pr-10 text-sm shadow-sm transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n size === 'large' ? 'h-10 px-4 text-sm' : '',\n size === 'regular' ? 'h-9 px-3 text-sm' : '',\n size === 'small' ? 'h-8 px-2 text-sm' : '',\n size === 'mini' ? 'h-6 px-1.5 text-xs' : '',\n roundness === 'round' ? 'rounded-full' : 'rounded-lg',\n 'text-foreground',\n inputClassName,\n ]\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n />\n <button\n type=\"button\"\n class=\"absolute right-2 top-1/2 inline-flex h-6 w-6 -translate-y-1/2 appearance-none box-border items-center justify-center rounded border-0 bg-transparent p-0 text-muted-foreground outline-none transition-colors hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-60\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"showPassword ? 'Hide password' : 'Show password'\"\n (click)=\"toggleVisibility()\"\n >\n <svg\n *ngIf=\"!showPassword\"\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"h-4 w-4\"\n >\n <path\n d=\"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\"\n ></path>\n <circle cx=\"12\" cy=\"12\" r=\"3\"></circle>\n </svg>\n <svg\n *ngIf=\"showPassword\"\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"h-4 w-4\"\n >\n <path d=\"M3 3l18 18\"></path>\n <path d=\"M10.58 10.58a2 2 0 1 0 2.83 2.83\"></path>\n <path\n d=\"M9.88 5.09A10.94 10.94 0 0 1 12 4.91c5.05 0 9.27 3.11 10.6 7.09a1 1 0 0 1 0 .64 11.9 11.9 0 0 1-1.84 3.2\"\n ></path>\n <path\n d=\"M6.61 6.61A11.81 11.81 0 0 0 1.4 12a1 1 0 0 0 0 .64 11.83 11.83 0 0 0 8.79 7.54\"\n ></path>\n </svg>\n </button>\n </div>\n <p *ngIf=\"!invalid && helperText\" class=\"m-0 text-sm text-muted-foreground\">\n {{ helperText }}\n </p>\n <p *ngIf=\"invalid && errorText\" class=\"m-0 text-sm text-destructive\">\n {{ errorText }}\n </p>\n</div>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'pdm-textarea',\n templateUrl: './textarea.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PdmTextareaComponent {\n @Input() id = '';\n @Input() value = '';\n @Input() placeholder = '';\n @Input() rows = 4;\n @Input() disabled = false;\n @Input() readonly = false;\n @Input() required = false;\n @Input() invalid = false;\n @Input() className = '';\n @Input() textareaClassName = '';\n @Input() label = '';\n @Input() helperText = '';\n @Input() errorText = '';\n\n @Output() valueChange = new EventEmitter<string>();\n\n onInput(event: Event): void {\n this.valueChange.emit((event.target as HTMLTextAreaElement).value);\n }\n}\n","<div [ngClass]=\"['grid w-full gap-2', className]\">\n <label\n *ngIf=\"label\"\n [attr.for]=\"id\"\n [ngClass]=\"[\n 'text-sm font-medium leading-none',\n invalid ? 'text-destructive' : 'text-foreground',\n ]\"\n >{{ label }}</label\n >\n <textarea\n [id]=\"id\"\n [rows]=\"rows\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n [ngClass]=\"[\n 'border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive aria-invalid:placeholder:text-destructive/70 placeholder:text-muted-foreground flex min-h-20 w-full appearance-none box-border rounded-md border border-solid bg-transparent px-3 py-2 text-sm shadow-sm outline-none disabled:cursor-not-allowed disabled:opacity-50',\n textareaClassName,\n ]\"\n (input)=\"onInput($event)\"\n ></textarea>\n <p *ngIf=\"!invalid && helperText\" class=\"m-0 text-sm text-muted-foreground\">\n {{ helperText }}\n </p>\n <p *ngIf=\"invalid && errorText\" class=\"m-0 text-sm text-destructive\">\n {{ errorText }}\n </p>\n</div>\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { PdmIconModule } from \"pdm-ui-kit/src/icon\";\nimport { PdmInputComponent } from \"./input.component\";\nimport { PdmInputGroupComponent } from \"./input-group.component\";\nimport { PdmInputOtpComponent } from \"./input-otp.component\";\nimport { PdmInputPasswordComponent } from \"./input-password.component\";\nimport { PdmTextareaComponent } from \"./textarea.component\";\n\nconst COMPONENTS = [\n\tPdmInputComponent,\n\tPdmInputGroupComponent,\n\tPdmInputOtpComponent,\n\tPdmInputPasswordComponent,\n\tPdmTextareaComponent,\n];\n\n@NgModule({\n\timports: [CommonModule, PdmIconModule],\n\tdeclarations: COMPONENTS,\n\texports: COMPONENTS,\n})\nexport class PdmInputModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pdm-ui-kit-src-input.mjs","sources":["../../../src/input/input.component.ts","../../../src/input/input.component.html","../../../src/input/input-group.component.ts","../../../src/input/input-group.component.html","../../../src/input/input-otp.component.ts","../../../src/input/input-otp.component.html","../../../src/input/input-password.component.ts","../../../src/input/input-password.component.html","../../../src/input/textarea.component.ts","../../../src/input/textarea.component.html","../../../src/input/input.module.ts","../../../src/input/pdm-ui-kit-src-input.ts"],"sourcesContent":["import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tEventEmitter,\n\tInput,\n\tOutput,\n} from \"@angular/core\";\n\nexport type PdmInputSize = \"mini\" | \"small\" | \"regular\" | \"large\";\nexport type PdmInputRoundness = \"default\" | \"round\";\nexport type PdmInputIconPosition = \"left\" | \"right\";\n\n@Component({\n\tselector: \"pdm-input\",\n\ttemplateUrl: \"./input.component.html\",\n\tstyles: [\":host { display: block; }\"],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PdmInputComponent {\n\t@Input() id = \"\";\n\t@Input() type = \"text\";\n\t@Input() value = \"\";\n\t@Input() placeholder = \"\";\n\t@Input() disabled = false;\n\t@Input() readonly = false;\n\t@Input() required = false;\n\t@Input() invalid = false;\n\t@Input() size: PdmInputSize = \"regular\";\n\t@Input() roundness: PdmInputRoundness = \"default\";\n\t@Input() icon = \"\";\n\t@Input() iconPosition: PdmInputIconPosition = \"left\";\n\t@Input() className = \"\";\n\t@Input() inputClassName = \"\";\n\t@Input() label = \"\";\n\t@Input() helperText = \"\";\n\t@Input() errorText = \"\";\n\n\t@Output() valueChange = new EventEmitter<string>();\n\t@Output() blurred = new EventEmitter<FocusEvent>();\n\n\tconstructor() {\n\t\tif (this.required && this.disabled) {\n\t\t\tconsole.warn('PdmInputComponent: required + disabled is invalid — a required field cannot be disabled');\n\t\t}\n\t}\n\n\tonInput(event: Event): void {\n\t\tthis.valueChange.emit((event.target as HTMLInputElement).value);\n\t}\n\n\tonBlur(event: FocusEvent): void {\n\t\tthis.blurred.emit(event);\n\t}\n\n\tget helperAttrId(): string | null {\n\t\treturn this.id ? `${this.id}-helper` : null;\n\t}\n\n\tget errorAttrId(): string | null {\n\t\treturn this.id ? `${this.id}-error` : null;\n\t}\n\n\tget descriptionAttrId(): string | null {\n\t\treturn this.invalid && this.errorText ? this.errorAttrId : this.helperAttrId;\n\t}\n}\n","<div [ngClass]=\"['grid w-full gap-3', className]\">\n <label\n *ngIf=\"label\"\n [attr.for]=\"id\"\n [ngClass]=\"[\n 'text-sm font-medium leading-none',\n invalid ? 'text-destructive' : 'text-foreground',\n ]\"\n >{{ label }}</label\n >\n <div [ngClass]=\"icon ? 'relative' : ''\">\n <pdm-icon\n *ngIf=\"icon\"\n [name]=\"icon\"\n [size]=\"16\"\n aria-hidden=\"true\"\n [ngClass]=\"[\n 'pointer-events-none absolute top-1/2 -translate-y-1/2 text-muted-foreground',\n iconPosition === 'right' ? 'right-3' : 'left-3',\n ]\"\n ></pdm-icon>\n <input\n [id]=\"id\"\n [type]=\"type\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n [attr.aria-describedby]=\"descriptionAttrId\"\n [ngClass]=\"[\n 'border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive aria-invalid:placeholder:text-destructive/70 placeholder:text-muted-foreground w-full min-w-0 appearance-none box-border rounded-lg border border-solid bg-transparent px-3 py-1 text-sm shadow-sm transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n size === 'large' ? 'h-10 px-4 text-sm' : '',\n size === 'regular' ? 'h-9 px-3 text-sm' : '',\n size === 'small' ? 'h-8 px-2 text-sm' : '',\n size === 'mini' ? 'h-6 px-1.5 text-xs' : '',\n icon && iconPosition === 'left' ? 'pl-9' : '',\n icon && iconPosition === 'right' ? 'pr-9' : '',\n roundness === 'round' ? 'rounded-full' : 'rounded-lg',\n type === 'file' ? 'text-sm' : 'text-foreground',\n inputClassName,\n ]\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n />\n </div>\n <p *ngIf=\"!invalid && helperText\" [id]=\"helperAttrId\" class=\"m-0 text-sm text-muted-foreground\">\n {{ helperText }}\n </p>\n <p *ngIf=\"invalid && errorText\" [id]=\"errorAttrId\" class=\"m-0 text-sm text-destructive\">\n {{ errorText }}\n </p>\n</div>\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tEventEmitter,\n\tInput,\n\tOutput,\n} from \"@angular/core\";\n\n@Component({\n\tselector: \"pdm-input-group\",\n\ttemplateUrl: \"./input-group.component.html\",\n\tstyles: [\":host { display: block; }\"],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PdmInputGroupComponent {\n\t@Input() id = \"\";\n\t@Input() type = \"text\";\n\t@Input() value = \"\";\n\t@Input() placeholder = \"\";\n\t@Input() disabled = false;\n\t@Input() invalid = false;\n\t@Input() prefixText = \"\";\n\t@Input() suffixText = \"\";\n\t@Input() prefixIcon = \"\";\n\t@Input() suffixIcon = \"\";\n\t@Input() buttonText = \"\";\n\t@Input() className = \"\";\n\n\t@Output() valueChange = new EventEmitter<string>();\n\t@Output() buttonClick = new EventEmitter<MouseEvent>();\n\n\tonInput(event: Event): void {\n\t\tthis.valueChange.emit((event.target as HTMLInputElement).value);\n\t}\n\n\tonButtonClick(event: MouseEvent): void {\n\t\tthis.buttonClick.emit(event);\n\t}\n}\n","<div\n [ngClass]=\"[\n 'flex w-full flex-col items-stretch gap-2 sm:flex-row sm:items-center',\n disabled ? 'opacity-50' : '',\n className,\n ]\"\n>\n <div\n [ngClass]=\"[\n 'flex h-9 min-w-0 flex-1 box-border items-center overflow-hidden rounded-md border border-solid border-input bg-transparent px-3 py-1 text-sm text-foreground shadow-sm transition-colors focus-within:border-ring focus-within:ring-2 focus-within:ring-ring/50',\n invalid ? 'border-destructive focus-within:ring-destructive' : '',\n disabled ? 'cursor-not-allowed' : '',\n ]\"\n >\n <div\n *ngIf=\"prefixText || prefixIcon\"\n class=\"inline-flex h-full shrink-0 items-center gap-2 pr-2 text-sm text-muted-foreground\"\n >\n <pdm-icon *ngIf=\"prefixIcon\" [name]=\"prefixIcon\" [size]=\"16\"></pdm-icon>\n <span *ngIf=\"prefixText\">{{ prefixText }}</span>\n <ng-content select=\"[pdmInputGroupPrefix]\"></ng-content>\n </div>\n\n <input\n [id]=\"id\"\n [type]=\"type\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [attr.aria-invalid]=\"invalid\"\n [ngClass]=\"[\n 'h-full min-w-0 flex-1 appearance-none box-border border-0 bg-transparent p-0 text-sm text-foreground outline-none placeholder:text-muted-foreground aria-invalid:placeholder:text-destructive/70',\n type === 'file'\n ? 'text-sm file:mr-2 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground'\n : '',\n ]\"\n (input)=\"onInput($event)\"\n />\n\n <div\n *ngIf=\"!buttonText && (suffixText || suffixIcon)\"\n class=\"inline-flex h-full shrink-0 items-center gap-2 pl-2 text-sm text-muted-foreground\"\n >\n <pdm-icon *ngIf=\"suffixIcon\" [name]=\"suffixIcon\" [size]=\"16\"></pdm-icon>\n <span *ngIf=\"suffixText\" class=\"font-medium\">{{ suffixText }}</span>\n <ng-content select=\"[pdmInputGroupSuffix]\"></ng-content>\n </div>\n </div>\n\n <button\n *ngIf=\"buttonText\"\n type=\"button\"\n [disabled]=\"disabled\"\n class=\"inline-flex h-9 w-full shrink-0 appearance-none box-border items-center justify-center rounded-md border border-solid border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring/50 disabled:cursor-not-allowed sm:w-auto\"\n (click)=\"onButtonClick($event)\"\n >\n {{ buttonText }}\n </button>\n</div>\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\ttype ElementRef,\n\tEventEmitter,\n\tInput,\n\tOutput,\n\ttype QueryList,\n\tViewChildren,\n} from \"@angular/core\";\n\n@Component({\n\tselector: \"pdm-input-otp\",\n\ttemplateUrl: \"./input-otp.component.html\",\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PdmInputOtpComponent {\n\t@Input() length = 6;\n\t@Input() groupSize = 3;\n\t@Input() disabled = false;\n\t@Input() invalid = false;\n\t@Input() className = \"\";\n\n\t@Output() valueChange = new EventEmitter<string>();\n\t@Output() completed = new EventEmitter<string>();\n\n\t@ViewChildren(\"otpInput\") private readonly inputs?: QueryList<\n\t\tElementRef<HTMLInputElement>\n\t>;\n\n\tvalues: string[] = Array.from({ length: this.length }, () => \"\");\n\n\tngOnChanges(): void {\n\t\tif (this.values.length !== this.length) {\n\t\t\tthis.values = Array.from(\n\t\t\t\t{ length: this.length },\n\t\t\t\t(_, index) => this.values[index] ?? \"\",\n\t\t\t);\n\t\t}\n\t}\n\n\ttrackByIndex(index: number): number {\n\t\treturn index;\n\t}\n\n\tonInput(index: number, event: Event): void {\n\t\tconst input = event.target as HTMLInputElement;\n\t\tconst char = (input.value || \"\").replace(/\\D+/g, \"\").slice(-1);\n\n\t\tthis.values[index] = char;\n\t\tinput.value = char;\n\t\tthis.emit();\n\n\t\tif (char) {\n\t\t\tthis.focusInput(index + 1, true);\n\t\t}\n\t}\n\n\tonKeyDown(index: number, event: KeyboardEvent): void {\n\t\tif (event.key === \"Backspace\" && !this.values[index]) {\n\t\t\tthis.focusInput(index - 1);\n\t\t\treturn;\n\t\t}\n\n\t\tif (event.key === \"ArrowLeft\") {\n\t\t\tevent.preventDefault();\n\t\t\tthis.focusInput(index - 1);\n\t\t\treturn;\n\t\t}\n\n\t\tif (event.key === \"ArrowRight\") {\n\t\t\tevent.preventDefault();\n\t\t\tthis.focusInput(index + 1);\n\t\t}\n\t}\n\n\tonPaste(event: ClipboardEvent): void {\n\t\tevent.preventDefault();\n\n\t\tconst pastedText = (event.clipboardData?.getData(\"text\") ?? \"\")\n\t\t\t.replace(/\\D+/g, \"\")\n\t\t\t.slice(0, this.length);\n\n\t\tif (!pastedText) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.values = Array.from(\n\t\t\t{ length: this.length },\n\t\t\t(_, index) => pastedText[index] ?? \"\",\n\t\t);\n\t\tthis.emit();\n\n\t\tconst nextIndex = Math.min(pastedText.length, this.length - 1);\n\t\tthis.focusInput(nextIndex);\n\t}\n\n\tgetInputClasses(index: number): string {\n\t\tconst classes = [\n\t\t\t\"h-9 w-9 appearance-none box-border border border-solid bg-background text-center text-sm font-normal text-foreground outline-none transition focus:outline-none focus-visible:outline-none\",\n\t\t\t\"shadow-sm\",\n\t\t\t\"focus:border-input focus:ring-1 focus:ring-primary/30\",\n\t\t\t\"disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t];\n\n\t\tif (this.invalid) {\n\t\t\tclasses.push(\n\t\t\t\t\"border-destructive focus:border-destructive focus:ring-destructive\",\n\t\t\t);\n\t\t} else {\n\t\t\tclasses.push(\"border-input\");\n\t\t}\n\n\t\tif (this.isGroupStart(index)) {\n\t\t\tclasses.push(\"rounded-l-md border-l\");\n\t\t} else {\n\t\t\tclasses.push(\"border-l-0\");\n\t\t}\n\n\t\tif (this.isGroupEnd(index)) {\n\t\t\tclasses.push(\"rounded-r-md\");\n\t\t}\n\n\t\treturn classes.join(\" \");\n\t}\n\n\tshouldShowSeparator(index: number): boolean {\n\t\treturn (\n\t\t\tthis.groupSize > 0 &&\n\t\t\t(index + 1) % this.groupSize === 0 &&\n\t\t\tindex < this.length - 1\n\t\t);\n\t}\n\n\tprivate isGroupStart(index: number): boolean {\n\t\treturn this.groupSize <= 0 || index % this.groupSize === 0;\n\t}\n\n\tprivate isGroupEnd(index: number): boolean {\n\t\tif (this.groupSize <= 0) {\n\t\t\treturn index === this.length - 1;\n\t\t}\n\t\treturn (index + 1) % this.groupSize === 0 || index === this.length - 1;\n\t}\n\n\tprivate emit(): void {\n\t\tconst value = this.values.join(\"\");\n\t\tthis.valueChange.emit(value);\n\n\t\tif (value.length === this.length && !this.values.includes(\"\")) {\n\t\t\tthis.completed.emit(value);\n\t\t}\n\t}\n\n\tprivate focusInput(index: number, deferred = false): void {\n\t\tif (deferred) {\n\t\t\trequestAnimationFrame(() => this.focusInput(index, false));\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.inputs || index < 0 || index >= this.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst input = this.inputs.get(index)?.nativeElement;\n\t\tif (input) {\n\t\t\tinput.focus();\n\t\t\tinput.select();\n\t\t}\n\t}\n}\n","<div [ngClass]=\"['inline-flex items-center justify-center', className]\" (paste)=\"onPaste($event)\">\n <ng-container *ngFor=\"let value of values; let index = index; trackBy: trackByIndex\">\n <input\n #otpInput\n [class]=\"getInputClasses(index)\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n inputmode=\"numeric\"\n maxlength=\"1\"\n [attr.name]=\"'otp-digit-' + index\"\n autocomplete=\"off\"\n autocapitalize=\"off\"\n spellcheck=\"false\"\n [attr.aria-invalid]=\"invalid\"\n [attr.aria-label]=\"'OTP digit ' + (index + 1)\"\n (input)=\"onInput(index, $event)\"\n (keydown)=\"onKeyDown(index, $event)\"\n />\n <span\n *ngIf=\"shouldShowSeparator(index)\"\n class=\"mx-2 mt-[-1px] h-px w-6 bg-foreground opacity-80\"\n aria-hidden=\"true\"\n ></span>\n </ng-container>\n</div>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { PdmInputRoundness, PdmInputSize } from './input.component';\n\n@Component({\n selector: 'pdm-input-password',\n templateUrl: './input-password.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PdmInputPasswordComponent {\n @Input() id = '';\n @Input() value = '';\n @Input() placeholder = '';\n @Input() disabled = false;\n @Input() readonly = false;\n @Input() required = false;\n @Input() invalid = false;\n @Input() size: PdmInputSize = 'regular';\n @Input() roundness: PdmInputRoundness = 'default';\n @Input() className = '';\n @Input() inputClassName = '';\n @Input() label = '';\n @Input() helperText = '';\n @Input() errorText = '';\n\n @Output() valueChange = new EventEmitter<string>();\n @Output() blurred = new EventEmitter<FocusEvent>();\n\n showPassword = false;\n\n get inputType(): 'text' | 'password' {\n return this.showPassword ? 'text' : 'password';\n }\n\n onInput(event: Event): void {\n this.valueChange.emit((event.target as HTMLInputElement).value);\n }\n\n onBlur(event: FocusEvent): void {\n this.blurred.emit(event);\n }\n\n toggleVisibility(): void {\n if (this.disabled) {\n return;\n }\n\n this.showPassword = !this.showPassword;\n }\n}\n","<div [ngClass]=\"['grid w-full gap-3', className]\">\n <label\n *ngIf=\"label\"\n [attr.for]=\"id\"\n [ngClass]=\"[\n 'text-sm font-medium leading-none',\n invalid ? 'text-destructive' : 'text-foreground',\n ]\"\n >{{ label }}</label\n >\n <div class=\"relative\">\n <input\n [id]=\"id\"\n [type]=\"inputType\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n [ngClass]=\"[\n 'border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive aria-invalid:placeholder:text-destructive/70 file:text-foreground placeholder:text-muted-foreground w-full min-w-0 appearance-none box-border rounded-lg border border-solid bg-transparent px-3 py-1 pr-10 text-sm shadow-sm transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n size === 'large' ? 'h-10 px-4 text-sm' : '',\n size === 'regular' ? 'h-9 px-3 text-sm' : '',\n size === 'small' ? 'h-8 px-2 text-sm' : '',\n size === 'mini' ? 'h-6 px-1.5 text-xs' : '',\n roundness === 'round' ? 'rounded-full' : 'rounded-lg',\n 'text-foreground',\n inputClassName,\n ]\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n />\n <button\n type=\"button\"\n class=\"absolute right-2 top-1/2 inline-flex h-6 w-6 -translate-y-1/2 appearance-none box-border items-center justify-center rounded border-0 bg-transparent p-0 text-muted-foreground outline-none transition-colors hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-60\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"showPassword ? 'Hide password' : 'Show password'\"\n (click)=\"toggleVisibility()\"\n >\n <svg\n *ngIf=\"!showPassword\"\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"h-4 w-4\"\n >\n <path\n d=\"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\"\n ></path>\n <circle cx=\"12\" cy=\"12\" r=\"3\"></circle>\n </svg>\n <svg\n *ngIf=\"showPassword\"\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"h-4 w-4\"\n >\n <path d=\"M3 3l18 18\"></path>\n <path d=\"M10.58 10.58a2 2 0 1 0 2.83 2.83\"></path>\n <path\n d=\"M9.88 5.09A10.94 10.94 0 0 1 12 4.91c5.05 0 9.27 3.11 10.6 7.09a1 1 0 0 1 0 .64 11.9 11.9 0 0 1-1.84 3.2\"\n ></path>\n <path\n d=\"M6.61 6.61A11.81 11.81 0 0 0 1.4 12a1 1 0 0 0 0 .64 11.83 11.83 0 0 0 8.79 7.54\"\n ></path>\n </svg>\n </button>\n </div>\n <p *ngIf=\"!invalid && helperText\" class=\"m-0 text-sm text-muted-foreground\">\n {{ helperText }}\n </p>\n <p *ngIf=\"invalid && errorText\" class=\"m-0 text-sm text-destructive\">\n {{ errorText }}\n </p>\n</div>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'pdm-textarea',\n templateUrl: './textarea.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PdmTextareaComponent {\n @Input() id = '';\n @Input() value = '';\n @Input() placeholder = '';\n @Input() rows = 4;\n @Input() disabled = false;\n @Input() readonly = false;\n @Input() required = false;\n @Input() invalid = false;\n @Input() className = '';\n @Input() textareaClassName = '';\n @Input() label = '';\n @Input() helperText = '';\n @Input() errorText = '';\n\n @Output() valueChange = new EventEmitter<string>();\n\n onInput(event: Event): void {\n this.valueChange.emit((event.target as HTMLTextAreaElement).value);\n }\n}\n","<div [ngClass]=\"['grid w-full gap-2', className]\">\n <label\n *ngIf=\"label\"\n [attr.for]=\"id\"\n [ngClass]=\"[\n 'text-sm font-medium leading-none',\n invalid ? 'text-destructive' : 'text-foreground',\n ]\"\n >{{ label }}</label\n >\n <textarea\n [id]=\"id\"\n [rows]=\"rows\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n [ngClass]=\"[\n 'border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive aria-invalid:placeholder:text-destructive/70 placeholder:text-muted-foreground flex min-h-20 w-full appearance-none box-border rounded-md border border-solid bg-transparent px-3 py-2 text-sm shadow-sm outline-none disabled:cursor-not-allowed disabled:opacity-50',\n textareaClassName,\n ]\"\n (input)=\"onInput($event)\"\n ></textarea>\n <p *ngIf=\"!invalid && helperText\" class=\"m-0 text-sm text-muted-foreground\">\n {{ helperText }}\n </p>\n <p *ngIf=\"invalid && errorText\" class=\"m-0 text-sm text-destructive\">\n {{ errorText }}\n </p>\n</div>\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { PdmIconModule } from \"pdm-ui-kit/src/icon\";\nimport { PdmInputComponent } from \"./input.component\";\nimport { PdmInputGroupComponent } from \"./input-group.component\";\nimport { PdmInputOtpComponent } from \"./input-otp.component\";\nimport { PdmInputPasswordComponent } from \"./input-password.component\";\nimport { PdmTextareaComponent } from \"./textarea.component\";\n\nconst COMPONENTS = [\n\tPdmInputComponent,\n\tPdmInputGroupComponent,\n\tPdmInputOtpComponent,\n\tPdmInputPasswordComponent,\n\tPdmTextareaComponent,\n];\n\n@NgModule({\n\timports: [CommonModule, PdmIconModule],\n\tdeclarations: COMPONENTS,\n\texports: COMPONENTS,\n})\nexport class PdmInputModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}