@acrodata/gui 2.8.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -3
- package/button-toggle/button-toggle.scss +6 -6
- package/button-toggle/icon.scss +3 -3
- package/codearea/codearea-dialog.scss +9 -9
- package/codearea/codearea.scss +2 -2
- package/combobox/combobox.scss +1 -1
- package/fesm2022/acrodata-gui.mjs +124 -124
- package/fesm2022/acrodata-gui.mjs.map +1 -1
- package/field-group/field-group.scss +1 -1
- package/file-uploader/file-uploader.scss +1 -1
- package/fill/fill-picker.scss +9 -9
- package/fill/fill.scss +4 -4
- package/gui-form.scss +10 -10
- package/icon-button-wrapper/icon-button-wrapper.scss +2 -2
- package/image-select/image-select.scss +8 -1
- package/index.d.ts +606 -3
- package/inline-group/inline-group.scss +1 -1
- package/package.json +7 -9
- package/select/select.scss +1 -1
- package/slider/slider.scss +10 -10
- package/switch/switch.scss +14 -14
- package/button-toggle/button-toggle.d.ts +0 -18
- package/button-toggle/icon.d.ts +0 -7
- package/codearea/codearea-config.d.ts +0 -14
- package/codearea/codearea-dialog.d.ts +0 -27
- package/codearea/codearea.d.ts +0 -37
- package/combobox/combobox.d.ts +0 -27
- package/esm2022/acrodata-gui.mjs +0 -5
- package/esm2022/button-toggle/button-toggle.mjs +0 -69
- package/esm2022/button-toggle/icon.mjs +0 -33
- package/esm2022/codearea/codearea-config.mjs +0 -20
- package/esm2022/codearea/codearea-dialog.mjs +0 -67
- package/esm2022/codearea/codearea.mjs +0 -148
- package/esm2022/combobox/combobox.mjs +0 -82
- package/esm2022/field-group/field-group.mjs +0 -30
- package/esm2022/field-label/field-label.mjs +0 -31
- package/esm2022/file-uploader/file-uploader-config.mjs +0 -42
- package/esm2022/file-uploader/file-uploader.mjs +0 -142
- package/esm2022/fill/fill-picker.mjs +0 -166
- package/esm2022/fill/fill.mjs +0 -85
- package/esm2022/gui-form.mjs +0 -305
- package/esm2022/gui-icons.mjs +0 -95
- package/esm2022/gui-module.mjs +0 -201
- package/esm2022/gui-utils.mjs +0 -128
- package/esm2022/icon-button-wrapper/icon-button-wrapper.mjs +0 -13
- package/esm2022/image-select/image-select.mjs +0 -79
- package/esm2022/inline-group/inline-group.mjs +0 -19
- package/esm2022/input-number/input-number.mjs +0 -58
- package/esm2022/input-text/input-text.mjs +0 -59
- package/esm2022/interface.mjs +0 -2
- package/esm2022/public-api.mjs +0 -30
- package/esm2022/select/select.mjs +0 -69
- package/esm2022/slider/slider.mjs +0 -85
- package/esm2022/switch/switch.mjs +0 -59
- package/esm2022/textarea/textarea.mjs +0 -59
- package/field-group/field-group.d.ts +0 -13
- package/field-label/field-label.d.ts +0 -12
- package/file-uploader/file-uploader-config.d.ts +0 -25
- package/file-uploader/file-uploader.d.ts +0 -38
- package/fill/fill-picker.d.ts +0 -39
- package/fill/fill.d.ts +0 -21
- package/gui-form.d.ts +0 -71
- package/gui-icons.d.ts +0 -30
- package/gui-module.d.ts +0 -42
- package/gui-utils.d.ts +0 -36
- package/icon-button-wrapper/icon-button-wrapper.d.ts +0 -5
- package/image-select/image-select.d.ts +0 -23
- package/inline-group/inline-group.d.ts +0 -7
- package/input-number/input-number.d.ts +0 -18
- package/input-text/input-text.d.ts +0 -18
- package/interface.d.ts +0 -61
- package/public-api.d.ts +0 -26
- package/select/select.d.ts +0 -18
- package/slider/slider.d.ts +0 -23
- package/switch/switch.d.ts +0 -18
- package/textarea/textarea.d.ts +0 -17
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
import { GradientPicker } from '@acrodata/gradient-picker';
|
|
2
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, inject, Input, ViewEncapsulation, } from '@angular/core';
|
|
3
|
-
import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
|
-
import { MatButtonToggle, MatButtonToggleGroup } from '@angular/material/button-toggle';
|
|
5
|
-
import { MatIcon } from '@angular/material/icon';
|
|
6
|
-
import { TinyColor } from '@ctrl/tinycolor';
|
|
7
|
-
import { ColorChromeModule } from 'ngx-color/chrome';
|
|
8
|
-
import { GuiFileUploader } from '../file-uploader/file-uploader';
|
|
9
|
-
import { GuiIconsRegistry } from '../gui-icons';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "@angular/forms";
|
|
12
|
-
import * as i2 from "ngx-color/chrome";
|
|
13
|
-
export class GuiFillPicker {
|
|
14
|
-
constructor() {
|
|
15
|
-
this.cdr = inject(ChangeDetectorRef);
|
|
16
|
-
this.disabled = false;
|
|
17
|
-
this.type = 'all';
|
|
18
|
-
this.types = [
|
|
19
|
-
{ label: 'Solid', value: 'solid' },
|
|
20
|
-
{ label: 'Gradient', value: 'gradient' },
|
|
21
|
-
{ label: 'Image', value: 'image' },
|
|
22
|
-
];
|
|
23
|
-
this.selectedType = 'solid';
|
|
24
|
-
this.colorFormat = 'hex';
|
|
25
|
-
this.fillValue = {
|
|
26
|
-
solid: '#000',
|
|
27
|
-
gradient: 'linear-gradient(transparent, #000)',
|
|
28
|
-
image: '',
|
|
29
|
-
};
|
|
30
|
-
this.onChange = () => { };
|
|
31
|
-
this.onTouched = () => { };
|
|
32
|
-
const iconsRegistry = inject(GuiIconsRegistry);
|
|
33
|
-
iconsRegistry.add('solid', 'gradient', 'image');
|
|
34
|
-
}
|
|
35
|
-
ngOnChanges(changes) {
|
|
36
|
-
if (changes['type']) {
|
|
37
|
-
if (this.type === 'gradient') {
|
|
38
|
-
this.selectedType = 'gradient';
|
|
39
|
-
}
|
|
40
|
-
else if (this.type === 'image') {
|
|
41
|
-
this.selectedType = 'image';
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
this.selectedType = 'solid';
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
writeValue(value) {
|
|
49
|
-
if (typeof value === 'string') {
|
|
50
|
-
value = value.trim();
|
|
51
|
-
if (this.type === 'all') {
|
|
52
|
-
this.getTypeFromModel(value);
|
|
53
|
-
}
|
|
54
|
-
if (value) {
|
|
55
|
-
this.getValueFromModel(value);
|
|
56
|
-
}
|
|
57
|
-
this.cdr.markForCheck();
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
registerOnChange(fn) {
|
|
61
|
-
this.onChange = fn;
|
|
62
|
-
}
|
|
63
|
-
registerOnTouched(fn) {
|
|
64
|
-
this.onTouched = fn;
|
|
65
|
-
}
|
|
66
|
-
setDisabledState(isDisabled) {
|
|
67
|
-
this.disabled = isDisabled;
|
|
68
|
-
this.cdr.markForCheck();
|
|
69
|
-
}
|
|
70
|
-
getColorFormat() {
|
|
71
|
-
const color = new TinyColor(this.fillValue.solid);
|
|
72
|
-
if (color.format === 'rgb' || color.format === 'hsl' || color.format === 'hsv') {
|
|
73
|
-
return color.format;
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
return 'hex';
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
getTypeFromModel(value) {
|
|
80
|
-
if (value.includes('linear') || value.includes('radial') || value.includes('conic')) {
|
|
81
|
-
this.selectedType = 'gradient';
|
|
82
|
-
}
|
|
83
|
-
else if (value.startsWith('url')) {
|
|
84
|
-
this.selectedType = 'image';
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
this.selectedType = 'solid';
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
getValueFromModel(value) {
|
|
91
|
-
if (this.selectedType === 'solid') {
|
|
92
|
-
this.fillValue.solid = value;
|
|
93
|
-
this.colorFormat = this.getColorFormat();
|
|
94
|
-
}
|
|
95
|
-
else if (this.selectedType === 'gradient') {
|
|
96
|
-
this.fillValue.gradient = value;
|
|
97
|
-
}
|
|
98
|
-
else if (this.selectedType === 'image') {
|
|
99
|
-
const regex = /url\((?:'|")?([^'"]+?)(?:'|")?\)/;
|
|
100
|
-
this.fillValue.image = value.match(regex)?.[1] || '';
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
onTypeChange() {
|
|
104
|
-
if (this.selectedType === 'solid') {
|
|
105
|
-
this.onSolidChange();
|
|
106
|
-
}
|
|
107
|
-
else if (this.selectedType === 'gradient') {
|
|
108
|
-
this.onGradientChange();
|
|
109
|
-
}
|
|
110
|
-
else if (this.selectedType === 'image') {
|
|
111
|
-
this.onImageChange();
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
onColorChange(e) {
|
|
115
|
-
this.fillValue.solid = {
|
|
116
|
-
hex: e.color.rgb.a === 1 ? e.color.hex : new TinyColor(e.color.rgb).toHex8String(),
|
|
117
|
-
rgb: new TinyColor(e.color.rgb).toRgbString(),
|
|
118
|
-
hsl: new TinyColor(e.color.hsl).toHslString(),
|
|
119
|
-
hsv: new TinyColor(e.color.hsv).toHsvString(),
|
|
120
|
-
}[this.colorFormat];
|
|
121
|
-
this.onSolidChange();
|
|
122
|
-
}
|
|
123
|
-
onSolidChange() {
|
|
124
|
-
this.onChange(this.fillValue.solid);
|
|
125
|
-
}
|
|
126
|
-
onGradientChange() {
|
|
127
|
-
this.onChange(this.fillValue.gradient);
|
|
128
|
-
}
|
|
129
|
-
onImageChange() {
|
|
130
|
-
const bgImg = `url("${this.fillValue.image}")`;
|
|
131
|
-
this.onChange(bgImg);
|
|
132
|
-
}
|
|
133
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GuiFillPicker, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
134
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: GuiFillPicker, isStandalone: true, selector: "gui-fill-picker", inputs: { disabled: "disabled", type: "type" }, host: { classAttribute: "gui-fill-picker" }, providers: [
|
|
135
|
-
{
|
|
136
|
-
provide: NG_VALUE_ACCESSOR,
|
|
137
|
-
useExisting: forwardRef(() => GuiFillPicker),
|
|
138
|
-
multi: true,
|
|
139
|
-
},
|
|
140
|
-
], usesOnChanges: true, ngImport: i0, template: "@if (type === 'all') {\n <div class=\"gui-fill-picker-header\">\n <mat-button-toggle-group\n [(ngModel)]=\"selectedType\"\n hideSingleSelectionIndicator\n (ngModelChange)=\"onTypeChange()\"\n >\n @for (t of types; track $index) {\n <mat-button-toggle [value]=\"t.value\" [title]=\"t.label\">\n <mat-icon [svgIcon]=\"t.value\" />\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n}\n\n<div class=\"gui-fill-picker-body\">\n @if (selectedType === 'solid') {\n <color-chrome [color]=\"fillValue.solid\" (onChangeComplete)=\"onColorChange($event)\" />\n } @else if (selectedType === 'gradient') {\n <gradient-picker [(ngModel)]=\"fillValue.gradient\" (ngModelChange)=\"onGradientChange()\" />\n } @else if (selectedType === 'image') {\n <gui-file-uploader\n type=\"image\"\n [(ngModel)]=\"fillValue.image\"\n (ngModelChange)=\"onImageChange()\"\n />\n }\n</div>\n", styles: [".gui-fill-picker{display:block;width:15rem;border-radius:.5rem;background-color:var(--mat-expansion-container-background-color);color:var(--mat-expansion-container-text-color);box-shadow:inset 0 0 1px #ffffffa3,0 2px 4px #00000029,0 8px 16px #0000001f,0 0 1px #0000001f}.gui-fill-picker color-chrome{display:block}.gui-fill-picker color-chrome .chrome-picker{width:auto;background:none;box-shadow:none;border-radius:0;font-family:inherit}.gui-fill-picker color-chrome .saturation{border-radius:.25rem;box-shadow:0 0 0 1px #ffffff1f,0 0 0 1px #0000001f}.gui-fill-picker color-chrome .chrome-body{padding:1rem 0 0}.gui-fill-picker color-chrome .chrome-swatch{box-shadow:0 0 0 1px #ffffff1f,0 0 0 1px #0000001f}.gui-fill-picker color-chrome .chrome-active{box-shadow:none}.gui-fill-picker color-chrome .alpha-checkboard{background-color:#fff;border-radius:2px}.gui-fill-picker color-chrome .alpha-gradient{border-radius:2px}.gui-fill-picker color-chrome .chrome-wrap{gap:.75rem;align-items:center}.gui-fill-picker color-chrome .chrome-fields{gap:.5rem;margin:0}.gui-fill-picker color-chrome .chrome-field{padding:0}.gui-fill-picker color-chrome .wrap{width:100%;line-height:1}.gui-fill-picker color-chrome .wrap input{background-color:transparent;box-shadow:none!important;color:var(--mdc-outlined-text-field-input-text-color)!important;border:1px solid var(--mdc-outlined-text-field-outline-color)!important}.gui-fill-picker color-chrome .chrome-toggle{display:flex;width:1.5rem;height:1.5rem;padding:.125rem;border-radius:2px}.gui-fill-picker color-chrome .chrome-toggle:hover{background:#0000000a}.gui-fill-picker color-chrome .chrome-icon{margin:0}.gui-fill-picker color-chrome .chrome-toggle-svg{width:1.25rem;height:1.25rem;border:none}.gui-fill-picker color-chrome .chrome-toggle-svg:hover{background:transparent}.gui-fill-picker color-chrome .chrome-toggle-svg path{fill:var(--mdc-icon-button-icon-color)}.gui-fill-picker .gradient-picker{--gp-container-width: auto;--gp-container-vertical-padding: 0;--gp-container-margin: -4px -12px;--gp-container-shape: 0;--gp-container-elevation-shadow: none;--gp-container-background-color: transparent;--gp-container-text-color: var(--mdc-filled-text-field-input-text-color);--gp-input-background-color: var(--mdc-filled-text-field-container-color)}.gui-fill-picker-header{padding:.375rem .375rem 0;line-height:1;--mat-standard-button-toggle-shape: 0;--mat-standard-button-toggle-height: 1}.gui-fill-picker-header .mat-button-toggle-group-appearance-standard{gap:.25rem;border:none}.gui-fill-picker-header .mat-button-toggle-group-appearance-standard .mat-button-toggle-appearance-standard+.mat-button-toggle-appearance-standard{border:none}.gui-fill-picker-header .mat-button-toggle-appearance-standard{border-radius:.25rem}.gui-fill-picker-header .mat-button-toggle-appearance-standard .mat-button-toggle-label-content{padding:0}.gui-fill-picker-body{padding:.75rem}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: ColorChromeModule }, { kind: "component", type: i2.ChromeComponent, selector: "color-chrome", inputs: ["disableAlpha"] }, { kind: "component", type: GradientPicker, selector: "gradient-picker", inputs: ["disabled"] }, { kind: "component", type: GuiFileUploader, selector: "gui-file-uploader", inputs: ["config", "disabled", "type", "name", "accept"], outputs: ["fileChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
141
|
-
}
|
|
142
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GuiFillPicker, decorators: [{
|
|
143
|
-
type: Component,
|
|
144
|
-
args: [{ selector: 'gui-fill-picker', host: {
|
|
145
|
-
class: 'gui-fill-picker',
|
|
146
|
-
}, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
147
|
-
{
|
|
148
|
-
provide: NG_VALUE_ACCESSOR,
|
|
149
|
-
useExisting: forwardRef(() => GuiFillPicker),
|
|
150
|
-
multi: true,
|
|
151
|
-
},
|
|
152
|
-
], standalone: true, imports: [
|
|
153
|
-
FormsModule,
|
|
154
|
-
MatButtonToggleGroup,
|
|
155
|
-
MatButtonToggle,
|
|
156
|
-
MatIcon,
|
|
157
|
-
ColorChromeModule,
|
|
158
|
-
GradientPicker,
|
|
159
|
-
GuiFileUploader,
|
|
160
|
-
], template: "@if (type === 'all') {\n <div class=\"gui-fill-picker-header\">\n <mat-button-toggle-group\n [(ngModel)]=\"selectedType\"\n hideSingleSelectionIndicator\n (ngModelChange)=\"onTypeChange()\"\n >\n @for (t of types; track $index) {\n <mat-button-toggle [value]=\"t.value\" [title]=\"t.label\">\n <mat-icon [svgIcon]=\"t.value\" />\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n}\n\n<div class=\"gui-fill-picker-body\">\n @if (selectedType === 'solid') {\n <color-chrome [color]=\"fillValue.solid\" (onChangeComplete)=\"onColorChange($event)\" />\n } @else if (selectedType === 'gradient') {\n <gradient-picker [(ngModel)]=\"fillValue.gradient\" (ngModelChange)=\"onGradientChange()\" />\n } @else if (selectedType === 'image') {\n <gui-file-uploader\n type=\"image\"\n [(ngModel)]=\"fillValue.image\"\n (ngModelChange)=\"onImageChange()\"\n />\n }\n</div>\n", styles: [".gui-fill-picker{display:block;width:15rem;border-radius:.5rem;background-color:var(--mat-expansion-container-background-color);color:var(--mat-expansion-container-text-color);box-shadow:inset 0 0 1px #ffffffa3,0 2px 4px #00000029,0 8px 16px #0000001f,0 0 1px #0000001f}.gui-fill-picker color-chrome{display:block}.gui-fill-picker color-chrome .chrome-picker{width:auto;background:none;box-shadow:none;border-radius:0;font-family:inherit}.gui-fill-picker color-chrome .saturation{border-radius:.25rem;box-shadow:0 0 0 1px #ffffff1f,0 0 0 1px #0000001f}.gui-fill-picker color-chrome .chrome-body{padding:1rem 0 0}.gui-fill-picker color-chrome .chrome-swatch{box-shadow:0 0 0 1px #ffffff1f,0 0 0 1px #0000001f}.gui-fill-picker color-chrome .chrome-active{box-shadow:none}.gui-fill-picker color-chrome .alpha-checkboard{background-color:#fff;border-radius:2px}.gui-fill-picker color-chrome .alpha-gradient{border-radius:2px}.gui-fill-picker color-chrome .chrome-wrap{gap:.75rem;align-items:center}.gui-fill-picker color-chrome .chrome-fields{gap:.5rem;margin:0}.gui-fill-picker color-chrome .chrome-field{padding:0}.gui-fill-picker color-chrome .wrap{width:100%;line-height:1}.gui-fill-picker color-chrome .wrap input{background-color:transparent;box-shadow:none!important;color:var(--mdc-outlined-text-field-input-text-color)!important;border:1px solid var(--mdc-outlined-text-field-outline-color)!important}.gui-fill-picker color-chrome .chrome-toggle{display:flex;width:1.5rem;height:1.5rem;padding:.125rem;border-radius:2px}.gui-fill-picker color-chrome .chrome-toggle:hover{background:#0000000a}.gui-fill-picker color-chrome .chrome-icon{margin:0}.gui-fill-picker color-chrome .chrome-toggle-svg{width:1.25rem;height:1.25rem;border:none}.gui-fill-picker color-chrome .chrome-toggle-svg:hover{background:transparent}.gui-fill-picker color-chrome .chrome-toggle-svg path{fill:var(--mdc-icon-button-icon-color)}.gui-fill-picker .gradient-picker{--gp-container-width: auto;--gp-container-vertical-padding: 0;--gp-container-margin: -4px -12px;--gp-container-shape: 0;--gp-container-elevation-shadow: none;--gp-container-background-color: transparent;--gp-container-text-color: var(--mdc-filled-text-field-input-text-color);--gp-input-background-color: var(--mdc-filled-text-field-container-color)}.gui-fill-picker-header{padding:.375rem .375rem 0;line-height:1;--mat-standard-button-toggle-shape: 0;--mat-standard-button-toggle-height: 1}.gui-fill-picker-header .mat-button-toggle-group-appearance-standard{gap:.25rem;border:none}.gui-fill-picker-header .mat-button-toggle-group-appearance-standard .mat-button-toggle-appearance-standard+.mat-button-toggle-appearance-standard{border:none}.gui-fill-picker-header .mat-button-toggle-appearance-standard{border-radius:.25rem}.gui-fill-picker-header .mat-button-toggle-appearance-standard .mat-button-toggle-label-content{padding:0}.gui-fill-picker-body{padding:.75rem}\n"] }]
|
|
161
|
-
}], ctorParameters: () => [], propDecorators: { disabled: [{
|
|
162
|
-
type: Input
|
|
163
|
-
}], type: [{
|
|
164
|
-
type: Input
|
|
165
|
-
}] } });
|
|
166
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsbC1waWNrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvZmlsbC9maWxsLXBpY2tlci50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9maWxsL2ZpbGwtcGlja2VyLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFHTCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU1QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDOzs7O0FBOEJoRCxNQUFNLE9BQU8sYUFBYTtJQXlCeEI7UUF4QlEsUUFBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRS9CLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsU0FBSSxHQUFnQixLQUFLLENBQUM7UUFFbkMsVUFBSyxHQUFHO1lBQ04sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7WUFDbEMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxV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RUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDO2dCQUM1QyxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsK0NDckNILHU4QkE2QkEsNDVGRFdJLFdBQVcsK1ZBQ1gsb0JBQW9CLGtUQUNwQixlQUFlLDZRQUNmLE9BQU8sMElBQ1AsaUJBQWlCLG9JQUNqQixjQUFjLGtGQUNkLGVBQWU7OzRGQUdOLGFBQWE7a0JBM0J6QixTQUFTOytCQUNFLGlCQUFpQixRQUdyQjt3QkFDSixLQUFLLEVBQUUsaUJBQWlCO3FCQUN6QixpQkFDYyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQzs0QkFDNUMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0YsY0FDVyxJQUFJLFdBQ1A7d0JBQ1AsV0FBVzt3QkFDWCxvQkFBb0I7d0JBQ3BCLGVBQWU7d0JBQ2YsT0FBTzt3QkFDUCxpQkFBaUI7d0JBQ2pCLGNBQWM7d0JBQ2QsZUFBZTtxQkFDaEI7d0RBS1EsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHcmFkaWVudFBpY2tlciB9IGZyb20gJ0BhY3JvZGF0YS9ncmFkaWVudC1waWNrZXInO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIGZvcndhcmRSZWYsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEJ1dHRvblRvZ2dsZSwgTWF0QnV0dG9uVG9nZ2xlR3JvdXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24tdG9nZ2xlJztcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IFRpbnlDb2xvciB9IGZyb20gJ0BjdHJsL3Rpbnljb2xvcic7XG5pbXBvcnQgeyBDb2xvckV2ZW50IH0gZnJvbSAnbmd4LWNvbG9yJztcbmltcG9ydCB7IENvbG9yQ2hyb21lTW9kdWxlIH0gZnJvbSAnbmd4LWNvbG9yL2Nocm9tZSc7XG5pbXBvcnQgeyBHdWlGaWxlVXBsb2FkZXIgfSBmcm9tICcuLi9maWxlLXVwbG9hZGVyL2ZpbGUtdXBsb2FkZXInO1xuaW1wb3J0IHsgR3VpSWNvbnNSZWdpc3RyeSB9IGZyb20gJy4uL2d1aS1pY29ucyc7XG5pbXBvcnQgeyBHdWlGaWxsTW9kZSB9IGZyb20gJy4uL2ludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2d1aS1maWxsLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWxsLXBpY2tlci5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2ZpbGwtcGlja2VyLnNjc3MnLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdndWktZmlsbC1waWNrZXInLFxuICB9LFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBHdWlGaWxsUGlja2VyKSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNYXRCdXR0b25Ub2dnbGVHcm91cCxcbiAgICBNYXRCdXR0b25Ub2dnbGUsXG4gICAgTWF0SWNvbixcbiAgICBDb2xvckNocm9tZU1vZHVsZSxcbiAgICBHcmFkaWVudFBpY2tlcixcbiAgICBHdWlGaWxlVXBsb2FkZXIsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEd1aUZpbGxQaWNrZXIgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzIHtcbiAgcHJpdmF0ZSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIHR5cGU6IEd1aUZpbGxNb2RlID0gJ2FsbCc7XG5cbiAgdHlwZXMgPSBbXG4gICAgeyBsYWJlbDogJ1NvbGlkJywgdmFsdWU6ICdzb2xpZCcgfSxcbiAgICB7IGxhYmVsOiAnR3JhZGllbnQnLCB2YWx1ZTogJ2dyYWRpZW50JyB9LFxuICAgIHsgbGFiZWw6ICdJbWFnZScsIHZhbHVlOiAnaW1hZ2UnIH0sXG4gIF07XG5cbiAgc2VsZWN0ZWRUeXBlOiBFeGNsdWRlPEd1aUZpbGxNb2RlLCAnYWxsJz4gPSAnc29saWQnO1xuXG4gIGNvbG9yRm9ybWF0OiAnaGV4JyB8ICdyZ2InIHwgJ2hzbCcgfCAnaHN2JyA9ICdoZXgnO1xuXG4gIGZpbGxWYWx1ZSA9IHtcbiAgICBzb2xpZDogJyMwMDAnLFxuICAgIGdyYWRpZW50OiAnbGluZWFyLWdyYWRpZW50KHRyYW5zcGFyZW50LCAjMDAwKScsXG4gICAgaW1hZ2U6ICcnLFxuICB9O1xuXG4gIHByaXZhdGUgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkID0gKCkgPT4ge307XG4gIHByaXZhdGUgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgaWNvbnNSZWdpc3RyeSA9IGluamVjdChHdWlJY29uc1JlZ2lzdHJ5KTtcbiAgICBpY29uc1JlZ2lzdHJ5LmFkZCgnc29saWQnLCAnZ3JhZGllbnQnLCAnaW1hZ2UnKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1sndHlwZSddKSB7XG4gICAgICBpZiAodGhpcy50eXBlID09PSAnZ3JhZGllbnQnKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlID0gJ2dyYWRpZW50JztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAnaW1hZ2UnKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlID0gJ2ltYWdlJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlID0gJ3NvbGlkJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XG4gICAgICBpZiAodGhpcy50eXBlID09PSAnYWxsJykge1xuICAgICAgICB0aGlzLmdldFR5cGVGcm9tTW9kZWwodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZ2V0VmFsdWVGcm9tTW9kZWwodmFsdWUpO1xuICAgICAgfVxuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldENvbG9yRm9ybWF0KCkge1xuICAgIGNvbnN0IGNvbG9yID0gbmV3IFRpbnlDb2xvcih0aGlzLmZpbGxWYWx1ZS5zb2xpZCk7XG4gICAgaWYgKGNvbG9yLmZvcm1hdCA9PT0gJ3JnYicgfHwgY29sb3IuZm9ybWF0ID09PSAnaHNsJyB8fCBjb2xvci5mb3JtYXQgPT09ICdoc3YnKSB7XG4gICAgICByZXR1cm4gY29sb3IuZm9ybWF0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJ2hleCc7XG4gICAgfVxuICB9XG5cbiAgZ2V0VHlwZUZyb21Nb2RlbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlLmluY2x1ZGVzKCdsaW5lYXInKSB8fCB2YWx1ZS5pbmNsdWRlcygncmFkaWFsJykgfHwgdmFsdWUuaW5jbHVkZXMoJ2NvbmljJykpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlID0gJ2dyYWRpZW50JztcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ3VybCcpKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVHlwZSA9ICdpbWFnZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlID0gJ3NvbGlkJztcbiAgICB9XG4gIH1cblxuICBnZXRWYWx1ZUZyb21Nb2RlbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRUeXBlID09PSAnc29saWQnKSB7XG4gICAgICB0aGlzLmZpbGxWYWx1ZS5zb2xpZCA9IHZhbHVlO1xuICAgICAgdGhpcy5jb2xvckZvcm1hdCA9IHRoaXMuZ2V0Q29sb3JGb3JtYXQoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRUeXBlID09PSAnZ3JhZGllbnQnKSB7XG4gICAgICB0aGlzLmZpbGxWYWx1ZS5ncmFkaWVudCA9IHZhbHVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFR5cGUgPT09ICdpbWFnZScpIHtcbiAgICAgIGNvbnN0IHJlZ2V4ID0gL3VybFxcKCg/Oid8XCIpPyhbXidcIl0rPykoPzonfFwiKT9cXCkvO1xuICAgICAgdGhpcy5maWxsVmFsdWUuaW1hZ2UgPSB2YWx1ZS5tYXRjaChyZWdleCk/LlsxXSB8fCAnJztcbiAgICB9XG4gIH1cblxuICBvblR5cGVDaGFuZ2UoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRUeXBlID09PSAnc29saWQnKSB7XG4gICAgICB0aGlzLm9uU29saWRDaGFuZ2UoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRUeXBlID09PSAnZ3JhZGllbnQnKSB7XG4gICAgICB0aGlzLm9uR3JhZGllbnRDaGFuZ2UoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRUeXBlID09PSAnaW1hZ2UnKSB7XG4gICAgICB0aGlzLm9uSW1hZ2VDaGFuZ2UoKTtcbiAgICB9XG4gIH1cblxuICBvbkNvbG9yQ2hhbmdlKGU6IENvbG9yRXZlbnQpIHtcbiAgICB0aGlzLmZpbGxWYWx1ZS5zb2xpZCA9IHtcbiAgICAgIGhleDogZS5jb2xvci5yZ2IuYSA9PT0gMSA/IGUuY29sb3IuaGV4IDogbmV3IFRpbnlDb2xvcihlLmNvbG9yLnJnYikudG9IZXg4U3RyaW5nKCksXG4gICAgICByZ2I6IG5ldyBUaW55Q29sb3IoZS5jb2xvci5yZ2IpLnRvUmdiU3RyaW5nKCksXG4gICAgICBoc2w6IG5ldyBUaW55Q29sb3IoZS5jb2xvci5oc2wpLnRvSHNsU3RyaW5nKCksXG4gICAgICBoc3Y6IG5ldyBUaW55Q29sb3IoZS5jb2xvci5oc3YpLnRvSHN2U3RyaW5nKCksXG4gICAgfVt0aGlzLmNvbG9yRm9ybWF0XTtcbiAgICB0aGlzLm9uU29saWRDaGFuZ2UoKTtcbiAgfVxuXG4gIG9uU29saWRDaGFuZ2UoKSB7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLmZpbGxWYWx1ZS5zb2xpZCk7XG4gIH1cblxuICBvbkdyYWRpZW50Q2hhbmdlKCkge1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy5maWxsVmFsdWUuZ3JhZGllbnQpO1xuICB9XG5cbiAgb25JbWFnZUNoYW5nZSgpIHtcbiAgICBjb25zdCBiZ0ltZyA9IGB1cmwoXCIke3RoaXMuZmlsbFZhbHVlLmltYWdlfVwiKWA7XG4gICAgdGhpcy5vbkNoYW5nZShiZ0ltZyk7XG4gIH1cbn1cbiIsIkBpZiAodHlwZSA9PT0gJ2FsbCcpIHtcbiAgPGRpdiBjbGFzcz1cImd1aS1maWxsLXBpY2tlci1oZWFkZXJcIj5cbiAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXBcbiAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRUeXBlXCJcbiAgICAgIGhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3JcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uVHlwZUNoYW5nZSgpXCJcbiAgICA+XG4gICAgICBAZm9yICh0IG9mIHR5cGVzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCJ0LnZhbHVlXCIgW3RpdGxlXT1cInQubGFiZWxcIj5cbiAgICAgICAgICA8bWF0LWljb24gW3N2Z0ljb25dPVwidC52YWx1ZVwiIC8+XG4gICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICB9XG4gICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbiAgPC9kaXY+XG59XG5cbjxkaXYgY2xhc3M9XCJndWktZmlsbC1waWNrZXItYm9keVwiPlxuICBAaWYgKHNlbGVjdGVkVHlwZSA9PT0gJ3NvbGlkJykge1xuICAgIDxjb2xvci1jaHJvbWUgW2NvbG9yXT1cImZpbGxWYWx1ZS5zb2xpZFwiIChvbkNoYW5nZUNvbXBsZXRlKT1cIm9uQ29sb3JDaGFuZ2UoJGV2ZW50KVwiIC8+XG4gIH0gQGVsc2UgaWYgKHNlbGVjdGVkVHlwZSA9PT0gJ2dyYWRpZW50Jykge1xuICAgIDxncmFkaWVudC1waWNrZXIgWyhuZ01vZGVsKV09XCJmaWxsVmFsdWUuZ3JhZGllbnRcIiAobmdNb2RlbENoYW5nZSk9XCJvbkdyYWRpZW50Q2hhbmdlKClcIiAvPlxuICB9IEBlbHNlIGlmIChzZWxlY3RlZFR5cGUgPT09ICdpbWFnZScpIHtcbiAgICA8Z3VpLWZpbGUtdXBsb2FkZXJcbiAgICAgIHR5cGU9XCJpbWFnZVwiXG4gICAgICBbKG5nTW9kZWwpXT1cImZpbGxWYWx1ZS5pbWFnZVwiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkltYWdlQ2hhbmdlKClcIlxuICAgIC8+XG4gIH1cbjwvZGl2PlxuIl19
|
package/esm2022/fill/fill.mjs
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, inject, Input, ViewEncapsulation, } from '@angular/core';
|
|
2
|
-
import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
-
import { MatFormField, MatHint, MatPrefix, MatSuffix } from '@angular/material/form-field';
|
|
4
|
-
import { MatInput } from '@angular/material/input';
|
|
5
|
-
import { MtxColorpicker, MtxColorpickerInput, MtxColorpickerToggle, } from '@ng-matero/extensions/colorpicker';
|
|
6
|
-
import { GuiFieldLabel } from '../field-label/field-label';
|
|
7
|
-
import { GuiIconButtonWrapper } from '../icon-button-wrapper/icon-button-wrapper';
|
|
8
|
-
import { GuiFillPicker } from './fill-picker';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "@angular/forms";
|
|
11
|
-
export class GuiFill {
|
|
12
|
-
constructor() {
|
|
13
|
-
this.cdr = inject(ChangeDetectorRef);
|
|
14
|
-
this.config = {};
|
|
15
|
-
this.disabled = false;
|
|
16
|
-
this.type = 'all';
|
|
17
|
-
this.value = '';
|
|
18
|
-
this.onChange = () => { };
|
|
19
|
-
this.onTouched = () => { };
|
|
20
|
-
}
|
|
21
|
-
ngOnChanges(changes) {
|
|
22
|
-
if (changes['config']) {
|
|
23
|
-
this.type = (this.config.mode || 'all');
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
writeValue(value) {
|
|
27
|
-
if (typeof value === 'string') {
|
|
28
|
-
this.value = value;
|
|
29
|
-
this.cdr.markForCheck();
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
registerOnChange(fn) {
|
|
33
|
-
this.onChange = fn;
|
|
34
|
-
}
|
|
35
|
-
registerOnTouched(fn) {
|
|
36
|
-
this.onTouched = fn;
|
|
37
|
-
}
|
|
38
|
-
setDisabledState(isDisabled) {
|
|
39
|
-
this.disabled = isDisabled;
|
|
40
|
-
this.cdr.markForCheck();
|
|
41
|
-
}
|
|
42
|
-
onValueChange() {
|
|
43
|
-
this.onChange(this.value);
|
|
44
|
-
}
|
|
45
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GuiFill, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
46
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: GuiFill, isStandalone: true, selector: "gui-fill", inputs: { config: "config", disabled: "disabled", type: "type" }, host: { classAttribute: "gui-field gui-fill" }, providers: [
|
|
47
|
-
{
|
|
48
|
-
provide: NG_VALUE_ACCESSOR,
|
|
49
|
-
useExisting: forwardRef(() => GuiFill),
|
|
50
|
-
multi: true,
|
|
51
|
-
},
|
|
52
|
-
], usesOnChanges: true, ngImport: i0, template: "<mat-form-field>\n <ng-container matPrefix>\n <span class=\"gui-color-block\">\n <span\n class=\"gui-color-block-bg\"\n [style.background]=\"value + ' center / contain no-repeat'\"\n ></span>\n </span>\n </ng-container>\n\n <input\n matInput\n [(ngModel)]=\"value\"\n [disabled]=\"disabled\"\n [placeholder]=\"config.placeholder || ''\"\n [mtxColorpicker]=\"cp\"\n (colorChange)=\"onValueChange()\"\n />\n\n <mtx-colorpicker #cp [content]=\"customPickerContent\" />\n <gui-icon-button-wrapper matSuffix>\n <mtx-colorpicker-toggle [for]=\"cp\" />\n </gui-icon-button-wrapper>\n\n @if (config.parentType === 'inline') {\n <mat-hint>\n <gui-field-label [config]=\"config\" />\n </mat-hint>\n }\n</mat-form-field>\n\n<ng-template #customPickerContent>\n <gui-fill-picker [type]=\"type\" [(ngModel)]=\"cp.selected\" (ngModelChange)=\"cp.select($event)\" />\n</ng-template>\n", styles: [".gui-color-block{position:relative;display:inline-block;width:1.5rem;height:1.5rem;background-color:#fff;background-image:conic-gradient(transparent 25%,#ccc 25% 50%,transparent 50% 75%,#ccc 75%);background-size:.5rem .5rem}.gui-color-block-bg{display:inline-block;width:100%;height:100%}.gui-color-block-bg:after{display:inline-block;width:100%;height:100%;box-sizing:border-box;border:1px solid currentColor;border-top-left-radius:var(--mdc-filled-text-field-container-shape);border-bottom-left-radius:var(--mdc-filled-text-field-container-shape);opacity:.24;content:\"\"}[dir=rtl] .gui-color-block-bg:after{border-radius:0;border-top-right-radius:var(--mdc-filled-text-field-container-shape);border-bottom-right-radius:var(--mdc-filled-text-field-container-shape)}.gui-fill .mat-mdc-icon-button{display:inline-flex;justify-content:center;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: MtxColorpickerInput, selector: "input[mtxColorpicker]", inputs: ["mtxColorpicker", "disabled", "value", "format"], outputs: ["colorChange", "colorInput"], exportAs: ["mtxColorpickerInput"] }, { kind: "component", type: MtxColorpicker, selector: "mtx-colorpicker", inputs: ["content", "disabled", "xPosition", "yPosition", "restoreFocus", "opened", "color", "format"], outputs: ["opened", "closed"], exportAs: ["mtxColorpicker"] }, { kind: "component", type: MtxColorpickerToggle, selector: "mtx-colorpicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["mtxColorpickerToggle"] }, { kind: "component", type: GuiFieldLabel, selector: "gui-field-label", inputs: ["config", "index"] }, { kind: "component", type: GuiIconButtonWrapper, selector: "gui-icon-button-wrapper" }, { kind: "component", type: GuiFillPicker, selector: "gui-fill-picker", inputs: ["disabled", "type"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
53
|
-
}
|
|
54
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GuiFill, decorators: [{
|
|
55
|
-
type: Component,
|
|
56
|
-
args: [{ selector: 'gui-fill', host: {
|
|
57
|
-
class: 'gui-field gui-fill',
|
|
58
|
-
}, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
59
|
-
{
|
|
60
|
-
provide: NG_VALUE_ACCESSOR,
|
|
61
|
-
useExisting: forwardRef(() => GuiFill),
|
|
62
|
-
multi: true,
|
|
63
|
-
},
|
|
64
|
-
], standalone: true, imports: [
|
|
65
|
-
FormsModule,
|
|
66
|
-
MatFormField,
|
|
67
|
-
MatPrefix,
|
|
68
|
-
MatInput,
|
|
69
|
-
MatSuffix,
|
|
70
|
-
MatHint,
|
|
71
|
-
MtxColorpickerInput,
|
|
72
|
-
MtxColorpicker,
|
|
73
|
-
MtxColorpickerToggle,
|
|
74
|
-
GuiFieldLabel,
|
|
75
|
-
GuiIconButtonWrapper,
|
|
76
|
-
GuiFillPicker,
|
|
77
|
-
], template: "<mat-form-field>\n <ng-container matPrefix>\n <span class=\"gui-color-block\">\n <span\n class=\"gui-color-block-bg\"\n [style.background]=\"value + ' center / contain no-repeat'\"\n ></span>\n </span>\n </ng-container>\n\n <input\n matInput\n [(ngModel)]=\"value\"\n [disabled]=\"disabled\"\n [placeholder]=\"config.placeholder || ''\"\n [mtxColorpicker]=\"cp\"\n (colorChange)=\"onValueChange()\"\n />\n\n <mtx-colorpicker #cp [content]=\"customPickerContent\" />\n <gui-icon-button-wrapper matSuffix>\n <mtx-colorpicker-toggle [for]=\"cp\" />\n </gui-icon-button-wrapper>\n\n @if (config.parentType === 'inline') {\n <mat-hint>\n <gui-field-label [config]=\"config\" />\n </mat-hint>\n }\n</mat-form-field>\n\n<ng-template #customPickerContent>\n <gui-fill-picker [type]=\"type\" [(ngModel)]=\"cp.selected\" (ngModelChange)=\"cp.select($event)\" />\n</ng-template>\n", styles: [".gui-color-block{position:relative;display:inline-block;width:1.5rem;height:1.5rem;background-color:#fff;background-image:conic-gradient(transparent 25%,#ccc 25% 50%,transparent 50% 75%,#ccc 75%);background-size:.5rem .5rem}.gui-color-block-bg{display:inline-block;width:100%;height:100%}.gui-color-block-bg:after{display:inline-block;width:100%;height:100%;box-sizing:border-box;border:1px solid currentColor;border-top-left-radius:var(--mdc-filled-text-field-container-shape);border-bottom-left-radius:var(--mdc-filled-text-field-container-shape);opacity:.24;content:\"\"}[dir=rtl] .gui-color-block-bg:after{border-radius:0;border-top-right-radius:var(--mdc-filled-text-field-container-shape);border-bottom-right-radius:var(--mdc-filled-text-field-container-shape)}.gui-fill .mat-mdc-icon-button{display:inline-flex;justify-content:center;align-items:center}\n"] }]
|
|
78
|
-
}], propDecorators: { config: [{
|
|
79
|
-
type: Input
|
|
80
|
-
}], disabled: [{
|
|
81
|
-
type: Input
|
|
82
|
-
}], type: [{
|
|
83
|
-
type: Input
|
|
84
|
-
}] } });
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9maWxsL2ZpbGwudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvZmlsbC9maWxsLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUdMLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUNMLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsb0JBQW9CLEdBQ3JCLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRWxGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQWtDOUMsTUFBTSxPQUFPLE9BQU87SUFoQ3BCO1FBaUNVLFFBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUUvQixXQUFNLEdBQXdCLEVBQUUsQ0FBQztRQUNqQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLFNBQUksR0FBZ0IsS0FBSyxDQUFDO1FBRW5DLFVBQUssR0FBRyxFQUFFLENBQUM7UUFFSCxhQUFRLEdBQTRCLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUM3QyxjQUFTLEdBQWUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0tBK0IxQztJQTdCQyxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFnQixDQUFDO1FBQ3pELENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQVU7UUFDbkIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBMkI7UUFDMUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQWM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQW1CO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1FBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDOytHQXhDVSxPQUFPO21HQUFQLE9BQU8seUtBdkJQO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUM7Z0JBQ3RDLEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRiwrQ0N2Q0gsKzZCQWtDQSx1NUJEUUksV0FBVywrbUJBQ1gsWUFBWSw0TEFDWixTQUFTLHFIQUNULFFBQVEsaVVBQ1IsU0FBUyxxSEFDVCxPQUFPLDhFQUNQLG1CQUFtQix3TUFDbkIsY0FBYyxpT0FDZCxvQkFBb0IsK0tBQ3BCLGFBQWEseUZBQ2Isb0JBQW9CLG9FQUNwQixhQUFhOzs0RkFHSixPQUFPO2tCQWhDbkIsU0FBUzsrQkFDRSxVQUFVLFFBR2Q7d0JBQ0osS0FBSyxFQUFFLG9CQUFvQjtxQkFDNUIsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxhQUNwQzt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUM7NEJBQ3RDLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGLGNBQ1csSUFBSSxXQUNQO3dCQUNQLFdBQVc7d0JBQ1gsWUFBWTt3QkFDWixTQUFTO3dCQUNULFFBQVE7d0JBQ1IsU0FBUzt3QkFDVCxPQUFPO3dCQUNQLG1CQUFtQjt3QkFDbkIsY0FBYzt3QkFDZCxvQkFBb0I7d0JBQ3BCLGFBQWE7d0JBQ2Isb0JBQW9CO3dCQUNwQixhQUFhO3FCQUNkOzhCQUtRLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBmb3J3YXJkUmVmLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGQsIE1hdEhpbnQsIE1hdFByZWZpeCwgTWF0U3VmZml4IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7XG4gIE10eENvbG9ycGlja2VyLFxuICBNdHhDb2xvcnBpY2tlcklucHV0LFxuICBNdHhDb2xvcnBpY2tlclRvZ2dsZSxcbn0gZnJvbSAnQG5nLW1hdGVyby9leHRlbnNpb25zL2NvbG9ycGlja2VyJztcbmltcG9ydCB7IEd1aUZpZWxkTGFiZWwgfSBmcm9tICcuLi9maWVsZC1sYWJlbC9maWVsZC1sYWJlbCc7XG5pbXBvcnQgeyBHdWlJY29uQnV0dG9uV3JhcHBlciB9IGZyb20gJy4uL2ljb24tYnV0dG9uLXdyYXBwZXIvaWNvbi1idXR0b24td3JhcHBlcic7XG5pbXBvcnQgeyBHdWlDb250cm9sLCBHdWlGaWxsTW9kZSB9IGZyb20gJy4uL2ludGVyZmFjZSc7XG5pbXBvcnQgeyBHdWlGaWxsUGlja2VyIH0gZnJvbSAnLi9maWxsLXBpY2tlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2d1aS1maWxsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbGwuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9maWxsLnNjc3MnLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdndWktZmllbGQgZ3VpLWZpbGwnLFxuICB9LFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBHdWlGaWxsKSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNYXRGb3JtRmllbGQsXG4gICAgTWF0UHJlZml4LFxuICAgIE1hdElucHV0LFxuICAgIE1hdFN1ZmZpeCxcbiAgICBNYXRIaW50LFxuICAgIE10eENvbG9ycGlja2VySW5wdXQsXG4gICAgTXR4Q29sb3JwaWNrZXIsXG4gICAgTXR4Q29sb3JwaWNrZXJUb2dnbGUsXG4gICAgR3VpRmllbGRMYWJlbCxcbiAgICBHdWlJY29uQnV0dG9uV3JhcHBlcixcbiAgICBHdWlGaWxsUGlja2VyLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBHdWlGaWxsIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uQ2hhbmdlcyB7XG4gIHByaXZhdGUgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICBASW5wdXQoKSBjb25maWc6IFBhcnRpYWw8R3VpQ29udHJvbD4gPSB7fTtcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgdHlwZTogR3VpRmlsbE1vZGUgPSAnYWxsJztcblxuICB2YWx1ZSA9ICcnO1xuXG4gIHByaXZhdGUgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkID0gKCkgPT4ge307XG4gIHByaXZhdGUgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydjb25maWcnXSkge1xuICAgICAgdGhpcy50eXBlID0gKHRoaXMuY29uZmlnLm1vZGUgfHwgJ2FsbCcpIGFzIEd1aUZpbGxNb2RlO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25WYWx1ZUNoYW5nZSgpIHtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICB9XG59XG4iLCI8bWF0LWZvcm0tZmllbGQ+XG4gIDxuZy1jb250YWluZXIgbWF0UHJlZml4PlxuICAgIDxzcGFuIGNsYXNzPVwiZ3VpLWNvbG9yLWJsb2NrXCI+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cImd1aS1jb2xvci1ibG9jay1iZ1wiXG4gICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInZhbHVlICsgJyBjZW50ZXIgLyBjb250YWluIG5vLXJlcGVhdCdcIlxuICAgICAgPjwvc3Bhbj5cbiAgICA8L3NwYW4+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxpbnB1dFxuICAgIG1hdElucHV0XG4gICAgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbcGxhY2Vob2xkZXJdPVwiY29uZmlnLnBsYWNlaG9sZGVyIHx8ICcnXCJcbiAgICBbbXR4Q29sb3JwaWNrZXJdPVwiY3BcIlxuICAgIChjb2xvckNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlKClcIlxuICAvPlxuXG4gIDxtdHgtY29sb3JwaWNrZXIgI2NwIFtjb250ZW50XT1cImN1c3RvbVBpY2tlckNvbnRlbnRcIiAvPlxuICA8Z3VpLWljb24tYnV0dG9uLXdyYXBwZXIgbWF0U3VmZml4PlxuICAgIDxtdHgtY29sb3JwaWNrZXItdG9nZ2xlIFtmb3JdPVwiY3BcIiAvPlxuICA8L2d1aS1pY29uLWJ1dHRvbi13cmFwcGVyPlxuXG4gIEBpZiAoY29uZmlnLnBhcmVudFR5cGUgPT09ICdpbmxpbmUnKSB7XG4gICAgPG1hdC1oaW50PlxuICAgICAgPGd1aS1maWVsZC1sYWJlbCBbY29uZmlnXT1cImNvbmZpZ1wiIC8+XG4gICAgPC9tYXQtaGludD5cbiAgfVxuPC9tYXQtZm9ybS1maWVsZD5cblxuPG5nLXRlbXBsYXRlICNjdXN0b21QaWNrZXJDb250ZW50PlxuICA8Z3VpLWZpbGwtcGlja2VyIFt0eXBlXT1cInR5cGVcIiBbKG5nTW9kZWwpXT1cImNwLnNlbGVjdGVkXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY3Auc2VsZWN0KCRldmVudClcIiAvPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|