kwikid-forms 0.4.1 → 0.5.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.
Files changed (104) hide show
  1. package/bundles/kwikid-forms.umd.js +1868 -3663
  2. package/bundles/kwikid-forms.umd.js.map +1 -1
  3. package/esm2015/lib/builder/builder-form-editor/builder-form-editor.component.js +403 -0
  4. package/esm2015/lib/builder/builder-form-editor/builder-form-editor.definitions.js +6 -0
  5. package/esm2015/lib/builder/builder-form-editor/builder-form-editor.helper.js +29 -0
  6. package/esm2015/lib/builder/builder-form-editor/builder-form-editor.module.js +39 -0
  7. package/esm2015/lib/builder/builder-form-editor/builder.form-editor.constants.js +189 -0
  8. package/esm2015/lib/builder/builder-form-editor/builder.form-editor.service.js +43 -0
  9. package/esm2015/lib/builder/builder-form-list/builder-forms-list.component.js +99 -0
  10. package/esm2015/lib/builder/builder-form-list/builder-forms-list.module.js +40 -0
  11. package/esm2015/lib/builder/builder.component.js +111 -258
  12. package/esm2015/lib/builder/builder.helper.js +78 -0
  13. package/esm2015/lib/builder/builder.module.js +15 -72
  14. package/esm2015/lib/kwikid-forms.module.js +4 -16
  15. package/esm2015/lib/renderer/config-converter/config-converter.constants.js +74 -0
  16. package/esm2015/lib/renderer/config-converter/config-converter.helper.js +49 -0
  17. package/esm2015/lib/renderer/config-converter/config-converter.js +514 -0
  18. package/esm2015/lib/renderer/form-view/definitions/form-view.fields.definition.js +2 -1
  19. package/esm2015/lib/renderer/form-view/form-view.component.js +4 -33
  20. package/esm2015/lib/renderer/form-view/form-view.module.js +7 -6
  21. package/esm2015/lib/renderer/forms-list/forms-list.component.js +3 -5
  22. package/esm2015/lib/renderer/forms-list/forms-list.module.js +7 -5
  23. package/esm2015/lib/renderer/renderer.component.js +4 -6
  24. package/esm2015/public_api.js +1 -3
  25. package/fesm2015/kwikid-forms.js +1452 -5045
  26. package/fesm2015/kwikid-forms.js.map +1 -1
  27. package/lib/builder/builder-form-editor/builder-form-editor.component.d.ts +108 -0
  28. package/lib/builder/builder-form-editor/builder-form-editor.definitions.d.ts +5 -0
  29. package/lib/builder/builder-form-editor/builder-form-editor.helper.d.ts +3 -0
  30. package/lib/builder/builder-form-editor/builder-form-editor.module.d.ts +11 -0
  31. package/lib/{builder2 → builder}/builder-form-editor/builder.form-editor.constants.d.ts +76 -0
  32. package/lib/builder/builder-form-editor/builder.form-editor.service.d.ts +7 -0
  33. package/lib/{builder2 → builder}/builder-form-list/builder-forms-list.component.d.ts +2 -1
  34. package/lib/{builder2 → builder}/builder-form-list/builder-forms-list.module.d.ts +1 -1
  35. package/lib/builder/builder.component.d.ts +15 -34
  36. package/lib/builder/builder.helper.d.ts +1 -0
  37. package/lib/builder/builder.module.d.ts +7 -21
  38. package/lib/kwikid-forms.module.d.ts +2 -3
  39. package/lib/renderer/config-converter/config-converter.constants.d.ts +73 -0
  40. package/lib/renderer/config-converter/config-converter.d.ts +5 -0
  41. package/lib/renderer/config-converter/config-converter.helper.d.ts +7 -0
  42. package/lib/renderer/form-view/definitions/form-view.fields.definition.d.ts +1 -0
  43. package/lib/renderer/form-view/form-view.component.d.ts +0 -4
  44. package/lib/renderer/form-view/form-view.module.d.ts +7 -9
  45. package/lib/renderer/forms-list/forms-list.module.d.ts +5 -6
  46. package/package.json +3 -3
  47. package/public_api.d.ts +0 -2
  48. package/esm2015/lib/builder/element-config-editor/editors/basic/checkbox-config.editor.component.js +0 -72
  49. package/esm2015/lib/builder/element-config-editor/editors/basic/date-config.editor.component.js +0 -72
  50. package/esm2015/lib/builder/element-config-editor/editors/basic/number-config.editor.component.js +0 -72
  51. package/esm2015/lib/builder/element-config-editor/editors/basic/otp-config.editor.component.js +0 -130
  52. package/esm2015/lib/builder/element-config-editor/editors/basic/phone-config.editor.component.js +0 -132
  53. package/esm2015/lib/builder/element-config-editor/editors/basic/radio-config.editor.component.js +0 -396
  54. package/esm2015/lib/builder/element-config-editor/editors/basic/select-config.editor.component.js +0 -302
  55. package/esm2015/lib/builder/element-config-editor/editors/basic/text-config.editor.component.js +0 -132
  56. package/esm2015/lib/builder/element-config-editor/editors/basic-element-config.editor.component.js +0 -698
  57. package/esm2015/lib/builder/element-config-editor/editors/document/aadhaar-number-config.editor.component.js +0 -130
  58. package/esm2015/lib/builder/element-config-editor/editors/document/pan-number-config.editor.component.js +0 -135
  59. package/esm2015/lib/builder/element-config-editor/editors/document-element-config.editor.component.js +0 -610
  60. package/esm2015/lib/builder/element-config-editor/editors/other/html-config.editor.component.js +0 -120
  61. package/esm2015/lib/builder/element-config-editor/editors/other/title-config.editor.component.js +0 -121
  62. package/esm2015/lib/builder/element-config-editor/editors/other-element-config.editor.component.js +0 -214
  63. package/esm2015/lib/builder/element-config-editor/element-config-editor.component.js +0 -97
  64. package/esm2015/lib/builder/shared/elements.js +0 -90
  65. package/esm2015/lib/builder/shared/helpers.js +0 -6
  66. package/esm2015/lib/builder2/builder-form-editor/builder-form-editor.component.js +0 -268
  67. package/esm2015/lib/builder2/builder-form-editor/builder-form-editor.module.js +0 -38
  68. package/esm2015/lib/builder2/builder-form-editor/builder-form-editor.pipe.js +0 -19
  69. package/esm2015/lib/builder2/builder-form-editor/builder.form-editor.constants.js +0 -178
  70. package/esm2015/lib/builder2/builder-form-list/builder-forms-list.component.js +0 -85
  71. package/esm2015/lib/builder2/builder-form-list/builder-forms-list.module.js +0 -37
  72. package/esm2015/lib/builder2/builder2.component.js +0 -169
  73. package/esm2015/lib/builder2/builder2.module.js +0 -46
  74. package/esm2015/lib/renderer/config-converter.helper.js +0 -629
  75. package/esm2015/lib/renderer/form-view/pipes/safe-html.pipe.js +0 -25
  76. package/esm2015/lib/renderer/form-view/pipes/safe-url.pipe.js +0 -25
  77. package/esm2015/lib/renderer/forms-list/pipes/safe-html.pipe.js +0 -25
  78. package/lib/builder/element-config-editor/editors/basic/checkbox-config.editor.component.d.ts +0 -16
  79. package/lib/builder/element-config-editor/editors/basic/date-config.editor.component.d.ts +0 -16
  80. package/lib/builder/element-config-editor/editors/basic/number-config.editor.component.d.ts +0 -16
  81. package/lib/builder/element-config-editor/editors/basic/otp-config.editor.component.d.ts +0 -16
  82. package/lib/builder/element-config-editor/editors/basic/phone-config.editor.component.d.ts +0 -16
  83. package/lib/builder/element-config-editor/editors/basic/radio-config.editor.component.d.ts +0 -25
  84. package/lib/builder/element-config-editor/editors/basic/select-config.editor.component.d.ts +0 -24
  85. package/lib/builder/element-config-editor/editors/basic/text-config.editor.component.d.ts +0 -16
  86. package/lib/builder/element-config-editor/editors/basic-element-config.editor.component.d.ts +0 -20
  87. package/lib/builder/element-config-editor/editors/document/aadhaar-number-config.editor.component.d.ts +0 -16
  88. package/lib/builder/element-config-editor/editors/document/pan-number-config.editor.component.d.ts +0 -16
  89. package/lib/builder/element-config-editor/editors/document-element-config.editor.component.d.ts +0 -20
  90. package/lib/builder/element-config-editor/editors/other/html-config.editor.component.d.ts +0 -16
  91. package/lib/builder/element-config-editor/editors/other/title-config.editor.component.d.ts +0 -16
  92. package/lib/builder/element-config-editor/editors/other-element-config.editor.component.d.ts +0 -20
  93. package/lib/builder/element-config-editor/element-config-editor.component.d.ts +0 -20
  94. package/lib/builder/shared/elements.d.ts +0 -34
  95. package/lib/builder/shared/helpers.d.ts +0 -1
  96. package/lib/builder2/builder-form-editor/builder-form-editor.component.d.ts +0 -48
  97. package/lib/builder2/builder-form-editor/builder-form-editor.module.d.ts +0 -12
  98. package/lib/builder2/builder-form-editor/builder-form-editor.pipe.d.ts +0 -7
  99. package/lib/builder2/builder2.component.d.ts +0 -37
  100. package/lib/builder2/builder2.module.d.ts +0 -13
  101. package/lib/renderer/config-converter.helper.d.ts +0 -9
  102. package/lib/renderer/form-view/pipes/safe-html.pipe.d.ts +0 -15
  103. package/lib/renderer/form-view/pipes/safe-url.pipe.d.ts +0 -15
  104. package/lib/renderer/forms-list/pipes/safe-html.pipe.d.ts +0 -15
@@ -1,302 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { Component, EventEmitter, Input, Output } from "@angular/core";
3
- import { FormArray, FormControl, FormGroup } from "@angular/forms";
4
- import { logMethod, setMissingKeyValue } from "kwikid-toolkit";
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "kwikui";
7
- import * as i2 from "@angular/forms";
8
- import * as i3 from "@angular/common";
9
- export class BasicSelectConfigEditor {
10
- constructor() {
11
- this.optionType = {
12
- title: "",
13
- value: ""
14
- };
15
- this.saveBasicClickCounter = 0;
16
- this.elementConfig = {
17
- options: []
18
- };
19
- this.updateElement = new EventEmitter();
20
- this.basicSelectFormGroup = undefined;
21
- }
22
- ngOnInit() {
23
- this.createBasicSelectFormGroup();
24
- }
25
- ngOnChanges(changes) {
26
- var _a;
27
- const verifyChange = (key) => {
28
- return changes.hasOwnProperty(key) && !changes[key].firstChange;
29
- };
30
- if (verifyChange("elementConfig")) {
31
- this.elementConfig = changes.elementConfig.currentValue;
32
- (_a = this.basicSelectFormGroup) === null || _a === void 0 ? void 0 : _a.reset(this.elementConfig);
33
- }
34
- if (verifyChange("saveBasicClickCounter")) {
35
- if (changes.saveBasicClickCounter.previousValue !==
36
- changes.saveBasicClickCounter.currentValue) {
37
- this.saveBasicClickCounter = changes.saveBasicClickCounter.currentValue;
38
- this.handleOnSave();
39
- }
40
- }
41
- }
42
- createBasicSelectFormGroup() {
43
- let optionsFormArray = [];
44
- this.elementConfig = setMissingKeyValue(this.elementConfig, "options", [
45
- this.optionType
46
- ]);
47
- for (let option of this.elementConfig.options) {
48
- optionsFormArray.push(this.createOptionConfigFormGroup(option));
49
- }
50
- this.basicSelectFormGroup = new FormGroup({
51
- options: new FormArray(optionsFormArray)
52
- });
53
- this.basicSelectFormGroup.updateValueAndValidity();
54
- }
55
- handleOnSave() {
56
- let basicElementConfig = this.basicSelectFormGroup.getRawValue();
57
- this.updateElement.emit({
58
- basicElementConfig: basicElementConfig
59
- });
60
- }
61
- get optionsArray() {
62
- return this.basicSelectFormGroup.get("options");
63
- }
64
- createOptionConfigFormGroup(optionConfig) {
65
- const optionFormGroup = new FormGroup({
66
- title: new FormControl(optionConfig.title, {
67
- updateOn: "change"
68
- }),
69
- value: new FormControl(optionConfig.value, {
70
- updateOn: "change"
71
- })
72
- });
73
- return optionFormGroup;
74
- }
75
- addOption() {
76
- const options = this.basicSelectFormGroup.get("options");
77
- options.push(this.createOptionConfigFormGroup(this.optionType));
78
- }
79
- removeOption(optionIndex) {
80
- const options = this.basicSelectFormGroup.get("options");
81
- if (options.length > 1) {
82
- options.removeAt(optionIndex);
83
- }
84
- else {
85
- this.addOption();
86
- // options.reset();
87
- }
88
- }
89
- }
90
- /** @nocollapse */ BasicSelectConfigEditor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BasicSelectConfigEditor, deps: [], target: i0.ɵɵFactoryTarget.Component });
91
- /** @nocollapse */ BasicSelectConfigEditor.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: BasicSelectConfigEditor, selector: "basic-select-config-editor", inputs: { saveBasicClickCounter: "saveBasicClickCounter", elementConfig: "elementConfig" }, outputs: { updateElement: "updateElement" }, usesOnChanges: true, ngImport: i0, template: `
92
- <form [formGroup]="basicSelectFormGroup">
93
- <fieldset>
94
- <legend class="form-group-title">Options</legend>
95
- <div formArrayName="options">
96
- <ng-container
97
- *ngFor="let option of optionsArray.controls; let i = index"
98
- >
99
- <div [formGroupName]="i">
100
- <div class="form-group">
101
- <kwikui-input
102
- [label]="'Title'"
103
- [id]="'basic-select-config-title'"
104
- [type]="'text'"
105
- [formControlName]="'title'"
106
- [formControl]="
107
- basicSelectFormGroup['controls'].options[
108
- 'controls'
109
- ][i]['controls'].title
110
- "
111
- [disabled]="false"
112
- [placeholder]="'Please enter your title'"
113
- [focus]="false"
114
- [invalid]="false"
115
- [case]="'default'"
116
- size="m"
117
- ></kwikui-input>
118
- </div>
119
- <div class="form-group">
120
- <kwikui-input
121
- [label]="'Value'"
122
- [id]="'basic-select-config-value'"
123
- [type]="'text'"
124
- [formControlName]="'value'"
125
- [formControl]="
126
- basicSelectFormGroup['controls'].options[
127
- 'controls'
128
- ][i]['controls'].value
129
- "
130
- [disabled]="false"
131
- [placeholder]="'Please enter your value'"
132
- [focus]="false"
133
- [invalid]="false"
134
- [case]="'default'"
135
- size="m"
136
- ></kwikui-input>
137
- </div>
138
- <div class="form-array-actions">
139
- <kwikui-button
140
- [disabled]="false"
141
- label="Remove"
142
- [showLoader]="false"
143
- styles=""
144
- class="save-button"
145
- type="button"
146
- appearance="secondary"
147
- icon=""
148
- iconRight=""
149
- [shape]="'rounded'"
150
- size="s"
151
- (onClick)="removeOption(i)"
152
- ></kwikui-button>
153
- <kwikui-button
154
- [disabled]="false"
155
- label="Add"
156
- [showLoader]="false"
157
- styles=""
158
- class="save-button"
159
- type="button"
160
- appearance="secondary"
161
- icon=""
162
- iconRight=""
163
- [shape]="'rounded'"
164
- size="s"
165
- (onClick)="addOption()"
166
- ></kwikui-button>
167
- </div>
168
- </div>
169
- </ng-container>
170
- </div>
171
- </fieldset>
172
- </form>
173
- `, isInline: true, styles: ["\n .form-array-actions {\n display: flex;\n flex-direction: row;\n align-content: center;\n justify-content: center;\n align-items: center;\n gap: 1rem;\n }\n "], components: [{ type: i1.KwikUIInputComponent, selector: "kwikui-input", inputs: ["label", "id", "type", "formControlName", "formControl", "placeholder", "focus", "invalid", "disabled", "validators", "case", "size", "icon", "properties"], outputs: ["getKeyValue"] }, { type: i1.KwikUIButtonComponent, selector: "kwikui-button", inputs: ["disabled", "id", "label", "showLoader", "styles", "class", "type", "appearance", "icon", "iconRight", "shape", "size"], outputs: ["onClick"] }], directives: [{ type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i2.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
174
- __decorate([
175
- logMethod
176
- ], BasicSelectConfigEditor.prototype, "ngOnInit", null);
177
- __decorate([
178
- logMethod
179
- ], BasicSelectConfigEditor.prototype, "ngOnChanges", null);
180
- __decorate([
181
- logMethod
182
- ], BasicSelectConfigEditor.prototype, "createBasicSelectFormGroup", null);
183
- __decorate([
184
- logMethod
185
- ], BasicSelectConfigEditor.prototype, "handleOnSave", null);
186
- __decorate([
187
- logMethod
188
- ], BasicSelectConfigEditor.prototype, "createOptionConfigFormGroup", null);
189
- __decorate([
190
- logMethod
191
- ], BasicSelectConfigEditor.prototype, "addOption", null);
192
- __decorate([
193
- logMethod
194
- ], BasicSelectConfigEditor.prototype, "removeOption", null);
195
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BasicSelectConfigEditor, decorators: [{
196
- type: Component,
197
- args: [{
198
- selector: "basic-select-config-editor",
199
- template: `
200
- <form [formGroup]="basicSelectFormGroup">
201
- <fieldset>
202
- <legend class="form-group-title">Options</legend>
203
- <div formArrayName="options">
204
- <ng-container
205
- *ngFor="let option of optionsArray.controls; let i = index"
206
- >
207
- <div [formGroupName]="i">
208
- <div class="form-group">
209
- <kwikui-input
210
- [label]="'Title'"
211
- [id]="'basic-select-config-title'"
212
- [type]="'text'"
213
- [formControlName]="'title'"
214
- [formControl]="
215
- basicSelectFormGroup['controls'].options[
216
- 'controls'
217
- ][i]['controls'].title
218
- "
219
- [disabled]="false"
220
- [placeholder]="'Please enter your title'"
221
- [focus]="false"
222
- [invalid]="false"
223
- [case]="'default'"
224
- size="m"
225
- ></kwikui-input>
226
- </div>
227
- <div class="form-group">
228
- <kwikui-input
229
- [label]="'Value'"
230
- [id]="'basic-select-config-value'"
231
- [type]="'text'"
232
- [formControlName]="'value'"
233
- [formControl]="
234
- basicSelectFormGroup['controls'].options[
235
- 'controls'
236
- ][i]['controls'].value
237
- "
238
- [disabled]="false"
239
- [placeholder]="'Please enter your value'"
240
- [focus]="false"
241
- [invalid]="false"
242
- [case]="'default'"
243
- size="m"
244
- ></kwikui-input>
245
- </div>
246
- <div class="form-array-actions">
247
- <kwikui-button
248
- [disabled]="false"
249
- label="Remove"
250
- [showLoader]="false"
251
- styles=""
252
- class="save-button"
253
- type="button"
254
- appearance="secondary"
255
- icon=""
256
- iconRight=""
257
- [shape]="'rounded'"
258
- size="s"
259
- (onClick)="removeOption(i)"
260
- ></kwikui-button>
261
- <kwikui-button
262
- [disabled]="false"
263
- label="Add"
264
- [showLoader]="false"
265
- styles=""
266
- class="save-button"
267
- type="button"
268
- appearance="secondary"
269
- icon=""
270
- iconRight=""
271
- [shape]="'rounded'"
272
- size="s"
273
- (onClick)="addOption()"
274
- ></kwikui-button>
275
- </div>
276
- </div>
277
- </ng-container>
278
- </div>
279
- </fieldset>
280
- </form>
281
- `,
282
- styles: [
283
- `
284
- .form-array-actions {
285
- display: flex;
286
- flex-direction: row;
287
- align-content: center;
288
- justify-content: center;
289
- align-items: center;
290
- gap: 1rem;
291
- }
292
- `
293
- ]
294
- }]
295
- }], ctorParameters: function () { return []; }, propDecorators: { saveBasicClickCounter: [{
296
- type: Input
297
- }], elementConfig: [{
298
- type: Input
299
- }], updateElement: [{
300
- type: Output
301
- }], ngOnInit: [], ngOnChanges: [], createBasicSelectFormGroup: [], handleOnSave: [], createOptionConfigFormGroup: [], addOption: [], removeOption: [] } });
302
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWNvbmZpZy5lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvYnVpbGRlci9lbGVtZW50LWNvbmZpZy1lZGl0b3IvZWRpdG9ycy9iYXNpYy9zZWxlY3QtY29uZmlnLmVkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQW9HL0QsTUFBTSxPQUFPLHVCQUF1QjtJQW1CbEM7UUFsQlMsZUFBVSxHQUFHO1lBQ3BCLEtBQUssRUFBRSxFQUFFO1lBQ1QsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDO1FBR0YsMEJBQXFCLEdBQVcsQ0FBQyxDQUFDO1FBR2xDLGtCQUFhLEdBQVE7WUFDbkIsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFDO1FBR0Ysa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXhDLHlCQUFvQixHQUFjLFNBQVMsQ0FBQztJQUU3QixDQUFDO0lBR2hCLFFBQVE7UUFDTixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBR0QsV0FBVyxDQUFDLE9BQXNCOztRQUNoQyxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFO1lBQ25DLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDbEUsQ0FBQyxDQUFD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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrRlQ7QUFvQ0Q7SUFEQyxTQUFTO3VEQUdUO0FBR0Q7SUFEQyxTQUFTOzBEQW9CVDtBQUdEO0lBREMsU0FBUzt5RUFnQlQ7QUFHRDtJQURDLFNBQVM7MkRBUVQ7QUFPRDtJQURDLFNBQVM7MEVBV1Q7QUFHRDtJQURDLFNBQVM7d0RBTVQ7QUFHRDtJQURDLFNBQVM7MkRBV1Q7NEZBaEhVLHVCQUF1QjtrQkFsR25DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDRCQUE0QjtvQkFDdEMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0ZUO29CQUNELE1BQU0sRUFBRTt3QkFDTjs7Ozs7Ozs7O0tBU0M7cUJBQ0Y7aUJBQ0Y7MEVBUUMscUJBQXFCO3NCQURwQixLQUFLO2dCQUlOLGFBQWE7c0JBRFosS0FBSztnQkFNTixhQUFhO3NCQURaLE1BQU07Z0JBUVAsUUFBUSxNQUtSLFdBQVcsTUFzQlgsMEJBQTBCLE1Ba0IxQixZQUFZLE1BY1osMkJBQTJCLE1BYTNCLFNBQVMsTUFRVCxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBsb2dNZXRob2QsIHNldE1pc3NpbmdLZXlWYWx1ZSB9IGZyb20gXCJrd2lraWQtdG9vbGtpdFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYmFzaWMtc2VsZWN0LWNvbmZpZy1lZGl0b3JcIixcbiAgdGVtcGxhdGU6IGBcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImJhc2ljU2VsZWN0Rm9ybUdyb3VwXCI+XG4gICAgICA8ZmllbGRzZXQ+XG4gICAgICAgIDxsZWdlbmQgY2xhc3M9XCJmb3JtLWdyb3VwLXRpdGxlXCI+T3B0aW9uczwvbGVnZW5kPlxuICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJvcHRpb25zXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zQXJyYXkuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgIDxrd2lrdWktaW5wdXRcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInVGl0bGUnXCJcbiAgICAgICAgICAgICAgICAgIFtpZF09XCInYmFzaWMtc2VsZWN0LWNvbmZpZy10aXRsZSdcIlxuICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiJ3RpdGxlJ1wiXG4gICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiXG4gICAgICAgICAgICAgICAgICAgIGJhc2ljU2VsZWN0Rm9ybUdyb3VwWydjb250cm9scyddLm9wdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgJ2NvbnRyb2xzJ1xuICAgICAgICAgICAgICAgICAgICBdW2ldWydjb250cm9scyddLnRpdGxlXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInUGxlYXNlIGVudGVyIHlvdXIgdGl0bGUnXCJcbiAgICAgICAgICAgICAgICAgIFtmb2N1c109XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICBbaW52YWxpZF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICBbY2FzZV09XCInZGVmYXVsdCdcIlxuICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgPGt3aWt1aS1pbnB1dFxuICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidWYWx1ZSdcIlxuICAgICAgICAgICAgICAgICAgW2lkXT1cIidiYXNpYy1zZWxlY3QtY29uZmlnLXZhbHVlJ1wiXG4gICAgICAgICAgICAgICAgICBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCIndmFsdWUnXCJcbiAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJcbiAgICAgICAgICAgICAgICAgICAgYmFzaWNTZWxlY3RGb3JtR3JvdXBbJ2NvbnRyb2xzJ10ub3B0aW9uc1tcbiAgICAgICAgICAgICAgICAgICAgICAnY29udHJvbHMnXG4gICAgICAgICAgICAgICAgICAgIF1baV1bJ2NvbnRyb2xzJ10udmFsdWVcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidQbGVhc2UgZW50ZXIgeW91ciB2YWx1ZSdcIlxuICAgICAgICAgICAgICAgICAgW2ZvY3VzXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtjYXNlXT1cIidkZWZhdWx0J1wiXG4gICAgICAgICAgICAgICAgICBzaXplPVwibVwiXG4gICAgICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tYXJyYXktYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDxrd2lrdWktYnV0dG9uXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgbGFiZWw9XCJSZW1vdmVcIlxuICAgICAgICAgICAgICAgICAgW3Nob3dMb2FkZXJdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgc3R5bGVzPVwiXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2F2ZS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgIGljb249XCJcIlxuICAgICAgICAgICAgICAgICAgaWNvblJpZ2h0PVwiXCJcbiAgICAgICAgICAgICAgICAgIFtzaGFwZV09XCIncm91bmRlZCdcIlxuICAgICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwicmVtb3ZlT3B0aW9uKGkpXCJcbiAgICAgICAgICAgICAgICA+PC9rd2lrdWktYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxrd2lrdWktYnV0dG9uXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgbGFiZWw9XCJBZGRcIlxuICAgICAgICAgICAgICAgICAgW3Nob3dMb2FkZXJdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgc3R5bGVzPVwiXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2F2ZS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgIGljb249XCJcIlxuICAgICAgICAgICAgICAgICAgaWNvblJpZ2h0PVwiXCJcbiAgICAgICAgICAgICAgICAgIFtzaGFwZV09XCIncm91bmRlZCdcIlxuICAgICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiYWRkT3B0aW9uKClcIlxuICAgICAgICAgICAgICAgID48L2t3aWt1aS1idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9maWVsZHNldD5cbiAgICA8L2Zvcm0+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5mb3JtLWFycmF5LWFjdGlvbnMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDFyZW07XG4gICAgICB9XG4gICAgYFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEJhc2ljU2VsZWN0Q29uZmlnRWRpdG9yIGltcGxlbWVudHMgT25Jbml0IHtcbiAgcmVhZG9ubHkgb3B0aW9uVHlwZSA9IHtcbiAgICB0aXRsZTogXCJcIixcbiAgICB2YWx1ZTogXCJcIlxuICB9O1xuXG4gIEBJbnB1dCgpXG4gIHNhdmVCYXNpY0NsaWNrQ291bnRlcjogbnVtYmVyID0gMDtcblxuICBASW5wdXQoKVxuICBlbGVtZW50Q29uZmlnOiBhbnkgPSB7XG4gICAgb3B0aW9uczogW11cbiAgfTtcblxuICBAT3V0cHV0KClcbiAgdXBkYXRlRWxlbWVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGJhc2ljU2VsZWN0Rm9ybUdyb3VwOiBGb3JtR3JvdXAgPSB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIEBsb2dNZXRob2RcbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jcmVhdGVCYXNpY1NlbGVjdEZvcm1Hcm91cCgpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgY29uc3QgdmVyaWZ5Q2hhbmdlID0gKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICFjaGFuZ2VzW2tleV0uZmlyc3RDaGFuZ2U7XG4gICAgfTtcblxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJlbGVtZW50Q29uZmlnXCIpKSB7XG4gICAgICB0aGlzLmVsZW1lbnRDb25maWcgPSBjaGFuZ2VzLmVsZW1lbnRDb25maWcuY3VycmVudFZhbHVlO1xuICAgICAgdGhpcy5iYXNpY1NlbGVjdEZvcm1Hcm91cD8ucmVzZXQodGhpcy5lbGVtZW50Q29uZmlnKTtcbiAgICB9XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcInNhdmVCYXNpY0NsaWNrQ291bnRlclwiKSkge1xuICAgICAgaWYgKFxuICAgICAgICBjaGFuZ2VzLnNhdmVCYXNpY0NsaWNrQ291bnRlci5wcmV2aW91c1ZhbHVlICE9PVxuICAgICAgICBjaGFuZ2VzLnNhdmVCYXNpY0NsaWNrQ291bnRlci5jdXJyZW50VmFsdWVcbiAgICAgICkge1xuICAgICAgICB0aGlzLnNhdmVCYXNpY0NsaWNrQ291bnRlciA9IGNoYW5nZXMuc2F2ZUJhc2ljQ2xpY2tDb3VudGVyLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgICB0aGlzLmhhbmRsZU9uU2F2ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgY3JlYXRlQmFzaWNTZWxlY3RGb3JtR3JvdXAoKTogdm9pZCB7XG4gICAgbGV0IG9wdGlvbnNGb3JtQXJyYXkgPSBbXTtcblxuICAgIHRoaXMuZWxlbWVudENvbmZpZyA9IHNldE1pc3NpbmdLZXlWYWx1ZSh0aGlzLmVsZW1lbnRDb25maWcsIFwib3B0aW9uc1wiLCBbXG4gICAgICB0aGlzLm9wdGlvblR5cGVcbiAgICBdKTtcblxuICAgIGZvciAobGV0IG9wdGlvbiBvZiB0aGlzLmVsZW1lbnRDb25maWcub3B0aW9ucykge1xuICAgICAgb3B0aW9uc0Zvcm1BcnJheS5wdXNoKHRoaXMuY3JlYXRlT3B0aW9uQ29uZmlnRm9ybUdyb3VwKG9wdGlvbikpO1xuICAgIH1cblxuICAgIHRoaXMuYmFzaWNTZWxlY3RGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgIG9wdGlvbnM6IG5ldyBGb3JtQXJyYXkob3B0aW9uc0Zvcm1BcnJheSlcbiAgICB9KTtcbiAgICB0aGlzLmJhc2ljU2VsZWN0Rm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25TYXZlKCkge1xuICAgIGxldCBiYXNpY0VsZW1lbnRDb25maWcgPVxuICAgICAgdGhpcy5iYXNpY1NlbGVjdEZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuXG4gICAgdGhpcy51cGRhdGVFbGVtZW50LmVtaXQoe1xuICAgICAgYmFzaWNFbGVtZW50Q29uZmlnOiBiYXNpY0VsZW1lbnRDb25maWdcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBvcHRpb25zQXJyYXkoKTogRm9ybUFycmF5IHtcbiAgICByZXR1cm4gdGhpcy5iYXNpY1NlbGVjdEZvcm1Hcm91cC5nZXQoXCJvcHRpb25zXCIpIGFzIEZvcm1BcnJheTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgY3JlYXRlT3B0aW9uQ29uZmlnRm9ybUdyb3VwKG9wdGlvbkNvbmZpZzogYW55KTogRm9ybUdyb3VwIHtcbiAgICBjb25zdCBvcHRpb25Gb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgIHRpdGxlOiBuZXcgRm9ybUNvbnRyb2wob3B0aW9uQ29uZmlnLnRpdGxlLCB7XG4gICAgICAgIHVwZGF0ZU9uOiBcImNoYW5nZVwiXG4gICAgICB9KSxcbiAgICAgIHZhbHVlOiBuZXcgRm9ybUNvbnRyb2wob3B0aW9uQ29uZmlnLnZhbHVlLCB7XG4gICAgICAgIHVwZGF0ZU9uOiBcImNoYW5nZVwiXG4gICAgICB9KVxuICAgIH0pO1xuICAgIHJldHVybiBvcHRpb25Gb3JtR3JvdXA7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFkZE9wdGlvbigpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5iYXNpY1NlbGVjdEZvcm1Hcm91cC5nZXQoXG4gICAgICBcIm9wdGlvbnNcIlxuICAgICkgYXMgRm9ybUFycmF5O1xuICAgIG9wdGlvbnMucHVzaCh0aGlzLmNyZWF0ZU9wdGlvbkNvbmZpZ0Zvcm1Hcm91cCh0aGlzLm9wdGlvblR5cGUpKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgcmVtb3ZlT3B0aW9uKG9wdGlvbkluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5iYXNpY1NlbGVjdEZvcm1Hcm91cC5nZXQoXG4gICAgICBcIm9wdGlvbnNcIlxuICAgICkgYXMgRm9ybUFycmF5O1xuICAgIGlmIChvcHRpb25zLmxlbmd0aCA+IDEpIHtcbiAgICAgIG9wdGlvbnMucmVtb3ZlQXQob3B0aW9uSW5kZXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZE9wdGlvbigpO1xuICAgICAgLy8gb3B0aW9ucy5yZXNldCgpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,132 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { Component, EventEmitter, Input, Output } from "@angular/core";
3
- import { FormControl, FormGroup } from "@angular/forms";
4
- import { logMethod } from "kwikid-toolkit";
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "kwikui";
7
- import * as i2 from "@angular/forms";
8
- export class BasicTextConfigEditor {
9
- constructor() {
10
- this.saveBasicClickCounter = 0;
11
- this.elementConfig = {
12
- properties: {
13
- case: "default"
14
- }
15
- };
16
- this.updateElement = new EventEmitter();
17
- this.basicTextFormGroup = undefined;
18
- }
19
- ngOnInit() {
20
- this.createBasicTextFormGroup();
21
- }
22
- ngOnChanges(changes) {
23
- var _a;
24
- const verifyChange = (key) => {
25
- return changes.hasOwnProperty(key) && !changes[key].firstChange;
26
- };
27
- if (verifyChange("elementConfig")) {
28
- this.elementConfig = changes.elementConfig.currentValue;
29
- (_a = this.basicTextFormGroup) === null || _a === void 0 ? void 0 : _a.reset(this.elementConfig);
30
- }
31
- if (verifyChange("saveBasicClickCounter")) {
32
- if (changes.saveBasicClickCounter.previousValue !==
33
- changes.saveBasicClickCounter.currentValue) {
34
- this.saveBasicClickCounter = changes.saveBasicClickCounter.currentValue;
35
- this.handleOnSave();
36
- }
37
- }
38
- }
39
- createBasicTextFormGroup() {
40
- this.basicTextFormGroup = new FormGroup({
41
- properties: new FormGroup({
42
- case: new FormControl(this.elementConfig.properties.case, {
43
- updateOn: "change"
44
- })
45
- })
46
- });
47
- this.basicTextFormGroup.updateValueAndValidity();
48
- }
49
- handleOnSave() {
50
- let basicElementConfig = this.basicTextFormGroup.getRawValue();
51
- this.updateElement.emit({
52
- basicElementConfig: basicElementConfig
53
- });
54
- }
55
- }
56
- /** @nocollapse */ BasicTextConfigEditor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BasicTextConfigEditor, deps: [], target: i0.ɵɵFactoryTarget.Component });
57
- /** @nocollapse */ BasicTextConfigEditor.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: BasicTextConfigEditor, selector: "basic-text-config-editor", inputs: { saveBasicClickCounter: "saveBasicClickCounter", elementConfig: "elementConfig" }, outputs: { updateElement: "updateElement" }, usesOnChanges: true, ngImport: i0, template: `
58
- <form [formGroup]="basicTextFormGroup">
59
- <div formGroupName="properties">
60
- <fieldset>
61
- <legend class="form-group-title">Miscellaneous</legend>
62
- <div class="form-group">
63
- <kwikui-input-select
64
- [options]="['default', 'upper', 'lower']"
65
- [label]="'case'"
66
- [id]="'basic-text-config-case'"
67
- size="m"
68
- [formControlName]="'case'"
69
- [formControl]="
70
- basicTextFormGroup['controls'].properties['controls'].case
71
- "
72
- [focus]="false"
73
- [disabled]="false"
74
- [invalid]="false"
75
- [placeholder]="'Please select either true or false'"
76
- ></kwikui-input-select>
77
- </div>
78
- </fieldset>
79
- </div>
80
- </form>
81
- `, isInline: true, styles: [""], components: [{ type: i1.KwikUIInputSelectComponent, selector: "kwikui-input-select", inputs: ["label", "id", "formControlName", "formControl", "placeholder", "focus", "invalid", "disabled", "options", "size", "validators", "properties"], outputs: ["getKeyValue"] }], directives: [{ type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i2.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
82
- __decorate([
83
- logMethod
84
- ], BasicTextConfigEditor.prototype, "ngOnInit", null);
85
- __decorate([
86
- logMethod
87
- ], BasicTextConfigEditor.prototype, "ngOnChanges", null);
88
- __decorate([
89
- logMethod
90
- ], BasicTextConfigEditor.prototype, "createBasicTextFormGroup", null);
91
- __decorate([
92
- logMethod
93
- ], BasicTextConfigEditor.prototype, "handleOnSave", null);
94
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BasicTextConfigEditor, decorators: [{
95
- type: Component,
96
- args: [{
97
- selector: "basic-text-config-editor",
98
- template: `
99
- <form [formGroup]="basicTextFormGroup">
100
- <div formGroupName="properties">
101
- <fieldset>
102
- <legend class="form-group-title">Miscellaneous</legend>
103
- <div class="form-group">
104
- <kwikui-input-select
105
- [options]="['default', 'upper', 'lower']"
106
- [label]="'case'"
107
- [id]="'basic-text-config-case'"
108
- size="m"
109
- [formControlName]="'case'"
110
- [formControl]="
111
- basicTextFormGroup['controls'].properties['controls'].case
112
- "
113
- [focus]="false"
114
- [disabled]="false"
115
- [invalid]="false"
116
- [placeholder]="'Please select either true or false'"
117
- ></kwikui-input-select>
118
- </div>
119
- </fieldset>
120
- </div>
121
- </form>
122
- `,
123
- styles: [``]
124
- }]
125
- }], ctorParameters: function () { return []; }, propDecorators: { saveBasicClickCounter: [{
126
- type: Input
127
- }], elementConfig: [{
128
- type: Input
129
- }], updateElement: [{
130
- type: Output
131
- }], ngOnInit: [], ngOnChanges: [], createBasicTextFormGroup: [], handleOnSave: [] } });
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1jb25maWcuZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1mb3Jtcy9zcmMvbGliL2J1aWxkZXIvZWxlbWVudC1jb25maWctZWRpdG9yL2VkaXRvcnMvYmFzaWMvdGV4dC1jb25maWcuZWRpdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQStCM0MsTUFBTSxPQUFPLHFCQUFxQjtJQWdCaEM7UUFkQSwwQkFBcUIsR0FBVyxDQUFDLENBQUM7UUFHbEMsa0JBQWEsR0FBUTtZQUNuQixVQUFVLEVBQUU7Z0JBQ1YsSUFBSSxFQUFFLFNBQVM7YUFDaEI7U0FDRixDQUFDO1FBR0Ysa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXhDLHVCQUFrQixHQUFjLFNBQVMsQ0FBQztJQUUzQixDQUFDO0lBR2hCLFFBQVE7UUFDTixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBR0QsV0FBVyxDQUFDLE9BQXNCOztRQUNoQyxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFO1lBQ25DLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDbEUsQ0FBQyxDQUFDO1FBRUYsSUFBSSxZQUFZLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDakMsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQztZQUN4RCxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNwRDtRQUNELElBQUksWUFBWSxDQUFDLHVCQUF1QixDQUFDLEVBQUU7WUFDekMsSUFDRSxPQUFPLENBQUMscUJBQXFCLENBQUMsYUFBYTtnQkFDM0MsT0FBTyxDQUFDLHFCQUFxQixDQUFDLFlBQVksRUFDMUM7Z0JBQ0EsSUFBSSxDQUFDLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLENBQUM7Z0JBRXhFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzthQUNyQjtTQUNGO0lBQ0gsQ0FBQztJQUdELHdCQUF3QjtRQUN0QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxTQUFTLENBQUM7WUFDdEMsVUFBVSxFQUFFLElBQUksU0FBUyxDQUFDO2dCQUN4QixJQUFJLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFO29CQUN4RCxRQUFRLEVBQUUsUUFBUTtpQkFDbkIsQ0FBQzthQUNILENBQUM7U0FDSCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBR0QsWUFBWTtRQUNWLElBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRS9ELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO1lBQ3RCLGtCQUFrQixFQUFFLGtCQUFrQjtTQUN2QyxDQUFDLENBQUM7SUFDTCxDQUFDOztzSUFoRVUscUJBQXFCOzBIQUFyQixxQkFBcUIsOE5BM0J0Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JUO0FBc0JEO0lBREMsU0FBUztxREFHVDtBQUdEO0lBREMsU0FBUzt3REFvQlQ7QUFHRDtJQURDLFNBQVM7cUVBVVQ7QUFHRDtJQURDLFNBQVM7eURBT1Q7NEZBaEVVLHFCQUFxQjtrQkE3QmpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDBCQUEwQjtvQkFDcEMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3QlQ7b0JBQ0QsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO2lCQUNiOzBFQUdDLHFCQUFxQjtzQkFEcEIsS0FBSztnQkFJTixhQUFhO3NCQURaLEtBQUs7Z0JBUU4sYUFBYTtzQkFEWixNQUFNO2dCQVFQLFFBQVEsTUFLUixXQUFXLE1Bc0JYLHdCQUF3QixNQVl4QixZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgbG9nTWV0aG9kIH0gZnJvbSBcImt3aWtpZC10b29sa2l0XCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJiYXNpYy10ZXh0LWNvbmZpZy1lZGl0b3JcIixcbiAgdGVtcGxhdGU6IGBcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImJhc2ljVGV4dEZvcm1Hcm91cFwiPlxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPVwicHJvcGVydGllc1wiPlxuICAgICAgICA8ZmllbGRzZXQ+XG4gICAgICAgICAgPGxlZ2VuZCBjbGFzcz1cImZvcm0tZ3JvdXAtdGl0bGVcIj5NaXNjZWxsYW5lb3VzPC9sZWdlbmQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtc2VsZWN0XG4gICAgICAgICAgICAgIFtvcHRpb25zXT1cIlsnZGVmYXVsdCcsICd1cHBlcicsICdsb3dlciddXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIidjYXNlJ1wiXG4gICAgICAgICAgICAgIFtpZF09XCInYmFzaWMtdGV4dC1jb25maWctY2FzZSdcIlxuICAgICAgICAgICAgICBzaXplPVwibVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiJ2Nhc2UnXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cIlxuICAgICAgICAgICAgICAgIGJhc2ljVGV4dEZvcm1Hcm91cFsnY29udHJvbHMnXS5wcm9wZXJ0aWVzWydjb250cm9scyddLmNhc2VcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1BsZWFzZSBzZWxlY3QgZWl0aGVyIHRydWUgb3IgZmFsc2UnXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+XG4gIGAsXG4gIHN0eWxlczogW2BgXVxufSlcbmV4cG9ydCBjbGFzcyBCYXNpY1RleHRDb25maWdFZGl0b3IgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKVxuICBzYXZlQmFzaWNDbGlja0NvdW50ZXI6IG51bWJlciA9IDA7XG5cbiAgQElucHV0KClcbiAgZWxlbWVudENvbmZpZzogYW55ID0ge1xuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIGNhc2U6IFwiZGVmYXVsdFwiXG4gICAgfVxuICB9O1xuXG4gIEBPdXRwdXQoKVxuICB1cGRhdGVFbGVtZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgYmFzaWNUZXh0Rm9ybUdyb3VwOiBGb3JtR3JvdXAgPSB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIEBsb2dNZXRob2RcbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jcmVhdGVCYXNpY1RleHRGb3JtR3JvdXAoKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGNvbnN0IHZlcmlmeUNoYW5nZSA9IChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgcmV0dXJuIGNoYW5nZXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhY2hhbmdlc1trZXldLmZpcnN0Q2hhbmdlO1xuICAgIH07XG5cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiZWxlbWVudENvbmZpZ1wiKSkge1xuICAgICAgdGhpcy5lbGVtZW50Q29uZmlnID0gY2hhbmdlcy5lbGVtZW50Q29uZmlnLmN1cnJlbnRWYWx1ZTtcbiAgICAgIHRoaXMuYmFzaWNUZXh0Rm9ybUdyb3VwPy5yZXNldCh0aGlzLmVsZW1lbnRDb25maWcpO1xuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwic2F2ZUJhc2ljQ2xpY2tDb3VudGVyXCIpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNoYW5nZXMuc2F2ZUJhc2ljQ2xpY2tDb3VudGVyLnByZXZpb3VzVmFsdWUgIT09XG4gICAgICAgIGNoYW5nZXMuc2F2ZUJhc2ljQ2xpY2tDb3VudGVyLmN1cnJlbnRWYWx1ZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc2F2ZUJhc2ljQ2xpY2tDb3VudGVyID0gY2hhbmdlcy5zYXZlQmFzaWNDbGlja0NvdW50ZXIuY3VycmVudFZhbHVlO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlT25TYXZlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBjcmVhdGVCYXNpY1RleHRGb3JtR3JvdXAoKTogdm9pZCB7XG4gICAgdGhpcy5iYXNpY1RleHRGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgIHByb3BlcnRpZXM6IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICBjYXNlOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5lbGVtZW50Q29uZmlnLnByb3BlcnRpZXMuY2FzZSwge1xuICAgICAgICAgIHVwZGF0ZU9uOiBcImNoYW5nZVwiXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0pO1xuICAgIHRoaXMuYmFzaWNUZXh0Rm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25TYXZlKCkge1xuICAgIGxldCBiYXNpY0VsZW1lbnRDb25maWcgPSB0aGlzLmJhc2ljVGV4dEZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuXG4gICAgdGhpcy51cGRhdGVFbGVtZW50LmVtaXQoe1xuICAgICAgYmFzaWNFbGVtZW50Q29uZmlnOiBiYXNpY0VsZW1lbnRDb25maWdcbiAgICB9KTtcbiAgfVxufVxuIl19