@mosaicoo/form-angular 0.5.0 → 0.6.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 +17 -0
- package/fesm2022/mosaicoo-form-angular-designer.mjs +589 -95
- package/fesm2022/mosaicoo-form-angular-designer.mjs.map +1 -1
- package/fesm2022/mosaicoo-form-angular-material.mjs +2 -0
- package/fesm2022/mosaicoo-form-angular-material.mjs.map +1 -1
- package/fesm2022/mosaicoo-form-angular.mjs +197 -54
- package/fesm2022/mosaicoo-form-angular.mjs.map +1 -1
- package/package.json +2 -2
- package/types/mosaicoo-form-angular-designer.d.ts +65 -2
- package/types/mosaicoo-form-angular.d.ts +12 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { NgComponentOutlet, DOCUMENT } from '@angular/common';
|
|
1
|
+
import { NgComponentOutlet, NgTemplateOutlet, DOCUMENT } from '@angular/common';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
3
|
import { InjectionToken, makeEnvironmentProviders, input, signal, inject, ChangeDetectorRef, reflectComponentType, effect, untracked, computed, ViewEncapsulation, ChangeDetectionStrategy, Component, output } from '@angular/core';
|
|
4
4
|
import { maskValue, importForm, createLegacyImporter, createFormEngine, collectInputs } from '@mosaicoo/form-core';
|
|
@@ -40,6 +40,13 @@ function provideMosaicooForm(config) {
|
|
|
40
40
|
return makeEnvironmentProviders(providers);
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
+
function formatBytes(bytes) {
|
|
44
|
+
if (bytes >= 1024 * 1024)
|
|
45
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
46
|
+
if (bytes >= 1024)
|
|
47
|
+
return `${Math.round(bytes / 1024)} KB`;
|
|
48
|
+
return `${bytes} B`;
|
|
49
|
+
}
|
|
43
50
|
/**
|
|
44
51
|
* Renders one schema node (input, container or static) and recurses into
|
|
45
52
|
* children. State lives in the headless engine — this component only projects
|
|
@@ -340,7 +347,19 @@ class FormNodeComponent {
|
|
|
340
347
|
}
|
|
341
348
|
}
|
|
342
349
|
setSelect(event) {
|
|
343
|
-
|
|
350
|
+
const select = event.target;
|
|
351
|
+
if (this.field().multiple) {
|
|
352
|
+
this.setValue(Array.from(select.selectedOptions, (option) => option.value));
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
355
|
+
this.setValue(select.value);
|
|
356
|
+
}
|
|
357
|
+
/** Selection state for single and multi-value choice fields. */
|
|
358
|
+
isSelected(optionValue) {
|
|
359
|
+
const value = this.value();
|
|
360
|
+
if (Array.isArray(value))
|
|
361
|
+
return value.some((item) => `${item}` === `${optionValue}`);
|
|
362
|
+
return this.stringValue() === `${optionValue}`;
|
|
344
363
|
}
|
|
345
364
|
setChecked(event) {
|
|
346
365
|
this.setValue(event.target.checked);
|
|
@@ -349,19 +368,48 @@ class FormNodeComponent {
|
|
|
349
368
|
const checked = event.target.checked;
|
|
350
369
|
this.setValue({ ...this.mapValue(), [option]: checked });
|
|
351
370
|
}
|
|
371
|
+
/** Client-side rejection message (size/type), cleared on the next pick. */
|
|
372
|
+
fileRejection = signal(null, ...(ngDevMode ? [{ debugName: "fileRejection" }] : /* istanbul ignore next */ []));
|
|
373
|
+
acceptAttr() {
|
|
374
|
+
const accept = this.field().files?.accept;
|
|
375
|
+
if (accept)
|
|
376
|
+
return accept;
|
|
377
|
+
return this.field().type === 'image' ? 'image/*' : null;
|
|
378
|
+
}
|
|
352
379
|
setFiles(event) {
|
|
353
|
-
const
|
|
354
|
-
const
|
|
355
|
-
|
|
380
|
+
const input = event.target;
|
|
381
|
+
const picked = input.files ? Array.from(input.files) : [];
|
|
382
|
+
this.fileRejection.set(null);
|
|
383
|
+
if (picked.length === 0)
|
|
384
|
+
return;
|
|
385
|
+
// Client-side guards give immediate feedback; the back end stays the
|
|
386
|
+
// authoritative check (file COUNT is a real rule via maxLength).
|
|
387
|
+
const maxSize = this.field().files?.maxSize;
|
|
388
|
+
const tooBig = maxSize ? picked.filter((file) => file.size > maxSize) : [];
|
|
389
|
+
const list = maxSize ? picked.filter((file) => file.size <= maxSize) : picked;
|
|
390
|
+
if (tooBig.length > 0) {
|
|
391
|
+
this.fileRejection.set(`${tooBig.map((f) => f.name).join(', ')} — above ${formatBytes(maxSize)}`);
|
|
392
|
+
}
|
|
393
|
+
if (list.length === 0) {
|
|
394
|
+
input.value = '';
|
|
395
|
+
return;
|
|
396
|
+
}
|
|
397
|
+
const previous = this.fileEntries();
|
|
398
|
+
const append = this.field().multiple !== false;
|
|
399
|
+
if (!this.uploader) {
|
|
356
400
|
// no host uploader: only file names are stored
|
|
357
|
-
|
|
401
|
+
const names = list.map((f) => f.name);
|
|
402
|
+
this.setValue(append ? [...previous.map((e) => e.name), ...names] : names);
|
|
358
403
|
return;
|
|
359
404
|
}
|
|
360
405
|
const field = this.field();
|
|
361
406
|
const path = this.path();
|
|
362
407
|
this.uploading.set(true);
|
|
363
408
|
Promise.all(list.map((file) => this.uploader(file, { field, path })))
|
|
364
|
-
.then((refs) =>
|
|
409
|
+
.then((refs) => {
|
|
410
|
+
const current = append ? this.value() ?? [] : [];
|
|
411
|
+
this.setValue([...current, ...refs]);
|
|
412
|
+
})
|
|
365
413
|
.catch(() => { }) // host upload failure keeps the previous value
|
|
366
414
|
.finally(() => {
|
|
367
415
|
this.uploading.set(false);
|
|
@@ -369,14 +417,37 @@ class FormNodeComponent {
|
|
|
369
417
|
this.notify()();
|
|
370
418
|
});
|
|
371
419
|
}
|
|
372
|
-
/**
|
|
373
|
-
|
|
420
|
+
/** Normalized view of the stored value: name + optional preview url. */
|
|
421
|
+
fileEntries() {
|
|
374
422
|
const value = this.value();
|
|
375
423
|
if (!Array.isArray(value))
|
|
376
424
|
return [];
|
|
377
|
-
return value.map((item) =>
|
|
378
|
-
|
|
379
|
-
|
|
425
|
+
return value.map((item) => {
|
|
426
|
+
if (typeof item === 'object' && item !== null) {
|
|
427
|
+
const ref = item;
|
|
428
|
+
return {
|
|
429
|
+
name: String(ref.name ?? ''),
|
|
430
|
+
url: typeof ref.url === 'string' ? ref.url : null,
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
const name = String(item);
|
|
434
|
+
// A bare string that already looks like a URL doubles as the preview.
|
|
435
|
+
return { name, url: /^(https?:|data:image\/|blob:)/.test(name) ? name : null };
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
showThumbnails() {
|
|
439
|
+
const field = this.field();
|
|
440
|
+
if (field.files?.preview === false)
|
|
441
|
+
return false;
|
|
442
|
+
return field.type === 'image' || field.files?.preview === true;
|
|
443
|
+
}
|
|
444
|
+
removeFile(index) {
|
|
445
|
+
const value = this.value();
|
|
446
|
+
if (!Array.isArray(value))
|
|
447
|
+
return;
|
|
448
|
+
const next = [...value];
|
|
449
|
+
next.splice(index, 1);
|
|
450
|
+
this.setValue(next);
|
|
380
451
|
}
|
|
381
452
|
prefix() {
|
|
382
453
|
const value = this.node().props?.['prefix'];
|
|
@@ -625,17 +696,21 @@ class FormNodeComponent {
|
|
|
625
696
|
class="mform-control"
|
|
626
697
|
[id]="controlId()"
|
|
627
698
|
[disabled]="controlDisabled()"
|
|
699
|
+
[multiple]="field().multiple === true"
|
|
700
|
+
[attr.size]="field().multiple ? 5 : null"
|
|
628
701
|
[attr.aria-required]="required() || null"
|
|
629
702
|
[attr.aria-invalid]="errors().length > 0 || null"
|
|
630
703
|
[attr.aria-describedby]="describedBy()"
|
|
631
704
|
(change)="setSelect($event)"
|
|
632
705
|
(blur)="touch()"
|
|
633
706
|
>
|
|
634
|
-
|
|
707
|
+
@if (!field().multiple) {
|
|
708
|
+
<option value="" [selected]="stringValue() === ''"></option>
|
|
709
|
+
}
|
|
635
710
|
@for (option of options(); track option.value) {
|
|
636
711
|
<option
|
|
637
712
|
[value]="option.value"
|
|
638
|
-
[selected]="
|
|
713
|
+
[selected]="isSelected(option.value)"
|
|
639
714
|
>
|
|
640
715
|
{{ option.label }}
|
|
641
716
|
</option>
|
|
@@ -720,23 +795,10 @@ class FormNodeComponent {
|
|
|
720
795
|
</div>
|
|
721
796
|
}
|
|
722
797
|
@case ('file') {
|
|
723
|
-
<
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
[id]="controlId()"
|
|
728
|
-
[disabled]="controlDisabled() || uploading()"
|
|
729
|
-
[attr.aria-busy]="uploading() || null"
|
|
730
|
-
[attr.aria-describedby]="describedBy()"
|
|
731
|
-
(change)="setFiles($event)"
|
|
732
|
-
(blur)="touch()"
|
|
733
|
-
/>
|
|
734
|
-
@if (uploading()) {
|
|
735
|
-
<div class="mform-desc" role="status">Uploading…</div>
|
|
736
|
-
}
|
|
737
|
-
@for (name of fileNames(); track $index) {
|
|
738
|
-
<div class="mform-file-name">📎 {{ name }}</div>
|
|
739
|
-
}
|
|
798
|
+
<ng-container *ngTemplateOutlet="fileControl" />
|
|
799
|
+
}
|
|
800
|
+
@case ('image') {
|
|
801
|
+
<ng-container *ngTemplateOutlet="fileControl" />
|
|
740
802
|
}
|
|
741
803
|
@case ('reference') {
|
|
742
804
|
<div class="mform-reference">
|
|
@@ -811,7 +873,52 @@ class FormNodeComponent {
|
|
|
811
873
|
}
|
|
812
874
|
}
|
|
813
875
|
}
|
|
814
|
-
|
|
876
|
+
|
|
877
|
+
<!-- File/image control: same markup for both types, thumbnails when the
|
|
878
|
+
stored reference points at an image. -->
|
|
879
|
+
<ng-template #fileControl>
|
|
880
|
+
<input
|
|
881
|
+
class="mform-control"
|
|
882
|
+
type="file"
|
|
883
|
+
[id]="controlId()"
|
|
884
|
+
[multiple]="field().multiple !== false"
|
|
885
|
+
[attr.accept]="acceptAttr()"
|
|
886
|
+
[disabled]="controlDisabled() || uploading()"
|
|
887
|
+
[attr.aria-busy]="uploading() || null"
|
|
888
|
+
[attr.aria-describedby]="describedBy()"
|
|
889
|
+
(change)="setFiles($event)"
|
|
890
|
+
(blur)="touch()"
|
|
891
|
+
/>
|
|
892
|
+
@if (uploading()) {
|
|
893
|
+
<div class="mform-desc" role="status">Uploading…</div>
|
|
894
|
+
}
|
|
895
|
+
@if (fileRejection(); as rejection) {
|
|
896
|
+
<div class="mform-error" role="alert">{{ rejection }}</div>
|
|
897
|
+
}
|
|
898
|
+
@if (fileEntries().length > 0) {
|
|
899
|
+
<ul class="mform-files" [class.is-gallery]="showThumbnails()">
|
|
900
|
+
@for (entry of fileEntries(); track $index; let i = $index) {
|
|
901
|
+
<li class="mform-file">
|
|
902
|
+
@if (showThumbnails() && entry.url) {
|
|
903
|
+
<img class="mform-thumb" [src]="entry.url" [alt]="entry.name" loading="lazy" />
|
|
904
|
+
} @else {
|
|
905
|
+
<span class="mform-file-icon" aria-hidden="true">📎</span>
|
|
906
|
+
}
|
|
907
|
+
<span class="mform-file-name" [title]="entry.name">{{ entry.name }}</span>
|
|
908
|
+
@if (interactive()) {
|
|
909
|
+
<button
|
|
910
|
+
type="button"
|
|
911
|
+
class="mform-file-remove"
|
|
912
|
+
(click)="removeFile(i)"
|
|
913
|
+
[attr.aria-label]="'Remove ' + entry.name"
|
|
914
|
+
>✕</button>
|
|
915
|
+
}
|
|
916
|
+
</li>
|
|
917
|
+
}
|
|
918
|
+
</ul>
|
|
919
|
+
}
|
|
920
|
+
</ng-template>
|
|
921
|
+
`, isInline: true, dependencies: [{ kind: "component", type: FormNodeComponent, selector: "mform-node", inputs: ["node", "engine", "tick", "scope", "bare", "providers", "mode", "notify"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
815
922
|
}
|
|
816
923
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: FormNodeComponent, decorators: [{
|
|
817
924
|
type: Component,
|
|
@@ -820,7 +927,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImpo
|
|
|
820
927
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
821
928
|
encapsulation: ViewEncapsulation.None,
|
|
822
929
|
host: { class: 'mform-node' },
|
|
823
|
-
imports: [NgComponentOutlet],
|
|
930
|
+
imports: [NgComponentOutlet, NgTemplateOutlet],
|
|
824
931
|
template: `
|
|
825
932
|
@let n = node();
|
|
826
933
|
@if (visible()) {
|
|
@@ -969,17 +1076,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImpo
|
|
|
969
1076
|
class="mform-control"
|
|
970
1077
|
[id]="controlId()"
|
|
971
1078
|
[disabled]="controlDisabled()"
|
|
1079
|
+
[multiple]="field().multiple === true"
|
|
1080
|
+
[attr.size]="field().multiple ? 5 : null"
|
|
972
1081
|
[attr.aria-required]="required() || null"
|
|
973
1082
|
[attr.aria-invalid]="errors().length > 0 || null"
|
|
974
1083
|
[attr.aria-describedby]="describedBy()"
|
|
975
1084
|
(change)="setSelect($event)"
|
|
976
1085
|
(blur)="touch()"
|
|
977
1086
|
>
|
|
978
|
-
|
|
1087
|
+
@if (!field().multiple) {
|
|
1088
|
+
<option value="" [selected]="stringValue() === ''"></option>
|
|
1089
|
+
}
|
|
979
1090
|
@for (option of options(); track option.value) {
|
|
980
1091
|
<option
|
|
981
1092
|
[value]="option.value"
|
|
982
|
-
[selected]="
|
|
1093
|
+
[selected]="isSelected(option.value)"
|
|
983
1094
|
>
|
|
984
1095
|
{{ option.label }}
|
|
985
1096
|
</option>
|
|
@@ -1064,23 +1175,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImpo
|
|
|
1064
1175
|
</div>
|
|
1065
1176
|
}
|
|
1066
1177
|
@case ('file') {
|
|
1067
|
-
<
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
[id]="controlId()"
|
|
1072
|
-
[disabled]="controlDisabled() || uploading()"
|
|
1073
|
-
[attr.aria-busy]="uploading() || null"
|
|
1074
|
-
[attr.aria-describedby]="describedBy()"
|
|
1075
|
-
(change)="setFiles($event)"
|
|
1076
|
-
(blur)="touch()"
|
|
1077
|
-
/>
|
|
1078
|
-
@if (uploading()) {
|
|
1079
|
-
<div class="mform-desc" role="status">Uploading…</div>
|
|
1080
|
-
}
|
|
1081
|
-
@for (name of fileNames(); track $index) {
|
|
1082
|
-
<div class="mform-file-name">📎 {{ name }}</div>
|
|
1083
|
-
}
|
|
1178
|
+
<ng-container *ngTemplateOutlet="fileControl" />
|
|
1179
|
+
}
|
|
1180
|
+
@case ('image') {
|
|
1181
|
+
<ng-container *ngTemplateOutlet="fileControl" />
|
|
1084
1182
|
}
|
|
1085
1183
|
@case ('reference') {
|
|
1086
1184
|
<div class="mform-reference">
|
|
@@ -1155,6 +1253,51 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImpo
|
|
|
1155
1253
|
}
|
|
1156
1254
|
}
|
|
1157
1255
|
}
|
|
1256
|
+
|
|
1257
|
+
<!-- File/image control: same markup for both types, thumbnails when the
|
|
1258
|
+
stored reference points at an image. -->
|
|
1259
|
+
<ng-template #fileControl>
|
|
1260
|
+
<input
|
|
1261
|
+
class="mform-control"
|
|
1262
|
+
type="file"
|
|
1263
|
+
[id]="controlId()"
|
|
1264
|
+
[multiple]="field().multiple !== false"
|
|
1265
|
+
[attr.accept]="acceptAttr()"
|
|
1266
|
+
[disabled]="controlDisabled() || uploading()"
|
|
1267
|
+
[attr.aria-busy]="uploading() || null"
|
|
1268
|
+
[attr.aria-describedby]="describedBy()"
|
|
1269
|
+
(change)="setFiles($event)"
|
|
1270
|
+
(blur)="touch()"
|
|
1271
|
+
/>
|
|
1272
|
+
@if (uploading()) {
|
|
1273
|
+
<div class="mform-desc" role="status">Uploading…</div>
|
|
1274
|
+
}
|
|
1275
|
+
@if (fileRejection(); as rejection) {
|
|
1276
|
+
<div class="mform-error" role="alert">{{ rejection }}</div>
|
|
1277
|
+
}
|
|
1278
|
+
@if (fileEntries().length > 0) {
|
|
1279
|
+
<ul class="mform-files" [class.is-gallery]="showThumbnails()">
|
|
1280
|
+
@for (entry of fileEntries(); track $index; let i = $index) {
|
|
1281
|
+
<li class="mform-file">
|
|
1282
|
+
@if (showThumbnails() && entry.url) {
|
|
1283
|
+
<img class="mform-thumb" [src]="entry.url" [alt]="entry.name" loading="lazy" />
|
|
1284
|
+
} @else {
|
|
1285
|
+
<span class="mform-file-icon" aria-hidden="true">📎</span>
|
|
1286
|
+
}
|
|
1287
|
+
<span class="mform-file-name" [title]="entry.name">{{ entry.name }}</span>
|
|
1288
|
+
@if (interactive()) {
|
|
1289
|
+
<button
|
|
1290
|
+
type="button"
|
|
1291
|
+
class="mform-file-remove"
|
|
1292
|
+
(click)="removeFile(i)"
|
|
1293
|
+
[attr.aria-label]="'Remove ' + entry.name"
|
|
1294
|
+
>✕</button>
|
|
1295
|
+
}
|
|
1296
|
+
</li>
|
|
1297
|
+
}
|
|
1298
|
+
</ul>
|
|
1299
|
+
}
|
|
1300
|
+
</ng-template>
|
|
1158
1301
|
`,
|
|
1159
1302
|
}]
|
|
1160
1303
|
}], ctorParameters: () => [], propDecorators: { node: [{ type: i0.Input, args: [{ isSignal: true, alias: "node", required: true }] }], engine: [{ type: i0.Input, args: [{ isSignal: true, alias: "engine", required: true }] }], tick: [{ type: i0.Input, args: [{ isSignal: true, alias: "tick", required: true }] }], scope: [{ type: i0.Input, args: [{ isSignal: true, alias: "scope", required: false }] }], bare: [{ type: i0.Input, args: [{ isSignal: true, alias: "bare", required: false }] }], providers: [{ type: i0.Input, args: [{ isSignal: true, alias: "providers", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], notify: [{ type: i0.Input, args: [{ isSignal: true, alias: "notify", required: false }] }] } });
|
|
@@ -1412,7 +1555,7 @@ class FormRendererComponent {
|
|
|
1412
1555
|
}
|
|
1413
1556
|
</form>
|
|
1414
1557
|
}
|
|
1415
|
-
`, isInline: true, styles: [".mform-root{display:flex;flex-direction:column;gap:var(--mform-gap, 16px);font-family:var(--mform-font, system-ui, \"Segoe UI\", sans-serif);color:var(--mform-text, #1f1b2e)}.mform-node{display:contents}.mform-field{display:flex;flex-direction:column;gap:6px}.mform-label{font-size:var(--mform-label-size, 13px);font-weight:var(--mform-label-weight, 600)}.mform-req{color:var(--mform-danger, #c62842);margin-left:2px}.mform-control{font:inherit;width:100%;padding:var(--mform-control-padding, 9px 12px);border:1px solid var(--mform-border, #d9d5e6);border-radius:var(--mform-control-radius, 8px);background:var(--mform-control-bg, #fff);color:inherit;box-sizing:border-box}textarea.mform-control{min-height:72px;resize:vertical}.mform-control:focus-visible{outline:2px solid var(--mform-focus, #8e6ff0);outline-offset:1px;border-color:var(--mform-focus, #8e6ff0)}.mform-field.has-error .mform-control{border-color:var(--mform-danger, #c62842)}.mform-desc{font-size:12px;color:var(--mform-muted, #6b6580)}.mform-error{font-size:12px;color:var(--mform-danger, #c62842)}.mform-choices{display:flex;flex-direction:column;gap:6px}.mform-check{display:flex;align-items:center;gap:8px;font-size:14px;cursor:pointer}.mform-check input{width:16px;height:16px;accent-color:var(--mform-primary, #6d4bd0)}.mform-panel{border:1px solid var(--mform-border, #d9d5e6);border-radius:var(--mform-radius, 10px);overflow:hidden}.mform-panel-head{background:var(--mform-panel-head-bg, linear-gradient(90deg, #efeaff, #f8f6ff));color:var(--mform-panel-head-text, inherit);padding:10px 16px;font-weight:600;font-size:14px;border-bottom:1px solid var(--mform-border, #d9d5e6)}.mform-panel-body,.mform-group,.mform-column,.mform-tabpanel{display:flex;flex-direction:column;gap:var(--mform-gap, 16px)}.mform-panel-body{padding:var(--mform-panel-padding, 16px)}.mform-columns{display:grid;gap:var(--mform-gap, 16px)}@media(max-width:640px){.mform-columns{grid-template-columns:1fr!important}}.mform-affix{display:flex;align-items:center}.mform-affix.has-affix{border:1px solid var(--mform-border, #d9d5e6);border-radius:var(--mform-control-radius, 8px);background:var(--mform-control-bg, #fff)}.mform-affix.has-affix .mform-control{border:none;background:none;flex:1}.mform-affix.has-affix:focus-within{outline:2px solid var(--mform-focus, #8e6ff0);outline-offset:1px}.mform-prefix,.mform-suffix{padding:0 10px;color:var(--mform-muted, #6b6580);font-size:13px;white-space:nowrap}.mform-tags{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.mform-tag{background:var(--mform-primary, #6d4bd0);color:var(--mform-primary-contrast, #fff);border-radius:999px;padding:3px 10px;font-size:12px;display:inline-flex;align-items:center;gap:6px}.mform-tag button{border:none;background:none;color:inherit;cursor:pointer;font-size:12px;padding:0;line-height:1}.mform-tag-input{flex:1;min-width:140px;width:auto}.mform-field.is-pending .mform-control{background-image:linear-gradient(90deg,transparent 0%,rgb(109 75 208 / 12%) 50%,transparent 100%);background-size:200% 100%;animation:mform-pending 1.2s linear infinite}@keyframes mform-pending{0%{background-position:200% 0}to{background-position:-200% 0}}.mform-file-
|
|
1558
|
+
`, isInline: true, styles: [".mform-root{display:flex;flex-direction:column;gap:var(--mform-gap, 16px);font-family:var(--mform-font, system-ui, \"Segoe UI\", sans-serif);color:var(--mform-text, #1f1b2e)}.mform-node{display:contents}.mform-field{display:flex;flex-direction:column;gap:6px}.mform-label{font-size:var(--mform-label-size, 13px);font-weight:var(--mform-label-weight, 600)}.mform-req{color:var(--mform-danger, #c62842);margin-left:2px}.mform-control{font:inherit;width:100%;padding:var(--mform-control-padding, 9px 12px);border:1px solid var(--mform-border, #d9d5e6);border-radius:var(--mform-control-radius, 8px);background:var(--mform-control-bg, #fff);color:inherit;box-sizing:border-box}textarea.mform-control{min-height:72px;resize:vertical}.mform-control:focus-visible{outline:2px solid var(--mform-focus, #8e6ff0);outline-offset:1px;border-color:var(--mform-focus, #8e6ff0)}.mform-field.has-error .mform-control{border-color:var(--mform-danger, #c62842)}.mform-desc{font-size:12px;color:var(--mform-muted, #6b6580)}.mform-error{font-size:12px;color:var(--mform-danger, #c62842)}.mform-choices{display:flex;flex-direction:column;gap:6px}.mform-check{display:flex;align-items:center;gap:8px;font-size:14px;cursor:pointer}.mform-check input{width:16px;height:16px;accent-color:var(--mform-primary, #6d4bd0)}.mform-panel{border:1px solid var(--mform-border, #d9d5e6);border-radius:var(--mform-radius, 10px);overflow:hidden}.mform-panel-head{background:var(--mform-panel-head-bg, linear-gradient(90deg, #efeaff, #f8f6ff));color:var(--mform-panel-head-text, inherit);padding:10px 16px;font-weight:600;font-size:14px;border-bottom:1px solid var(--mform-border, #d9d5e6)}.mform-panel-body,.mform-group,.mform-column,.mform-tabpanel{display:flex;flex-direction:column;gap:var(--mform-gap, 16px)}.mform-panel-body{padding:var(--mform-panel-padding, 16px)}.mform-columns{display:grid;gap:var(--mform-gap, 16px)}@media(max-width:640px){.mform-columns{grid-template-columns:1fr!important}}.mform-affix{display:flex;align-items:center}.mform-affix.has-affix{border:1px solid var(--mform-border, #d9d5e6);border-radius:var(--mform-control-radius, 8px);background:var(--mform-control-bg, #fff)}.mform-affix.has-affix .mform-control{border:none;background:none;flex:1}.mform-affix.has-affix:focus-within{outline:2px solid var(--mform-focus, #8e6ff0);outline-offset:1px}.mform-prefix,.mform-suffix{padding:0 10px;color:var(--mform-muted, #6b6580);font-size:13px;white-space:nowrap}.mform-tags{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.mform-tag{background:var(--mform-primary, #6d4bd0);color:var(--mform-primary-contrast, #fff);border-radius:999px;padding:3px 10px;font-size:12px;display:inline-flex;align-items:center;gap:6px}.mform-tag button{border:none;background:none;color:inherit;cursor:pointer;font-size:12px;padding:0;line-height:1}.mform-tag-input{flex:1;min-width:140px;width:auto}.mform-field.is-pending .mform-control{background-image:linear-gradient(90deg,transparent 0%,rgb(109 75 208 / 12%) 50%,transparent 100%);background-size:200% 100%;animation:mform-pending 1.2s linear infinite}@keyframes mform-pending{0%{background-position:200% 0}to{background-position:-200% 0}}.mform-files{list-style:none;margin:6px 0 0;padding:0;display:flex;flex-direction:column;gap:4px}.mform-files.is-gallery{flex-direction:row;flex-wrap:wrap;gap:10px}.mform-file{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--mform-muted, #6b6580)}.mform-files.is-gallery .mform-file{flex-direction:column;gap:4px;width:var(--mform-thumb-size, 96px);text-align:center;position:relative}.mform-thumb{width:var(--mform-thumb-size, 96px);height:var(--mform-thumb-size, 96px);object-fit:cover;border-radius:var(--mform-control-radius, 8px);border:1px solid var(--mform-border, #d9d5e6);background:var(--mform-bg, #f6f5fa)}.mform-file-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.mform-file-remove{border:none;background:none;color:var(--mform-muted, #6b6580);cursor:pointer;font-size:12px;padding:0 4px}.mform-file-remove:hover{color:var(--mform-danger, #c62842)}.mform-files.is-gallery .mform-file-remove{position:absolute;top:2px;right:2px;background:var(--mform-surface, #fff);border-radius:50%;width:20px;height:20px;line-height:1;box-shadow:0 1px 4px #1f1b2e33}.mform-reference{position:relative}.mform-ref-list{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:10;margin:0;padding:4px;list-style:none;background:var(--mform-control-bg, #fff);border:1px solid var(--mform-border, #d9d5e6);border-radius:var(--mform-control-radius, 8px);box-shadow:0 8px 24px #1f1b2e1f;max-height:220px;overflow-y:auto}.mform-ref-list button{display:block;width:100%;text-align:left;font:inherit;font-size:13px;padding:7px 10px;border:none;border-radius:6px;background:none;color:inherit;cursor:pointer}.mform-ref-list button:hover{background:var(--mform-bg, #f6f5fa)}.mform-tabbar{display:flex;gap:4px;border-bottom:2px solid var(--mform-border, #d9d5e6);margin-bottom:14px}.mform-tab{padding:8px 18px;font:inherit;font-size:14px;border:none;background:none;color:var(--mform-muted, #6b6580);cursor:pointer}.mform-tab.is-active{color:var(--mform-primary, #6d4bd0);font-weight:600;border-bottom:2px solid var(--mform-primary, #6d4bd0);margin-bottom:-2px}.mform-grid-row{display:flex;align-items:flex-start;gap:8px;padding:10px 0;border-bottom:1px dashed var(--mform-border, #d9d5e6)}.mform-grid-fields{flex:1;display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:var(--mform-gap, 16px)}.mform-row-remove{border:none;background:none;color:var(--mform-muted, #6b6580);font:inherit;cursor:pointer;padding:6px 8px}.mform-row-remove:hover{color:var(--mform-danger, #c62842)}.mform-row-add{align-self:flex-start;background:none;border:1px dashed var(--mform-primary, #6d4bd0);color:var(--mform-primary, #6d4bd0);padding:7px 14px;border-radius:var(--mform-control-radius, 8px);font:inherit;font-size:13px;cursor:pointer}.mform-btn{align-self:flex-start;background:var(--mform-primary, #6d4bd0);color:var(--mform-primary-contrast, #fff);border:none;border-radius:var(--mform-control-radius, 8px);padding:11px 26px;font:inherit;font-weight:600;cursor:pointer}.mform-btn:hover{filter:brightness(1.08)}.mform-btn:focus-visible{outline:2px solid var(--mform-focus, #8e6ff0);outline-offset:2px}.mform-content{font-size:14px}.mform-unsupported{font-size:13px;color:var(--mform-muted, #6b6580);border:1px dashed var(--mform-border, #d9d5e6);border-radius:var(--mform-radius, 10px);padding:10px 14px}.mform-steps{display:flex;gap:18px;list-style:none;margin:0 0 4px;padding:0 0 12px;border-bottom:1px solid var(--mform-border, #d9d5e6);flex-wrap:wrap}.mform-step{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--mform-muted, #6b6580)}.mform-step-index{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;border:1.5px solid var(--mform-border, #d9d5e6);font-size:11px;font-weight:600}.mform-step.is-active{color:var(--mform-primary, #6d4bd0);font-weight:600}.mform-step.is-active .mform-step-index{border-color:var(--mform-primary, #6d4bd0);background:var(--mform-primary, #6d4bd0);color:var(--mform-primary-contrast, #fff)}.mform-step.is-done .mform-step-index{border-color:var(--mform-primary, #6d4bd0);color:var(--mform-primary, #6d4bd0)}.mform-wizard-nav{display:flex;gap:10px;padding-top:4px}.mform-btn-secondary{background:none;border:1px solid var(--mform-primary, #6d4bd0);color:var(--mform-primary, #6d4bd0)}.mform-summary{border:1px solid var(--mform-danger, #c62842);background:var(--mform-danger-bg, #fdf0f2);color:var(--mform-danger, #c62842);border-radius:var(--mform-radius, 10px);padding:12px 16px;font-size:13px}.mform-summary ul{margin:6px 0 0;padding-left:18px}\n"], dependencies: [{ kind: "component", type: FormNodeComponent, selector: "mform-node", inputs: ["node", "engine", "tick", "scope", "bare", "providers", "mode", "notify"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
1416
1559
|
}
|
|
1417
1560
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: FormRendererComponent, decorators: [{
|
|
1418
1561
|
type: Component,
|
|
@@ -1479,7 +1622,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImpo
|
|
|
1479
1622
|
}
|
|
1480
1623
|
</form>
|
|
1481
1624
|
}
|
|
1482
|
-
`, styles: [".mform-root{display:flex;flex-direction:column;gap:var(--mform-gap, 16px);font-family:var(--mform-font, system-ui, \"Segoe UI\", sans-serif);color:var(--mform-text, #1f1b2e)}.mform-node{display:contents}.mform-field{display:flex;flex-direction:column;gap:6px}.mform-label{font-size:var(--mform-label-size, 13px);font-weight:var(--mform-label-weight, 600)}.mform-req{color:var(--mform-danger, #c62842);margin-left:2px}.mform-control{font:inherit;width:100%;padding:var(--mform-control-padding, 9px 12px);border:1px solid var(--mform-border, #d9d5e6);border-radius:var(--mform-control-radius, 8px);background:var(--mform-control-bg, #fff);color:inherit;box-sizing:border-box}textarea.mform-control{min-height:72px;resize:vertical}.mform-control:focus-visible{outline:2px solid var(--mform-focus, #8e6ff0);outline-offset:1px;border-color:var(--mform-focus, #8e6ff0)}.mform-field.has-error .mform-control{border-color:var(--mform-danger, #c62842)}.mform-desc{font-size:12px;color:var(--mform-muted, #6b6580)}.mform-error{font-size:12px;color:var(--mform-danger, #c62842)}.mform-choices{display:flex;flex-direction:column;gap:6px}.mform-check{display:flex;align-items:center;gap:8px;font-size:14px;cursor:pointer}.mform-check input{width:16px;height:16px;accent-color:var(--mform-primary, #6d4bd0)}.mform-panel{border:1px solid var(--mform-border, #d9d5e6);border-radius:var(--mform-radius, 10px);overflow:hidden}.mform-panel-head{background:var(--mform-panel-head-bg, linear-gradient(90deg, #efeaff, #f8f6ff));color:var(--mform-panel-head-text, inherit);padding:10px 16px;font-weight:600;font-size:14px;border-bottom:1px solid var(--mform-border, #d9d5e6)}.mform-panel-body,.mform-group,.mform-column,.mform-tabpanel{display:flex;flex-direction:column;gap:var(--mform-gap, 16px)}.mform-panel-body{padding:var(--mform-panel-padding, 16px)}.mform-columns{display:grid;gap:var(--mform-gap, 16px)}@media(max-width:640px){.mform-columns{grid-template-columns:1fr!important}}.mform-affix{display:flex;align-items:center}.mform-affix.has-affix{border:1px solid var(--mform-border, #d9d5e6);border-radius:var(--mform-control-radius, 8px);background:var(--mform-control-bg, #fff)}.mform-affix.has-affix .mform-control{border:none;background:none;flex:1}.mform-affix.has-affix:focus-within{outline:2px solid var(--mform-focus, #8e6ff0);outline-offset:1px}.mform-prefix,.mform-suffix{padding:0 10px;color:var(--mform-muted, #6b6580);font-size:13px;white-space:nowrap}.mform-tags{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.mform-tag{background:var(--mform-primary, #6d4bd0);color:var(--mform-primary-contrast, #fff);border-radius:999px;padding:3px 10px;font-size:12px;display:inline-flex;align-items:center;gap:6px}.mform-tag button{border:none;background:none;color:inherit;cursor:pointer;font-size:12px;padding:0;line-height:1}.mform-tag-input{flex:1;min-width:140px;width:auto}.mform-field.is-pending .mform-control{background-image:linear-gradient(90deg,transparent 0%,rgb(109 75 208 / 12%) 50%,transparent 100%);background-size:200% 100%;animation:mform-pending 1.2s linear infinite}@keyframes mform-pending{0%{background-position:200% 0}to{background-position:-200% 0}}.mform-file-
|
|
1625
|
+
`, styles: [".mform-root{display:flex;flex-direction:column;gap:var(--mform-gap, 16px);font-family:var(--mform-font, system-ui, \"Segoe UI\", sans-serif);color:var(--mform-text, #1f1b2e)}.mform-node{display:contents}.mform-field{display:flex;flex-direction:column;gap:6px}.mform-label{font-size:var(--mform-label-size, 13px);font-weight:var(--mform-label-weight, 600)}.mform-req{color:var(--mform-danger, #c62842);margin-left:2px}.mform-control{font:inherit;width:100%;padding:var(--mform-control-padding, 9px 12px);border:1px solid var(--mform-border, #d9d5e6);border-radius:var(--mform-control-radius, 8px);background:var(--mform-control-bg, #fff);color:inherit;box-sizing:border-box}textarea.mform-control{min-height:72px;resize:vertical}.mform-control:focus-visible{outline:2px solid var(--mform-focus, #8e6ff0);outline-offset:1px;border-color:var(--mform-focus, #8e6ff0)}.mform-field.has-error .mform-control{border-color:var(--mform-danger, #c62842)}.mform-desc{font-size:12px;color:var(--mform-muted, #6b6580)}.mform-error{font-size:12px;color:var(--mform-danger, #c62842)}.mform-choices{display:flex;flex-direction:column;gap:6px}.mform-check{display:flex;align-items:center;gap:8px;font-size:14px;cursor:pointer}.mform-check input{width:16px;height:16px;accent-color:var(--mform-primary, #6d4bd0)}.mform-panel{border:1px solid var(--mform-border, #d9d5e6);border-radius:var(--mform-radius, 10px);overflow:hidden}.mform-panel-head{background:var(--mform-panel-head-bg, linear-gradient(90deg, #efeaff, #f8f6ff));color:var(--mform-panel-head-text, inherit);padding:10px 16px;font-weight:600;font-size:14px;border-bottom:1px solid var(--mform-border, #d9d5e6)}.mform-panel-body,.mform-group,.mform-column,.mform-tabpanel{display:flex;flex-direction:column;gap:var(--mform-gap, 16px)}.mform-panel-body{padding:var(--mform-panel-padding, 16px)}.mform-columns{display:grid;gap:var(--mform-gap, 16px)}@media(max-width:640px){.mform-columns{grid-template-columns:1fr!important}}.mform-affix{display:flex;align-items:center}.mform-affix.has-affix{border:1px solid var(--mform-border, #d9d5e6);border-radius:var(--mform-control-radius, 8px);background:var(--mform-control-bg, #fff)}.mform-affix.has-affix .mform-control{border:none;background:none;flex:1}.mform-affix.has-affix:focus-within{outline:2px solid var(--mform-focus, #8e6ff0);outline-offset:1px}.mform-prefix,.mform-suffix{padding:0 10px;color:var(--mform-muted, #6b6580);font-size:13px;white-space:nowrap}.mform-tags{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.mform-tag{background:var(--mform-primary, #6d4bd0);color:var(--mform-primary-contrast, #fff);border-radius:999px;padding:3px 10px;font-size:12px;display:inline-flex;align-items:center;gap:6px}.mform-tag button{border:none;background:none;color:inherit;cursor:pointer;font-size:12px;padding:0;line-height:1}.mform-tag-input{flex:1;min-width:140px;width:auto}.mform-field.is-pending .mform-control{background-image:linear-gradient(90deg,transparent 0%,rgb(109 75 208 / 12%) 50%,transparent 100%);background-size:200% 100%;animation:mform-pending 1.2s linear infinite}@keyframes mform-pending{0%{background-position:200% 0}to{background-position:-200% 0}}.mform-files{list-style:none;margin:6px 0 0;padding:0;display:flex;flex-direction:column;gap:4px}.mform-files.is-gallery{flex-direction:row;flex-wrap:wrap;gap:10px}.mform-file{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--mform-muted, #6b6580)}.mform-files.is-gallery .mform-file{flex-direction:column;gap:4px;width:var(--mform-thumb-size, 96px);text-align:center;position:relative}.mform-thumb{width:var(--mform-thumb-size, 96px);height:var(--mform-thumb-size, 96px);object-fit:cover;border-radius:var(--mform-control-radius, 8px);border:1px solid var(--mform-border, #d9d5e6);background:var(--mform-bg, #f6f5fa)}.mform-file-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.mform-file-remove{border:none;background:none;color:var(--mform-muted, #6b6580);cursor:pointer;font-size:12px;padding:0 4px}.mform-file-remove:hover{color:var(--mform-danger, #c62842)}.mform-files.is-gallery .mform-file-remove{position:absolute;top:2px;right:2px;background:var(--mform-surface, #fff);border-radius:50%;width:20px;height:20px;line-height:1;box-shadow:0 1px 4px #1f1b2e33}.mform-reference{position:relative}.mform-ref-list{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:10;margin:0;padding:4px;list-style:none;background:var(--mform-control-bg, #fff);border:1px solid var(--mform-border, #d9d5e6);border-radius:var(--mform-control-radius, 8px);box-shadow:0 8px 24px #1f1b2e1f;max-height:220px;overflow-y:auto}.mform-ref-list button{display:block;width:100%;text-align:left;font:inherit;font-size:13px;padding:7px 10px;border:none;border-radius:6px;background:none;color:inherit;cursor:pointer}.mform-ref-list button:hover{background:var(--mform-bg, #f6f5fa)}.mform-tabbar{display:flex;gap:4px;border-bottom:2px solid var(--mform-border, #d9d5e6);margin-bottom:14px}.mform-tab{padding:8px 18px;font:inherit;font-size:14px;border:none;background:none;color:var(--mform-muted, #6b6580);cursor:pointer}.mform-tab.is-active{color:var(--mform-primary, #6d4bd0);font-weight:600;border-bottom:2px solid var(--mform-primary, #6d4bd0);margin-bottom:-2px}.mform-grid-row{display:flex;align-items:flex-start;gap:8px;padding:10px 0;border-bottom:1px dashed var(--mform-border, #d9d5e6)}.mform-grid-fields{flex:1;display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:var(--mform-gap, 16px)}.mform-row-remove{border:none;background:none;color:var(--mform-muted, #6b6580);font:inherit;cursor:pointer;padding:6px 8px}.mform-row-remove:hover{color:var(--mform-danger, #c62842)}.mform-row-add{align-self:flex-start;background:none;border:1px dashed var(--mform-primary, #6d4bd0);color:var(--mform-primary, #6d4bd0);padding:7px 14px;border-radius:var(--mform-control-radius, 8px);font:inherit;font-size:13px;cursor:pointer}.mform-btn{align-self:flex-start;background:var(--mform-primary, #6d4bd0);color:var(--mform-primary-contrast, #fff);border:none;border-radius:var(--mform-control-radius, 8px);padding:11px 26px;font:inherit;font-weight:600;cursor:pointer}.mform-btn:hover{filter:brightness(1.08)}.mform-btn:focus-visible{outline:2px solid var(--mform-focus, #8e6ff0);outline-offset:2px}.mform-content{font-size:14px}.mform-unsupported{font-size:13px;color:var(--mform-muted, #6b6580);border:1px dashed var(--mform-border, #d9d5e6);border-radius:var(--mform-radius, 10px);padding:10px 14px}.mform-steps{display:flex;gap:18px;list-style:none;margin:0 0 4px;padding:0 0 12px;border-bottom:1px solid var(--mform-border, #d9d5e6);flex-wrap:wrap}.mform-step{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--mform-muted, #6b6580)}.mform-step-index{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;border:1.5px solid var(--mform-border, #d9d5e6);font-size:11px;font-weight:600}.mform-step.is-active{color:var(--mform-primary, #6d4bd0);font-weight:600}.mform-step.is-active .mform-step-index{border-color:var(--mform-primary, #6d4bd0);background:var(--mform-primary, #6d4bd0);color:var(--mform-primary-contrast, #fff)}.mform-step.is-done .mform-step-index{border-color:var(--mform-primary, #6d4bd0);color:var(--mform-primary, #6d4bd0)}.mform-wizard-nav{display:flex;gap:10px;padding-top:4px}.mform-btn-secondary{background:none;border:1px solid var(--mform-primary, #6d4bd0);color:var(--mform-primary, #6d4bd0)}.mform-summary{border:1px solid var(--mform-danger, #c62842);background:var(--mform-danger-bg, #fdf0f2);color:var(--mform-danger, #c62842);border-radius:var(--mform-radius, 10px);padding:12px 16px;font-size:13px}.mform-summary ul{margin:6px 0 0;padding-left:18px}\n"] }]
|
|
1483
1626
|
}], ctorParameters: () => [], propDecorators: { schema: [{ type: i0.Input, args: [{ isSignal: true, alias: "schema", required: false }] }], source: [{ type: i0.Input, args: [{ isSignal: true, alias: "source", required: false }] }], initialData: [{ type: i0.Input, args: [{ isSignal: true, alias: "initialData", required: false }] }], optionsProviders: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionsProviders", required: false }] }], messages: [{ type: i0.Input, args: [{ isSignal: true, alias: "messages", required: false }] }], validators: [{ type: i0.Input, args: [{ isSignal: true, alias: "validators", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], submitHandler: [{ type: i0.Input, args: [{ isSignal: true, alias: "submitHandler", required: false }] }], labels: [{ type: i0.Input, args: [{ isSignal: true, alias: "labels", required: false }] }], submitted: [{ type: i0.Output, args: ["submitted"] }], valueChanged: [{ type: i0.Output, args: ["valueChanged"] }] } });
|
|
1484
1627
|
|
|
1485
1628
|
/*
|