@ajsf/material 19.1.0 → 20.0.0-rc.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.
Files changed (28) hide show
  1. package/fesm2022/ajsf-material.mjs +485 -120
  2. package/fesm2022/ajsf-material.mjs.map +1 -1
  3. package/index.d.ts +518 -3
  4. package/package.json +7 -7
  5. package/lib/material-design-framework.component.d.ts +0 -28
  6. package/lib/material-design-framework.module.d.ts +0 -59
  7. package/lib/material-design.framework.d.ts +0 -44
  8. package/lib/widgets/flex-layout-root.component.d.ts +0 -21
  9. package/lib/widgets/flex-layout-section.component.d.ts +0 -29
  10. package/lib/widgets/material-add-reference.component.d.ts +0 -20
  11. package/lib/widgets/material-button-group.component.d.ts +0 -23
  12. package/lib/widgets/material-button.component.d.ts +0 -21
  13. package/lib/widgets/material-checkbox.component.d.ts +0 -25
  14. package/lib/widgets/material-checkboxes.component.d.ts +0 -27
  15. package/lib/widgets/material-chip-list.component.d.ts +0 -21
  16. package/lib/widgets/material-datepicker.component.d.ts +0 -22
  17. package/lib/widgets/material-file.component.d.ts +0 -21
  18. package/lib/widgets/material-input.component.d.ts +0 -23
  19. package/lib/widgets/material-number.component.d.ts +0 -28
  20. package/lib/widgets/material-one-of.component.d.ts +0 -21
  21. package/lib/widgets/material-radios.component.d.ts +0 -23
  22. package/lib/widgets/material-select.component.d.ts +0 -24
  23. package/lib/widgets/material-slider.component.d.ts +0 -27
  24. package/lib/widgets/material-stepper.component.d.ts +0 -21
  25. package/lib/widgets/material-tabs.component.d.ts +0 -20
  26. package/lib/widgets/material-textarea.component.d.ts +0 -22
  27. package/lib/widgets/public_api.d.ts +0 -41
  28. package/public_api.d.ts +0 -4
@@ -12,33 +12,36 @@ import * as i5 from '@angular/material/form-field';
12
12
  import { MAT_FORM_FIELD_DEFAULT_OPTIONS, MatFormFieldModule } from '@angular/material/form-field';
13
13
  import * as i3$1 from '@angular/material/button';
14
14
  import { MatButtonModule } from '@angular/material/button';
15
- import * as i4$1 from '@angular/material/icon';
15
+ import * as i5$1 from '@angular/material/icon';
16
16
  import { MatIconModule } from '@angular/material/icon';
17
17
  import * as i3$2 from '@angular/material/button-toggle';
18
18
  import { MatButtonToggleModule } from '@angular/material/button-toggle';
19
19
  import * as i3$3 from '@angular/forms';
20
20
  import { FormsModule, ReactiveFormsModule } from '@angular/forms';
21
- import * as i4$2 from '@angular/material/checkbox';
21
+ import * as i4$1 from '@angular/material/checkbox';
22
22
  import { MatCheckboxModule } from '@angular/material/checkbox';
23
23
  import * as i6 from '@angular/material/slide-toggle';
24
24
  import { MatSlideToggleModule } from '@angular/material/slide-toggle';
25
- import * as i4$3 from '@angular/material/datepicker';
25
+ import { ENTER, COMMA } from '@angular/cdk/keycodes';
26
+ import * as i3$4 from '@angular/material/chips';
27
+ import { MatChipsModule } from '@angular/material/chips';
28
+ import * as i4$2 from '@angular/material/datepicker';
26
29
  import { MatDatepickerModule } from '@angular/material/datepicker';
27
30
  import * as i6$1 from '@angular/material/input';
28
31
  import { MatInputModule } from '@angular/material/input';
29
- import * as i4$4 from '@angular/material/autocomplete';
32
+ import * as i4$3 from '@angular/material/autocomplete';
30
33
  import { MatAutocompleteModule } from '@angular/material/autocomplete';
31
- import * as i5$1 from '@angular/material/radio';
32
- import { MatRadioModule } from '@angular/material/radio';
33
34
  import * as i6$2 from '@angular/material/select';
34
35
  import { MatSelectModule } from '@angular/material/select';
35
- import * as i5$2 from '@angular/material/slider';
36
+ import * as i5$2 from '@angular/material/radio';
37
+ import { MatRadioModule } from '@angular/material/radio';
38
+ import * as i5$3 from '@angular/material/slider';
36
39
  import { MatSliderModule } from '@angular/material/slider';
37
- import * as i3$4 from '@angular/material/tabs';
40
+ import * as i4$4 from '@angular/material/stepper';
41
+ import { MatStepperModule } from '@angular/material/stepper';
42
+ import * as i3$5 from '@angular/material/tabs';
38
43
  import { MatTabsModule } from '@angular/material/tabs';
39
- import { MatChipsModule } from '@angular/material/chips';
40
44
  import { MatNativeDateModule } from '@angular/material/core';
41
- import { MatStepperModule } from '@angular/material/stepper';
42
45
  import { MatTooltipModule } from '@angular/material/tooltip';
43
46
  import { MatMenuModule } from '@angular/material/menu';
44
47
  import { MatToolbarModule } from '@angular/material/toolbar';
@@ -88,8 +91,8 @@ class FlexLayoutRootComponent {
88
91
  showWidget(layoutNode) {
89
92
  return this.jsf.evaluateCondition(layoutNode, this.dataIndex);
90
93
  }
91
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: FlexLayoutRootComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
92
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: FlexLayoutRootComponent, isStandalone: false, selector: "flex-layout-root-widget", inputs: { dataIndex: "dataIndex", layoutIndex: "layoutIndex", layout: "layout", isFlexItem: "isFlexItem" }, ngImport: i0, template: `
94
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: FlexLayoutRootComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
95
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.30", type: FlexLayoutRootComponent, isStandalone: false, selector: "flex-layout-root-widget", inputs: { dataIndex: "dataIndex", layoutIndex: "layoutIndex", layout: "layout", isFlexItem: "isFlexItem" }, ngImport: i0, template: `
93
96
  <div *ngFor="let layoutNode of layout; let i = index"
94
97
  [class.form-flex-item]="isFlexItem"
95
98
  [style.flex-grow]="getFlexAttribute(layoutNode, 'flex-grow')"
@@ -105,7 +108,7 @@ class FlexLayoutRootComponent {
105
108
  [layoutNode]="layoutNode"></select-framework-widget>
106
109
  </div>`, isInline: true, dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.SelectFrameworkComponent, selector: "select-framework-widget", inputs: ["layoutNode", "layoutIndex", "dataIndex"] }], changeDetection: i0.ChangeDetectionStrategy.Default }); }
107
110
  }
108
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: FlexLayoutRootComponent, decorators: [{
111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: FlexLayoutRootComponent, decorators: [{
109
112
  type: Component,
110
113
  args: [{
111
114
  selector: 'flex-layout-root-widget',
@@ -222,8 +225,8 @@ class FlexLayoutSectionComponent {
222
225
  return this.options[attribute];
223
226
  }
224
227
  }
225
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: FlexLayoutSectionComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
226
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: FlexLayoutSectionComponent, isStandalone: false, selector: "flex-layout-section-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
228
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: FlexLayoutSectionComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
229
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.30", type: FlexLayoutSectionComponent, isStandalone: false, selector: "flex-layout-section-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
227
230
  <div *ngIf="containerType === 'div'"
228
231
  [class]="options?.htmlClass || ''"
229
232
  [class.expandable]="options?.expandable && !expanded"
@@ -350,7 +353,7 @@ class FlexLayoutSectionComponent {
350
353
  [innerHTML]="options?.errorMessage"></mat-error>
351
354
  </mat-expansion-panel>`, isInline: true, styles: ["fieldset{border:0;margin:0;padding:0}.legend{font-weight:700}.expandable>.legend:before{content:\"\\25b6\";padding-right:.3em}.expanded>.legend:before{content:\"\\25bc\";padding-right:.2em}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i3.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i3.MatCardFooter, selector: "mat-card-footer" }, { kind: "component", type: i3.MatCardHeader, selector: "mat-card-header" }, { kind: "component", type: i4.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i4.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: FlexLayoutRootComponent, selector: "flex-layout-root-widget", inputs: ["dataIndex", "layoutIndex", "layout", "isFlexItem"] }] }); }
352
355
  }
353
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: FlexLayoutSectionComponent, decorators: [{
356
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: FlexLayoutSectionComponent, decorators: [{
354
357
  type: Component,
355
358
  args: [{ selector: 'flex-layout-section-widget', template: `
356
359
  <div *ngIf="containerType === 'div'"
@@ -510,8 +513,8 @@ class MaterialAddReferenceComponent {
510
513
  return parent.layoutNode.add ||
511
514
  this.jsf.setArrayItemTitle(parent, this.layoutNode, this.itemCount);
512
515
  }
513
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialAddReferenceComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
514
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: MaterialAddReferenceComponent, isStandalone: false, selector: "material-add-reference-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
516
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialAddReferenceComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
517
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.30", type: MaterialAddReferenceComponent, isStandalone: false, selector: "material-add-reference-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
515
518
  <section [class]="options?.htmlClass || ''" align="end">
516
519
  <button mat-raised-button *ngIf="showAddButton"
517
520
  [color]="options?.color || 'accent'"
@@ -520,9 +523,9 @@ class MaterialAddReferenceComponent {
520
523
  <span *ngIf="options?.icon" [class]="options?.icon"></span>
521
524
  <span *ngIf="options?.title" [innerHTML]="buttonText"></span>
522
525
  </button>
523
- </section>`, isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }], changeDetection: i0.ChangeDetectionStrategy.Default }); }
526
+ </section>`, isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }], changeDetection: i0.ChangeDetectionStrategy.Default }); }
524
527
  }
525
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialAddReferenceComponent, decorators: [{
528
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialAddReferenceComponent, decorators: [{
526
529
  type: Component,
527
530
  args: [{
528
531
  selector: 'material-add-reference-widget',
@@ -572,8 +575,8 @@ class MaterialButtonComponent {
572
575
  this.jsf.updateValue(this, event.target.value);
573
576
  }
574
577
  }
575
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialButtonComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
576
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: MaterialButtonComponent, isStandalone: false, selector: "material-button-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
578
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialButtonComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
579
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.30", type: MaterialButtonComponent, isStandalone: false, selector: "material-button-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
577
580
  <div class="button-row" [class]="options?.htmlClass || ''">
578
581
  <button mat-raised-button
579
582
  [attr.readonly]="options?.readonly ? 'readonly' : null"
@@ -588,9 +591,9 @@ class MaterialButtonComponent {
588
591
  <mat-icon *ngIf="options?.icon" class="mat-24">{{options?.icon}}</mat-icon>
589
592
  <span *ngIf="options?.title" [innerHTML]="options?.title"></span>
590
593
  </button>
591
- </div>`, isInline: true, styles: ["button{margin-top:10px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
594
+ </div>`, isInline: true, styles: ["button{margin-top:10px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i5$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
592
595
  }
593
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialButtonComponent, decorators: [{
596
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialButtonComponent, decorators: [{
594
597
  type: Component,
595
598
  args: [{ selector: 'material-button-widget', template: `
596
599
  <div class="button-row" [class]="options?.htmlClass || ''">
@@ -633,8 +636,8 @@ class MaterialButtonGroupComponent {
633
636
  this.options.showErrors = true;
634
637
  this.jsf.updateValue(this, value);
635
638
  }
636
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialButtonGroupComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
637
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: MaterialButtonGroupComponent, isStandalone: false, selector: "material-button-group-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
639
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialButtonGroupComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
640
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.30", type: MaterialButtonGroupComponent, isStandalone: false, selector: "material-button-group-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
638
641
  <div>
639
642
  <div *ngIf="options?.title">
640
643
  <label
@@ -662,7 +665,7 @@ class MaterialButtonGroupComponent {
662
665
  [innerHTML]="options?.errorMessage"></mat-error>
663
666
  </div>`, isInline: true, styles: ["mat-error{font-size:75%}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$2.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i3$2.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }] }); }
664
667
  }
665
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialButtonGroupComponent, decorators: [{
668
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialButtonGroupComponent, decorators: [{
666
669
  type: Component,
667
670
  args: [{ selector: 'material-button-group-widget', template: `
668
671
  <div>
@@ -727,8 +730,8 @@ class MaterialCheckboxComponent {
727
730
  get isChecked() {
728
731
  return this.jsf.getFormControlValue(this) === this.trueValue;
729
732
  }
730
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialCheckboxComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
731
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: MaterialCheckboxComponent, isStandalone: false, selector: "material-checkbox-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
733
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialCheckboxComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
734
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.30", type: MaterialCheckboxComponent, isStandalone: false, selector: "material-checkbox-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
732
735
  <mat-checkbox *ngIf="boundControl && !showSlideToggle"
733
736
  [formControl]="formControl"
734
737
  align="left"
@@ -786,9 +789,9 @@ class MaterialCheckboxComponent {
786
789
  [innerHTML]="options?.title"></span>
787
790
  </mat-slide-toggle>
788
791
  <mat-error *ngIf="options?.showErrors && options?.errorMessage"
789
- [innerHTML]="options?.errorMessage"></mat-error>`, isInline: true, styles: [".checkbox-name{white-space:nowrap}mat-error{font-size:75%}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4$2.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i6.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }] }); }
792
+ [innerHTML]="options?.errorMessage"></mat-error>`, isInline: true, styles: [".checkbox-name{white-space:nowrap}mat-error{font-size:75%}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4$1.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i6.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }] }); }
790
793
  }
791
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialCheckboxComponent, decorators: [{
794
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialCheckboxComponent, decorators: [{
792
795
  type: Component,
793
796
  args: [{ selector: 'material-checkbox-widget', template: `
794
797
  <mat-checkbox *ngIf="boundControl && !showSlideToggle"
@@ -898,8 +901,8 @@ class MaterialCheckboxesComponent {
898
901
  this.checkboxList.forEach(t => t.checked = event.checked);
899
902
  this.updateValue();
900
903
  }
901
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialCheckboxesComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
902
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: MaterialCheckboxesComponent, isStandalone: false, selector: "material-checkboxes-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
904
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialCheckboxesComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
905
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.30", type: MaterialCheckboxesComponent, isStandalone: false, selector: "material-checkboxes-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
903
906
  <div>
904
907
  <mat-checkbox type="checkbox"
905
908
  [checked]="allChecked"
@@ -932,9 +935,9 @@ class MaterialCheckboxesComponent {
932
935
  </ul>
933
936
  <mat-error *ngIf="options?.showErrors && options?.errorMessage"
934
937
  [innerHTML]="options?.errorMessage"></mat-error>
935
- </div>`, isInline: true, styles: [".title{font-weight:700}.checkbox-list{list-style-type:none}.horizontal-list>li{display:inline-block;margin-right:10px;zoom:1}.checkbox-name{white-space:nowrap}mat-error{font-size:75%}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4$2.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }] }); }
938
+ </div>`, isInline: true, styles: [".title{font-weight:700}.checkbox-list{list-style-type:none}.horizontal-list>li{display:inline-block;margin-right:10px;zoom:1}.checkbox-name{white-space:nowrap}mat-error{font-size:75%}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4$1.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }] }); }
936
939
  }
937
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialCheckboxesComponent, decorators: [{
940
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialCheckboxesComponent, decorators: [{
938
941
  type: Component,
939
942
  args: [{ selector: 'material-checkboxes-widget', template: `
940
943
  <div>
@@ -978,30 +981,94 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
978
981
  type: Input
979
982
  }] } });
980
983
 
981
- // TODO: Add this control
982
984
  class MaterialChipListComponent {
983
985
  constructor(jsf) {
984
986
  this.jsf = jsf;
985
987
  this.controlDisabled = false;
986
988
  this.boundControl = false;
989
+ this.tags = [];
990
+ this.separatorKeyCodes = [ENTER, COMMA];
987
991
  }
988
992
  ngOnInit() {
989
993
  this.options = this.layoutNode.options || {};
990
- this.jsf.initializeControl(this);
994
+ this.jsf.initializeControl(this, false);
995
+ this.tags = Array.isArray(this.controlValue) ? [...this.controlValue] : [];
996
+ }
997
+ add(event) {
998
+ const value = (event.value || '').trim();
999
+ if (value) {
1000
+ this.tags.push(value);
1001
+ this.syncFormArray();
1002
+ }
1003
+ event.chipInput.clear();
991
1004
  }
992
- updateValue(event) {
993
- this.jsf.updateValue(this, event.target.value);
1005
+ remove(index) {
1006
+ this.tags.splice(index, 1);
1007
+ this.syncFormArray();
1008
+ }
1009
+ syncFormArray() {
1010
+ this.jsf.updateArrayCheckboxList(this, this.tags.map(value => ({ checked: true, value })));
994
1011
  }
995
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialChipListComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
996
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: MaterialChipListComponent, isStandalone: false, selector: "material-chip-list-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: ``, isInline: true }); }
1012
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialChipListComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
1013
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.30", type: MaterialChipListComponent, isStandalone: false, selector: "material-chip-list-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
1014
+ <mat-form-field
1015
+ [appearance]="options?.appearance || 'fill'"
1016
+ [class]="options?.htmlClass || ''"
1017
+ [floatLabel]="options?.floatLabel || 'auto'"
1018
+ [style.width]="'100%'">
1019
+ <mat-label *ngIf="!options?.notitle">{{options?.title}}</mat-label>
1020
+ <mat-chip-grid #chipGrid
1021
+ [attr.aria-label]="options?.title"
1022
+ [disabled]="controlDisabled || options?.readonly">
1023
+ <mat-chip-row *ngFor="let tag of tags; let i = index"
1024
+ (removed)="remove(i)">
1025
+ {{tag}}
1026
+ <button matChipRemove aria-label="Remove">
1027
+ <mat-icon>cancel</mat-icon>
1028
+ </button>
1029
+ </mat-chip-row>
1030
+ </mat-chip-grid>
1031
+ <input [matChipInputFor]="chipGrid"
1032
+ [matChipInputSeparatorKeyCodes]="separatorKeyCodes"
1033
+ [matChipInputAddOnBlur]="true"
1034
+ [placeholder]="options?.placeholder || ''"
1035
+ (matChipInputTokenEnd)="add($event)">
1036
+ <mat-hint *ngIf="options?.description && (!options?.showErrors || !options?.errorMessage)"
1037
+ align="end" [innerHTML]="options?.description"></mat-hint>
1038
+ </mat-form-field>
1039
+ <mat-error *ngIf="options?.showErrors && options?.errorMessage"
1040
+ [innerHTML]="options?.errorMessage"></mat-error>`, isInline: true, styles: ["mat-error{font-size:75%;margin-top:-1rem;margin-bottom:.5rem}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$4.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i3$4.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled", "readonly", "matChipInputDisabledInteractive"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i3$4.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i3$4.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i5$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
997
1041
  }
998
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialChipListComponent, decorators: [{
1042
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialChipListComponent, decorators: [{
999
1043
  type: Component,
1000
- args: [{
1001
- selector: 'material-chip-list-widget',
1002
- template: ``,
1003
- standalone: false
1004
- }]
1044
+ args: [{ selector: 'material-chip-list-widget', template: `
1045
+ <mat-form-field
1046
+ [appearance]="options?.appearance || 'fill'"
1047
+ [class]="options?.htmlClass || ''"
1048
+ [floatLabel]="options?.floatLabel || 'auto'"
1049
+ [style.width]="'100%'">
1050
+ <mat-label *ngIf="!options?.notitle">{{options?.title}}</mat-label>
1051
+ <mat-chip-grid #chipGrid
1052
+ [attr.aria-label]="options?.title"
1053
+ [disabled]="controlDisabled || options?.readonly">
1054
+ <mat-chip-row *ngFor="let tag of tags; let i = index"
1055
+ (removed)="remove(i)">
1056
+ {{tag}}
1057
+ <button matChipRemove aria-label="Remove">
1058
+ <mat-icon>cancel</mat-icon>
1059
+ </button>
1060
+ </mat-chip-row>
1061
+ </mat-chip-grid>
1062
+ <input [matChipInputFor]="chipGrid"
1063
+ [matChipInputSeparatorKeyCodes]="separatorKeyCodes"
1064
+ [matChipInputAddOnBlur]="true"
1065
+ [placeholder]="options?.placeholder || ''"
1066
+ (matChipInputTokenEnd)="add($event)">
1067
+ <mat-hint *ngIf="options?.description && (!options?.showErrors || !options?.errorMessage)"
1068
+ align="end" [innerHTML]="options?.description"></mat-hint>
1069
+ </mat-form-field>
1070
+ <mat-error *ngIf="options?.showErrors && options?.errorMessage"
1071
+ [innerHTML]="options?.errorMessage"></mat-error>`, standalone: false, styles: ["mat-error{font-size:75%;margin-top:-1rem;margin-bottom:.5rem}\n"] }]
1005
1072
  }], ctorParameters: () => [{ type: i1.JsonSchemaFormService }], propDecorators: { layoutNode: [{
1006
1073
  type: Input
1007
1074
  }], layoutIndex: [{
@@ -1025,8 +1092,8 @@ class MaterialDatepickerComponent {
1025
1092
  this.options.description = this.options.placeholder;
1026
1093
  }
1027
1094
  }
1028
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialDatepickerComponent, deps: [{ token: MAT_FORM_FIELD_DEFAULT_OPTIONS, optional: true }, { token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
1029
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: MaterialDatepickerComponent, isStandalone: false, selector: "material-datepicker-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
1095
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialDatepickerComponent, deps: [{ token: MAT_FORM_FIELD_DEFAULT_OPTIONS, optional: true }, { token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
1096
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.30", type: MaterialDatepickerComponent, isStandalone: false, selector: "material-datepicker-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
1030
1097
  <mat-form-field [appearance]="options?.appearance || matFormFieldDefaultOptions?.appearance || 'fill'"
1031
1098
  [class]="options?.htmlClass || ''"
1032
1099
  [floatLabel]="options?.floatLabel || matFormFieldDefaultOptions?.floatLabel || 'auto'"
@@ -1075,9 +1142,9 @@ class MaterialDatepickerComponent {
1075
1142
  </mat-form-field>
1076
1143
  <mat-datepicker #picker ></mat-datepicker>
1077
1144
  <mat-error *ngIf="options?.showErrors && options?.errorMessage"
1078
- [innerHTML]="options?.errorMessage"></mat-error>`, isInline: true, styles: ["mat-error{font-size:75%;margin-top:-1rem;margin-bottom:.5rem}::ng-deep json-schema-form mat-form-field .mat-mdc-form-field-wrapper .mat-form-field-flex .mat-form-field-infix{width:initial}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4$3.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i4$3.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i4$3.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i6$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }] }); }
1145
+ [innerHTML]="options?.errorMessage"></mat-error>`, isInline: true, styles: ["mat-error{font-size:75%;margin-top:-1rem;margin-bottom:.5rem}::ng-deep json-schema-form mat-form-field .mat-mdc-form-field-wrapper .mat-form-field-flex .mat-form-field-infix{width:initial}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4$2.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i4$2.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i4$2.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i6$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }] }); }
1079
1146
  }
1080
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialDatepickerComponent, decorators: [{
1147
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialDatepickerComponent, decorators: [{
1081
1148
  type: Component,
1082
1149
  args: [{ selector: 'material-datepicker-widget', template: `
1083
1150
  <mat-form-field [appearance]="options?.appearance || matFormFieldDefaultOptions?.appearance || 'fill'"
@@ -1224,10 +1291,10 @@ class MaterialDesignFrameworkComponent {
1224
1291
  removeItem() {
1225
1292
  this.jsf.removeItem(this);
1226
1293
  }
1227
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialDesignFrameworkComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
1228
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: MaterialDesignFrameworkComponent, isStandalone: false, selector: "material-design-framework", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, usesOnChanges: true, ngImport: i0, template: "<div\n [class.array-item]=\"widgetLayoutNode?.arrayItem && widgetLayoutNode?.type !== '$ref'\"\n [orderable]=\"isOrderable\"\n [dataIndex]=\"dataIndex\"\n [layoutIndex]=\"layoutIndex\"\n [layoutNode]=\"widgetLayoutNode\">\n <svg *ngIf=\"showRemoveButton\"\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"18\" width=\"18\" viewBox=\"0 0 24 24\"\n class=\"close-button\"\n (click)=\"removeItem()\">\n <path\n d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z\"/>\n </svg>\n <select-widget-widget\n [dataIndex]=\"dataIndex\"\n [layoutIndex]=\"layoutIndex\"\n [layoutNode]=\"widgetLayoutNode\"></select-widget-widget>\n</div>\n<div class=\"spacer\" *ngIf=\"widgetLayoutNode?.arrayItem && widgetLayoutNode?.type !== '$ref'\"></div>\n", styles: [".array-item{border-radius:2px;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f;padding:6px;position:relative;transition:all .28s cubic-bezier(.4,0,.2,1)}.close-button{cursor:pointer;position:absolute;top:6px;right:6px;fill:#0006;visibility:hidden;z-index:500}.close-button:hover{fill:#000c}.array-item:hover>.close-button{visibility:visible}.spacer{margin:6px 0}[draggable=true]:hover{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;cursor:move;z-index:10}[draggable=true].drag-target-top{box-shadow:0 -2px #000;position:relative;z-index:20}[draggable=true].drag-target-bottom{box-shadow:0 2px #000;position:relative;z-index:20}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.SelectWidgetComponent, selector: "select-widget-widget", inputs: ["layoutNode", "layoutIndex", "dataIndex"] }, { kind: "directive", type: i1.OrderableDirective, selector: "[orderable]", inputs: ["orderable", "layoutNode", "layoutIndex", "dataIndex"] }] }); }
1294
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialDesignFrameworkComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
1295
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.30", type: MaterialDesignFrameworkComponent, isStandalone: false, selector: "material-design-framework", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, usesOnChanges: true, ngImport: i0, template: "<div\n [class.array-item]=\"widgetLayoutNode?.arrayItem && widgetLayoutNode?.type !== '$ref'\"\n [orderable]=\"isOrderable\"\n [dataIndex]=\"dataIndex\"\n [layoutIndex]=\"layoutIndex\"\n [layoutNode]=\"widgetLayoutNode\">\n <svg *ngIf=\"showRemoveButton\"\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"18\" width=\"18\" viewBox=\"0 0 24 24\"\n class=\"close-button\"\n (click)=\"removeItem()\">\n <path\n d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z\"/>\n </svg>\n <select-widget-widget\n [dataIndex]=\"dataIndex\"\n [layoutIndex]=\"layoutIndex\"\n [layoutNode]=\"widgetLayoutNode\"></select-widget-widget>\n</div>\n<div class=\"spacer\" *ngIf=\"widgetLayoutNode?.arrayItem && widgetLayoutNode?.type !== '$ref'\"></div>\n", styles: [".array-item{border-radius:2px;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f;padding:6px;position:relative;transition:all .28s cubic-bezier(.4,0,.2,1)}.close-button{cursor:pointer;position:absolute;top:6px;right:6px;fill:#0006;visibility:hidden;z-index:500}.close-button:hover{fill:#000c}.array-item:hover>.close-button{visibility:visible}.spacer{margin:6px 0}[draggable=true]:hover{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;cursor:move;z-index:10}[draggable=true].drag-target-top{box-shadow:0 -2px #000;position:relative;z-index:20}[draggable=true].drag-target-bottom{box-shadow:0 2px #000;position:relative;z-index:20}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.SelectWidgetComponent, selector: "select-widget-widget", inputs: ["layoutNode", "layoutIndex", "dataIndex"] }, { kind: "directive", type: i1.OrderableDirective, selector: "[orderable]", inputs: ["orderable", "layoutNode", "layoutIndex", "dataIndex"] }] }); }
1229
1296
  }
1230
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialDesignFrameworkComponent, decorators: [{
1297
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialDesignFrameworkComponent, decorators: [{
1231
1298
  type: Component,
1232
1299
  args: [{ selector: 'material-design-framework', standalone: false, template: "<div\n [class.array-item]=\"widgetLayoutNode?.arrayItem && widgetLayoutNode?.type !== '$ref'\"\n [orderable]=\"isOrderable\"\n [dataIndex]=\"dataIndex\"\n [layoutIndex]=\"layoutIndex\"\n [layoutNode]=\"widgetLayoutNode\">\n <svg *ngIf=\"showRemoveButton\"\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"18\" width=\"18\" viewBox=\"0 0 24 24\"\n class=\"close-button\"\n (click)=\"removeItem()\">\n <path\n d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z\"/>\n </svg>\n <select-widget-widget\n [dataIndex]=\"dataIndex\"\n [layoutIndex]=\"layoutIndex\"\n [layoutNode]=\"widgetLayoutNode\"></select-widget-widget>\n</div>\n<div class=\"spacer\" *ngIf=\"widgetLayoutNode?.arrayItem && widgetLayoutNode?.type !== '$ref'\"></div>\n", styles: [".array-item{border-radius:2px;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f;padding:6px;position:relative;transition:all .28s cubic-bezier(.4,0,.2,1)}.close-button{cursor:pointer;position:absolute;top:6px;right:6px;fill:#0006;visibility:hidden;z-index:500}.close-button:hover{fill:#000c}.array-item:hover>.close-button{visibility:visible}.spacer{margin:6px 0}[draggable=true]:hover{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f;cursor:move;z-index:10}[draggable=true].drag-target-top{box-shadow:0 -2px #000;position:relative;z-index:20}[draggable=true].drag-target-bottom{box-shadow:0 2px #000;position:relative;z-index:20}\n"] }]
1233
1300
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.JsonSchemaFormService }], propDecorators: { layoutNode: [{
@@ -1238,30 +1305,79 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
1238
1305
  type: Input
1239
1306
  }] } });
1240
1307
 
1241
- // TODO: Add this control
1242
1308
  class MaterialFileComponent {
1243
1309
  constructor(jsf) {
1244
1310
  this.jsf = jsf;
1245
1311
  this.controlDisabled = false;
1246
1312
  this.boundControl = false;
1313
+ this.fileName = '';
1247
1314
  }
1248
1315
  ngOnInit() {
1249
1316
  this.options = this.layoutNode.options || {};
1250
1317
  this.jsf.initializeControl(this);
1251
1318
  }
1252
- updateValue(event) {
1253
- this.jsf.updateValue(this, event.target.value);
1254
- }
1255
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialFileComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
1256
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: MaterialFileComponent, isStandalone: false, selector: "material-file-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: ``, isInline: true }); }
1319
+ onFileSelect(event) {
1320
+ const file = event.target?.files?.[0];
1321
+ if (!file) {
1322
+ return;
1323
+ }
1324
+ this.fileName = file.name;
1325
+ const reader = new FileReader();
1326
+ reader.onload = () => {
1327
+ this.jsf.updateValue(this, reader.result);
1328
+ };
1329
+ reader.readAsDataURL(file);
1330
+ }
1331
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialFileComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
1332
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.30", type: MaterialFileComponent, isStandalone: false, selector: "material-file-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
1333
+ <div [class]="options?.htmlClass || ''" [style.width]="'100%'">
1334
+ <label *ngIf="!options?.notitle"
1335
+ [class]="options?.labelHtmlClass || ''">{{options?.title}}</label>
1336
+ <div>
1337
+ <button mat-raised-button type="button"
1338
+ [disabled]="controlDisabled || options?.readonly"
1339
+ (click)="fileInput.click()">
1340
+ <mat-icon>upload_file</mat-icon>
1341
+ {{options?.buttonLabel || 'Choose File'}}
1342
+ </button>
1343
+ <span style="margin-left: 8px">{{fileName || 'No file chosen'}}</span>
1344
+ <input #fileInput type="file"
1345
+ [attr.accept]="options?.accept || null"
1346
+ [hidden]="true"
1347
+ (change)="onFileSelect($event)">
1348
+ </div>
1349
+ <mat-hint *ngIf="options?.description && (!options?.showErrors || !options?.errorMessage)"
1350
+ [innerHTML]="options?.description"
1351
+ style="display:block; font-size:75%; color:rgba(0,0,0,.6); margin-top:4px;"></mat-hint>
1352
+ </div>
1353
+ <mat-error *ngIf="options?.showErrors && options?.errorMessage"
1354
+ [innerHTML]="options?.errorMessage"></mat-error>`, isInline: true, styles: ["mat-error{font-size:75%;margin-top:-1rem;margin-bottom:.5rem}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i5$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
1257
1355
  }
1258
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialFileComponent, decorators: [{
1356
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialFileComponent, decorators: [{
1259
1357
  type: Component,
1260
- args: [{
1261
- selector: 'material-file-widget',
1262
- template: ``,
1263
- standalone: false
1264
- }]
1358
+ args: [{ selector: 'material-file-widget', template: `
1359
+ <div [class]="options?.htmlClass || ''" [style.width]="'100%'">
1360
+ <label *ngIf="!options?.notitle"
1361
+ [class]="options?.labelHtmlClass || ''">{{options?.title}}</label>
1362
+ <div>
1363
+ <button mat-raised-button type="button"
1364
+ [disabled]="controlDisabled || options?.readonly"
1365
+ (click)="fileInput.click()">
1366
+ <mat-icon>upload_file</mat-icon>
1367
+ {{options?.buttonLabel || 'Choose File'}}
1368
+ </button>
1369
+ <span style="margin-left: 8px">{{fileName || 'No file chosen'}}</span>
1370
+ <input #fileInput type="file"
1371
+ [attr.accept]="options?.accept || null"
1372
+ [hidden]="true"
1373
+ (change)="onFileSelect($event)">
1374
+ </div>
1375
+ <mat-hint *ngIf="options?.description && (!options?.showErrors || !options?.errorMessage)"
1376
+ [innerHTML]="options?.description"
1377
+ style="display:block; font-size:75%; color:rgba(0,0,0,.6); margin-top:4px;"></mat-hint>
1378
+ </div>
1379
+ <mat-error *ngIf="options?.showErrors && options?.errorMessage"
1380
+ [innerHTML]="options?.errorMessage"></mat-error>`, standalone: false, styles: ["mat-error{font-size:75%;margin-top:-1rem;margin-bottom:.5rem}\n"] }]
1265
1381
  }], ctorParameters: () => [{ type: i1.JsonSchemaFormService }], propDecorators: { layoutNode: [{
1266
1382
  type: Input
1267
1383
  }], layoutIndex: [{
@@ -1288,8 +1404,8 @@ class MaterialInputComponent {
1288
1404
  updateValue(event) {
1289
1405
  this.jsf.updateValue(this, event.target.value);
1290
1406
  }
1291
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialInputComponent, deps: [{ token: MAT_FORM_FIELD_DEFAULT_OPTIONS, optional: true }, { token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
1292
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: MaterialInputComponent, isStandalone: false, selector: "material-input-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
1407
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialInputComponent, deps: [{ token: MAT_FORM_FIELD_DEFAULT_OPTIONS, optional: true }, { token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
1408
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.30", type: MaterialInputComponent, isStandalone: false, selector: "material-input-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
1293
1409
  <mat-form-field [appearance]="options?.appearance || matFormFieldDefaultOptions?.appearance || 'fill'"
1294
1410
  [class]="options?.htmlClass || ''"
1295
1411
  [floatLabel]="options?.floatLabel || matFormFieldDefaultOptions?.floatLabel || 'auto'"
@@ -1340,9 +1456,9 @@ class MaterialInputComponent {
1340
1456
  </mat-autocomplete>
1341
1457
  </mat-form-field>
1342
1458
  <mat-error *ngIf="options?.showErrors && options?.errorMessage"
1343
- [innerHTML]="options?.errorMessage"></mat-error>`, isInline: true, styles: ["mat-error{font-size:75%;margin-top:-1rem;margin-bottom:.5rem}::ng-deep json-schema-form mat-form-field .mat-mdc-form-field-wrapper .mat-form-field-flex .mat-form-field-infix{width:initial}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4$4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i4$4.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i6$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }] }); }
1459
+ [innerHTML]="options?.errorMessage"></mat-error>`, isInline: true, styles: ["mat-error{font-size:75%;margin-top:-1rem;margin-bottom:.5rem}::ng-deep json-schema-form mat-form-field .mat-mdc-form-field-wrapper .mat-form-field-flex .mat-form-field-infix{width:initial}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4$3.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i4$3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i6$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }] }); }
1344
1460
  }
1345
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialInputComponent, decorators: [{
1461
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialInputComponent, decorators: [{
1346
1462
  type: Component,
1347
1463
  args: [{ selector: 'material-input-widget', template: `
1348
1464
  <mat-form-field [appearance]="options?.appearance || matFormFieldDefaultOptions?.appearance || 'fill'"
@@ -1435,8 +1551,8 @@ class MaterialNumberComponent {
1435
1551
  updateValue(event) {
1436
1552
  this.jsf.updateValue(this, event.target.value);
1437
1553
  }
1438
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialNumberComponent, deps: [{ token: MAT_FORM_FIELD_DEFAULT_OPTIONS, optional: true }, { token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
1439
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: MaterialNumberComponent, isStandalone: false, selector: "material-number-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
1554
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialNumberComponent, deps: [{ token: MAT_FORM_FIELD_DEFAULT_OPTIONS, optional: true }, { token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
1555
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.30", type: MaterialNumberComponent, isStandalone: false, selector: "material-number-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
1440
1556
  <mat-form-field [appearance]="options?.appearance || matFormFieldDefaultOptions?.appearance || 'fill'"
1441
1557
  [class]="options?.htmlClass || ''"
1442
1558
  [floatLabel]="options?.floatLabel || matFormFieldDefaultOptions?.floatLabel || 'auto'"
@@ -1485,7 +1601,7 @@ class MaterialNumberComponent {
1485
1601
  <mat-error *ngIf="options?.showErrors && options?.errorMessage"
1486
1602
  [innerHTML]="options?.errorMessage"></mat-error>`, isInline: true, styles: ["mat-error{font-size:75%;margin-top:-1rem;margin-bottom:.5rem}::ng-deep json-schema-form mat-form-field .mat-mdc-form-field-wrapper .mat-form-field-flex .mat-form-field-infix{width:initial}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i6$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }] }); }
1487
1603
  }
1488
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialNumberComponent, decorators: [{
1604
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialNumberComponent, decorators: [{
1489
1605
  type: Component,
1490
1606
  args: [{ selector: 'material-number-widget', template: `
1491
1607
  <mat-form-field [appearance]="options?.appearance || matFormFieldDefaultOptions?.appearance || 'fill'"
@@ -1548,31 +1664,198 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
1548
1664
  type: Input
1549
1665
  }] } });
1550
1666
 
1551
- // TODO: Add this control
1552
1667
  class MaterialOneOfComponent {
1553
- constructor(jsf) {
1668
+ constructor(matFormFieldDefaultOptions, jsf) {
1669
+ this.matFormFieldDefaultOptions = matFormFieldDefaultOptions;
1554
1670
  this.jsf = jsf;
1555
1671
  this.controlDisabled = false;
1556
1672
  this.boundControl = false;
1673
+ this.selectList = [];
1674
+ this.isFieldset = false;
1675
+ this.selectedValue = 0;
1676
+ this._selectedItem = 0;
1677
+ this.fieldsetValueMap = new Map();
1678
+ }
1679
+ get selectedItem() {
1680
+ if (this.isFieldset && this.formControl) {
1681
+ const val = this.formControl.value ?? this.controlValue;
1682
+ return this.fieldsetValueMap.get(val) ?? this._selectedItem;
1683
+ }
1684
+ return this._selectedItem;
1557
1685
  }
1558
1686
  ngOnInit() {
1559
1687
  this.options = this.layoutNode.options || {};
1560
- this.jsf.initializeControl(this);
1688
+ const type = this.layoutNode.type;
1689
+ this.isFieldset = (type === 'selectfieldset' || type === 'optionfieldset')
1690
+ && Array.isArray(this.layoutNode.items) && this.layoutNode.items.length > 0;
1691
+ if (this.isFieldset && !this.options.titleMap && !this.options.enum) {
1692
+ this.selectList = this.layoutNode.items.map((item, i) => ({
1693
+ name: item.options?.legend || item.options?.title || item.name || `Option ${i + 1}`,
1694
+ value: i
1695
+ }));
1696
+ }
1697
+ else {
1698
+ this.selectList = buildTitleMap(this.options.titleMap || this.options.enumNames, this.options.enum, !!this.options.required, !!this.options.flatList);
1699
+ }
1700
+ if (this.isFieldset && (this.options.titleMap || this.options.enum)) {
1701
+ let idx = 0;
1702
+ for (const entry of this.selectList) {
1703
+ if (entry.value != null && entry.value !== '') {
1704
+ if (idx === 0) {
1705
+ this.selectedValue = entry.value;
1706
+ }
1707
+ this.fieldsetValueMap.set(entry.value, idx++);
1708
+ }
1709
+ }
1710
+ }
1711
+ if (!this.isFieldset || this.options.titleMap || this.options.enum) {
1712
+ this.jsf.initializeControl(this, !this.options.readonly);
1713
+ }
1714
+ if (this.isFieldset && this.controlValue != null) {
1715
+ this.selectedValue = this.controlValue;
1716
+ this._selectedItem = this.fieldsetValueMap.get(this.controlValue)
1717
+ ?? (typeof this.controlValue === 'number' ? this.controlValue : 0);
1718
+ }
1719
+ }
1720
+ selectChild(event) {
1721
+ this.selectedValue = event.value;
1722
+ this._selectedItem =
1723
+ this.fieldsetValueMap.get(event.value) ?? event.value;
1561
1724
  }
1562
1725
  updateValue(event) {
1563
- this.jsf.updateValue(this, event.target.value);
1726
+ this.options.showErrors = true;
1727
+ this.jsf.updateValue(this, event.value);
1564
1728
  }
1565
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialOneOfComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
1566
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: MaterialOneOfComponent, isStandalone: false, selector: "material-one-of-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: ``, isInline: true }); }
1729
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialOneOfComponent, deps: [{ token: MAT_FORM_FIELD_DEFAULT_OPTIONS, optional: true }, { token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
1730
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.30", type: MaterialOneOfComponent, isStandalone: false, selector: "material-one-of-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
1731
+ <mat-form-field
1732
+ [appearance]="options?.appearance || matFormFieldDefaultOptions?.appearance || 'fill'"
1733
+ [class]="options?.htmlClass || ''"
1734
+ [floatLabel]="options?.floatLabel || matFormFieldDefaultOptions?.floatLabel || 'auto'"
1735
+ [style.width]="'100%'">
1736
+ <mat-label *ngIf="!options?.notitle">{{options?.title}}</mat-label>
1737
+
1738
+ <mat-select *ngIf="boundControl"
1739
+ [formControl]="formControl"
1740
+ [attr.aria-describedby]="'control' + layoutNode?._id + 'Status'"
1741
+ [id]="'control' + layoutNode?._id"
1742
+ [placeholder]="options?.notitle ? options?.placeholder : options?.title"
1743
+ [required]="options?.required"
1744
+ [style.width]="'100%'"
1745
+ (blur)="options.showErrors = true">
1746
+ <mat-option *ngFor="let item of selectList" [value]="item?.value">
1747
+ <span [innerHTML]="item?.name"></span>
1748
+ </mat-option>
1749
+ </mat-select>
1750
+
1751
+ <mat-select *ngIf="!boundControl && !isFieldset"
1752
+ [attr.aria-describedby]="'control' + layoutNode?._id + 'Status'"
1753
+ [id]="'control' + layoutNode?._id"
1754
+ [disabled]="controlDisabled || options?.readonly"
1755
+ [placeholder]="options?.notitle ? options?.placeholder : options?.title"
1756
+ [required]="options?.required"
1757
+ [style.width]="'100%'"
1758
+ [value]="controlValue"
1759
+ (selectionChange)="updateValue($event)"
1760
+ (blur)="options.showErrors = true">
1761
+ <mat-option *ngFor="let item of selectList" [value]="item?.value">
1762
+ <span [innerHTML]="item?.name"></span>
1763
+ </mat-option>
1764
+ </mat-select>
1765
+
1766
+ <mat-select *ngIf="!boundControl && isFieldset"
1767
+ [attr.aria-describedby]="'control' + layoutNode?._id + 'Status'"
1768
+ [id]="'control' + layoutNode?._id"
1769
+ [disabled]="controlDisabled || options?.readonly"
1770
+ [style.width]="'100%'"
1771
+ [value]="selectedValue"
1772
+ (selectionChange)="selectChild($event)">
1773
+ <mat-option *ngFor="let item of selectList" [value]="item?.value">
1774
+ <span [innerHTML]="item?.name"></span>
1775
+ </mat-option>
1776
+ </mat-select>
1777
+
1778
+ <mat-hint *ngIf="options?.description && (!options?.showErrors || !options?.errorMessage)"
1779
+ align="end" [innerHTML]="options?.description"></mat-hint>
1780
+ </mat-form-field>
1781
+ <mat-error *ngIf="options?.showErrors && options?.errorMessage"
1782
+ [innerHTML]="options?.errorMessage"></mat-error>
1783
+
1784
+ <div *ngFor="let layoutItem of layoutNode?.items; let i = index">
1785
+ <select-framework-widget *ngIf="isFieldset && selectedItem === i"
1786
+ [dataIndex]="layoutNode?.dataType === 'array' ? (dataIndex || []).concat(i) : dataIndex"
1787
+ [layoutIndex]="(layoutIndex || []).concat(i)"
1788
+ [layoutNode]="layoutItem"></select-framework-widget>
1789
+ </div>`, isInline: true, styles: ["mat-error{font-size:75%;margin-top:-1rem;margin-bottom:.5rem}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4$3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i6$2.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i1.SelectFrameworkComponent, selector: "select-framework-widget", inputs: ["layoutNode", "layoutIndex", "dataIndex"] }] }); }
1567
1790
  }
1568
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialOneOfComponent, decorators: [{
1791
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialOneOfComponent, decorators: [{
1569
1792
  type: Component,
1570
- args: [{
1571
- selector: 'material-one-of-widget',
1572
- template: ``,
1573
- standalone: false
1574
- }]
1575
- }], ctorParameters: () => [{ type: i1.JsonSchemaFormService }], propDecorators: { layoutNode: [{
1793
+ args: [{ selector: 'material-one-of-widget', template: `
1794
+ <mat-form-field
1795
+ [appearance]="options?.appearance || matFormFieldDefaultOptions?.appearance || 'fill'"
1796
+ [class]="options?.htmlClass || ''"
1797
+ [floatLabel]="options?.floatLabel || matFormFieldDefaultOptions?.floatLabel || 'auto'"
1798
+ [style.width]="'100%'">
1799
+ <mat-label *ngIf="!options?.notitle">{{options?.title}}</mat-label>
1800
+
1801
+ <mat-select *ngIf="boundControl"
1802
+ [formControl]="formControl"
1803
+ [attr.aria-describedby]="'control' + layoutNode?._id + 'Status'"
1804
+ [id]="'control' + layoutNode?._id"
1805
+ [placeholder]="options?.notitle ? options?.placeholder : options?.title"
1806
+ [required]="options?.required"
1807
+ [style.width]="'100%'"
1808
+ (blur)="options.showErrors = true">
1809
+ <mat-option *ngFor="let item of selectList" [value]="item?.value">
1810
+ <span [innerHTML]="item?.name"></span>
1811
+ </mat-option>
1812
+ </mat-select>
1813
+
1814
+ <mat-select *ngIf="!boundControl && !isFieldset"
1815
+ [attr.aria-describedby]="'control' + layoutNode?._id + 'Status'"
1816
+ [id]="'control' + layoutNode?._id"
1817
+ [disabled]="controlDisabled || options?.readonly"
1818
+ [placeholder]="options?.notitle ? options?.placeholder : options?.title"
1819
+ [required]="options?.required"
1820
+ [style.width]="'100%'"
1821
+ [value]="controlValue"
1822
+ (selectionChange)="updateValue($event)"
1823
+ (blur)="options.showErrors = true">
1824
+ <mat-option *ngFor="let item of selectList" [value]="item?.value">
1825
+ <span [innerHTML]="item?.name"></span>
1826
+ </mat-option>
1827
+ </mat-select>
1828
+
1829
+ <mat-select *ngIf="!boundControl && isFieldset"
1830
+ [attr.aria-describedby]="'control' + layoutNode?._id + 'Status'"
1831
+ [id]="'control' + layoutNode?._id"
1832
+ [disabled]="controlDisabled || options?.readonly"
1833
+ [style.width]="'100%'"
1834
+ [value]="selectedValue"
1835
+ (selectionChange)="selectChild($event)">
1836
+ <mat-option *ngFor="let item of selectList" [value]="item?.value">
1837
+ <span [innerHTML]="item?.name"></span>
1838
+ </mat-option>
1839
+ </mat-select>
1840
+
1841
+ <mat-hint *ngIf="options?.description && (!options?.showErrors || !options?.errorMessage)"
1842
+ align="end" [innerHTML]="options?.description"></mat-hint>
1843
+ </mat-form-field>
1844
+ <mat-error *ngIf="options?.showErrors && options?.errorMessage"
1845
+ [innerHTML]="options?.errorMessage"></mat-error>
1846
+
1847
+ <div *ngFor="let layoutItem of layoutNode?.items; let i = index">
1848
+ <select-framework-widget *ngIf="isFieldset && selectedItem === i"
1849
+ [dataIndex]="layoutNode?.dataType === 'array' ? (dataIndex || []).concat(i) : dataIndex"
1850
+ [layoutIndex]="(layoutIndex || []).concat(i)"
1851
+ [layoutNode]="layoutItem"></select-framework-widget>
1852
+ </div>`, standalone: false, styles: ["mat-error{font-size:75%;margin-top:-1rem;margin-bottom:.5rem}\n"] }]
1853
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
1854
+ type: Inject,
1855
+ args: [MAT_FORM_FIELD_DEFAULT_OPTIONS]
1856
+ }, {
1857
+ type: Optional
1858
+ }] }, { type: i1.JsonSchemaFormService }], propDecorators: { layoutNode: [{
1576
1859
  type: Input
1577
1860
  }], layoutIndex: [{
1578
1861
  type: Input
@@ -1600,8 +1883,8 @@ class MaterialRadiosComponent {
1600
1883
  this.options.showErrors = true;
1601
1884
  this.jsf.updateValue(this, value);
1602
1885
  }
1603
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialRadiosComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
1604
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: MaterialRadiosComponent, isStandalone: false, selector: "material-radios-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
1886
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialRadiosComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
1887
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.30", type: MaterialRadiosComponent, isStandalone: false, selector: "material-radios-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
1605
1888
  <div>
1606
1889
  <div *ngIf="options?.title">
1607
1890
  <label
@@ -1641,9 +1924,9 @@ class MaterialRadiosComponent {
1641
1924
  </mat-radio-group>
1642
1925
  <mat-error *ngIf="options?.showErrors && options?.errorMessage"
1643
1926
  [innerHTML]="options?.errorMessage"></mat-error>
1644
- </div>`, isInline: true, styles: ["mat-radio-group{display:inline-flex}mat-radio-button{margin:2px}mat-error{font-size:75%}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i5$1.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i5$1.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }] }); }
1927
+ </div>`, isInline: true, styles: ["mat-radio-group{display:inline-flex}mat-radio-button{margin:2px}mat-error{font-size:75%}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i5$2.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i5$2.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }] }); }
1645
1928
  }
1646
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialRadiosComponent, decorators: [{
1929
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialRadiosComponent, decorators: [{
1647
1930
  type: Component,
1648
1931
  args: [{ selector: 'material-radios-widget', template: `
1649
1932
  <div>
@@ -1715,8 +1998,8 @@ class MaterialSelectComponent {
1715
1998
  this.options.showErrors = true;
1716
1999
  this.jsf.updateValue(this, event.value);
1717
2000
  }
1718
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialSelectComponent, deps: [{ token: MAT_FORM_FIELD_DEFAULT_OPTIONS, optional: true }, { token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
1719
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: MaterialSelectComponent, isStandalone: false, selector: "material-select-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
2001
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialSelectComponent, deps: [{ token: MAT_FORM_FIELD_DEFAULT_OPTIONS, optional: true }, { token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
2002
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.30", type: MaterialSelectComponent, isStandalone: false, selector: "material-select-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
1720
2003
  <mat-form-field
1721
2004
  [appearance]="options?.appearance || matFormFieldDefaultOptions?.appearance || 'fill'"
1722
2005
  [class]="options?.htmlClass || ''"
@@ -1784,9 +2067,9 @@ class MaterialSelectComponent {
1784
2067
  align="end" [innerHTML]="options?.description"></mat-hint>
1785
2068
  </mat-form-field>
1786
2069
  <mat-error *ngIf="options?.showErrors && options?.errorMessage"
1787
- [innerHTML]="options?.errorMessage"></mat-error>`, isInline: true, styles: ["mat-error{font-size:75%;margin-top:-1rem;margin-bottom:.5rem}::ng-deep json-schema-form mat-form-field .mat-mdc-form-field-wrapper .mat-form-field-flex .mat-form-field-infix{width:initial}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4$4.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i4$4.MatOptgroup, selector: "mat-optgroup", inputs: ["label", "disabled"], exportAs: ["matOptgroup"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i6$2.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }] }); }
2070
+ [innerHTML]="options?.errorMessage"></mat-error>`, isInline: true, styles: ["mat-error{font-size:75%;margin-top:-1rem;margin-bottom:.5rem}::ng-deep json-schema-form mat-form-field .mat-mdc-form-field-wrapper .mat-form-field-flex .mat-form-field-infix{width:initial}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4$3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i4$3.MatOptgroup, selector: "mat-optgroup", inputs: ["label", "disabled"], exportAs: ["matOptgroup"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i6$2.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }] }); }
1788
2071
  }
1789
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialSelectComponent, decorators: [{
2072
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialSelectComponent, decorators: [{
1790
2073
  type: Component,
1791
2074
  args: [{ selector: 'material-select-widget', template: `
1792
2075
  <mat-form-field
@@ -1890,8 +2173,8 @@ class MaterialSliderComponent {
1890
2173
  this.options.showErrors = true;
1891
2174
  this.jsf.updateValue(this, event.value);
1892
2175
  }
1893
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialSliderComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
1894
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: MaterialSliderComponent, isStandalone: false, selector: "material-slider-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
2176
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialSliderComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
2177
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.30", type: MaterialSliderComponent, isStandalone: false, selector: "material-slider-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
1895
2178
  <mat-slider discrete *ngIf="boundControl"
1896
2179
  [attr.aria-describedby]="'control' + layoutNode?._id + 'Status'"
1897
2180
  [id]="'control' + layoutNode?._id"
@@ -1910,9 +2193,9 @@ class MaterialSliderComponent {
1910
2193
  [style.width]="'100%'"
1911
2194
  (blur)="options.showErrors = true" #ngSlider><input matSliderThumb [value]="controlValue" (change)="updateValue({source: ngSliderThumb, parent: ngSlider, value: ngSliderThumb.value})" #ngSliderThumb="matSliderThumb" /></mat-slider>
1912
2195
  <mat-error *ngIf="options?.showErrors && options?.errorMessage"
1913
- [innerHTML]="options?.errorMessage"></mat-error>`, isInline: true, styles: ["mat-error{font-size:75%}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i5$2.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i5$2.MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }] }); }
2196
+ [innerHTML]="options?.errorMessage"></mat-error>`, isInline: true, styles: ["mat-error{font-size:75%}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i5$3.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i5$3.MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }] }); }
1914
2197
  }
1915
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialSliderComponent, decorators: [{
2198
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialSliderComponent, decorators: [{
1916
2199
  type: Component,
1917
2200
  args: [{ selector: 'material-slider-widget', template: `
1918
2201
  <mat-slider discrete *ngIf="boundControl"
@@ -1942,28 +2225,110 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
1942
2225
  type: Input
1943
2226
  }] } });
1944
2227
 
1945
- // TODO: Add this control
1946
2228
  class MaterialStepperComponent {
1947
2229
  constructor(jsf) {
1948
2230
  this.jsf = jsf;
1949
2231
  this.controlDisabled = false;
1950
2232
  this.boundControl = false;
2233
+ this.selectedItem = 0;
2234
+ this.showAddTab = true;
1951
2235
  }
1952
2236
  ngOnInit() {
1953
2237
  this.options = this.layoutNode.options || {};
1954
- this.jsf.initializeControl(this);
2238
+ this.itemCount = this.layoutNode.items.length - 1;
2239
+ this.updateControl();
1955
2240
  }
1956
- updateValue(event) {
1957
- this.jsf.updateValue(this, event.target.value);
2241
+ select(index) {
2242
+ if (index >= this.layoutNode.items.length) {
2243
+ return;
2244
+ }
2245
+ if (this.layoutNode.items[index].type === '$ref') {
2246
+ if (!this.showAddTab) {
2247
+ return;
2248
+ }
2249
+ this.jsf.addItem({
2250
+ layoutNode: this.layoutNode.items[index],
2251
+ layoutIndex: this.layoutIndex.concat(index),
2252
+ dataIndex: this.dataIndex.concat(index)
2253
+ });
2254
+ this.updateControl();
2255
+ }
2256
+ this.selectedItem = index;
1958
2257
  }
1959
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialStepperComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
1960
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: MaterialStepperComponent, isStandalone: false, selector: "material-stepper-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: ``, isInline: true }); }
2258
+ updateControl() {
2259
+ this.itemCount = this.layoutNode.items.length - 1;
2260
+ const lastItem = this.layoutNode.items[this.layoutNode.items.length - 1];
2261
+ this.showAddTab = lastItem.type === '$ref' &&
2262
+ this.itemCount < (lastItem.options.maxItems || 1000);
2263
+ }
2264
+ hasNextVisible(currentIndex) {
2265
+ const next = currentIndex + 1;
2266
+ if (next > this.itemCount) {
2267
+ return false;
2268
+ }
2269
+ const nextItem = this.layoutNode.items[next];
2270
+ if (nextItem?.type === '$ref' && !this.showAddTab) {
2271
+ return false;
2272
+ }
2273
+ return true;
2274
+ }
2275
+ setStepTitle(item, index) {
2276
+ return this.jsf.setArrayItemTitle(this, item, index);
2277
+ }
2278
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialStepperComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
2279
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.30", type: MaterialStepperComponent, isStandalone: false, selector: "material-stepper-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
2280
+ <mat-stepper
2281
+ [selectedIndex]="selectedItem"
2282
+ [linear]="options?.linear || false"
2283
+ (selectionChange)="select($event.selectedIndex)">
2284
+ <ng-container *ngFor="let item of layoutNode?.items; let i = index">
2285
+ <mat-step *ngIf="showAddTab || item.type !== '$ref'">
2286
+ <ng-template matStepLabel>
2287
+ <span [innerHTML]="setStepTitle(item, i)"></span>
2288
+ </ng-template>
2289
+ <ng-template matStepContent>
2290
+ <select-framework-widget
2291
+ [class]="(options?.fieldHtmlClass || '') + ' ' + (options?.activeClass || '')"
2292
+ [dataIndex]="layoutNode?.dataType === 'array' ? (dataIndex || []).concat(i) : dataIndex"
2293
+ [layoutIndex]="(layoutIndex || []).concat(i)"
2294
+ [layoutNode]="item"></select-framework-widget>
2295
+ <div style="margin-top: 16px">
2296
+ <button mat-button matStepperPrevious *ngIf="i > 0" type="button">Back</button>
2297
+ <button mat-button matStepperNext *ngIf="hasNextVisible(i)" type="button">Next</button>
2298
+ </div>
2299
+ </ng-template>
2300
+ </mat-step>
2301
+ </ng-container>
2302
+ </mat-stepper>`, isInline: true, dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i4$4.MatStep, selector: "mat-step", inputs: ["color"], exportAs: ["matStep"] }, { kind: "directive", type: i4$4.MatStepLabel, selector: "[matStepLabel]" }, { kind: "component", type: i4$4.MatStepper, selector: "mat-stepper, mat-vertical-stepper, mat-horizontal-stepper, [matStepper]", inputs: ["disableRipple", "color", "labelPosition", "headerPosition", "animationDuration"], outputs: ["animationDone"], exportAs: ["matStepper", "matVerticalStepper", "matHorizontalStepper"] }, { kind: "directive", type: i4$4.MatStepperNext, selector: "button[matStepperNext]" }, { kind: "directive", type: i4$4.MatStepperPrevious, selector: "button[matStepperPrevious]" }, { kind: "directive", type: i4$4.MatStepContent, selector: "ng-template[matStepContent]" }, { kind: "component", type: i1.SelectFrameworkComponent, selector: "select-framework-widget", inputs: ["layoutNode", "layoutIndex", "dataIndex"] }] }); }
1961
2303
  }
1962
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialStepperComponent, decorators: [{
2304
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialStepperComponent, decorators: [{
1963
2305
  type: Component,
1964
2306
  args: [{
1965
2307
  selector: 'material-stepper-widget',
1966
- template: ``,
2308
+ template: `
2309
+ <mat-stepper
2310
+ [selectedIndex]="selectedItem"
2311
+ [linear]="options?.linear || false"
2312
+ (selectionChange)="select($event.selectedIndex)">
2313
+ <ng-container *ngFor="let item of layoutNode?.items; let i = index">
2314
+ <mat-step *ngIf="showAddTab || item.type !== '$ref'">
2315
+ <ng-template matStepLabel>
2316
+ <span [innerHTML]="setStepTitle(item, i)"></span>
2317
+ </ng-template>
2318
+ <ng-template matStepContent>
2319
+ <select-framework-widget
2320
+ [class]="(options?.fieldHtmlClass || '') + ' ' + (options?.activeClass || '')"
2321
+ [dataIndex]="layoutNode?.dataType === 'array' ? (dataIndex || []).concat(i) : dataIndex"
2322
+ [layoutIndex]="(layoutIndex || []).concat(i)"
2323
+ [layoutNode]="item"></select-framework-widget>
2324
+ <div style="margin-top: 16px">
2325
+ <button mat-button matStepperPrevious *ngIf="i > 0" type="button">Back</button>
2326
+ <button mat-button matStepperNext *ngIf="hasNextVisible(i)" type="button">Next</button>
2327
+ </div>
2328
+ </ng-template>
2329
+ </mat-step>
2330
+ </ng-container>
2331
+ </mat-stepper>`,
1967
2332
  standalone: false
1968
2333
  }]
1969
2334
  }], ctorParameters: () => [{ type: i1.JsonSchemaFormService }], propDecorators: { layoutNode: [{
@@ -2005,8 +2370,8 @@ class MaterialTabsComponent {
2005
2370
  setTabTitle(item, index) {
2006
2371
  return this.jsf.setArrayItemTitle(this, item, index);
2007
2372
  }
2008
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialTabsComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
2009
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: MaterialTabsComponent, isStandalone: false, selector: "material-tabs-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
2373
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialTabsComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
2374
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.30", type: MaterialTabsComponent, isStandalone: false, selector: "material-tabs-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
2010
2375
  <nav mat-tab-nav-bar
2011
2376
  [attr.aria-label]="options?.label || options?.title || ''"
2012
2377
  [tabPanel]="tabPanel"
@@ -2029,9 +2394,9 @@ class MaterialTabsComponent {
2029
2394
  [layoutIndex]="(layoutIndex || []).concat(i)"
2030
2395
  [layoutNode]="layoutItem"></select-framework-widget>
2031
2396
  </div>
2032
- </div>`, isInline: true, styles: ["a{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$4.MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["fitInkBarToContent", "mat-stretch-tabs", "animationDuration", "backgroundColor", "disableRipple", "color", "tabPanel"], exportAs: ["matTabNavBar", "matTabNav"] }, { kind: "component", type: i3$4.MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["active", "disabled", "disableRipple", "tabIndex", "id"], exportAs: ["matTabLink"] }, { kind: "component", type: i1.SelectFrameworkComponent, selector: "select-framework-widget", inputs: ["layoutNode", "layoutIndex", "dataIndex"] }] }); }
2397
+ </div>`, isInline: true, styles: ["a{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$5.MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["fitInkBarToContent", "mat-stretch-tabs", "animationDuration", "backgroundColor", "disableRipple", "color", "tabPanel"], exportAs: ["matTabNavBar", "matTabNav"] }, { kind: "component", type: i3$5.MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["active", "disabled", "disableRipple", "tabIndex", "id"], exportAs: ["matTabLink"] }, { kind: "component", type: i1.SelectFrameworkComponent, selector: "select-framework-widget", inputs: ["layoutNode", "layoutIndex", "dataIndex"] }] }); }
2033
2398
  }
2034
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialTabsComponent, decorators: [{
2399
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialTabsComponent, decorators: [{
2035
2400
  type: Component,
2036
2401
  args: [{ selector: 'material-tabs-widget', template: `
2037
2402
  <nav mat-tab-nav-bar
@@ -2082,8 +2447,8 @@ class MaterialTextareaComponent {
2082
2447
  updateValue(event) {
2083
2448
  this.jsf.updateValue(this, event.target.value);
2084
2449
  }
2085
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialTextareaComponent, deps: [{ token: MAT_FORM_FIELD_DEFAULT_OPTIONS, optional: true }, { token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
2086
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: MaterialTextareaComponent, isStandalone: false, selector: "material-textarea-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
2450
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialTextareaComponent, deps: [{ token: MAT_FORM_FIELD_DEFAULT_OPTIONS, optional: true }, { token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component }); }
2451
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.30", type: MaterialTextareaComponent, isStandalone: false, selector: "material-textarea-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
2087
2452
  <mat-form-field [appearance]="options?.appearance || matFormFieldDefaultOptions?.appearance || 'fill'"
2088
2453
  [class]="options?.htmlClass || ''"
2089
2454
  [floatLabel]="options?.floatLabel || matFormFieldDefaultOptions?.floatLabel || 'auto'"
@@ -2130,7 +2495,7 @@ class MaterialTextareaComponent {
2130
2495
  <mat-error *ngIf="options?.showErrors && options?.errorMessage"
2131
2496
  [innerHTML]="options?.errorMessage"></mat-error>`, isInline: true, styles: ["mat-error{font-size:75%;margin-top:-1rem;margin-bottom:.5rem}::ng-deep json-schema-form mat-form-field .mat-mdc-form-field-wrapper .mat-form-field-flex .mat-form-field-infix{width:initial}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i6$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }] }); }
2132
2497
  }
2133
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialTextareaComponent, decorators: [{
2498
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialTextareaComponent, decorators: [{
2134
2499
  type: Component,
2135
2500
  args: [{ selector: 'material-textarea-widget', template: `
2136
2501
  <mat-form-field [appearance]="options?.appearance || matFormFieldDefaultOptions?.appearance || 'fill'"
@@ -2249,10 +2614,10 @@ class MaterialDesignFramework extends Framework {
2249
2614
  'wizard': 'stepper',
2250
2615
  };
2251
2616
  }
2252
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialDesignFramework, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
2253
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialDesignFramework }); }
2617
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialDesignFramework, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
2618
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialDesignFramework }); }
2254
2619
  }
2255
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialDesignFramework, decorators: [{
2620
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialDesignFramework, decorators: [{
2256
2621
  type: Injectable
2257
2622
  }] });
2258
2623
 
@@ -2272,8 +2637,8 @@ const ANGULAR_MATERIAL_MODULES = [
2272
2637
  MatToolbarModule, MatMenuModule, MatToolbarModule,
2273
2638
  ];
2274
2639
  class MaterialDesignFrameworkModule {
2275
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialDesignFrameworkModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2276
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.25", ngImport: i0, type: MaterialDesignFrameworkModule, declarations: [FlexLayoutRootComponent, FlexLayoutSectionComponent, MaterialAddReferenceComponent, MaterialOneOfComponent, MaterialButtonComponent, MaterialButtonGroupComponent, MaterialCheckboxComponent, MaterialCheckboxesComponent, MaterialChipListComponent, MaterialDatepickerComponent, MaterialFileComponent, MaterialInputComponent, MaterialNumberComponent, MaterialRadiosComponent, MaterialSelectComponent, MaterialSliderComponent, MaterialStepperComponent, MaterialTabsComponent, MaterialTextareaComponent, MaterialDesignFrameworkComponent], imports: [CommonModule,
2640
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialDesignFrameworkModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2641
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.30", ngImport: i0, type: MaterialDesignFrameworkModule, declarations: [FlexLayoutRootComponent, FlexLayoutSectionComponent, MaterialAddReferenceComponent, MaterialOneOfComponent, MaterialButtonComponent, MaterialButtonGroupComponent, MaterialCheckboxComponent, MaterialCheckboxesComponent, MaterialChipListComponent, MaterialDatepickerComponent, MaterialFileComponent, MaterialInputComponent, MaterialNumberComponent, MaterialRadiosComponent, MaterialSelectComponent, MaterialSliderComponent, MaterialStepperComponent, MaterialTabsComponent, MaterialTextareaComponent, MaterialDesignFrameworkComponent], imports: [CommonModule,
2277
2642
  FormsModule,
2278
2643
  ReactiveFormsModule, MatAutocompleteModule, MatButtonModule, MatButtonToggleModule, MatCardModule,
2279
2644
  MatCheckboxModule, MatChipsModule, MatDatepickerModule, MatExpansionModule,
@@ -2282,7 +2647,7 @@ class MaterialDesignFrameworkModule {
2282
2647
  MatStepperModule, MatTabsModule, MatTooltipModule,
2283
2648
  MatToolbarModule, MatMenuModule, MatToolbarModule, WidgetLibraryModule,
2284
2649
  JsonSchemaFormModule], exports: [JsonSchemaFormModule, FlexLayoutRootComponent, FlexLayoutSectionComponent, MaterialAddReferenceComponent, MaterialOneOfComponent, MaterialButtonComponent, MaterialButtonGroupComponent, MaterialCheckboxComponent, MaterialCheckboxesComponent, MaterialChipListComponent, MaterialDatepickerComponent, MaterialFileComponent, MaterialInputComponent, MaterialNumberComponent, MaterialRadiosComponent, MaterialSelectComponent, MaterialSliderComponent, MaterialStepperComponent, MaterialTabsComponent, MaterialTextareaComponent, MaterialDesignFrameworkComponent] }); }
2285
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialDesignFrameworkModule, providers: [
2650
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialDesignFrameworkModule, providers: [
2286
2651
  JsonSchemaFormService,
2287
2652
  FrameworkLibraryService,
2288
2653
  WidgetLibraryService,
@@ -2292,7 +2657,7 @@ class MaterialDesignFrameworkModule {
2292
2657
  ReactiveFormsModule, ANGULAR_MATERIAL_MODULES, WidgetLibraryModule,
2293
2658
  JsonSchemaFormModule, JsonSchemaFormModule] }); }
2294
2659
  }
2295
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: MaterialDesignFrameworkModule, decorators: [{
2660
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: MaterialDesignFrameworkModule, decorators: [{
2296
2661
  type: NgModule,
2297
2662
  args: [{
2298
2663
  imports: [