@masterteam/components 0.0.174 → 0.0.176

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/assets/common.css +1 -1
  2. package/assets/i18n/ar.json +300 -282
  3. package/assets/i18n/en.json +300 -282
  4. package/fesm2022/masterteam-components-business-fields.mjs +50 -34
  5. package/fesm2022/masterteam-components-business-fields.mjs.map +1 -1
  6. package/fesm2022/masterteam-components-color-picker-field.mjs +2 -2
  7. package/fesm2022/masterteam-components-color-picker-field.mjs.map +1 -1
  8. package/fesm2022/masterteam-components-drawer.mjs +8 -4
  9. package/fesm2022/masterteam-components-drawer.mjs.map +1 -1
  10. package/fesm2022/masterteam-components-dynamic-drawer.mjs +1 -4
  11. package/fesm2022/masterteam-components-dynamic-drawer.mjs.map +1 -1
  12. package/fesm2022/masterteam-components-field-validation.mjs +21 -1
  13. package/fesm2022/masterteam-components-field-validation.mjs.map +1 -1
  14. package/fesm2022/masterteam-components-formula.mjs +20 -3
  15. package/fesm2022/masterteam-components-formula.mjs.map +1 -1
  16. package/fesm2022/masterteam-components-location-field.mjs +1 -1
  17. package/fesm2022/masterteam-components-location-field.mjs.map +1 -1
  18. package/fesm2022/masterteam-components-property-filter-builder.mjs +1 -1
  19. package/fesm2022/masterteam-components-property-filter-builder.mjs.map +1 -1
  20. package/fesm2022/masterteam-components-table.mjs +112 -24
  21. package/fesm2022/masterteam-components-table.mjs.map +1 -1
  22. package/fesm2022/masterteam-components-text-field.mjs +26 -7
  23. package/fesm2022/masterteam-components-text-field.mjs.map +1 -1
  24. package/fesm2022/masterteam-components-textarea-field.mjs +27 -8
  25. package/fesm2022/masterteam-components-textarea-field.mjs.map +1 -1
  26. package/fesm2022/masterteam-components-treeselect-field.mjs +265 -0
  27. package/fesm2022/masterteam-components-treeselect-field.mjs.map +1 -0
  28. package/fesm2022/masterteam-components-upload-field.mjs +16 -7
  29. package/fesm2022/masterteam-components-upload-field.mjs.map +1 -1
  30. package/fesm2022/masterteam-components.mjs +2 -2
  31. package/fesm2022/masterteam-components.mjs.map +1 -1
  32. package/package.json +5 -1
  33. package/types/masterteam-components-business-fields.d.ts +8 -5
  34. package/types/masterteam-components-drawer.d.ts +2 -0
  35. package/types/masterteam-components-dynamic-drawer.d.ts +0 -1
  36. package/types/masterteam-components-field-validation.d.ts +4 -2
  37. package/types/masterteam-components-formula.d.ts +4 -0
  38. package/types/masterteam-components-table.d.ts +13 -3
  39. package/types/masterteam-components-text-field.d.ts +3 -1
  40. package/types/masterteam-components-textarea-field.d.ts +4 -2
  41. package/types/masterteam-components-treeselect-field.d.ts +79 -0
  42. package/types/masterteam-components-upload-field.d.ts +3 -1
  43. package/types/masterteam-components.d.ts +5 -5
@@ -0,0 +1,265 @@
1
+ import * as i0 from '@angular/core';
2
+ import { viewChild, input, EventEmitter, computed, signal, inject, effect, HostBinding, Output, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import * as i1 from '@angular/forms';
4
+ import { Validators, NgControl, FormsModule } from '@angular/forms';
5
+ import { FieldValidation } from '@masterteam/components/field-validation';
6
+ import { isInvalid } from '@masterteam/components';
7
+ import { Tooltip } from '@masterteam/components/tooltip';
8
+ import { Icon } from '@masterteam/icons';
9
+ import { TreeSelect } from 'primeng/treeselect';
10
+
11
+ class TreeSelectField {
12
+ treeSelect = viewChild('treeSelect', ...(ngDevMode ? [{ debugName: "treeSelect" }] : /* istanbul ignore next */ []));
13
+ field = input(true, ...(ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []));
14
+ hint = input(...(ngDevMode ? [undefined, { debugName: "hint" }] : /* istanbul ignore next */ []));
15
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
16
+ placeholder = input('', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
17
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
18
+ readonly = input(false, ...(ngDevMode ? [{ debugName: "readonly" }] : /* istanbul ignore next */ []));
19
+ required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []));
20
+ pInputs = input(...(ngDevMode ? [undefined, { debugName: "pInputs" }] : /* istanbul ignore next */ []));
21
+ options = input(undefined, ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
22
+ selectionMode = input('single', ...(ngDevMode ? [{ debugName: "selectionMode" }] : /* istanbul ignore next */ []));
23
+ display = input('comma', ...(ngDevMode ? [{ debugName: "display" }] : /* istanbul ignore next */ []));
24
+ scrollHeight = input('20rem', ...(ngDevMode ? [{ debugName: "scrollHeight" }] : /* istanbul ignore next */ []));
25
+ panelStyleClass = input(undefined, ...(ngDevMode ? [{ debugName: "panelStyleClass" }] : /* istanbul ignore next */ []));
26
+ containerStyleClass = input(undefined, ...(ngDevMode ? [{ debugName: "containerStyleClass" }] : /* istanbul ignore next */ []));
27
+ overlayOptions = input(undefined, ...(ngDevMode ? [{ debugName: "overlayOptions" }] : /* istanbul ignore next */ []));
28
+ filter = input(false, ...(ngDevMode ? [{ debugName: "filter" }] : /* istanbul ignore next */ []));
29
+ filterBy = input('label', ...(ngDevMode ? [{ debugName: "filterBy" }] : /* istanbul ignore next */ []));
30
+ filterMode = input('lenient', ...(ngDevMode ? [{ debugName: "filterMode" }] : /* istanbul ignore next */ []));
31
+ filterPlaceholder = input(undefined, ...(ngDevMode ? [{ debugName: "filterPlaceholder" }] : /* istanbul ignore next */ []));
32
+ filterLocale = input(undefined, ...(ngDevMode ? [{ debugName: "filterLocale" }] : /* istanbul ignore next */ []));
33
+ filterInputAutoFocus = input(false, ...(ngDevMode ? [{ debugName: "filterInputAutoFocus" }] : /* istanbul ignore next */ []));
34
+ showClear = input(false, ...(ngDevMode ? [{ debugName: "showClear" }] : /* istanbul ignore next */ []));
35
+ resetFilterOnHide = input(true, ...(ngDevMode ? [{ debugName: "resetFilterOnHide" }] : /* istanbul ignore next */ []));
36
+ propagateSelectionDown = input(true, ...(ngDevMode ? [{ debugName: "propagateSelectionDown" }] : /* istanbul ignore next */ []));
37
+ propagateSelectionUp = input(true, ...(ngDevMode ? [{ debugName: "propagateSelectionUp" }] : /* istanbul ignore next */ []));
38
+ virtualScroll = input(undefined, ...(ngDevMode ? [{ debugName: "virtualScroll" }] : /* istanbul ignore next */ []));
39
+ virtualScrollItemSize = input(undefined, ...(ngDevMode ? [{ debugName: "virtualScrollItemSize" }] : /* istanbul ignore next */ []));
40
+ loading = input(undefined, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
41
+ loadingMode = input('mask', ...(ngDevMode ? [{ debugName: "loadingMode" }] : /* istanbul ignore next */ []));
42
+ size = input(undefined, ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
43
+ variant = input(undefined, ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
44
+ fluid = input(true, ...(ngDevMode ? [{ debugName: "fluid" }] : /* istanbul ignore next */ []));
45
+ appendTo = input('body', ...(ngDevMode ? [{ debugName: "appendTo" }] : /* istanbul ignore next */ []));
46
+ selectedLabelPath = input('data.pathLabel', ...(ngDevMode ? [{ debugName: "selectedLabelPath" }] : /* istanbul ignore next */ []));
47
+ onChange = new EventEmitter();
48
+ get hostClass() {
49
+ return ['grid gap-1', this.class()].filter(Boolean).join(' ');
50
+ }
51
+ inputId = computed(() => {
52
+ const name = this.ngControl?.name;
53
+ return name ? name.toString() : this.label() || undefined;
54
+ }, ...(ngDevMode ? [{ debugName: "inputId" }] : /* istanbul ignore next */ []));
55
+ resolvedValue = computed(() => this.resolveValue(this.value()), ...(ngDevMode ? [{ debugName: "resolvedValue" }] : /* istanbul ignore next */ []));
56
+ requiredValidator = Validators.required;
57
+ value = signal(null, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
58
+ disabled = signal(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
59
+ isInvalid = isInvalid;
60
+ onTouched = () => { };
61
+ onModelChange = () => { };
62
+ ngControl;
63
+ constructor() {
64
+ this.ngControl = inject(NgControl, { self: true, optional: true });
65
+ if (this.ngControl) {
66
+ this.ngControl.valueAccessor = this;
67
+ }
68
+ effect(() => {
69
+ const control = this.ngControl?.control;
70
+ if (control && this.required()) {
71
+ control.addValidators(Validators.required);
72
+ control.updateValueAndValidity();
73
+ }
74
+ });
75
+ effect(() => {
76
+ const treeSelect = this.treeSelect();
77
+ const pInputs = this.pInputs();
78
+ if (treeSelect && pInputs) {
79
+ Object.assign(treeSelect, pInputs);
80
+ }
81
+ });
82
+ }
83
+ openTreeSelect() {
84
+ if (this.disabled() || this.readonly()) {
85
+ return;
86
+ }
87
+ this.treeSelect()?.show();
88
+ }
89
+ onValueChange(value) {
90
+ this.value.set(value);
91
+ this.onModelChange(value);
92
+ this.onChange.emit(value);
93
+ }
94
+ getSelectionDisplayLabel() {
95
+ return this.readSelectionLabel(this.resolvedValue());
96
+ }
97
+ getContainerStyleClass() {
98
+ const classes = [
99
+ this.containerStyleClass(),
100
+ this.isInvalid(this.ngControl?.control ?? null) ? 'p-invalid' : '',
101
+ ].filter((styleClass) => !!styleClass);
102
+ return classes.length > 0 ? classes.join(' ') : undefined;
103
+ }
104
+ writeValue(value) {
105
+ this.value.set(value ?? null);
106
+ }
107
+ registerOnChange(fn) {
108
+ this.onModelChange = fn;
109
+ }
110
+ registerOnTouched(fn) {
111
+ this.onTouched = fn;
112
+ }
113
+ setDisabledState(disabled) {
114
+ this.disabled.set(disabled);
115
+ }
116
+ resolveValue(value) {
117
+ if (value === null || value === undefined || value === '') {
118
+ return null;
119
+ }
120
+ if (Array.isArray(value)) {
121
+ return value.map((item) => this.resolveSingleValue(item) ?? item);
122
+ }
123
+ if (this.isSelectionMap(value)) {
124
+ return value;
125
+ }
126
+ return this.resolveSingleValue(value) ?? value;
127
+ }
128
+ resolveSingleValue(value) {
129
+ const key = this.getTreeNodeKey(value);
130
+ if (!key) {
131
+ return null;
132
+ }
133
+ return this.findTreeNode(this.options(), key);
134
+ }
135
+ readSelectionLabel(value) {
136
+ if (value === null || value === undefined || value === '') {
137
+ return null;
138
+ }
139
+ if (Array.isArray(value)) {
140
+ return this.joinLabels(value.map((item) => this.readSelectionLabel(item)));
141
+ }
142
+ if (this.isSelectionMap(value)) {
143
+ const labels = Object.entries(value)
144
+ .filter(([, entry]) => this.isSelectionEntrySelected(entry))
145
+ .map(([key]) => this.findTreeNode(this.options(), key))
146
+ .map((node) => (node ? this.readNodeLabel(node) : null));
147
+ return this.joinLabels(labels);
148
+ }
149
+ if (this.isTreeNodeValue(value)) {
150
+ return this.readNodeLabel(value);
151
+ }
152
+ const node = this.resolveSingleValue(value);
153
+ return node ? this.readNodeLabel(node) : String(value);
154
+ }
155
+ joinLabels(labels) {
156
+ const visibleLabels = labels.filter((label) => !!label && label.trim().length > 0);
157
+ return visibleLabels.length > 0 ? visibleLabels.join(', ') : null;
158
+ }
159
+ readNodeLabel(node) {
160
+ const selectedLabelPath = this.selectedLabelPath();
161
+ const configuredLabel = selectedLabelPath && this.resolveNestedValue(node, selectedLabelPath);
162
+ if (typeof configuredLabel === 'string' &&
163
+ configuredLabel.trim().length > 0) {
164
+ return configuredLabel.trim();
165
+ }
166
+ if (typeof node.label === 'string' && node.label.trim().length > 0) {
167
+ return node.label.trim();
168
+ }
169
+ return typeof node.key === 'string' && node.key.trim().length > 0
170
+ ? node.key.trim()
171
+ : null;
172
+ }
173
+ findTreeNode(nodes, key) {
174
+ for (const node of nodes ?? []) {
175
+ if (this.getTreeNodeKey(node) === key) {
176
+ return node;
177
+ }
178
+ const match = this.findTreeNode(node.children, key);
179
+ if (match) {
180
+ return match;
181
+ }
182
+ }
183
+ return null;
184
+ }
185
+ getTreeNodeKey(value) {
186
+ if (typeof value === 'string' && value.trim().length > 0) {
187
+ return value.trim();
188
+ }
189
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
190
+ return null;
191
+ }
192
+ const record = value;
193
+ const key = record['key'];
194
+ if (typeof key === 'string' && key.trim().length > 0) {
195
+ return key.trim();
196
+ }
197
+ const data = record['data'];
198
+ if (data && typeof data === 'object' && !Array.isArray(data)) {
199
+ const pathKey = data['pathKey'];
200
+ if (typeof pathKey === 'string' && pathKey.trim().length > 0) {
201
+ return pathKey.trim();
202
+ }
203
+ }
204
+ return null;
205
+ }
206
+ isTreeNodeValue(value) {
207
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
208
+ return false;
209
+ }
210
+ const record = value;
211
+ return ('label' in record ||
212
+ 'data' in record ||
213
+ 'children' in record ||
214
+ 'key' in record);
215
+ }
216
+ isSelectionMap(value) {
217
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
218
+ return false;
219
+ }
220
+ if (this.isTreeNodeValue(value)) {
221
+ return false;
222
+ }
223
+ return Object.values(value).some((entry) => this.isSelectionEntrySelected(entry));
224
+ }
225
+ isSelectionEntrySelected(entry) {
226
+ if (entry === true) {
227
+ return true;
228
+ }
229
+ if (!entry || typeof entry !== 'object' || Array.isArray(entry)) {
230
+ return false;
231
+ }
232
+ return entry['checked'] === true;
233
+ }
234
+ resolveNestedValue(value, path) {
235
+ if (!path.includes('.')) {
236
+ return value && typeof value === 'object'
237
+ ? value[path]
238
+ : undefined;
239
+ }
240
+ return path.split('.').reduce((current, key) => {
241
+ if (!current || typeof current !== 'object') {
242
+ return undefined;
243
+ }
244
+ return current[key];
245
+ }, value);
246
+ }
247
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: TreeSelectField, deps: [], target: i0.ɵɵFactoryTarget.Component });
248
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: TreeSelectField, isStandalone: true, selector: "mt-treeselect-field", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, pInputs: { classPropertyName: "pInputs", publicName: "pInputs", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, display: { classPropertyName: "display", publicName: "display", isSignal: true, isRequired: false, transformFunction: null }, scrollHeight: { classPropertyName: "scrollHeight", publicName: "scrollHeight", isSignal: true, isRequired: false, transformFunction: null }, panelStyleClass: { classPropertyName: "panelStyleClass", publicName: "panelStyleClass", isSignal: true, isRequired: false, transformFunction: null }, containerStyleClass: { classPropertyName: "containerStyleClass", publicName: "containerStyleClass", isSignal: true, isRequired: false, transformFunction: null }, overlayOptions: { classPropertyName: "overlayOptions", publicName: "overlayOptions", isSignal: true, isRequired: false, transformFunction: null }, filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: false, transformFunction: null }, filterBy: { classPropertyName: "filterBy", publicName: "filterBy", isSignal: true, isRequired: false, transformFunction: null }, filterMode: { classPropertyName: "filterMode", publicName: "filterMode", isSignal: true, isRequired: false, transformFunction: null }, filterPlaceholder: { classPropertyName: "filterPlaceholder", publicName: "filterPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, filterLocale: { classPropertyName: "filterLocale", publicName: "filterLocale", isSignal: true, isRequired: false, transformFunction: null }, filterInputAutoFocus: { classPropertyName: "filterInputAutoFocus", publicName: "filterInputAutoFocus", isSignal: true, isRequired: false, transformFunction: null }, showClear: { classPropertyName: "showClear", publicName: "showClear", isSignal: true, isRequired: false, transformFunction: null }, resetFilterOnHide: { classPropertyName: "resetFilterOnHide", publicName: "resetFilterOnHide", isSignal: true, isRequired: false, transformFunction: null }, propagateSelectionDown: { classPropertyName: "propagateSelectionDown", publicName: "propagateSelectionDown", isSignal: true, isRequired: false, transformFunction: null }, propagateSelectionUp: { classPropertyName: "propagateSelectionUp", publicName: "propagateSelectionUp", isSignal: true, isRequired: false, transformFunction: null }, virtualScroll: { classPropertyName: "virtualScroll", publicName: "virtualScroll", isSignal: true, isRequired: false, transformFunction: null }, virtualScrollItemSize: { classPropertyName: "virtualScrollItemSize", publicName: "virtualScrollItemSize", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, loadingMode: { classPropertyName: "loadingMode", publicName: "loadingMode", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, fluid: { classPropertyName: "fluid", publicName: "fluid", isSignal: true, isRequired: false, transformFunction: null }, appendTo: { classPropertyName: "appendTo", publicName: "appendTo", isSignal: true, isRequired: false, transformFunction: null }, selectedLabelPath: { classPropertyName: "selectedLabelPath", publicName: "selectedLabelPath", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onChange: "onChange" }, host: { properties: { "class": "this.hostClass" } }, viewQueries: [{ propertyName: "treeSelect", first: true, predicate: ["treeSelect"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (label() || hint()) {\r\n <div class=\"flex items-center gap-1\">\r\n @if (label()) {\r\n <label\r\n (click)=\"openTreeSelect()\"\r\n [class.required]=\"ngControl?.control?.hasValidator(requiredValidator)\"\r\n [for]=\"inputId()\"\r\n >{{ label() }}</label\r\n >\r\n }\r\n @if (hint()) {\r\n <span\r\n class=\"inline-flex text-surface-400\"\r\n [mtTooltip]=\"hint()\"\r\n tooltipPosition=\"top\"\r\n >\r\n <mt-icon icon=\"general.help-circle\" />\r\n </span>\r\n }\r\n </div>\r\n}\r\n\r\n<p-treeselect\r\n #treeSelect\r\n [ngModel]=\"resolvedValue()\"\r\n (ngModelChange)=\"onValueChange($event)\"\r\n (onBlur)=\"onTouched()\"\r\n [disabled]=\"disabled() || readonly()\"\r\n [inputId]=\"inputId()\"\r\n [ariaLabel]=\"label() || placeholder() || undefined\"\r\n [options]=\"options()\"\r\n [placeholder]=\"placeholder() || label() || ''\"\r\n [selectionMode]=\"selectionMode()\"\r\n [display]=\"display()\"\r\n [scrollHeight]=\"scrollHeight()\"\r\n [panelStyleClass]=\"panelStyleClass()\"\r\n [containerStyleClass]=\"getContainerStyleClass()\"\r\n [overlayOptions]=\"overlayOptions()\"\r\n [filter]=\"filter()\"\r\n [filterBy]=\"filterBy()\"\r\n [filterMode]=\"filterMode()\"\r\n [filterPlaceholder]=\"filterPlaceholder()\"\r\n [filterLocale]=\"filterLocale()\"\r\n [filterInputAutoFocus]=\"filterInputAutoFocus()\"\r\n [showClear]=\"showClear()\"\r\n [resetFilterOnHide]=\"resetFilterOnHide()\"\r\n [propagateSelectionDown]=\"propagateSelectionDown()\"\r\n [propagateSelectionUp]=\"propagateSelectionUp()\"\r\n [virtualScroll]=\"virtualScroll()\"\r\n [virtualScrollItemSize]=\"virtualScrollItemSize()\"\r\n [loading]=\"loading()\"\r\n [loadingMode]=\"loadingMode()\"\r\n [size]=\"size()\"\r\n [variant]=\"variant()\"\r\n [fluid]=\"fluid()\"\r\n [appendTo]=\"appendTo()\"\r\n>\r\n <ng-template #value>\r\n @if (getSelectionDisplayLabel(); as selectedLabel) {\r\n <span class=\"block truncate\">{{ selectedLabel }}</span>\r\n } @else {\r\n <span class=\"text-color-secondary\">{{\r\n placeholder() || label() || \"\"\r\n }}</span>\r\n }\r\n </ng-template>\r\n</p-treeselect>\r\n\r\n@if (ngControl && field()) {\r\n <mt-field-validation [control]=\"ngControl?.control\"></mt-field-validation>\r\n}\r\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: TreeSelect, selector: "p-treeSelect, p-treeselect, p-tree-select", inputs: ["inputId", "scrollHeight", "metaKeySelection", "display", "selectionMode", "tabindex", "ariaLabel", "ariaLabelledBy", "placeholder", "panelClass", "panelStyle", "panelStyleClass", "containerStyle", "containerStyleClass", "labelStyle", "labelStyleClass", "overlayOptions", "emptyMessage", "filter", "filterBy", "filterMode", "filterPlaceholder", "filterLocale", "filterInputAutoFocus", "propagateSelectionDown", "propagateSelectionUp", "showClear", "resetFilterOnHide", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "autofocus", "options", "loading", "loadingMode", "size", "variant", "fluid", "appendTo", "motionOptions"], outputs: ["onNodeExpand", "onNodeCollapse", "onShow", "onHide", "onClear", "onFilter", "onFocus", "onBlur", "onNodeUnselect", "onNodeSelect"] }, { kind: "component", type: FieldValidation, selector: "mt-field-validation", inputs: ["control", "touched"] }, { kind: "directive", type: Tooltip, selector: "[mtTooltip]" }, { kind: "component", type: Icon, selector: "mt-icon", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
249
+ }
250
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: TreeSelectField, decorators: [{
251
+ type: Component,
252
+ args: [{ selector: 'mt-treeselect-field', standalone: true, imports: [FormsModule, TreeSelect, FieldValidation, Tooltip, Icon], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (label() || hint()) {\r\n <div class=\"flex items-center gap-1\">\r\n @if (label()) {\r\n <label\r\n (click)=\"openTreeSelect()\"\r\n [class.required]=\"ngControl?.control?.hasValidator(requiredValidator)\"\r\n [for]=\"inputId()\"\r\n >{{ label() }}</label\r\n >\r\n }\r\n @if (hint()) {\r\n <span\r\n class=\"inline-flex text-surface-400\"\r\n [mtTooltip]=\"hint()\"\r\n tooltipPosition=\"top\"\r\n >\r\n <mt-icon icon=\"general.help-circle\" />\r\n </span>\r\n }\r\n </div>\r\n}\r\n\r\n<p-treeselect\r\n #treeSelect\r\n [ngModel]=\"resolvedValue()\"\r\n (ngModelChange)=\"onValueChange($event)\"\r\n (onBlur)=\"onTouched()\"\r\n [disabled]=\"disabled() || readonly()\"\r\n [inputId]=\"inputId()\"\r\n [ariaLabel]=\"label() || placeholder() || undefined\"\r\n [options]=\"options()\"\r\n [placeholder]=\"placeholder() || label() || ''\"\r\n [selectionMode]=\"selectionMode()\"\r\n [display]=\"display()\"\r\n [scrollHeight]=\"scrollHeight()\"\r\n [panelStyleClass]=\"panelStyleClass()\"\r\n [containerStyleClass]=\"getContainerStyleClass()\"\r\n [overlayOptions]=\"overlayOptions()\"\r\n [filter]=\"filter()\"\r\n [filterBy]=\"filterBy()\"\r\n [filterMode]=\"filterMode()\"\r\n [filterPlaceholder]=\"filterPlaceholder()\"\r\n [filterLocale]=\"filterLocale()\"\r\n [filterInputAutoFocus]=\"filterInputAutoFocus()\"\r\n [showClear]=\"showClear()\"\r\n [resetFilterOnHide]=\"resetFilterOnHide()\"\r\n [propagateSelectionDown]=\"propagateSelectionDown()\"\r\n [propagateSelectionUp]=\"propagateSelectionUp()\"\r\n [virtualScroll]=\"virtualScroll()\"\r\n [virtualScrollItemSize]=\"virtualScrollItemSize()\"\r\n [loading]=\"loading()\"\r\n [loadingMode]=\"loadingMode()\"\r\n [size]=\"size()\"\r\n [variant]=\"variant()\"\r\n [fluid]=\"fluid()\"\r\n [appendTo]=\"appendTo()\"\r\n>\r\n <ng-template #value>\r\n @if (getSelectionDisplayLabel(); as selectedLabel) {\r\n <span class=\"block truncate\">{{ selectedLabel }}</span>\r\n } @else {\r\n <span class=\"text-color-secondary\">{{\r\n placeholder() || label() || \"\"\r\n }}</span>\r\n }\r\n </ng-template>\r\n</p-treeselect>\r\n\r\n@if (ngControl && field()) {\r\n <mt-field-validation [control]=\"ngControl?.control\"></mt-field-validation>\r\n}\r\n" }]
253
+ }], ctorParameters: () => [], propDecorators: { treeSelect: [{ type: i0.ViewChild, args: ['treeSelect', { isSignal: true }] }], field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], pInputs: [{ type: i0.Input, args: [{ isSignal: true, alias: "pInputs", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], selectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionMode", required: false }] }], display: [{ type: i0.Input, args: [{ isSignal: true, alias: "display", required: false }] }], scrollHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollHeight", required: false }] }], panelStyleClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelStyleClass", required: false }] }], containerStyleClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "containerStyleClass", required: false }] }], overlayOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "overlayOptions", required: false }] }], filter: [{ type: i0.Input, args: [{ isSignal: true, alias: "filter", required: false }] }], filterBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterBy", required: false }] }], filterMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterMode", required: false }] }], filterPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterPlaceholder", required: false }] }], filterLocale: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterLocale", required: false }] }], filterInputAutoFocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterInputAutoFocus", required: false }] }], showClear: [{ type: i0.Input, args: [{ isSignal: true, alias: "showClear", required: false }] }], resetFilterOnHide: [{ type: i0.Input, args: [{ isSignal: true, alias: "resetFilterOnHide", required: false }] }], propagateSelectionDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "propagateSelectionDown", required: false }] }], propagateSelectionUp: [{ type: i0.Input, args: [{ isSignal: true, alias: "propagateSelectionUp", required: false }] }], virtualScroll: [{ type: i0.Input, args: [{ isSignal: true, alias: "virtualScroll", required: false }] }], virtualScrollItemSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "virtualScrollItemSize", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], loadingMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingMode", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], fluid: [{ type: i0.Input, args: [{ isSignal: true, alias: "fluid", required: false }] }], appendTo: [{ type: i0.Input, args: [{ isSignal: true, alias: "appendTo", required: false }] }], selectedLabelPath: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedLabelPath", required: false }] }], onChange: [{
254
+ type: Output
255
+ }], hostClass: [{
256
+ type: HostBinding,
257
+ args: ['class']
258
+ }] } });
259
+
260
+ /**
261
+ * Generated bundle index. Do not edit.
262
+ */
263
+
264
+ export { TreeSelectField };
265
+ //# sourceMappingURL=masterteam-components-treeselect-field.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"masterteam-components-treeselect-field.mjs","sources":["../../../../packages/masterteam/components/treeselect-field/treeselect-field.ts","../../../../packages/masterteam/components/treeselect-field/treeselect-field.html","../../../../packages/masterteam/components/treeselect-field/masterteam-components-treeselect-field.ts"],"sourcesContent":["import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n HostBinding,\r\n Output,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormsModule,\r\n NgControl,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { FieldValidation } from '@masterteam/components/field-validation';\r\nimport { isInvalid } from '@masterteam/components';\r\nimport { Tooltip } from '@masterteam/components/tooltip';\r\nimport { Icon } from '@masterteam/icons';\r\nimport type { OverlayOptions, TreeNode } from 'primeng/api';\r\nimport { TreeSelect } from 'primeng/treeselect';\r\n\r\n@Component({\r\n selector: 'mt-treeselect-field',\r\n standalone: true,\r\n imports: [FormsModule, TreeSelect, FieldValidation, Tooltip, Icon],\r\n templateUrl: './treeselect-field.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TreeSelectField implements ControlValueAccessor {\r\n readonly treeSelect = viewChild<TreeSelect>('treeSelect');\r\n\r\n readonly field = input<boolean>(true);\r\n readonly hint = input<string>();\r\n readonly label = input<string>('');\r\n readonly placeholder = input<string>('');\r\n readonly class = input<string>('');\r\n readonly readonly = input<boolean>(false);\r\n readonly required = input<boolean>(false);\r\n readonly pInputs = input<Partial<TreeSelect>>();\r\n\r\n readonly options = input<TreeNode[] | undefined>(undefined);\r\n readonly selectionMode = input<'single' | 'multiple' | 'checkbox'>('single');\r\n readonly display = input<'comma' | 'chip'>('comma');\r\n readonly scrollHeight = input<string>('20rem');\r\n readonly panelStyleClass = input<string | undefined>(undefined);\r\n readonly containerStyleClass = input<string | undefined>(undefined);\r\n readonly overlayOptions = input<OverlayOptions | undefined>(undefined);\r\n readonly filter = input<boolean>(false);\r\n readonly filterBy = input<string>('label');\r\n readonly filterMode = input<string>('lenient');\r\n readonly filterPlaceholder = input<string | undefined>(undefined);\r\n readonly filterLocale = input<string | undefined>(undefined);\r\n readonly filterInputAutoFocus = input<boolean>(false);\r\n readonly showClear = input<boolean>(false);\r\n readonly resetFilterOnHide = input<boolean>(true);\r\n readonly propagateSelectionDown = input<boolean>(true);\r\n readonly propagateSelectionUp = input<boolean>(true);\r\n readonly virtualScroll = input<boolean | undefined>(undefined);\r\n readonly virtualScrollItemSize = input<number | undefined>(undefined);\r\n readonly loading = input<boolean | undefined>(undefined);\r\n readonly loadingMode = input<'mask' | 'icon'>('mask');\r\n readonly size = input<'small' | 'large' | undefined>(undefined);\r\n readonly variant = input<'filled' | 'outlined' | undefined>(undefined);\r\n readonly fluid = input<boolean>(true);\r\n readonly appendTo = input<unknown>('body');\r\n\r\n readonly selectedLabelPath = input<string | undefined>('data.pathLabel');\r\n\r\n @Output() readonly onChange = new EventEmitter<unknown>();\r\n\r\n @HostBinding('class')\r\n protected get hostClass(): string {\r\n return ['grid gap-1', this.class()].filter(Boolean).join(' ');\r\n }\r\n\r\n protected readonly inputId = computed(() => {\r\n const name = this.ngControl?.name;\r\n return name ? name.toString() : this.label() || undefined;\r\n });\r\n\r\n protected readonly resolvedValue = computed(() =>\r\n this.resolveValue(this.value()),\r\n );\r\n\r\n protected readonly requiredValidator = Validators.required;\r\n protected readonly value = signal<unknown>(null);\r\n protected readonly disabled = signal<boolean>(false);\r\n protected readonly isInvalid = isInvalid;\r\n\r\n protected onTouched: () => void = () => {};\r\n private onModelChange: (value: unknown) => void = () => {};\r\n\r\n public readonly ngControl: NgControl | null;\r\n\r\n constructor() {\r\n this.ngControl = inject(NgControl, { self: true, optional: true });\r\n if (this.ngControl) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n\r\n effect(() => {\r\n const control = this.ngControl?.control;\r\n if (control && this.required()) {\r\n control.addValidators(Validators.required);\r\n control.updateValueAndValidity();\r\n }\r\n });\r\n\r\n effect(() => {\r\n const treeSelect = this.treeSelect();\r\n const pInputs = this.pInputs();\r\n if (treeSelect && pInputs) {\r\n Object.assign(treeSelect, pInputs);\r\n }\r\n });\r\n }\r\n\r\n protected openTreeSelect(): void {\r\n if (this.disabled() || this.readonly()) {\r\n return;\r\n }\r\n\r\n this.treeSelect()?.show();\r\n }\r\n\r\n protected onValueChange(value: unknown): void {\r\n this.value.set(value);\r\n this.onModelChange(value);\r\n this.onChange.emit(value);\r\n }\r\n\r\n protected getSelectionDisplayLabel(): string | null {\r\n return this.readSelectionLabel(this.resolvedValue());\r\n }\r\n\r\n protected getContainerStyleClass(): string | undefined {\r\n const classes = [\r\n this.containerStyleClass(),\r\n this.isInvalid(this.ngControl?.control ?? null) ? 'p-invalid' : '',\r\n ].filter((styleClass): styleClass is string => !!styleClass);\r\n\r\n return classes.length > 0 ? classes.join(' ') : undefined;\r\n }\r\n\r\n writeValue(value: unknown): void {\r\n this.value.set(value ?? null);\r\n }\r\n\r\n registerOnChange(fn: (value: unknown) => void): void {\r\n this.onModelChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(disabled: boolean): void {\r\n this.disabled.set(disabled);\r\n }\r\n\r\n private resolveValue(value: unknown): unknown {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return value.map((item) => this.resolveSingleValue(item) ?? item);\r\n }\r\n\r\n if (this.isSelectionMap(value)) {\r\n return value;\r\n }\r\n\r\n return this.resolveSingleValue(value) ?? value;\r\n }\r\n\r\n private resolveSingleValue(value: unknown): TreeNode | null {\r\n const key = this.getTreeNodeKey(value);\r\n if (!key) {\r\n return null;\r\n }\r\n\r\n return this.findTreeNode(this.options(), key);\r\n }\r\n\r\n private readSelectionLabel(value: unknown): string | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return this.joinLabels(\r\n value.map((item) => this.readSelectionLabel(item)),\r\n );\r\n }\r\n\r\n if (this.isSelectionMap(value)) {\r\n const labels = Object.entries(value)\r\n .filter(([, entry]) => this.isSelectionEntrySelected(entry))\r\n .map(([key]) => this.findTreeNode(this.options(), key))\r\n .map((node) => (node ? this.readNodeLabel(node) : null));\r\n\r\n return this.joinLabels(labels);\r\n }\r\n\r\n if (this.isTreeNodeValue(value)) {\r\n return this.readNodeLabel(value);\r\n }\r\n\r\n const node = this.resolveSingleValue(value);\r\n return node ? this.readNodeLabel(node) : String(value);\r\n }\r\n\r\n private joinLabels(labels: Array<string | null>): string | null {\r\n const visibleLabels = labels.filter(\r\n (label): label is string => !!label && label.trim().length > 0,\r\n );\r\n\r\n return visibleLabels.length > 0 ? visibleLabels.join(', ') : null;\r\n }\r\n\r\n private readNodeLabel(node: TreeNode): string | null {\r\n const selectedLabelPath = this.selectedLabelPath();\r\n const configuredLabel =\r\n selectedLabelPath && this.resolveNestedValue(node, selectedLabelPath);\r\n\r\n if (\r\n typeof configuredLabel === 'string' &&\r\n configuredLabel.trim().length > 0\r\n ) {\r\n return configuredLabel.trim();\r\n }\r\n\r\n if (typeof node.label === 'string' && node.label.trim().length > 0) {\r\n return node.label.trim();\r\n }\r\n\r\n return typeof node.key === 'string' && node.key.trim().length > 0\r\n ? node.key.trim()\r\n : null;\r\n }\r\n\r\n private findTreeNode(\r\n nodes: TreeNode[] | undefined,\r\n key: string,\r\n ): TreeNode | null {\r\n for (const node of nodes ?? []) {\r\n if (this.getTreeNodeKey(node) === key) {\r\n return node;\r\n }\r\n\r\n const match = this.findTreeNode(node.children, key);\r\n if (match) {\r\n return match;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private getTreeNodeKey(value: unknown): string | null {\r\n if (typeof value === 'string' && value.trim().length > 0) {\r\n return value.trim();\r\n }\r\n\r\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\r\n return null;\r\n }\r\n\r\n const record = value as Record<string, unknown>;\r\n const key = record['key'];\r\n\r\n if (typeof key === 'string' && key.trim().length > 0) {\r\n return key.trim();\r\n }\r\n\r\n const data = record['data'];\r\n if (data && typeof data === 'object' && !Array.isArray(data)) {\r\n const pathKey = (data as Record<string, unknown>)['pathKey'];\r\n if (typeof pathKey === 'string' && pathKey.trim().length > 0) {\r\n return pathKey.trim();\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private isTreeNodeValue(value: unknown): value is TreeNode {\r\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\r\n return false;\r\n }\r\n\r\n const record = value as Record<string, unknown>;\r\n return (\r\n 'label' in record ||\r\n 'data' in record ||\r\n 'children' in record ||\r\n 'key' in record\r\n );\r\n }\r\n\r\n private isSelectionMap(value: unknown): value is Record<string, unknown> {\r\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\r\n return false;\r\n }\r\n\r\n if (this.isTreeNodeValue(value)) {\r\n return false;\r\n }\r\n\r\n return Object.values(value).some((entry) =>\r\n this.isSelectionEntrySelected(entry),\r\n );\r\n }\r\n\r\n private isSelectionEntrySelected(entry: unknown): boolean {\r\n if (entry === true) {\r\n return true;\r\n }\r\n\r\n if (!entry || typeof entry !== 'object' || Array.isArray(entry)) {\r\n return false;\r\n }\r\n\r\n return (entry as Record<string, unknown>)['checked'] === true;\r\n }\r\n\r\n private resolveNestedValue(value: unknown, path: string): unknown {\r\n if (!path.includes('.')) {\r\n return value && typeof value === 'object'\r\n ? (value as Record<string, unknown>)[path]\r\n : undefined;\r\n }\r\n\r\n return path.split('.').reduce<unknown>((current, key) => {\r\n if (!current || typeof current !== 'object') {\r\n return undefined;\r\n }\r\n\r\n return (current as Record<string, unknown>)[key];\r\n }, value);\r\n }\r\n}\r\n","@if (label() || hint()) {\r\n <div class=\"flex items-center gap-1\">\r\n @if (label()) {\r\n <label\r\n (click)=\"openTreeSelect()\"\r\n [class.required]=\"ngControl?.control?.hasValidator(requiredValidator)\"\r\n [for]=\"inputId()\"\r\n >{{ label() }}</label\r\n >\r\n }\r\n @if (hint()) {\r\n <span\r\n class=\"inline-flex text-surface-400\"\r\n [mtTooltip]=\"hint()\"\r\n tooltipPosition=\"top\"\r\n >\r\n <mt-icon icon=\"general.help-circle\" />\r\n </span>\r\n }\r\n </div>\r\n}\r\n\r\n<p-treeselect\r\n #treeSelect\r\n [ngModel]=\"resolvedValue()\"\r\n (ngModelChange)=\"onValueChange($event)\"\r\n (onBlur)=\"onTouched()\"\r\n [disabled]=\"disabled() || readonly()\"\r\n [inputId]=\"inputId()\"\r\n [ariaLabel]=\"label() || placeholder() || undefined\"\r\n [options]=\"options()\"\r\n [placeholder]=\"placeholder() || label() || ''\"\r\n [selectionMode]=\"selectionMode()\"\r\n [display]=\"display()\"\r\n [scrollHeight]=\"scrollHeight()\"\r\n [panelStyleClass]=\"panelStyleClass()\"\r\n [containerStyleClass]=\"getContainerStyleClass()\"\r\n [overlayOptions]=\"overlayOptions()\"\r\n [filter]=\"filter()\"\r\n [filterBy]=\"filterBy()\"\r\n [filterMode]=\"filterMode()\"\r\n [filterPlaceholder]=\"filterPlaceholder()\"\r\n [filterLocale]=\"filterLocale()\"\r\n [filterInputAutoFocus]=\"filterInputAutoFocus()\"\r\n [showClear]=\"showClear()\"\r\n [resetFilterOnHide]=\"resetFilterOnHide()\"\r\n [propagateSelectionDown]=\"propagateSelectionDown()\"\r\n [propagateSelectionUp]=\"propagateSelectionUp()\"\r\n [virtualScroll]=\"virtualScroll()\"\r\n [virtualScrollItemSize]=\"virtualScrollItemSize()\"\r\n [loading]=\"loading()\"\r\n [loadingMode]=\"loadingMode()\"\r\n [size]=\"size()\"\r\n [variant]=\"variant()\"\r\n [fluid]=\"fluid()\"\r\n [appendTo]=\"appendTo()\"\r\n>\r\n <ng-template #value>\r\n @if (getSelectionDisplayLabel(); as selectedLabel) {\r\n <span class=\"block truncate\">{{ selectedLabel }}</span>\r\n } @else {\r\n <span class=\"text-color-secondary\">{{\r\n placeholder() || label() || \"\"\r\n }}</span>\r\n }\r\n </ng-template>\r\n</p-treeselect>\r\n\r\n@if (ngControl && field()) {\r\n <mt-field-validation [control]=\"ngControl?.control\"></mt-field-validation>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}