@momentumcms/admin 0.1.9 → 0.2.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/fesm2022/momentumcms-admin-array-field.component-CT5NlIEv.mjs +316 -0
- package/fesm2022/momentumcms-admin-array-field.component-CT5NlIEv.mjs.map +1 -0
- package/fesm2022/momentumcms-admin-blocks-field.component-Cz7HmuBK.mjs +362 -0
- package/fesm2022/momentumcms-admin-blocks-field.component-Cz7HmuBK.mjs.map +1 -0
- package/fesm2022/momentumcms-admin-collapsible-field.component-CtwrGQvg.mjs +120 -0
- package/fesm2022/momentumcms-admin-collapsible-field.component-CtwrGQvg.mjs.map +1 -0
- package/fesm2022/{momentumcms-admin-global-edit.page-DFDV-uh3.mjs → momentumcms-admin-global-edit.page-BBUtWCSl.mjs} +2 -2
- package/fesm2022/{momentumcms-admin-global-edit.page-DFDV-uh3.mjs.map → momentumcms-admin-global-edit.page-BBUtWCSl.mjs.map} +1 -1
- package/fesm2022/momentumcms-admin-group-field.component-BZeG8Oqy.mjs +184 -0
- package/fesm2022/momentumcms-admin-group-field.component-BZeG8Oqy.mjs.map +1 -0
- package/fesm2022/{momentumcms-admin-momentumcms-admin-z82jXEsP.mjs → momentumcms-admin-momentumcms-admin-o0FbJXZN.mjs} +9688 -12241
- package/fesm2022/momentumcms-admin-momentumcms-admin-o0FbJXZN.mjs.map +1 -0
- package/fesm2022/momentumcms-admin-relationship-field.component-BuxtRs2_.mjs +473 -0
- package/fesm2022/momentumcms-admin-relationship-field.component-BuxtRs2_.mjs.map +1 -0
- package/fesm2022/momentumcms-admin-rich-text-field.component-DKQ6pwp7.mjs +813 -0
- package/fesm2022/momentumcms-admin-rich-text-field.component-DKQ6pwp7.mjs.map +1 -0
- package/fesm2022/momentumcms-admin-row-field.component-ks3FXd4B.mjs +98 -0
- package/fesm2022/momentumcms-admin-row-field.component-ks3FXd4B.mjs.map +1 -0
- package/fesm2022/momentumcms-admin-tabs-field.component-mZ4dpZoD.mjs +189 -0
- package/fesm2022/momentumcms-admin-tabs-field.component-mZ4dpZoD.mjs.map +1 -0
- package/fesm2022/momentumcms-admin.mjs +1 -1
- package/package.json +1 -1
- package/types/momentumcms-admin.d.ts +79 -13
- package/fesm2022/momentumcms-admin-momentumcms-admin-z82jXEsP.mjs.map +0 -1
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, signal, computed, effect, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { Card, CardHeader, CardTitle, CardContent, Accordion, AccordionItem, AccordionTrigger, AccordionContent } from '@momentumcms/ui';
|
|
4
|
+
import { humanizeFieldName } from '@momentumcms/core';
|
|
5
|
+
import { b as getSubNode, F as FieldRenderer } from './momentumcms-admin-momentumcms-admin-o0FbJXZN.mjs';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Group field renderer.
|
|
9
|
+
*
|
|
10
|
+
* Renders a group of sub-fields inside a bordered card section.
|
|
11
|
+
* When `admin.collapsible` is true, renders as an accordion instead.
|
|
12
|
+
* Data container pattern: passes sub-field FieldTree nodes via getSubNode().
|
|
13
|
+
*/
|
|
14
|
+
class GroupFieldRenderer {
|
|
15
|
+
/** Field definition (must be a GroupField) */
|
|
16
|
+
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
|
|
17
|
+
/** Signal forms FieldTree node for this group */
|
|
18
|
+
formNode = input(null, ...(ngDevMode ? [{ debugName: "formNode" }] : []));
|
|
19
|
+
/** Root signal forms FieldTree (for layout fields that look up child nodes) */
|
|
20
|
+
formTree = input(null, ...(ngDevMode ? [{ debugName: "formTree" }] : []));
|
|
21
|
+
/** Form model data (for condition evaluation and relationship filterOptions) */
|
|
22
|
+
formModel = input({}, ...(ngDevMode ? [{ debugName: "formModel" }] : []));
|
|
23
|
+
/** Form mode */
|
|
24
|
+
mode = input('create', ...(ngDevMode ? [{ debugName: "mode" }] : []));
|
|
25
|
+
/** Field path (e.g., "seo") */
|
|
26
|
+
path = input.required(...(ngDevMode ? [{ debugName: "path" }] : []));
|
|
27
|
+
/** Whether the accordion is expanded (only used in collapsible mode) */
|
|
28
|
+
isExpanded = signal(false, ...(ngDevMode ? [{ debugName: "isExpanded" }] : []));
|
|
29
|
+
/** Whether this group should render as collapsible accordion */
|
|
30
|
+
collapsible = computed(() => !!this.field().admin?.collapsible, ...(ngDevMode ? [{ debugName: "collapsible" }] : []));
|
|
31
|
+
/** Unique panel ID for accordion aria linkage */
|
|
32
|
+
panelId = computed(() => `group-${this.path().replace(/\./g, '-')}`, ...(ngDevMode ? [{ debugName: "panelId" }] : []));
|
|
33
|
+
/** Computed label */
|
|
34
|
+
label = computed(() => this.field().label || humanizeFieldName(this.field().name), ...(ngDevMode ? [{ debugName: "label" }] : []));
|
|
35
|
+
/** Computed description */
|
|
36
|
+
description = computed(() => this.field().description || '', ...(ngDevMode ? [{ debugName: "description" }] : []));
|
|
37
|
+
/** Sub-fields from the group definition */
|
|
38
|
+
subFields = computed(() => {
|
|
39
|
+
const f = this.field();
|
|
40
|
+
if (f.type === 'group') {
|
|
41
|
+
return f.fields.filter((sf) => !sf.admin?.hidden);
|
|
42
|
+
}
|
|
43
|
+
return [];
|
|
44
|
+
}, ...(ngDevMode ? [{ debugName: "subFields" }] : []));
|
|
45
|
+
constructor() {
|
|
46
|
+
effect(() => {
|
|
47
|
+
if (this.collapsible() && this.field().admin?.defaultOpen) {
|
|
48
|
+
this.isExpanded.set(true);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/** Get a FieldTree sub-node for a sub-field */
|
|
53
|
+
getSubFormNode(subFieldName) {
|
|
54
|
+
return getSubNode(this.formNode(), subFieldName);
|
|
55
|
+
}
|
|
56
|
+
/** Get the full path for a sub-field (e.g., "seo.metaTitle") */
|
|
57
|
+
getSubFieldPath(subFieldName) {
|
|
58
|
+
return `${this.path()}.${subFieldName}`;
|
|
59
|
+
}
|
|
60
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: GroupFieldRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
61
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: GroupFieldRenderer, isStandalone: true, selector: "mcms-group-field-renderer", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, formNode: { classPropertyName: "formNode", publicName: "formNode", isSignal: true, isRequired: false, transformFunction: null }, formTree: { classPropertyName: "formTree", publicName: "formTree", isSignal: true, isRequired: false, transformFunction: null }, formModel: { classPropertyName: "formModel", publicName: "formModel", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, path: { classPropertyName: "path", publicName: "path", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
62
|
+
@if (collapsible()) {
|
|
63
|
+
<mcms-accordion>
|
|
64
|
+
<mcms-accordion-item>
|
|
65
|
+
<mcms-accordion-trigger [panelId]="panelId()" [(expanded)]="isExpanded">
|
|
66
|
+
{{ label() }}
|
|
67
|
+
</mcms-accordion-trigger>
|
|
68
|
+
<mcms-accordion-content [panelId]="panelId()">
|
|
69
|
+
@if (description()) {
|
|
70
|
+
<p class="text-sm text-muted-foreground mb-4">{{ description() }}</p>
|
|
71
|
+
}
|
|
72
|
+
<div class="space-y-4 py-4">
|
|
73
|
+
@for (subField of subFields(); track subField.name) {
|
|
74
|
+
<mcms-field-renderer
|
|
75
|
+
[field]="subField"
|
|
76
|
+
[formNode]="getSubFormNode(subField.name)"
|
|
77
|
+
[formTree]="formTree()"
|
|
78
|
+
[formModel]="formModel()"
|
|
79
|
+
[mode]="mode()"
|
|
80
|
+
[path]="getSubFieldPath(subField.name)"
|
|
81
|
+
/>
|
|
82
|
+
}
|
|
83
|
+
</div>
|
|
84
|
+
</mcms-accordion-content>
|
|
85
|
+
</mcms-accordion-item>
|
|
86
|
+
</mcms-accordion>
|
|
87
|
+
} @else {
|
|
88
|
+
<mcms-card>
|
|
89
|
+
<mcms-card-header>
|
|
90
|
+
<mcms-card-title>{{ label() }}</mcms-card-title>
|
|
91
|
+
@if (description()) {
|
|
92
|
+
<p class="text-sm text-muted-foreground">{{ description() }}</p>
|
|
93
|
+
}
|
|
94
|
+
</mcms-card-header>
|
|
95
|
+
<mcms-card-content>
|
|
96
|
+
<div class="space-y-4">
|
|
97
|
+
@for (subField of subFields(); track subField.name) {
|
|
98
|
+
<mcms-field-renderer
|
|
99
|
+
[field]="subField"
|
|
100
|
+
[formNode]="getSubFormNode(subField.name)"
|
|
101
|
+
[formTree]="formTree()"
|
|
102
|
+
[formModel]="formModel()"
|
|
103
|
+
[mode]="mode()"
|
|
104
|
+
[path]="getSubFieldPath(subField.name)"
|
|
105
|
+
/>
|
|
106
|
+
}
|
|
107
|
+
</div>
|
|
108
|
+
</mcms-card-content>
|
|
109
|
+
</mcms-card>
|
|
110
|
+
}
|
|
111
|
+
`, isInline: true, dependencies: [{ kind: "component", type: Card, selector: "mcms-card" }, { kind: "component", type: CardHeader, selector: "mcms-card-header" }, { kind: "component", type: CardTitle, selector: "mcms-card-title" }, { kind: "component", type: CardContent, selector: "mcms-card-content" }, { kind: "component", type: Accordion, selector: "mcms-accordion", inputs: ["multiExpandable", "disabled", "wrap", "class"] }, { kind: "component", type: AccordionItem, selector: "mcms-accordion-item", inputs: ["class"] }, { kind: "component", type: AccordionTrigger, selector: "mcms-accordion-trigger", inputs: ["panelId", "disabled", "expanded", "class"], outputs: ["expandedChange"] }, { kind: "component", type: AccordionContent, selector: "mcms-accordion-content", inputs: ["panelId", "class"] }, { kind: "component", type: FieldRenderer, selector: "mcms-field-renderer", inputs: ["field", "formNode", "formTree", "formModel", "mode", "path"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
112
|
+
}
|
|
113
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: GroupFieldRenderer, decorators: [{
|
|
114
|
+
type: Component,
|
|
115
|
+
args: [{
|
|
116
|
+
selector: 'mcms-group-field-renderer',
|
|
117
|
+
imports: [
|
|
118
|
+
Card,
|
|
119
|
+
CardHeader,
|
|
120
|
+
CardTitle,
|
|
121
|
+
CardContent,
|
|
122
|
+
Accordion,
|
|
123
|
+
AccordionItem,
|
|
124
|
+
AccordionTrigger,
|
|
125
|
+
AccordionContent,
|
|
126
|
+
FieldRenderer,
|
|
127
|
+
],
|
|
128
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
129
|
+
template: `
|
|
130
|
+
@if (collapsible()) {
|
|
131
|
+
<mcms-accordion>
|
|
132
|
+
<mcms-accordion-item>
|
|
133
|
+
<mcms-accordion-trigger [panelId]="panelId()" [(expanded)]="isExpanded">
|
|
134
|
+
{{ label() }}
|
|
135
|
+
</mcms-accordion-trigger>
|
|
136
|
+
<mcms-accordion-content [panelId]="panelId()">
|
|
137
|
+
@if (description()) {
|
|
138
|
+
<p class="text-sm text-muted-foreground mb-4">{{ description() }}</p>
|
|
139
|
+
}
|
|
140
|
+
<div class="space-y-4 py-4">
|
|
141
|
+
@for (subField of subFields(); track subField.name) {
|
|
142
|
+
<mcms-field-renderer
|
|
143
|
+
[field]="subField"
|
|
144
|
+
[formNode]="getSubFormNode(subField.name)"
|
|
145
|
+
[formTree]="formTree()"
|
|
146
|
+
[formModel]="formModel()"
|
|
147
|
+
[mode]="mode()"
|
|
148
|
+
[path]="getSubFieldPath(subField.name)"
|
|
149
|
+
/>
|
|
150
|
+
}
|
|
151
|
+
</div>
|
|
152
|
+
</mcms-accordion-content>
|
|
153
|
+
</mcms-accordion-item>
|
|
154
|
+
</mcms-accordion>
|
|
155
|
+
} @else {
|
|
156
|
+
<mcms-card>
|
|
157
|
+
<mcms-card-header>
|
|
158
|
+
<mcms-card-title>{{ label() }}</mcms-card-title>
|
|
159
|
+
@if (description()) {
|
|
160
|
+
<p class="text-sm text-muted-foreground">{{ description() }}</p>
|
|
161
|
+
}
|
|
162
|
+
</mcms-card-header>
|
|
163
|
+
<mcms-card-content>
|
|
164
|
+
<div class="space-y-4">
|
|
165
|
+
@for (subField of subFields(); track subField.name) {
|
|
166
|
+
<mcms-field-renderer
|
|
167
|
+
[field]="subField"
|
|
168
|
+
[formNode]="getSubFormNode(subField.name)"
|
|
169
|
+
[formTree]="formTree()"
|
|
170
|
+
[formModel]="formModel()"
|
|
171
|
+
[mode]="mode()"
|
|
172
|
+
[path]="getSubFieldPath(subField.name)"
|
|
173
|
+
/>
|
|
174
|
+
}
|
|
175
|
+
</div>
|
|
176
|
+
</mcms-card-content>
|
|
177
|
+
</mcms-card>
|
|
178
|
+
}
|
|
179
|
+
`,
|
|
180
|
+
}]
|
|
181
|
+
}], ctorParameters: () => [], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], formNode: [{ type: i0.Input, args: [{ isSignal: true, alias: "formNode", required: false }] }], formTree: [{ type: i0.Input, args: [{ isSignal: true, alias: "formTree", required: false }] }], formModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "formModel", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], path: [{ type: i0.Input, args: [{ isSignal: true, alias: "path", required: true }] }] } });
|
|
182
|
+
|
|
183
|
+
export { GroupFieldRenderer };
|
|
184
|
+
//# sourceMappingURL=momentumcms-admin-group-field.component-BZeG8Oqy.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"momentumcms-admin-group-field.component-BZeG8Oqy.mjs","sources":["../../../../libs/admin/src/lib/widgets/entity-form/field-renderers/group-field.component.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, effect, input, signal } from '@angular/core';\nimport {\n\tCard,\n\tCardHeader,\n\tCardTitle,\n\tCardContent,\n\tAccordion,\n\tAccordionItem,\n\tAccordionTrigger,\n\tAccordionContent,\n} from '@momentumcms/ui';\nimport { humanizeFieldName } from '@momentumcms/core';\nimport type { Field } from '@momentumcms/core';\nimport type { EntityFormMode } from '../entity-form.types';\nimport { getSubNode } from '../entity-form.types';\nimport { FieldRenderer } from './field-renderer.component';\n\n/**\n * Group field renderer.\n *\n * Renders a group of sub-fields inside a bordered card section.\n * When `admin.collapsible` is true, renders as an accordion instead.\n * Data container pattern: passes sub-field FieldTree nodes via getSubNode().\n */\n@Component({\n\tselector: 'mcms-group-field-renderer',\n\timports: [\n\t\tCard,\n\t\tCardHeader,\n\t\tCardTitle,\n\t\tCardContent,\n\t\tAccordion,\n\t\tAccordionItem,\n\t\tAccordionTrigger,\n\t\tAccordionContent,\n\t\tFieldRenderer,\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\ttemplate: `\n\t\t@if (collapsible()) {\n\t\t\t<mcms-accordion>\n\t\t\t\t<mcms-accordion-item>\n\t\t\t\t\t<mcms-accordion-trigger [panelId]=\"panelId()\" [(expanded)]=\"isExpanded\">\n\t\t\t\t\t\t{{ label() }}\n\t\t\t\t\t</mcms-accordion-trigger>\n\t\t\t\t\t<mcms-accordion-content [panelId]=\"panelId()\">\n\t\t\t\t\t\t@if (description()) {\n\t\t\t\t\t\t\t<p class=\"text-sm text-muted-foreground mb-4\">{{ description() }}</p>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<div class=\"space-y-4 py-4\">\n\t\t\t\t\t\t\t@for (subField of subFields(); track subField.name) {\n\t\t\t\t\t\t\t\t<mcms-field-renderer\n\t\t\t\t\t\t\t\t\t[field]=\"subField\"\n\t\t\t\t\t\t\t\t\t[formNode]=\"getSubFormNode(subField.name)\"\n\t\t\t\t\t\t\t\t\t[formTree]=\"formTree()\"\n\t\t\t\t\t\t\t\t\t[formModel]=\"formModel()\"\n\t\t\t\t\t\t\t\t\t[mode]=\"mode()\"\n\t\t\t\t\t\t\t\t\t[path]=\"getSubFieldPath(subField.name)\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</mcms-accordion-content>\n\t\t\t\t</mcms-accordion-item>\n\t\t\t</mcms-accordion>\n\t\t} @else {\n\t\t\t<mcms-card>\n\t\t\t\t<mcms-card-header>\n\t\t\t\t\t<mcms-card-title>{{ label() }}</mcms-card-title>\n\t\t\t\t\t@if (description()) {\n\t\t\t\t\t\t<p class=\"text-sm text-muted-foreground\">{{ description() }}</p>\n\t\t\t\t\t}\n\t\t\t\t</mcms-card-header>\n\t\t\t\t<mcms-card-content>\n\t\t\t\t\t<div class=\"space-y-4\">\n\t\t\t\t\t\t@for (subField of subFields(); track subField.name) {\n\t\t\t\t\t\t\t<mcms-field-renderer\n\t\t\t\t\t\t\t\t[field]=\"subField\"\n\t\t\t\t\t\t\t\t[formNode]=\"getSubFormNode(subField.name)\"\n\t\t\t\t\t\t\t\t[formTree]=\"formTree()\"\n\t\t\t\t\t\t\t\t[formModel]=\"formModel()\"\n\t\t\t\t\t\t\t\t[mode]=\"mode()\"\n\t\t\t\t\t\t\t\t[path]=\"getSubFieldPath(subField.name)\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t</mcms-card-content>\n\t\t\t</mcms-card>\n\t\t}\n\t`,\n})\nexport class GroupFieldRenderer {\n\t/** Field definition (must be a GroupField) */\n\treadonly field = input.required<Field>();\n\n\t/** Signal forms FieldTree node for this group */\n\treadonly formNode = input<unknown>(null);\n\n\t/** Root signal forms FieldTree (for layout fields that look up child nodes) */\n\treadonly formTree = input<unknown>(null);\n\n\t/** Form model data (for condition evaluation and relationship filterOptions) */\n\treadonly formModel = input<Record<string, unknown>>({});\n\n\t/** Form mode */\n\treadonly mode = input<EntityFormMode>('create');\n\n\t/** Field path (e.g., \"seo\") */\n\treadonly path = input.required<string>();\n\n\t/** Whether the accordion is expanded (only used in collapsible mode) */\n\treadonly isExpanded = signal(false);\n\n\t/** Whether this group should render as collapsible accordion */\n\treadonly collapsible = computed(() => !!this.field().admin?.collapsible);\n\n\t/** Unique panel ID for accordion aria linkage */\n\treadonly panelId = computed(() => `group-${this.path().replace(/\\./g, '-')}`);\n\n\t/** Computed label */\n\treadonly label = computed(() => this.field().label || humanizeFieldName(this.field().name));\n\n\t/** Computed description */\n\treadonly description = computed(() => this.field().description || '');\n\n\t/** Sub-fields from the group definition */\n\treadonly subFields = computed((): Field[] => {\n\t\tconst f = this.field();\n\t\tif (f.type === 'group') {\n\t\t\treturn f.fields.filter((sf) => !sf.admin?.hidden);\n\t\t}\n\t\treturn [];\n\t});\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tif (this.collapsible() && this.field().admin?.defaultOpen) {\n\t\t\t\tthis.isExpanded.set(true);\n\t\t\t}\n\t\t});\n\t}\n\n\t/** Get a FieldTree sub-node for a sub-field */\n\tgetSubFormNode(subFieldName: string): unknown {\n\t\treturn getSubNode(this.formNode(), subFieldName);\n\t}\n\n\t/** Get the full path for a sub-field (e.g., \"seo.metaTitle\") */\n\tgetSubFieldPath(subFieldName: string): string {\n\t\treturn `${this.path()}.${subFieldName}`;\n\t}\n}\n"],"names":[],"mappings":";;;;;;AAiBA;;;;;;AAMG;MAmEU,kBAAkB,CAAA;;AAErB,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAS;;AAG/B,IAAA,QAAQ,GAAG,KAAK,CAAU,IAAI,oDAAC;;AAG/B,IAAA,QAAQ,GAAG,KAAK,CAAU,IAAI,oDAAC;;AAG/B,IAAA,SAAS,GAAG,KAAK,CAA0B,EAAE,qDAAC;;AAG9C,IAAA,IAAI,GAAG,KAAK,CAAiB,QAAQ,gDAAC;;AAGtC,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAU;;AAG/B,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;;AAG1B,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,WAAW,uDAAC;;IAG/D,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAA,MAAA,EAAS,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA,CAAE,mDAAC;;IAGpE,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGlF,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,WAAW,IAAI,EAAE,uDAAC;;AAG5D,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAc;AAC3C,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;AACtB,QAAA,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE;AACvB,YAAA,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;QAClD;AACA,QAAA,OAAO,EAAE;AACV,IAAA,CAAC,qDAAC;AAEF,IAAA,WAAA,GAAA;QACC,MAAM,CAAC,MAAK;AACX,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE;AAC1D,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;YAC1B;AACD,QAAA,CAAC,CAAC;IACH;;AAGA,IAAA,cAAc,CAAC,YAAoB,EAAA;QAClC,OAAO,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC;IACjD;;AAGA,IAAA,eAAe,CAAC,YAAoB,EAAA;QACnC,OAAO,CAAA,EAAG,IAAI,CAAC,IAAI,EAAE,CAAA,CAAA,EAAI,YAAY,EAAE;IACxC;uGA3DY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApDpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA7DA,IAAI,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,UAAU,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACV,SAAS,4DACT,WAAW,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,SAAS,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,aAAa,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,gBAAgB,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,gBAAgB,iGAChB,aAAa,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAuDF,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAlE9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,OAAO,EAAE;wBACR,IAAI;wBACJ,UAAU;wBACV,SAAS;wBACT,WAAW;wBACX,SAAS;wBACT,aAAa;wBACb,gBAAgB;wBAChB,gBAAgB;wBAChB,aAAa;AACb,qBAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDT,CAAA,CAAA;AACD,iBAAA;;;;;"}
|