@dereekb/dbx-form 9.16.2 → 9.16.4

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.
@@ -1,5 +1,5 @@
1
1
  import { Component } from '@angular/core';
2
- import { getValueFromGetter } from '@dereekb/util';
2
+ import { asDecisionFunction, cachedGetter, getValueFromGetter, makeGetter } from '@dereekb/util';
3
3
  import { FieldArrayType } from '@ngx-formly/core';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "@angular/common";
@@ -9,12 +9,30 @@ import * as i4 from "@angular/cdk/drag-drop";
9
9
  import * as i5 from "@dereekb/dbx-web";
10
10
  import * as i6 from "@ngx-formly/core";
11
11
  export class DbxFormRepeatArrayTypeComponent extends FieldArrayType {
12
+ constructor() {
13
+ super(...arguments);
14
+ this._labelForField = cachedGetter(() => {
15
+ const input = this.repeatArrayField.labelForField;
16
+ if (typeof input === 'function') {
17
+ return input;
18
+ }
19
+ else {
20
+ return makeGetter(input ?? '');
21
+ }
22
+ });
23
+ this._allowRemove = cachedGetter(() => {
24
+ return asDecisionFunction(this.field.props.allowRemove, true);
25
+ });
26
+ }
12
27
  get repeatArrayField() {
13
28
  return this.field.props;
14
29
  }
15
30
  get label() {
16
31
  return this.field.props.label ?? this.field.key;
17
32
  }
33
+ get description() {
34
+ return this.field.props.description;
35
+ }
18
36
  get addText() {
19
37
  return this.repeatArrayField.addText ?? 'Add';
20
38
  }
@@ -27,7 +45,24 @@ export class DbxFormRepeatArrayTypeComponent extends FieldArrayType {
27
45
  get count() {
28
46
  return this.field.fieldGroup?.length ?? 0;
29
47
  }
30
- get canAdd() {
48
+ get disableRearrange() {
49
+ return Boolean(this.field.props.disableRearrange);
50
+ }
51
+ get allowAdd() {
52
+ return this.field.props.allowAdd ?? true;
53
+ }
54
+ allowRemove(i) {
55
+ const array = this.model;
56
+ const value = array[i];
57
+ return this._allowRemove()({
58
+ i,
59
+ value
60
+ });
61
+ }
62
+ get addItemDisabled() {
63
+ return !this.canAddItem;
64
+ }
65
+ get canAddItem() {
31
66
  const max = this.max;
32
67
  if (max == null) {
33
68
  return true;
@@ -63,68 +98,74 @@ export class DbxFormRepeatArrayTypeComponent extends FieldArrayType {
63
98
  drop(event) {
64
99
  this.swapIndexes(event.previousIndex, event.currentIndex);
65
100
  }
66
- labelForItem(field) {
67
- return getValueFromGetter(this.repeatArrayField.labelForField ?? '', field);
101
+ labelForItem(fieldConfig, i) {
102
+ const array = this.model;
103
+ const value = array[i];
104
+ return getValueFromGetter(this._labelForField(), {
105
+ i,
106
+ value,
107
+ fieldConfig
108
+ });
68
109
  }
69
110
  }
70
111
  DbxFormRepeatArrayTypeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxFormRepeatArrayTypeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
71
112
  DbxFormRepeatArrayTypeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.2", type: DbxFormRepeatArrayTypeComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
72
113
  <div class="dbx-form-repeat-array">
73
- <dbx-subsection [header]="label">
114
+ <dbx-subsection [header]="label" [hint]="description">
74
115
  <!-- Fields -->
75
- <div class="dbx-form-repeat-array-fields" cdkDropList (cdkDropListDropped)="drop($event)">
116
+ <div class="dbx-form-repeat-array-fields" cdkDropList [cdkDropListDisabled]="disableRearrange" (cdkDropListDropped)="drop($event)">
76
117
  <div class="dbx-form-repeat-array-field" cdkDrag cdkDragLockAxis="y" *ngFor="let field of field.fieldGroup; let i = index; let last = last">
77
- <div class="example-custom-placeholder" *cdkDragPlaceholder></div>
78
- <dbx-bar>
79
- <button cdkDragHandle mat-flat-button><mat-icon>drag_handle</mat-icon></button>
118
+ <div class="dbx-form-repeat-array-drag-placeholder" *cdkDragPlaceholder></div>
119
+ <dbx-bar class="dbx-bar-fixed-height">
120
+ <button *ngIf="!disableRearrange" cdkDragHandle mat-flat-button><mat-icon>drag_handle</mat-icon></button>
80
121
  <dbx-button-spacer></dbx-button-spacer>
81
122
  <h4>
82
123
  <span class="repeat-array-number">{{ i + 1 }}</span>
83
- <span>{{ labelForItem(field) }}</span>
124
+ <span>{{ labelForItem(field, i) }}</span>
84
125
  </h4>
85
126
  <span class="dbx-spacer"></span>
86
- <button mat-flat-button color="warn" (click)="remove(i)">{{ removeText }}</button>
127
+ <dbx-button *ngIf="allowRemove(i)" color="warn" [text]="removeText" (buttonClick)="remove(i)"></dbx-button>
87
128
  </dbx-bar>
88
129
  <formly-field class="dbx-form-repeat-array-field-content" [field]="field"></formly-field>
89
130
  </div>
90
131
  </div>
91
132
  <!-- Add Button -->
92
133
  <div class="dbx-form-repeat-array-footer">
93
- <button *ngIf="canAdd" mat-raised-button (click)="add()">{{ addText }}</button>
134
+ <dbx-button *ngIf="allowAdd" [raised]="true" [disabled]="addItemDisabled" [text]="addText" (buttonClick)="add()"></dbx-button>
94
135
  </div>
95
136
  </dbx-subsection>
96
137
  </div>
97
- `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i4.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i4.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i4.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "component", type: i5.DbxSubSectionComponent, selector: "dbx-subsection" }, { kind: "directive", type: i5.DbxBarDirective, selector: "dbx-bar,[dbxBar]", inputs: ["color"] }, { kind: "directive", type: i5.DbxButtonSpacerDirective, selector: "dbx-button-spacer,[dbxButtonSpacer]" }, { kind: "component", type: i6.FormlyField, selector: "formly-field", inputs: ["field"] }] });
138
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i4.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i4.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i4.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "component", type: i5.DbxSubSectionComponent, selector: "dbx-subsection" }, { kind: "directive", type: i5.DbxBarDirective, selector: "dbx-bar,[dbxBar]", inputs: ["color"] }, { kind: "component", type: i5.DbxButtonComponent, selector: "dbx-button", inputs: ["type", "raised", "stroked", "flat", "color", "customButtonColor", "customTextColor", "customSpinnerColor"] }, { kind: "directive", type: i5.DbxButtonSpacerDirective, selector: "dbx-button-spacer,[dbxButtonSpacer]" }, { kind: "component", type: i6.FormlyField, selector: "formly-field", inputs: ["field"] }] });
98
139
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxFormRepeatArrayTypeComponent, decorators: [{
99
140
  type: Component,
100
141
  args: [{
101
142
  template: `
102
143
  <div class="dbx-form-repeat-array">
103
- <dbx-subsection [header]="label">
144
+ <dbx-subsection [header]="label" [hint]="description">
104
145
  <!-- Fields -->
105
- <div class="dbx-form-repeat-array-fields" cdkDropList (cdkDropListDropped)="drop($event)">
146
+ <div class="dbx-form-repeat-array-fields" cdkDropList [cdkDropListDisabled]="disableRearrange" (cdkDropListDropped)="drop($event)">
106
147
  <div class="dbx-form-repeat-array-field" cdkDrag cdkDragLockAxis="y" *ngFor="let field of field.fieldGroup; let i = index; let last = last">
107
- <div class="example-custom-placeholder" *cdkDragPlaceholder></div>
108
- <dbx-bar>
109
- <button cdkDragHandle mat-flat-button><mat-icon>drag_handle</mat-icon></button>
148
+ <div class="dbx-form-repeat-array-drag-placeholder" *cdkDragPlaceholder></div>
149
+ <dbx-bar class="dbx-bar-fixed-height">
150
+ <button *ngIf="!disableRearrange" cdkDragHandle mat-flat-button><mat-icon>drag_handle</mat-icon></button>
110
151
  <dbx-button-spacer></dbx-button-spacer>
111
152
  <h4>
112
153
  <span class="repeat-array-number">{{ i + 1 }}</span>
113
- <span>{{ labelForItem(field) }}</span>
154
+ <span>{{ labelForItem(field, i) }}</span>
114
155
  </h4>
115
156
  <span class="dbx-spacer"></span>
116
- <button mat-flat-button color="warn" (click)="remove(i)">{{ removeText }}</button>
157
+ <dbx-button *ngIf="allowRemove(i)" color="warn" [text]="removeText" (buttonClick)="remove(i)"></dbx-button>
117
158
  </dbx-bar>
118
159
  <formly-field class="dbx-form-repeat-array-field-content" [field]="field"></formly-field>
119
160
  </div>
120
161
  </div>
121
162
  <!-- Add Button -->
122
163
  <div class="dbx-form-repeat-array-footer">
123
- <button *ngIf="canAdd" mat-raised-button (click)="add()">{{ addText }}</button>
164
+ <dbx-button *ngIf="allowAdd" [raised]="true" [disabled]="addItemDisabled" [text]="addText" (buttonClick)="add()"></dbx-button>
124
165
  </div>
125
166
  </dbx-subsection>
126
167
  </div>
127
168
  `
128
169
  }]
129
170
  }] });
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkuZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vc3JjL2xpYi9mb3JtbHkvZmllbGQvdmFsdWUvYXJyYXkvYXJyYXkuZmllbGQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFvQixrQkFBa0IsRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQXdCLGNBQWMsRUFBdUMsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7Ozs7QUFxQzdHLE1BQU0sT0FBTywrQkFBZ0MsU0FBUSxjQUE4RDtJQUNqSCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQWMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQztJQUN0RCxDQUFDO0lBRUQsSUFBSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUVyQixJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7WUFDZixPQUFPLElBQUksQ0FBQztTQUNiO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsS0FBYTtRQUNsQixJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7WUFDZixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFhO1FBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsV0FBVyxDQUFDLFlBQW9CLEVBQUUsV0FBbUI7UUFDbkQsTUFBTSxLQUFLLEdBQWMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNwQyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFeEMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUksQ0FBQyxLQUEyQjtRQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxZQUFZLENBQUMsS0FBd0I7UUFDbkMsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxJQUFJLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM5RSxDQUFDOzs0SEF2RVUsK0JBQStCO2dIQUEvQiwrQkFBK0IsMkVBNUJoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQlQ7MkZBRVUsK0JBQStCO2tCQTdCM0MsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJUO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmFjdG9yeVdpdGhJbnB1dCwgZ2V0VmFsdWVGcm9tR2V0dGVyLCBNYXliZSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgRmllbGRBcnJheVR5cGVDb25maWcsIEZpZWxkQXJyYXlUeXBlLCBGb3JtbHlGaWVsZENvbmZpZywgRm9ybWx5RmllbGRQcm9wcyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERieEZvcm1SZXBlYXRBcnJheUNvbmZpZyBleHRlbmRzIEZvcm1seUZpZWxkUHJvcHMge1xuICBsYWJlbEZvckZpZWxkPzogc3RyaW5nIHwgRmFjdG9yeVdpdGhJbnB1dDxzdHJpbmcsIEZvcm1seUZpZWxkQ29uZmlnPjtcbiAgYWRkVGV4dD86IHN0cmluZztcbiAgcmVtb3ZlVGV4dD86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImRieC1mb3JtLXJlcGVhdC1hcnJheVwiPlxuICAgICAgPGRieC1zdWJzZWN0aW9uIFtoZWFkZXJdPVwibGFiZWxcIj5cbiAgICAgICAgPCEtLSBGaWVsZHMgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYngtZm9ybS1yZXBlYXQtYXJyYXktZmllbGRzXCIgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGJ4LWZvcm0tcmVwZWF0LWFycmF5LWZpZWxkXCIgY2RrRHJhZyBjZGtEcmFnTG9ja0F4aXM9XCJ5XCIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZpZWxkLmZpZWxkR3JvdXA7IGxldCBpID0gaW5kZXg7IGxldCBsYXN0ID0gbGFzdFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4YW1wbGUtY3VzdG9tLXBsYWNlaG9sZGVyXCIgKmNka0RyYWdQbGFjZWhvbGRlcj48L2Rpdj5cbiAgICAgICAgICAgIDxkYngtYmFyPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNka0RyYWdIYW5kbGUgbWF0LWZsYXQtYnV0dG9uPjxtYXQtaWNvbj5kcmFnX2hhbmRsZTwvbWF0LWljb24+PC9idXR0b24+XG4gICAgICAgICAgICAgIDxkYngtYnV0dG9uLXNwYWNlcj48L2RieC1idXR0b24tc3BhY2VyPlxuICAgICAgICAgICAgICA8aDQ+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXBlYXQtYXJyYXktbnVtYmVyXCI+e3sgaSArIDEgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgbGFiZWxGb3JJdGVtKGZpZWxkKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9oND5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkYngtc3BhY2VyXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj1cIndhcm5cIiAoY2xpY2spPVwicmVtb3ZlKGkpXCI+e3sgcmVtb3ZlVGV4dCB9fTwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kYngtYmFyPlxuICAgICAgICAgICAgPGZvcm1seS1maWVsZCBjbGFzcz1cImRieC1mb3JtLXJlcGVhdC1hcnJheS1maWVsZC1jb250ZW50XCIgW2ZpZWxkXT1cImZpZWxkXCI+PC9mb3JtbHktZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tIEFkZCBCdXR0b24gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYngtZm9ybS1yZXBlYXQtYXJyYXktZm9vdGVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNhbkFkZFwiIG1hdC1yYWlzZWQtYnV0dG9uIChjbGljayk9XCJhZGQoKVwiPnt7IGFkZFRleHQgfX08L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2RieC1zdWJzZWN0aW9uPlxuICAgIDwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIERieEZvcm1SZXBlYXRBcnJheVR5cGVDb21wb25lbnQgZXh0ZW5kcyBGaWVsZEFycmF5VHlwZTxGaWVsZEFycmF5VHlwZUNvbmZpZzxEYnhGb3JtUmVwZWF0QXJyYXlDb25maWc+PiB7XG4gIGdldCByZXBlYXRBcnJheUZpZWxkKCk6IERieEZvcm1SZXBlYXRBcnJheUNvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHM7XG4gIH1cblxuICBnZXQgbGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5sYWJlbCA/PyAodGhpcy5maWVsZC5rZXkgYXMgc3RyaW5nKTtcbiAgfVxuXG4gIGdldCBhZGRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVwZWF0QXJyYXlGaWVsZC5hZGRUZXh0ID8/ICdBZGQnO1xuICB9XG5cbiAgZ2V0IHJlbW92ZVRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXBlYXRBcnJheUZpZWxkLnJlbW92ZVRleHQgPz8gJ1JlbW92ZSc7XG4gIH1cblxuICBnZXQgbWF4KCk6IE1heWJlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLm1heExlbmd0aDtcbiAgfVxuXG4gIGdldCBjb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLmZpZWxkR3JvdXA/Lmxlbmd0aCA/PyAwO1xuICB9XG5cbiAgZ2V0IGNhbkFkZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBtYXggPSB0aGlzLm1heDtcblxuICAgIGlmIChtYXggPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmNvdW50IDwgbWF4O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlcyB0aGUgdGFyZ2V0IGluZGV4IHVwIG9uZSB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIGluZGV4XG4gICAqL1xuICBtb3ZlVXAoaW5kZXg6IG51bWJlcikge1xuICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3dhcEluZGV4ZXMoaW5kZXgsIGluZGV4IC0gMSk7XG4gIH1cblxuICBtb3ZlRG93bihpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5zd2FwSW5kZXhlcyhpbmRleCwgaW5kZXggKyAxKTtcbiAgfVxuXG4gIHN3YXBJbmRleGVzKGN1cnJlbnRJbmRleDogbnVtYmVyLCB0YXJnZXRJbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgYXJyYXk6IHVua25vd25bXSA9IHRoaXMubW9kZWw7XG4gICAgY29uc3QgdGFyZ2V0VmFsdWUgPSBhcnJheVtjdXJyZW50SW5kZXhdO1xuXG4gICAgaWYgKCF0YXJnZXRWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVtb3ZlKGN1cnJlbnRJbmRleCk7XG4gICAgdGhpcy5hZGQodGFyZ2V0SW5kZXgsIHRhcmdldFZhbHVlLCB7IG1hcmtBc0RpcnR5OiB0cnVlIH0pO1xuICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICB9XG5cbiAgZHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8dW5rbm93bj4pIHtcbiAgICB0aGlzLnN3YXBJbmRleGVzKGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gIH1cblxuICBsYWJlbEZvckl0ZW0oZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0VmFsdWVGcm9tR2V0dGVyKHRoaXMucmVwZWF0QXJyYXlGaWVsZC5sYWJlbEZvckZpZWxkID8/ICcnLCBmaWVsZCk7XG4gIH1cbn1cbiJdfQ==
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkuZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vc3JjL2xpYi9mb3JtbHkvZmllbGQvdmFsdWUvYXJyYXkvYXJyYXkuZmllbGQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGtCQUFrQixFQUFZLFlBQVksRUFBd0Usa0JBQWtCLEVBQVksVUFBVSxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBQ2xNLE9BQU8sRUFBd0IsY0FBYyxFQUF1QyxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7OztBQW1FN0csTUFBTSxPQUFPLCtCQUE2QyxTQUFRLGNBQThEO0lBN0JoSTs7UUE4QlUsbUJBQWMsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFO1lBQ3pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUM7WUFFbEQsSUFBSSxPQUFPLEtBQUssS0FBSyxVQUFVLEVBQUU7Z0JBQy9CLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7aUJBQU07Z0JBQ0wsT0FBTyxVQUFVLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQ2hDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSyxpQkFBWSxHQUF3RCxZQUFZLENBQUMsR0FBRyxFQUFFO1lBQzVGLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO0tBeUdKO0lBdkdDLElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FB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QUMsS0FBSyxDQUFDO1FBQ3BDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQU0sQ0FBQztRQUU1QixPQUFPLGtCQUFrQixDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRTtZQUMvQyxDQUFDO1lBQ0QsS0FBSztZQUNMLFdBQVc7U0FDWixDQUFDLENBQUM7SUFDTCxDQUFDOzs0SEFySFUsK0JBQStCO2dIQUEvQiwrQkFBK0IsMkVBNUJoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQlQ7MkZBRVUsK0JBQStCO2tCQTdCM0MsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJUO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhc0RlY2lzaW9uRnVuY3Rpb24sIGFzR2V0dGVyLCBjYWNoZWRHZXR0ZXIsIERlY2lzaW9uRnVuY3Rpb24sIEZhY3RvcnlXaXRoSW5wdXQsIEZhY3RvcnlXaXRoUmVxdWlyZWRJbnB1dCwgR2V0dGVyLCBnZXRWYWx1ZUZyb21HZXR0ZXIsIEluZGV4UmVmLCBtYWtlR2V0dGVyLCBNYXliZSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgRmllbGRBcnJheVR5cGVDb25maWcsIEZpZWxkQXJyYXlUeXBlLCBGb3JtbHlGaWVsZENvbmZpZywgRm9ybWx5RmllbGRQcm9wcyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERieEZvcm1SZXBlYXRBcnJheVBhaXI8VCA9IHVua25vd24+IGV4dGVuZHMgSW5kZXhSZWYge1xuICB2YWx1ZTogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYnhGb3JtUmVwZWF0QXJyYXlGaWVsZENvbmZpZ1BhaXI8VCA9IHVua25vd24+IGV4dGVuZHMgRGJ4Rm9ybVJlcGVhdEFycmF5UGFpcjxUPiB7XG4gIGZpZWxkQ29uZmlnOiBGb3JtbHlGaWVsZENvbmZpZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYnhGb3JtUmVwZWF0QXJyYXlDb25maWc8VCA9IHVua25vd24+IGV4dGVuZHMgUGljazxGb3JtbHlGaWVsZFByb3BzLCAnbWF4TGVuZ3RoJyB8ICdsYWJlbCcgfCAnZGVzY3JpcHRpb24nPiB7XG4gIGxhYmVsRm9yRmllbGQ/OiBzdHJpbmcgfCBGYWN0b3J5V2l0aFJlcXVpcmVkSW5wdXQ8c3RyaW5nLCBEYnhGb3JtUmVwZWF0QXJyYXlGaWVsZENvbmZpZ1BhaXI8VD4+O1xuICAvKipcbiAgICogVGV4dCBmb3IgdGhlIGFkZCBidXR0b24uXG4gICAqL1xuICBhZGRUZXh0Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGV4dCBmb3IgdGhlIHJlbW92ZSBidXR0b24uXG4gICAqL1xuICByZW1vdmVUZXh0Pzogc3RyaW5nO1xuICAvKipcbiAgICogV2hldGhlIG9yIG5vdCB0byBkaXNhYmxlIHJlYXJyYW5naW5nIGl0ZW1zLlxuICAgKlxuICAgKiBGYWxzZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgZGlzYWJsZVJlYXJyYW5nZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXZXRoZXIgb3Igbm90IHRvIHNob3cgdGhlIGFkZCBidXR0b24uXG4gICAqXG4gICAqIFRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gIGFsbG93QWRkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIGFsbG93IHJlbW92aW5nIGl0ZW1zLiBDYW4gb3B0aW9uYWxseSBwYXNzIGEgZGVjaXNpb24gZnVuY3Rpb24gdGhhdCBkZWNpZGVzIHdoZXRoZXIgb3Igbm90IGEgc3BlY2lmaWMgaXRlbSBjYW4gYmUgcmVtb3ZlZC5cbiAgICovXG4gIGFsbG93UmVtb3ZlPzogYm9vbGVhbiB8IERlY2lzaW9uRnVuY3Rpb248RGJ4Rm9ybVJlcGVhdEFycmF5UGFpcjxUPj47XG59XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJkYngtZm9ybS1yZXBlYXQtYXJyYXlcIj5cbiAgICAgIDxkYngtc3Vic2VjdGlvbiBbaGVhZGVyXT1cImxhYmVsXCIgW2hpbnRdPVwiZGVzY3JpcHRpb25cIj5cbiAgICAgICAgPCEtLSBGaWVsZHMgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYngtZm9ybS1yZXBlYXQtYXJyYXktZmllbGRzXCIgY2RrRHJvcExpc3QgW2Nka0Ryb3BMaXN0RGlzYWJsZWRdPVwiZGlzYWJsZVJlYXJyYW5nZVwiIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRieC1mb3JtLXJlcGVhdC1hcnJheS1maWVsZFwiIGNka0RyYWcgY2RrRHJhZ0xvY2tBeGlzPVwieVwiICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBmaWVsZC5maWVsZEdyb3VwOyBsZXQgaSA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3RcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYngtZm9ybS1yZXBlYXQtYXJyYXktZHJhZy1wbGFjZWhvbGRlclwiICpjZGtEcmFnUGxhY2Vob2xkZXI+PC9kaXY+XG4gICAgICAgICAgICA8ZGJ4LWJhciBjbGFzcz1cImRieC1iYXItZml4ZWQtaGVpZ2h0XCI+XG4gICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhZGlzYWJsZVJlYXJyYW5nZVwiIGNka0RyYWdIYW5kbGUgbWF0LWZsYXQtYnV0dG9uPjxtYXQtaWNvbj5kcmFnX2hhbmRsZTwvbWF0LWljb24+PC9idXR0b24+XG4gICAgICAgICAgICAgIDxkYngtYnV0dG9uLXNwYWNlcj48L2RieC1idXR0b24tc3BhY2VyPlxuICAgICAgICAgICAgICA8aDQ+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXBlYXQtYXJyYXktbnVtYmVyXCI+e3sgaSArIDEgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgbGFiZWxGb3JJdGVtKGZpZWxkLCBpKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9oND5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkYngtc3BhY2VyXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8ZGJ4LWJ1dHRvbiAqbmdJZj1cImFsbG93UmVtb3ZlKGkpXCIgY29sb3I9XCJ3YXJuXCIgW3RleHRdPVwicmVtb3ZlVGV4dFwiIChidXR0b25DbGljayk9XCJyZW1vdmUoaSlcIj48L2RieC1idXR0b24+XG4gICAgICAgICAgICA8L2RieC1iYXI+XG4gICAgICAgICAgICA8Zm9ybWx5LWZpZWxkIGNsYXNzPVwiZGJ4LWZvcm0tcmVwZWF0LWFycmF5LWZpZWxkLWNvbnRlbnRcIiBbZmllbGRdPVwiZmllbGRcIj48L2Zvcm1seS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gQWRkIEJ1dHRvbiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRieC1mb3JtLXJlcGVhdC1hcnJheS1mb290ZXJcIj5cbiAgICAgICAgICA8ZGJ4LWJ1dHRvbiAqbmdJZj1cImFsbG93QWRkXCIgW3JhaXNlZF09XCJ0cnVlXCIgW2Rpc2FibGVkXT1cImFkZEl0ZW1EaXNhYmxlZFwiIFt0ZXh0XT1cImFkZFRleHRcIiAoYnV0dG9uQ2xpY2spPVwiYWRkKClcIj48L2RieC1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kYngtc3Vic2VjdGlvbj5cbiAgICA8L2Rpdj5cbiAgYFxufSlcbmV4cG9ydCBjbGFzcyBEYnhGb3JtUmVwZWF0QXJyYXlUeXBlQ29tcG9uZW50PFQgPSB1bmtub3duPiBleHRlbmRzIEZpZWxkQXJyYXlUeXBlPEZpZWxkQXJyYXlUeXBlQ29uZmlnPERieEZvcm1SZXBlYXRBcnJheUNvbmZpZz4+IHtcbiAgcHJpdmF0ZSBfbGFiZWxGb3JGaWVsZCA9IGNhY2hlZEdldHRlcigoKSA9PiB7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLnJlcGVhdEFycmF5RmllbGQubGFiZWxGb3JGaWVsZDtcblxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1ha2VHZXR0ZXIoaW5wdXQgPz8gJycpO1xuICAgIH1cbiAgfSk7XG5cbiAgcHJpdmF0ZSBfYWxsb3dSZW1vdmU6IEdldHRlcjxEZWNpc2lvbkZ1bmN0aW9uPERieEZvcm1SZXBlYXRBcnJheVBhaXI8VD4+PiA9IGNhY2hlZEdldHRlcigoKSA9PiB7XG4gICAgcmV0dXJuIGFzRGVjaXNpb25GdW5jdGlvbih0aGlzLmZpZWxkLnByb3BzLmFsbG93UmVtb3ZlLCB0cnVlKTtcbiAgfSk7XG5cbiAgZ2V0IHJlcGVhdEFycmF5RmllbGQoKTogRGJ4Rm9ybVJlcGVhdEFycmF5Q29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcztcbiAgfVxuXG4gIGdldCBsYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLmxhYmVsID8/ICh0aGlzLmZpZWxkLmtleSBhcyBzdHJpbmcpO1xuICB9XG5cbiAgZ2V0IGRlc2NyaXB0aW9uKCk6IE1heWJlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLmRlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGFkZFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXBlYXRBcnJheUZpZWxkLmFkZFRleHQgPz8gJ0FkZCc7XG4gIH1cblxuICBnZXQgcmVtb3ZlVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlcGVhdEFycmF5RmllbGQucmVtb3ZlVGV4dCA/PyAnUmVtb3ZlJztcbiAgfVxuXG4gIGdldCBtYXgoKTogTWF5YmU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMubWF4TGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQuZmllbGRHcm91cD8ubGVuZ3RoID8/IDA7XG4gIH1cblxuICBnZXQgZGlzYWJsZVJlYXJyYW5nZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLmZpZWxkLnByb3BzLmRpc2FibGVSZWFycmFuZ2UpO1xuICB9XG5cbiAgZ2V0IGFsbG93QWRkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLmFsbG93QWRkID8/IHRydWU7XG4gIH1cblxuICBhbGxvd1JlbW92ZShpOiBudW1iZXIpIHtcbiAgICBjb25zdCBhcnJheTogdW5rbm93bltdID0gdGhpcy5tb2RlbDtcbiAgICBjb25zdCB2YWx1ZSA9IGFycmF5W2ldIGFzIFQ7XG4gICAgcmV0dXJuIHRoaXMuX2FsbG93UmVtb3ZlKCkoe1xuICAgICAgaSxcbiAgICAgIHZhbHVlXG4gICAgfSk7XG4gIH1cblxuICBnZXQgYWRkSXRlbURpc2FibGVkKCkge1xuICAgIHJldHVybiAhdGhpcy5jYW5BZGRJdGVtO1xuICB9XG5cbiAgZ2V0IGNhbkFkZEl0ZW0oKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbWF4ID0gdGhpcy5tYXg7XG5cbiAgICBpZiAobWF4ID09IG51bGwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5jb3VudCA8IG1heDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW92ZXMgdGhlIHRhcmdldCBpbmRleCB1cCBvbmUgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSBpbmRleFxuICAgKi9cbiAgbW92ZVVwKGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN3YXBJbmRleGVzKGluZGV4LCBpbmRleCAtIDEpO1xuICB9XG5cbiAgbW92ZURvd24oaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc3dhcEluZGV4ZXMoaW5kZXgsIGluZGV4ICsgMSk7XG4gIH1cblxuICBzd2FwSW5kZXhlcyhjdXJyZW50SW5kZXg6IG51bWJlciwgdGFyZ2V0SW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGFycmF5OiB1bmtub3duW10gPSB0aGlzLm1vZGVsO1xuICAgIGNvbnN0IHRhcmdldFZhbHVlID0gYXJyYXlbY3VycmVudEluZGV4XTtcblxuICAgIGlmICghdGFyZ2V0VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZShjdXJyZW50SW5kZXgpO1xuICAgIHRoaXMuYWRkKHRhcmdldEluZGV4LCB0YXJnZXRWYWx1ZSwgeyBtYXJrQXNEaXJ0eTogdHJ1ZSB9KTtcbiAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgfVxuXG4gIGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPHVua25vd24+KSB7XG4gICAgdGhpcy5zd2FwSW5kZXhlcyhldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICB9XG5cbiAgbGFiZWxGb3JJdGVtKGZpZWxkQ29uZmlnOiBGb3JtbHlGaWVsZENvbmZpZywgaTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBhcnJheTogdW5rbm93bltdID0gdGhpcy5tb2RlbDtcbiAgICBjb25zdCB2YWx1ZSA9IGFycmF5W2ldIGFzIFQ7XG5cbiAgICByZXR1cm4gZ2V0VmFsdWVGcm9tR2V0dGVyKHRoaXMuX2xhYmVsRm9yRmllbGQoKSwge1xuICAgICAgaSxcbiAgICAgIHZhbHVlLFxuICAgICAgZmllbGRDb25maWdcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,19 +1,24 @@
1
1
  import { asArray } from '@dereekb/util';
2
2
  import { formlyField, propsAndConfigForFieldConfig } from '../../field';
3
3
  export function repeatArrayField(config) {
4
- const { key, repeatFieldGroup, maxLength, addText, removeText, labelForField } = config;
4
+ const { key, label, description, repeatFieldGroup, maxLength, addText, removeText, labelForField, disableRearrange, allowAdd, allowRemove } = config;
5
5
  return formlyField({
6
6
  key,
7
7
  type: 'repeatarray',
8
8
  ...propsAndConfigForFieldConfig(config, {
9
+ label,
10
+ description,
9
11
  maxLength,
10
12
  labelForField,
11
13
  addText,
12
- removeText
14
+ removeText,
15
+ disableRearrange,
16
+ allowAdd,
17
+ allowRemove
13
18
  }),
14
19
  fieldArray: {
15
20
  fieldGroup: asArray(repeatFieldGroup)
16
21
  }
17
22
  });
18
23
  }
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkuZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL2Zvcm1seS9maWVsZC92YWx1ZS9hcnJheS9hcnJheS5maWVsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV0RCxPQUFPLEVBQWUsV0FBVyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBU3JGLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUE4QjtJQUM3RCxNQUFNLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUV4RixPQUFPLFdBQVcsQ0FBQztRQUNqQixHQUFHO1FBQ0gsSUFBSSxFQUFFLGFBQWE7UUFDbkIsR0FBRyw0QkFBNEIsQ0FBQyxNQUFNLEVBQUU7WUFDdEMsU0FBUztZQUNULGFBQWE7WUFDYixPQUFPO1lBQ1AsVUFBVTtTQUNYLENBQUM7UUFDRixVQUFVLEVBQUU7WUFDVixVQUFVLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixDQUFDO1NBQ3RDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFycmF5T3JWYWx1ZSwgYXNBcnJheSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgRm9ybWx5RmllbGRDb25maWcgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IEZpZWxkQ29uZmlnLCBmb3JtbHlGaWVsZCwgcHJvcHNBbmRDb25maWdGb3JGaWVsZENvbmZpZyB9IGZyb20gJy4uLy4uL2ZpZWxkJztcbmltcG9ydCB7IERieEZvcm1SZXBlYXRBcnJheUNvbmZpZyB9IGZyb20gJy4vYXJyYXkuZmllbGQuY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBSZXBlYXRBcnJheUZpZWxkQ29uZmlnIGV4dGVuZHMgRGJ4Rm9ybVJlcGVhdEFycmF5Q29uZmlnLCBGaWVsZENvbmZpZyB7XG4gIGxhYmVsPzogc3RyaW5nO1xuICByZXBlYXRGaWVsZEdyb3VwOiBBcnJheU9yVmFsdWU8Rm9ybWx5RmllbGRDb25maWc+O1xuICBtYXhMZW5ndGg/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBlYXRBcnJheUZpZWxkKGNvbmZpZzogUmVwZWF0QXJyYXlGaWVsZENvbmZpZykge1xuICBjb25zdCB7IGtleSwgcmVwZWF0RmllbGRHcm91cCwgbWF4TGVuZ3RoLCBhZGRUZXh0LCByZW1vdmVUZXh0LCBsYWJlbEZvckZpZWxkIH0gPSBjb25maWc7XG5cbiAgcmV0dXJuIGZvcm1seUZpZWxkKHtcbiAgICBrZXksXG4gICAgdHlwZTogJ3JlcGVhdGFycmF5JyxcbiAgICAuLi5wcm9wc0FuZENvbmZpZ0ZvckZpZWxkQ29uZmlnKGNvbmZpZywge1xuICAgICAgbWF4TGVuZ3RoLFxuICAgICAgbGFiZWxGb3JGaWVsZCxcbiAgICAgIGFkZFRleHQsXG4gICAgICByZW1vdmVUZXh0XG4gICAgfSksXG4gICAgZmllbGRBcnJheToge1xuICAgICAgZmllbGRHcm91cDogYXNBcnJheShyZXBlYXRGaWVsZEdyb3VwKVxuICAgIH1cbiAgfSk7XG59XG4iXX0=
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkuZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL2Zvcm1seS9maWVsZC92YWx1ZS9hcnJheS9hcnJheS5maWVsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV0RCxPQUFPLEVBQWUsV0FBVyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBT3JGLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBYyxNQUFpQztJQUM3RSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFFckosT0FBTyxXQUFXLENBQUM7UUFDakIsR0FBRztRQUNILElBQUksRUFBRSxhQUFhO1FBQ25CLEdBQUcsNEJBQTRCLENBQUMsTUFBTSxFQUFFO1lBQ3RDLEtBQUs7WUFDTCxXQUFXO1lBQ1gsU0FBUztZQUNULGFBQWE7WUFDYixPQUFPO1lBQ1AsVUFBVTtZQUNWLGdCQUFnQjtZQUNoQixRQUFRO1lBQ1IsV0FBVztTQUNaLENBQUM7UUFDRixVQUFVLEVBQUU7WUFDVixVQUFVLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixDQUFDO1NBQ3RDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFycmF5T3JWYWx1ZSwgYXNBcnJheSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgRm9ybWx5RmllbGRDb25maWcgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IEZpZWxkQ29uZmlnLCBmb3JtbHlGaWVsZCwgcHJvcHNBbmRDb25maWdGb3JGaWVsZENvbmZpZyB9IGZyb20gJy4uLy4uL2ZpZWxkJztcbmltcG9ydCB7IERieEZvcm1SZXBlYXRBcnJheUNvbmZpZyB9IGZyb20gJy4vYXJyYXkuZmllbGQuY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBSZXBlYXRBcnJheUZpZWxkQ29uZmlnPFQgPSB1bmtub3duPiBleHRlbmRzIERieEZvcm1SZXBlYXRBcnJheUNvbmZpZzxUPiwgRmllbGRDb25maWcge1xuICByZXBlYXRGaWVsZEdyb3VwOiBBcnJheU9yVmFsdWU8Rm9ybWx5RmllbGRDb25maWc+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwZWF0QXJyYXlGaWVsZDxUID0gdW5rbm93bj4oY29uZmlnOiBSZXBlYXRBcnJheUZpZWxkQ29uZmlnPFQ+KSB7XG4gIGNvbnN0IHsga2V5LCBsYWJlbCwgZGVzY3JpcHRpb24sIHJlcGVhdEZpZWxkR3JvdXAsIG1heExlbmd0aCwgYWRkVGV4dCwgcmVtb3ZlVGV4dCwgbGFiZWxGb3JGaWVsZCwgZGlzYWJsZVJlYXJyYW5nZSwgYWxsb3dBZGQsIGFsbG93UmVtb3ZlIH0gPSBjb25maWc7XG5cbiAgcmV0dXJuIGZvcm1seUZpZWxkKHtcbiAgICBrZXksXG4gICAgdHlwZTogJ3JlcGVhdGFycmF5JyxcbiAgICAuLi5wcm9wc0FuZENvbmZpZ0ZvckZpZWxkQ29uZmlnKGNvbmZpZywge1xuICAgICAgbGFiZWwsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIG1heExlbmd0aCxcbiAgICAgIGxhYmVsRm9yRmllbGQsXG4gICAgICBhZGRUZXh0LFxuICAgICAgcmVtb3ZlVGV4dCxcbiAgICAgIGRpc2FibGVSZWFycmFuZ2UsXG4gICAgICBhbGxvd0FkZCxcbiAgICAgIGFsbG93UmVtb3ZlXG4gICAgfSksXG4gICAgZmllbGRBcnJheToge1xuICAgICAgZmllbGRHcm91cDogYXNBcnJheShyZXBlYXRGaWVsZEdyb3VwKVxuICAgIH1cbiAgfSk7XG59XG4iXX0=
@@ -26,7 +26,7 @@ import * as i1$2 from '@angular/material/button';
26
26
  import { MatButtonModule } from '@angular/material/button';
27
27
  import * as i3$3 from '@angular/flex-layout/flex';
28
28
  import { FlexLayoutModule } from '@angular/flex-layout';
29
- import { objectIsEmpty, mergeObjectsFunction, filterFromPOJOFunction, mergeObjects, filterFromPOJO, asArray, objectHasNoKeys, addPlusPrefixToNumber, convertMaybeToArray, makeValuesGroupMap, findUnique, searchStringFilterFunction, caseInsensitiveFilterByIndexOfDecisionFactory, mergeIntoArray, lastValue, separateValues, arrayToMap, getValueFromGetter, filterMaybeValues, dateFromLogicalDate, WEBSITE_DOMAIN_NAME_REGEX, KeyValueTypleValueFilter, valuesFromPOJO, allObjectsAreEqual, isNumberDivisibleBy, nearestDivisibleValues, transformNumberFunction, concatArrays, transformStringFunction, US_STATE_CODE_STRING_REGEX, ZIP_CODE_STRING_REGEX, LAT_LNG_PATTERN, capitalizeFirstLetter, BooleanStringKeyArrayUtilityInstance } from '@dereekb/util';
29
+ import { objectIsEmpty, mergeObjectsFunction, filterFromPOJOFunction, mergeObjects, filterFromPOJO, asArray, objectHasNoKeys, addPlusPrefixToNumber, convertMaybeToArray, makeValuesGroupMap, findUnique, searchStringFilterFunction, caseInsensitiveFilterByIndexOfDecisionFactory, mergeIntoArray, lastValue, separateValues, arrayToMap, cachedGetter, makeGetter, asDecisionFunction, getValueFromGetter, filterMaybeValues, dateFromLogicalDate, WEBSITE_DOMAIN_NAME_REGEX, KeyValueTypleValueFilter, valuesFromPOJO, allObjectsAreEqual, isNumberDivisibleBy, nearestDivisibleValues, transformNumberFunction, concatArrays, transformStringFunction, US_STATE_CODE_STRING_REGEX, ZIP_CODE_STRING_REGEX, LAT_LNG_PATTERN, capitalizeFirstLetter, BooleanStringKeyArrayUtilityInstance } from '@dereekb/util';
30
30
  import * as i2$1 from '@angular/material/slide-toggle';
31
31
  import { MatSlideToggleModule } from '@angular/material/slide-toggle';
32
32
  import * as i2$2 from '@angular/flex-layout/extended';
@@ -2640,6 +2640,21 @@ function textEditorField(config) {
2640
2640
  }
2641
2641
 
2642
2642
  class DbxFormRepeatArrayTypeComponent extends FieldArrayType {
2643
+ constructor() {
2644
+ super(...arguments);
2645
+ this._labelForField = cachedGetter(() => {
2646
+ const input = this.repeatArrayField.labelForField;
2647
+ if (typeof input === 'function') {
2648
+ return input;
2649
+ }
2650
+ else {
2651
+ return makeGetter(input !== null && input !== void 0 ? input : '');
2652
+ }
2653
+ });
2654
+ this._allowRemove = cachedGetter(() => {
2655
+ return asDecisionFunction(this.field.props.allowRemove, true);
2656
+ });
2657
+ }
2643
2658
  get repeatArrayField() {
2644
2659
  return this.field.props;
2645
2660
  }
@@ -2647,6 +2662,9 @@ class DbxFormRepeatArrayTypeComponent extends FieldArrayType {
2647
2662
  var _a;
2648
2663
  return (_a = this.field.props.label) !== null && _a !== void 0 ? _a : this.field.key;
2649
2664
  }
2665
+ get description() {
2666
+ return this.field.props.description;
2667
+ }
2650
2668
  get addText() {
2651
2669
  var _a;
2652
2670
  return (_a = this.repeatArrayField.addText) !== null && _a !== void 0 ? _a : 'Add';
@@ -2662,7 +2680,25 @@ class DbxFormRepeatArrayTypeComponent extends FieldArrayType {
2662
2680
  var _a, _b;
2663
2681
  return (_b = (_a = this.field.fieldGroup) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;
2664
2682
  }
2665
- get canAdd() {
2683
+ get disableRearrange() {
2684
+ return Boolean(this.field.props.disableRearrange);
2685
+ }
2686
+ get allowAdd() {
2687
+ var _a;
2688
+ return (_a = this.field.props.allowAdd) !== null && _a !== void 0 ? _a : true;
2689
+ }
2690
+ allowRemove(i) {
2691
+ const array = this.model;
2692
+ const value = array[i];
2693
+ return this._allowRemove()({
2694
+ i,
2695
+ value
2696
+ });
2697
+ }
2698
+ get addItemDisabled() {
2699
+ return !this.canAddItem;
2700
+ }
2701
+ get canAddItem() {
2666
2702
  const max = this.max;
2667
2703
  if (max == null) {
2668
2704
  return true;
@@ -2698,65 +2734,70 @@ class DbxFormRepeatArrayTypeComponent extends FieldArrayType {
2698
2734
  drop(event) {
2699
2735
  this.swapIndexes(event.previousIndex, event.currentIndex);
2700
2736
  }
2701
- labelForItem(field) {
2702
- var _a;
2703
- return getValueFromGetter((_a = this.repeatArrayField.labelForField) !== null && _a !== void 0 ? _a : '', field);
2737
+ labelForItem(fieldConfig, i) {
2738
+ const array = this.model;
2739
+ const value = array[i];
2740
+ return getValueFromGetter(this._labelForField(), {
2741
+ i,
2742
+ value,
2743
+ fieldConfig
2744
+ });
2704
2745
  }
2705
2746
  }
2706
2747
  DbxFormRepeatArrayTypeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxFormRepeatArrayTypeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
2707
2748
  DbxFormRepeatArrayTypeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.2", type: DbxFormRepeatArrayTypeComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
2708
2749
  <div class="dbx-form-repeat-array">
2709
- <dbx-subsection [header]="label">
2750
+ <dbx-subsection [header]="label" [hint]="description">
2710
2751
  <!-- Fields -->
2711
- <div class="dbx-form-repeat-array-fields" cdkDropList (cdkDropListDropped)="drop($event)">
2752
+ <div class="dbx-form-repeat-array-fields" cdkDropList [cdkDropListDisabled]="disableRearrange" (cdkDropListDropped)="drop($event)">
2712
2753
  <div class="dbx-form-repeat-array-field" cdkDrag cdkDragLockAxis="y" *ngFor="let field of field.fieldGroup; let i = index; let last = last">
2713
- <div class="example-custom-placeholder" *cdkDragPlaceholder></div>
2714
- <dbx-bar>
2715
- <button cdkDragHandle mat-flat-button><mat-icon>drag_handle</mat-icon></button>
2754
+ <div class="dbx-form-repeat-array-drag-placeholder" *cdkDragPlaceholder></div>
2755
+ <dbx-bar class="dbx-bar-fixed-height">
2756
+ <button *ngIf="!disableRearrange" cdkDragHandle mat-flat-button><mat-icon>drag_handle</mat-icon></button>
2716
2757
  <dbx-button-spacer></dbx-button-spacer>
2717
2758
  <h4>
2718
2759
  <span class="repeat-array-number">{{ i + 1 }}</span>
2719
- <span>{{ labelForItem(field) }}</span>
2760
+ <span>{{ labelForItem(field, i) }}</span>
2720
2761
  </h4>
2721
2762
  <span class="dbx-spacer"></span>
2722
- <button mat-flat-button color="warn" (click)="remove(i)">{{ removeText }}</button>
2763
+ <dbx-button *ngIf="allowRemove(i)" color="warn" [text]="removeText" (buttonClick)="remove(i)"></dbx-button>
2723
2764
  </dbx-bar>
2724
2765
  <formly-field class="dbx-form-repeat-array-field-content" [field]="field"></formly-field>
2725
2766
  </div>
2726
2767
  </div>
2727
2768
  <!-- Add Button -->
2728
2769
  <div class="dbx-form-repeat-array-footer">
2729
- <button *ngIf="canAdd" mat-raised-button (click)="add()">{{ addText }}</button>
2770
+ <dbx-button *ngIf="allowAdd" [raised]="true" [disabled]="addItemDisabled" [text]="addText" (buttonClick)="add()"></dbx-button>
2730
2771
  </div>
2731
2772
  </dbx-subsection>
2732
2773
  </div>
2733
- `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1$2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4$5.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i4$5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i4$5.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i4$5.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "component", type: i1$1.DbxSubSectionComponent, selector: "dbx-subsection" }, { kind: "directive", type: i1$1.DbxBarDirective, selector: "dbx-bar,[dbxBar]", inputs: ["color"] }, { kind: "directive", type: i1$1.DbxButtonSpacerDirective, selector: "dbx-button-spacer,[dbxButtonSpacer]" }, { kind: "component", type: i1$3.FormlyField, selector: "formly-field", inputs: ["field"] }] });
2774
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1$2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4$5.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i4$5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i4$5.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i4$5.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "component", type: i1$1.DbxSubSectionComponent, selector: "dbx-subsection" }, { kind: "directive", type: i1$1.DbxBarDirective, selector: "dbx-bar,[dbxBar]", inputs: ["color"] }, { kind: "component", type: i1$1.DbxButtonComponent, selector: "dbx-button", inputs: ["type", "raised", "stroked", "flat", "color", "customButtonColor", "customTextColor", "customSpinnerColor"] }, { kind: "directive", type: i1$1.DbxButtonSpacerDirective, selector: "dbx-button-spacer,[dbxButtonSpacer]" }, { kind: "component", type: i1$3.FormlyField, selector: "formly-field", inputs: ["field"] }] });
2734
2775
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxFormRepeatArrayTypeComponent, decorators: [{
2735
2776
  type: Component,
2736
2777
  args: [{
2737
2778
  template: `
2738
2779
  <div class="dbx-form-repeat-array">
2739
- <dbx-subsection [header]="label">
2780
+ <dbx-subsection [header]="label" [hint]="description">
2740
2781
  <!-- Fields -->
2741
- <div class="dbx-form-repeat-array-fields" cdkDropList (cdkDropListDropped)="drop($event)">
2782
+ <div class="dbx-form-repeat-array-fields" cdkDropList [cdkDropListDisabled]="disableRearrange" (cdkDropListDropped)="drop($event)">
2742
2783
  <div class="dbx-form-repeat-array-field" cdkDrag cdkDragLockAxis="y" *ngFor="let field of field.fieldGroup; let i = index; let last = last">
2743
- <div class="example-custom-placeholder" *cdkDragPlaceholder></div>
2744
- <dbx-bar>
2745
- <button cdkDragHandle mat-flat-button><mat-icon>drag_handle</mat-icon></button>
2784
+ <div class="dbx-form-repeat-array-drag-placeholder" *cdkDragPlaceholder></div>
2785
+ <dbx-bar class="dbx-bar-fixed-height">
2786
+ <button *ngIf="!disableRearrange" cdkDragHandle mat-flat-button><mat-icon>drag_handle</mat-icon></button>
2746
2787
  <dbx-button-spacer></dbx-button-spacer>
2747
2788
  <h4>
2748
2789
  <span class="repeat-array-number">{{ i + 1 }}</span>
2749
- <span>{{ labelForItem(field) }}</span>
2790
+ <span>{{ labelForItem(field, i) }}</span>
2750
2791
  </h4>
2751
2792
  <span class="dbx-spacer"></span>
2752
- <button mat-flat-button color="warn" (click)="remove(i)">{{ removeText }}</button>
2793
+ <dbx-button *ngIf="allowRemove(i)" color="warn" [text]="removeText" (buttonClick)="remove(i)"></dbx-button>
2753
2794
  </dbx-bar>
2754
2795
  <formly-field class="dbx-form-repeat-array-field-content" [field]="field"></formly-field>
2755
2796
  </div>
2756
2797
  </div>
2757
2798
  <!-- Add Button -->
2758
2799
  <div class="dbx-form-repeat-array-footer">
2759
- <button *ngIf="canAdd" mat-raised-button (click)="add()">{{ addText }}</button>
2800
+ <dbx-button *ngIf="allowAdd" [raised]="true" [disabled]="addItemDisabled" [text]="addText" (buttonClick)="add()"></dbx-button>
2760
2801
  </div>
2761
2802
  </dbx-subsection>
2762
2803
  </div>
@@ -2814,12 +2855,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImpor
2814
2855
  }] });
2815
2856
 
2816
2857
  function repeatArrayField(config) {
2817
- const { key, repeatFieldGroup, maxLength, addText, removeText, labelForField } = config;
2858
+ const { key, label, description, repeatFieldGroup, maxLength, addText, removeText, labelForField, disableRearrange, allowAdd, allowRemove } = config;
2818
2859
  return formlyField(Object.assign(Object.assign({ key, type: 'repeatarray' }, propsAndConfigForFieldConfig(config, {
2860
+ label,
2861
+ description,
2819
2862
  maxLength,
2820
2863
  labelForField,
2821
2864
  addText,
2822
- removeText
2865
+ removeText,
2866
+ disableRearrange,
2867
+ allowAdd,
2868
+ allowRemove
2823
2869
  })), { fieldArray: {
2824
2870
  fieldGroup: asArray(repeatFieldGroup)
2825
2871
  } }));