@acorex-platform/framework-client 0.0.57 → 0.0.58

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 (52) hide show
  1. package/fesm2022/acorex-platform-framework-client-common.mjs +31 -33
  2. package/fesm2022/acorex-platform-framework-client-common.mjs.map +1 -1
  3. package/fesm2022/acorex-platform-framework-client-core.mjs +157 -2
  4. package/fesm2022/acorex-platform-framework-client-core.mjs.map +1 -1
  5. package/fesm2022/acorex-platform-framework-client-layout-builder.mjs +55 -19
  6. package/fesm2022/acorex-platform-framework-client-layout-builder.mjs.map +1 -1
  7. package/fesm2022/{acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-BqPaHKPM.mjs → acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CyZpdazq.mjs} +6 -6
  8. package/fesm2022/{acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-BqPaHKPM.mjs.map → acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CyZpdazq.mjs.map} +1 -1
  9. package/fesm2022/acorex-platform-framework-client-layout-components.mjs +639 -212
  10. package/fesm2022/acorex-platform-framework-client-layout-components.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-framework-client-layout-designer.mjs +32 -16
  12. package/fesm2022/acorex-platform-framework-client-layout-designer.mjs.map +1 -1
  13. package/fesm2022/{acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-Cmzwhmjw.mjs → acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-jeOx-Rb8.mjs} +207 -143
  14. package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-jeOx-Rb8.mjs.map +1 -0
  15. package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-K9HAtqL6.mjs → acorex-platform-framework-client-layout-entity-attachments-page.component-B93uWhea.mjs} +2 -2
  16. package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-K9HAtqL6.mjs.map → acorex-platform-framework-client-layout-entity-attachments-page.component-B93uWhea.mjs.map} +1 -1
  17. package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-BZECKfez.mjs → acorex-platform-framework-client-layout-entity-bulk-entity.command-DITHE0f6.mjs} +2 -2
  18. package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-BZECKfez.mjs.map → acorex-platform-framework-client-layout-entity-bulk-entity.command-DITHE0f6.mjs.map} +1 -1
  19. package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-BuDpC58x.mjs → acorex-platform-framework-client-layout-entity-gallery-page.component-f5rLdctT.mjs} +2 -2
  20. package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-BuDpC58x.mjs.map → acorex-platform-framework-client-layout-entity-gallery-page.component-f5rLdctT.mjs.map} +1 -1
  21. package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +1 -1
  22. package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs +59 -3
  23. package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs.map +1 -1
  24. package/fesm2022/{acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-D5pndfBW.mjs → acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-D9WiRo-_.mjs} +225 -136
  25. package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-D9WiRo-_.mjs.map +1 -0
  26. package/fesm2022/{acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-BL621E1r.mjs → acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-DqJIiEyu.mjs} +9 -3
  27. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-DqJIiEyu.mjs.map +1 -0
  28. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-BFgrSnfT.mjs → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-kwbJdTwe.mjs} +2 -2
  29. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-BFgrSnfT.mjs.map → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-kwbJdTwe.mjs.map} +1 -1
  30. package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-Ctjz1PjP.mjs → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-Bke-Wy-4.mjs} +2 -2
  31. package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-Ctjz1PjP.mjs.map → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-Bke-Wy-4.mjs.map} +1 -1
  32. package/fesm2022/{acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-B_OM0T7i.mjs → acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-C-r7txgg.mjs} +21 -17
  33. package/fesm2022/acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-C-r7txgg.mjs.map +1 -0
  34. package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs +1 -1
  35. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs +48 -9
  36. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs.map +1 -1
  37. package/fesm2022/acorex-platform-framework-client-workflow.mjs +47 -1
  38. package/fesm2022/acorex-platform-framework-client-workflow.mjs.map +1 -1
  39. package/package.json +2 -2
  40. package/types/acorex-platform-framework-client-common.d.ts +2 -3
  41. package/types/acorex-platform-framework-client-core.d.ts +67 -2
  42. package/types/acorex-platform-framework-client-layout-builder.d.ts +4 -3
  43. package/types/acorex-platform-framework-client-layout-components.d.ts +119 -7
  44. package/types/acorex-platform-framework-client-layout-designer.d.ts +2 -0
  45. package/types/acorex-platform-framework-client-layout-entity.d.ts +16 -9
  46. package/types/acorex-platform-framework-client-layout-widget-core.d.ts +14 -1
  47. package/types/acorex-platform-framework-client-layout-widgets.d.ts +6 -0
  48. package/types/acorex-platform-framework-client-workflow.d.ts +29 -2
  49. package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-Cmzwhmjw.mjs.map +0 -1
  50. package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-D5pndfBW.mjs.map +0 -1
  51. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-BL621E1r.mjs.map +0 -1
  52. package/fesm2022/acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-B_OM0T7i.mjs.map +0 -1
@@ -37,7 +37,10 @@ class AXPCodeEditorWidgetColumnComponent extends AXPColumnWidgetComponent {
37
37
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPCodeEditorWidgetColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
38
38
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPCodeEditorWidgetColumnComponent, isStandalone: true, selector: "axp-code-editor-widget-column", inputs: { rawValue: "rawValue", rowData: "rowData" }, usesInheritance: true, ngImport: i0, template: `
39
39
  @if (displayText()) {
40
- <span [title]="fullValue()" class="text-xs font-mono text-muted">
40
+ <span
41
+ [title]="fullValue()"
42
+ class="block min-w-0 max-w-full truncate text-xs font-mono text-muted"
43
+ >
41
44
  {{ displayText() }}
42
45
  </span>
43
46
  } @else {
@@ -51,7 +54,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
51
54
  selector: 'axp-code-editor-widget-column',
52
55
  template: `
53
56
  @if (displayText()) {
54
- <span [title]="fullValue()" class="text-xs font-mono text-muted">
57
+ <span
58
+ [title]="fullValue()"
59
+ class="block min-w-0 max-w-full truncate text-xs font-mono text-muted"
60
+ >
55
61
  {{ displayText() }}
56
62
  </span>
57
63
  } @else {
@@ -65,4 +71,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
65
71
  }] });
66
72
 
67
73
  export { AXPCodeEditorWidgetColumnComponent };
68
- //# sourceMappingURL=acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-BL621E1r.mjs.map
74
+ //# sourceMappingURL=acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-DqJIiEyu.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-DqJIiEyu.mjs","sources":["../../../../../libs/framework/client/layout/widgets/src/lib/widgets/advance/code-editor/code-editor-widget-column.component.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPColumnWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\n\nimport { coerceCodeEditorText } from './code-editor-value.util';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axp-code-editor-widget-column',\n template: `\n @if (displayText()) {\n <span\n [title]=\"fullValue()\"\n class=\"block min-w-0 max-w-full truncate text-xs font-mono text-muted\"\n >\n {{ displayText() }}\n </span>\n } @else {\n <span class=\"text-muted\">---</span>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [],\n inputs: ['rawValue', 'rowData'],\n})\nexport class AXPCodeEditorWidgetColumnComponent extends AXPColumnWidgetComponent<string> {\n //#region ---- Computed Properties ----\n\n protected fullValue = computed(() => coerceCodeEditorText(this.rawValue));\n\n protected displayText = computed(() => {\n const value = this.fullValue();\n if (!value) {\n return '';\n }\n\n const trimmed = value.trim().replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n\n // If empty after trimming, return empty\n if (!trimmed) {\n return '';\n }\n\n // Get max length from options (default: 100 characters)\n const options = this.options;\n const maxLength = (options?.['maxLength'] as number) ?? 100;\n\n // If value is shorter than max length, return as-is\n if (trimmed.length <= maxLength) {\n return trimmed;\n }\n\n // Truncate and add ellipsis\n return trimmed.substring(0, maxLength) + '...';\n });\n\n //#endregion\n}\n\n//#endregion\n\n"],"names":[],"mappings":";;;;;AAAA;AAOA;AAEA;AAoBM,MAAO,kCAAmC,SAAQ,wBAAgC,CAAA;AAlBxF,IAAA,WAAA,GAAA;;;QAqBc,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC;sFAAC;AAE/D,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAClC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;YAC9B,IAAI,CAAC,KAAK,EAAE;AACR,gBAAA,OAAO,EAAE;YACb;YAEA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;;YAGxE,IAAI,CAAC,OAAO,EAAE;AACV,gBAAA,OAAO,EAAE;YACb;;AAGA,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;YAC5B,MAAM,SAAS,GAAI,OAAO,GAAG,WAAW,CAAY,IAAI,GAAG;;AAG3D,YAAA,IAAI,OAAO,CAAC,MAAM,IAAI,SAAS,EAAE;AAC7B,gBAAA,OAAO,OAAO;YAClB;;YAGA,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,KAAK;QAClD,CAAC;wFAAC;AAGL,IAAA;8GAhCY,kCAAkC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kCAAkC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhBjC;;;;;;;;;;;AAWX,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKU,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAlB9C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,+BAA+B;AACzC,oBAAA,QAAQ,EAAE;;;;;;;;;;;AAWX,EAAA,CAAA;oBACC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,MAAM,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;AAClC,iBAAA;;;"}
@@ -10,7 +10,7 @@ import * as i0 from '@angular/core';
10
10
  import { inject, signal, viewChild, effect, untracked, computed, Input, ChangeDetectionStrategy, Component } from '@angular/core';
11
11
  import { AXPWidgetsList } from '@acorex-platform/framework-shared/core';
12
12
  import { isNil, get } from 'lodash-es';
13
- import { A as AXP_REPEATER_ENTITY_BY_KEY_LOOKUP } from './acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-D5pndfBW.mjs';
13
+ import { A as AXP_REPEATER_ENTITY_BY_KEY_LOOKUP } from './acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-D9WiRo-_.mjs';
14
14
 
15
15
  //#endregion
16
16
  //#region ---- Constants ----
@@ -524,4 +524,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
524
524
  }], moreButton: [{ type: i0.ViewChild, args: ['moreButton', { isSignal: true }] }], morePopover: [{ type: i0.ViewChild, args: ['morePopover', { isSignal: true }] }] } });
525
525
 
526
526
  export { AXPRepeaterWidgetColumnComponent };
527
- //# sourceMappingURL=acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-BFgrSnfT.mjs.map
527
+ //# sourceMappingURL=acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-kwbJdTwe.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-BFgrSnfT.mjs","sources":["../../../../../libs/framework/client/layout/widgets/src/lib/widgets/layout/repeater/repeater-column-display.util.ts","../../../../../libs/framework/client/layout/widgets/src/lib/widgets/layout/repeater/repeater-widget-column.component.ts","../../../../../libs/framework/client/layout/widgets/src/lib/widgets/layout/repeater/repeater-widget-column.component.html"],"sourcesContent":["import { type AXPMultiLanguageString, type AXPWidgetNode, AXPWidgetsList } from '@acorex-platform/framework-shared/core';\nimport { isValidMultiLanguageObject, resolveMultiLanguageString } from '@acorex/core/translation';\n\nimport type { AXPRepeaterEntityByKeyLookup } from './repeater-entity-lookup.token';\nimport { get, isNil } from 'lodash-es';\n\n//#region ---- Types ----\n\nexport interface RepeaterLookupColumnHint {\n entity: string;\n valueField: string;\n textField: string;\n fkPath: string;\n displayPath?: string;\n}\n\n//#endregion\n\n//#region ---- Constants ----\n\nconst LAYOUT_WIDGET_TYPES = new Set<string>(Object.values(AXPWidgetsList.Layouts));\n\nconst LOOKUP_WIDGET_TYPE = AXPWidgetsList.Editors.LookupBox;\n\nconst NESTED_DISPLAY_FIELDS = ['title', 'name', 'displayName', 'label', 'text', 'code'] as const;\n\nconst SKIP_ITEM_ROOT_KEYS = new Set(['id', 'startDate', 'endDate', '__meta__']);\n\n//#endregion\n\n//#region ---- Raw value normalization ----\n\n/**\n * Normalizes repeater column values from grid rows (array, single object, or JSON string).\n */\nexport function normalizeRepeaterColumnItems(raw: unknown, rowData?: unknown, dataPath?: string): unknown[] {\n let value = raw;\n\n if (isNil(value) && rowData != null && dataPath) {\n value = get(rowData, dataPath);\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (trimmed.startsWith('[') || trimmed.startsWith('{')) {\n try {\n value = JSON.parse(trimmed);\n } catch {\n return trimmed ? [trimmed] : [];\n }\n } else if (trimmed) {\n return [trimmed];\n } else {\n return [];\n }\n }\n\n if (isNil(value)) {\n return [];\n }\n\n return (Array.isArray(value) ? value : [value]).filter((item) => item != null);\n}\n\nfunction resolveLookupFkValue(item: unknown, hint: RepeaterLookupColumnHint): unknown {\n if (item == null || typeof item !== 'object') {\n return undefined;\n }\n\n const direct = get(item, hint.fkPath);\n if (direct != null && direct !== '') {\n if (typeof direct === 'object') {\n return get(direct, hint.valueField) ?? get(direct, 'id');\n }\n return direct;\n }\n\n if (hint.fkPath.endsWith('Id')) {\n const base = hint.fkPath.slice(0, -2);\n const nestedId = get(item, `${base}.id`);\n if (nestedId != null && nestedId !== '') {\n return nestedId;\n }\n\n const nestedObject = get(item, base);\n if (nestedObject != null && typeof nestedObject === 'object') {\n return get(nestedObject, hint.valueField) ?? get(nestedObject, 'id');\n }\n }\n\n return undefined;\n}\n\nfunction extractNestedDisplayFallback(\n item: Record<string, unknown>,\n locale: string,\n resolveMultiLanguage: (ml: AXPMultiLanguageString) => string,\n): string {\n for (const value of Object.values(item)) {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n continue;\n }\n\n for (const field of NESTED_DISPLAY_FIELDS) {\n const text = resolveDisplayValue(get(value, field), locale, resolveMultiLanguage);\n if (text) {\n return text;\n }\n }\n }\n\n return '';\n}\n\n//#endregion\n\n//#region ---- Column mode resolution ----\n\n/**\n * Layout/container nodes wrap edit UI; leaf editors (contact, text, lookup, …) render per-item in columns.\n */\nexport function isRepeaterLayoutWidgetNode(node: AXPWidgetNode): boolean {\n return LAYOUT_WIDGET_TYPES.has(String(node.type));\n}\n\n/**\n * Collects non-layout widget nodes under a repeater row template (one per editable field).\n */\nexport function collectRepeaterRowEditorLeaves(root: AXPWidgetNode | undefined): AXPWidgetNode[] {\n if (!root) {\n return [];\n }\n\n const leaves: AXPWidgetNode[] = [];\n\n const visit = (node: AXPWidgetNode): void => {\n const children = node.children ?? [];\n\n if (!isRepeaterLayoutWidgetNode(node)) {\n leaves.push(node);\n return;\n }\n\n for (const child of children) {\n visit(child);\n }\n };\n\n visit(root);\n return leaves;\n}\n\n/**\n * Widget column when the row template is a single leaf editor (e.g. ContactBox).\n * Text column when the row is a multi-field layout (e.g. GridLayout with lookup + dates).\n */\nexport function resolveRepeaterColumnDisplayMode(rowTemplate: AXPWidgetNode | undefined): 'widget' | 'text' {\n if (!rowTemplate) {\n return 'text';\n }\n\n if (!isRepeaterLayoutWidgetNode(rowTemplate)) {\n return 'widget';\n }\n\n return collectRepeaterRowEditorLeaves(rowTemplate).length === 1 ? 'widget' : 'text';\n}\n\n/**\n * Node passed to `axp-widget-renderer` for widget-mode columns (direct leaf or single nested editor).\n */\nexport function resolveRepeaterWidgetColumnNode(rowTemplate: AXPWidgetNode | undefined): AXPWidgetNode | undefined {\n if (!rowTemplate) {\n return undefined;\n }\n\n if (!isRepeaterLayoutWidgetNode(rowTemplate)) {\n return rowTemplate;\n }\n\n const leaves = collectRepeaterRowEditorLeaves(rowTemplate);\n return leaves.length === 1 ? leaves[0] : undefined;\n}\n\n//#endregion\n\n//#region ---- Text display inference ----\n\nfunction flattenRepeaterRowNodes(root: AXPWidgetNode | undefined): AXPWidgetNode[] {\n if (!root) {\n return [];\n }\n\n const nodes: AXPWidgetNode[] = [];\n const visit = (node: AXPWidgetNode): void => {\n nodes.push(node);\n for (const child of node.children ?? []) {\n visit(child);\n }\n };\n visit(root);\n return nodes;\n}\n\nfunction isLookupWidget(node: AXPWidgetNode): boolean {\n return String(node.type) === LOOKUP_WIDGET_TYPE;\n}\n\nfunction resolveLookupExposeDisplayPath(node: AXPWidgetNode): string | undefined {\n const expose = node.options?.['expose'] as Array<{ source?: string; target?: string }> | undefined;\n const textField = String(node.options?.['textField'] ?? 'title').trim() || 'title';\n\n if (expose?.length) {\n const preferred = expose.find((entry) => entry.source === textField && entry.target?.trim());\n if (preferred?.target) {\n return preferred.target.trim();\n }\n\n const titleTarget = expose.find(\n (entry) =>\n entry.target?.trim() &&\n (entry.source === 'title' || entry.target.endsWith('.title') || entry.target === 'title'),\n );\n if (titleTarget?.target) {\n return titleTarget.target.trim();\n }\n\n const firstTarget = expose.find((entry) => entry.target?.trim());\n if (firstTarget?.target) {\n return firstTarget.target.trim();\n }\n }\n\n const binding = String(node.path ?? node.name ?? '').trim();\n if (binding.endsWith('Id')) {\n const base = binding.slice(0, -2);\n if (base) {\n return `${base}.${textField}`;\n }\n }\n\n return undefined;\n}\n\nexport function inferRepeaterDisplayPathFromTemplate(rowTemplate: AXPWidgetNode | undefined): string | undefined {\n return resolveRepeaterLookupColumnHint(rowTemplate)?.displayPath;\n}\n\n/**\n * Lookup metadata from the repeater row template (used to hydrate FK ids in list rows).\n */\nexport function resolveRepeaterLookupColumnHint(rowTemplate: AXPWidgetNode | undefined): RepeaterLookupColumnHint | undefined {\n for (const node of flattenRepeaterRowNodes(rowTemplate)) {\n if (!isLookupWidget(node)) {\n continue;\n }\n\n const entity = String(node.options?.['entity'] ?? '').trim();\n const fkPath = String(node.path ?? node.name ?? '').trim();\n if (!entity || !fkPath) {\n continue;\n }\n\n return {\n entity,\n valueField: String(node.options?.['valueField'] ?? 'id').trim() || 'id',\n textField: String(node.options?.['textField'] ?? 'title').trim() || 'title',\n fkPath,\n displayPath: resolveLookupExposeDisplayPath(node),\n };\n }\n\n return undefined;\n}\n\nexport function inferRepeaterDisplayPathFromItem(item: unknown): string | undefined {\n if (item == null || typeof item !== 'object' || Array.isArray(item)) {\n return undefined;\n }\n\n const record = item as Record<string, unknown>;\n\n for (const [key, value] of Object.entries(record)) {\n if (SKIP_ITEM_ROOT_KEYS.has(key) || key.endsWith('Id')) {\n continue;\n }\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n continue;\n }\n\n for (const field of NESTED_DISPLAY_FIELDS) {\n if (!isNil(get(value, field))) {\n return `${key}.${field}`;\n }\n }\n }\n\n for (const field of NESTED_DISPLAY_FIELDS) {\n if (!isNil(get(record, field))) {\n return field;\n }\n }\n\n return undefined;\n}\n\nexport function resolveRepeaterItemDisplayPath(\n rowTemplate: AXPWidgetNode | undefined,\n sampleItem?: unknown,\n): string | undefined {\n return inferRepeaterDisplayPathFromTemplate(rowTemplate) ?? inferRepeaterDisplayPathFromItem(sampleItem);\n}\n\nfunction resolveDisplayValue(\n value: unknown,\n locale: string,\n resolveMultiLanguage: (ml: AXPMultiLanguageString) => string,\n): string {\n if (isNil(value)) {\n return '';\n }\n\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return String(value).trim();\n }\n\n if (typeof value === 'object' && !Array.isArray(value)) {\n if (isValidMultiLanguageObject(value)) {\n return resolveMultiLanguage(value as AXPMultiLanguageString).trim();\n }\n\n const resolved = resolveMultiLanguageString(value as AXPMultiLanguageString, locale).trim();\n if (resolved && resolved !== '[object Object]') {\n return resolved;\n }\n }\n\n return '';\n}\n\nexport function extractRepeaterItemDisplayText(\n item: unknown,\n displayPath: string | undefined,\n locale: string,\n resolveMultiLanguage: (ml: AXPMultiLanguageString) => string,\n): string {\n if (item == null) {\n return '';\n }\n\n if (typeof item === 'string' || typeof item === 'number' || typeof item === 'boolean') {\n return String(item).trim();\n }\n\n if (typeof item !== 'object') {\n return '';\n }\n\n const path = displayPath ?? inferRepeaterDisplayPathFromItem(item);\n if (path) {\n const fromPath = resolveDisplayValue(get(item, path), locale, resolveMultiLanguage);\n if (fromPath) {\n return fromPath;\n }\n }\n\n return extractNestedDisplayFallback(item as Record<string, unknown>, locale, resolveMultiLanguage);\n}\n\nexport function extractRepeaterDisplayTexts(\n items: unknown[],\n rowTemplate: AXPWidgetNode | undefined,\n locale: string,\n resolveMultiLanguage: (ml: AXPMultiLanguageString) => string,\n): string[] {\n const filtered = items.filter((item) => item != null);\n if (filtered.length === 0) {\n return [];\n }\n\n const displayPath = resolveRepeaterItemDisplayPath(rowTemplate, filtered[0]);\n\n return filtered\n .map((item) => extractRepeaterItemDisplayText(item, displayPath, locale, resolveMultiLanguage))\n .filter((text) => text.length > 0);\n}\n\n/**\n * Resolves repeater column labels, hydrating lookup FK ids when list rows omit nested snapshots.\n */\nexport async function resolveRepeaterDisplayTextsWithHydration(\n items: unknown[],\n rowTemplate: AXPWidgetNode | undefined,\n entityLookup: AXPRepeaterEntityByKeyLookup | undefined,\n locale: string,\n resolveMultiLanguage: (ml: AXPMultiLanguageString) => string,\n): Promise<string[]> {\n const filtered = items.filter((item) => item != null);\n if (filtered.length === 0) {\n return [];\n }\n\n const displayPath = resolveRepeaterItemDisplayPath(rowTemplate, filtered[0]);\n const lookupHint = resolveRepeaterLookupColumnHint(rowTemplate);\n const lookupCache = new Map<string, string>();\n\n const resolveLookupTitle = async (id: unknown): Promise<string> => {\n const hint = lookupHint;\n if (!hint) {\n return '';\n }\n\n if (id != null && typeof id === 'object') {\n const inline = resolveDisplayValue(get(id, hint.textField), locale, resolveMultiLanguage);\n if (inline) {\n return inline;\n }\n }\n\n if (id == null || id === '') {\n return '';\n }\n\n if (!hint.entity.includes('.') || !entityLookup) {\n return '';\n }\n\n const cacheKey = String(id);\n const cached = lookupCache.get(cacheKey);\n if (cached != null) {\n return cached;\n }\n\n try {\n const row = await entityLookup.byKey(hint.entity, cacheKey);\n const text = resolveDisplayValue(get(row, hint.textField), locale, resolveMultiLanguage);\n lookupCache.set(cacheKey, text);\n return text;\n } catch {\n lookupCache.set(cacheKey, '');\n return '';\n }\n };\n\n const texts = await Promise.all(\n filtered.map(async (item) => {\n const inline = extractRepeaterItemDisplayText(item, displayPath, locale, resolveMultiLanguage);\n if (inline) {\n return inline;\n }\n\n if (!lookupHint) {\n return '';\n }\n\n const fkValue = resolveLookupFkValue(item, lookupHint);\n if (fkValue != null && typeof fkValue === 'object') {\n const fromEmbedded = await resolveLookupTitle(fkValue);\n if (fromEmbedded) {\n return fromEmbedded;\n }\n }\n\n return resolveLookupTitle(fkValue);\n }),\n );\n\n return texts.filter((text) => text.length > 0);\n}\n\n//#endregion\n","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXPColumnWidgetComponent, AXPWidgetCoreModule, AXPWidgetCoreService } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPMultiLanguageString, type AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport { AXPContextStore } from '@acorex-platform/framework-client/core';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnChanges,\n SimpleChanges,\n computed,\n effect,\n inject,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\n\nimport {\n extractRepeaterDisplayTexts,\n normalizeRepeaterColumnItems,\n resolveRepeaterColumnDisplayMode,\n resolveRepeaterDisplayTextsWithHydration,\n resolveRepeaterWidgetColumnNode,\n} from './repeater-column-display.util';\nimport { AXP_REPEATER_ENTITY_BY_KEY_LOOKUP } from './repeater-entity-lookup.token';\n\n@Component({\n selector: 'axp-repeater-widget-column',\n templateUrl: './repeater-widget-column.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXBadgeModule, AXButtonModule, AXPopoverModule, AXPWidgetCoreModule],\n providers: [AXPWidgetCoreService, AXPContextStore],\n inputs: ['rawValue', 'rowData'],\n})\nexport class AXPRepeaterWidgetColumnComponent extends AXPColumnWidgetComponent<any[]> implements OnChanges {\n //#region ---- Services & Dependencies ----\n\n private readonly translation = inject(AXTranslationService);\n private readonly entityLookup = inject(AXP_REPEATER_ENTITY_BY_KEY_LOOKUP, { optional: true });\n\n //#endregion\n\n //#region ---- Inputs ----\n\n private readonly rawValueSignal = signal<unknown>(null);\n private readonly rowDataSignal = signal<unknown>(null);\n\n @Input('rawValue')\n set rawValueInput(value: unknown) {\n this.rawValueSignal.set(value);\n }\n\n @Input('rowData')\n set rowDataInput(value: unknown) {\n this.rowDataSignal.set(value);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['rawValue']) {\n this.rawValueSignal.set(changes['rawValue'].currentValue);\n }\n if (changes['rowData']) {\n this.rowDataSignal.set(changes['rowData'].currentValue);\n }\n }\n\n //#endregion\n\n //#region ---- View Children ----\n\n protected moreButton = viewChild<ElementRef>('moreButton');\n protected morePopover = viewChild<AXPopoverComponent>('morePopover');\n\n //#endregion\n\n //#region ---- Properties ----\n\n protected maxVisible: number = this.options['maxVisible'] ?? 2;\n\n protected get rowTemplate(): AXPWidgetNode | undefined {\n return this.options['children']?.[0];\n }\n\n protected get columnDisplayMode(): 'widget' | 'text' {\n return resolveRepeaterColumnDisplayMode(this.rowTemplate);\n }\n\n protected get childWidgetNode(): AXPWidgetNode | undefined {\n return this.columnDisplayMode === 'widget' ? resolveRepeaterWidgetColumnNode(this.rowTemplate) : undefined;\n }\n\n //#endregion\n\n //#region ---- Signals ----\n\n protected isMorePopoverOpen = signal(false);\n protected resolvedDisplayTexts = signal<string[]>([]);\n\n //#endregion\n\n //#region ---- Node Cache ----\n\n private nodeCache = new Map<number, AXPWidgetNode>();\n private lastItems: unknown[] = [];\n private hydrateRequestId = 0;\n\n private clearCacheIfNeeded(): void {\n const currentItems = this.allItems();\n if (\n currentItems.length !== this.lastItems.length ||\n currentItems.some((item, idx) => item !== this.lastItems[idx])\n ) {\n this.nodeCache.clear();\n this.lastItems = [...currentItems];\n }\n }\n\n //#endregion\n\n //#region ---- Effects ----\n\n private readonly hydrateDisplayTexts = effect((onCleanup) => {\n if (this.columnDisplayMode !== 'text') {\n untracked(() => this.resolvedDisplayTexts.set([]));\n return;\n }\n\n const items = this.displayItems();\n const locale = this.translation.getActiveLang();\n const resolveMultiLanguage = (value: AXPMultiLanguageString) => this.translation.resolve(value);\n\n const syncTexts = extractRepeaterDisplayTexts(items, this.rowTemplate, locale, resolveMultiLanguage);\n untracked(() => this.resolvedDisplayTexts.set(syncTexts));\n\n const requestId = ++this.hydrateRequestId;\n let cancelled = false;\n onCleanup(() => {\n cancelled = true;\n });\n\n void resolveRepeaterDisplayTextsWithHydration(\n items,\n this.rowTemplate,\n this.entityLookup ?? undefined,\n locale,\n resolveMultiLanguage,\n ).then((texts) => {\n if (!cancelled && requestId === this.hydrateRequestId) {\n this.resolvedDisplayTexts.set(texts);\n }\n });\n });\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected useTextDisplay = computed(() => this.columnDisplayMode === 'text');\n\n protected displayItems = computed(() =>\n normalizeRepeaterColumnItems(\n this.rawValueSignal(),\n this.rowDataSignal(),\n this.path ?? (this.options['columnName'] as string | undefined),\n ),\n );\n\n protected allItems = computed(() => this.displayItems());\n\n protected visibleItems = computed(() => this.allItems().slice(0, this.maxVisible));\n\n protected visibleDisplayTexts = computed(() => this.resolvedDisplayTexts().slice(0, this.maxVisible));\n\n protected hasMoreItems = computed(() => {\n if (this.useTextDisplay()) {\n return this.resolvedDisplayTexts().length > this.maxVisible;\n }\n return this.allItems().length > this.maxVisible;\n });\n\n protected popoverItemCount = computed(() =>\n this.useTextDisplay() ? this.resolvedDisplayTexts().length : this.allItems().length,\n );\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected showMoreItems(): void {\n this.openMorePopover();\n }\n\n protected onMorePopoverOpenChange(event: unknown): void {\n this.isMorePopoverOpen.set(!!event);\n }\n\n protected getItemNode(item: unknown, index: number): AXPWidgetNode | undefined {\n const childWidgetNode = this.childWidgetNode;\n if (!childWidgetNode) {\n return undefined;\n }\n\n this.clearCacheIfNeeded();\n\n const cachedNode = this.nodeCache.get(index);\n if (cachedNode) {\n return cachedNode;\n }\n\n const child = childWidgetNode;\n const childBindingRaw = child.path ?? child.name;\n const childBinding =\n childBindingRaw != null && String(childBindingRaw).trim() !== '' ? String(childBindingRaw).trim() : '';\n const baseItemPath = `${this.path}[${index}]`;\n const itemPath = childBinding && childBinding !== '.' ? `${baseItemPath}.${childBinding}` : baseItemPath;\n\n const node: AXPWidgetNode = {\n ...child,\n path: itemPath,\n defaultValue: item,\n options: {\n ...child.options,\n rawValue: item,\n rowData: this.rowDataSignal(),\n },\n };\n\n this.nodeCache.set(index, node);\n return node;\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private openMorePopover(): void {\n if (this.morePopover() && this.moreButton()) {\n this.morePopover()!.target = this.moreButton()!.nativeElement;\n this.morePopover()!.open();\n this.isMorePopoverOpen.set(true);\n }\n }\n\n //#endregion\n}\n","@if (useTextDisplay()) {\n <div class=\"relative flex min-w-0 items-center gap-1\">\n @for (text of visibleDisplayTexts(); track $index) {\n <span class=\"truncate\">{{ text }}</span>\n @if ($index < visibleDisplayTexts().length - 1) {\n <span class=\"text-muted shrink-0\">,</span>\n }\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n\n @if (hasMoreItems()) {\n <span\n class=\"absolute flex end-0 h-full cursor-pointer items-center px-1 hover:primary-lighter-surface\"\n (click)=\"showMoreItems()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n </div>\n} @else {\n <div class=\"relative flex min-w-0 flex-col items-stretch gap-0.5\">\n @for (item of visibleItems(); track $index) {\n @if (childWidgetNode) {\n <ng-container\n axp-widget-renderer\n [node]=\"getItemNode(item, $index)!\"\n [mode]=\"'view'\"\n [parentNode]=\"null\"\n [index]=\"$index\"\n ></ng-container>\n }\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n\n @if (hasMoreItems()) {\n <span\n class=\"absolute flex end-0 h-full cursor-pointer items-center px-1 hover:primary-lighter-surface\"\n (click)=\"showMoreItems()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n </div>\n}\n\n<ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onMorePopoverOpenChange($event)\">\n <div class=\"lightest-surface min-w-[280px] rounded-lg border p-4 shadow-lg\">\n <div class=\"mb-4 border-b pb-2\">\n <h3 class=\"text-base font-semibold\">All {{ popoverItemCount() }} Items</h3>\n </div>\n <div class=\"max-h-64 flex flex-col gap-3 overflow-auto\" style=\"max-height: max(30dvh, 10rem)\">\n @if (useTextDisplay()) {\n @for (text of resolvedDisplayTexts(); track $index) {\n <div class=\"truncate\">{{ text }}</div>\n }\n } @else {\n @for (item of allItems(); track $index) {\n <div>\n @if (childWidgetNode) {\n <ng-container\n axp-widget-renderer\n [node]=\"getItemNode(item, $index)!\"\n [mode]=\"'view'\"\n [parentNode]=\"null\"\n [index]=\"$index\"\n ></ng-container>\n }\n </div>\n }\n }\n </div>\n </div>\n</ax-popover>\n"],"names":["i2"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-kwbJdTwe.mjs","sources":["../../../../../libs/framework/client/layout/widgets/src/lib/widgets/layout/repeater/repeater-column-display.util.ts","../../../../../libs/framework/client/layout/widgets/src/lib/widgets/layout/repeater/repeater-widget-column.component.ts","../../../../../libs/framework/client/layout/widgets/src/lib/widgets/layout/repeater/repeater-widget-column.component.html"],"sourcesContent":["import { type AXPMultiLanguageString, type AXPWidgetNode, AXPWidgetsList } from '@acorex-platform/framework-shared/core';\nimport { isValidMultiLanguageObject, resolveMultiLanguageString } from '@acorex/core/translation';\n\nimport type { AXPRepeaterEntityByKeyLookup } from './repeater-entity-lookup.token';\nimport { get, isNil } from 'lodash-es';\n\n//#region ---- Types ----\n\nexport interface RepeaterLookupColumnHint {\n entity: string;\n valueField: string;\n textField: string;\n fkPath: string;\n displayPath?: string;\n}\n\n//#endregion\n\n//#region ---- Constants ----\n\nconst LAYOUT_WIDGET_TYPES = new Set<string>(Object.values(AXPWidgetsList.Layouts));\n\nconst LOOKUP_WIDGET_TYPE = AXPWidgetsList.Editors.LookupBox;\n\nconst NESTED_DISPLAY_FIELDS = ['title', 'name', 'displayName', 'label', 'text', 'code'] as const;\n\nconst SKIP_ITEM_ROOT_KEYS = new Set(['id', 'startDate', 'endDate', '__meta__']);\n\n//#endregion\n\n//#region ---- Raw value normalization ----\n\n/**\n * Normalizes repeater column values from grid rows (array, single object, or JSON string).\n */\nexport function normalizeRepeaterColumnItems(raw: unknown, rowData?: unknown, dataPath?: string): unknown[] {\n let value = raw;\n\n if (isNil(value) && rowData != null && dataPath) {\n value = get(rowData, dataPath);\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (trimmed.startsWith('[') || trimmed.startsWith('{')) {\n try {\n value = JSON.parse(trimmed);\n } catch {\n return trimmed ? [trimmed] : [];\n }\n } else if (trimmed) {\n return [trimmed];\n } else {\n return [];\n }\n }\n\n if (isNil(value)) {\n return [];\n }\n\n return (Array.isArray(value) ? value : [value]).filter((item) => item != null);\n}\n\nfunction resolveLookupFkValue(item: unknown, hint: RepeaterLookupColumnHint): unknown {\n if (item == null || typeof item !== 'object') {\n return undefined;\n }\n\n const direct = get(item, hint.fkPath);\n if (direct != null && direct !== '') {\n if (typeof direct === 'object') {\n return get(direct, hint.valueField) ?? get(direct, 'id');\n }\n return direct;\n }\n\n if (hint.fkPath.endsWith('Id')) {\n const base = hint.fkPath.slice(0, -2);\n const nestedId = get(item, `${base}.id`);\n if (nestedId != null && nestedId !== '') {\n return nestedId;\n }\n\n const nestedObject = get(item, base);\n if (nestedObject != null && typeof nestedObject === 'object') {\n return get(nestedObject, hint.valueField) ?? get(nestedObject, 'id');\n }\n }\n\n return undefined;\n}\n\nfunction extractNestedDisplayFallback(\n item: Record<string, unknown>,\n locale: string,\n resolveMultiLanguage: (ml: AXPMultiLanguageString) => string,\n): string {\n for (const value of Object.values(item)) {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n continue;\n }\n\n for (const field of NESTED_DISPLAY_FIELDS) {\n const text = resolveDisplayValue(get(value, field), locale, resolveMultiLanguage);\n if (text) {\n return text;\n }\n }\n }\n\n return '';\n}\n\n//#endregion\n\n//#region ---- Column mode resolution ----\n\n/**\n * Layout/container nodes wrap edit UI; leaf editors (contact, text, lookup, …) render per-item in columns.\n */\nexport function isRepeaterLayoutWidgetNode(node: AXPWidgetNode): boolean {\n return LAYOUT_WIDGET_TYPES.has(String(node.type));\n}\n\n/**\n * Collects non-layout widget nodes under a repeater row template (one per editable field).\n */\nexport function collectRepeaterRowEditorLeaves(root: AXPWidgetNode | undefined): AXPWidgetNode[] {\n if (!root) {\n return [];\n }\n\n const leaves: AXPWidgetNode[] = [];\n\n const visit = (node: AXPWidgetNode): void => {\n const children = node.children ?? [];\n\n if (!isRepeaterLayoutWidgetNode(node)) {\n leaves.push(node);\n return;\n }\n\n for (const child of children) {\n visit(child);\n }\n };\n\n visit(root);\n return leaves;\n}\n\n/**\n * Widget column when the row template is a single leaf editor (e.g. ContactBox).\n * Text column when the row is a multi-field layout (e.g. GridLayout with lookup + dates).\n */\nexport function resolveRepeaterColumnDisplayMode(rowTemplate: AXPWidgetNode | undefined): 'widget' | 'text' {\n if (!rowTemplate) {\n return 'text';\n }\n\n if (!isRepeaterLayoutWidgetNode(rowTemplate)) {\n return 'widget';\n }\n\n return collectRepeaterRowEditorLeaves(rowTemplate).length === 1 ? 'widget' : 'text';\n}\n\n/**\n * Node passed to `axp-widget-renderer` for widget-mode columns (direct leaf or single nested editor).\n */\nexport function resolveRepeaterWidgetColumnNode(rowTemplate: AXPWidgetNode | undefined): AXPWidgetNode | undefined {\n if (!rowTemplate) {\n return undefined;\n }\n\n if (!isRepeaterLayoutWidgetNode(rowTemplate)) {\n return rowTemplate;\n }\n\n const leaves = collectRepeaterRowEditorLeaves(rowTemplate);\n return leaves.length === 1 ? leaves[0] : undefined;\n}\n\n//#endregion\n\n//#region ---- Text display inference ----\n\nfunction flattenRepeaterRowNodes(root: AXPWidgetNode | undefined): AXPWidgetNode[] {\n if (!root) {\n return [];\n }\n\n const nodes: AXPWidgetNode[] = [];\n const visit = (node: AXPWidgetNode): void => {\n nodes.push(node);\n for (const child of node.children ?? []) {\n visit(child);\n }\n };\n visit(root);\n return nodes;\n}\n\nfunction isLookupWidget(node: AXPWidgetNode): boolean {\n return String(node.type) === LOOKUP_WIDGET_TYPE;\n}\n\nfunction resolveLookupExposeDisplayPath(node: AXPWidgetNode): string | undefined {\n const expose = node.options?.['expose'] as Array<{ source?: string; target?: string }> | undefined;\n const textField = String(node.options?.['textField'] ?? 'title').trim() || 'title';\n\n if (expose?.length) {\n const preferred = expose.find((entry) => entry.source === textField && entry.target?.trim());\n if (preferred?.target) {\n return preferred.target.trim();\n }\n\n const titleTarget = expose.find(\n (entry) =>\n entry.target?.trim() &&\n (entry.source === 'title' || entry.target.endsWith('.title') || entry.target === 'title'),\n );\n if (titleTarget?.target) {\n return titleTarget.target.trim();\n }\n\n const firstTarget = expose.find((entry) => entry.target?.trim());\n if (firstTarget?.target) {\n return firstTarget.target.trim();\n }\n }\n\n const binding = String(node.path ?? node.name ?? '').trim();\n if (binding.endsWith('Id')) {\n const base = binding.slice(0, -2);\n if (base) {\n return `${base}.${textField}`;\n }\n }\n\n return undefined;\n}\n\nexport function inferRepeaterDisplayPathFromTemplate(rowTemplate: AXPWidgetNode | undefined): string | undefined {\n return resolveRepeaterLookupColumnHint(rowTemplate)?.displayPath;\n}\n\n/**\n * Lookup metadata from the repeater row template (used to hydrate FK ids in list rows).\n */\nexport function resolveRepeaterLookupColumnHint(rowTemplate: AXPWidgetNode | undefined): RepeaterLookupColumnHint | undefined {\n for (const node of flattenRepeaterRowNodes(rowTemplate)) {\n if (!isLookupWidget(node)) {\n continue;\n }\n\n const entity = String(node.options?.['entity'] ?? '').trim();\n const fkPath = String(node.path ?? node.name ?? '').trim();\n if (!entity || !fkPath) {\n continue;\n }\n\n return {\n entity,\n valueField: String(node.options?.['valueField'] ?? 'id').trim() || 'id',\n textField: String(node.options?.['textField'] ?? 'title').trim() || 'title',\n fkPath,\n displayPath: resolveLookupExposeDisplayPath(node),\n };\n }\n\n return undefined;\n}\n\nexport function inferRepeaterDisplayPathFromItem(item: unknown): string | undefined {\n if (item == null || typeof item !== 'object' || Array.isArray(item)) {\n return undefined;\n }\n\n const record = item as Record<string, unknown>;\n\n for (const [key, value] of Object.entries(record)) {\n if (SKIP_ITEM_ROOT_KEYS.has(key) || key.endsWith('Id')) {\n continue;\n }\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n continue;\n }\n\n for (const field of NESTED_DISPLAY_FIELDS) {\n if (!isNil(get(value, field))) {\n return `${key}.${field}`;\n }\n }\n }\n\n for (const field of NESTED_DISPLAY_FIELDS) {\n if (!isNil(get(record, field))) {\n return field;\n }\n }\n\n return undefined;\n}\n\nexport function resolveRepeaterItemDisplayPath(\n rowTemplate: AXPWidgetNode | undefined,\n sampleItem?: unknown,\n): string | undefined {\n return inferRepeaterDisplayPathFromTemplate(rowTemplate) ?? inferRepeaterDisplayPathFromItem(sampleItem);\n}\n\nfunction resolveDisplayValue(\n value: unknown,\n locale: string,\n resolveMultiLanguage: (ml: AXPMultiLanguageString) => string,\n): string {\n if (isNil(value)) {\n return '';\n }\n\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return String(value).trim();\n }\n\n if (typeof value === 'object' && !Array.isArray(value)) {\n if (isValidMultiLanguageObject(value)) {\n return resolveMultiLanguage(value as AXPMultiLanguageString).trim();\n }\n\n const resolved = resolveMultiLanguageString(value as AXPMultiLanguageString, locale).trim();\n if (resolved && resolved !== '[object Object]') {\n return resolved;\n }\n }\n\n return '';\n}\n\nexport function extractRepeaterItemDisplayText(\n item: unknown,\n displayPath: string | undefined,\n locale: string,\n resolveMultiLanguage: (ml: AXPMultiLanguageString) => string,\n): string {\n if (item == null) {\n return '';\n }\n\n if (typeof item === 'string' || typeof item === 'number' || typeof item === 'boolean') {\n return String(item).trim();\n }\n\n if (typeof item !== 'object') {\n return '';\n }\n\n const path = displayPath ?? inferRepeaterDisplayPathFromItem(item);\n if (path) {\n const fromPath = resolveDisplayValue(get(item, path), locale, resolveMultiLanguage);\n if (fromPath) {\n return fromPath;\n }\n }\n\n return extractNestedDisplayFallback(item as Record<string, unknown>, locale, resolveMultiLanguage);\n}\n\nexport function extractRepeaterDisplayTexts(\n items: unknown[],\n rowTemplate: AXPWidgetNode | undefined,\n locale: string,\n resolveMultiLanguage: (ml: AXPMultiLanguageString) => string,\n): string[] {\n const filtered = items.filter((item) => item != null);\n if (filtered.length === 0) {\n return [];\n }\n\n const displayPath = resolveRepeaterItemDisplayPath(rowTemplate, filtered[0]);\n\n return filtered\n .map((item) => extractRepeaterItemDisplayText(item, displayPath, locale, resolveMultiLanguage))\n .filter((text) => text.length > 0);\n}\n\n/**\n * Resolves repeater column labels, hydrating lookup FK ids when list rows omit nested snapshots.\n */\nexport async function resolveRepeaterDisplayTextsWithHydration(\n items: unknown[],\n rowTemplate: AXPWidgetNode | undefined,\n entityLookup: AXPRepeaterEntityByKeyLookup | undefined,\n locale: string,\n resolveMultiLanguage: (ml: AXPMultiLanguageString) => string,\n): Promise<string[]> {\n const filtered = items.filter((item) => item != null);\n if (filtered.length === 0) {\n return [];\n }\n\n const displayPath = resolveRepeaterItemDisplayPath(rowTemplate, filtered[0]);\n const lookupHint = resolveRepeaterLookupColumnHint(rowTemplate);\n const lookupCache = new Map<string, string>();\n\n const resolveLookupTitle = async (id: unknown): Promise<string> => {\n const hint = lookupHint;\n if (!hint) {\n return '';\n }\n\n if (id != null && typeof id === 'object') {\n const inline = resolveDisplayValue(get(id, hint.textField), locale, resolveMultiLanguage);\n if (inline) {\n return inline;\n }\n }\n\n if (id == null || id === '') {\n return '';\n }\n\n if (!hint.entity.includes('.') || !entityLookup) {\n return '';\n }\n\n const cacheKey = String(id);\n const cached = lookupCache.get(cacheKey);\n if (cached != null) {\n return cached;\n }\n\n try {\n const row = await entityLookup.byKey(hint.entity, cacheKey);\n const text = resolveDisplayValue(get(row, hint.textField), locale, resolveMultiLanguage);\n lookupCache.set(cacheKey, text);\n return text;\n } catch {\n lookupCache.set(cacheKey, '');\n return '';\n }\n };\n\n const texts = await Promise.all(\n filtered.map(async (item) => {\n const inline = extractRepeaterItemDisplayText(item, displayPath, locale, resolveMultiLanguage);\n if (inline) {\n return inline;\n }\n\n if (!lookupHint) {\n return '';\n }\n\n const fkValue = resolveLookupFkValue(item, lookupHint);\n if (fkValue != null && typeof fkValue === 'object') {\n const fromEmbedded = await resolveLookupTitle(fkValue);\n if (fromEmbedded) {\n return fromEmbedded;\n }\n }\n\n return resolveLookupTitle(fkValue);\n }),\n );\n\n return texts.filter((text) => text.length > 0);\n}\n\n//#endregion\n","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXPColumnWidgetComponent, AXPWidgetCoreModule, AXPWidgetCoreService } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPMultiLanguageString, type AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport { AXPContextStore } from '@acorex-platform/framework-client/core';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnChanges,\n SimpleChanges,\n computed,\n effect,\n inject,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\n\nimport {\n extractRepeaterDisplayTexts,\n normalizeRepeaterColumnItems,\n resolveRepeaterColumnDisplayMode,\n resolveRepeaterDisplayTextsWithHydration,\n resolveRepeaterWidgetColumnNode,\n} from './repeater-column-display.util';\nimport { AXP_REPEATER_ENTITY_BY_KEY_LOOKUP } from './repeater-entity-lookup.token';\n\n@Component({\n selector: 'axp-repeater-widget-column',\n templateUrl: './repeater-widget-column.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXBadgeModule, AXButtonModule, AXPopoverModule, AXPWidgetCoreModule],\n providers: [AXPWidgetCoreService, AXPContextStore],\n inputs: ['rawValue', 'rowData'],\n})\nexport class AXPRepeaterWidgetColumnComponent extends AXPColumnWidgetComponent<any[]> implements OnChanges {\n //#region ---- Services & Dependencies ----\n\n private readonly translation = inject(AXTranslationService);\n private readonly entityLookup = inject(AXP_REPEATER_ENTITY_BY_KEY_LOOKUP, { optional: true });\n\n //#endregion\n\n //#region ---- Inputs ----\n\n private readonly rawValueSignal = signal<unknown>(null);\n private readonly rowDataSignal = signal<unknown>(null);\n\n @Input('rawValue')\n set rawValueInput(value: unknown) {\n this.rawValueSignal.set(value);\n }\n\n @Input('rowData')\n set rowDataInput(value: unknown) {\n this.rowDataSignal.set(value);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['rawValue']) {\n this.rawValueSignal.set(changes['rawValue'].currentValue);\n }\n if (changes['rowData']) {\n this.rowDataSignal.set(changes['rowData'].currentValue);\n }\n }\n\n //#endregion\n\n //#region ---- View Children ----\n\n protected moreButton = viewChild<ElementRef>('moreButton');\n protected morePopover = viewChild<AXPopoverComponent>('morePopover');\n\n //#endregion\n\n //#region ---- Properties ----\n\n protected maxVisible: number = this.options['maxVisible'] ?? 2;\n\n protected get rowTemplate(): AXPWidgetNode | undefined {\n return this.options['children']?.[0];\n }\n\n protected get columnDisplayMode(): 'widget' | 'text' {\n return resolveRepeaterColumnDisplayMode(this.rowTemplate);\n }\n\n protected get childWidgetNode(): AXPWidgetNode | undefined {\n return this.columnDisplayMode === 'widget' ? resolveRepeaterWidgetColumnNode(this.rowTemplate) : undefined;\n }\n\n //#endregion\n\n //#region ---- Signals ----\n\n protected isMorePopoverOpen = signal(false);\n protected resolvedDisplayTexts = signal<string[]>([]);\n\n //#endregion\n\n //#region ---- Node Cache ----\n\n private nodeCache = new Map<number, AXPWidgetNode>();\n private lastItems: unknown[] = [];\n private hydrateRequestId = 0;\n\n private clearCacheIfNeeded(): void {\n const currentItems = this.allItems();\n if (\n currentItems.length !== this.lastItems.length ||\n currentItems.some((item, idx) => item !== this.lastItems[idx])\n ) {\n this.nodeCache.clear();\n this.lastItems = [...currentItems];\n }\n }\n\n //#endregion\n\n //#region ---- Effects ----\n\n private readonly hydrateDisplayTexts = effect((onCleanup) => {\n if (this.columnDisplayMode !== 'text') {\n untracked(() => this.resolvedDisplayTexts.set([]));\n return;\n }\n\n const items = this.displayItems();\n const locale = this.translation.getActiveLang();\n const resolveMultiLanguage = (value: AXPMultiLanguageString) => this.translation.resolve(value);\n\n const syncTexts = extractRepeaterDisplayTexts(items, this.rowTemplate, locale, resolveMultiLanguage);\n untracked(() => this.resolvedDisplayTexts.set(syncTexts));\n\n const requestId = ++this.hydrateRequestId;\n let cancelled = false;\n onCleanup(() => {\n cancelled = true;\n });\n\n void resolveRepeaterDisplayTextsWithHydration(\n items,\n this.rowTemplate,\n this.entityLookup ?? undefined,\n locale,\n resolveMultiLanguage,\n ).then((texts) => {\n if (!cancelled && requestId === this.hydrateRequestId) {\n this.resolvedDisplayTexts.set(texts);\n }\n });\n });\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected useTextDisplay = computed(() => this.columnDisplayMode === 'text');\n\n protected displayItems = computed(() =>\n normalizeRepeaterColumnItems(\n this.rawValueSignal(),\n this.rowDataSignal(),\n this.path ?? (this.options['columnName'] as string | undefined),\n ),\n );\n\n protected allItems = computed(() => this.displayItems());\n\n protected visibleItems = computed(() => this.allItems().slice(0, this.maxVisible));\n\n protected visibleDisplayTexts = computed(() => this.resolvedDisplayTexts().slice(0, this.maxVisible));\n\n protected hasMoreItems = computed(() => {\n if (this.useTextDisplay()) {\n return this.resolvedDisplayTexts().length > this.maxVisible;\n }\n return this.allItems().length > this.maxVisible;\n });\n\n protected popoverItemCount = computed(() =>\n this.useTextDisplay() ? this.resolvedDisplayTexts().length : this.allItems().length,\n );\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected showMoreItems(): void {\n this.openMorePopover();\n }\n\n protected onMorePopoverOpenChange(event: unknown): void {\n this.isMorePopoverOpen.set(!!event);\n }\n\n protected getItemNode(item: unknown, index: number): AXPWidgetNode | undefined {\n const childWidgetNode = this.childWidgetNode;\n if (!childWidgetNode) {\n return undefined;\n }\n\n this.clearCacheIfNeeded();\n\n const cachedNode = this.nodeCache.get(index);\n if (cachedNode) {\n return cachedNode;\n }\n\n const child = childWidgetNode;\n const childBindingRaw = child.path ?? child.name;\n const childBinding =\n childBindingRaw != null && String(childBindingRaw).trim() !== '' ? String(childBindingRaw).trim() : '';\n const baseItemPath = `${this.path}[${index}]`;\n const itemPath = childBinding && childBinding !== '.' ? `${baseItemPath}.${childBinding}` : baseItemPath;\n\n const node: AXPWidgetNode = {\n ...child,\n path: itemPath,\n defaultValue: item,\n options: {\n ...child.options,\n rawValue: item,\n rowData: this.rowDataSignal(),\n },\n };\n\n this.nodeCache.set(index, node);\n return node;\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private openMorePopover(): void {\n if (this.morePopover() && this.moreButton()) {\n this.morePopover()!.target = this.moreButton()!.nativeElement;\n this.morePopover()!.open();\n this.isMorePopoverOpen.set(true);\n }\n }\n\n //#endregion\n}\n","@if (useTextDisplay()) {\n <div class=\"relative flex min-w-0 items-center gap-1\">\n @for (text of visibleDisplayTexts(); track $index) {\n <span class=\"truncate\">{{ text }}</span>\n @if ($index < visibleDisplayTexts().length - 1) {\n <span class=\"text-muted shrink-0\">,</span>\n }\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n\n @if (hasMoreItems()) {\n <span\n class=\"absolute flex end-0 h-full cursor-pointer items-center px-1 hover:primary-lighter-surface\"\n (click)=\"showMoreItems()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n </div>\n} @else {\n <div class=\"relative flex min-w-0 flex-col items-stretch gap-0.5\">\n @for (item of visibleItems(); track $index) {\n @if (childWidgetNode) {\n <ng-container\n axp-widget-renderer\n [node]=\"getItemNode(item, $index)!\"\n [mode]=\"'view'\"\n [parentNode]=\"null\"\n [index]=\"$index\"\n ></ng-container>\n }\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n\n @if (hasMoreItems()) {\n <span\n class=\"absolute flex end-0 h-full cursor-pointer items-center px-1 hover:primary-lighter-surface\"\n (click)=\"showMoreItems()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n </div>\n}\n\n<ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onMorePopoverOpenChange($event)\">\n <div class=\"lightest-surface min-w-[280px] rounded-lg border p-4 shadow-lg\">\n <div class=\"mb-4 border-b pb-2\">\n <h3 class=\"text-base font-semibold\">All {{ popoverItemCount() }} Items</h3>\n </div>\n <div class=\"max-h-64 flex flex-col gap-3 overflow-auto\" style=\"max-height: max(30dvh, 10rem)\">\n @if (useTextDisplay()) {\n @for (text of resolvedDisplayTexts(); track $index) {\n <div class=\"truncate\">{{ text }}</div>\n }\n } @else {\n @for (item of allItems(); track $index) {\n <div>\n @if (childWidgetNode) {\n <ng-container\n axp-widget-renderer\n [node]=\"getItemNode(item, $index)!\"\n [mode]=\"'view'\"\n [parentNode]=\"null\"\n [index]=\"$index\"\n ></ng-container>\n }\n </div>\n }\n }\n </div>\n </div>\n</ax-popover>\n"],"names":["i2"],"mappings":"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"}
@@ -5,7 +5,7 @@ import { AXPLayoutBaseWidgetComponent } from '@acorex-platform/framework-client/
5
5
  import { AsyncPipe } from '@angular/common';
6
6
  import * as i0 from '@angular/core';
7
7
  import { computed, HostBinding, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
8
- import { t as textBlockStyleAttribute, a as textBlockContentClass } from './acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-D5pndfBW.mjs';
8
+ import { t as textBlockStyleAttribute, a as textBlockContentClass } from './acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-D9WiRo-_.mjs';
9
9
 
10
10
  class AXPTextBlockWidgetDesignerComponent extends AXPLayoutBaseWidgetComponent {
11
11
  constructor() {
@@ -73,4 +73,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
73
73
  }] } });
74
74
 
75
75
  export { AXPTextBlockWidgetDesignerComponent };
76
- //# sourceMappingURL=acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-Ctjz1PjP.mjs.map
76
+ //# sourceMappingURL=acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-Bke-Wy-4.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-Ctjz1PjP.mjs","sources":["../../../../../libs/framework/client/layout/widgets/src/lib/widgets/layout/text-block/text-block-widget-designer.component.ts"],"sourcesContent":["import { AXSafePipe } from '@acorex/core/pipes';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPLayoutBaseWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, HostBinding, ViewEncapsulation } from '@angular/core';\nimport { textBlockContentClass, textBlockStyleAttribute } from './text-block-style';\n\n@Component({\n selector: 'axp-text-block-widget-designer',\n template: `\n @if (isRichText()) {\n <div\n [class]=\"contentClass()\"\n [attr.style]=\"customStyle()\"\n [innerHTML]=\"content() | translate | async | safe: 'html'\"\n ></div>\n } @else {\n <div [class]=\"contentClass()\" [attr.style]=\"customStyle()\">\n {{ content() | translate | async }}\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXTranslationModule, AXSafePipe, AsyncPipe],\n})\nexport class AXPTextBlockWidgetDesignerComponent extends AXPLayoutBaseWidgetComponent {\n protected content = computed<string>(() => (this.options()['content'] as string) ?? '');\n protected customStyle = computed(() => textBlockStyleAttribute(this.options()['style']));\n protected contentClass = computed(() => textBlockContentClass(this.customStyle()));\n\n protected isRichText = computed(() => {\n const format = this.options()['format'];\n const id =\n typeof format === 'object' && format != null && 'id' in format\n ? String((format as { id: unknown }).id)\n : format;\n return id !== 'plain';\n });\n\n @HostBinding('class')\n private get __class(): Record<string, boolean> {\n return {\n block: true,\n 'axp-text-block-widget-view': true,\n };\n }\n}\n"],"names":[],"mappings":";;;;;;;;;AA2BM,MAAO,mCAAoC,SAAQ,4BAA4B,CAAA;AAnBrF,IAAA,WAAA,GAAA;;AAoBY,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAS,MAAO,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAY,IAAI,EAAE;oFAAC;AAC7E,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,uBAAuB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;wFAAC;AAC9E,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;yFAAC;AAExE,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;AACvC,YAAA,MAAM,EAAE,GACN,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI;AACtD,kBAAE,MAAM,CAAE,MAA0B,CAAC,EAAE;kBACrC,MAAM;YACZ,OAAO,EAAE,KAAK,OAAO;QACvB,CAAC;uFAAC;AASH,IAAA;AAPC,IAAA,IACY,OAAO,GAAA;QACjB,OAAO;AACL,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,4BAA4B,EAAE,IAAI;SACnC;IACH;8GApBW,mCAAmC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mCAAmC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,cAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjBpC;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAGS,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,UAAU,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAEzC,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAnB/C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gCAAgC;AAC1C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;AAYT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,OAAO,EAAE,CAAC,mBAAmB,EAAE,UAAU,EAAE,SAAS,CAAC;AACtD,iBAAA;;sBAeE,WAAW;uBAAC,OAAO;;;"}
1
+ {"version":3,"file":"acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-Bke-Wy-4.mjs","sources":["../../../../../libs/framework/client/layout/widgets/src/lib/widgets/layout/text-block/text-block-widget-designer.component.ts"],"sourcesContent":["import { AXSafePipe } from '@acorex/core/pipes';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPLayoutBaseWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, HostBinding, ViewEncapsulation } from '@angular/core';\nimport { textBlockContentClass, textBlockStyleAttribute } from './text-block-style';\n\n@Component({\n selector: 'axp-text-block-widget-designer',\n template: `\n @if (isRichText()) {\n <div\n [class]=\"contentClass()\"\n [attr.style]=\"customStyle()\"\n [innerHTML]=\"content() | translate | async | safe: 'html'\"\n ></div>\n } @else {\n <div [class]=\"contentClass()\" [attr.style]=\"customStyle()\">\n {{ content() | translate | async }}\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXTranslationModule, AXSafePipe, AsyncPipe],\n})\nexport class AXPTextBlockWidgetDesignerComponent extends AXPLayoutBaseWidgetComponent {\n protected content = computed<string>(() => (this.options()['content'] as string) ?? '');\n protected customStyle = computed(() => textBlockStyleAttribute(this.options()['style']));\n protected contentClass = computed(() => textBlockContentClass(this.customStyle()));\n\n protected isRichText = computed(() => {\n const format = this.options()['format'];\n const id =\n typeof format === 'object' && format != null && 'id' in format\n ? String((format as { id: unknown }).id)\n : format;\n return id !== 'plain';\n });\n\n @HostBinding('class')\n private get __class(): Record<string, boolean> {\n return {\n block: true,\n 'axp-text-block-widget-view': true,\n };\n }\n}\n"],"names":[],"mappings":";;;;;;;;;AA2BM,MAAO,mCAAoC,SAAQ,4BAA4B,CAAA;AAnBrF,IAAA,WAAA,GAAA;;AAoBY,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAS,MAAO,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAY,IAAI,EAAE;oFAAC;AAC7E,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,uBAAuB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;wFAAC;AAC9E,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;yFAAC;AAExE,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;AACvC,YAAA,MAAM,EAAE,GACN,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI;AACtD,kBAAE,MAAM,CAAE,MAA0B,CAAC,EAAE;kBACrC,MAAM;YACZ,OAAO,EAAE,KAAK,OAAO;QACvB,CAAC;uFAAC;AASH,IAAA;AAPC,IAAA,IACY,OAAO,GAAA;QACjB,OAAO;AACL,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,4BAA4B,EAAE,IAAI;SACnC;IACH;8GApBW,mCAAmC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mCAAmC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,cAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjBpC;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAGS,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,UAAU,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAEzC,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAnB/C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gCAAgC;AAC1C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;AAYT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,OAAO,EAAE,CAAC,mBAAmB,EAAE,UAAU,EAAE,SAAS,CAAC;AACtD,iBAAA;;sBAeE,WAAW;uBAAC,OAAO;;;"}
@@ -5,6 +5,7 @@ import { AXDecoratorModule } from '@acorex/components/decorators';
5
5
  import { AXPopupService } from '@acorex/components/popup';
6
6
  import * as i1$2 from '@acorex/core/translation';
7
7
  import { AXTranslationModule } from '@acorex/core/translation';
8
+ import { AXPDialogOpener } from '@acorex-platform/framework-client/layout/builder';
8
9
  import { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';
9
10
  import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';
10
11
  import * as i1$1 from '@angular/common';
@@ -17,6 +18,7 @@ class AXPTriggersWidgetEditComponent extends AXPValueWidgetComponent {
17
18
  super(...arguments);
18
19
  //#region ---- Services & Dependencies ----
19
20
  this.popupService = inject(AXPopupService);
21
+ this.dialogOpener = inject(AXPDialogOpener);
20
22
  //#endregion
21
23
  //#region ---- Computed Properties ----
22
24
  this.disabled = computed(() => this.options()['disabled'], /* @ts-ignore */
@@ -65,14 +67,7 @@ class AXPTriggersWidgetEditComponent extends AXPValueWidgetComponent {
65
67
  const trigger = this.triggers()[index];
66
68
  if (!trigger)
67
69
  return;
68
- const { AXPTriggerExpressionEditorPopupComponent } = await import('./acorex-platform-framework-client-layout-widgets-trigger-expression-editor-popup.component-ZvUXJs3G.mjs');
69
- const result = await this.popupService.open(AXPTriggerExpressionEditorPopupComponent, {
70
- title: '@general:widgets.triggers.edit-event-expression',
71
- size: 'lg',
72
- data: {
73
- value: signal(trigger.event),
74
- },
75
- });
70
+ const result = await this.openTriggerExpression('event', index, trigger.event);
76
71
  if (result?.data?.value) {
77
72
  const updatedTriggers = [...this.triggers()];
78
73
  updatedTriggers[index] = {
@@ -90,14 +85,7 @@ class AXPTriggersWidgetEditComponent extends AXPValueWidgetComponent {
90
85
  const actionValue = Array.isArray(trigger.action)
91
86
  ? trigger.action.join('\n')
92
87
  : trigger.action || '';
93
- const { AXPTriggerExpressionEditorPopupComponent } = await import('./acorex-platform-framework-client-layout-widgets-trigger-expression-editor-popup.component-ZvUXJs3G.mjs');
94
- const result = await this.popupService.open(AXPTriggerExpressionEditorPopupComponent, {
95
- title: '@general:widgets.triggers.edit-action-expression',
96
- size: 'lg',
97
- data: {
98
- value: signal(actionValue),
99
- },
100
- });
88
+ const result = await this.openTriggerExpression('action', index, actionValue);
101
89
  if (result?.data?.value !== undefined) {
102
90
  const updatedTriggers = [...this.triggers()];
103
91
  // Convert back to array if multiple lines, otherwise keep as string
@@ -112,6 +100,22 @@ class AXPTriggersWidgetEditComponent extends AXPValueWidgetComponent {
112
100
  this.setValue(updatedTriggers);
113
101
  }
114
102
  }
103
+ openTriggerExpression(kind, index, value) {
104
+ const title = kind === 'event'
105
+ ? '@general:widgets.triggers.edit-event-expression'
106
+ : '@general:widgets.triggers.edit-action-expression';
107
+ return this.dialogOpener.openPopup({
108
+ load: () => import('./acorex-platform-framework-client-layout-widgets-trigger-expression-editor-popup.component-ZvUXJs3G.mjs').then((module) => module.AXPTriggerExpressionEditorPopupComponent),
109
+ data: { kind, index },
110
+ show: (component) => this.popupService.open(component, {
111
+ title,
112
+ size: 'lg',
113
+ data: {
114
+ value: signal(value),
115
+ },
116
+ }),
117
+ });
118
+ }
115
119
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTriggersWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
116
120
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPTriggersWidgetEditComponent, isStandalone: true, selector: "axp-triggers-widget-editor", usesInheritance: true, ngImport: i0, template: `
117
121
  <div class="flex flex-col gap-2">
@@ -342,4 +346,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
342
346
  }] });
343
347
 
344
348
  export { AXPTriggersWidgetEditComponent };
345
- //# sourceMappingURL=acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-B_OM0T7i.mjs.map
349
+ //# sourceMappingURL=acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-C-r7txgg.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-C-r7txgg.mjs","sources":["../../../../../libs/framework/client/layout/widgets/src/lib/widgets/property-editors/triggers/triggers-widget-editor.component.ts"],"sourcesContent":["import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPDialogOpener } from '@acorex-platform/framework-client/layout/builder';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPWidgetTrigger, AXPWidgetTriggers } from '@acorex-platform/framework-shared/core';\n\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, signal } from '@angular/core';\n\n@Component({\n selector: 'axp-triggers-widget-editor',\n template: `\n <div class=\"flex flex-col gap-2\">\n @if (hasTriggers()) {\n @for (trigger of triggers(); let i = $index; track i) {\n <div\n class=\"flex items-center gap-2 px-2 py-1 rounded-lg border shadow-sm lightest-surface hover:shadow-md transition-shadow\"\n >\n <!-- Trigger Icon -->\n <div\n class=\"flex items-center justify-center w-8 h-8 rounded-md bg-pink-100 text-pink-600 font-semibold shrink-0\"\n >\n <ax-icon icon=\"fa-light fa-bolt\" ></ax-icon>\n </div>\n\n <!-- Trigger Details -->\n <div class=\"flex-1 flex flex-col min-w-0\">\n <!-- Event -->\n <div class=\"flex items-center gap-2\">\n <span class=\"text-xs font-semibold text-gray-500 uppercase tracking-wide w-16\">\n {{ '@general:widgets.triggers.event.label' | translate | async }}\n </span>\n <span\n class=\"text-sm font-mono text-primary cursor-pointer underline truncate\"\n (click)=\"openEventEditor(i)\"\n [title]=\"trigger.event || ''\"\n >\n @if (trigger.event) {\n {{ getEventPreview(trigger.event) }}\n } @else {\n <span class=\"not-italic\">\n {{ '@general:widgets.triggers.event.placeholder' | translate | async }}\n </span>\n }\n </span>\n </div>\n\n <!-- Action -->\n <div class=\"flex items-center gap-2\">\n <span class=\"text-xs font-semibold text-gray-500 uppercase tracking-wide w-16\">\n {{ '@general:widgets.triggers.action.label' | translate | async }}\n </span>\n <span\n class=\"text-sm font-mono text-success cursor-pointer underline truncate\"\n (click)=\"openActionEditor(i)\"\n [title]=\"getActionFullText(trigger.action)\"\n >\n @if (trigger.action) {\n {{ getActionPreview(trigger.action) }}\n } @else {\n <span class=\"not-italic\">\n {{ '@general:widgets.triggers.action.placeholder' | translate | async }}\n </span>\n }\n </span>\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"flex items-center gap-2 shrink-0 ax-sm\">\n <ax-button\n look=\"blank\"\n color=\"danger\"\n [disabled]=\"disabled()\"\n (onClick)=\"handleRemoveTrigger(i)\"\n class=\"px-3\"\n >\n <ax-icon icon=\"fa-light fa-trash-can\"></ax-icon>\n </ax-button>\n </div>\n </div>\n }\n } @else {\n <axp-state-message\n icon=\"fa-light fa-bolt\"\n [description]=\"'@general:widgets.triggers.empty-state.title'\"\n >\n <ax-button\n slot=\"actions\"\n [text]=\"'@general:widgets.triggers.add-first-trigger' | translate | async\"\n look=\"twotone\"\n [disabled]=\"disabled()\"\n (onClick)=\"handleAddTrigger()\"\n >\n <ax-prefix>\n <ax-icon class=\"fa-solid fa-add\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </axp-state-message>\n }\n\n @if (hasTriggers()) {\n <!-- Add Trigger Button -->\n <div class=\"flex items-center justify-end\">\n <ax-button\n [text]=\"'@general:widgets.triggers.add-trigger' | translate | async\"\n look=\"twotone\"\n color=\"primary\"\n [disabled]=\"disabled()\"\n (onClick)=\"handleAddTrigger()\"\n class=\"px-3\"\n >\n <ax-prefix>\n <ax-icon class=\"fa-solid fa-add\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXButtonModule, AXDecoratorModule, AXTranslationModule, AXPStateMessageComponent],\n})\nexport class AXPTriggersWidgetEditComponent extends AXPValueWidgetComponent<AXPWidgetTriggers> {\n //#region ---- Services & Dependencies ----\n\n private readonly popupService = inject(AXPopupService);\n private readonly dialogOpener = inject(AXPDialogOpener);\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected disabled = computed<boolean>(() => this.options()['disabled'] as boolean);\n\n protected triggers = computed<AXPWidgetTriggers>(() => {\n const value = this.getValue();\n return Array.isArray(value) ? value : [];\n });\n\n protected hasTriggers = computed<boolean>(() => {\n return this.triggers().length > 0;\n });\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n protected getEventPreview(event: string): string {\n const preview = event.length > 50 ? event.substring(0, 50) + '...' : event;\n return preview;\n }\n\n protected getActionPreview(action: string | string[]): string {\n const actionStr = Array.isArray(action) ? action.join(', ') : action;\n const preview = actionStr.length > 50 ? actionStr.substring(0, 50) + '...' : actionStr;\n return preview;\n }\n\n protected getActionFullText(action: string | string[]): string {\n return Array.isArray(action) ? action.join('\\n') : action;\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleAddTrigger(): void {\n const newTrigger: AXPWidgetTrigger = {\n event: '',\n action: '',\n };\n const currentTriggers = [...this.triggers()];\n currentTriggers.push(newTrigger);\n this.setValue(currentTriggers);\n }\n\n protected handleRemoveTrigger(index: number): void {\n const currentTriggers = [...this.triggers()];\n currentTriggers.splice(index, 1);\n this.setValue(currentTriggers);\n }\n\n protected async openEventEditor(index: number): Promise<void> {\n const trigger = this.triggers()[index];\n if (!trigger) return;\n\n const result = await this.openTriggerExpression('event', index, trigger.event);\n\n if (result?.data?.value) {\n const updatedTriggers = [...this.triggers()];\n updatedTriggers[index] = {\n ...updatedTriggers[index],\n event: result.data.value,\n };\n this.setValue(updatedTriggers);\n }\n }\n\n protected async openActionEditor(index: number): Promise<void> {\n const trigger = this.triggers()[index];\n if (!trigger) return;\n\n // Convert action to string for editing (if array, join with newlines)\n const actionValue = Array.isArray(trigger.action)\n ? trigger.action.join('\\n')\n : trigger.action || '';\n\n const result = await this.openTriggerExpression('action', index, actionValue);\n\n if (result?.data?.value !== undefined) {\n const updatedTriggers = [...this.triggers()];\n // Convert back to array if multiple lines, otherwise keep as string\n const actionResult = result.data.value;\n const action = actionResult.includes('\\n')\n ? actionResult.split('\\n').filter((l: string) => l.trim())\n : actionResult;\n\n updatedTriggers[index] = {\n ...updatedTriggers[index],\n action: action,\n };\n this.setValue(updatedTriggers);\n }\n }\n\n private openTriggerExpression(kind: 'event' | 'action', index: number, value: string) {\n const title =\n kind === 'event'\n ? '@general:widgets.triggers.edit-event-expression'\n : '@general:widgets.triggers.edit-action-expression';\n\n return this.dialogOpener.openPopup({\n load: () =>\n import('./trigger-expression-editor-popup.component').then(\n (module) => module.AXPTriggerExpressionEditorPopupComponent,\n ),\n data: { kind, index },\n show: (component) =>\n this.popupService.open(component, {\n title,\n size: 'lg',\n data: {\n value: signal(value),\n },\n }),\n });\n }\n\n //#endregion\n}\n\n"],"names":["i3","i4"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export { b as AXPAdvancedGridItemWidget, c as AXPAdvancedGridItemWidgetDesignerComponent, d as AXPAdvancedGridItemWidgetViewComponent, e as AXPAdvancedGridOptionsWidget, f as AXPAdvancedGridOptionsWidgetEditComponent, g as AXPAdvancedGridWidget, h as AXPAdvancedGridWidgetDesignerComponent, i as AXPAdvancedGridWidgetViewComponent, j as AXPAvatarWidget, k as AXPAvatarWidgetColumnComponent, l as AXPAvatarWidgetDesignerComponent, m as AXPAvatarWidgetEditComponent, n as AXPAvatarWidgetViewComponent, o as AXPBetweenExpressionValidationWidget, p as AXPBetweenValidationWidgetEditComponent, q as AXPBlockWidget, r as AXPBlockWidgetDesignerComponent, s as AXPBlockWidgetViewComponent, u as AXPBorderWidget, v as AXPBorderWidgetEditComponent, w as AXPButtonWidget, x as AXPButtonWidgetColumnComponent, y as AXPButtonWidgetViewComponent, z as AXPCallbackValidationWidget, B as AXPCallbackValidationWidgetEditComponent, C as AXPCheckBoxWidget, D as AXPCheckBoxWidgetColumnComponent, E as AXPCheckBoxWidgetDesignerComponent, F as AXPCheckBoxWidgetEditComponent, G as AXPCheckBoxWidgetPrintComponent, H as AXPCheckBoxWidgetViewComponent, I as AXPCodeEditorWidget, J as AXPColorBoxWidget, K as AXPColorBoxWidgetColumnComponent, L as AXPColorBoxWidgetDesignerComponent, M as AXPColorBoxWidgetEditComponent, N as AXPColorBoxWidgetViewComponent, O as AXPColorChooserWidget, P as AXPColorChooserWidgetColumnComponent, Q as AXPColorChooserWidgetDesignerComponent, R as AXPColorChooserWidgetEditComponent, S as AXPColorChooserWidgetViewComponent, T as AXPColorPaletteWidget, U as AXPColorPaletteWidgetColumnComponent, V as AXPColorPaletteWidgetDesignerComponent, W as AXPColorPaletteWidgetEditComponent, X as AXPColorPaletteWidgetViewComponent, Y as AXPConditionBuilderWidget, Z as AXPConditionBuilderWidgetEditComponent, _ as AXPConditionBuilderWidgetViewComponent, $ as AXPConditionClauseWidget, a0 as AXPConditionClauseWidgetEditComponent, a1 as AXPConnectedDragDropListsWidget, a2 as AXPConnectedListsWidgetColumnComponent, a3 as AXPConnectedListsWidgetEditComponent, a4 as AXPConnectedListsWidgetViewComponent, a5 as AXPContactWidget, a6 as AXPContactWidgetColumnComponent, a7 as AXPContactWidgetEditComponent, a8 as AXPContactWidgetViewComponent, a9 as AXPDataListColumnFooterComponent, aa as AXPDataListWidget, ab as AXPDataListWidgetViewComponent, ac as AXPDataSourceOptionsWidget, ad as AXPDataSourceOptionsWidgetEditComponent, ae as AXPDateTimeBoxWidget, af as AXPDateTimeBoxWidgetColumnComponent, ag as AXPDateTimeBoxWidgetEditComponent, ah as AXPDateTimeBoxWidgetViewComponent, ai as AXPDirectionWidget, aj as AXPDirectionWidgetEditComponent, ak as AXPDragDropListWidget, al as AXPEqualValidationWidget, am as AXPEqualValidationWidgetEditComponent, an as AXPFieldsetWidget, ao as AXPFieldsetWidgetDesignerComponent, ap as AXPFieldsetWidgetViewComponent, aq as AXPFileViewerWidget, ar as AXPFileViewerWidgetEditComponent, as as AXPFileViewerWidgetViewComponent, at as AXPFlexItemOptionsWidget, au as AXPFlexItemOptionsWidgetEditComponent, av as AXPFlexItemWidget, aw as AXPFlexItemWidgetDesignerComponent, ax as AXPFlexItemWidgetViewComponent, ay as AXPFlexOptionsWidget, az as AXPFlexOptionsWidgetEditComponent, aA as AXPFlexWidget, aB as AXPFlexWidgetDesignerComponent, aC as AXPFlexWidgetViewComponent, aD as AXPGetWidgetsForAIQuery, aE as AXPGreaterThanExpressionValidationWidget, aF as AXPGreaterThanValidationWidgetEditComponent, aG as AXPGridItemOptionsWidget, aH as AXPGridItemOptionsWidgetEditComponent, aI as AXPGridOptionsWidget, aJ as AXPGridOptionsWidgetEditComponent, aK as AXPImageMarkerPopupComponent, aL as AXPImageMarkerWidget, aM as AXPImageMarkerWidgetColumnComponent, aN as AXPImageMarkerWidgetEditComponent, aO as AXPImageMarkerWidgetViewComponent, aP as AXPIntegrationConnectionActionsService, aQ as AXPIntegrationConnectionsPanelWidget, aR as AXPIntegrationConnectionsPanelWidgetEditComponent, aS as AXPItemConfiguratorWidget, aT as AXPItemConfiguratorWidgetColumnComponent, aU as AXPItemConfiguratorWidgetEditComponent, aV as AXPJsonViewerWidget, aW as AXPJsonViewerWidgetEditComponent, aX as AXPJsonViewerWidgetViewComponent, aY as AXPLargeTextWidget, aZ as AXPLargeTextWidgetColumnComponent, a_ as AXPLargeTextWidgetEditComponent, a$ as AXPLargeTextWidgetPrintComponent, b0 as AXPLargeTextWidgetViewComponent, b1 as AXPLessThanExpressionValidationWidget, b2 as AXPLessThanValidationWidgetEditComponent, b3 as AXPListStylingRulesExtendedWidget, b4 as AXPListWidgetColumnComponent, b5 as AXPListWidgetEditComponent, b6 as AXPListWidgetViewComponent, b7 as AXPLocalDataSourceSheetWidget, b8 as AXPLocalDataSourceSheetWidgetEditComponent, b9 as AXPMapWidgetEditComponent, ba as AXPMapWidgetViewComponent, bb as AXPMaxLengthExpressionValidationWidget, bc as AXPMaxLengthValidationWidgetEditComponent, bd as AXPMinLengthExpressionValidationWidget, be as AXPMinLengthValidationWidgetEditComponent, bf as AXPNodeRendererWidget, bg as AXPNodeRendererWidgetDesignerComponent, bh as AXPNodeRendererWidgetEditComponent, bi as AXPNodeRendererWidgetViewComponent, bj as AXPNumberBoxWidget, bk as AXPNumberBoxWidgetColumnComponent, bl as AXPNumberBoxWidgetEditComponent, bm as AXPNumberBoxWidgetPrintComponent, bn as AXPNumberBoxWidgetViewComponent, bo as AXPOutcomeResultsViewerWidget, bp as AXPOutcomeResultsViewerWidgetViewComponent, bq as AXPPageWidget, br as AXPPageWidgetViewComponent, bs as AXPPasswordBoxWidget, bt as AXPPasswordBoxWidgetColumnComponent, bu as AXPPasswordBoxWidgetEditComponent, bv as AXPPasswordBoxWidgetViewComponent, bw as AXPProgressBarWidget, bx as AXPProgressBarWidgetColumnComponent, by as AXPProgressBarWidgetEditComponent, bz as AXPProgressBarWidgetViewComponent, bA as AXPProviderSelectWidgetColumnComponent, bB as AXPProviderSelectWidgetEditBase, bC as AXPProviderSelectWidgetViewComponent, bD as AXPQrcodeViewerService, bE as AXPQrcodeWidget, bF as AXPQrcodeWidgetColumnComponent, bG as AXPQrcodeWidgetEditComponent, bH as AXPQrcodeWidgetViewComponent, bI as AXPRatePickerWidget, bJ as AXPRatePickerWidgetColumnComponent, bK as AXPRatePickerWidgetEditComponent, bL as AXPRatePickerWidgetViewComponent, bM as AXPRegularExpressionValidationWidget, bN as AXPRegularExpressionValidationWidgetEditComponent, bO as AXPRepeaterWidget, bP as AXPRepeaterWidgetDesignerComponent, bQ as AXPRepeaterWidgetEditComponent, bR as AXPRepeaterWidgetViewComponent, bS as AXPRequiredValidationWidget, bT as AXPRequiredValidationWidgetEditComponent, bU as AXPRichTextWidget, bV as AXPRichTextWidgetColumnComponent, bW as AXPRichTextWidgetEditComponent, bX as AXPRichTextWidgetPrintComponent, bY as AXPRichTextWidgetViewComponent, bZ as AXPSchedulerPickerWidget, b_ as AXPSelectBoxWidget, b$ as AXPSelectBoxWidgetColumnComponent, c0 as AXPSelectBoxWidgetEditComponent, c1 as AXPSelectBoxWidgetViewComponent, c2 as AXPSelectLanguagePopup, c3 as AXPSelectionListWidget, c4 as AXPSelectionListWidgetColumnComponent, c5 as AXPSelectionListWidgetDesignerComponent, c6 as AXPSelectionListWidgetEditComponent, c7 as AXPSelectionListWidgetViewComponent, c8 as AXPSignatureWidget, c9 as AXPSignatureWidgetColumnComponent, ca as AXPSignatureWidgetEditComponent, cb as AXPSignatureWidgetViewComponent, cc as AXPSpacingWidget, cd as AXPSpacingWidgetEditComponent, ce as AXPStatusChipComponent, cf as AXPStatusWidget, cg as AXPStatusWidgetColumnComponent, ch as AXPStatusWidgetEditComponent, ci as AXPStatusWidgetViewComponent, cj as AXPStepWizardWidget, ck as AXPStepWizardWidgetDesignerComponent, cl as AXPStepWizardWidgetViewComponent, cm as AXPStopwatchWidget, cn as AXPStopwatchWidgetViewComponent, co as AXPTableItemWidget, cp as AXPTableItemWidgetDesignerComponent, cq as AXPTableItemWidgetViewComponent, cr as AXPTableWidget, cs as AXPTableWidgetDesignerComponent, ct as AXPTableWidgetViewComponent, cu as AXPTagEditorWidget, cv as AXPTagEditorWidgetColumnComponent, cw as AXPTagEditorWidgetEditComponent, cx as AXPTagEditorWidgetViewComponent, cy as AXPTemplateBoxWidget, cz as AXPTemplateBoxWidgetColumnComponent, cA as AXPTemplateBoxWidgetEditComponent, cB as AXPTemplateBoxWidgetPrintComponent, cC as AXPTemplateBoxWidgetViewComponent, cD as AXPTextBoxWidget, cE as AXPTextBoxWidgetColumnComponent, cF as AXPTextBoxWidgetEditComponent, cG as AXPTextBoxWidgetPrintComponent, cH as AXPTextBoxWidgetViewComponent, cI as AXPToggleWidget, cJ as AXPToggleWidgetColumnComponent, cK as AXPToggleWidgetEditComponent, cL as AXPToggleWidgetPrintComponent, cM as AXPToggleWidgetViewComponent, cN as AXPWidgetFieldConfiguratorWidget, cO as AXPWidgetFieldConfiguratorWidgetColumnComponent, cP as AXPWidgetFieldConfiguratorWidgetEditComponent, cQ as AXPWidgetsModule, cR as AXP_ABSOLUTE_UNITS, cS as AXP_BORDER_RADIUS_UNITS, cT as AXP_BORDER_WIDTH_UNITS, cU as AXP_CONDITION_CLAUSE_WIDGET_NAME, cV as AXP_DATA_LIST_CMD_DELETE, cW as AXP_DATA_LIST_CMD_EDIT, cX as AXP_DATA_LIST_PENDING_DELETE_KEY, cY as AXP_DATETIME_FILTER_DEFAULT_OPERATOR, cZ as AXP_Flex_Box_Align_Options, c_ as AXP_Flex_Box_Alignments, c$ as AXP_Flex_Box_Justify_Options, d0 as AXP_Grid_Box_Align_Items_Options, d1 as AXP_Grid_Box_Alignments, d2 as AXP_Grid_Box_Justify_Items_Options, d3 as AXP_LIST_STYLING_RULES_WIDGET_NAME, d4 as AXP_LOCAL_DATA_SOURCE_SHEET_WIDGET_NAME, d5 as AXP_RELATIVE_UNITS, d6 as AXP_RELATIVE_UNITS_NO_PERCENT, A as AXP_REPEATER_ENTITY_BY_KEY_LOOKUP, d7 as AXP_ROW_EXPR_PREFIX, d8 as AXP_SELECT_FILTER_DEFAULT_OPERATOR, d9 as AXP_SPACING_UNITS, da as AXP_default_Border_Box_Units, db as AXP_default_Border_Box_Value, dc as AXP_default_Spacing_Box_Units, dd as AXP_default_Spacing_Box_Value, de as DEFAULT_QRCODE_SIZE, df as DEFAULT_STRATEGY_CONFIG, dg as STRATEGY_CONFIG_TOKEN, dh as applyLeafVisibilityToDataListColumnTree, di as flattenDataListWidgetColumns, dj as formatConditionBuilderChip, dk as formatConditionBuilderSentence, dl as isDataListColumnBand, dm as prepareNodeRendererChild, dn as resolveColorChooserGroups, dp as resolveDataListColumnWidth, dq as tokensToPlainText } from './acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-D5pndfBW.mjs';
1
+ export { b as AXPAdvancedGridItemWidget, c as AXPAdvancedGridItemWidgetDesignerComponent, d as AXPAdvancedGridItemWidgetViewComponent, e as AXPAdvancedGridOptionsWidget, f as AXPAdvancedGridOptionsWidgetEditComponent, g as AXPAdvancedGridWidget, h as AXPAdvancedGridWidgetDesignerComponent, i as AXPAdvancedGridWidgetViewComponent, j as AXPAvatarWidget, k as AXPAvatarWidgetColumnComponent, l as AXPAvatarWidgetDesignerComponent, m as AXPAvatarWidgetEditComponent, n as AXPAvatarWidgetViewComponent, o as AXPBetweenExpressionValidationWidget, p as AXPBetweenValidationWidgetEditComponent, q as AXPBlockWidget, r as AXPBlockWidgetDesignerComponent, s as AXPBlockWidgetViewComponent, u as AXPBorderWidget, v as AXPBorderWidgetEditComponent, w as AXPButtonWidget, x as AXPButtonWidgetColumnComponent, y as AXPButtonWidgetViewComponent, z as AXPCallbackValidationWidget, B as AXPCallbackValidationWidgetEditComponent, C as AXPCheckBoxWidget, D as AXPCheckBoxWidgetColumnComponent, E as AXPCheckBoxWidgetDesignerComponent, F as AXPCheckBoxWidgetEditComponent, G as AXPCheckBoxWidgetPrintComponent, H as AXPCheckBoxWidgetViewComponent, I as AXPCodeEditorWidget, J as AXPColorBoxWidget, K as AXPColorBoxWidgetColumnComponent, L as AXPColorBoxWidgetDesignerComponent, M as AXPColorBoxWidgetEditComponent, N as AXPColorBoxWidgetViewComponent, O as AXPColorChooserWidget, P as AXPColorChooserWidgetColumnComponent, Q as AXPColorChooserWidgetDesignerComponent, R as AXPColorChooserWidgetEditComponent, S as AXPColorChooserWidgetViewComponent, T as AXPColorPaletteWidget, U as AXPColorPaletteWidgetColumnComponent, V as AXPColorPaletteWidgetDesignerComponent, W as AXPColorPaletteWidgetEditComponent, X as AXPColorPaletteWidgetViewComponent, Y as AXPConditionBuilderWidget, Z as AXPConditionBuilderWidgetEditComponent, _ as AXPConditionBuilderWidgetViewComponent, $ as AXPConditionClauseWidget, a0 as AXPConditionClauseWidgetEditComponent, a1 as AXPConnectedDragDropListsWidget, a2 as AXPConnectedListsWidgetColumnComponent, a3 as AXPConnectedListsWidgetEditComponent, a4 as AXPConnectedListsWidgetViewComponent, a5 as AXPContactWidget, a6 as AXPContactWidgetColumnComponent, a7 as AXPContactWidgetEditComponent, a8 as AXPContactWidgetViewComponent, a9 as AXPDataListColumnFooterComponent, aa as AXPDataListWidget, ab as AXPDataListWidgetViewComponent, ac as AXPDataSourceOptionsWidget, ad as AXPDataSourceOptionsWidgetEditComponent, ae as AXPDateTimeBoxWidget, af as AXPDateTimeBoxWidgetColumnComponent, ag as AXPDateTimeBoxWidgetEditComponent, ah as AXPDateTimeBoxWidgetViewComponent, ai as AXPDirectionWidget, aj as AXPDirectionWidgetEditComponent, ak as AXPDragDropListWidget, al as AXPEqualValidationWidget, am as AXPEqualValidationWidgetEditComponent, an as AXPFieldsetWidget, ao as AXPFieldsetWidgetDesignerComponent, ap as AXPFieldsetWidgetViewComponent, aq as AXPFileViewerWidget, ar as AXPFileViewerWidgetEditComponent, as as AXPFileViewerWidgetViewComponent, at as AXPFlexItemOptionsWidget, au as AXPFlexItemOptionsWidgetEditComponent, av as AXPFlexItemWidget, aw as AXPFlexItemWidgetDesignerComponent, ax as AXPFlexItemWidgetViewComponent, ay as AXPFlexOptionsWidget, az as AXPFlexOptionsWidgetEditComponent, aA as AXPFlexWidget, aB as AXPFlexWidgetDesignerComponent, aC as AXPFlexWidgetViewComponent, aD as AXPGetWidgetsForAIQuery, aE as AXPGreaterThanExpressionValidationWidget, aF as AXPGreaterThanValidationWidgetEditComponent, aG as AXPGridItemOptionsWidget, aH as AXPGridItemOptionsWidgetEditComponent, aI as AXPGridOptionsWidget, aJ as AXPGridOptionsWidgetEditComponent, aK as AXPImageMarkerPopupComponent, aL as AXPImageMarkerWidget, aM as AXPImageMarkerWidgetColumnComponent, aN as AXPImageMarkerWidgetEditComponent, aO as AXPImageMarkerWidgetViewComponent, aP as AXPIntegrationConnectionActionsService, aQ as AXPIntegrationConnectionsPanelWidget, aR as AXPIntegrationConnectionsPanelWidgetEditComponent, aS as AXPItemConfiguratorWidget, aT as AXPItemConfiguratorWidgetColumnComponent, aU as AXPItemConfiguratorWidgetEditComponent, aV as AXPJsonViewerWidget, aW as AXPJsonViewerWidgetEditComponent, aX as AXPJsonViewerWidgetViewComponent, aY as AXPLargeTextWidget, aZ as AXPLargeTextWidgetColumnComponent, a_ as AXPLargeTextWidgetEditComponent, a$ as AXPLargeTextWidgetPrintComponent, b0 as AXPLargeTextWidgetViewComponent, b1 as AXPLessThanExpressionValidationWidget, b2 as AXPLessThanValidationWidgetEditComponent, b3 as AXPListStylingRulesExtendedWidget, b4 as AXPListWidgetColumnComponent, b5 as AXPListWidgetEditComponent, b6 as AXPListWidgetViewComponent, b7 as AXPLocalDataSourceSheetWidget, b8 as AXPLocalDataSourceSheetWidgetEditComponent, b9 as AXPMapWidgetEditComponent, ba as AXPMapWidgetViewComponent, bb as AXPMaxLengthExpressionValidationWidget, bc as AXPMaxLengthValidationWidgetEditComponent, bd as AXPMinLengthExpressionValidationWidget, be as AXPMinLengthValidationWidgetEditComponent, bf as AXPNodeRendererWidget, bg as AXPNodeRendererWidgetDesignerComponent, bh as AXPNodeRendererWidgetEditComponent, bi as AXPNodeRendererWidgetViewComponent, bj as AXPNumberBoxWidget, bk as AXPNumberBoxWidgetColumnComponent, bl as AXPNumberBoxWidgetEditComponent, bm as AXPNumberBoxWidgetPrintComponent, bn as AXPNumberBoxWidgetViewComponent, bo as AXPOutcomeResultsViewerWidget, bp as AXPOutcomeResultsViewerWidgetViewComponent, bq as AXPPageWidget, br as AXPPageWidgetViewComponent, bs as AXPPasswordBoxWidget, bt as AXPPasswordBoxWidgetColumnComponent, bu as AXPPasswordBoxWidgetEditComponent, bv as AXPPasswordBoxWidgetViewComponent, bw as AXPProgressBarWidget, bx as AXPProgressBarWidgetColumnComponent, by as AXPProgressBarWidgetEditComponent, bz as AXPProgressBarWidgetViewComponent, bA as AXPProviderSelectWidgetColumnComponent, bB as AXPProviderSelectWidgetEditBase, bC as AXPProviderSelectWidgetViewComponent, bD as AXPQrcodeViewerService, bE as AXPQrcodeWidget, bF as AXPQrcodeWidgetColumnComponent, bG as AXPQrcodeWidgetEditComponent, bH as AXPQrcodeWidgetViewComponent, bI as AXPRatePickerWidget, bJ as AXPRatePickerWidgetColumnComponent, bK as AXPRatePickerWidgetEditComponent, bL as AXPRatePickerWidgetViewComponent, bM as AXPRegularExpressionValidationWidget, bN as AXPRegularExpressionValidationWidgetEditComponent, bO as AXPRepeaterWidget, bP as AXPRepeaterWidgetDesignerComponent, bQ as AXPRepeaterWidgetEditComponent, bR as AXPRepeaterWidgetViewComponent, bS as AXPRequiredValidationWidget, bT as AXPRequiredValidationWidgetEditComponent, bU as AXPRichTextWidget, bV as AXPRichTextWidgetColumnComponent, bW as AXPRichTextWidgetEditComponent, bX as AXPRichTextWidgetPrintComponent, bY as AXPRichTextWidgetViewComponent, bZ as AXPSchedulerPickerWidget, b_ as AXPSelectBoxWidget, b$ as AXPSelectBoxWidgetColumnComponent, c0 as AXPSelectBoxWidgetEditComponent, c1 as AXPSelectBoxWidgetViewComponent, c2 as AXPSelectLanguagePopup, c3 as AXPSelectionListWidget, c4 as AXPSelectionListWidgetColumnComponent, c5 as AXPSelectionListWidgetDesignerComponent, c6 as AXPSelectionListWidgetEditComponent, c7 as AXPSelectionListWidgetViewComponent, c8 as AXPSignatureWidget, c9 as AXPSignatureWidgetColumnComponent, ca as AXPSignatureWidgetEditComponent, cb as AXPSignatureWidgetViewComponent, cc as AXPSpacingWidget, cd as AXPSpacingWidgetEditComponent, ce as AXPStatusChipComponent, cf as AXPStatusWidget, cg as AXPStatusWidgetColumnComponent, ch as AXPStatusWidgetEditComponent, ci as AXPStatusWidgetViewComponent, cj as AXPStepWizardWidget, ck as AXPStepWizardWidgetDesignerComponent, cl as AXPStepWizardWidgetViewComponent, cm as AXPStopwatchWidget, cn as AXPStopwatchWidgetViewComponent, co as AXPTableItemWidget, cp as AXPTableItemWidgetDesignerComponent, cq as AXPTableItemWidgetViewComponent, cr as AXPTableWidget, cs as AXPTableWidgetDesignerComponent, ct as AXPTableWidgetViewComponent, cu as AXPTagEditorWidget, cv as AXPTagEditorWidgetColumnComponent, cw as AXPTagEditorWidgetEditComponent, cx as AXPTagEditorWidgetViewComponent, cy as AXPTemplateBoxWidget, cz as AXPTemplateBoxWidgetColumnComponent, cA as AXPTemplateBoxWidgetEditComponent, cB as AXPTemplateBoxWidgetPrintComponent, cC as AXPTemplateBoxWidgetViewComponent, cD as AXPTextBoxWidget, cE as AXPTextBoxWidgetColumnComponent, cF as AXPTextBoxWidgetEditComponent, cG as AXPTextBoxWidgetPrintComponent, cH as AXPTextBoxWidgetViewComponent, cI as AXPToggleWidget, cJ as AXPToggleWidgetColumnComponent, cK as AXPToggleWidgetEditComponent, cL as AXPToggleWidgetPrintComponent, cM as AXPToggleWidgetViewComponent, cN as AXPWidgetFieldConfiguratorWidget, cO as AXPWidgetFieldConfiguratorWidgetColumnComponent, cP as AXPWidgetFieldConfiguratorWidgetEditComponent, cQ as AXPWidgetsModule, cR as AXP_ABSOLUTE_UNITS, cS as AXP_BORDER_RADIUS_UNITS, cT as AXP_BORDER_WIDTH_UNITS, cU as AXP_CONDITION_CLAUSE_WIDGET_NAME, cV as AXP_DATA_LIST_CMD_DELETE, cW as AXP_DATA_LIST_CMD_EDIT, cX as AXP_DATA_LIST_PENDING_DELETE_KEY, cY as AXP_DATETIME_FILTER_DEFAULT_OPERATOR, cZ as AXP_Flex_Box_Align_Options, c_ as AXP_Flex_Box_Alignments, c$ as AXP_Flex_Box_Justify_Options, d0 as AXP_Grid_Box_Align_Items_Options, d1 as AXP_Grid_Box_Alignments, d2 as AXP_Grid_Box_Justify_Items_Options, d3 as AXP_LIST_STYLING_RULES_WIDGET_NAME, d4 as AXP_LOCAL_DATA_SOURCE_SHEET_WIDGET_NAME, d5 as AXP_RELATIVE_UNITS, d6 as AXP_RELATIVE_UNITS_NO_PERCENT, A as AXP_REPEATER_ENTITY_BY_KEY_LOOKUP, d7 as AXP_ROW_EXPR_PREFIX, d8 as AXP_SELECT_FILTER_DEFAULT_OPERATOR, d9 as AXP_SPACING_UNITS, da as AXP_default_Border_Box_Units, db as AXP_default_Border_Box_Value, dc as AXP_default_Spacing_Box_Units, dd as AXP_default_Spacing_Box_Value, de as DEFAULT_QRCODE_SIZE, df as DEFAULT_STRATEGY_CONFIG, dg as STRATEGY_CONFIG_TOKEN, dh as applyLeafVisibilityToDataListColumnTree, di as flattenDataListWidgetColumns, dj as formatConditionBuilderChip, dk as formatConditionBuilderSentence, dl as isDataListColumnBand, dm as prepareNodeRendererChild, dn as resolveColorChooserGroups, dp as resolveDataListColumnWidth, dq as tokensToPlainText } from './acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-D9WiRo-_.mjs';
2
2
  export * from '@acorex-platform/framework-client/layout/widget-core';
3
3
  export { AXP_WIDGET_AI_AGENT_ASSIST_FOLLOW_UP_CHIPS_LAYOUT, AXP_WIDGET_AI_AGENT_CHART_LAYOUT, AXP_WIDGET_AI_AGENT_FORM_LAYOUT, AXP_WIDGET_AI_AGENT_NAMES, matchesWidgetAiAgent } from '@acorex-platform/framework-shared/runtime';
4
4
  //# sourceMappingURL=acorex-platform-framework-client-layout-widgets.mjs.map
@@ -1,5 +1,5 @@
1
1
  import * as i1$3 from '@acorex-platform/framework-client/core';
2
- import { AXPScreenSize, AXPDeviceService, AXPDebugService, OVERLAY_LAYOUT_TRACE_NS, AXP_APP_STARTUP_PRIORITY, AXPComponentSlotModule, AXP_LOGO_THEME_RESOLVER } from '@acorex-platform/framework-client/core';
2
+ import { AXPScreenSize, AXPDeviceService, AXPDebugService, OVERLAY_LAYOUT_TRACE_NS, AXPDialogOpener, AXP_APP_STARTUP_PRIORITY, AXPComponentSlotModule, AXP_LOGO_THEME_RESOLVER, AXP_ROOT_LOADING } from '@acorex-platform/framework-client/core';
3
3
  import * as i2 from '@acorex/components/button';
4
4
  import { AXButtonModule } from '@acorex/components/button';
5
5
  import * as i3 from '@acorex/components/decorators';
@@ -1418,6 +1418,7 @@ class AXPIconChooserWidgetEditComponent extends AXPValueWidgetComponent {
1418
1418
  constructor() {
1419
1419
  super(...arguments);
1420
1420
  this.popupService = inject(AXPopupService);
1421
+ this.dialogOpener = inject(AXPDialogOpener);
1421
1422
  this.computedValue = computed(() => {
1422
1423
  const value = this.getValue();
1423
1424
  if (typeof value === 'string') {
@@ -1437,12 +1438,18 @@ class AXPIconChooserWidgetEditComponent extends AXPValueWidgetComponent {
1437
1438
  ...(ngDevMode ? [{ debugName: "computedValue" }] : /* istanbul ignore next */ []));
1438
1439
  }
1439
1440
  async openPopup() {
1440
- const result = await this.popupService.open(AXPIconChooserPopupComponent, {
1441
- title: 'Choose Icon',
1442
- size: 'md',
1441
+ const result = await this.dialogOpener.openPopup({
1442
+ load: () => Promise.resolve(AXPIconChooserPopupComponent),
1443
1443
  data: {
1444
1444
  value: this.getValue(),
1445
1445
  },
1446
+ show: (component) => this.popupService.open(component, {
1447
+ title: 'Choose Icon',
1448
+ size: 'md',
1449
+ data: {
1450
+ value: this.getValue(),
1451
+ },
1452
+ }),
1446
1453
  });
1447
1454
  if (result?.data) {
1448
1455
  this.setValue(result.data.styleClass + ' ' + result.data.iconClass);
@@ -2237,6 +2244,7 @@ class AXPFontStyleChooserWidgetComponent extends AXPValueWidgetComponent {
2237
2244
  this.localePort = inject(AXP_LOCALE_MANAGEMENT_PORT, { optional: true });
2238
2245
  this.regionalFontLoader = inject(AXPRegionalFontStyleLoaderService);
2239
2246
  this.popupService = inject(AXPopupService);
2247
+ this.dialogOpener = inject(AXPDialogOpener);
2240
2248
  this.translateService = inject(AXTranslationService);
2241
2249
  this.destroyRef = inject(DestroyRef);
2242
2250
  //#endregion
@@ -2285,14 +2293,25 @@ class AXPFontStyleChooserWidgetComponent extends AXPValueWidgetComponent {
2285
2293
  if (this.isInteractionDisabled()) {
2286
2294
  return;
2287
2295
  }
2288
- await this.refreshFonts();
2289
- const result = await this.popupService.open(AXPFontStyleChooserPopupComponent, {
2290
- title: await this.translateService.translateAsync('@general:widgets.font-style-chooser.popup-title'),
2291
- size: 'md',
2296
+ let title = '';
2297
+ const result = await this.dialogOpener.openPopup({
2298
+ load: () => Promise.resolve(AXPFontStyleChooserPopupComponent),
2292
2299
  data: {
2293
- fonts: this.fonts(),
2294
2300
  selectedFontId: this.selectedFontId(),
2301
+ language: this.languageCode(),
2295
2302
  },
2303
+ prepare: async () => {
2304
+ await this.refreshFonts();
2305
+ title = await this.translateService.translateAsync('@general:widgets.font-style-chooser.popup-title');
2306
+ },
2307
+ show: (component) => this.popupService.open(component, {
2308
+ title,
2309
+ size: 'md',
2310
+ data: {
2311
+ fonts: this.fonts(),
2312
+ selectedFontId: this.selectedFontId(),
2313
+ },
2314
+ }),
2296
2315
  });
2297
2316
  const fontId = result?.data?.fontId;
2298
2317
  if (fontId) {
@@ -3176,6 +3195,16 @@ class AXPThemesSharedModule {
3176
3195
  provide: AXP_LOGO_THEME_RESOLVER,
3177
3196
  useExisting: AXPLayoutThemeService,
3178
3197
  },
3198
+ {
3199
+ provide: AXP_ROOT_LOADING,
3200
+ useFactory: () => {
3201
+ const theme = inject(AXPLayoutThemeService);
3202
+ return {
3203
+ setNavigationLoading: (active) => theme.setNavigationLoading(active),
3204
+ setOverlayLoading: (active) => theme.setOverlayLoading(active),
3205
+ };
3206
+ },
3207
+ },
3179
3208
  { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXPThemesSharedWidgetsProvider, multi: true },
3180
3209
  {
3181
3210
  provide: AXP_SETTING_DEFINITION_PROVIDER,
@@ -3220,6 +3249,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
3220
3249
  provide: AXP_LOGO_THEME_RESOLVER,
3221
3250
  useExisting: AXPLayoutThemeService,
3222
3251
  },
3252
+ {
3253
+ provide: AXP_ROOT_LOADING,
3254
+ useFactory: () => {
3255
+ const theme = inject(AXPLayoutThemeService);
3256
+ return {
3257
+ setNavigationLoading: (active) => theme.setNavigationLoading(active),
3258
+ setOverlayLoading: (active) => theme.setOverlayLoading(active),
3259
+ };
3260
+ },
3261
+ },
3223
3262
  { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXPThemesSharedWidgetsProvider, multi: true },
3224
3263
  {
3225
3264
  provide: AXP_SETTING_DEFINITION_PROVIDER,