@dynamic-field-kit/angular 1.2.10 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/README.md +113 -4
- package/dist/README.md +113 -4
- package/dist/components/BaseInput.d.ts +23 -11
- package/dist/components/DynamicInput.d.ts +19 -8
- package/dist/components/FieldInput.d.ts +15 -7
- package/dist/components/MultiFieldInput.d.ts +30 -4
- package/dist/esm2022/components/BaseInput.mjs +17 -18
- package/dist/esm2022/components/DynamicInput.mjs +166 -84
- package/dist/esm2022/components/FieldInput.mjs +54 -26
- package/dist/esm2022/components/MultiFieldInput.mjs +282 -29
- package/dist/esm2022/fieldRegistryToken.mjs +12 -0
- package/dist/esm2022/layout/defaultLayouts.mjs +70 -23
- package/dist/esm2022/layout/index.mjs +2 -1
- package/dist/esm2022/layout/layoutRegistry.mjs +14 -0
- package/dist/esm2022/public-api.mjs +6 -2
- package/dist/esm2022/types/layout.mjs +1 -1
- package/dist/fesm2022/dynamic-field-kit-angular.mjs +604 -173
- package/dist/fesm2022/dynamic-field-kit-angular.mjs.map +1 -1
- package/dist/fieldRegistryToken.d.ts +3 -0
- package/dist/layout/defaultLayouts.d.ts +21 -3
- package/dist/layout/index.d.ts +1 -0
- package/dist/layout/layoutRegistry.d.ts +12 -0
- package/dist/public-api.d.ts +5 -2
- package/dist/types/layout.d.ts +4 -1
- package/package.json +19 -8
- package/src/components/BaseInput.ts +36 -10
- package/src/components/DynamicInput.ts +196 -104
- package/src/components/FieldInput.ts +43 -18
- package/src/components/MultiFieldInput.ts +275 -19
- package/src/fieldRegistryToken.ts +15 -0
- package/src/layout/defaultLayouts.ts +42 -10
- package/src/layout/index.ts +1 -0
- package/src/layout/layoutRegistry.ts +25 -0
- package/src/public-api.ts +40 -24
- package/src/types/layout.ts +14 -1
- package/test/DynamicInput.spec.ts +230 -0
- package/test/FieldInput.spec.ts +146 -0
- package/test/MultiFieldInput.spec.ts +256 -0
- package/test/helpers/renderers.ts +89 -0
- package/test/layout.spec.ts +119 -0
- package/test/publicApi.spec.ts +64 -0
- package/test/setup.ts +12 -0
- package/test/smoke.spec.ts +27 -0
- package/tsconfig.json +13 -13
- package/tsconfig.spec.json +9 -0
- package/vitest.config.ts +30 -0
- package/src/adapters/tailwind.ts +0 -13
- package/src/components/imports.ts +0 -3
- package/src/examples/index.ts +0 -4
- package/src/examples/registerExample.ts +0 -7
- package/src/examples/text-field.component.ts +0 -18
- package/src/types.ts +0 -1
|
@@ -1,85 +1,338 @@
|
|
|
1
|
-
import { NgClass, NgFor } from '@angular/common';
|
|
2
|
-
import { Component, Input, Output,
|
|
1
|
+
import { NgClass, NgFor, NgIf } from '@angular/common';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, HostListener, Input, Output, } from '@angular/core';
|
|
3
|
+
import { applyComputedValues, canAddGroupItem, canRemoveGroupItem, createGroupItem, resolveDisabled, resolveOptions, resolveReadOnly, validateField, validateFields, } from '@dynamic-field-kit/core';
|
|
3
4
|
import { FieldInput } from './FieldInput';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
6
|
+
const DEFAULT_BREAKPOINT = 768;
|
|
5
7
|
export class MultiFieldInput {
|
|
8
|
+
cdr;
|
|
6
9
|
fieldDescriptions = [];
|
|
7
10
|
properties;
|
|
8
11
|
onChange = new EventEmitter();
|
|
12
|
+
validityChange = new EventEmitter();
|
|
9
13
|
layout = 'column';
|
|
14
|
+
// Top-level form data, threaded down through repeatable groups so a nested
|
|
15
|
+
// field's appearCondition/computeValue can read the root form. Omitted at
|
|
16
|
+
// the top level, where the form's own data is the root.
|
|
17
|
+
rootData;
|
|
10
18
|
data = {};
|
|
11
19
|
visibleFields = [];
|
|
20
|
+
isMobile = false;
|
|
21
|
+
constructor(cdr) {
|
|
22
|
+
this.cdr = cdr;
|
|
23
|
+
}
|
|
24
|
+
onWindowResize() {
|
|
25
|
+
const wasMobile = this.isMobile;
|
|
26
|
+
this.updateIsMobile();
|
|
27
|
+
if (wasMobile !== this.isMobile) {
|
|
28
|
+
this.cdr.markForCheck();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
get resolvedLayout() {
|
|
32
|
+
if (typeof this.layout === 'object' && this.layout.type === 'responsive') {
|
|
33
|
+
return this.isMobile ? this.layout.mobile : this.layout.desktop;
|
|
34
|
+
}
|
|
35
|
+
return this.layout;
|
|
36
|
+
}
|
|
37
|
+
get resolvedLayoutType() {
|
|
38
|
+
const resolved = this.resolvedLayout;
|
|
39
|
+
return typeof resolved === 'string' ? resolved : resolved.type;
|
|
40
|
+
}
|
|
41
|
+
get gap() {
|
|
42
|
+
const resolved = this.resolvedLayout;
|
|
43
|
+
if (typeof resolved === 'object' && resolved.gap !== undefined) {
|
|
44
|
+
return resolved.gap;
|
|
45
|
+
}
|
|
46
|
+
return 12;
|
|
47
|
+
}
|
|
48
|
+
get columns() {
|
|
49
|
+
const resolved = this.resolvedLayout;
|
|
50
|
+
if (typeof resolved === 'object' && resolved.type === 'grid') {
|
|
51
|
+
return resolved.columns ?? 2;
|
|
52
|
+
}
|
|
53
|
+
return 2;
|
|
54
|
+
}
|
|
12
55
|
trackByFn(index, field) {
|
|
13
56
|
return field.name || index;
|
|
14
57
|
}
|
|
58
|
+
trackByIndex(index) {
|
|
59
|
+
return index;
|
|
60
|
+
}
|
|
61
|
+
groupTrackByCache = new WeakMap();
|
|
62
|
+
// Returns a stable trackBy per group field: item[keyField] when configured,
|
|
63
|
+
// else the index. Cached by field reference so the template hands Angular the
|
|
64
|
+
// same function each change-detection pass.
|
|
65
|
+
groupTrackBy(field) {
|
|
66
|
+
let fn = this.groupTrackByCache.get(field);
|
|
67
|
+
if (!fn) {
|
|
68
|
+
fn = (index, item) => field.keyField ? item[field.keyField] ?? index : index;
|
|
69
|
+
this.groupTrackByCache.set(field, fn);
|
|
70
|
+
}
|
|
71
|
+
return fn;
|
|
72
|
+
}
|
|
15
73
|
ngOnInit() {
|
|
74
|
+
this.updateIsMobile();
|
|
16
75
|
this.init();
|
|
17
76
|
}
|
|
18
77
|
ngOnChanges(_changes) {
|
|
19
78
|
this.init();
|
|
20
79
|
}
|
|
80
|
+
updateIsMobile() {
|
|
81
|
+
const breakpoint = typeof this.layout === 'object' && this.layout.type === 'responsive'
|
|
82
|
+
? this.layout.breakpoint ?? DEFAULT_BREAKPOINT
|
|
83
|
+
: DEFAULT_BREAKPOINT;
|
|
84
|
+
if (typeof window !== 'undefined' &&
|
|
85
|
+
typeof window.matchMedia === 'function') {
|
|
86
|
+
this.isMobile = window.matchMedia(`(max-width: ${breakpoint - 1}px)`).matches;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
this.isMobile =
|
|
90
|
+
typeof window !== 'undefined' && window.innerWidth < breakpoint;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
21
93
|
init() {
|
|
22
94
|
if (this.properties) {
|
|
23
|
-
this.data = { ...this.properties };
|
|
95
|
+
this.data = applyComputedValues(this.fieldDescriptions, { ...this.properties }, this.rootData);
|
|
24
96
|
}
|
|
25
97
|
this.updateVisibleFields();
|
|
98
|
+
this.validityChange.emit(validateFields(this.fieldDescriptions, this.data, this.rootData));
|
|
26
99
|
}
|
|
27
100
|
updateVisibleFields() {
|
|
28
|
-
|
|
101
|
+
const root = this.rootData ?? this.data;
|
|
102
|
+
this.visibleFields = this.fieldDescriptions.filter((f) => !f.appearCondition || f.appearCondition(this.data, root));
|
|
29
103
|
}
|
|
30
104
|
onFieldChange(event) {
|
|
31
|
-
this.
|
|
105
|
+
this.commitData({ ...this.data, [event.key]: event.value });
|
|
106
|
+
}
|
|
107
|
+
getItems(field) {
|
|
108
|
+
const value = this.data[field.name];
|
|
109
|
+
return Array.isArray(value) ? value : [];
|
|
110
|
+
}
|
|
111
|
+
getResolvedOptions(field) {
|
|
112
|
+
return resolveOptions(field, this.data, this.rootData);
|
|
113
|
+
}
|
|
114
|
+
getDisabled(field) {
|
|
115
|
+
return resolveDisabled(field, this.data, this.rootData);
|
|
116
|
+
}
|
|
117
|
+
getReadOnly(field) {
|
|
118
|
+
return resolveReadOnly(field, this.data, this.rootData);
|
|
119
|
+
}
|
|
120
|
+
getError(field) {
|
|
121
|
+
if (this.getDisabled(field)) {
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
const errors = validateField(field, this.data[field.name], this.data, this.rootData);
|
|
125
|
+
return errors.length > 0 ? errors : undefined;
|
|
126
|
+
}
|
|
127
|
+
canAddItem(field) {
|
|
128
|
+
return canAddGroupItem(field, this.getItems(field));
|
|
129
|
+
}
|
|
130
|
+
canRemoveItem(field) {
|
|
131
|
+
return canRemoveGroupItem(field, this.getItems(field));
|
|
132
|
+
}
|
|
133
|
+
onGroupItemAdd(field) {
|
|
134
|
+
if (!this.canAddItem(field)) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
const items = this.getItems(field);
|
|
138
|
+
this.commitData({
|
|
139
|
+
...this.data,
|
|
140
|
+
[field.name]: [...items, createGroupItem(field)],
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
onGroupItemRemove(field, index) {
|
|
144
|
+
if (!this.canRemoveItem(field)) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const items = this.getItems(field).filter((_, i) => i !== index);
|
|
148
|
+
this.commitData({ ...this.data, [field.name]: items });
|
|
149
|
+
}
|
|
150
|
+
onGroupItemChange(field, index, next) {
|
|
151
|
+
const items = this.getItems(field).slice();
|
|
152
|
+
items[index] = next;
|
|
153
|
+
this.commitData({ ...this.data, [field.name]: items });
|
|
154
|
+
}
|
|
155
|
+
commitData(nextData) {
|
|
156
|
+
this.data = applyComputedValues(this.fieldDescriptions, nextData, this.rootData);
|
|
32
157
|
this.updateVisibleFields();
|
|
33
158
|
this.onChange.emit(this.data);
|
|
159
|
+
this.validityChange.emit(validateFields(this.fieldDescriptions, this.data, this.rootData));
|
|
160
|
+
this.cdr.markForCheck();
|
|
34
161
|
}
|
|
35
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: MultiFieldInput, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
36
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.20", type: MultiFieldInput, isStandalone: true, selector: "dfk-multi-field-input", inputs: { fieldDescriptions: "fieldDescriptions", properties: "properties", layout: "layout" }, outputs: { onChange: "onChange" }, usesOnChanges: true, ngImport: i0, template: `
|
|
162
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: MultiFieldInput, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
163
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.20", type: MultiFieldInput, isStandalone: true, selector: "dfk-multi-field-input", inputs: { fieldDescriptions: "fieldDescriptions", properties: "properties", layout: "layout", rootData: "rootData" }, outputs: { onChange: "onChange", validityChange: "validityChange" }, host: { listeners: { "window:resize": "onWindowResize()" } }, usesOnChanges: true, ngImport: i0, template: `
|
|
37
164
|
<div
|
|
38
|
-
class="
|
|
165
|
+
class="p-4 border rounded-lg bg-gray-50"
|
|
39
166
|
[ngClass]="{
|
|
40
|
-
'flex
|
|
41
|
-
'
|
|
167
|
+
'flex flex-col': resolvedLayoutType === 'column',
|
|
168
|
+
'flex flex-row': resolvedLayoutType === 'row',
|
|
169
|
+
grid: resolvedLayoutType === 'grid'
|
|
42
170
|
}"
|
|
171
|
+
[style.gap.px]="gap"
|
|
172
|
+
[style.gridTemplateColumns]="
|
|
173
|
+
resolvedLayoutType === 'grid' ? 'repeat(' + columns + ', 1fr)' : null
|
|
174
|
+
"
|
|
43
175
|
>
|
|
44
|
-
<
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
176
|
+
<ng-container *ngFor="let field of visibleFields; trackBy: trackByFn">
|
|
177
|
+
<dfk-field-input
|
|
178
|
+
*ngIf="!field.fields"
|
|
179
|
+
[fieldDescription]="field"
|
|
180
|
+
[value]="data[field.name]"
|
|
181
|
+
[options]="getResolvedOptions(field)"
|
|
182
|
+
[disabled]="getDisabled(field)"
|
|
183
|
+
[readOnly]="getReadOnly(field)"
|
|
184
|
+
[error]="getError(field)"
|
|
185
|
+
(onValueChangeField)="onFieldChange($event)"
|
|
186
|
+
></dfk-field-input>
|
|
187
|
+
|
|
188
|
+
<div *ngIf="field.fields" [class]="field.className">
|
|
189
|
+
<div *ngIf="field.label">{{ field.label }}</div>
|
|
190
|
+
<div
|
|
191
|
+
*ngFor="
|
|
192
|
+
let item of getItems(field);
|
|
193
|
+
let i = index;
|
|
194
|
+
trackBy: groupTrackBy(field)
|
|
195
|
+
"
|
|
196
|
+
style="display: flex; align-items: flex-start; gap: 8px;"
|
|
197
|
+
>
|
|
198
|
+
<div style="flex: 1">
|
|
199
|
+
<dfk-multi-field-input
|
|
200
|
+
[fieldDescriptions]="field.fields"
|
|
201
|
+
[properties]="item"
|
|
202
|
+
[rootData]="rootData ?? data"
|
|
203
|
+
(onChange)="onGroupItemChange(field, i, $event)"
|
|
204
|
+
></dfk-multi-field-input>
|
|
205
|
+
</div>
|
|
206
|
+
<button
|
|
207
|
+
type="button"
|
|
208
|
+
[attr.aria-label]="
|
|
209
|
+
(field.removeLabel || 'Remove') +
|
|
210
|
+
' ' +
|
|
211
|
+
(field.label || field.name) +
|
|
212
|
+
' ' +
|
|
213
|
+
(i + 1)
|
|
214
|
+
"
|
|
215
|
+
(click)="onGroupItemRemove(field, i)"
|
|
216
|
+
[disabled]="!canRemoveItem(field)"
|
|
217
|
+
>
|
|
218
|
+
{{ field.removeLabel || 'Remove' }}
|
|
219
|
+
</button>
|
|
220
|
+
</div>
|
|
221
|
+
<button
|
|
222
|
+
type="button"
|
|
223
|
+
[attr.aria-label]="
|
|
224
|
+
(field.addLabel || 'Add') + ' ' + (field.label || field.name)
|
|
225
|
+
"
|
|
226
|
+
(click)="onGroupItemAdd(field)"
|
|
227
|
+
[disabled]="!canAddItem(field)"
|
|
228
|
+
>
|
|
229
|
+
{{ field.addLabel || 'Add' }}
|
|
230
|
+
</button>
|
|
231
|
+
</div>
|
|
232
|
+
</ng-container>
|
|
50
233
|
</div>
|
|
51
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: FieldInput, selector: "dfk-field-input", inputs: ["fieldDescription", "
|
|
234
|
+
`, isInline: true, dependencies: [{ kind: "component", type: MultiFieldInput, selector: "dfk-multi-field-input", inputs: ["fieldDescriptions", "properties", "layout", "rootData"], outputs: ["onChange", "validityChange"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FieldInput, selector: "dfk-field-input", inputs: ["fieldDescription", "value", "options", "disabled", "readOnly", "error"], outputs: ["onValueChangeField"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
52
235
|
}
|
|
53
236
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: MultiFieldInput, decorators: [{
|
|
54
237
|
type: Component,
|
|
55
238
|
args: [{
|
|
56
239
|
selector: 'dfk-multi-field-input',
|
|
57
240
|
standalone: true,
|
|
58
|
-
|
|
241
|
+
// Repeatable field groups render a nested <dfk-multi-field-input> per item
|
|
242
|
+
// (see the #groupTpl below), so this component imports itself. That's the
|
|
243
|
+
// supported way to give a standalone component recursive template usage
|
|
244
|
+
// without a cross-file circular import between FieldInput and a separate
|
|
245
|
+
// group component (whose `imports` arrays are evaluated eagerly at module
|
|
246
|
+
// load time and would deadlock on an actual circular module reference).
|
|
247
|
+
imports: [NgClass, NgFor, NgIf, FieldInput, MultiFieldInput],
|
|
248
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
59
249
|
template: `
|
|
60
250
|
<div
|
|
61
|
-
class="
|
|
251
|
+
class="p-4 border rounded-lg bg-gray-50"
|
|
62
252
|
[ngClass]="{
|
|
63
|
-
'flex
|
|
64
|
-
'
|
|
253
|
+
'flex flex-col': resolvedLayoutType === 'column',
|
|
254
|
+
'flex flex-row': resolvedLayoutType === 'row',
|
|
255
|
+
grid: resolvedLayoutType === 'grid'
|
|
65
256
|
}"
|
|
257
|
+
[style.gap.px]="gap"
|
|
258
|
+
[style.gridTemplateColumns]="
|
|
259
|
+
resolvedLayoutType === 'grid' ? 'repeat(' + columns + ', 1fr)' : null
|
|
260
|
+
"
|
|
66
261
|
>
|
|
67
|
-
<
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
262
|
+
<ng-container *ngFor="let field of visibleFields; trackBy: trackByFn">
|
|
263
|
+
<dfk-field-input
|
|
264
|
+
*ngIf="!field.fields"
|
|
265
|
+
[fieldDescription]="field"
|
|
266
|
+
[value]="data[field.name]"
|
|
267
|
+
[options]="getResolvedOptions(field)"
|
|
268
|
+
[disabled]="getDisabled(field)"
|
|
269
|
+
[readOnly]="getReadOnly(field)"
|
|
270
|
+
[error]="getError(field)"
|
|
271
|
+
(onValueChangeField)="onFieldChange($event)"
|
|
272
|
+
></dfk-field-input>
|
|
273
|
+
|
|
274
|
+
<div *ngIf="field.fields" [class]="field.className">
|
|
275
|
+
<div *ngIf="field.label">{{ field.label }}</div>
|
|
276
|
+
<div
|
|
277
|
+
*ngFor="
|
|
278
|
+
let item of getItems(field);
|
|
279
|
+
let i = index;
|
|
280
|
+
trackBy: groupTrackBy(field)
|
|
281
|
+
"
|
|
282
|
+
style="display: flex; align-items: flex-start; gap: 8px;"
|
|
283
|
+
>
|
|
284
|
+
<div style="flex: 1">
|
|
285
|
+
<dfk-multi-field-input
|
|
286
|
+
[fieldDescriptions]="field.fields"
|
|
287
|
+
[properties]="item"
|
|
288
|
+
[rootData]="rootData ?? data"
|
|
289
|
+
(onChange)="onGroupItemChange(field, i, $event)"
|
|
290
|
+
></dfk-multi-field-input>
|
|
291
|
+
</div>
|
|
292
|
+
<button
|
|
293
|
+
type="button"
|
|
294
|
+
[attr.aria-label]="
|
|
295
|
+
(field.removeLabel || 'Remove') +
|
|
296
|
+
' ' +
|
|
297
|
+
(field.label || field.name) +
|
|
298
|
+
' ' +
|
|
299
|
+
(i + 1)
|
|
300
|
+
"
|
|
301
|
+
(click)="onGroupItemRemove(field, i)"
|
|
302
|
+
[disabled]="!canRemoveItem(field)"
|
|
303
|
+
>
|
|
304
|
+
{{ field.removeLabel || 'Remove' }}
|
|
305
|
+
</button>
|
|
306
|
+
</div>
|
|
307
|
+
<button
|
|
308
|
+
type="button"
|
|
309
|
+
[attr.aria-label]="
|
|
310
|
+
(field.addLabel || 'Add') + ' ' + (field.label || field.name)
|
|
311
|
+
"
|
|
312
|
+
(click)="onGroupItemAdd(field)"
|
|
313
|
+
[disabled]="!canAddItem(field)"
|
|
314
|
+
>
|
|
315
|
+
{{ field.addLabel || 'Add' }}
|
|
316
|
+
</button>
|
|
317
|
+
</div>
|
|
318
|
+
</ng-container>
|
|
73
319
|
</div>
|
|
74
320
|
`,
|
|
75
321
|
}]
|
|
76
|
-
}], propDecorators: { fieldDescriptions: [{
|
|
322
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { fieldDescriptions: [{
|
|
77
323
|
type: Input
|
|
78
324
|
}], properties: [{
|
|
79
325
|
type: Input
|
|
80
326
|
}], onChange: [{
|
|
81
327
|
type: Output
|
|
328
|
+
}], validityChange: [{
|
|
329
|
+
type: Output
|
|
82
330
|
}], layout: [{
|
|
83
331
|
type: Input
|
|
332
|
+
}], rootData: [{
|
|
333
|
+
type: Input
|
|
334
|
+
}], onWindowResize: [{
|
|
335
|
+
type: HostListener,
|
|
336
|
+
args: ['window:resize']
|
|
84
337
|
}] } });
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXVsdGlGaWVsZElucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvTXVsdGlGaWVsZElucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksR0FJYixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDOztBQXVCMUMsTUFBTSxPQUFPLGVBQWU7SUFDakIsaUJBQWlCLEdBQXVCLEVBQUUsQ0FBQztJQUMzQyxVQUFVLENBQWM7SUFDdkIsUUFBUSxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7SUFDM0MsTUFBTSxHQUFpQixRQUFRLENBQUM7SUFFekMsSUFBSSxHQUFlLEVBQUUsQ0FBQztJQUN0QixhQUFhLEdBQXVCLEVBQUUsQ0FBQztJQUV2QyxTQUFTLENBQUMsS0FBYSxFQUFFLEtBQXVCO1FBQzlDLE9BQU8sS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQXVCO1FBQ2pDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFTyxJQUFJO1FBQ1YsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3JDLENBQUM7UUFDRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FDaEQsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsSUFBSSxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDMUQsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBa0M7UUFDOUMsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7d0dBdENVLGVBQWU7NEZBQWYsZUFBZSx5T0FqQmhCOzs7Ozs7Ozs7Ozs7Ozs7R0FlVCw0REFoQlMsT0FBTyxvRkFBRSxLQUFLLG1IQUFFLFVBQVU7OzRGQWtCekIsZUFBZTtrQkFyQjNCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDO29CQUNyQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7OztHQWVUO2lCQUNGOzhCQUVVLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0UsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdDbGFzcywgTmdGb3IgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZpZWxkRGVzY3JpcHRpb24sIFByb3BlcnRpZXMgfSBmcm9tICdAZHluYW1pYy1maWVsZC1raXQvY29yZSc7XG5pbXBvcnQgeyBMYXlvdXRDb25maWcgfSBmcm9tICcuLi90eXBlcy9sYXlvdXQnO1xuaW1wb3J0IHsgRmllbGRJbnB1dCB9IGZyb20gJy4vRmllbGRJbnB1dCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Rmay1tdWx0aS1maWVsZC1pbnB1dCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtOZ0NsYXNzLCBOZ0ZvciwgRmllbGRJbnB1dF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0zIHAtNCBib3JkZXIgcm91bmRlZC1sZyBiZy1ncmF5LTUwXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2ZsZXgtcm93IGdhcC0zJzogbGF5b3V0ID09PSAncm93JyxcbiAgICAgICAgJ2dyaWQgZ3JpZC1jb2xzLTIgZ2FwLTMnOiBsYXlvdXQgPT09ICdncmlkJ1xuICAgICAgfVwiXG4gICAgPlxuICAgICAgPGRmay1maWVsZC1pbnB1dFxuICAgICAgICAqbmdGb3I9XCJsZXQgZmllbGQgb2YgdmlzaWJsZUZpZWxkczsgdHJhY2tCeTogdHJhY2tCeUZuXCJcbiAgICAgICAgW2ZpZWxkRGVzY3JpcHRpb25dPVwiZmllbGRcIlxuICAgICAgICBbcmVuZGVySW5mb3NdPVwiZGF0YVwiXG4gICAgICAgIChvblZhbHVlQ2hhbmdlRmllbGQpPVwib25GaWVsZENoYW5nZSgkZXZlbnQpXCJcbiAgICAgID48L2Rmay1maWVsZC1pbnB1dD5cbiAgICA8L2Rpdj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgTXVsdGlGaWVsZElucHV0IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBmaWVsZERlc2NyaXB0aW9uczogRmllbGREZXNjcmlwdGlvbltdID0gW107XG4gIEBJbnB1dCgpIHByb3BlcnRpZXM/OiBQcm9wZXJ0aWVzO1xuICBAT3V0cHV0KCkgb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFByb3BlcnRpZXM+KCk7XG4gIEBJbnB1dCgpIGxheW91dDogTGF5b3V0Q29uZmlnID0gJ2NvbHVtbic7XG5cbiAgZGF0YTogUHJvcGVydGllcyA9IHt9O1xuICB2aXNpYmxlRmllbGRzOiBGaWVsZERlc2NyaXB0aW9uW10gPSBbXTtcblxuICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgZmllbGQ6IEZpZWxkRGVzY3JpcHRpb24pOiBzdHJpbmcgfCBudW1iZXIge1xuICAgIHJldHVybiBmaWVsZC5uYW1lIHx8IGluZGV4O1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhfY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCkge1xuICAgIGlmICh0aGlzLnByb3BlcnRpZXMpIHtcbiAgICAgIHRoaXMuZGF0YSA9IHsgLi4udGhpcy5wcm9wZXJ0aWVzIH07XG4gICAgfVxuICAgIHRoaXMudXBkYXRlVmlzaWJsZUZpZWxkcygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmxlRmllbGRzKCkge1xuICAgIHRoaXMudmlzaWJsZUZpZWxkcyA9IHRoaXMuZmllbGREZXNjcmlwdGlvbnMuZmlsdGVyKFxuICAgICAgKGYpID0+ICFmLmFwcGVhckNvbmRpdGlvbiB8fCBmLmFwcGVhckNvbmRpdGlvbih0aGlzLmRhdGEpXG4gICAgKTtcbiAgfVxuXG4gIG9uRmllbGRDaGFuZ2UoZXZlbnQ6IHsgdmFsdWU6IGFueTsga2V5OiBzdHJpbmcgfSkge1xuICAgIHRoaXMuZGF0YSA9IHsgLi4udGhpcy5kYXRhLCBbZXZlbnQua2V5XTogZXZlbnQudmFsdWUgfTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVGaWVsZHMoKTtcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5kYXRhKTtcbiAgfVxufVxuIl19
|
|
338
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXVsdGlGaWVsZElucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvTXVsdGlGaWVsZElucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLGVBQWUsRUFDZixjQUFjLEVBQ2QsZUFBZSxFQUNmLGFBQWEsRUFDYixjQUFjLEdBR2YsTUFBTSx5QkFBeUIsQ0FBQztBQUdqQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDOztBQUUxQyxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztBQXNGL0IsTUFBTSxPQUFPLGVBQWU7SUFlTjtJQWRYLGlCQUFpQixHQUF1QixFQUFFLENBQUM7SUFDM0MsVUFBVSxDQUFjO0lBQ3ZCLFFBQVEsR0FBRyxJQUFJLFlBQVksRUFBYyxDQUFDO0lBQzFDLGNBQWMsR0FBRyxJQUFJLFlBQVksRUFBb0IsQ0FBQztJQUN2RCxNQUFNLEdBQWlCLFFBQVEsQ0FBQztJQUN6QywyRUFBMkU7SUFDM0UsMEVBQTBFO0lBQzFFLHdEQUF3RDtJQUMvQyxRQUFRLENBQWM7SUFFL0IsSUFBSSxHQUFlLEVBQUUsQ0FBQztJQUN0QixhQUFhLEdBQXVCLEVBQUUsQ0FBQztJQUMvQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBRXpCLFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO0lBQUcsQ0FBQztJQUc5QyxjQUFjO1FBQ1osTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFB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OEtBM0VoQixPQUFPLG9GQUFFLEtBQUssbUhBQUUsSUFBSSw2RkFBRSxVQUFVOzs0RkEyRS9CLGVBQWU7a0JBcEYzQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFVBQVUsRUFBRSxJQUFJO29CQUNoQiwyRUFBMkU7b0JBQzNFLDBFQUEwRTtvQkFDMUUsd0VBQXdFO29CQUN4RSx5RUFBeUU7b0JBQ3pFLDBFQUEwRTtvQkFDMUUsd0VBQXdFO29CQUN4RSxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLGtCQUFrQjtvQkFDNUQsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1RVQ7aUJBQ0Y7c0ZBRVUsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0ksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNFLE1BQU07c0JBQWQsS0FBSztnQkFJRyxRQUFRO3NCQUFoQixLQUFLO2dCQVNOLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdDbGFzcywgTmdGb3IsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBhcHBseUNvbXB1dGVkVmFsdWVzLFxuICBjYW5BZGRHcm91cEl0ZW0sXG4gIGNhblJlbW92ZUdyb3VwSXRlbSxcbiAgY3JlYXRlR3JvdXBJdGVtLFxuICByZXNvbHZlRGlzYWJsZWQsXG4gIHJlc29sdmVPcHRpb25zLFxuICByZXNvbHZlUmVhZE9ubHksXG4gIHZhbGlkYXRlRmllbGQsXG4gIHZhbGlkYXRlRmllbGRzLFxuICBGaWVsZERlc2NyaXB0aW9uLFxuICBQcm9wZXJ0aWVzLFxufSBmcm9tICdAZHluYW1pYy1maWVsZC1raXQvY29yZSc7XG5pbXBvcnQgdHlwZSB7IFZhbGlkYXRpb25SZXN1bHQgfSBmcm9tICdAZHluYW1pYy1maWVsZC1raXQvY29yZSc7XG5pbXBvcnQgeyBCYXNlTGF5b3V0Q29uZmlnLCBMYXlvdXRDb25maWcgfSBmcm9tICcuLi90eXBlcy9sYXlvdXQnO1xuaW1wb3J0IHsgRmllbGRJbnB1dCB9IGZyb20gJy4vRmllbGRJbnB1dCc7XG5cbmNvbnN0IERFRkFVTFRfQlJFQUtQT0lOVCA9IDc2ODtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGZrLW11bHRpLWZpZWxkLWlucHV0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgLy8gUmVwZWF0YWJsZSBmaWVsZCBncm91cHMgcmVuZGVyIGEgbmVzdGVkIDxkZmstbXVsdGktZmllbGQtaW5wdXQ+IHBlciBpdGVtXG4gIC8vIChzZWUgdGhlICNncm91cFRwbCBiZWxvdyksIHNvIHRoaXMgY29tcG9uZW50IGltcG9ydHMgaXRzZWxmLiBUaGF0J3MgdGhlXG4gIC8vIHN1cHBvcnRlZCB3YXkgdG8gZ2l2ZSBhIHN0YW5kYWxvbmUgY29tcG9uZW50IHJlY3Vyc2l2ZSB0ZW1wbGF0ZSB1c2FnZVxuICAvLyB3aXRob3V0IGEgY3Jvc3MtZmlsZSBjaXJjdWxhciBpbXBvcnQgYmV0d2VlbiBGaWVsZElucHV0IGFuZCBhIHNlcGFyYXRlXG4gIC8vIGdyb3VwIGNvbXBvbmVudCAod2hvc2UgYGltcG9ydHNgIGFycmF5cyBhcmUgZXZhbHVhdGVkIGVhZ2VybHkgYXQgbW9kdWxlXG4gIC8vIGxvYWQgdGltZSBhbmQgd291bGQgZGVhZGxvY2sgb24gYW4gYWN0dWFsIGNpcmN1bGFyIG1vZHVsZSByZWZlcmVuY2UpLlxuICBpbXBvcnRzOiBbTmdDbGFzcywgTmdGb3IsIE5nSWYsIEZpZWxkSW5wdXQsIE11bHRpRmllbGRJbnB1dF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicC00IGJvcmRlciByb3VuZGVkLWxnIGJnLWdyYXktNTBcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnZmxleCBmbGV4LWNvbCc6IHJlc29sdmVkTGF5b3V0VHlwZSA9PT0gJ2NvbHVtbicsXG4gICAgICAgICdmbGV4IGZsZXgtcm93JzogcmVzb2x2ZWRMYXlvdXRUeXBlID09PSAncm93JyxcbiAgICAgICAgZ3JpZDogcmVzb2x2ZWRMYXlvdXRUeXBlID09PSAnZ3JpZCdcbiAgICAgIH1cIlxuICAgICAgW3N0eWxlLmdhcC5weF09XCJnYXBcIlxuICAgICAgW3N0eWxlLmdyaWRUZW1wbGF0ZUNvbHVtbnNdPVwiXG4gICAgICAgIHJlc29sdmVkTGF5b3V0VHlwZSA9PT0gJ2dyaWQnID8gJ3JlcGVhdCgnICsgY29sdW1ucyArICcsIDFmciknIDogbnVsbFxuICAgICAgXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiB2aXNpYmxlRmllbGRzOyB0cmFja0J5OiB0cmFja0J5Rm5cIj5cbiAgICAgICAgPGRmay1maWVsZC1pbnB1dFxuICAgICAgICAgICpuZ0lmPVwiIWZpZWxkLmZpZWxkc1wiXG4gICAgICAgICAgW2ZpZWxkRGVzY3JpcHRpb25dPVwiZmllbGRcIlxuICAgICAgICAgIFt2YWx1ZV09XCJkYXRhW2ZpZWxkLm5hbWVdXCJcbiAgICAgICAgICBbb3B0aW9uc109XCJnZXRSZXNvbHZlZE9wdGlvbnMoZmllbGQpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2V0RGlzYWJsZWQoZmllbGQpXCJcbiAgICAgICAgICBbcmVhZE9ubHldPVwiZ2V0UmVhZE9ubHkoZmllbGQpXCJcbiAgICAgICAgICBbZXJyb3JdPVwiZ2V0RXJyb3IoZmllbGQpXCJcbiAgICAgICAgICAob25WYWx1ZUNoYW5nZUZpZWxkKT1cIm9uRmllbGRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID48L2Rmay1maWVsZC1pbnB1dD5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZmllbGQuZmllbGRzXCIgW2NsYXNzXT1cImZpZWxkLmNsYXNzTmFtZVwiPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJmaWVsZC5sYWJlbFwiPnt7IGZpZWxkLmxhYmVsIH19PC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgIGxldCBpdGVtIG9mIGdldEl0ZW1zKGZpZWxkKTtcbiAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgICAgdHJhY2tCeTogZ3JvdXBUcmFja0J5KGZpZWxkKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7IGdhcDogOHB4O1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZsZXg6IDFcIj5cbiAgICAgICAgICAgICAgPGRmay1tdWx0aS1maWVsZC1pbnB1dFxuICAgICAgICAgICAgICAgIFtmaWVsZERlc2NyaXB0aW9uc109XCJmaWVsZC5maWVsZHNcIlxuICAgICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIFtyb290RGF0YV09XCJyb290RGF0YSA/PyBkYXRhXCJcbiAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25Hcm91cEl0ZW1DaGFuZ2UoZmllbGQsIGksICRldmVudClcIlxuICAgICAgICAgICAgICA+PC9kZmstbXVsdGktZmllbGQtaW5wdXQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgKGZpZWxkLnJlbW92ZUxhYmVsIHx8ICdSZW1vdmUnKSArXG4gICAgICAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgICAgICAoZmllbGQubGFiZWwgfHwgZmllbGQubmFtZSkgK1xuICAgICAgICAgICAgICAgICcgJyArXG4gICAgICAgICAgICAgICAgKGkgKyAxKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25Hcm91cEl0ZW1SZW1vdmUoZmllbGQsIGkpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5SZW1vdmVJdGVtKGZpZWxkKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IGZpZWxkLnJlbW92ZUxhYmVsIHx8ICdSZW1vdmUnIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgIChmaWVsZC5hZGRMYWJlbCB8fCAnQWRkJykgKyAnICcgKyAoZmllbGQubGFiZWwgfHwgZmllbGQubmFtZSlcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25Hcm91cEl0ZW1BZGQoZmllbGQpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuQWRkSXRlbShmaWVsZClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGZpZWxkLmFkZExhYmVsIHx8ICdBZGQnIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIE11bHRpRmllbGRJbnB1dCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgZmllbGREZXNjcmlwdGlvbnM6IEZpZWxkRGVzY3JpcHRpb25bXSA9IFtdO1xuICBASW5wdXQoKSBwcm9wZXJ0aWVzPzogUHJvcGVydGllcztcbiAgQE91dHB1dCgpIG9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxQcm9wZXJ0aWVzPigpO1xuICBAT3V0cHV0KCkgdmFsaWRpdHlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFZhbGlkYXRpb25SZXN1bHQ+KCk7XG4gIEBJbnB1dCgpIGxheW91dDogTGF5b3V0Q29uZmlnID0gJ2NvbHVtbic7XG4gIC8vIFRvcC1sZXZlbCBmb3JtIGRhdGEsIHRocmVhZGVkIGRvd24gdGhyb3VnaCByZXBlYXRhYmxlIGdyb3VwcyBzbyBhIG5lc3RlZFxuICAvLyBmaWVsZCdzIGFwcGVhckNvbmRpdGlvbi9jb21wdXRlVmFsdWUgY2FuIHJlYWQgdGhlIHJvb3QgZm9ybS4gT21pdHRlZCBhdFxuICAvLyB0aGUgdG9wIGxldmVsLCB3aGVyZSB0aGUgZm9ybSdzIG93biBkYXRhIGlzIHRoZSByb290LlxuICBASW5wdXQoKSByb290RGF0YT86IFByb3BlcnRpZXM7XG5cbiAgZGF0YTogUHJvcGVydGllcyA9IHt9O1xuICB2aXNpYmxlRmllbGRzOiBGaWVsZERlc2NyaXB0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBpc01vYmlsZSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcbiAgb25XaW5kb3dSZXNpemUoKTogdm9pZCB7XG4gICAgY29uc3Qgd2FzTW9iaWxlID0gdGhpcy5pc01vYmlsZTtcbiAgICB0aGlzLnVwZGF0ZUlzTW9iaWxlKCk7XG4gICAgaWYgKHdhc01vYmlsZSAhPT0gdGhpcy5pc01vYmlsZSkge1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJlc29sdmVkTGF5b3V0KCk6IEJhc2VMYXlvdXRDb25maWcge1xuICAgIGlmICh0eXBlb2YgdGhpcy5sYXlvdXQgPT09ICdvYmplY3QnICYmIHRoaXMubGF5b3V0LnR5cGUgPT09ICdyZXNwb25zaXZlJykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNNb2JpbGUgPyB0aGlzLmxheW91dC5tb2JpbGUgOiB0aGlzLmxheW91dC5kZXNrdG9wO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sYXlvdXQgYXMgQmFzZUxheW91dENvbmZpZztcbiAgfVxuXG4gIGdldCByZXNvbHZlZExheW91dFR5cGUoKTogc3RyaW5nIHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZWRMYXlvdXQ7XG4gICAgcmV0dXJuIHR5cGVvZiByZXNvbHZlZCA9PT0gJ3N0cmluZycgPyByZXNvbHZlZCA6IHJlc29sdmVkLnR5cGU7XG4gIH1cblxuICBnZXQgZ2FwKCk6IG51bWJlciB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVkTGF5b3V0O1xuICAgIGlmICh0eXBlb2YgcmVzb2x2ZWQgPT09ICdvYmplY3QnICYmIHJlc29sdmVkLmdhcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZWQuZ2FwO1xuICAgIH1cbiAgICByZXR1cm4gMTI7XG4gIH1cblxuICBnZXQgY29sdW1ucygpOiBudW1iZXIge1xuICAgIGNvbnN0IHJlc29sdmVkID0gdGhpcy5yZXNvbHZlZExheW91dDtcbiAgICBpZiAodHlwZW9mIHJlc29sdmVkID09PSAnb2JqZWN0JyAmJiByZXNvbHZlZC50eXBlID09PSAnZ3JpZCcpIHtcbiAgICAgIHJldHVybiByZXNvbHZlZC5jb2x1bW5zID8/IDI7XG4gICAgfVxuICAgIHJldHVybiAyO1xuICB9XG5cbiAgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIGZpZWxkOiBGaWVsZERlc2NyaXB0aW9uKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICByZXR1cm4gZmllbGQubmFtZSB8fCBpbmRleDtcbiAgfVxuXG4gIHRyYWNrQnlJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBwcml2YXRlIGdyb3VwVHJhY2tCeUNhY2hlID0gbmV3IFdlYWtNYXA8XG4gICAgRmllbGREZXNjcmlwdGlvbixcbiAgICAoaW5kZXg6IG51bWJlciwgaXRlbTogUHJvcGVydGllcykgPT4gdW5rbm93blxuICA+KCk7XG5cbiAgLy8gUmV0dXJucyBhIHN0YWJsZSB0cmFja0J5IHBlciBncm91cCBmaWVsZDogaXRlbVtrZXlGaWVsZF0gd2hlbiBjb25maWd1cmVkLFxuICAvLyBlbHNlIHRoZSBpbmRleC4gQ2FjaGVkIGJ5IGZpZWxkIHJlZmVyZW5jZSBzbyB0aGUgdGVtcGxhdGUgaGFuZHMgQW5ndWxhciB0aGVcbiAgLy8gc2FtZSBmdW5jdGlvbiBlYWNoIGNoYW5nZS1kZXRlY3Rpb24gcGFzcy5cbiAgZ3JvdXBUcmFja0J5KFxuICAgIGZpZWxkOiBGaWVsZERlc2NyaXB0aW9uXG4gICk6IChpbmRleDogbnVtYmVyLCBpdGVtOiBQcm9wZXJ0aWVzKSA9PiB1bmtub3duIHtcbiAgICBsZXQgZm4gPSB0aGlzLmdyb3VwVHJhY2tCeUNhY2hlLmdldChmaWVsZCk7XG4gICAgaWYgKCFmbikge1xuICAgICAgZm4gPSAoaW5kZXg6IG51bWJlciwgaXRlbTogUHJvcGVydGllcykgPT5cbiAgICAgICAgZmllbGQua2V5RmllbGQgPyBpdGVtW2ZpZWxkLmtleUZpZWxkXSA/PyBpbmRleCA6IGluZGV4O1xuICAgICAgdGhpcy5ncm91cFRyYWNrQnlDYWNoZS5zZXQoZmllbGQsIGZuKTtcbiAgICB9XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy51cGRhdGVJc01vYmlsZSgpO1xuICAgIHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoX2NoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSXNNb2JpbGUoKTogdm9pZCB7XG4gICAgY29uc3QgYnJlYWtwb2ludCA9XG4gICAgICB0eXBlb2YgdGhpcy5sYXlvdXQgPT09ICdvYmplY3QnICYmIHRoaXMubGF5b3V0LnR5cGUgPT09ICdyZXNwb25zaXZlJ1xuICAgICAgICA/IHRoaXMubGF5b3V0LmJyZWFrcG9pbnQgPz8gREVGQVVMVF9CUkVBS1BPSU5UXG4gICAgICAgIDogREVGQVVMVF9CUkVBS1BPSU5UO1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICB0eXBlb2Ygd2luZG93Lm1hdGNoTWVkaWEgPT09ICdmdW5jdGlvbidcbiAgICApIHtcbiAgICAgIHRoaXMuaXNNb2JpbGUgPSB3aW5kb3cubWF0Y2hNZWRpYShcbiAgICAgICAgYChtYXgtd2lkdGg6ICR7YnJlYWtwb2ludCAtIDF9cHgpYFxuICAgICAgKS5tYXRjaGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzTW9iaWxlID1cbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmlubmVyV2lkdGggPCBicmVha3BvaW50O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdCgpIHtcbiAgICBpZiAodGhpcy5wcm9wZXJ0aWVzKSB7XG4gICAgICB0aGlzLmRhdGEgPSBhcHBseUNvbXB1dGVkVmFsdWVzKFxuICAgICAgICB0aGlzLmZpZWxkRGVzY3JpcHRpb25zLFxuICAgICAgICB7IC4uLnRoaXMucHJvcGVydGllcyB9LFxuICAgICAgICB0aGlzLnJvb3REYXRhXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVZpc2libGVGaWVsZHMoKTtcbiAgICB0aGlzLnZhbGlkaXR5Q2hhbmdlLmVtaXQoXG4gICAgICB2YWxpZGF0ZUZpZWxkcyh0aGlzLmZpZWxkRGVzY3JpcHRpb25zLCB0aGlzLmRhdGEsIHRoaXMucm9vdERhdGEpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmlzaWJsZUZpZWxkcygpIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5yb290RGF0YSA/PyB0aGlzLmRhdGE7XG4gICAgdGhpcy52aXNpYmxlRmllbGRzID0gdGhpcy5maWVsZERlc2NyaXB0aW9ucy5maWx0ZXIoXG4gICAgICAoZikgPT4gIWYuYXBwZWFyQ29uZGl0aW9uIHx8IGYuYXBwZWFyQ29uZGl0aW9uKHRoaXMuZGF0YSwgcm9vdClcbiAgICApO1xuICB9XG5cbiAgb25GaWVsZENoYW5nZShldmVudDogeyB2YWx1ZTogdW5rbm93bjsga2V5OiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIHRoaXMuY29tbWl0RGF0YSh7IC4uLnRoaXMuZGF0YSwgW2V2ZW50LmtleV06IGV2ZW50LnZhbHVlIH0pO1xuICB9XG5cbiAgZ2V0SXRlbXMoZmllbGQ6IEZpZWxkRGVzY3JpcHRpb24pOiBQcm9wZXJ0aWVzW10ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5kYXRhW2ZpZWxkLm5hbWVdO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/ICh2YWx1ZSBhcyBQcm9wZXJ0aWVzW10pIDogW107XG4gIH1cblxuICBnZXRSZXNvbHZlZE9wdGlvbnMoZmllbGQ6IEZpZWxkRGVzY3JpcHRpb24pOiBQcm9wZXJ0aWVzW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiByZXNvbHZlT3B0aW9ucyhmaWVsZCwgdGhpcy5kYXRhLCB0aGlzLnJvb3REYXRhKTtcbiAgfVxuXG4gIGdldERpc2FibGVkKGZpZWxkOiBGaWVsZERlc2NyaXB0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJlc29sdmVEaXNhYmxlZChmaWVsZCwgdGhpcy5kYXRhLCB0aGlzLnJvb3REYXRhKTtcbiAgfVxuXG4gIGdldFJlYWRPbmx5KGZpZWxkOiBGaWVsZERlc2NyaXB0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJlc29sdmVSZWFkT25seShmaWVsZCwgdGhpcy5kYXRhLCB0aGlzLnJvb3REYXRhKTtcbiAgfVxuXG4gIGdldEVycm9yKGZpZWxkOiBGaWVsZERlc2NyaXB0aW9uKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLmdldERpc2FibGVkKGZpZWxkKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGVGaWVsZChcbiAgICAgIGZpZWxkLFxuICAgICAgdGhpcy5kYXRhW2ZpZWxkLm5hbWVdLFxuICAgICAgdGhpcy5kYXRhLFxuICAgICAgdGhpcy5yb290RGF0YVxuICAgICk7XG4gICAgcmV0dXJuIGVycm9ycy5sZW5ndGggPiAwID8gZXJyb3JzIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgY2FuQWRkSXRlbShmaWVsZDogRmllbGREZXNjcmlwdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjYW5BZGRHcm91cEl0ZW0oZmllbGQsIHRoaXMuZ2V0SXRlbXMoZmllbGQpKTtcbiAgfVxuXG4gIGNhblJlbW92ZUl0ZW0oZmllbGQ6IEZpZWxkRGVzY3JpcHRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gY2FuUmVtb3ZlR3JvdXBJdGVtKGZpZWxkLCB0aGlzLmdldEl0ZW1zKGZpZWxkKSk7XG4gIH1cblxuICBvbkdyb3VwSXRlbUFkZChmaWVsZDogRmllbGREZXNjcmlwdGlvbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5BZGRJdGVtKGZpZWxkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoZmllbGQpO1xuICAgIHRoaXMuY29tbWl0RGF0YSh7XG4gICAgICAuLi50aGlzLmRhdGEsXG4gICAgICBbZmllbGQubmFtZV06IFsuLi5pdGVtcywgY3JlYXRlR3JvdXBJdGVtKGZpZWxkKV0sXG4gICAgfSk7XG4gIH1cblxuICBvbkdyb3VwSXRlbVJlbW92ZShmaWVsZDogRmllbGREZXNjcmlwdGlvbiwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5SZW1vdmVJdGVtKGZpZWxkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoZmllbGQpLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpO1xuICAgIHRoaXMuY29tbWl0RGF0YSh7IC4uLnRoaXMuZGF0YSwgW2ZpZWxkLm5hbWVdOiBpdGVtcyB9KTtcbiAgfVxuXG4gIG9uR3JvdXBJdGVtQ2hhbmdlKFxuICAgIGZpZWxkOiBGaWVsZERlc2NyaXB0aW9uLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgbmV4dDogUHJvcGVydGllc1xuICApOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoZmllbGQpLnNsaWNlKCk7XG4gICAgaXRlbXNbaW5kZXhdID0gbmV4dDtcbiAgICB0aGlzLmNvbW1pdERhdGEoeyAuLi50aGlzLmRhdGEsIFtmaWVsZC5uYW1lXTogaXRlbXMgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbW1pdERhdGEobmV4dERhdGE6IFByb3BlcnRpZXMpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGEgPSBhcHBseUNvbXB1dGVkVmFsdWVzKFxuICAgICAgdGhpcy5maWVsZERlc2NyaXB0aW9ucyxcbiAgICAgIG5leHREYXRhLFxuICAgICAgdGhpcy5yb290RGF0YVxuICAgICk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlRmllbGRzKCk7XG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMuZGF0YSk7XG4gICAgdGhpcy52YWxpZGl0eUNoYW5nZS5lbWl0KFxuICAgICAgdmFsaWRhdGVGaWVsZHModGhpcy5maWVsZERlc2NyaXB0aW9ucywgdGhpcy5kYXRhLCB0aGlzLnJvb3REYXRhKVxuICAgICk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
import { fieldRegistry } from '@dynamic-field-kit/core';
|
|
3
|
+
// Injecting this token yields the process-wide singleton by default, so code
|
|
4
|
+
// that never provides it keeps working. Provide it on a component/route to give
|
|
5
|
+
// that subtree an isolated set of renderers:
|
|
6
|
+
//
|
|
7
|
+
// providers: [{ provide: FIELD_REGISTRY, useValue: myScopedRegistry }]
|
|
8
|
+
export const FIELD_REGISTRY = new InjectionToken('dfk.FieldRegistry', {
|
|
9
|
+
providedIn: 'root',
|
|
10
|
+
factory: () => fieldRegistry,
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRSZWdpc3RyeVRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZpZWxkUmVnaXN0cnlUb2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBaUIsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdkUsNkVBQTZFO0FBQzdFLGdGQUFnRjtBQUNoRiw2Q0FBNkM7QUFDN0MsRUFBRTtBQUNGLHlFQUF5RTtBQUN6RSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQzlDLG1CQUFtQixFQUNuQjtJQUNFLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxhQUFhO0NBQzdCLENBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWVsZFJlZ2lzdHJ5LCBmaWVsZFJlZ2lzdHJ5IH0gZnJvbSAnQGR5bmFtaWMtZmllbGQta2l0L2NvcmUnO1xuXG4vLyBJbmplY3RpbmcgdGhpcyB0b2tlbiB5aWVsZHMgdGhlIHByb2Nlc3Mtd2lkZSBzaW5nbGV0b24gYnkgZGVmYXVsdCwgc28gY29kZVxuLy8gdGhhdCBuZXZlciBwcm92aWRlcyBpdCBrZWVwcyB3b3JraW5nLiBQcm92aWRlIGl0IG9uIGEgY29tcG9uZW50L3JvdXRlIHRvIGdpdmVcbi8vIHRoYXQgc3VidHJlZSBhbiBpc29sYXRlZCBzZXQgb2YgcmVuZGVyZXJzOlxuLy9cbi8vICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBGSUVMRF9SRUdJU1RSWSwgdXNlVmFsdWU6IG15U2NvcGVkUmVnaXN0cnkgfV1cbmV4cG9ydCBjb25zdCBGSUVMRF9SRUdJU1RSWSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxGaWVsZFJlZ2lzdHJ5PihcbiAgJ2Rmay5GaWVsZFJlZ2lzdHJ5JyxcbiAge1xuICAgIHByb3ZpZGVkSW46ICdyb290JyxcbiAgICBmYWN0b3J5OiAoKSA9PiBmaWVsZFJlZ2lzdHJ5LFxuICB9XG4pO1xuIl19
|
|
@@ -1,13 +1,22 @@
|
|
|
1
1
|
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { Component } from '@angular/core';
|
|
2
|
+
import { Component, Input } from '@angular/core';
|
|
3
|
+
import { layoutRegistry } from './layoutRegistry';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
4
6
|
export class ColumnLayout {
|
|
7
|
+
config;
|
|
8
|
+
template;
|
|
9
|
+
get gap() {
|
|
10
|
+
return this.config?.gap ?? 12;
|
|
11
|
+
}
|
|
5
12
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: ColumnLayout, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.20", type: ColumnLayout, isStandalone: true, selector: "dfk-column-layout", ngImport: i0, template: `<div
|
|
7
|
-
style="
|
|
13
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.20", type: ColumnLayout, isStandalone: true, selector: "dfk-column-layout", inputs: { config: "config", template: "template" }, ngImport: i0, template: `<div
|
|
14
|
+
[style.display]="'flex'"
|
|
15
|
+
[style.flexDirection]="'column'"
|
|
16
|
+
[style.gap]="gap + 'px'"
|
|
8
17
|
>
|
|
9
|
-
<ng-
|
|
10
|
-
</div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
18
|
+
<ng-container *ngTemplateOutlet="template"></ng-container>
|
|
19
|
+
</div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
|
|
11
20
|
}
|
|
12
21
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: ColumnLayout, decorators: [{
|
|
13
22
|
type: Component,
|
|
@@ -16,19 +25,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImpo
|
|
|
16
25
|
standalone: true,
|
|
17
26
|
imports: [CommonModule],
|
|
18
27
|
template: `<div
|
|
19
|
-
style="
|
|
28
|
+
[style.display]="'flex'"
|
|
29
|
+
[style.flexDirection]="'column'"
|
|
30
|
+
[style.gap]="gap + 'px'"
|
|
20
31
|
>
|
|
21
|
-
<ng-
|
|
32
|
+
<ng-container *ngTemplateOutlet="template"></ng-container>
|
|
22
33
|
</div>`,
|
|
23
34
|
}]
|
|
24
|
-
}]
|
|
35
|
+
}], propDecorators: { config: [{
|
|
36
|
+
type: Input
|
|
37
|
+
}], template: [{
|
|
38
|
+
type: Input
|
|
39
|
+
}] } });
|
|
25
40
|
export class RowLayout {
|
|
41
|
+
config;
|
|
42
|
+
template;
|
|
43
|
+
get gap() {
|
|
44
|
+
return this.config?.gap ?? 12;
|
|
45
|
+
}
|
|
26
46
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: RowLayout, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
27
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.20", type: RowLayout, isStandalone: true, selector: "dfk-row-layout", ngImport: i0, template: `<div
|
|
28
|
-
style="
|
|
47
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.20", type: RowLayout, isStandalone: true, selector: "dfk-row-layout", inputs: { config: "config", template: "template" }, ngImport: i0, template: `<div
|
|
48
|
+
[style.display]="'flex'"
|
|
49
|
+
[style.flexDirection]="'row'"
|
|
50
|
+
[style.gap]="gap + 'px'"
|
|
29
51
|
>
|
|
30
|
-
<ng-
|
|
31
|
-
</div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
52
|
+
<ng-container *ngTemplateOutlet="template"></ng-container>
|
|
53
|
+
</div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
|
|
32
54
|
}
|
|
33
55
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: RowLayout, decorators: [{
|
|
34
56
|
type: Component,
|
|
@@ -37,19 +59,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImpo
|
|
|
37
59
|
standalone: true,
|
|
38
60
|
imports: [CommonModule],
|
|
39
61
|
template: `<div
|
|
40
|
-
style="
|
|
62
|
+
[style.display]="'flex'"
|
|
63
|
+
[style.flexDirection]="'row'"
|
|
64
|
+
[style.gap]="gap + 'px'"
|
|
41
65
|
>
|
|
42
|
-
<ng-
|
|
66
|
+
<ng-container *ngTemplateOutlet="template"></ng-container>
|
|
43
67
|
</div>`,
|
|
44
68
|
}]
|
|
45
|
-
}]
|
|
69
|
+
}], propDecorators: { config: [{
|
|
70
|
+
type: Input
|
|
71
|
+
}], template: [{
|
|
72
|
+
type: Input
|
|
73
|
+
}] } });
|
|
46
74
|
export class GridLayout {
|
|
75
|
+
config;
|
|
76
|
+
template;
|
|
77
|
+
get columns() {
|
|
78
|
+
return this.config?.columns ?? 2;
|
|
79
|
+
}
|
|
80
|
+
get gap() {
|
|
81
|
+
return this.config?.gap ?? 12;
|
|
82
|
+
}
|
|
47
83
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: GridLayout, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
48
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.20", type: GridLayout, isStandalone: true, selector: "dfk-grid-layout", ngImport: i0, template: `<div
|
|
49
|
-
style="
|
|
84
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.20", type: GridLayout, isStandalone: true, selector: "dfk-grid-layout", inputs: { config: "config", template: "template" }, ngImport: i0, template: `<div
|
|
85
|
+
[style.display]="'grid'"
|
|
86
|
+
[style.gridTemplateColumns]="'repeat(' + columns + ', 1fr)'"
|
|
87
|
+
[style.gap]="gap + 'px'"
|
|
50
88
|
>
|
|
51
|
-
<ng-
|
|
52
|
-
</div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
89
|
+
<ng-container *ngTemplateOutlet="template"></ng-container>
|
|
90
|
+
</div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
|
|
53
91
|
}
|
|
54
92
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: GridLayout, decorators: [{
|
|
55
93
|
type: Component,
|
|
@@ -58,10 +96,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImpo
|
|
|
58
96
|
standalone: true,
|
|
59
97
|
imports: [CommonModule],
|
|
60
98
|
template: `<div
|
|
61
|
-
style="
|
|
99
|
+
[style.display]="'grid'"
|
|
100
|
+
[style.gridTemplateColumns]="'repeat(' + columns + ', 1fr)'"
|
|
101
|
+
[style.gap]="gap + 'px'"
|
|
62
102
|
>
|
|
63
|
-
<ng-
|
|
103
|
+
<ng-container *ngTemplateOutlet="template"></ng-container>
|
|
64
104
|
</div>`,
|
|
65
105
|
}]
|
|
66
|
-
}]
|
|
67
|
-
|
|
106
|
+
}], propDecorators: { config: [{
|
|
107
|
+
type: Input
|
|
108
|
+
}], template: [{
|
|
109
|
+
type: Input
|
|
110
|
+
}] } });
|
|
111
|
+
layoutRegistry.register('column', ColumnLayout);
|
|
112
|
+
layoutRegistry.register('row', RowLayout);
|
|
113
|
+
layoutRegistry.register('grid', GridLayout);
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdExheW91dHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGF5b3V0L2RlZmF1bHRMYXlvdXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7OztBQWNsRCxNQUFNLE9BQU8sWUFBWTtJQUNkLE1BQU0sQ0FBb0I7SUFDMUIsUUFBUSxDQUF3QjtJQUN6QyxJQUFJLEdBQUc7UUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxDQUFDO3dHQUxVLFlBQVk7NEZBQVosWUFBWSxpSUFSYjs7Ozs7O1NBTUgsMkRBUEcsWUFBWTs7NEZBU1gsWUFBWTtrQkFaeEIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixRQUFRLEVBQUU7Ozs7OztTQU1IO2lCQUNSOzhCQUVVLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLOztBQWtCUixNQUFNLE9BQU8sU0FBUztJQUNYLE1BQU0sQ0FBb0I7SUFDMUIsUUFBUSxDQUF3QjtJQUN6QyxJQUFJLEdBQUc7UUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxDQUFDO3dHQUxVLFNBQVM7NEZBQVQsU0FBUyw4SEFSVjs7Ozs7O1NBTUgsMkRBUEcsWUFBWTs7NEZBU1gsU0FBUztrQkFackIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixRQUFRLEVBQUU7Ozs7OztTQU1IO2lCQUNSOzhCQUVVLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLOztBQWtCUixNQUFNLE9BQU8sVUFBVTtJQUNaLE1BQU0sQ0FBc0M7SUFDNUMsUUFBUSxDQUF3QjtJQUN6QyxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsSUFBSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7SUFDaEMsQ0FBQzt3R0FSVSxVQUFVOzRGQUFWLFVBQVUsK0hBUlg7Ozs7OztTQU1ILDJEQVBHLFlBQVk7OzRGQVNYLFVBQVU7a0JBWnRCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsUUFBUSxFQUFFOzs7Ozs7U0FNSDtpQkFDUjs4QkFFVSxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSzs7QUFTUixjQUFjLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUNoRCxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMxQyxjQUFjLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbGF5b3V0UmVnaXN0cnkgfSBmcm9tICcuL2xheW91dFJlZ2lzdHJ5JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGZrLWNvbHVtbi1sYXlvdXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGA8ZGl2XG4gICAgW3N0eWxlLmRpc3BsYXldPVwiJ2ZsZXgnXCJcbiAgICBbc3R5bGUuZmxleERpcmVjdGlvbl09XCInY29sdW1uJ1wiXG4gICAgW3N0eWxlLmdhcF09XCJnYXAgKyAncHgnXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5gLFxufSlcbmV4cG9ydCBjbGFzcyBDb2x1bW5MYXlvdXQge1xuICBASW5wdXQoKSBjb25maWc/OiB7IGdhcD86IG51bWJlciB9O1xuICBASW5wdXQoKSB0ZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuICBnZXQgZ2FwKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZz8uZ2FwID8/IDEyO1xuICB9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Rmay1yb3ctbGF5b3V0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlOiBgPGRpdlxuICAgIFtzdHlsZS5kaXNwbGF5XT1cIidmbGV4J1wiXG4gICAgW3N0eWxlLmZsZXhEaXJlY3Rpb25dPVwiJ3JvdydcIlxuICAgIFtzdHlsZS5nYXBdPVwiZ2FwICsgJ3B4J1wiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+YCxcbn0pXG5leHBvcnQgY2xhc3MgUm93TGF5b3V0IHtcbiAgQElucHV0KCkgY29uZmlnPzogeyBnYXA/OiBudW1iZXIgfTtcbiAgQElucHV0KCkgdGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcbiAgZ2V0IGdhcCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc/LmdhcCA/PyAxMjtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkZmstZ3JpZC1sYXlvdXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGA8ZGl2XG4gICAgW3N0eWxlLmRpc3BsYXldPVwiJ2dyaWQnXCJcbiAgICBbc3R5bGUuZ3JpZFRlbXBsYXRlQ29sdW1uc109XCIncmVwZWF0KCcgKyBjb2x1bW5zICsgJywgMWZyKSdcIlxuICAgIFtzdHlsZS5nYXBdPVwiZ2FwICsgJ3B4J1wiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+YCxcbn0pXG5leHBvcnQgY2xhc3MgR3JpZExheW91dCB7XG4gIEBJbnB1dCgpIGNvbmZpZz86IHsgY29sdW1ucz86IG51bWJlcjsgZ2FwPzogbnVtYmVyIH07XG4gIEBJbnB1dCgpIHRlbXBsYXRlITogVGVtcGxhdGVSZWY8dW5rbm93bj47XG4gIGdldCBjb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZz8uY29sdW1ucyA/PyAyO1xuICB9XG4gIGdldCBnYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnPy5nYXAgPz8gMTI7XG4gIH1cbn1cblxubGF5b3V0UmVnaXN0cnkucmVnaXN0ZXIoJ2NvbHVtbicsIENvbHVtbkxheW91dCk7XG5sYXlvdXRSZWdpc3RyeS5yZWdpc3Rlcigncm93JywgUm93TGF5b3V0KTtcbmxheW91dFJlZ2lzdHJ5LnJlZ2lzdGVyKCdncmlkJywgR3JpZExheW91dCk7XG4iXX0=
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
export * from './defaultLayouts';
|
|
2
|
-
|
|
2
|
+
export { layoutRegistry, LayoutRegistry } from './layoutRegistry';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGF5b3V0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZGVmYXVsdExheW91dHMnO1xuZXhwb3J0IHsgbGF5b3V0UmVnaXN0cnksIExheW91dFJlZ2lzdHJ5IH0gZnJvbSAnLi9sYXlvdXRSZWdpc3RyeSc7XG4iXX0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export class LayoutRegistry {
|
|
2
|
+
layouts = new Map();
|
|
3
|
+
register(type, component) {
|
|
4
|
+
if (this.layouts.has(type)) {
|
|
5
|
+
console.warn(`[dynamic-field-kit] Layout "${type}" already exists`);
|
|
6
|
+
}
|
|
7
|
+
this.layouts.set(type, component);
|
|
8
|
+
}
|
|
9
|
+
get(type) {
|
|
10
|
+
return this.layouts.get(type);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export const layoutRegistry = new LayoutRegistry();
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0UmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGF5b3V0L2xheW91dFJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBLE1BQU0sT0FBTyxjQUFjO0lBQ2pCLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBa0MsQ0FBQztJQUU1RCxRQUFRLENBQUMsSUFBWSxFQUFFLFNBQWlDO1FBQ3RELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLCtCQUErQixJQUFJLGtCQUFrQixDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsR0FBRyxDQUFDLElBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Q0FDRjtBQUVELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBMYXlvdXRSZW5kZXJlcjxDID0gdW5rbm93bj4gPSAocHJvcHM6IHtcbiAgY2hpbGRyZW46IHVua25vd25bXTtcbiAgY29uZmlnPzogQztcbn0pID0+IHVua25vd247XG5cbmV4cG9ydCB0eXBlIEFuZ3VsYXJMYXlvdXRDb21wb25lbnQgPSBUeXBlPHVua25vd24+O1xuXG5leHBvcnQgY2xhc3MgTGF5b3V0UmVnaXN0cnkge1xuICBwcml2YXRlIGxheW91dHMgPSBuZXcgTWFwPHN0cmluZywgQW5ndWxhckxheW91dENvbXBvbmVudD4oKTtcblxuICByZWdpc3Rlcih0eXBlOiBzdHJpbmcsIGNvbXBvbmVudDogQW5ndWxhckxheW91dENvbXBvbmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxheW91dHMuaGFzKHR5cGUpKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFtkeW5hbWljLWZpZWxkLWtpdF0gTGF5b3V0IFwiJHt0eXBlfVwiIGFscmVhZHkgZXhpc3RzYCk7XG4gICAgfVxuICAgIHRoaXMubGF5b3V0cy5zZXQodHlwZSwgY29tcG9uZW50KTtcbiAgfVxuXG4gIGdldCh0eXBlOiBzdHJpbmcpOiBBbmd1bGFyTGF5b3V0Q29tcG9uZW50IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5sYXlvdXRzLmdldCh0eXBlKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbGF5b3V0UmVnaXN0cnkgPSBuZXcgTGF5b3V0UmVnaXN0cnkoKTtcbiJdfQ==
|
|
@@ -10,5 +10,9 @@ export * from './types/layout';
|
|
|
10
10
|
// Module
|
|
11
11
|
export * from './lib/dynamic-field-kit.module';
|
|
12
12
|
// Optional: expose registry for advanced use cases, but not required for basic usage
|
|
13
|
-
export { fieldRegistry } from '@dynamic-field-kit/core';
|
|
14
|
-
|
|
13
|
+
export { fieldRegistry, FieldRegistry } from '@dynamic-field-kit/core';
|
|
14
|
+
export { validateField, validateFieldAsync, validateFields, validateFieldsAsync, resolveDisabled, resolveReadOnly, resolveOptions, validators, } from '@dynamic-field-kit/core';
|
|
15
|
+
// Scoped registry: provide FIELD_REGISTRY on a component/route to give that
|
|
16
|
+
// subtree an isolated set of renderers.
|
|
17
|
+
export { FIELD_REGISTRY } from './fieldRegistryToken';
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdCQUFnQjtBQUVoQixhQUFhO0FBQ2IsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw4QkFBOEIsQ0FBQztBQUU3QyxTQUFTO0FBQ1QsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxnQkFBZ0IsQ0FBQztBQUUvQixTQUFTO0FBQ1QsY0FBYyxnQ0FBZ0MsQ0FBQztBQVMvQyxxRkFBcUY7QUFDckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV2RSxPQUFPLEVBQ0wsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZixlQUFlLEVBQ2YsY0FBYyxFQUNkLFVBQVUsR0FDWCxNQUFNLHlCQUF5QixDQUFDO0FBR2pDLDRFQUE0RTtBQUM1RSx3Q0FBd0M7QUFDeEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gcHVibGljLWFwaS50c1xuXG4vLyBDb21wb25lbnRzXG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvQmFzZUlucHV0JztcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy9EeW5hbWljSW5wdXQnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzL0ZpZWxkSW5wdXQnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzL011bHRpRmllbGRJbnB1dCc7XG5cbi8vIExheW91dFxuZXhwb3J0ICogZnJvbSAnLi9sYXlvdXQnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcy9sYXlvdXQnO1xuXG4vLyBNb2R1bGVcbmV4cG9ydCAqIGZyb20gJy4vbGliL2R5bmFtaWMtZmllbGQta2l0Lm1vZHVsZSc7XG5cbi8vIFJlLWV4cG9ydCB0eXBlcyBmcm9tIGNvcmUgKG9ubHkgdHlwZSwgbm90IGV4cG9ydCAqIClcbmV4cG9ydCB0eXBlIHtcbiAgRmllbGREZXNjcmlwdGlvbixcbiAgRmllbGRSZW5kZXJlclByb3BzLFxuICBGaWVsZFR5cGVLZXksXG59IGZyb20gJ0BkeW5hbWljLWZpZWxkLWtpdC9jb3JlJztcblxuLy8gT3B0aW9uYWw6IGV4cG9zZSByZWdpc3RyeSBmb3IgYWR2YW5jZWQgdXNlIGNhc2VzLCBidXQgbm90IHJlcXVpcmVkIGZvciBiYXNpYyB1c2FnZVxuZXhwb3J0IHsgZmllbGRSZWdpc3RyeSwgRmllbGRSZWdpc3RyeSB9IGZyb20gJ0BkeW5hbWljLWZpZWxkLWtpdC9jb3JlJztcblxuZXhwb3J0IHtcbiAgdmFsaWRhdGVGaWVsZCxcbiAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICB2YWxpZGF0ZUZpZWxkcyxcbiAgdmFsaWRhdGVGaWVsZHNBc3luYyxcbiAgcmVzb2x2ZURpc2FibGVkLFxuICByZXNvbHZlUmVhZE9ubHksXG4gIHJlc29sdmVPcHRpb25zLFxuICB2YWxpZGF0b3JzLFxufSBmcm9tICdAZHluYW1pYy1maWVsZC1raXQvY29yZSc7XG5leHBvcnQgdHlwZSB7IFZhbGlkYXRpb25SZXN1bHQgfSBmcm9tICdAZHluYW1pYy1maWVsZC1raXQvY29yZSc7XG5cbi8vIFNjb3BlZCByZWdpc3RyeTogcHJvdmlkZSBGSUVMRF9SRUdJU1RSWSBvbiBhIGNvbXBvbmVudC9yb3V0ZSB0byBnaXZlIHRoYXRcbi8vIHN1YnRyZWUgYW4gaXNvbGF0ZWQgc2V0IG9mIHJlbmRlcmVycy5cbmV4cG9ydCB7IEZJRUxEX1JFR0lTVFJZIH0gZnJvbSAnLi9maWVsZFJlZ2lzdHJ5VG9rZW4nO1xuIl19
|