@acorex-platform/framework-client 0.0.37 → 0.0.46

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 (104) hide show
  1. package/fesm2022/acorex-platform-framework-client-auth.mjs +212 -44
  2. package/fesm2022/acorex-platform-framework-client-auth.mjs.map +1 -1
  3. package/fesm2022/{acorex-platform-framework-client-common-common-settings.provider-CzBr0cRi.mjs → acorex-platform-framework-client-common-common-settings.provider-ChU2tvyt.mjs} +31 -1
  4. package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-ChU2tvyt.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-framework-client-common.mjs +848 -76
  6. package/fesm2022/acorex-platform-framework-client-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-framework-client-core.mjs +273 -96
  8. package/fesm2022/acorex-platform-framework-client-core.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-framework-client-layout-builder.mjs +292 -11
  10. package/fesm2022/acorex-platform-framework-client-layout-builder.mjs.map +1 -1
  11. package/fesm2022/{acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-Bp2cNCPO.mjs → acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-BqPaHKPM.mjs} +10 -6
  12. package/fesm2022/acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-BqPaHKPM.mjs.map +1 -0
  13. package/fesm2022/acorex-platform-framework-client-layout-components-property-viewer-inline-code-editor.component-CcpUTEVQ.mjs +66 -0
  14. package/fesm2022/acorex-platform-framework-client-layout-components-property-viewer-inline-code-editor.component-CcpUTEVQ.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-framework-client-layout-components-resource-appointment-board.component-DCkpgsFH.mjs +195 -0
  16. package/fesm2022/acorex-platform-framework-client-layout-components-resource-appointment-board.component-DCkpgsFH.mjs.map +1 -0
  17. package/fesm2022/acorex-platform-framework-client-layout-components.mjs +3987 -1020
  18. package/fesm2022/acorex-platform-framework-client-layout-components.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-framework-client-layout-designer.mjs +1179 -304
  20. package/fesm2022/acorex-platform-framework-client-layout-designer.mjs.map +1 -1
  21. package/fesm2022/{acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-C74cBc-K.mjs → acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-Dc_NpBx6.mjs} +1697 -323
  22. package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-Dc_NpBx6.mjs.map +1 -0
  23. package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-B6nG9dIS.mjs → acorex-platform-framework-client-layout-entity-attachments-page.component-Cx-n7ZuA.mjs} +2 -2
  24. package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-B6nG9dIS.mjs.map → acorex-platform-framework-client-layout-entity-attachments-page.component-Cx-n7ZuA.mjs.map} +1 -1
  25. package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-DLQA_Q2Y.mjs → acorex-platform-framework-client-layout-entity-bulk-entity.command-BONV249y.mjs} +2 -2
  26. package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-DLQA_Q2Y.mjs.map → acorex-platform-framework-client-layout-entity-bulk-entity.command-BONV249y.mjs.map} +1 -1
  27. package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-B4wC1iqZ.mjs → acorex-platform-framework-client-layout-entity-gallery-page.component-uTG2nFly.mjs} +2 -2
  28. package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-B4wC1iqZ.mjs.map → acorex-platform-framework-client-layout-entity-gallery-page.component-uTG2nFly.mjs.map} +1 -1
  29. package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +1 -1
  30. package/fesm2022/acorex-platform-framework-client-layout-views.mjs +3 -3
  31. package/fesm2022/acorex-platform-framework-client-layout-views.mjs.map +1 -1
  32. package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs +3854 -3278
  33. package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs.map +1 -1
  34. package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-CDpzvn6z.mjs +33191 -0
  35. package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-CDpzvn6z.mjs.map +1 -0
  36. package/fesm2022/{acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BDOdcoyN.mjs → acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BkrPu1wO.mjs} +8 -5
  37. package/fesm2022/acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BkrPu1wO.mjs.map +1 -0
  38. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-value.util-Cb7R1qLO.mjs +45 -0
  39. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-value.util-Cb7R1qLO.mjs.map +1 -0
  40. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-BL621E1r.mjs +68 -0
  41. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-BL621E1r.mjs.map +1 -0
  42. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-edit.component-CVsPKhNl.mjs +88 -0
  43. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-edit.component-CVsPKhNl.mjs.map +1 -0
  44. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-view.component-BEq4O4al.mjs +71 -0
  45. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-view.component-BEq4O4al.mjs.map +1 -0
  46. package/fesm2022/acorex-platform-framework-client-layout-widgets-condition-builder-edit-popup.component-WpiEHusZ.mjs +81 -0
  47. package/fesm2022/acorex-platform-framework-client-layout-widgets-condition-builder-edit-popup.component-WpiEHusZ.mjs.map +1 -0
  48. package/fesm2022/{acorex-platform-framework-client-layout-widgets-page-widget-designer.component-WzIiwnGC.mjs → acorex-platform-framework-client-layout-widgets-page-widget-designer.component-Cadl6guA.mjs} +41 -23
  49. package/fesm2022/acorex-platform-framework-client-layout-widgets-page-widget-designer.component-Cadl6guA.mjs.map +1 -0
  50. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-4mX8aYzA.mjs → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-Cw3NhWL8.mjs} +3 -3
  51. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-4mX8aYzA.mjs.map → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-Cw3NhWL8.mjs.map} +1 -1
  52. package/fesm2022/acorex-platform-framework-client-layout-widgets-scheduler-picker-widget-column.component-Clb27Loe.mjs +71 -0
  53. package/fesm2022/acorex-platform-framework-client-layout-widgets-scheduler-picker-widget-column.component-Clb27Loe.mjs.map +1 -0
  54. package/fesm2022/acorex-platform-framework-client-layout-widgets-scheduler-picker-widget-edit.component-l7q8A-D3.mjs +111 -0
  55. package/fesm2022/acorex-platform-framework-client-layout-widgets-scheduler-picker-widget-edit.component-l7q8A-D3.mjs.map +1 -0
  56. package/fesm2022/acorex-platform-framework-client-layout-widgets-scheduler-picker-widget-view.component-Cc1AH09b.mjs +77 -0
  57. package/fesm2022/acorex-platform-framework-client-layout-widgets-scheduler-picker-widget-view.component-Cc1AH09b.mjs.map +1 -0
  58. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-TWxthl21.mjs → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-BCLxS3rS.mjs} +3 -3
  59. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-TWxthl21.mjs.map → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-BCLxS3rS.mjs.map} +1 -1
  60. package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-D6HFPmGC.mjs → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-BEa-vD6O.mjs} +21 -8
  61. package/fesm2022/acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-BEa-vD6O.mjs.map +1 -0
  62. package/fesm2022/acorex-platform-framework-client-layout-widgets-trigger-expression-editor-popup.component-C2PGoC7r.mjs +124 -0
  63. package/fesm2022/acorex-platform-framework-client-layout-widgets-trigger-expression-editor-popup.component-C2PGoC7r.mjs.map +1 -0
  64. package/fesm2022/acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-DDDoPoQa.mjs +345 -0
  65. package/fesm2022/acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-DDDoPoQa.mjs.map +1 -0
  66. package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs +1 -31985
  67. package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs.map +1 -1
  68. package/fesm2022/acorex-platform-framework-client-realtime.mjs +2 -1
  69. package/fesm2022/acorex-platform-framework-client-realtime.mjs.map +1 -1
  70. package/fesm2022/acorex-platform-framework-client-runtime.mjs +47 -3
  71. package/fesm2022/acorex-platform-framework-client-runtime.mjs.map +1 -1
  72. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-single-view.component-DBUwSzvg.mjs → acorex-platform-framework-client-themes-default-entity-master-single-view.component-CHLsBvBE.mjs} +2 -2
  73. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-single-view.component-DBUwSzvg.mjs.map → acorex-platform-framework-client-themes-default-entity-master-single-view.component-CHLsBvBE.mjs.map} +1 -1
  74. package/fesm2022/acorex-platform-framework-client-themes-default.mjs +373 -70
  75. package/fesm2022/acorex-platform-framework-client-themes-default.mjs.map +1 -1
  76. package/fesm2022/{acorex-platform-framework-client-themes-shared-settings.provider-CpsAIsxj.mjs → acorex-platform-framework-client-themes-shared-settings.provider-DIkjSTU7.mjs} +102 -1
  77. package/fesm2022/acorex-platform-framework-client-themes-shared-settings.provider-DIkjSTU7.mjs.map +1 -0
  78. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs +174 -22
  79. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs.map +1 -1
  80. package/package.json +2 -2
  81. package/realtime/README.md +1 -1
  82. package/types/acorex-platform-framework-client-auth.d.ts +18 -1
  83. package/types/acorex-platform-framework-client-common.d.ts +209 -8
  84. package/types/acorex-platform-framework-client-core.d.ts +166 -121
  85. package/types/acorex-platform-framework-client-layout-builder.d.ts +29 -0
  86. package/types/acorex-platform-framework-client-layout-components.d.ts +699 -146
  87. package/types/acorex-platform-framework-client-layout-designer.d.ts +192 -14
  88. package/types/acorex-platform-framework-client-layout-entity.d.ts +159 -91
  89. package/types/acorex-platform-framework-client-layout-views.d.ts +16 -0
  90. package/types/acorex-platform-framework-client-layout-widget-core.d.ts +140 -37
  91. package/types/acorex-platform-framework-client-layout-widgets.d.ts +235 -117
  92. package/types/acorex-platform-framework-client-realtime.d.ts +16 -3
  93. package/types/acorex-platform-framework-client-runtime.d.ts +8 -0
  94. package/types/acorex-platform-framework-client-themes-default.d.ts +62 -11
  95. package/types/acorex-platform-framework-client-themes-shared.d.ts +25 -2
  96. package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-CzBr0cRi.mjs.map +0 -1
  97. package/fesm2022/acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-Bp2cNCPO.mjs.map +0 -1
  98. package/fesm2022/acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-BtLEUWAA.mjs +0 -77
  99. package/fesm2022/acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-BtLEUWAA.mjs.map +0 -1
  100. package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-C74cBc-K.mjs.map +0 -1
  101. package/fesm2022/acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BDOdcoyN.mjs.map +0 -1
  102. package/fesm2022/acorex-platform-framework-client-layout-widgets-page-widget-designer.component-WzIiwnGC.mjs.map +0 -1
  103. package/fesm2022/acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-D6HFPmGC.mjs.map +0 -1
  104. package/fesm2022/acorex-platform-framework-client-themes-shared-settings.provider-CpsAIsxj.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-framework-client-layout-designer.mjs","sources":["../../../../../libs/framework/client/layout/designer/src/lib/designer/shared/command.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/shared/designer-connector.service.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/shared/generic-commands.types.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/shared/designer.types.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/widget-picker/widget-picker-tab-context.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/widget-picker/widget-picker.service.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/shared/designer.service.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/add-widget-button/add-widget-button.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/add-widget-button/add-widget-line-button.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/add-widget-button/add-widget-mini-button.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/flex-drawer/flex-drawer.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/grid-drawer/grid-drawer.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/widget-picker/widget-picker.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/widget-picker/widget-picker.component.html","../../../../../libs/framework/client/layout/designer/src/lib/designer/shared/widget-designer-renderer.directive.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/board/board.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/board/board.component.html","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/breadcrumbs/breadcrumbs.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/shared/drawer-content/drawer-content.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/shared/drawer-content/drawer-content.component.html","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/drawers/data-sources/data-sources.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/drawers/data-sources/data-sources.component.html","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/drawers/history/history.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/drawers/history/history.component.html","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/drawers/outline/outline.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/drawers/outline/outline.component.html","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/drawers/pages/pages.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/drawers/pages/pages.component.html","../../../../../libs/framework/client/layout/designer/src/lib/designer/shared/layout-designer-header-menu.hooks.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/header-menu/header-menu.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/header-menu/header-menu.component.html","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/size-mode/view-size-toolbar.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/designer.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/designer.component.html","../../../../../libs/framework/client/layout/designer/src/lib/preview/preview-viewer.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/preview/preview-frame.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/preview/preview.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/preview/preview.component.html","../../../../../libs/framework/client/layout/designer/src/acorex-platform-framework-client-layout-designer.ts"],"sourcesContent":["\nimport type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport { computed, Injectable, signal } from \"@angular/core\";\nimport { cloneDeep, merge } from \"lodash-es\";\n\n// Command interface\nexport interface Command {\n execute(): void;\n undo(): void;\n description(): string;\n icon(): string;\n getExecutionSelection(): AXPWidgetNode; // Node to select after execution\n getUndoSelection(): AXPWidgetNode; // Node to select after undo\n}\n\n// AddWidgetCommand\nexport class AddWidgetCommand implements Command {\n private widget: AXPWidgetNode;\n private parent: AXPWidgetNode;\n private previousSelection: AXPWidgetNode;\n\n constructor(widget: AXPWidgetNode, parent: AXPWidgetNode, previousSelection: AXPWidgetNode) {\n this.widget = widget;\n this.parent = parent;\n this.previousSelection = previousSelection;\n }\n\n execute() {\n this.parent.children = this.parent.children || [];\n this.parent.children.push(this.widget);\n }\n\n undo() {\n this.parent.children = this.parent.children || [];\n const index = this.parent.children.indexOf(this.widget);\n if (index > -1) {\n this.parent.children.splice(index, 1);\n }\n }\n\n description() {\n return `Added widget ${this.widget.name}`;\n }\n\n icon() {\n return `fa-solid fa-square-plus`;\n }\n\n getExecutionSelection() {\n return this.widget; // After executing, select the newly added widget\n }\n\n getUndoSelection() {\n return this.previousSelection; // After undo, select the previously selected widget\n }\n}\n\n\nexport class RemoveWidgetCommand implements Command {\n private widget: AXPWidgetNode;\n private parent: AXPWidgetNode;\n private previousSelection: AXPWidgetNode;\n private index: number;\n\n constructor(widget: AXPWidgetNode, parent: AXPWidgetNode, previousSelection: AXPWidgetNode) {\n this.widget = widget;\n this.parent = parent;\n this.previousSelection = previousSelection;\n parent.children = parent.children || [];\n this.index = parent.children.indexOf(widget); // Capture the index for undo purposes\n }\n\n execute() {\n this.parent.children = this.parent.children || [];\n this.index = this.parent.children.indexOf(this.widget); // Re-assert the index in case it has changed\n this.parent.children.splice(this.index, 1);\n }\n\n undo() {\n this.parent.children = this.parent.children || [];\n this.parent.children.splice(this.index, 0, this.widget); // Reinsert at the original index\n }\n\n description() {\n return `Removed widget ${this.widget.name}`;\n }\n\n icon() {\n return `fa-solid fa-square-minus`;\n }\n\n getExecutionSelection() {\n return this.previousSelection; // Typically the parent or a nearby sibling could be focused\n }\n\n getUndoSelection() {\n return this.widget; // Select the widget itself when the operation is undone\n }\n}\n\nexport class UpdateWidgetCommand implements Command {\n private widget: AXPWidgetNode;\n private previousState: AXPWidgetNode;\n private newState: AXPWidgetNode;\n private previousSelection: AXPWidgetNode;\n\n constructor(widget: AXPWidgetNode, values: Partial<AXPWidgetNode>, previousSelection: AXPWidgetNode) {\n this.widget = widget;\n this.newState = merge(cloneDeep(widget), values);\n this.previousSelection = previousSelection;\n this.previousState = cloneDeep(widget);\n }\n\n execute() {\n merge(this.widget, this.newState)\n }\n\n undo() {\n this.deepPruneAndRestore(this.widget, this.previousState);\n }\n\n description() {\n return `Updated widget ${this.widget.name}`;\n }\n\n icon() {\n return `fa-solid fa-pen`;\n }\n\n getExecutionSelection() {\n return this.widget; // Focus the widget after it's updated\n }\n\n getUndoSelection() {\n return this.previousSelection; // Restore the focus to where it was before the update\n }\n\n private deepPruneAndRestore(current: any, original: any) {\n Object.keys(current).forEach(key => {\n if (original.hasOwnProperty(key)) {\n if (typeof current[key] === 'object' && current[key] !== null && !(current[key] instanceof Array)) {\n this.deepPruneAndRestore(current[key], original[key]);\n }\n } else {\n delete current[key]; // Remove properties not present in original\n }\n });\n\n // Restore the original properties\n merge(current, original);\n }\n}\n\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CommandManager {\n private undoStack = signal<Command[]>([]);\n private currentIndex = signal<number>(-1);\n public readonly selectedNode = signal<AXPWidgetNode | null>(null);\n\n public canUndo = computed(() => this.currentIndex() >= 0)\n public canRedo = computed(() => this.currentIndex() < this.undoStack().length - 1)\n\n executeCommand(command: Command) {\n // Check if the currentIndex is not at the end of the undoStack\n if (this.currentIndex() !== this.undoStack().length - 1) {\n // Remove all commands beyond the current index to discard the \"future\" commands\n const newUndoStack = this.undoStack().slice(0, this.currentIndex() + 1);\n this.undoStack.set(newUndoStack);\n }\n\n command.execute();\n this.undoStack.set([...this.undoStack(), command]); // Add the new command to the stack\n this.currentIndex.set(this.undoStack().length - 1); // Update currentIndex to the end of the stack\n this.selectedNode.set(command.getExecutionSelection()); // Update the selected node\n }\n\n undo() {\n if (this.currentIndex() >= 0) {\n const command = this.undoStack()[this.currentIndex()];\n command.undo();\n this.currentIndex.set(this.currentIndex() - 1);\n if (this.currentIndex() >= 0) {\n this.selectedNode.set(this.undoStack()[this.currentIndex()].getUndoSelection());\n } else {\n this.selectedNode.set(null); // No selection if all commands are undone\n }\n }\n }\n\n redo() {\n if (this.currentIndex() < this.undoStack().length - 1) {\n this.currentIndex.set(this.currentIndex() + 1);\n const command = this.undoStack()[this.currentIndex()];\n command.execute();\n this.selectedNode.set(command.getExecutionSelection());\n }\n }\n\n goToCommand(index: number) {\n if (index < 0 || index >= this.undoStack().length || index === this.currentIndex()) {\n return; // Out of bounds or already at the desired index\n }\n\n if (index > this.currentIndex()) {\n // Need to redo until reaching the desired index\n while (this.currentIndex() < index) {\n this.redo();\n }\n } else {\n // Need to undo until reaching the desired index\n while (this.currentIndex() > index) {\n this.undo();\n }\n }\n\n // Optionally update any UI components or state here\n this.selectedNode.set(this.undoStack()[this.currentIndex()].getExecutionSelection());\n }\n\n public history = computed(() => this.undoStack().map((cmd, index) => (\n {\n description: cmd.description(),\n icon: cmd.icon(),\n isPast: this.currentIndex() > index,\n isFuture: this.currentIndex() < index,\n isCurrent: this.currentIndex() == index\n }\n )))\n\n\n public clear() {\n this.undoStack.set([]);\n this.currentIndex.set(-1);\n }\n}","import { Injectable } from \"@angular/core\";\n\n\nexport interface AXPDesignerContent {\n json: string,\n html?: string\n}\n\n@Injectable()\nexport abstract class AXPDesignerConnector<T = string> {\n\n public abstract save(id: string, content: AXPDesignerContent): Promise<boolean>;\n\n public abstract saveAs(content: AXPDesignerContent): Promise<boolean>;\n\n public abstract load(id: T): Promise<string | null>;\n}","import { AXMenuItem } from '@acorex/components/menu';\nimport { assign, cloneDeep } from 'lodash-es';\n\nexport const AXP_DESIGNER_COPY_MENU: AXMenuItem = {\n text: 'Copy',\n name: 'copy',\n icon: 'fa-solid fa-copy',\n suffix: {\n text: 'Ctrl+C',\n },\n};\n\nexport const AXP_DESIGNER_CLONE_MENU: AXMenuItem = {\n text: 'Clone',\n name: 'clone',\n icon: 'fa-solid fa-clone',\n suffix: {\n text: 'Ctrl+D',\n },\n};\n\nexport const AXP_DESIGNER_CUT_MENU: AXMenuItem = {\n text: 'Cut',\n name: 'cut',\n icon: 'fa-solid fa-cut',\n suffix: {\n text: 'Ctrl+X',\n },\n};\n\nexport const AXP_DESIGNER_PASTE_MENU: AXMenuItem = {\n text: 'Paste',\n name: 'paste',\n icon: 'fa-solid fa-paste',\n suffix: {\n text: 'Ctrl+V',\n },\n};\n\nexport const AXP_DESIGNER_ADD_WIDGET_MENU: AXMenuItem = {\n text: 'Add Widget',\n name: 'add-widget',\n icon: 'fa-solid fa-plus',\n};\n\nexport const AXP_DESIGNER_SELECT_WIDGET_MENU: AXMenuItem = {\n text: 'Select',\n name: 'select',\n break: true,\n icon: 'fa-solid fa-arrow-pointer',\n}\n\nexport const AXP_DESIGNER_DELETE_WIDGET_MENU: AXMenuItem = {\n text: 'Delete',\n name: 'remove-widget',\n icon: 'fa-solid fa-trash',\n};\n\nexport const AXP_DESIGNER_SAVE_AS_WIDGET_MENU: AXMenuItem = {\n text: 'Save As...',\n name: 'save-as',\n icon: 'fa-solid fa-save',\n};\n\n\nexport function cloneWidgetMenu(item: AXMenuItem, options?: Partial<AXMenuItem>): AXMenuItem {\n return assign(cloneDeep(item), options);\n}\n","import type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport { AXMenuItem } from \"@acorex/components/menu\";\n\n\nexport type AXPDesignerMode =\n | { id: 'designer'; title: 'Designer' }\n | { id: 'view'; title: 'View' }\n | { id: 'edit'; title: 'Edit' };\n\nexport class AXPDesignerModes {\n static readonly View: AXPDesignerMode = { id: 'view', title: 'View' };\n static readonly Design: AXPDesignerMode = { id: 'designer', title: 'Designer' };\n static readonly Edit: AXPDesignerMode = { id: 'edit', title: 'Edit' };\n}\n\n\nexport enum AXPTemplateLoadingStrategy {\n Connector = \"Connector\",\n Broadcast = \"Broadcast\",\n}\n\n\n\nexport interface AXPDesignerWidgetComponent {\n onContextMenu(context: { items: AXMenuItem[] }): void\n executeCommand(command: { name: string, data?: any, handled: boolean }): Promise<void>\n}\n\nexport interface AXPDesignerPreviewMessage {\n id: string,\n document: AXPWidgetNode\n}\n\nexport interface AXPDesignerSaveFormMessage {\n id: string,\n success: boolean,\n content?: string\n}\n\nexport const AXPDesignerMessageKeys =\n{\n Preview: \"designer-preview\",\n Loaded: \"designer-preview-loaded\",\n ContextChanged: \"designer-preview-context-changed\",\n PreviewWindow: \"designer-open-preview-window\",\n RequestFormContent: \"designer-request-form-content\",\n ResponseFormContent: \"designer-response-form-content\",\n SaveForm: 'designer-save-form-content',\n FormSaved: 'designer-form-saved-content',\n}","/**\n * Suffixes for `forms:widgets:picker:last-tab:{id}` user settings keys.\n * Use one id per distinct widget-picker host (different tab strips / widget sets).\n */\nexport const AXP_WIDGET_PICKER_TAB_CONTEXT = {\n layoutDesignerFormElements: 'layout-designer-form-elements',\n dashboardHome: 'dashboard-home',\n} as const;\n","import { AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex-platform/framework-shared/widget-core';\nimport type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPWidgetRegistryService } from '@acorex-platform/framework-client/layout/widget-core';\nimport { inject, Injectable } from '@angular/core';\nimport { sortBy } from 'lodash-es';\n\nexport interface AXPWidgetPickerShowOptions {\n groups: AXPWidgetGroupEnum[];\n /** User-scoped last tab; unique per picker host (use `AXP_WIDGET_PICKER_TAB_CONTEXT`). */\n tabPersistenceContext: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPWidgetPickerService {\n private popupService = inject(AXPopupService);\n private widgetRegistryService = inject(AXPWidgetRegistryService);\n private translationService = inject(AXTranslationService);\n\n async showPicker(options: AXPWidgetPickerShowOptions): Promise<AXPWidgetNode[]> {\n const com = await import('./widget-picker.component').then((c) => c.AXPDesignerWidgetPickerComponent);\n const widgets = this.widgetRegistryService.all();\n const filteredWidgets = widgets.filter((c) => options.groups.some((d) => c.groups?.includes(d)));\n //\n const result = await this.popupService.open(com, {\n title: await this.translationService.translateAsync(\n '@form-template-management:designer.components.widget-picker.title',\n ),\n size: 'md',\n closeButton: true,\n data: {\n widgets: sortBy(filteredWidgets, (c) => c.title),\n tabPersistenceContext: options.tabPersistenceContext,\n },\n });\n //\n const selectedWidgets = (result.data?.widgets ?? []) as AXPWidgetConfig[];\n\n return selectedWidgets.map((c) => ({\n type: c.name as any,\n options: c.options,\n title: c.title,\n meta: c.meta,\n }));\n }\n}\n","import { AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex-platform/framework-shared/widget-core';\nimport { AXLoadingDialogButtonItem, AXLoadingDialogService } from '@acorex/components/loading-dialog';\nimport { AXMenuItem } from '@acorex/components/menu';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXFileService } from '@acorex/core/file';\nimport { type AXPWidgetNode, AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\nimport { AXPBaseWidgetComponent, AXPValueWidgetComponent, AXPWidgetRegistryService } from '@acorex-platform/framework-client/layout/widget-core';\nimport { computed, effect, inject, Injectable, signal } from '@angular/core';\nimport { cloneDeep, get, isEmpty, isNil, isNull, merge, result, set, sortBy } from 'lodash-es';\nimport { Subject } from 'rxjs';\nimport { AddWidgetCommand, CommandManager, RemoveWidgetCommand, UpdateWidgetCommand } from './command';\nimport { AXPDesignerConnector } from './designer-connector.service';\nimport {\n AXP_DESIGNER_ADD_WIDGET_MENU,\n AXP_DESIGNER_CLONE_MENU,\n AXP_DESIGNER_COPY_MENU,\n AXP_DESIGNER_CUT_MENU,\n AXP_DESIGNER_DELETE_WIDGET_MENU as AXP_DESIGNER_DELETE_WIDGET_MENU,\n AXP_DESIGNER_PASTE_MENU,\n AXP_DESIGNER_SAVE_AS_WIDGET_MENU,\n AXP_DESIGNER_SELECT_WIDGET_MENU,\n cloneWidgetMenu,\n} from './generic-commands.types';\nimport { AXPDesignerMessageKeys, AXPDesignerPreviewMessage, AXPDesignerSaveFormMessage, AXPDesignerWidgetComponent, AXPTemplateLoadingStrategy } from './designer.types';\nimport { AXPBroadcastEventService } from '@acorex-platform/framework-client/core';\nimport { AXP_WIDGET_PICKER_TAB_CONTEXT } from '../components/widget-picker/widget-picker-tab-context';\nimport { AXPWidgetPickerService } from '../components/widget-picker/widget-picker.service';\nexport type AXPDesignerPreviewSize = 'sm' | 'md' | 'lg' | 'xl' | 'xxl';\n\nexport interface AXPDesignerFocusCommand {\n widget: AXPWidgetNode | null;\n}\n\nexport interface AXPDesignerUpdateCommand {\n values: any;\n widget?: AXPWidgetNode | null;\n mode: 'init' | 'update';\n}\nexport interface AXPDesignerUpdateEvent {\n values: any;\n widget: AXPWidgetNode;\n}\n\nexport interface AXPDesignerSelectCommand {\n widget: AXPWidgetNode;\n}\n\nexport interface AXPDesignerRegisterCommand {\n id: number;\n widget: AXPWidgetNode;\n config: AXPWidgetConfig;\n instance: AXPBaseWidgetComponent;\n}\n\nexport interface AXPDesignerSelectEvent {\n widget: AXPWidgetNode;\n}\n\nexport interface AXPDesignerRefreshCommand {\n widget: AXPWidgetNode;\n}\nexport interface AXPDesignerRefreshEvent {\n widget: AXPWidgetNode;\n}\n\nexport interface AXPDesignerAddNodeCommand {\n widget: AXPWidgetNode;\n}\nexport interface AXPDesignerAddNodeEvent {\n widget: AXPWidgetNode;\n}\n\nexport interface AXPDesignerFocusEvent {\n widget: AXPWidgetNode | null;\n}\n\n@Injectable()\nexport class AXPDesignerService {\n private popupService = inject(AXPopupService);\n private toastService = inject(AXToastService);\n private fileService = inject(AXFileService);\n private loadingService = inject(AXLoadingDialogService);\n private widgetRegisteryService = inject(AXPWidgetRegistryService);\n private connector = inject(AXPDesignerConnector);\n private eventService = inject(AXPBroadcastEventService);\n private widgetPickerService = inject(AXPWidgetPickerService);\n\n public readonly document = signal(this.createDoc());\n public readonly currentPageIndex = signal(0);\n\n public readonly currentPage = signal(this.document().children?.[0] as AXPWidgetNode);\n\n private commandManager = inject(CommandManager);\n\n private clipboard = signal<AXPWidgetNode | null>(null);\n\n //\n public canCutCopy = computed(() => this.can(this.selectedNode()).copyOrCut);\n public canDelete = computed(() => this.can(this.selectedNode()).delete);\n public canInsert = computed(() => this.can(this.selectedNode()).insert);\n public canPaste = computed(() => this.can(this.selectedNode()).paste);\n //\n public readonly history = computed(() => this.commandManager.history());\n public readonly canUndo = computed(() => this.commandManager.canUndo());\n public readonly canRedo = computed(() => this.commandManager.canRedo());\n //\n public readonly canSave = computed(() => this.templateId() != null);\n\n public readonly unsavedChanges = signal(false);\n\n public breadcrumbs = computed<AXPWidgetNode[]>(() => {\n return this.selectedNode() ? this.findBreadcrumbs(this.currentPage(), this.selectedNode()) ?? [] : [];\n });\n\n public selectedNode = signal<AXPWidgetNode | null>(null);\n\n public selectedNodeConfig = computed(() => get(this.selectedNode(), '__meta__.config') as any as AXPWidgetConfig);\n\n private _focusedNode: AXPWidgetNode | null = null;\n public focusedNode = () => this._focusedNode;\n\n public readonly size = signal<AXPDesignerPreviewSize>('xl');\n\n public readonly onSelected = new Subject<AXPDesignerSelectEvent>();\n public readonly onRefresh = new Subject<AXPDesignerRefreshEvent>();\n public readonly onUpdate = new Subject<AXPDesignerUpdateEvent>();\n public readonly onFocused = new Subject<AXPDesignerFocusEvent>();\n\n public readonly templateId = signal<string | null>(null);\n\n private loadingStrategy = signal<AXPTemplateLoadingStrategy>(AXPTemplateLoadingStrategy.Connector);\n\n #ef = effect(\n () => {\n this.refresh({ widget: this.currentPage() });\n }\n );\n\n constructor() {\n this.eventService.listen(AXPDesignerMessageKeys.Loaded).subscribe(() => {\n this.updatePreview();\n })\n //\n this.eventService.listen(AXPDesignerMessageKeys.PreviewWindow).subscribe(() => {\n this.openPreviewWindow();\n });\n //\n // window.addEventListener(\"beforeunload\", (event) => {\n // console.log(\"Window is before closing...\");\n // // event.preventDefault();\n // // event.returnValue = 'abc'; // Some browsers require this to show the prompt.\n // });\n window.addEventListener(\"unload\", async () => {\n console.log(\"Window is closing...\");\n if (this.unsavedChanges()) {\n this.eventService.publish<AXPDesignerSaveFormMessage>(AXPDesignerMessageKeys.SaveForm, { id: this.templateId()!, success: false });\n }\n this.unsubscribeEvents();\n });\n }\n\n private can = (widget: AXPWidgetNode | null): {\n delete: boolean,\n copyOrCut: boolean,\n insert: boolean,\n paste: boolean,\n } => {\n if (!widget) {\n return {\n delete: false,\n copyOrCut: false,\n insert: false,\n paste: false,\n }\n }\n const config = get(widget, '__meta__.config') as any as AXPWidgetConfig;\n return {\n delete: widget.type != 'page-layout',\n copyOrCut: widget.type != 'page-layout',\n paste: this.clipboard() != null && config.type == 'container' && config.designer?.canInsert != false,\n insert: config.type == 'container' && config.designer?.canInsert != false,\n }\n }\n\n public register(command: AXPDesignerRegisterCommand): void {\n this.select({ widget: command.widget });\n }\n\n public select(command: AXPDesignerSelectCommand): void {\n this.selectedNode.set(command.widget);\n this.onSelected.next(command);\n }\n\n public update(command: AXPDesignerUpdateCommand): void {\n const node = command.widget ?? this.selectedNode();\n\n if (command.mode == 'update' && node) {\n this.commandManager.executeCommand(new UpdateWidgetCommand(node!, command.values, node!));\n }\n //this.selectedNode.update((c) => merge(node, command.values));\n this.onUpdate.next({ widget: node!, values: command.values });\n this.unsavedChanges.set(true);\n this.updatePreview();\n }\n\n public focus(command: AXPDesignerFocusCommand): void {\n if (this._focusedNode != command.widget) {\n this._focusedNode = command.widget;\n this.onFocused.next({ widget: this._focusedNode });\n }\n }\n\n public refresh(command: AXPDesignerRefreshCommand) {\n this.onRefresh.next({ widget: command.widget });\n this.updatePreview();\n }\n\n private findBreadcrumbs(\n node: AXPWidgetNode,\n targetNode?: AXPWidgetNode | null,\n breadcrumb: AXPWidgetNode[] = []\n ): AXPWidgetNode[] | undefined {\n // Add the current node to the breadcrumb path\n const currentBreadcrumb = [...breadcrumb, node];\n\n // Check if the current node is the target node\n if (node === targetNode) {\n return currentBreadcrumb;\n }\n\n // If the node has children, recursively search them\n if (node.children) {\n for (const child of node.children) {\n const result = this.findBreadcrumbs(child, targetNode, currentBreadcrumb);\n if (result) {\n return result;\n }\n }\n }\n\n // Return undefined if no match is found\n return undefined;\n }\n\n async showPicker(currentNode: AXPWidgetNode = this.selectedNode()!): Promise<AXPWidgetNode[]> {\n const widgets = await this.widgetPickerService.showPicker({\n groups: [AXPWidgetGroupEnum.FormElement],\n tabPersistenceContext: AXP_WIDGET_PICKER_TAB_CONTEXT.layoutDesignerFormElements,\n });\n const result: AXPWidgetNode[] = [];\n if (widgets.length) {\n widgets.forEach((c) => {\n result.push(this.addWidget(currentNode, { type: c.type })!);\n });\n }\n return result;\n }\n\n public new() {\n this.commandManager.clear();\n this.document.set(this.createDoc());\n this.currentPage.set(this.document().children?.[0]!);\n this.reRenderPage();\n }\n\n private createDoc(): AXPWidgetNode {\n const doc: AXPWidgetNode = {\n type: AXPWidgetsCatalog.document,\n children: [this.createPage()],\n name: 'document',\n };\n set(doc, '__meta__.id', this.generateUniqueId());\n return doc;\n }\n\n private createPage(): AXPWidgetNode {\n const config = this.widgetRegisteryService.resolve('page-layout');\n\n const page: AXPWidgetNode = {\n type: 'page-layout',\n children: [],\n name: 'page-layout1',\n };\n\n set(page, '__meta__.id', this.generateUniqueId());\n set(page, '__meta__.config', config);\n return page;\n }\n\n public addNewPage() {\n this.addWidget(this.document(), this.createPage());\n this.goToPage(this.currentPageIndex() + 1);\n }\n\n public removePage(index: number) {\n const page = this.document().children?.[index]!;\n this.removeWidget(page);\n this.goToPage(index - 1);\n }\n\n public clonePage(index: number) {\n const page = this.document().children?.[index]!;\n this.clone(page);\n this.goToPage((this.document().children?.length ?? 1) - 1);\n }\n\n public goToPage(index: number) {\n this.currentPageIndex.set(index);\n this.currentPage.set(this.document().children?.[this.currentPageIndex()]!);\n this.select({ widget: this.currentPage() });\n }\n\n private reRenderPage() {\n this.currentPage.set({ ...this.currentPage() });\n setTimeout(() => {\n this.refresh({ widget: this.currentPage() });\n });\n }\n\n public findWidgetById(root: AXPWidgetNode, id: string): AXPWidgetNode | null {\n if (get(root, '__meta__.id') === id) {\n return root; // Return the root if it matches the ID\n }\n if (!root.children) return null;\n\n for (const child of root.children) {\n const found = this.findWidgetById(child, id);\n if (found) {\n return found; // Return the found child\n }\n }\n\n return null; // Node not found\n }\n\n private findParent(id: string, parent: AXPWidgetNode = this.currentPage()): AXPWidgetNode | null {\n if (!parent.children) return null;\n\n if (parent.children.some((child) => get(child, '__meta__.id') === id)) {\n return parent; // Return this node as it's the parent of the node with the given ID\n }\n\n for (const child of parent.children) {\n const foundParent = this.findParent(id, child);\n if (foundParent) return foundParent;\n }\n\n return null; // No parent found\n }\n\n private findNearestContainer(node: AXPWidgetNode, searchUpward = true): AXPWidgetNode | null {\n if (searchUpward) {\n let current: AXPWidgetNode | null = node;\n while (current) {\n const config = this.widgetRegisteryService.resolve(current.type);\n if (config && config.type == 'container') {\n return current;\n }\n current = this.findParent(get(current, '__meta__.id')!); // Use findParent to navigate upwards\n }\n } else {\n // Recursive search to find the first container among children\n if (node.children) {\n for (const child of node.children) {\n const config = this.widgetRegisteryService.resolve(child.type);\n if (config && config.type == 'container') {\n return child;\n }\n const foundContainer = this.findNearestContainer(child, false); // Continue searching downwards\n if (foundContainer) return foundContainer;\n }\n }\n }\n return null; // Return null if no container found\n }\n\n addWidget(currentNode: AXPWidgetNode, node: AXPWidgetNode): AXPWidgetNode {\n //\n const cloned = cloneDeep(node);\n const config = this.widgetRegisteryService.resolve(node.type);\n\n //\n this.commandManager.executeCommand(new AddWidgetCommand(cloned, currentNode, currentNode));\n //\n cloned.name = this.generateUniqueName(node.type);\n set(cloned, '__meta__.id', this.generateUniqueId());\n set(cloned, '__meta__.config', config);\n set(cloned, '__meta__.added', true);\n //\n this.reRenderPage();\n //\n this.refresh({ widget: currentNode });\n this.select({ widget: cloned });\n\n return cloned;\n }\n\n public removeWidget(node: AXPWidgetNode = this.selectedNode()!): void {\n if (\n node.type === 'document-layout' ||\n (node.type === 'page-layout' && (this.document().children?.length ?? 1) == 1)\n ) {\n console.error('Cannot remove the page node.');\n return; // Prevent removing the root page node or document\n }\n\n const nodeIdToRemove = get(node, '__meta__.id');\n if (!nodeIdToRemove) {\n throw new Error('Node does not have a valid __meta__.id to identify it for removal.');\n }\n\n // Find the parent of the node to remove it\n const parent = this.findParent(nodeIdToRemove, this.document());\n if (!parent) {\n throw new Error('Parent node not found. The node might be the root node or does not exist.');\n }\n\n const previousSelection = this.selectedNode(); // Capture the currently selected node before removal\n const command = new RemoveWidgetCommand(node, parent, previousSelection!);\n this.commandManager.executeCommand(command);\n\n this.refresh({ widget: parent }); // Refresh the UI to reflect changes\n this.select({ widget: parent }); // Select the parent node after removal\n }\n\n navigateTo(index: number) {\n this.commandManager.goToCommand(index);\n this.reRenderPage();\n const currentSelection = this.commandManager.selectedNode();\n this.refresh({ widget: this.currentPage() });\n this.select({ widget: currentSelection! });\n }\n\n public redo() {\n this.commandManager.redo();\n this.reRenderPage();\n const currentSelection = this.commandManager.selectedNode();\n this.refresh({ widget: this.currentPage() });\n this.select({ widget: currentSelection! });\n }\n\n public undo() {\n this.commandManager.undo();\n this.reRenderPage();\n const currentSelection = this.commandManager.selectedNode();\n this.refresh({ widget: this.currentPage() });\n this.select({ widget: currentSelection! });\n }\n\n public clearHistory() {\n this.commandManager.clear();\n }\n\n private removeMetaProp(obj: any): any {\n const nodeName = '__meta__';\n // Check if the object is an array\n if (Array.isArray(obj)) {\n return obj.map((item) => this.removeMetaProp(item));\n } else if (typeof obj === 'object' && obj !== null) {\n // Create a new object to store the result\n let newObj: any = {};\n for (let key in obj) {\n // Only add the key if it's not the nodeName we want to remove\n if (key !== nodeName) {\n newObj[key] = this.removeMetaProp(obj[key]);\n }\n }\n return newObj;\n }\n // If the value is not an object or array, return it as is\n return obj;\n }\n\n private async addMetaToNodes(\n node: AXPWidgetNode,\n processedNodes: { count: number },\n progressCallback: (processed: number) => void\n ): Promise<AXPWidgetNode> {\n // Apply your meta logic here\n const config = this.widgetRegisteryService.resolve(node.type);\n //\n set(node, '__meta__.id', this.generateUniqueId());\n set(node, '__meta__.config', config);\n //\n // Increment the processed node count and update the progress dialog\n processedNodes.count++;\n progressCallback(processedNodes.count);\n // Recursively process child nodes using Promise.all\n if (node.children && node.children.length > 0) {\n node.children = await Promise.all(\n node.children.map(async (child) => await this.addMetaToNodes(child, processedNodes, progressCallback))\n );\n }\n return node;\n }\n\n public copy(widget: AXPWidgetNode | null = this.selectedNode()): void {\n if (this.can(widget).copyOrCut) {\n this.clipboard.set(cloneDeep(widget)); // Use lodash's cloneDeep to ensure a deep copy\n }\n }\n\n public cut(widget: AXPWidgetNode | null = this.selectedNode()): void {\n if (this.can(widget).copyOrCut) {\n this.copy(widget); // Copy the widget to the clipboard\n this.removeWidget(widget!); // Reuse the removeWidget method which should handle undo internally\n }\n }\n\n public clone(widget: AXPWidgetNode | null = this.selectedNode()): void {\n if (!widget) return;\n this.copy(widget); // Copy the widget to the clipboard\n if (widget.type == 'page-layout') {\n this.paste(this.document());\n } else {\n this.paste(widget!);\n }\n }\n\n public paste(parentNode: AXPWidgetNode | undefined = this.selectedNode() ?? this.currentPage()): void {\n if (!this.clipboard() || !this.selectedNode() || !parentNode) {\n console.error('Clipboard is empty or no node is selected.');\n return;\n }\n const newNode = cloneDeep(this.clipboard() as AXPWidgetNode);\n const nearestContainer = this.findNearestContainer(parentNode, true);\n if (!nearestContainer) {\n console.error('No suitable container found.');\n return;\n }\n //\n if (!nearestContainer.children) {\n nearestContainer.children = [];\n }\n //\n const setNameId = (node: AXPWidgetNode) => {\n set(node, 'name', this.generateUniqueName(node.type));\n set(node, '__meta__.id', this.generateUniqueId());\n node.children?.forEach((n) => {\n setNameId(n);\n });\n };\n setNameId(newNode);\n //\n this.commandManager.executeCommand(new AddWidgetCommand(newNode, nearestContainer, nearestContainer));\n //\n setTimeout(() => {\n this.refresh({ widget: nearestContainer }); // Refresh the UI\n this.select({ widget: newNode }); // Select the newly pasted node\n });\n }\n\n async save() {\n if (this.templateId()) {\n const content = this.export();\n if (this.loadingStrategy() == AXPTemplateLoadingStrategy.Connector) {\n await this.connector.save(this.templateId()!, { json: content });\n this.toastService.success('Your changes saved successfully');\n }\n else {\n const result = await this.eventService.sendAndWaitForResponse<AXPDesignerSaveFormMessage, { success: boolean }>(AXPDesignerMessageKeys.SaveForm, { id: this.templateId()!, success: true, content });\n if (result.success) {\n this.unsavedChanges.set(false);\n window.close();\n }\n }\n } else {\n this.downloadJson();\n }\n }\n\n async saveAs(node: AXPWidgetNode = this.document()) {\n const content = this.export(node);\n const result = await this.connector.saveAs({ json: content });\n if (result) {\n this.toastService.success('Your changes saved successfully');\n }\n }\n\n export(node: AXPWidgetNode = this.document()): string {\n const json = this.removeMetaProp(node);\n return JSON.stringify(json);\n }\n\n downloadJson() {\n // Convert the object to a JSON string\n const jsonStr = this.export();\n\n // Create a blob object from the JSON string\n const blob = new Blob([jsonStr], { type: 'application/json' });\n\n // Create a URL for the blob object\n const url = URL.createObjectURL(blob);\n\n // Create a temporary <a> element to trigger the download\n const a = document.createElement('a');\n a.href = url;\n a.download = 'export.json';\n\n // Append the <a> element to the document body (necessary for some browsers)\n document.body.appendChild(a);\n\n // Trigger the download by clicking the <a> element\n a.click();\n // Clean up by revoking the object URL and removing the <a> element\n URL.revokeObjectURL(url);\n document.body.removeChild(a);\n }\n\n async loadById(id: string, options: { strategy: AXPTemplateLoadingStrategy } = { strategy: AXPTemplateLoadingStrategy.Connector }) {\n let content: string | null = null;\n try {\n if (options.strategy == AXPTemplateLoadingStrategy.Connector) {\n content = await this.connector.load(id);\n }\n else {\n content = await this.eventService.sendAndWaitForResponse<{ formId: string }, string>(AXPDesignerMessageKeys.RequestFormContent, { formId: id }, { timeout: 10000, retries: 3, retryDelay: 1000 });\n }\n if (!isNil(content) && !isEmpty(content)) {\n await this.loadByContent(content!);\n }\n this.templateId.set(id);\n this.loadingStrategy.set(options.strategy);\n } catch (error: any) {\n this.toastService.danger(error.message);\n }\n }\n\n async importJSon() {\n const files = await this.fileService.choose({ multiple: false, accept: 'application/json' });\n if (files && files.length) {\n const file = files[0];\n const content = await file.text();\n await this.loadByContent(content);\n }\n }\n\n async loadByContent(content: string) {\n const rootNode = JSON.parse(content) as AXPWidgetNode;\n const totalNode = this.countTotalNodes(rootNode);\n const processedNodes = { count: 0 };\n\n const button: AXLoadingDialogButtonItem = {\n text: 'Cancel',\n autofocus: true,\n color: 'primary',\n onClick: (e) => {\n dialog.close();\n },\n };\n\n const dialog = this.loadingService.show({\n mode: 'determinate',\n title: 'Loading Content',\n progressColor: 'primary',\n text: 'Processing content',\n status: `0 of ${totalNode}`,\n buttons: [button],\n });\n\n try {\n const root = await this.addMetaToNodes(rootNode, processedNodes, (count) => {\n dialog.setProgressValue(Math.ceil((count / totalNode) * 100));\n dialog.setProgressStatus(`${count} of ${totalNode}`);\n });\n\n const page = root.children?.[0]!;\n this.document.set(root);\n this.currentPage.set(page);\n\n dialog.setProgressColor('success');\n dialog.setProgressText('Content loaded successfully');\n button.text = 'Okay';\n button.color = 'success';\n dialog.setProgressValue(100);\n\n setTimeout(() => {\n this.reRenderPage();\n dialog.close();\n }, 250);\n } catch (error: any) {\n dialog.setProgressColor('danger');\n dialog.setProgressText(error instanceof Error ? error.message : 'Cannot load content');\n button.text = 'Close';\n button.color = 'danger';\n }\n }\n\n private countTotalNodes(node: AXPWidgetNode): number {\n let count = 1; // Count the current node\n if (node.children && node.children.length > 0) {\n count += node.children.reduce((sum, child) => sum + this.countTotalNodes(child), 0);\n }\n return count;\n }\n\n private generateUniqueName(type: string): string {\n // Normalize the type to follow camelCase convention\n const baseName = type.charAt(0).toLowerCase() + type.slice(1);\n let index = 1;\n let uniqueName = `${baseName}${index}`;\n\n // Gather all existing names to check against\n const existingNames = new Set<string>();\n this.collectAllNames(this.document(), existingNames);\n\n // Increment the index until a unique name is found\n while (existingNames.has(uniqueName)) {\n index++;\n uniqueName = `${baseName}${index}`;\n }\n\n return uniqueName;\n }\n\n generateUniqueId(): number {\n return Math.random() * Math.pow(10, 18);\n }\n\n private collectAllNames(node: AXPWidgetNode, names: Set<string>): void {\n if (node.name) {\n names.add(node.name);\n }\n if (node.children) {\n for (const child of node.children) {\n this.collectAllNames(child, names);\n }\n }\n }\n\n public updatePreview() {\n this.eventService.publish<AXPDesignerPreviewMessage>(AXPDesignerMessageKeys.Preview, {\n id: this.templateId()!,\n document: this.removeMetaProp(this.document())\n });\n }\n\n public async openPreviewDialog() {\n const com = await import('../../preview/preview.component').then((c) => c.AXPLayoutDesignerPreviewComponent);\n await this.popupService.open(com, {\n header: false,\n size: 'full',\n data: {\n initialSize: this.size(),\n isDialogWindow: true,\n },\n });\n }\n\n public openPreviewWindow() {\n window.open('/forms/preview', '_blank');\n }\n\n getContextMenuItems(instance: AXPDesignerWidgetComponent, isRoot = false): AXMenuItem[] {\n const widget = instance as any as AXPValueWidgetComponent;\n const node = widget.node;\n\n const items: AXMenuItem[] = [];\n // \n if (this.can(node).insert) {\n items.push(cloneWidgetMenu(AXP_DESIGNER_ADD_WIDGET_MENU, {\n break: true,\n }));\n }\n //\n items.push(cloneWidgetMenu(AXP_DESIGNER_CLONE_MENU, { disabled: !this.can(node).copyOrCut }));\n items.push(cloneWidgetMenu(AXP_DESIGNER_CUT_MENU, { disabled: !this.can(node).copyOrCut }));\n items.push(cloneWidgetMenu(AXP_DESIGNER_COPY_MENU, { disabled: !this.can(node).copyOrCut }));\n items.push(cloneWidgetMenu(AXP_DESIGNER_PASTE_MENU, { disabled: !this.can(node).paste, break: true }));\n //\n items.push(cloneWidgetMenu(AXP_DESIGNER_DELETE_WIDGET_MENU, { disabled: !this.can(node).delete, break: true }));\n //\n items.push(cloneWidgetMenu(AXP_DESIGNER_SAVE_AS_WIDGET_MENU));\n if (instance.onContextMenu) {\n instance.onContextMenu({ items })\n }\n if (!isRoot) {\n items.forEach(item => {\n item.suffix = undefined;\n })\n }\n return items;\n }\n\n async executeCommand(context: { instance: AXPDesignerWidgetComponent, name: string, data?: any }): Promise<void> {\n const widget = context.instance as any as AXPValueWidgetComponent;\n if (context.instance.executeCommand) {\n const command: any = {\n name: context.name,\n data: context.data,\n handled: false\n }\n await context.instance.executeCommand(command);\n if (command.handled)\n return;\n }\n switch (context.name) {\n case AXP_DESIGNER_SELECT_WIDGET_MENU.name: {\n this.select({ widget: widget.node })\n break\n }\n case AXP_DESIGNER_ADD_WIDGET_MENU.name: {\n this.showPicker(widget.node);\n break\n }\n //\n case AXP_DESIGNER_DELETE_WIDGET_MENU.name: {\n this.removeWidget(widget.node);\n break\n }\n //\n case AXP_DESIGNER_CLONE_MENU.name: {\n this.clone(widget.node);\n break\n }\n case AXP_DESIGNER_CUT_MENU.name: {\n this.cut(widget.node);\n break\n }\n case AXP_DESIGNER_COPY_MENU.name: {\n this.copy(widget.node);\n break\n }\n case AXP_DESIGNER_PASTE_MENU.name: {\n this.paste(widget.node);\n break\n }\n //\n }\n }\n\n unsubscribeEvents() {\n this.eventService.unsubscribe(AXPDesignerMessageKeys.Loaded);\n this.eventService.unsubscribe(AXPDesignerMessageKeys.PreviewWindow);\n }\n}","import { AXClickEvent } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPLayoutBaseWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXPDesignerService } from '../../shared/designer.service';\n\n@Component({\n selector: 'axp-designer-add-widget-button',\n styleUrls: ['./add-widget-button.component.css'],\n template: `\n <div class=\"container\">\n <ax-button [text]=\"'Add New Element'\" (onClick)=\"handleClick($event)\" [look]=\"'solid'\" [color]=\"'primary'\">\n <ax-icon icon=\"fa-solid fa-plus\"></ax-icon>\n </ax-button>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXButtonModule, AXDecoratorModule],\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPDesignerAddWidgetButtonComponent {\n private designerService = inject(AXPDesignerService);\n private parent = inject(AXPLayoutBaseWidgetComponent);\n\n async handleClick(e: AXClickEvent) {\n e.nativeEvent.stopPropagation();\n await this.designerService.showPicker(this.parent.node);\n }\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { ChangeDetectionStrategy, Component, input, output, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'axp-designer-add-widget-line-button',\n template: `\n <div class=\"flex items-center py-4 text-xs\">\n <div class=\"flex-grow border-t-2 border-dashed border-surface\"></div>\n <div class=\"mx-2 ax-sm\">\n <ax-button [text]=\"text()\" [look]=\"'twotone'\" class=\"capitalize\" (onClick)=\"handleClick()\">\n <ax-icon icon=\"fa-solid fa-plus\"></ax-icon>\n </ax-button>\n </div>\n <div class=\"flex-grow border-t-2 border-dashed border-surface\"></div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXButtonModule, AXDecoratorModule],\n encapsulation: ViewEncapsulation.None\n})\nexport class AXPDesignerAddWidgetLineButtonComponent {\n\n text = input();\n onClick = output();\n\n\n protected handleClick() {\n this.onClick.emit();\n }\n\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPLayoutBaseWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n inject,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPDesignerService } from '../../shared/designer.service';\n\n@Component({\n selector: 'axp-designer-add-widget-mini-button',\n template: `\n <div class=\"axp-empty-space\">\n <div class=\"m-auto py-4 px-8\">\n <div\n class=\"flex items-center justify-center size-4 hover:scale-125 cursor-pointer\"\n (click)=\"handleClick($event)\"\n >\n <i class=\"fa-solid fa-plus\"></i>\n </div>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXButtonModule, AXDecoratorModule],\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPDesignerAddWidgetMiniButtonComponent {\n private designerService = inject(AXPDesignerService);\n private parent = inject(AXPLayoutBaseWidgetComponent);\n\n @Output()\n public onClick: EventEmitter<void> = new EventEmitter<void>();\n\n protected async handleClick(e: MouseEvent) {\n e.stopPropagation();\n const a = this.onClick;\n if (this.onClick.observed) {\n this.onClick.emit();\n } else {\n await this.designerService.showPicker(this.parent.node);\n }\n }\n\n @HostBinding('class')\n private get __class(): string {\n const cls: any = {};\n //\n cls[`flex`] = true;\n cls[`w-full`] = true;\n cls[`h-full`] = true;\n return cls;\n }\n}\n","import { ChangeDetectionStrategy, Component, HostListener, computed, model, output, signal } from '@angular/core';\n\n@Component({\n selector: 'axp-designer-flex-drawer',\n styleUrls: ['./flex-drawer.component.css'],\n template: `\n <table class=\"table-picker\">\n <tbody>\n <tr>\n @for (c of items(); track $index) {\n <td (mouseenter)=\"handleMouseHover(c)\" [class.picked]=\"c <= range()\" (click)=\"handleClick(c)\"></td>\n }\n </tr>\n <tr>\n <td [attr.colspan]=\"items().length\" class=\"text-center\">\n <small>{{ range() }}</small>\n </td>\n </tr>\n </tbody>\n </table>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [],\n})\nexport class AXPDesignerFlexDrawerComponent {\n itemsCount = model<number>(12, { alias: 'items' });\n\n onSelect = output<number>();\n\n protected items = computed(() => Array.from({ length: this.itemsCount() }).map((v, index) => index + 1));\n\n protected range = signal(0);\n\n protected handleMouseHover(c: number) {\n this.range.set(c);\n }\n\n protected handleClick(c: number) {\n this.onSelect.emit(c);\n }\n\n @HostListener('mouseleave', ['$event'])\n protected handleMouseLeave(event: MouseEvent) {\n this.range.set(0);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n HostBinding,\n HostListener,\n model,\n output,\n signal,\n} from '@angular/core';\n\n@Component({\n selector: 'axp-designer-grid-drawer',\n styleUrls: ['./grid-drawer.component.css'],\n template: `\n <table class=\"table-picker\">\n <tbody>\n @for (r of rows(); track $index) {\n <tr>\n @for (c of columns(); track $index) {\n <td\n (mouseenter)=\"handleMouseHover(r, c)\"\n [class.picked]=\"c <= rangeC() && r <= rangeR()\"\n (click)=\"handleClick(r, c)\"\n ></td>\n }\n </tr>\n }\n <tr>\n <td [attr.colspan]=\"columns().length\" class=\"text-center\">\n <small>{{ rangeC() }}×{{ rangeR() }}</small>\n </td>\n </tr>\n </tbody>\n </table>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [],\n})\nexport class AXPDesignerGridDrawerComponent {\n rowsCount = model<number>(5, { alias: 'rows' });\n colsCount = model<number>(12, { alias: 'columns' });\n\n onSelect = output<{ rows: number; cols: number }>();\n\n protected rows = computed(() => Array.from({ length: this.rowsCount() }).map((v, index) => index + 1));\n protected columns = computed(() => Array.from({ length: this.colsCount() }).map((v, index) => index + 1));\n\n protected rangeR = signal(0);\n protected rangeC = signal(0);\n\n protected handleMouseHover(r: number, c: number) {\n this.rangeR.set(r);\n this.rangeC.set(c);\n }\n\n protected handleClick(r: number, c: number) {\n this.onSelect.emit({ rows: r, cols: c });\n }\n\n @HostListener('mouseleave', ['$event'])\n protected handleMouseLeave(event: MouseEvent) {\n this.rangeR.set(0);\n this.rangeC.set(0);\n }\n\n @HostBinding('style')\n private get __style(): any {\n return {\n '--cols-width': `${this.colsCount() == 0 ? 0 : 100 / this.colsCount()}%`,\n };\n }\n}\n","import { AXPWidgetConfig } from '@acorex-platform/framework-shared/widget-core';\nimport { AXCommonModule } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTabsComponent, AXTabsModule, AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPSettingsService, AXPStickyDirective } from '@acorex-platform/framework-client/common';\nimport { AXPDefinitionCategory, AXPMultiLanguageString, AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { AXPWidgetItemClickEvent, AXPWidgetItemComponent, AXPWidgetItemData } from '@acorex-platform/framework-client/layout/components';\n\nimport { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n Component,\n computed,\n inject,\n Injector,\n model,\n signal,\n viewChild,\n ViewEncapsulation,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { castArray, orderBy, uniqBy } from 'lodash-es';\n\nconst WIDGET_PICKER_I18N = {\n searchPlaceholder: '@form-template-management:designer.components.widget-picker.search-placeholder',\n selectedCount: '@form-template-management:designer.components.widget-picker.selected-count',\n tabAll: '@form-template-management:designer.components.widget-picker.tab-all',\n pinnedSectionTitle: '@form-template-management:designer.components.widget-picker.pinned-section-title',\n} as const;\n\nexport interface AXPDisplayWidgetConfig extends AXPWidgetConfig {\n pinned: boolean;\n}\n\ninterface AXPWidgetPickerSection {\n trackKey: string;\n title: AXPMultiLanguageString | null;\n widgetItems: AXPWidgetItemData[];\n}\n\n/**\n * Maps AXPDisplayWidgetConfig to generic AXPWidgetItemData\n */\nfunction mapToWidgetItemData(widget: AXPDisplayWidgetConfig): AXPWidgetItemData {\n return {\n title: widget.title,\n description: widget.description,\n icon: widget.icon ?? 'fa-solid fa-cube',\n isPinned: widget.pinned,\n data: widget,\n };\n}\n\n@Component({\n imports: [\n CommonModule,\n AXCommonModule,\n FormsModule,\n AXButtonModule,\n AXDecoratorModule,\n AXTabsModule,\n AXSearchBoxModule,\n AXPStickyDirective,\n AXPWidgetItemComponent,\n AXTranslationModule,\n ],\n templateUrl: './widget-picker.component.html',\n styleUrl: './widget-picker.component.css',\n changeDetection: ChangeDetectionStrategy.Eager,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPDesignerWidgetPickerComponent extends AXBasePageComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly injector = inject(Injector);\n private settingsService = inject(AXPSettingsService);\n private readonly mlResolver = inject(AXTranslationService);\n private readonly pinnedSettingKey = 'forms:widgets:picker:pinned';\n\n /** Keeps the line indicator in sync when the selected index is set programmatically (e.g. restored tab). */\n private readonly tabsHost = viewChild<AXTabsComponent>('tabsHost');\n\n //#endregion\n\n //#region ---- Constructor ----\n\n constructor() {\n super();\n afterNextRender(\n () => {\n this.allowTabPersistence = true;\n },\n { injector: this.injector },\n );\n }\n\n //#endregion\n\n //#region ---- Class Properties ----\n\n protected readonly i18n = WIDGET_PICKER_I18N;\n\n protected searchTerm = model('');\n\n /** Populated by popup `data.tabPersistenceContext` (optional for tests). */\n tabPersistenceContext?: string;\n\n private widgets: AXPWidgetConfig[] = [];\n private allWidgets = signal<AXPWidgetConfig[]>([]);\n private pinnedWidgets = signal<string[]>([]);\n\n protected selectedWidgets = signal<AXPDisplayWidgetConfig[]>([]);\n\n protected currentTabIndex = signal(0);\n\n /** Avoid persisting spurious tab events before restore + first paint complete. */\n private allowTabPersistence = false;\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n private displayWidgets = computed<AXPDisplayWidgetConfig[]>(() => {\n return this.allWidgets().map((c) => ({ ...c, pinned: this.pinnedWidgets().includes(c.name) }));\n });\n\n private orderedList = computed(() => {\n const search = this.searchTerm().toLowerCase();\n const selectedTabName = this.selectedTab().name;\n\n return orderBy(\n this.displayWidgets().filter((w) => {\n const matchesTab =\n selectedTabName === 'all' || castArray(w.categories ?? []).some((c) => c.name === selectedTabName);\n const titleText = this.mlResolver.resolve(w.title).toLowerCase();\n const descText = this.mlResolver.resolve(w.description ?? '').toLowerCase();\n const matchesSearch = !search || titleText.includes(search) || descText.includes(search);\n return matchesTab && matchesSearch;\n }),\n [(w) => w.pinned, (w) => this.mlResolver.resolve(w.title)],\n ['desc', 'asc'],\n );\n });\n\n protected pinnedList = computed(() => this.orderedList().filter((c) => c.pinned));\n protected regularList = computed(() => this.orderedList().filter((c) => !c.pinned));\n\n protected pinnedWidgetItems = computed(() => this.pinnedList().map(mapToWidgetItemData));\n\n protected regularGroupedSections = computed(() => {\n const tabName = this.selectedTab().name;\n const list = this.regularList();\n if (tabName === 'all') {\n return this.buildAllTabSections(list);\n }\n return this.buildCategoryTabSections(list);\n });\n\n protected categories = computed(() =>\n uniqBy(\n this.allWidgets()\n .map((w) => castArray(w.categories ?? []))\n .filter((c) => c.length > 0)\n .flat(),\n 'name',\n ),\n );\n\n protected tabs = computed<AXPDefinitionCategory[]>(() =>\n orderBy(\n [{ name: 'all', title: WIDGET_PICKER_I18N.tabAll, order: 0 } as AXPDefinitionCategory, ...this.categories()],\n (c) => c.order,\n ),\n );\n\n protected maxVisibleWidgets = computed(() =>\n Math.max(\n 1,\n ...this.categories().map(\n (cat) =>\n this.allWidgets().filter((w) => castArray(w.categories ?? []).some((wc) => wc.name === cat.name)).length,\n ),\n ),\n );\n\n protected selectedTab = computed(() => this.tabs()[this.currentTabIndex()]);\n\n protected pickerShellClass = computed(\n () =>\n `axp-designer-widget-picker flex flex-col h-[95vh] ${this.maxVisibleWidgets() > 10 ? 'lg:h-[75vh]' : 'lg:h-[50vh]'}`,\n );\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n protected override async ngOnInit() {\n super.ngOnInit();\n this.allWidgets.set(this.widgets);\n this.pinnedWidgets.set((await this.settingsService.get<string[]>(this.pinnedSettingKey)) || []);\n await this.restoreLastTabFromSettings();\n }\n\n //#endregion\n\n //#region ---- Tab persistence (user settings) ----\n\n private lastTabSettingKey(context: string): string {\n return `forms:widgets:picker:last-tab:${context}`;\n }\n\n private async restoreLastTabFromSettings(): Promise<void> {\n const ctx = this.tabPersistenceContext;\n if (!ctx) {\n return;\n }\n const saved = await this.settingsService.get<string | undefined>(this.lastTabSettingKey(ctx));\n if (!saved) {\n return;\n }\n const idx = this.tabs().findIndex((t) => t.name === saved);\n if (idx >= 0) {\n this.currentTabIndex.set(idx);\n this.syncTabsStripToIndex(idx);\n }\n }\n\n /**\n * `ax-tab-item` [active] updates labels, but `ax-tabs` keeps the underline from its own index until `select` runs.\n */\n private syncTabsStripToIndex(index: number): void {\n afterNextRender(\n () => {\n this.tabsHost()?.select(index);\n },\n { injector: this.injector },\n );\n }\n\n private async persistTabSelection(tabIndex: number): Promise<void> {\n const ctx = this.tabPersistenceContext;\n if (!ctx) {\n return;\n }\n const tab = this.tabs()[tabIndex];\n if (!tab) {\n return;\n }\n await this.settingsService.scope(AXPPlatformScope.User).set(this.lastTabSettingKey(ctx), tab.name);\n }\n\n //#endregion\n\n //#region ---- Grouped sections (All = parent only; category tab = sub-category) ----\n\n /**\n * Picks the primary parent category for the \"All\" tab (lowest `order` wins).\n */\n private primaryCategory(widget: AXPDisplayWidgetConfig): AXPDefinitionCategory | null {\n const cats = castArray(widget.categories ?? []);\n if (cats.length === 0) {\n return null;\n }\n return orderBy(cats, (c) => c.order)[0];\n }\n\n private buildAllTabSections(list: AXPDisplayWidgetConfig[]): AXPWidgetPickerSection[] {\n const categoryMeta = this.categories();\n const withCat = list.filter((w) => castArray(w.categories ?? []).length > 0);\n const withoutCat = list.filter((w) => castArray(w.categories ?? []).length === 0);\n\n const byPrimaryName = new Map<string, AXPDisplayWidgetConfig[]>();\n for (const w of withCat) {\n const primary = this.primaryCategory(w);\n if (primary == null) {\n continue;\n }\n const key = primary.name;\n const bucket = byPrimaryName.get(key) ?? [];\n bucket.push(w);\n byPrimaryName.set(key, bucket);\n }\n\n const orderedNames = orderBy(\n [...byPrimaryName.keys()],\n (name) => categoryMeta.find((c) => c.name === name)?.order ?? 999,\n );\n\n const sections: AXPWidgetPickerSection[] = orderedNames.map((name) => {\n const cat = categoryMeta.find((c) => c.name === name);\n const widgets = orderBy(byPrimaryName.get(name)!, (w) => this.mlResolver.resolve(w.title), 'asc');\n return {\n trackKey: `cat:${name}`,\n title: cat?.title ?? null,\n widgetItems: widgets.map(mapToWidgetItemData),\n };\n });\n\n if (withoutCat.length > 0) {\n const widgets = orderBy(withoutCat, (w) => this.mlResolver.resolve(w.title), 'asc');\n sections.push({\n trackKey: 'cat:uncategorized',\n title: null,\n widgetItems: widgets.map(mapToWidgetItemData),\n });\n }\n\n return sections;\n }\n\n private buildCategoryTabSections(list: AXPDisplayWidgetConfig[]): AXPWidgetPickerSection[] {\n const withSub = list.filter((w) => w.subCategory != null);\n const withoutSub = list.filter((w) => w.subCategory == null);\n\n const bySubName = new Map<string, AXPDisplayWidgetConfig[]>();\n for (const w of withSub) {\n const key = w.subCategory!.name;\n const bucket = bySubName.get(key) ?? [];\n bucket.push(w);\n bySubName.set(key, bucket);\n }\n\n const orderedSubNames = orderBy([...bySubName.keys()], (k) => bySubName.get(k)![0].subCategory!.order);\n\n const sections: AXPWidgetPickerSection[] = orderedSubNames.map((name) => {\n const widgets = orderBy(bySubName.get(name)!, (w) => this.mlResolver.resolve(w.title), 'asc');\n const sub = widgets[0].subCategory!;\n return {\n trackKey: `sub:${name}`,\n title: sub.title,\n widgetItems: widgets.map(mapToWidgetItemData),\n };\n });\n\n if (withoutSub.length > 0) {\n const widgets = orderBy(withoutSub, (w) => this.mlResolver.resolve(w.title), 'asc');\n sections.push({\n trackKey: 'sub:ungrouped',\n title: null,\n widgetItems: widgets.map(mapToWidgetItemData),\n });\n }\n\n return sections;\n }\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected async handleTabChange(event: AXTabStripChangedEvent): Promise<void> {\n const indx = event.index;\n if (this.currentTabIndex() != indx) {\n this.currentTabIndex.set(indx);\n }\n if (this.allowTabPersistence) {\n await this.persistTabSelection(indx);\n }\n }\n\n protected handleWidgetClick(clickEvent: AXPWidgetItemClickEvent): void {\n const { event, widget } = clickEvent;\n const originalWidget = widget.data as AXPDisplayWidgetConfig;\n\n if (event.ctrlKey) {\n const currentSelection = this.selectedWidgets();\n const isAlreadySelected = currentSelection.some((w) => w === originalWidget);\n\n if (isAlreadySelected) {\n this.selectedWidgets.set(currentSelection.filter((w) => w !== originalWidget));\n } else {\n this.selectedWidgets.set([...currentSelection, originalWidget]);\n }\n } else {\n this.close({ widgets: [originalWidget] });\n }\n }\n\n protected async handleWidgetPinClick(clickEvent: AXPWidgetItemClickEvent): Promise<void> {\n const { widget } = clickEvent;\n const originalWidget = widget.data as AXPDisplayWidgetConfig;\n\n originalWidget.pinned = !originalWidget.pinned;\n\n let pinnedWidgets = (await this.settingsService.get<string[]>(this.pinnedSettingKey)) || [];\n\n if (originalWidget.pinned) {\n if (!pinnedWidgets.includes(originalWidget.name)) {\n pinnedWidgets.push(originalWidget.name);\n }\n } else {\n pinnedWidgets = pinnedWidgets.filter((name) => name !== originalWidget.name);\n }\n\n await this.settingsService.scope(AXPPlatformScope.User).set(this.pinnedSettingKey, pinnedWidgets);\n\n this.pinnedWidgets.set(pinnedWidgets);\n }\n\n protected handleConfirmSelection(): void {\n this.close({ widgets: this.selectedWidgets() });\n }\n\n //#endregion\n\n //#region ---- Selection state ----\n\n protected isWidgetSelected(widget: AXPDisplayWidgetConfig): boolean {\n return this.selectedWidgets().includes(widget);\n }\n\n protected isWidgetItemSelected(widgetItem: AXPWidgetItemData): boolean {\n const originalWidget = widgetItem.data as AXPDisplayWidgetConfig;\n return this.isWidgetSelected(originalWidget);\n }\n\n //#endregion\n}\n","<div [class]=\"pickerShellClass()\">\n <div>\n <ax-tabs #tabsHost [look]=\"'with-line'\" (onActiveTabChanged)=\"handleTabChange($event)\">\n @for (w of tabs(); track w.name; let i = $index) {\n <ax-tab-item\n [text]=\"(w.title | translate | async)!\"\n [key]=\"w.name\"\n [active]=\"currentTabIndex() === i\"\n ></ax-tab-item>\n }\n </ax-tabs>\n </div>\n <div class=\"overflow-auto\" #content>\n <div\n class=\"p-4 sticky top-0 z-10 transition-all\"\n #sticky=\"axpSticky\"\n [axpSticky]=\"'bg-lightest shadow-xl'\"\n [stickyParent]=\"content\"\n [stickyOffset]=\"10\"\n >\n <ax-search-box\n look=\"fill\"\n [placeholder]=\"(i18n.searchPlaceholder | translate | async) ?? ''\"\n [(ngModel)]=\"searchTerm\"\n [delayTime]=\"300\"\n [axAutoFocus]=\"true\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n <div class=\"flex flex-col p-4 pt-0\">\n @if (pinnedWidgetItems().length) {\n <div class=\"axp-designer-widget-picker__section axp-designer-widget-picker__section--first\">\n <div class=\"axp-designer-widget-picker__group-heading\">\n <span class=\"axp-designer-widget-picker__group-title\">{{\n (i18n.pinnedSectionTitle | translate | async) ?? ''\n }}</span>\n <span class=\"axp-designer-widget-picker__group-line\"></span>\n </div>\n <div class=\"grid grid-cols-2 gap-2\">\n @for (widgetItem of pinnedWidgetItems(); track $any(widgetItem.data).name) {\n <axp-widget-item\n [widget]=\"widgetItem\"\n [isSelected]=\"isWidgetItemSelected(widgetItem)\"\n (onWidgetClick)=\"handleWidgetClick($event)\"\n (onPinClick)=\"handleWidgetPinClick($event)\"\n >\n </axp-widget-item>\n }\n </div>\n </div>\n }\n @for (group of regularGroupedSections(); track group.trackKey; let isFirst = $first) {\n <div\n class=\"axp-designer-widget-picker__section\"\n [class.axp-designer-widget-picker__section--first]=\"isFirst && pinnedWidgetItems().length === 0\"\n >\n @if (group.title) {\n <div class=\"axp-designer-widget-picker__group-heading\">\n <span class=\"axp-designer-widget-picker__group-title\">{{\n (group.title | translate | async) ?? ''\n }}</span>\n <span class=\"axp-designer-widget-picker__group-line\"></span>\n </div>\n }\n <div class=\"grid grid-cols-2 gap-2\">\n @for (widgetItem of group.widgetItems; track $any(widgetItem.data).name) {\n <axp-widget-item\n [widget]=\"widgetItem\"\n [isSelected]=\"isWidgetItemSelected(widgetItem)\"\n (onWidgetClick)=\"handleWidgetClick($event)\"\n (onPinClick)=\"handleWidgetPinClick($event)\"\n >\n </axp-widget-item>\n }\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n@if (selectedWidgets().length) {\n <ax-footer>\n <ax-suffix>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"(i18n.selectedCount | translate: { params: { count: selectedWidgets().length } } | async) ?? ''\"\n (onClick)=\"handleConfirmSelection()\"\n ></ax-button>\n </ax-suffix>\n </ax-footer>\n}\n","import { AXP_WIDGET_TOKEN, AXPWidgetConfig, AXPWidgetNodeToken, AXPWidgetStatus } from '@acorex-platform/framework-shared/widget-core';\nimport type { AXPWidgetNode, AXPWidgetRenderMode } from '@acorex-platform/framework-shared/core';\nimport { AXPBaseWidgetComponent, AXPLayoutBaseWidgetComponent, AXPValueWidgetComponent, AXPWidgetRegistryService } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport {\n ComponentRef,\n Directive,\n inject,\n Injector,\n input,\n NgZone,\n OnChanges,\n OnDestroy,\n signal,\n SimpleChanges,\n ViewContainerRef,\n WritableSignal,\n} from '@angular/core';\nimport { cloneDeep, get, isEqual, isNil, merge, set } from 'lodash-es';\nimport { debounceTime, distinctUntilChanged, filter, first, Subscription } from 'rxjs';\nimport { AXPDesignerService } from './designer.service';\n\n@Directive({\n selector: '[axp-widget-designer-renderer]',\n standalone: true,\n})\nexport class AXPWidgetDesignerRendererDirective implements OnChanges, OnDestroy {\n protected mergedOptions: WritableSignal<any> = signal<any>({});\n\n private injector = inject(Injector);\n protected widgetRegistry = inject(AXPWidgetRegistryService);\n protected zone = inject(NgZone);\n\n protected isLoading = signal(true);\n\n private instance!: AXPBaseWidgetComponent;\n private config?: AXPWidgetConfig | undefined;\n private isLoadingComponent = false;\n private currentNodeId: string | null = null;\n\n private service = inject(AXPDesignerService);\n private viewContainerRef = inject(ViewContainerRef);\n\n parentNode = input<AXPLayoutBaseWidgetComponent | null>();\n parentElement = input<HTMLElement | null>();\n parentComponent = input<ComponentRef<any> | null>();\n\n index = input<number | null>();\n locked = input<boolean>(false);\n\n mode = input.required<AXPWidgetRenderMode>();\n node = input.required<AXPWidgetNode>();\n\n private hostElement = () => this.instance?.host as HTMLDivElement;\n private getId = (w: AXPWidgetNode) => get(w, '__meta__.id');\n private isCurrentWidget = (w: AXPWidgetNode) => this.getId(w) == this.getId(this.node());\n\n private subs: Subscription[] = [];\n\n /**\n * @ignore\n */\n constructor() {\n this.subs[0] = this.service.onUpdate\n .pipe(\n //debounceTime(time),\n distinctUntilChanged(\n (p, c) => this.getId(p.widget) == this.getId(c.widget) && isEqual(p.values?.options, c.values?.options),\n ),\n filter((c) => this.isCurrentWidget(c.widget) && !this.locked()),\n )\n .subscribe((c) => {\n this.applyOptions(c.values?.options);\n });\n //\n this.subs[1] = this.service.onSelected\n .pipe(distinctUntilChanged((p, c) => this.getId(p.widget) == this.getId(c.widget)))\n .subscribe((c) => {\n this.zone.runOutsideAngular(() => {\n if (this.isCurrentWidget(c.widget) && !this.locked()) {\n this.applySelectedStyle();\n } else {\n this.removeSelectedStyle();\n }\n });\n });\n //\n this.subs[2] = this.service.onFocused\n .pipe(\n distinctUntilChanged(\n (p, c) => !isNil(p.widget) && !isNil(c.widget) && this.getId(p.widget) == this.getId(c.widget),\n ),\n )\n .subscribe((c) => {\n if (c.widget && this.isCurrentWidget(c.widget)) {\n this.addOverlay();\n } else {\n this.removeOverlay();\n }\n });\n //\n this.subs[3] = this.service.onRefresh\n .pipe(\n debounceTime(200),\n filter((c) => this.isCurrentWidget(c.widget)),\n )\n .subscribe((c) => {\n this.instance?.setChildren(this.node().children ?? []);\n });\n //\n }\n\n // Detect input changes\n ngOnChanges(changes: SimpleChanges) {\n if (changes['mode'] || changes['node']) {\n const nodeId = this.getId(this.node()) || null;\n const modeChanged = changes['mode']?.currentValue !== changes['mode']?.previousValue;\n const nodeChanged = changes['node'] && nodeId !== this.currentNodeId;\n\n // Only load if there's an actual change and we're not already loading\n //if ((modeChanged || nodeChanged) && !this.isLoadingComponent) {\n this.loadComponent();\n //}\n }\n }\n\n ngOnDestroy(): void {\n this.subs.forEach((s) => {\n s.unsubscribe();\n });\n\n // Clear loading state and reset tracking variables\n this.isLoadingComponent = false;\n this.currentNodeId = null;\n this.isLoading.set(false);\n\n // Clear view container\n this.viewContainerRef.clear();\n }\n\n private async loadComponent() {\n // Prevent duplicate loading\n if (this.isLoadingComponent) {\n return;\n }\n\n try {\n this.isLoadingComponent = true;\n const nodeId = this.getId(this.node()) || null;\n\n // Skip if already loaded for the same node and mode\n // if (this.currentNodeId === nodeId && this.instance) {\n // this.isLoadingComponent = false;\n // return;\n // }\n\n this.viewContainerRef.clear();\n this.isLoading.set(true);\n this.currentNodeId = nodeId;\n\n this.config = this.widgetRegistry.resolve(this.node().type);\n //\n const props = [...(this.config?.properties ?? []), ...(this.config?.components[this.mode()]?.properties ?? [])]\n ?.filter((c) => c.schema.defaultValue != null)\n .map((c) => ({ [c.name]: cloneDeep(c.schema.defaultValue) }))\n .reduce((acc, curr) => {\n return { ...acc, ...curr };\n }, {});\n //\n this.mergedOptions.set(merge(props, this.node().options) || {});\n\n this.preprocessAndInitialOptions(cloneDeep(this.node().options));\n\n const tokenValue = {\n node: this.node(),\n options: this.mergedOptions(),\n config: this.config,\n defaultValue: cloneDeep(this.node().defaultValue),\n } as AXPWidgetNodeToken;\n\n const token = Injector.create({\n parent: this.injector,\n providers: [\n {\n provide: AXP_WIDGET_TOKEN,\n useValue: tokenValue,\n },\n ],\n });\n\n var com = await this.config?.components[this.mode()]?.component();\n this.instance = this.viewContainerRef.createComponent<AXPBaseWidgetComponent>(com, { injector: token }).instance;\n this.instance.locked = this.locked();\n this.instance.parent = this.parentNode();\n this.instance.parentElement = this.parentElement();\n this.instance.parentComponent = this.parentComponent();\n this.instance.index = this.index();\n this.instance.mode = this.mode();\n //\n this.instance.onStatusChanged\n .pipe(\n filter((c) => c == AXPWidgetStatus.Rendered),\n first(),\n )\n .subscribe(() => {\n const host = this.hostElement();\n set(host, '__meta__.renderer', this);\n set(host, '__meta__.instance', this.instance);\n host.classList.add('axp-widget-host');\n if (this.mode() == 'designer') {\n if (!this.locked()) {\n host.addEventListener('mouseover', (e) => {\n e.stopPropagation();\n this.addOverlay();\n this.focus();\n });\n host.addEventListener('mouseleave', (e) => {\n e.stopPropagation();\n this.removeOverlay();\n this.blur();\n });\n\n host.addEventListener('click', (e) => {\n e.stopPropagation();\n this.applySelectedStyle();\n this.service.select({ widget: this.node() });\n });\n this.service.register({\n config: this.config!,\n id: get(this.node(), '__meta__.id') as any as number,\n instance: this.instance,\n widget: this.node(),\n });\n }\n }\n this.isLoading.set(false);\n });\n } catch (error) {\n console.error('Error loading component:', error);\n this.isLoading.set(false);\n } finally {\n this.isLoadingComponent = false;\n }\n }\n\n private overlay: HTMLElement | null;\n\n public select() {\n if (this.locked()) return;\n //\n this.service.select({ widget: this.node() });\n this.applySelectedStyle();\n }\n\n public focus() {\n if (this.locked()) return;\n //\n this.service.focus({ widget: this.node() });\n }\n\n public blur() {\n if (this.locked()) return;\n //\n this.service.focus({ widget: null });\n }\n\n private applySelectedStyle() {\n if (this.locked()) return;\n //\n this.hostElement()?.classList.add('axp-state-selected');\n this.hostElement()?.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n\n private removeSelectedStyle() {\n this.hostElement()?.classList.remove('axp-state-selected');\n }\n\n private addOverlay() {\n if (this.locked()) return;\n //\n this.zone.runOutsideAngular(() => {\n if (this.hostElement()) {\n this.hostElement()?.classList.add('axp-state-hover');\n //\n if (this.hostElement().querySelector('.axp-widget-overlay') || this.config?.type == 'container') {\n return;\n }\n this.overlay = document.createElement('div');\n this.overlay.classList.add('axp-widget-overlay');\n this.overlay.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n this.select();\n });\n this.overlay.addEventListener('mouseleave', (e) => {\n e.preventDefault();\n e.stopPropagation();\n this.blur();\n });\n this.hostElement().appendChild(this.overlay);\n }\n });\n }\n\n private removeOverlay() {\n this.zone.runOutsideAngular(() => {\n if (this.hostElement()) {\n this.hostElement()?.classList.remove('axp-state-hover');\n //\n this.overlay?.remove();\n }\n });\n }\n\n private preprocessAndInitialOptions(obj: any, pathPrefix: string = ''): void {\n if (!obj) return;\n //\n Object.entries(obj).forEach(([key, value]) => {\n const currentPath = pathPrefix ? `${pathPrefix}.${key}` : key;\n this.mergedOptions.update((currentOptions) => {\n return set(currentOptions, currentPath, value);\n });\n });\n }\n\n private applyOptions(values: any): void {\n if (this.instance instanceof AXPValueWidgetComponent && this.node().defaultValue != null) {\n this.instance.setValue(cloneDeep(this.node().defaultValue));\n }\n this.mergedOptions.update((currentOptions) => {\n return merge(currentOptions, values);\n });\n this.instance?.setOptions(this.mergedOptions());\n }\n}\n","import {\n AXContextMenuComponent,\n AXContextMenuItemsClickEvent,\n AXContextMenuOpeningEvent,\n AXMenuItem,\n AXMenuModule,\n} from '@acorex/components/menu';\nimport { AXPValueWidgetComponent, AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n HostBinding,\n inject,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { get } from 'lodash-es';\nimport { AXPDesignerService } from '../../shared/designer.service';\nimport { AXPDesignerWidgetComponent } from '../../shared/designer.types';\nimport { AXPWidgetDesignerRendererDirective } from '../../shared/widget-designer-renderer.directive';\n\n@Component({\n selector: 'axp-designer-board',\n templateUrl: './board.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXPWidgetCoreModule, AXPWidgetDesignerRendererDirective, AXMenuModule],\n})\nexport class AXPDesignerBoardComponent {\n @ViewChild('contextMenu')\n protected contextMenu: AXContextMenuComponent;\n\n protected context: any = {};\n private elementRef = inject(ElementRef<HTMLDivElement>) as ElementRef<HTMLDivElement>;\n private readonly mlResolver = inject(AXTranslationService);\n\n private breakpointMap = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n xxl: 1536,\n };\n\n // Unified method to extract media queries and create a custom class\n applyResponsiveStyles(breakpoint: string) {\n const minWidth = get(this.breakpointMap, breakpoint) as number;\n const mediaRules = [];\n\n // Loop through all the stylesheets\n for (const sheet of Array.from(document.styleSheets)) {\n try {\n // Loop through CSS rules\n for (const rule of Array.from(sheet.cssRules)) {\n // Check if the rule is a CSSMediaRule\n if (rule instanceof CSSMediaRule && rule.media.mediaText.includes(`min-width: ${minWidth}px`)) {\n // Loop through the media rule's CSS rules\n for (const subRule of Array.from(rule.cssRules)) {\n mediaRules.push(subRule.cssText);\n }\n }\n }\n } catch (e) {\n console.error('Error accessing stylesheet:', e);\n }\n }\n\n // Create a dynamic class for the media queries\n this.createCustomClass(`axp-preview-${breakpoint}`, mediaRules, breakpoint);\n }\n\n private createCustomClass(className: string, styles: string[], breakpoint: string) {\n const styleSheet = document.createElement('style');\n styleSheet.setAttribute('data-screen', breakpoint);\n\n // Construct a pure CSS string, dynamically replacing the breakpoint prefix\n let styleString = '';\n styles.forEach((style) => {\n // Replace any prefixed classes like 'lg:' or 'md:' dynamically\n const dynamicPrefix = new RegExp(`\\\\.${breakpoint}\\\\\\\\:`, 'g');\n styleString += `.${className} ${style.replace(dynamicPrefix, '.')}`; // Replace the breakpoint prefix\n });\n\n styleSheet.innerText = styleString;\n this.removeCustomClass();\n this.elementRef.nativeElement.appendChild(styleSheet);\n }\n\n private removeCustomClass() {\n this.elementRef.nativeElement.querySelectorAll('style').forEach((s) => s.remove());\n }\n\n protected service = inject(AXPDesignerService);\n\n protected width = computed(() => {\n switch (this.service.size()) {\n case 'sm':\n return '340px';\n case 'md':\n case 'lg':\n return '768px';\n default:\n return '100%';\n }\n });\n\n private ef = effect(() => {\n this.removeCustomClass();\n if (this.service.size() != 'xl') {\n this.applyResponsiveStyles(this.service.size());\n }\n });\n\n /**\n * @ignore\n */\n constructor() {\n this.service.onRefresh.subscribe(() => {\n this.contextMenu?.refresh();\n });\n }\n\n protected handleContextMenuOpening(e: AXContextMenuOpeningEvent) {\n const renderer = get(e.targetElement, '__meta__.renderer') as unknown as AXPWidgetDesignerRendererDirective;\n const instance = get(e.targetElement, '__meta__.instance') as unknown as AXPDesignerWidgetComponent;\n\n if (!renderer || !instance) {\n e.canceled = true;\n return;\n }\n\n renderer.select();\n\n // Fetch context menu items for the current instance\n try {\n const items: AXMenuItem[] = this.service.getContextMenuItems(instance, true);\n if (items.length) {\n e.items.push(...items);\n } else {\n e.canceled = true;\n }\n } catch (error) {\n console.error('Failed to get context menu items:', error);\n e.canceled = true;\n }\n\n // Recursively bind instance data to all items\n this.bindInstanceToItems(e.items, instance);\n\n // Traverse through parents and add their menu items directly to the root level\n this.addParentsToRootMenu(instance, e.items);\n }\n\n private addParentsToRootMenu(instance: AXPDesignerWidgetComponent, items: AXMenuItem[]) {\n let parent = (instance as unknown as AXPValueWidgetComponent)?.parent;\n const parentItems: AXMenuItem[] = [];\n\n // Traverse up the parent chain, adding each parent to the \"Parents\" menu\n while (parent) {\n try {\n const widget = parent as unknown as AXPDesignerWidgetComponent;\n const parentContextItems: AXMenuItem[] = this.service.getContextMenuItems(widget);\n\n // Create a new menu item for this parent\n const parentMenuItem: AXMenuItem = {\n text: this.mlResolver.resolve(parent.config.title),\n icon: parent.config.icon,\n items: [\n {\n text: 'Select',\n name: 'select',\n break: true,\n icon: 'fa-solid fa-arrow-pointer',\n },\n ...parentContextItems,\n ],\n };\n\n // Recursively bind instance data to all items\n this.bindInstanceToItems(parentMenuItem.items ?? [], widget);\n\n // Add the parent menu item to the parentItems array\n parentItems.push(parentMenuItem);\n } catch (error) {\n console.error('Failed to get parent context menu items:', error);\n }\n\n // Move to the next parent in the chain\n parent = (parent as unknown as AXPValueWidgetComponent)?.parent;\n }\n\n // If there are any parent items, add them under a \"Parents\" group\n if (parentItems.length > 0) {\n items[items.length - 1].break = true;\n items.push({\n text: 'Parents',\n icon: 'fa-solid fa-turn-up', // Icon for the \"Parents\" group\n items: parentItems, // Add all parent items here\n });\n }\n }\n\n protected async handleContextMenuItemClick(e: AXContextMenuItemsClickEvent) {\n if (e.item.name) {\n const instance: AXPDesignerWidgetComponent = get(\n e.item.data,\n 'instance',\n ) as unknown as AXPDesignerWidgetComponent;\n await this.service.executeCommand({ instance, name: e.item.name });\n }\n }\n\n private bindInstanceToItems(items: AXMenuItem[], instance: AXPDesignerWidgetComponent): void {\n items.forEach((item) => {\n // Ensure each item gets the correct instance\n item.data = { ...(item.data ?? {}), instance };\n\n // If the item has sub-items, bind instance to them recursively\n if (item.items) {\n this.bindInstanceToItems(item.items, instance);\n }\n });\n }\n\n @HostBinding('style')\n private get __style(): string {\n const cls: any = {};\n cls[`width`] = this.width();\n cls[`max-width`] = '1280px';\n return cls;\n }\n\n @HostBinding('class')\n private get __class(): string {\n const cls: any = {};\n cls[`axp-designer-board`] = true;\n cls[`axp-state-design`] = true;\n cls['h-full'] = true;\n cls['overflow-auto'] = true;\n cls[`axp-preview-${this.service.size()}`] = true;\n return cls;\n }\n}\n","<axp-widgets-container [context]=\"context\">\n <ng-container axp-widget-designer-renderer [node]=\"service.currentPage()\" [mode]=\"'designer'\"></ng-container>\n</axp-widgets-container>\n\n<ax-context-menu class=\"ax-dark\" #contextMenu [target]=\"'.axp-widget-host'\" [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\" (onOpening)=\"handleContextMenuOpening($event)\" (onItemClick)=\"handleContextMenuItemClick($event)\">\n</ax-context-menu>","import type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { AXPDesignerService } from '../../shared/designer.service';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n selector: 'axp-designer-breadcrumbs',\n template: `\n <ax-breadcrumbs>\n @for( b of service.breadcrumbs();track $index){\n <ax-breadcrumbs-item>\n <a (click)=\"handleClick(b)\" (mouseover)=\"handleMouseOver(b)\"> {{ getTitle(b) | translate | async }}</a>\n </ax-breadcrumbs-item>\n }\n <ng-template #divider>\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </ng-template>\n </ax-breadcrumbs>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXPWidgetCoreModule, AXBreadcrumbsModule, AXDecoratorModule, AXTranslationModule, AsyncPipe]\n})\nexport class AXPDesignerBreadcrumbsComponent {\n protected service = inject(AXPDesignerService);\n\n protected getTitle(node: AXPWidgetNode): string {\n return get(node, '__meta__.config.title') as any as string;\n }\n\n protected handleClick(node: AXPWidgetNode) {\n this.service.select({ widget: node });\n }\n\n protected handleMouseOver(node: AXPWidgetNode) {\n this.service.focus({ widget: node });\n }\n}\n","import { AXDecoratorModule } from '@acorex/components/decorators';\n\nimport { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n imports: [AXDecoratorModule],\n selector: 'axp-designer-drawer-content',\n changeDetection: ChangeDetectionStrategy.Eager,\n templateUrl: 'drawer-content.component.html'\n})\n\nexport class AXPLayoutDesignerDrawerContentComponent implements OnInit {\n constructor() { }\n\n ngOnInit() { }\n}","<div class=\"flex flex-col border-e w-72 h-full\">\n <div class=\"flex flex-row w-full justify-between p-2 border-b\">\n <div class=\"flex flex-row gap-2 items-center font-semibold\">\n <ng-content select=\"ax-title\"></ng-content>\n </div>\n <div class=\"flex gap-1 items-center\">\n <ng-content select=\"ax-content[header]\">\n </ng-content>\n <ax-close-button></ax-close-button>\n </div>\n </div>\n <div class=\"flex-1 h-full overflow-auto\">\n <ng-content select=\"ax-content[body]\">\n\n </ng-content>\n </div>\n</div>","\nimport { ChangeDetectionStrategy, Component, inject, OnInit, signal, ViewEncapsulation } from '@angular/core';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPDesignerService } from '../../../shared/designer.service';\nimport { AXPLayoutDesignerDrawerContentComponent } from '../../../shared/drawer-content/drawer-content.component';\nimport { AXPCommandService, AXPQueryService } from '@acorex-platform/framework-client/runtime';\nimport { runtimeQueryCollectionData } from '@acorex-platform/framework-shared/core';\n\nconst LIST_REGISTERED_QUERIES_KEY = 'PlatformManagement:ListRegisteredQueries';\n\n@Component({\n selector: 'axp-designer-data-sources',\n templateUrl: 'data-sources.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AXDecoratorModule,\n AXButtonModule,\n AXPLayoutDesignerDrawerContentComponent,\n AXPStateMessageComponent\n ]\n})\n\nexport class AXPDesignerDataSourcesComponent implements OnInit {\n\n protected service = inject(AXPDesignerService);\n protected commandService = inject(AXPCommandService);\n private readonly queryService = inject(AXPQueryService);\n\n protected list = signal<{ name: string, title: string }[]>([]);\n\n\n async ngOnInit() {\n try {\n const result = await this.queryService.fetch(LIST_REGISTERED_QUERIES_KEY, {\n skip: 0,\n take: 5000,\n });\n const page = runtimeQueryCollectionData(result);\n const items = (page?.items ?? []).map((c) => {\n const row = c as { name: string; title: string };\n return { name: row.name, title: row.title };\n });\n this.list.set(items);\n } catch {\n this.list.set([]);\n }\n }\n\n\n protected async handleAddClick() {\n await this.commandService.execute('Entity:Create', {\n entity: 'PlatformManagement.QueryDefinition',\n entityInfo: {\n name: 'QueryDefinition',\n module: 'PlatformManagement',\n title: '@platform-management:query-definitions.entities.query-definition.title',\n },\n data: {},\n options: {\n process: {\n canCreateNewOne: false,\n redirect: false,\n },\n layout: {\n size: 'lg',\n },\n },\n \n metadata: {\n formBuilder: true,\n },\n });\n }\n\n\n}\n","<axp-designer-drawer-content>\n <ax-title>Data Sources</ax-title>\n\n <ax-content header>\n <ax-button look=\"blank\" class=\"ax-sm\" title=\"Add New Data Source\" (onClick)=\"handleAddClick()\">\n <ax-icon class=\"fa-light fa-plus\"></ax-icon>\n </ax-button>\n </ax-content>\n\n <ax-content body>\n @if (list().length) {\n <ul class=\"axp-designer-drawer-list\">\n @for (item of list(); track $index) {\n <li>\n <i class=\"me-1 fa-solid fa-table\"></i>\n {{ item.title }}\n </li>\n }\n </ul>\n } @else {\n <axp-state-message\n icon=\"fa-light fa-database\"\n [title]=\"'@layout-designer:components.data-sources.empty-states.no-data-sources.title'\"\n [description]=\"'@layout-designer:components.data-sources.empty-states.no-data-sources.description'\"\n >\n </axp-state-message>\n }\n </ax-content>\n</axp-designer-drawer-content>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPLayoutDesignerDrawerContentComponent } from '../../../shared/drawer-content/drawer-content.component';\nimport { AXPDesignerService } from '../../../shared/designer.service';\n\n@Component({\n selector: 'axp-designer-history',\n templateUrl: 'history.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXButtonModule,\n AXDropdownModule,\n AXPLayoutDesignerDrawerContentComponent,\n AXPStateMessageComponent\n ]\n})\n\nexport class AXPDesignerHistoryComponent {\n protected service = inject(AXPDesignerService);\n}","<axp-designer-drawer-content>\n <ax-title>History</ax-title>\n\n <ax-content header>\n <ax-button look=\"blank\" class=\"ax-sm\">\n <ax-icon class=\"fa-light fa-ellipsis\"></ax-icon>\n <ax-dropdown-panel class=\"ax-sm\">\n <ax-button-item-list>\n <ax-button-item text=\"Clear\" name=\"add\" (onClick)=\"service.clearHistory()\"> </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </ax-content>\n\n <ax-content body>\n @if (service.history().length) {\n <ul class=\"axp-designer-drawer-list\">\n @for (step of service.history(); track $index) {\n <li\n (click)=\"service.navigateTo($index)\"\n [class.italic]=\"step.isFuture\"\n [class.text-neutral-400]=\"step.isFuture\"\n [class.state-selected]=\"step.isCurrent\"\n >\n <i class=\"me-1\" [ngClass]=\"step.icon\"></i>\n {{ step.description }}\n </li>\n }\n </ul>\n } @else {\n <axp-state-message\n icon=\"fa-light fa-history\"\n [title]=\"'@layout-designer:components.history.empty-states.no-changes.title'\"\n [description]=\"'@layout-designer:components.history.empty-states.no-changes.description'\"\n >\n </axp-state-message>\n }\n </ax-content>\n</axp-designer-drawer-content>\n","import { AXPWidgetConfig } from '@acorex-platform/framework-shared/widget-core';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { type AXPWidgetNode, AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\n\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { merge } from 'rxjs';\nimport { AXPLayoutDesignerDrawerContentComponent } from '../../../shared/drawer-content/drawer-content.component';\nimport { AXPDesignerService } from '../../../shared/designer.service';\n\n@Component({\n selector: 'axp-designer-outline',\n templateUrl: 'outline.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXPLayoutDesignerDrawerContentComponent,\n AXPStateMessageComponent\n ]\n})\nexport class AXPDesignerOutlineComponent {\n protected service = inject(AXPDesignerService);\n\n protected collapsedStates: Map<any, boolean> = new Map();\n\n protected root = signal(this.getTree());\n\n constructor() {\n merge(this.service.onRefresh, this.service.onUpdate).subscribe(() => {\n this.root.update((c) => ({ ...this.getTree() }));\n });\n }\n\n private getTree(): AXPWidgetNode {\n return {\n type: AXPWidgetsCatalog.document,\n children: [this.service.currentPage()],\n } as AXPWidgetNode;\n }\n\n private toggleCollapse(node: any) {\n // Toggle the current state or set to true if undefined\n this.collapsedStates.set(node, !this.collapsedStates.get(node));\n }\n\n protected isCollapsed(node: any): boolean {\n // Return the collapsed state, default is false (expanded)\n return !!this.collapsedStates.get(node);\n }\n\n protected getConfig(node: AXPWidgetNode): AXPWidgetConfig {\n return get(node, '__meta__.config') as any as AXPWidgetConfig;\n }\n\n protected handleClick(e: MouseEvent, node: AXPWidgetNode) {\n e.stopPropagation();\n this.service.select({ widget: node });\n }\n\n protected handleToggleClick(event: MouseEvent, item: any): void {\n event.stopPropagation(); // Prevents the event from bubbling up to parent elements\n this.toggleCollapse(item);\n }\n\n protected handleMouseOver(e: MouseEvent, node: AXPWidgetNode) {\n e.stopPropagation();\n this.service.focus({ widget: node });\n }\n}\n","<axp-designer-drawer-content>\n <ax-title>Outline</ax-title>\n\n <ax-content body>\n @if (root().children?.length) {\n <ul class=\"space-y-1 p-1 text-white text-sm\">\n @for (node of root().children; track $index) {\n <ng-container [ngTemplateOutlet]=\"sideMenu\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-container>\n }\n </ul>\n <ng-template #sideMenu let-item>\n <li (click)=\"handleClick($event, item)\" (mouseover)=\"handleMouseOver($event, item)\">\n <div\n [class.bg-neutral-700]=\"item === service.selectedNode()\"\n class=\"flex flex-row items-center cursor-pointer transition duration-150 ease-in-out hover:bg-gray-700 py-1 px-2 rounded-sm group\"\n >\n <span class=\"w-5\">\n @if (item.children?.length) {\n <i\n class=\"fa-solid\"\n [class.fa-chevron-right]=\"isCollapsed(item)\"\n (click)=\"handleToggleClick($event, item)\"\n [class.fa-chevron-down]=\"!isCollapsed(item)\"\n ></i>\n }\n </span>\n @let config = getConfig(item);\n <span class=\"w-5\">\n @if (config.icon) {\n <i [ngClass]=\"config.icon\"></i>\n }\n </span>\n <span class=\"truncate flex-1 pe-2\">{{ config.title }} : {{ item.name }}</span>\n <div class=\"invisible group-hover:visible flex gap-2 justify-end\">\n @if (config.type == 'container') {\n <i class=\"fa-light fa-plus hover:text-primary-500\" (click)=\"service.showPicker(item)\"></i>\n }\n @if (config.name != 'page-layout') {\n <i class=\"fa-light fa-xmark hover:text-danger-500\" (click)=\"service.removeWidget(item)\"></i>\n }\n </div>\n </div>\n @if (item.children?.length && !isCollapsed(item)) {\n <ul class=\"space-y-1 ps-3 text-white text-sm\">\n @for (child of item.children; track child) {\n <ng-container [ngTemplateOutlet]=\"sideMenu\" [ngTemplateOutletContext]=\"{ $implicit: child }\">\n </ng-container>\n }\n </ul>\n }\n </li>\n </ng-template>\n } @else {\n <axp-state-message\n icon=\"fa-light fa-shapes\"\n [title]=\"'@layout-designer:components.outline.empty-states.no-widgets.title'\"\n [description]=\"'@layout-designer:components.outline.empty-states.no-widgets.description'\"\n >\n </axp-state-message>\n }\n </ax-content>\n</axp-designer-drawer-content>\n","import { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXPLayoutDesignerDrawerContentComponent } from '../../../shared/drawer-content/drawer-content.component';\nimport { AXPDesignerService } from '../../../shared/designer.service';\n\n@Component({\n selector: 'axp-designer-pages',\n templateUrl: 'pages.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AXPWidgetCoreModule,\n AXDecoratorModule,\n AXButtonModule,\n AXPLayoutDesignerDrawerContentComponent\n]\n})\n\nexport class AXPDesignerPagesComponent {\n\n protected service = inject(AXPDesignerService);\n\n}","<axp-designer-drawer-content class=\"text-on-lightest\">\n <ax-title>Pages</ax-title>\n <ax-content header>\n <ax-button look=\"blank\" class=\"ax-sm\" (onClick)=\"service.addNewPage()\" title=\"Add New Page\">\n <ax-icon class=\"fa-light fa-file-circle-plus\"></ax-icon>\n </ax-button>\n </ax-content>\n\n <ax-content body>\n @let count = service.document().children?.length ?? 0; @if(count) {\n <ul class=\"text-sm p-2 rounded ax-md space-y-1\">\n @for( page of service.document().children;track $index) {\n <li (click)=\"service.goToPage($index)\"\n class=\"cursor-pointer transition duration-150 ease-in-out hover:bg-dark py-1 px-2 rounded-sm group flex justify-between items-center\"\n [class.bg-darkest]=\"$index == service.currentPageIndex()\">\n <div>\n <i class=\"fa-light fa-file me-1\"></i>\n Page {{ $index + 1 }}\n </div>\n <div class=\"invisible group-hover:visible flex gap-2\">\n @if(count>1) {\n <i class=\"fa-light fa-xmark hover:text-danger-500\" (click)=\"service.removePage($index)\"></i>\n }\n <i class=\"fa-light fa-clone hover:text-primary-500\" (click)=\"service.clonePage($index)\"></i>\n </div>\n </li>\n }\n </ul>\n } @else {\n <div class=\"flex justify-center items-center text-gray-300 p-4\">No pages found in the document</div>\n }\n </ax-content>\n</axp-designer-drawer-content>\n","//#region ---- Hook keys ----\n\n/**\n * Distributed hooks for extending the layout designer header menu without coupling the designer library to feature modules.\n *\n * - {@link AXPLayoutDesignerHeaderMenuHookKeys.root}: top-level bar items (siblings of File, Edit, …).\n * - {@link AXPLayoutDesignerHeaderMenuHookKeys.submenu}: extra items inside a top-level menu (`file`, `edit`, `run`, `help`).\n */\nexport const AXPLayoutDesignerHeaderMenuHookKeys = {\n root: 'layout-designer.header-menu.root',\n submenu: 'layout-designer.header-menu.submenu',\n} as const;\n\n//#endregion\n\n//#region ---- Payload types ----\n\nexport type AXPLayoutDesignerHeaderParentMenuId = 'file' | 'edit' | 'run' | 'help';\n\nexport interface AXPLayoutDesignerHeaderMenuEntry {\n id: string;\n priority?: number;\n /** i18n key (resolved by the menu host when set). */\n labelKey?: string;\n /** Plain label when no translation key is used. */\n label?: string;\n iconClass?: string;\n run: () => void | Promise<void>;\n}\n\nexport interface AXPLayoutDesignerHeaderMenuRootPayload {\n /** Current designer instance (typed as unknown to avoid circular imports in consumers). */\n designer: unknown;\n items: AXPLayoutDesignerHeaderMenuEntry[];\n}\n\nexport interface AXPLayoutDesignerHeaderMenuSubmenuPayload {\n designer: unknown;\n parentMenuId: AXPLayoutDesignerHeaderParentMenuId;\n items: AXPLayoutDesignerHeaderMenuEntry[];\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPKeyboardShortcutPriority } from '@acorex-platform/framework-shared/core';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXKBDComponent, AXKBDItemComponent } from '@acorex/components/kbd';\nimport { AXMenuModule } from '@acorex/components/menu';\n\nimport { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, inject, OnInit, signal } from '@angular/core';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPHookService, AXPKeyboardShortcutRegistry, chordToKbdItemKeys } from '@acorex-platform/framework-client/core';\nimport {\n AXPLayoutDesignerHeaderMenuEntry,\n AXPLayoutDesignerHeaderMenuHookKeys,\n AXPLayoutDesignerHeaderMenuRootPayload,\n AXPLayoutDesignerHeaderMenuSubmenuPayload,\n AXPLayoutDesignerHeaderParentMenuId,\n} from '../../shared/layout-designer-header-menu.hooks';\nimport { AXPDesignerService } from '../../shared/designer.service';\n\n//#endregion\n\n/** Menu entry with optional pre-resolved translation label for templates. */\ninterface AXPLayoutDesignerHeaderMenuEntryResolved extends AXPLayoutDesignerHeaderMenuEntry {\n resolvedLabel?: string;\n}\n\n@Component({\n imports: [AXDecoratorModule, AXKBDComponent, AXKBDItemComponent, AXMenuModule],\n selector: 'axp-designer-header-menu',\n templateUrl: 'header-menu.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPDesignerHeaderMenuComponent implements OnInit {\n //#region ---- Services & Dependencies ----\n\n protected readonly service = inject(AXPDesignerService);\n private readonly hooks = inject(AXPHookService);\n private readonly translationService = inject(AXTranslationService);\n private readonly shortcutRegistry = inject(AXPKeyboardShortcutRegistry);\n private readonly destroyRef = inject(DestroyRef);\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n constructor() {\n this.registerDesignerKeyboardShortcuts();\n }\n\n async ngOnInit(): Promise<void> {\n const rootPayload = await this.hooks.runAsync<AXPLayoutDesignerHeaderMenuRootPayload>(\n AXPLayoutDesignerHeaderMenuHookKeys.root,\n { designer: this.service, items: [] },\n );\n rootPayload.items.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n this.rootMenuContributions.set(await this.resolveMenuLabels(rootPayload.items));\n\n const parents: AXPLayoutDesignerHeaderParentMenuId[] = ['file', 'edit', 'run', 'help'];\n const map: Partial<Record<AXPLayoutDesignerHeaderParentMenuId, AXPLayoutDesignerHeaderMenuEntryResolved[]>> = {};\n for (const parentMenuId of parents) {\n const subPayload = await this.hooks.runAsync<AXPLayoutDesignerHeaderMenuSubmenuPayload>(\n AXPLayoutDesignerHeaderMenuHookKeys.submenu,\n { designer: this.service, parentMenuId, items: [] },\n );\n subPayload.items.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n map[parentMenuId] = await this.resolveMenuLabels(subPayload.items);\n }\n this.submenuContributions.set(map);\n }\n\n //#endregion\n\n //#region ---- Hook-driven menu contributions ----\n\n protected readonly rootMenuContributions = signal<AXPLayoutDesignerHeaderMenuEntryResolved[]>([]);\n\n protected readonly submenuContributions = signal<\n Partial<Record<AXPLayoutDesignerHeaderParentMenuId, AXPLayoutDesignerHeaderMenuEntryResolved[]>>\n >({});\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected submenuFor(parent: AXPLayoutDesignerHeaderParentMenuId): AXPLayoutDesignerHeaderMenuEntryResolved[] {\n return this.submenuContributions()[parent] ?? [];\n }\n\n protected runMenuEntry(entry: AXPLayoutDesignerHeaderMenuEntry): void {\n void Promise.resolve(entry.run());\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private async resolveMenuLabels(\n items: AXPLayoutDesignerHeaderMenuEntry[],\n ): Promise<AXPLayoutDesignerHeaderMenuEntryResolved[]> {\n return Promise.all(\n items.map(async (e) => ({\n ...e,\n resolvedLabel: e.labelKey\n ? await this.translationService.translateAsync(e.labelKey)\n : e.label,\n })),\n );\n }\n\n protected shortcutKeys(chord: string): string[] {\n return chordToKbdItemKeys(chord);\n }\n\n private registerDesignerKeyboardShortcuts(): void {\n const scope = '@layout-designer:feature.title';\n const base = {\n owner: this.destroyRef,\n elementRef: this.elementRef,\n priority: AXPKeyboardShortcutPriority.Page,\n scope,\n } as const;\n\n this.shortcutRegistry.register({\n ...base,\n id: 'designer-header-file',\n shortcuts: [\n {\n keys: ['shift+n'],\n title: '@layout-designer:keyboard-shortcuts.new',\n group: '@layout-designer:keyboard-shortcuts.groups.file',\n handler: (event) => {\n if (this.isDesignerBodyTarget(event)) {\n this.service.new();\n }\n },\n },\n {\n keys: ['ctrl+s'],\n title: '@layout-designer:keyboard-shortcuts.save',\n group: '@layout-designer:keyboard-shortcuts.groups.file',\n allowInEditableFields: true,\n handler: () => {\n void this.service.save();\n },\n },\n {\n keys: ['ctrl+shift+s'],\n title: '@layout-designer:keyboard-shortcuts.save-as',\n group: '@layout-designer:keyboard-shortcuts.groups.file',\n allowInEditableFields: true,\n handler: () => {\n void this.service.saveAs();\n },\n },\n ],\n });\n\n this.shortcutRegistry.register({\n ...base,\n id: 'designer-header-run',\n shortcuts: [\n {\n keys: ['ctrl+r'],\n title: '@layout-designer:keyboard-shortcuts.preview',\n group: '@layout-designer:keyboard-shortcuts.groups.run',\n allowInEditableFields: true,\n handler: () => {\n void this.service.openPreviewDialog();\n },\n },\n {\n keys: ['ctrl+shift+r'],\n title: '@layout-designer:keyboard-shortcuts.preview-window',\n group: '@layout-designer:keyboard-shortcuts.groups.run',\n allowInEditableFields: true,\n handler: () => {\n void this.service.openPreviewWindow();\n },\n },\n ],\n });\n\n this.shortcutRegistry.register({\n ...base,\n id: 'designer-header-delete',\n when: () => this.service.canDelete(),\n shortcuts: [\n {\n keys: ['delete'],\n title: '@layout-designer:keyboard-shortcuts.delete-widget',\n group: '@layout-designer:keyboard-shortcuts.groups.edit',\n handler: () => this.service.removeWidget(),\n },\n ],\n });\n\n this.shortcutRegistry.register({\n ...base,\n id: 'designer-header-insert',\n when: () => this.service.canInsert(),\n shortcuts: [\n {\n keys: ['insert'],\n title: '@layout-designer:keyboard-shortcuts.insert-widget',\n group: '@layout-designer:keyboard-shortcuts.groups.edit',\n handler: () => {\n void this.service.showPicker();\n },\n },\n ],\n });\n\n this.shortcutRegistry.register({\n ...base,\n id: 'designer-header-undo',\n when: () => this.service.canUndo(),\n shortcuts: [\n {\n keys: ['ctrl+z'],\n title: '@layout-designer:keyboard-shortcuts.undo',\n group: '@layout-designer:keyboard-shortcuts.groups.edit',\n handler: (event) => {\n if (this.isDesignerBodyTarget(event)) {\n this.service.undo();\n }\n },\n },\n ],\n });\n\n this.shortcutRegistry.register({\n ...base,\n id: 'designer-header-redo',\n when: () => this.service.canRedo(),\n shortcuts: [\n {\n keys: ['ctrl+y'],\n title: '@layout-designer:keyboard-shortcuts.redo',\n group: '@layout-designer:keyboard-shortcuts.groups.edit',\n handler: (event) => {\n if (this.isDesignerBodyTarget(event)) {\n this.service.redo();\n }\n },\n },\n ],\n });\n\n this.shortcutRegistry.register({\n ...base,\n id: 'designer-header-cut-copy',\n when: () => this.service.canCutCopy(),\n shortcuts: [\n {\n keys: ['ctrl+c'],\n title: '@layout-designer:keyboard-shortcuts.copy',\n group: '@layout-designer:keyboard-shortcuts.groups.edit',\n handler: (event) => {\n if (this.isDesignerBodyTarget(event)) {\n this.service.copy();\n }\n },\n },\n {\n keys: ['ctrl+d'],\n title: '@layout-designer:keyboard-shortcuts.clone',\n group: '@layout-designer:keyboard-shortcuts.groups.edit',\n handler: (event) => {\n if (this.isDesignerBodyTarget(event)) {\n this.service.clone();\n }\n },\n },\n {\n keys: ['ctrl+x'],\n title: '@layout-designer:keyboard-shortcuts.cut',\n group: '@layout-designer:keyboard-shortcuts.groups.edit',\n handler: (event) => {\n if (this.isDesignerBodyTarget(event)) {\n this.service.cut();\n }\n },\n },\n ],\n });\n\n this.shortcutRegistry.register({\n ...base,\n id: 'designer-header-paste',\n when: () => this.service.canPaste(),\n shortcuts: [\n {\n keys: ['ctrl+v'],\n title: '@layout-designer:keyboard-shortcuts.paste',\n group: '@layout-designer:keyboard-shortcuts.groups.edit',\n handler: (event) => {\n if (this.isDesignerBodyTarget(event)) {\n this.service.paste();\n }\n },\n },\n ],\n });\n }\n\n private isDesignerBodyTarget(event: KeyboardEvent): boolean {\n return event.target === document.body;\n }\n\n //#endregion\n}\n","<ax-menu [openOn]=\"'hover'\" [hasArrow]=\"false\">\n <ax-menu-item>\n <ax-text>File</ax-text>\n <ax-menu-item (onClick)=\"service.new()\">\n <ax-text>New</ax-text>\n <ax-suffix>\n <ax-kbd look=\"blank\">\n <ax-kbd-item [keys]=\"shortcutKeys('shift+n')\"></ax-kbd-item>\n </ax-kbd>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n @if (service.canSave()) {\n <ng-container>\n <ax-menu-item (onClick)=\"service.save()\">\n <ax-text>Save</ax-text>\n <ax-suffix>\n <ax-kbd look=\"blank\">\n <ax-kbd-item [keys]=\"shortcutKeys('ctrl+s')\"></ax-kbd-item>\n </ax-kbd>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item (onClick)=\"service.saveAs()\">\n <ax-text>Save As...</ax-text>\n <ax-suffix>\n <ax-kbd look=\"blank\">\n <ax-kbd-item [keys]=\"shortcutKeys('ctrl+shift+s')\"></ax-kbd-item>\n </ax-kbd>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n </ng-container>\n }\n <ax-menu-item>\n <ax-text>Export</ax-text>\n <ax-menu-item (onClick)=\"service.downloadJson()\">\n <ax-text>Download JSON</ax-text>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Import</ax-text>\n <ax-menu-item (onClick)=\"service.importJSon()\">\n <ax-text>Import JSON</ax-text>\n </ax-menu-item>\n </ax-menu-item>\n @for (item of submenuFor('file'); track item.id) {\n <ax-menu-item (onClick)=\"runMenuEntry(item)\">\n @if (item.iconClass) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"item.iconClass\"></i>\n </ax-icon>\n </ax-prefix>\n }\n @if (item.resolvedLabel) {\n <ax-text>{{ item.resolvedLabel }}</ax-text>\n }\n </ax-menu-item>\n }\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Edit</ax-text>\n <ax-menu-item [disabled]=\"!service.canUndo()\" (onClick)=\"service.undo()\">\n <ax-text>Undo</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-rotate-left\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-kbd look=\"blank\">\n <ax-kbd-item [keys]=\"shortcutKeys('ctrl+z')\"></ax-kbd-item>\n </ax-kbd>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canRedo()\" (onClick)=\"service.redo()\">\n <ax-text>Redo</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-rotate-right\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-kbd look=\"blank\">\n <ax-kbd-item [keys]=\"shortcutKeys('ctrl+y')\"></ax-kbd-item>\n </ax-kbd>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n <ax-menu-item\n [disabled]=\"!service.canCutCopy()\"\n (onClick)=\"service.clone()\"\n >\n <ax-text>Clone</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-clone\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-kbd look=\"blank\">\n <ax-kbd-item [keys]=\"shortcutKeys('ctrl+d')\"></ax-kbd-item>\n </ax-kbd>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.cut()\">\n <ax-text>Cut</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-cut\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-kbd look=\"blank\">\n <ax-kbd-item [keys]=\"shortcutKeys('ctrl+x')\"></ax-kbd-item>\n </ax-kbd>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.copy()\">\n <ax-text>Copy</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-copy\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-kbd look=\"blank\">\n <ax-kbd-item [keys]=\"shortcutKeys('ctrl+c')\"></ax-kbd-item>\n </ax-kbd>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canPaste()\" (onClick)=\"service.paste()\">\n <ax-text>Paste</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-paste\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-kbd look=\"blank\">\n <ax-kbd-item [keys]=\"shortcutKeys('ctrl+v')\"></ax-kbd-item>\n </ax-kbd>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n <ax-menu-item\n [disabled]=\"!service.canDelete()\"\n (onClick)=\"service.removeWidget()\"\n >\n <ax-text>Delete</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-trash\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-kbd look=\"blank\">\n <ax-kbd-item [keys]=\"shortcutKeys('delete')\"></ax-kbd-item>\n </ax-kbd>\n </ax-suffix>\n </ax-menu-item>\n @for (item of submenuFor('edit'); track item.id) {\n <ax-menu-item (onClick)=\"runMenuEntry(item)\">\n @if (item.iconClass) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"item.iconClass\"></i>\n </ax-icon>\n </ax-prefix>\n }\n @if (item.resolvedLabel) {\n <ax-text>{{ item.resolvedLabel }}</ax-text>\n }\n </ax-menu-item>\n }\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Run</ax-text>\n <ax-menu-item (onClick)=\"service.openPreviewDialog()\">\n <ax-text>Preview</ax-text>\n <ax-prefix> </ax-prefix>\n <ax-suffix>\n <ax-kbd look=\"blank\">\n <ax-kbd-item [keys]=\"shortcutKeys('ctrl+r')\"></ax-kbd-item>\n </ax-kbd>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item (onClick)=\"service.openPreviewWindow()\">\n <ax-text>Preview in seperate window</ax-text>\n <ax-prefix> </ax-prefix>\n <ax-suffix>\n <ax-kbd look=\"blank\">\n <ax-kbd-item [keys]=\"shortcutKeys('ctrl+shift+r')\"></ax-kbd-item>\n </ax-kbd>\n </ax-suffix>\n </ax-menu-item>\n @for (item of submenuFor('run'); track item.id) {\n <ax-menu-item (onClick)=\"runMenuEntry(item)\">\n @if (item.iconClass) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"item.iconClass\"></i>\n </ax-icon>\n </ax-prefix>\n }\n @if (item.resolvedLabel) {\n <ax-text>{{ item.resolvedLabel }}</ax-text>\n }\n </ax-menu-item>\n }\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Help</ax-text>\n <ax-menu-item>\n <ax-text>About</ax-text>\n </ax-menu-item>\n @for (item of submenuFor('help'); track item.id) {\n <ax-menu-item (onClick)=\"runMenuEntry(item)\">\n @if (item.iconClass) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"item.iconClass\"></i>\n </ax-icon>\n </ax-prefix>\n }\n @if (item.resolvedLabel) {\n <ax-text>{{ item.resolvedLabel }}</ax-text>\n }\n </ax-menu-item>\n }\n </ax-menu-item>\n @for (item of rootMenuContributions(); track item.id) {\n <ax-menu-item (onClick)=\"runMenuEntry(item)\">\n @if (item.iconClass) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"item.iconClass\"></i>\n </ax-icon>\n </ax-prefix>\n }\n @if (item.resolvedLabel) {\n <ax-text>{{ item.resolvedLabel }}</ax-text>\n }\n </ax-menu-item>\n }\n</ax-menu>\n","import { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXMenuModule } from '@acorex/components/menu';\n\nimport { Component, model, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'axp-designer-view-sizes',\n imports: [AXButtonGroupModule, AXDecoratorModule, AXMenuModule],\n changeDetection: ChangeDetectionStrategy.Eager,\n template: `\n <ax-button-group [color]=\"'primary'\" [selection]=\"'multiple'\">\n <ax-button-group-item [selected]=\"size() == 'xl'\" [data]=\"'xl'\" (onClick)=\"size.set('xl')\">\n <ax-icon class=\"fa-light fa-desktop fa-fw\"></ax-icon>\n </ax-button-group-item>\n <ax-button-group-item [selected]=\"size() == 'lg'\" [data]=\"'lg'\" (onClick)=\"size.set('lg')\">\n <ax-icon class=\"fa-light fa-tablet fa-fw\"></ax-icon>\n </ax-button-group-item>\n <ax-button-group-item [selected]=\"size() == 'sm'\" [data]=\"'sm'\" (onClick)=\"size.set('sm')\">\n <ax-icon class=\"fa-light fa-mobile fa-fw\"></ax-icon>\n </ax-button-group-item>\n </ax-button-group>\n `,\n})\nexport class AXPDesignerViewSizeToolbarComponent {\n public size = model<string>('xl');\n}\n","import { AXPWidgetConfig } from '@acorex-platform/framework-shared/widget-core';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, HostBinding, inject, input, ViewChild, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { AXPDesignerBoardComponent } from './components/board/board.component';\nimport { AXPDesignerBreadcrumbsComponent } from './components/breadcrumbs/breadcrumbs.component';\nimport { AXPDesignerDataSourcesComponent } from './components/drawers/data-sources/data-sources.component';\nimport { AXPDesignerHistoryComponent } from './components/drawers/history/history.component';\nimport { AXPDesignerOutlineComponent } from './components/drawers/outline/outline.component';\nimport { AXPDesignerPagesComponent } from './components/drawers/pages/pages.component';\nimport { AXPDesignerHeaderMenuComponent } from './components/header-menu/header-menu.component';\nimport { AXPDesignerViewSizeToolbarComponent } from './components/size-mode/view-size-toolbar.component';\nimport { AXPDesignerService } from './shared/designer.service';\nimport { AXPTemplateLoadingStrategy } from './shared/designer.types';\nimport { AXPWidgetPropertyViewerComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXTranslationModule } from '@acorex/core/translation';\n\n@Component({\n selector: 'axp-layout-designer',\n templateUrl: './designer.component.html',\n styleUrl: './designer.component.css',\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n AXPWidgetCoreModule,\n AXPDesignerBoardComponent,\n AXPWidgetPropertyViewerComponent,\n AXPDesignerBreadcrumbsComponent,\n AXPDesignerOutlineComponent,\n AXPDesignerHeaderMenuComponent,\n AXPDesignerHistoryComponent,\n AXPDesignerDataSourcesComponent,\n AXPDesignerPagesComponent,\n AXPDesignerViewSizeToolbarComponent,\n AXTabsModule,\n AXButtonModule,\n AXDrawerModule,\n AXDecoratorModule,\n AXMenuModule,\n AXButtonGroupModule,\n AXDropdownModule,\n AXDropdownButtonModule,\n AXTranslationModule,\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n providers: [AXPDesignerService]\n})\nexport class AXPLayoutDesignerComponent {\n protected service = inject(AXPDesignerService);\n\n id = input<string | null>();\n strategy = input<string | null>();\n\n @ViewChild(AXPWidgetPropertyViewerComponent, { static: true })\n private propertyViewer: AXPWidgetPropertyViewerComponent;\n\n protected nodeConfig = computed<AXPWidgetConfig | null>(() =>\n this.service.selectedNode() ? (get(this.service.selectedNode(), '__meta__.config') as any as AXPWidgetConfig) : null\n );\n\n constructor() {\n this.service.onUpdate.subscribe((e) => {\n this.propertyViewer.update(e.values);\n });\n }\n\n ngOnInit() {\n if (this.id()) {\n this.service.loadById(this.id()!, { strategy: (this.strategy() ?? AXPTemplateLoadingStrategy.Connector) as AXPTemplateLoadingStrategy });\n }\n }\n\n @HostBinding('style')\n private get __styles(): string {\n const styles: any = {};\n styles[`direction`] = 'ltr';\n return styles;\n }\n}\n","<ax-drawer-container class=\"h-full w-full flex relative overflow-hidden\">\n <ax-content class=\"contents\">\n <!-- Toolbar Side -->\n <div\n class=\"min-w-10 bg-lightest border-e ax-sm flex flex-col items-center ax-dark\"\n >\n <div class=\"min-w-10 h-10 flex items-center justify-center border-b\">\n <img src=\"assets/images/brand/platform/platform-icon-light.svg\" class=\"w-6\" />\n </div>\n <div class=\"py-1\"></div>\n <div class=\"flex flex-col gap-2\">\n <!-- <ax-button look=\"blank\">\n <ax-icon class=\"fa-solid fa-puzzle text-sm\"> </ax-icon>\n </ax-button> -->\n <ax-button look=\"blank\" (onClick)=\"pages.toggle()\" title=\"Pages\">\n <ax-icon class=\"fa-solid fa-page text-sm\"> </ax-icon>\n </ax-button>\n <ax-button\n look=\"blank\"\n (onClick)=\"datasources.toggle()\"\n title=\"Data Sources\"\n >\n <ax-icon class=\"fa-solid fa-database text-sm\"> </ax-icon>\n </ax-button>\n <ax-button look=\"blank\" (onClick)=\"outline.toggle()\" title=\"Outline\">\n <ax-icon class=\"fa-solid fa-list-tree text-sm\"> </ax-icon>\n </ax-button>\n <ax-button look=\"blank\" (onClick)=\"history.toggle()\" title=\"History\">\n <ax-icon class=\"fa-solid fa-clock-rotate-left text-sm\"> </ax-icon>\n </ax-button>\n <!-- <ax-button look=\"blank\" title=\"Timeline\">\n <ax-icon class=\"fa-solid fa-diagram-sankey text-sm\"> </ax-icon>\n </ax-button> -->\n </div>\n </div>\n <!-- Main Side -->\n <div class=\"col-span-10 flex flex-col flex-1\">\n <!-- Header Toolbar -->\n <div class=\"h-10 bg-lightest border-b flex justify-between px-2 ax-dark\">\n <div class=\"flex flex-1 items-center text-white justify-start\">\n <axp-designer-header-menu></axp-designer-header-menu>\n </div>\n <div\n class=\"flex flex-1 flex-row gap-2 ax-sm items-center justify-center\"\n >\n <axp-designer-view-sizes\n [(size)]=\"service.size\"\n ></axp-designer-view-sizes>\n </div>\n <div class=\"flex flex-1 flex-row gap-2 ax-sm items-center justify-end\">\n <ax-dropdown-button\n mode=\"split\"\n look=\"solid\"\n text=\"Preview\"\n class=\"ax-sm\"\n (onClick)=\"service.openPreviewDialog()\"\n >\n <ax-button-item-list>\n <ax-button-item\n text=\"Open in new window\"\n (onClick)=\"service.openPreviewWindow()\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-regular fa-window-restore\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-button>\n </div>\n </div>\n <!-- Board -->\n <ax-drawer-container class=\"w-full flex-1\">\n <!-- Pages -->\n <ax-drawer\n #pages\n location=\"start\"\n mode=\"push\"\n class=\"ax-dark bg-lightest\"\n >\n <ax-content>\n <axp-designer-pages></axp-designer-pages>\n </ax-content>\n </ax-drawer>\n <!-- Datasources -->\n <ax-drawer\n #datasources\n location=\"start\"\n mode=\"push\"\n class=\"ax-dark bg-lightest\"\n >\n <ax-content>\n <axp-designer-data-sources></axp-designer-data-sources>\n </ax-content>\n </ax-drawer>\n <!-- Outline Pnael -->\n <ax-drawer\n #outline\n location=\"start\"\n mode=\"push\"\n class=\"ax-dark bg-lightest\"\n >\n <ax-content>\n <axp-designer-outline></axp-designer-outline>\n </ax-content>\n </ax-drawer>\n <!-- History Pnael -->\n <ax-drawer\n #history\n location=\"start\"\n mode=\"push\"\n class=\"ax-dark bg-lightest\"\n >\n <ax-content>\n <axp-designer-history></axp-designer-history>\n </ax-content>\n </ax-drawer>\n <!-- Content of board -->\n <ax-content class=\"light-surface bg-lighter flex justify-center p-10\">\n <axp-designer-board class=\"rounded-lg bg-lightest shadow-md\">\n </axp-designer-board>\n </ax-content>\n </ax-drawer-container>\n <!-- Footer -->\n <div class=\"h-10 bg-lightest border-t flex items-center ax-dark\">\n <axp-designer-breadcrumbs class=\"border-default p-2 font-normal\">\n </axp-designer-breadcrumbs>\n </div>\n </div>\n </ax-content>\n <!-- Property Side -->\n <ax-drawer\n class=\"ax-dark axp-designer-prop-side\"\n location=\"end\"\n mode=\"push\"\n [collapsed]=\"false\"\n #pd\n >\n <ax-content class=\"flex flex-col h-full overflow-hidden\">\n <div\n class=\"flex flex-row w-full justify-between text-white px-4 border-b h-10\"\n >\n <div class=\"flex flex-row gap-2 items-center\">\n <i [ngClass]=\"$safeNavigationMigration(nodeConfig()?.icon)\"></i>\n <span class=\"font-semibold\">{{\n $safeNavigationMigration(nodeConfig()?.title) | translate | async\n }}</span>\n </div>\n </div>\n <axp-widget-property-viewer\n [mode]=\"'advanced'\"\n [widget]=\"service.selectedNode()!\"\n (onChanged)=\"\n service.update({ values: $event.values, mode: $event.mode })\n \"\n class=\"flex-1 overflow-auto\"\n >\n </axp-widget-property-viewer>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>\n","\nimport { AXPContextChangeEvent, type AXPWidgetNode, AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\nimport { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport { Component, computed, inject, signal, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\nimport { AXPDesignerConnector, AXPDesignerMessageKeys, AXPDesignerPreviewMessage } from '../designer';\n\nimport { AXPBroadcastEventService } from '@acorex-platform/framework-client/core';\nimport { AXUnsubscriber } from '@acorex/core/utils';\n\n@Component({\n selector: 'axp-layout-builder-viewer',\n template: `\n <axp-widgets-container [context]=\"context\" (onContextChanged)=\"handleContextChanged($event)\">\n <ng-container axp-widget-renderer [node]=\"currentPage()\" [mode]=\"'edit'\"></ng-container>\n </axp-widgets-container>\n `,\n encapsulation: ViewEncapsulation.None,\n imports: [AXPWidgetCoreModule],\n changeDetection: ChangeDetectionStrategy.Eager,\n providers: [AXUnsubscriber],\n})\nexport class AXPLayoutDesignerPreviewViewerComponent {\n protected context: any = {};\n\n protected readonly document = signal({ type: AXPWidgetsCatalog.document } as AXPWidgetNode);\n protected readonly currentPageIndex = signal(0);\n protected connector = inject(AXPDesignerConnector);\n protected eventService = inject(AXPBroadcastEventService);\n protected unsubscriber = inject(AXUnsubscriber);\n\n protected readonly currentPage = computed(() => {\n return (\n this.document().children?.[this.currentPageIndex()] ?? ({ type: AXPWidgetsCatalog.pageLayout } as AXPWidgetNode)\n );\n });\n\n constructor() {\n this.eventService\n .listen<AXPDesignerPreviewMessage>(AXPDesignerMessageKeys.Preview)\n .pipe(this.unsubscriber.takeUntilDestroy)\n .subscribe((event) => {\n this.document.set(event.data.document);\n })\n //\n if (document.body.parentElement) {\n document.body.parentElement.classList.remove('ax-dark');\n document.body.parentElement.style.backgroundColor = 'unset';\n document.body.style.backgroundColor = 'unset';\n }\n }\n\n ngAfterViewInit() {\n this.eventService.publish(AXPDesignerMessageKeys.Loaded)\n }\n\n protected handleContextChanged(e: AXPContextChangeEvent) {\n this.context = e.data;\n this.eventService.publish(AXPDesignerMessageKeys.ContextChanged, this.context)\n }\n\n ngOnDestroy(): void {\n this.eventService.unsubscribe(AXPDesignerMessageKeys.Preview);\n\n }\n}\n","import { AXSafePipe } from '@acorex/core/pipes';\nimport { Component, computed, HostBinding, input, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'axp-layout-preview-frame',\n template: `\n <div\n class=\"flex-1 lg:rounded-lg bg-white lg:shadow-md p-2\"\n [style.width]=\"width()\"\n style=\"max-width: 1280px;\"\n >\n <iframe\n class=\"w-full h-full bg-transparent\"\n [frameBorder]=\"0\"\n [src]=\"'/forms/viewer' | safe : 'resourceUrl'\"\n >\n </iframe>\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [AXSafePipe]\n})\nexport class AXPLayoutDesignerPreviewFrameComponent {\n public size = input<string>('xl');\n\n protected width = computed(() => {\n ;\n switch (this.size()) {\n case 'sm':\n return '340px';\n case 'md':\n case 'lg':\n return '768px';\n default:\n return '100%';\n }\n });\n\n @HostBinding('class')\n private get __class(): string {\n const cls: any = {};\n cls['flex'] = true;\n cls['flex-col'] = true;\n cls['h-full'] = true;\n cls['W-full'] = true;\n cls['lg:p-20'] = true;\n cls['bg-[#f3f3fe]'] = true;\n cls['w-full'] = true;\n cls['items-center'] = true;\n cls['overflow-auto'] = true;\n return cls;\n }\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXJsonViewerModule } from '@acorex/components/json-viewer';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXPClipBoardService, AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPPlatformScope } from '@acorex-platform/framework-shared/core';\n\nimport { Component, inject, signal, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\nimport { AXPDesignerViewSizeToolbarComponent } from '../designer/components/size-mode/view-size-toolbar.component';\nimport { AXPLayoutDesignerPreviewFrameComponent } from './preview-frame.component';\nimport { AXPBroadcastEventService } from '@acorex-platform/framework-client/core';\nimport { AXPDesignerMessageKeys } from '../designer';\n\n@Component({\n selector: 'axp-layout-preview',\n templateUrl: './preview.component.html',\n styleUrls: ['./preview.component.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [\n AXButtonModule,\n AXButtonGroupModule,\n AXDrawerModule,\n AXDecoratorModule,\n AXJsonViewerModule,\n AXPLayoutDesignerPreviewFrameComponent,\n AXPDesignerViewSizeToolbarComponent\n ]\n})\nexport class AXPLayoutDesignerPreviewComponent extends AXBasePageComponent {\n protected clipboard = inject(AXPClipBoardService);\n protected settings = inject(AXPSettingsService);\n protected eventService = inject(AXPBroadcastEventService);\n\n protected initialSize: string = 'xl';\n protected isDialogWindow: boolean = false;\n\n private jsonSettingsKey = 'forms:preview:json';\n protected jsonViewCollapsed = signal(true);\n\n protected size = signal<string>(this.initialSize);\n\n protected context = signal<any>({});\n\n constructor() {\n super();\n //\n this.eventService.listen(AXPDesignerMessageKeys.ContextChanged).subscribe((event) => {\n this.context.set(event.data);\n });\n }\n\n protected override async ngOnInit() {\n this.size.set(this.initialSize);\n const settingValue = await this.settings.get<boolean>(this.jsonSettingsKey);\n this.jsonViewCollapsed.set(!settingValue);\n }\n\n protected handleCloseButton() {\n if (this.isDialogWindow) {\n this.close();\n } else {\n window.opener.focus();\n window.close();\n }\n }\n\n protected handlePreviewWindow() {\n this.eventService.publish(AXPDesignerMessageKeys.PreviewWindow)\n this.close();\n }\n\n protected handleCopyJson() {\n this.clipboard.copy('Json Data', JSON.stringify(this.context()));\n }\n\n protected async handleCollapsedChange(value: boolean) {\n await this.settings.scope(AXPPlatformScope.User).set<boolean>(this.jsonSettingsKey, !value);\n }\n}\n","<ax-drawer-container class=\"ax-dark h-full w-full flex relative overflow-hidden\">\n <ax-content>\n <div class=\"ax-dark flex flex-col h-full relative bg-default\">\n <div class=\"flex items-center justify-between h-12 bg-lightest shadow ax-sm px-2\">\n <div class=\"flex flex-1 w-16 justify-start\">\n <ax-button look=\"blank\" text=\"Back to Designer\" (onClick)=\"handleCloseButton()\">\n <ax-prefix>\n <ax-icon class=\"fa-regular fa-chevron-left\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n <div class=\"flex flex-1 flex-row gap-2 ax-sm items-center justify-center\">\n <axp-designer-view-sizes [(size)]=\"size\"></axp-designer-view-sizes>\n </div>\n <div class=\"flex flex-1 w-16 justify-end\">\n @if(isDialogWindow) {\n <ax-button look=\"blank\" [title]=\"'Preview in to seperate window'\" (onClick)=\"handlePreviewWindow()\">\n <ax-prefix>\n <ax-icon class=\"fa-regular fa-window-restore\"></ax-icon>\n </ax-prefix>\n </ax-button>\n }@else { }\n <ax-button look=\"blank\" (onClick)=\"jsonView.toggle()\">\n <ax-prefix>\n <ax-icon class=\"fa-regular fa-list-tree\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </div>\n\n <div class=\"bg-[#f3f3fe] flex flex-1 justify-center overflow-auto\">\n <axp-layout-preview-frame [size]=\"size()\"></axp-layout-preview-frame>\n </div>\n </div>\n </ax-content>\n <!-- [collapsed]=\"jsonViewCollapsed()\"\n (collapsedChange)=\"handleCollapsedChange($event)\" -->\n <ax-drawer class=\"w-1/3 border-s\" location=\"end\" mode=\"push\" #jsonView>\n <ax-content>\n <div class=\"ax-dark flex flex-col h-full relative bg-default\">\n <div class=\"flex items-center justify-between h-12 bg-lightest shadow ax-sm px-2\">\n <div class=\"flex flex-1 w-16 justify-start\">\n <span class=\"text-surface-fore font-semibold\">Form Data</span>\n </div>\n <div class=\"flex flex-1 flex-row gap-2 ax-sm items-center justify-center\"></div>\n <div class=\"flex flex-1 w-16 justify-end\">\n <ax-button look=\"blank\" (onClick)=\"handleCopyJson()\">\n <ax-prefix>\n <ax-icon class=\"fa-regular fa-copy\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </div>\n <div class=\"px-6 text-white\">\n <ax-json-viewer [json]=\"context()\"></ax-json-viewer>\n </div>\n </div>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i4","i7","i3","merge","i5","i6"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-framework-client-layout-designer.mjs","sources":["../../../../../libs/framework/client/layout/designer/src/lib/designer/shared/command.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/shared/designer-connector.service.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/shared/generic-commands.types.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/shared/designer.types.ts","../../../../../libs/framework/client/layout/designer/src/lib/preview/preview-session.util.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/widget-picker/widget-picker-tab-context.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/shared/designer-surface-widget-filter.util.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/widget-picker/widget-picker.service.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/shared/designer-surface-profile.defaults.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/shared/designer.service.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/add-widget-button/add-widget-button.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/add-widget-button/add-widget-line-button.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/add-widget-button/add-widget-mini-button.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/flex-drawer/flex-drawer.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/grid-drawer/grid-drawer.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/widget-picker/widget-picker.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/widget-picker/widget-picker.component.html","../../../../../libs/framework/client/layout/designer/src/lib/designer/shared/widget-designer-renderer.directive.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/board/board.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/board/board.component.html","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/breadcrumbs/breadcrumbs.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/shared/drawer-content/drawer-content.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/shared/drawer-content/drawer-content.component.html","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/drawers/data-sources/data-sources.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/drawers/data-sources/data-sources.component.html","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/drawers/history/history.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/drawers/history/history.component.html","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/drawers/outline/outline.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/drawers/outline/outline.component.html","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/drawers/pages/pages.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/drawers/pages/pages.component.html","../../../../../libs/framework/client/layout/designer/src/lib/designer/shared/layout-designer-header-menu.hooks.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/header-menu/header-menu.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/header-menu/header-menu.component.html","../../../../../libs/framework/client/layout/designer/src/lib/designer/components/size-mode/view-size-toolbar.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/shared/layout-designer-footer.hooks.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/designer.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/designer/designer.component.html","../../../../../libs/framework/client/layout/designer/src/lib/designer/shared/designer-surface-profile.types.ts","../../../../../libs/framework/client/layout/designer/src/lib/preview/preview-viewer.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/preview/preview-frame.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/preview/preview.component.ts","../../../../../libs/framework/client/layout/designer/src/lib/preview/preview.component.html","../../../../../libs/framework/client/layout/designer/src/acorex-platform-framework-client-layout-designer.ts"],"sourcesContent":["import type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport { computed, Injectable, signal } from '@angular/core';\nimport { cloneDeep, isEqual } from 'lodash-es';\n\n//#region ----- Types -----\n\nexport interface Command {\n execute(): void;\n undo(): void;\n description(): string;\n icon(): string;\n getExecutionSelection(): AXPWidgetNode;\n getUndoSelection(): AXPWidgetNode;\n canCoalesceWith?(command: Command): boolean;\n coalesceWith?(command: Command): void;\n}\n\n//#endregion\n\n//#region ----- Commands -----\n\nexport class AddWidgetCommand implements Command {\n private widget: AXPWidgetNode;\n private parent: AXPWidgetNode;\n private previousSelection: AXPWidgetNode;\n\n constructor(widget: AXPWidgetNode, parent: AXPWidgetNode, previousSelection: AXPWidgetNode) {\n this.widget = widget;\n this.parent = parent;\n this.previousSelection = previousSelection;\n }\n\n execute() {\n this.parent.children = this.parent.children || [];\n this.parent.children.push(this.widget);\n }\n\n undo() {\n this.parent.children = this.parent.children || [];\n const index = this.parent.children.indexOf(this.widget);\n if (index > -1) {\n this.parent.children.splice(index, 1);\n }\n }\n\n description() {\n return `Added widget ${this.widget.name}`;\n }\n\n icon() {\n return `fa-solid fa-square-plus`;\n }\n\n getExecutionSelection() {\n return this.widget;\n }\n\n getUndoSelection() {\n return this.previousSelection;\n }\n}\n\nexport class RemoveWidgetCommand implements Command {\n private widget: AXPWidgetNode;\n private parent: AXPWidgetNode;\n private previousSelection: AXPWidgetNode;\n private index: number;\n\n constructor(widget: AXPWidgetNode, parent: AXPWidgetNode, previousSelection: AXPWidgetNode) {\n this.widget = widget;\n this.parent = parent;\n this.previousSelection = previousSelection;\n parent.children = parent.children || [];\n this.index = parent.children.indexOf(widget);\n }\n\n execute() {\n this.parent.children = this.parent.children || [];\n this.index = this.parent.children.indexOf(this.widget);\n if (this.index > -1) {\n this.parent.children.splice(this.index, 1);\n }\n }\n\n undo() {\n this.parent.children = this.parent.children || [];\n const insertAt = Math.min(Math.max(this.index, 0), this.parent.children.length);\n this.parent.children.splice(insertAt, 0, this.widget);\n }\n\n description() {\n return `Removed widget ${this.widget.name}`;\n }\n\n icon() {\n return `fa-solid fa-square-minus`;\n }\n\n getExecutionSelection() {\n return this.previousSelection;\n }\n\n getUndoSelection() {\n return this.widget;\n }\n}\n\nexport class UpdateWidgetCommand implements Command {\n private widget: AXPWidgetNode;\n private previousState: AXPWidgetNode;\n private newState: AXPWidgetNode;\n private previousSelection: AXPWidgetNode;\n\n constructor(widget: AXPWidgetNode, values: Partial<AXPWidgetNode>, previousSelection: AXPWidgetNode) {\n this.widget = widget;\n this.previousSelection = previousSelection;\n this.previousState = this.captureState(widget);\n this.newState = this.captureState(widget);\n this.applyPatch(this.newState as unknown as Record<string, unknown>, values as Record<string, unknown>);\n }\n\n execute() {\n this.restoreState(this.widget, this.newState);\n }\n\n undo() {\n this.restoreState(this.widget, this.previousState);\n }\n\n description() {\n return `Updated widget ${this.widget.name}`;\n }\n\n icon() {\n return `fa-solid fa-pen`;\n }\n\n getExecutionSelection() {\n return this.widget;\n }\n\n getUndoSelection() {\n return this.widget;\n }\n\n canCoalesceWith(command: Command): boolean {\n return command instanceof UpdateWidgetCommand && command.widget === this.widget;\n }\n\n coalesceWith(command: Command): void {\n if (!(command instanceof UpdateWidgetCommand)) {\n return;\n }\n this.newState = command.newState;\n }\n\n isNoOp(): boolean {\n return isEqual(this.previousState, this.newState);\n }\n\n private captureState(node: AXPWidgetNode): AXPWidgetNode {\n const { children: _children, ...rest } = node as AXPWidgetNode & { children?: AXPWidgetNode[] };\n return cloneDeep(rest) as AXPWidgetNode;\n }\n\n private applyPatch(target: Record<string, unknown>, values: Record<string, unknown>): void {\n Object.keys(values).forEach((key) => {\n if (key === 'children' || key === '__meta__') {\n return;\n }\n const incoming = values[key];\n const current = target[key];\n if (incoming === undefined) {\n return;\n }\n if (\n incoming &&\n typeof incoming === 'object' &&\n !Array.isArray(incoming) &&\n current &&\n typeof current === 'object' &&\n !Array.isArray(current)\n ) {\n this.applyPatch(current as Record<string, unknown>, incoming as Record<string, unknown>);\n return;\n }\n target[key] = cloneDeep(incoming);\n });\n }\n\n private restoreState(target: AXPWidgetNode, source: AXPWidgetNode): void {\n const preservedChildren = target.children;\n const preservedMeta = (target as { __meta__?: unknown }).__meta__;\n\n Object.keys(target).forEach((key) => {\n if (key === 'children' || key === '__meta__') {\n return;\n }\n if (!(key in source)) {\n delete (target as unknown as Record<string, unknown>)[key];\n }\n });\n\n Object.keys(source).forEach((key) => {\n if (key === 'children' || key === '__meta__') {\n return;\n }\n (target as unknown as Record<string, unknown>)[key] = cloneDeep(\n (source as unknown as Record<string, unknown>)[key],\n );\n });\n\n if (preservedChildren) {\n target.children = preservedChildren;\n }\n if (preservedMeta) {\n (target as { __meta__?: unknown }).__meta__ = preservedMeta;\n }\n }\n}\n\nexport class CompositeCommand implements Command {\n private commands: Command[];\n private label?: string;\n\n constructor(commands: Command[], label?: string) {\n this.commands = commands;\n this.label = label;\n }\n\n execute() {\n this.commands.forEach((command) => command.execute());\n }\n\n undo() {\n for (let index = this.commands.length - 1; index >= 0; index--) {\n this.commands[index].undo();\n }\n }\n\n description() {\n if (this.label) {\n return this.label;\n }\n const addCount = this.commands.filter((command) => command instanceof AddWidgetCommand).length;\n if (addCount > 1 && addCount === this.commands.length) {\n return `Added ${addCount} widgets`;\n }\n return this.commands[this.commands.length - 1]?.description() ?? 'Multiple changes';\n }\n\n icon() {\n return this.commands[0]?.icon() ?? 'fa-solid fa-layer-group';\n }\n\n getExecutionSelection() {\n const update = this.commands.find((command) => command instanceof UpdateWidgetCommand);\n if (update) {\n return update.getExecutionSelection();\n }\n return this.commands[this.commands.length - 1].getExecutionSelection();\n }\n\n getUndoSelection() {\n return this.commands[0].getUndoSelection();\n }\n}\n\n//#endregion\n\n//#region ----- Command manager -----\n\n@Injectable()\nexport class CommandManager {\n private undoStack = signal<Command[]>([]);\n private currentIndex = signal<number>(-1);\n private transactionDepth = 0;\n private transactionCommands: Command[] = [];\n private transactionDescription?: string;\n public readonly selectedNode = signal<AXPWidgetNode | null>(null);\n\n public canUndo = computed(() => this.currentIndex() >= 0);\n public canRedo = computed(() => this.currentIndex() < this.undoStack().length - 1);\n public readonly isInTransaction = () => this.transactionDepth > 0;\n\n beginTransaction(description?: string) {\n if (this.transactionDepth === 0) {\n this.transactionCommands = [];\n this.transactionDescription = description;\n } else if (description && !this.transactionDescription) {\n this.transactionDescription = description;\n }\n this.transactionDepth++;\n }\n\n endTransaction() {\n if (this.transactionDepth === 0) {\n return;\n }\n this.transactionDepth--;\n if (this.transactionDepth > 0) {\n return;\n }\n\n const commands = this.transactionCommands;\n const description = this.transactionDescription;\n this.transactionCommands = [];\n this.transactionDescription = undefined;\n if (commands.length === 0) {\n return;\n }\n\n if (this.currentIndex() !== this.undoStack().length - 1) {\n this.undoStack.set(this.undoStack().slice(0, this.currentIndex() + 1));\n }\n\n const command = commands.length === 1 ? commands[0] : new CompositeCommand(commands, description);\n this.undoStack.set([...this.undoStack(), command]);\n this.currentIndex.set(this.undoStack().length - 1);\n this.selectedNode.set(command.getExecutionSelection());\n }\n\n executeCommand(command: Command) {\n if (command instanceof UpdateWidgetCommand && command.isNoOp()) {\n return;\n }\n\n const lastCommand =\n this.transactionDepth > 0\n ? this.transactionCommands[this.transactionCommands.length - 1]\n : this.undoStack()[this.currentIndex()];\n if (lastCommand?.canCoalesceWith?.(command) && lastCommand.coalesceWith) {\n lastCommand.coalesceWith(command);\n command.execute();\n this.selectedNode.set(command.getExecutionSelection());\n return;\n }\n\n if (this.transactionDepth === 0 && this.currentIndex() !== this.undoStack().length - 1) {\n this.undoStack.set(this.undoStack().slice(0, this.currentIndex() + 1));\n }\n\n command.execute();\n\n if (this.transactionDepth > 0) {\n this.transactionCommands.push(command);\n this.selectedNode.set(command.getExecutionSelection());\n return;\n }\n\n this.undoStack.set([...this.undoStack(), command]);\n this.currentIndex.set(this.undoStack().length - 1);\n this.selectedNode.set(command.getExecutionSelection());\n }\n\n undo() {\n if (this.currentIndex() < 0) {\n return;\n }\n const command = this.undoStack()[this.currentIndex()];\n command.undo();\n this.currentIndex.set(this.currentIndex() - 1);\n this.selectedNode.set(command.getUndoSelection());\n }\n\n redo() {\n if (this.currentIndex() >= this.undoStack().length - 1) {\n return;\n }\n this.currentIndex.set(this.currentIndex() + 1);\n const command = this.undoStack()[this.currentIndex()];\n command.execute();\n this.selectedNode.set(command.getExecutionSelection());\n }\n\n goToCommand(index: number) {\n if (index < -1 || index >= this.undoStack().length || index === this.currentIndex()) {\n return;\n }\n\n if (index > this.currentIndex()) {\n while (this.currentIndex() < index) {\n this.redo();\n }\n } else {\n while (this.currentIndex() > index) {\n this.undo();\n }\n }\n }\n\n public history = computed(() =>\n this.undoStack().map((cmd, index) => ({\n description: cmd.description(),\n icon: cmd.icon(),\n isPast: this.currentIndex() > index,\n isFuture: this.currentIndex() < index,\n isCurrent: this.currentIndex() == index,\n })),\n );\n\n public clear() {\n this.undoStack.set([]);\n this.currentIndex.set(-1);\n this.selectedNode.set(null);\n this.transactionDepth = 0;\n this.transactionCommands = [];\n this.transactionDescription = undefined;\n }\n}\n\n//#endregion\n","import { Injectable } from \"@angular/core\";\n\n\nexport interface AXPDesignerContent {\n json: string,\n html?: string\n}\n\n@Injectable()\nexport abstract class AXPDesignerConnector<T = string> {\n\n public abstract save(id: string, content: AXPDesignerContent): Promise<boolean>;\n\n public abstract saveAs(content: AXPDesignerContent): Promise<boolean>;\n\n public abstract load(id: T): Promise<string | null>;\n}","import { AXMenuItem } from '@acorex/components/menu';\nimport { assign, cloneDeep } from 'lodash-es';\n\nexport const AXP_DESIGNER_COPY_MENU: AXMenuItem = {\n text: 'Copy',\n name: 'copy',\n icon: 'fa-solid fa-copy',\n suffix: {\n text: 'Ctrl+C',\n },\n};\n\nexport const AXP_DESIGNER_CLONE_MENU: AXMenuItem = {\n text: 'Clone',\n name: 'clone',\n icon: 'fa-solid fa-clone',\n suffix: {\n text: 'Ctrl+D',\n },\n};\n\nexport const AXP_DESIGNER_CUT_MENU: AXMenuItem = {\n text: 'Cut',\n name: 'cut',\n icon: 'fa-solid fa-cut',\n suffix: {\n text: 'Ctrl+X',\n },\n};\n\nexport const AXP_DESIGNER_PASTE_MENU: AXMenuItem = {\n text: 'Paste',\n name: 'paste',\n icon: 'fa-solid fa-paste',\n suffix: {\n text: 'Ctrl+V',\n },\n};\n\nexport const AXP_DESIGNER_ADD_WIDGET_MENU: AXMenuItem = {\n text: 'Add Widget',\n name: 'add-widget',\n icon: 'fa-solid fa-plus',\n};\n\nexport const AXP_DESIGNER_SELECT_WIDGET_MENU: AXMenuItem = {\n text: 'Select',\n name: 'select',\n break: true,\n icon: 'fa-solid fa-arrow-pointer',\n}\n\nexport const AXP_DESIGNER_DELETE_WIDGET_MENU: AXMenuItem = {\n text: 'Delete',\n name: 'remove-widget',\n icon: 'fa-solid fa-trash',\n};\n\nexport const AXP_DESIGNER_SAVE_AS_WIDGET_MENU: AXMenuItem = {\n text: 'Save As...',\n name: 'save-as',\n icon: 'fa-solid fa-save',\n};\n\n\nexport function cloneWidgetMenu(item: AXMenuItem, options?: Partial<AXMenuItem>): AXMenuItem {\n return assign(cloneDeep(item), options);\n}\n","import type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport { AXMenuItem } from \"@acorex/components/menu\";\n\n\nexport type AXPDesignerMode =\n | { id: 'designer'; title: 'Designer' }\n | { id: 'view'; title: 'View' }\n | { id: 'edit'; title: 'Edit' };\n\nexport class AXPDesignerModes {\n static readonly View: AXPDesignerMode = { id: 'view', title: 'View' };\n static readonly Design: AXPDesignerMode = { id: 'designer', title: 'Designer' };\n static readonly Edit: AXPDesignerMode = { id: 'edit', title: 'Edit' };\n}\n\n\nexport enum AXPTemplateLoadingStrategy {\n Connector = \"Connector\",\n Broadcast = \"Broadcast\",\n}\n\n\n\nexport interface AXPDesignerWidgetComponent {\n onContextMenu(context: { items: AXMenuItem[] }): void\n executeCommand(command: { name: string, data?: any, handled: boolean }): Promise<void>\n}\n\nexport interface AXPDesignerPreviewMessage {\n id: string,\n document: AXPWidgetNode\n}\n\nexport interface AXPDesignerSaveFormMessage {\n id: string,\n success: boolean,\n content?: string\n}\n\nexport const AXPDesignerMessageKeys =\n{\n Preview: \"designer-preview\",\n Loaded: \"designer-preview-loaded\",\n ContextChanged: \"designer-preview-context-changed\",\n PreviewWindow: \"designer-open-preview-window\",\n RequestFormContent: \"designer-request-form-content\",\n ResponseFormContent: \"designer-response-form-content\",\n SaveForm: 'designer-save-form-content',\n FormSaved: 'designer-form-saved-content',\n}","import type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\n\n//#region ----- Constants -----\n\nconst PREVIEW_DOCUMENT_STORAGE_KEY = 'axp-layout-designer-preview-document';\n\n//#endregion\n\n//#region ----- Preview session -----\n\nexport function storeDesignerPreviewDocument(document: AXPWidgetNode): void {\n try {\n sessionStorage.setItem(PREVIEW_DOCUMENT_STORAGE_KEY, JSON.stringify(document));\n } catch {\n // sessionStorage can be unavailable in some iframe / privacy modes\n }\n}\n\nexport function readDesignerPreviewDocument(): AXPWidgetNode | null {\n try {\n const raw = sessionStorage.getItem(PREVIEW_DOCUMENT_STORAGE_KEY);\n if (!raw) {\n return null;\n }\n return JSON.parse(raw) as AXPWidgetNode;\n } catch {\n return null;\n }\n}\n\n//#endregion\n","/**\n * Suffixes for `forms:widgets:picker:last-tab:{id}` user settings keys.\n * Use one id per distinct widget-picker host (different tab strips / widget sets).\n */\nexport const AXP_WIDGET_PICKER_TAB_CONTEXT = {\n layoutDesignerFormElements: 'layout-designer-form-elements',\n layoutDesignerWidgetTemplate: 'layout-designer-widget-template',\n layoutDesignerPage: 'layout-designer-page',\n dashboardHome: 'dashboard-home',\n} as const;\n","//#region ----- Imports -----\nimport type { AXPWidgetConfig } from '@acorex-platform/framework-shared/widget-core';\nimport type { AXPDesignerDrawerId, AXPDesignerSurfaceProfile } from './designer-surface-profile.types';\n//#endregion\n\n//#region ----- Constants -----\n\nconst DEFAULT_FORM_DRAWERS: readonly AXPDesignerDrawerId[] = ['pages', 'dataSources', 'outline', 'history'];\n\n//#endregion\n\n//#region ----- Filter -----\n\n/**\n * Include if any include rule hits, then subtract `excludeNames`.\n * An empty include set matches nothing (fail closed).\n */\nexport function widgetMatchesDesignerSurface(\n widget: Pick<AXPWidgetConfig, 'name' | 'groups' | 'type'>,\n profile: AXPDesignerSurfaceProfile,\n): boolean {\n const filter = profile.widgets;\n if (filter?.excludeNames?.includes(widget.name)) {\n return false;\n }\n\n const includeGroups = filter?.includeGroups ?? [];\n const includeTypes = filter?.includeTypes ?? [];\n const includeNames = filter?.includeNames ?? [];\n const hasInclude = includeGroups.length > 0 || includeTypes.length > 0 || includeNames.length > 0;\n if (!hasInclude) {\n return false;\n }\n\n const groupHit = includeGroups.some((group) => widget.groups?.includes(group));\n const typeHit = includeTypes.includes(widget.type);\n const nameHit = includeNames.includes(widget.name);\n return groupHit || typeHit || nameHit;\n}\n\nexport function designerSurfaceHasDrawer(\n profile: AXPDesignerSurfaceProfile,\n drawer: AXPDesignerDrawerId,\n): boolean {\n const drawers = profile.chrome?.drawers ?? DEFAULT_FORM_DRAWERS;\n return drawers.includes(drawer);\n}\n\n//#endregion\n","//#region ----- Imports -----\nimport { AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex-platform/framework-shared/widget-core';\nimport type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPWidgetRegistryService } from '@acorex-platform/framework-client/layout/widget-core';\nimport { inject, Injectable } from '@angular/core';\nimport { sortBy } from 'lodash-es';\nimport type { AXPDesignerSurfaceProfile } from '../../shared/designer-surface-profile.types';\nimport { widgetMatchesDesignerSurface } from '../../shared/designer-surface-widget-filter.util';\n//#endregion\n\nexport interface AXPWidgetPickerShowOptions {\n /** Legacy dashboard path: intersect `groups` when `profile` is omitted. */\n groups?: AXPWidgetGroupEnum[];\n /** Designer surfaces: profile include/exclude wins over `groups`. */\n profile?: AXPDesignerSurfaceProfile;\n /** User-scoped last tab; unique per picker host (use `AXP_WIDGET_PICKER_TAB_CONTEXT`). */\n tabPersistenceContext: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPWidgetPickerService {\n private popupService = inject(AXPopupService);\n private widgetRegistryService = inject(AXPWidgetRegistryService);\n private translationService = inject(AXTranslationService);\n\n async showPicker(options: AXPWidgetPickerShowOptions): Promise<AXPWidgetNode[]> {\n const com = await import('./widget-picker.component').then((c) => c.AXPDesignerWidgetPickerComponent);\n const widgets = this.widgetRegistryService.all();\n const filteredWidgets = widgets.filter((widget) => this.matchesPickerOptions(widget, options));\n //\n const result = await this.popupService.open(com, {\n title: await this.translationService.translateAsync(\n '@form-template-management:designer.components.widget-picker.title',\n ),\n size: 'md',\n closeButton: true,\n data: {\n widgets: sortBy(filteredWidgets, (c) => c.title),\n tabPersistenceContext: options.tabPersistenceContext,\n },\n });\n //\n const selectedWidgets = (result.data?.widgets ?? []) as AXPWidgetConfig[];\n\n return selectedWidgets.map((c) => ({\n type: c.name as any,\n options: c.options,\n title: c.title,\n meta: c.meta,\n }));\n }\n\n private matchesPickerOptions(widget: AXPWidgetConfig, options: AXPWidgetPickerShowOptions): boolean {\n if (options.profile) {\n return widgetMatchesDesignerSurface(widget, options.profile);\n }\n return options.groups?.some((group) => widget.groups?.includes(group)) ?? false;\n }\n}\n","//#region ----- Imports -----\nimport { AXPWidgetGroupEnum } from '@acorex-platform/framework-shared/widget-core';\nimport { AXP_WIDGET_PICKER_TAB_CONTEXT } from '../components/widget-picker/widget-picker-tab-context';\nimport type { AXPDesignerSurfaceProfile } from './designer-surface-profile.types';\n//#endregion\n\n//#region ----- Constants -----\n\n/** Child cells and document shells: registered, not pickable. */\nconst DESIGNER_CHILD_AND_SHELL_WIDGETS = [\n 'tabset-item',\n 'flex-item-layout',\n 'grid-item-layout',\n 'table-item-layout',\n 'advanced-grid-item-layout',\n 'page-layout',\n 'document-layout',\n] as const;\n\n/** Field widgets that belong on forms but are not tagged `form-element`. */\nconst FORM_EXTRA_WIDGET_NAMES = [\n 'signature',\n 'password-editor',\n 'qrcode',\n 'icon',\n 'table-editor',\n 'template-box-editor',\n 'meta-data-editor',\n 'lookup-editor',\n] as const;\n\nconst FORM_WIDGETS: AXPDesignerSurfaceProfile['widgets'] = {\n includeGroups: [AXPWidgetGroupEnum.FormElement],\n includeNames: [...FORM_EXTRA_WIDGET_NAMES],\n excludeNames: [...DESIGNER_CHILD_AND_SHELL_WIDGETS],\n};\n\n/**\n * Default Form Builder surface. Hosts may pass this explicitly or omit `profile`.\n */\nexport const AXP_FORM_DESIGNER_SURFACE_PROFILE: AXPDesignerSurfaceProfile = {\n id: 'form',\n documentKind: 'widget-tree',\n rootWidget: 'page-layout',\n widgets: FORM_WIDGETS,\n chrome: {\n drawers: ['pages', 'dataSources', 'outline', 'history'],\n },\n preview: {\n player: 'angular',\n },\n pickerTabContext: AXP_WIDGET_PICKER_TAB_CONTEXT.layoutDesignerFormElements,\n};\n\n/**\n * Composed widget template: same offer list as form, no Pages drawer.\n */\nexport const AXP_WIDGET_DESIGNER_SURFACE_PROFILE: AXPDesignerSurfaceProfile = {\n id: 'widget',\n documentKind: 'widget-tree',\n rootWidget: 'page-layout',\n widgets: FORM_WIDGETS,\n chrome: {\n drawers: ['dataSources', 'outline', 'history'],\n },\n preview: {\n player: 'angular',\n },\n pickerTabContext: AXP_WIDGET_PICKER_TAB_CONTEXT.layoutDesignerWidgetTemplate,\n};\n\n/**\n * Website page surface. Palette chrome is declared; walker preview is Phase 2.\n * Offer list is name-based until a `page-widget` group exists.\n */\nexport const AXP_PAGE_DESIGNER_SURFACE_PROFILE: AXPDesignerSurfaceProfile = {\n id: 'page',\n documentKind: 'widget-tree',\n widgets: {\n includeNames: [\n 'flex-layout',\n 'grid-layout',\n 'block-layout',\n 'panel-layout',\n 'fieldset-layout',\n 'table-layout',\n 'advanced-grid-layout',\n 'text-block-layout',\n 'alert-box-layout',\n 'badge-layout',\n 'image',\n 'icon',\n 'button-action',\n 'tabset-layout',\n 'step-wizard',\n ],\n excludeNames: [...DESIGNER_CHILD_AND_SHELL_WIDGETS, 'password-editor', 'signature', 'lookup-editor'],\n },\n chrome: {\n drawers: ['palette', 'outline', 'history'],\n },\n preview: {\n player: 'html-walker',\n walkerChannel: 'html',\n },\n pickerTabContext: AXP_WIDGET_PICKER_TAB_CONTEXT.layoutDesignerPage,\n};\n\n//#endregion\n","import { AXPWidgetConfig } from '@acorex-platform/framework-shared/widget-core';\nimport { AXLoadingDialogButtonItem, AXLoadingDialogService } from '@acorex/components/loading-dialog';\nimport { AXMenuItem } from '@acorex/components/menu';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXFileService } from '@acorex/core/file';\nimport { type AXPWidgetNode, AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\nimport {\n AXPBaseWidgetComponent,\n AXPValueWidgetComponent,\n AXPWidgetRegistryService,\n AXP_LOCAL_DATA_SOURCES_OPTION,\n createDefaultLocalDataSourceColumns,\n readLocalDataSourcesFromNode,\n type AXPLocalDataSource,\n type AXPLocalDataSourcePatch,\n type AXPLocalDataSourceStore,\n} from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPBroadcastEventService, AXPDataGenerator } from '@acorex-platform/framework-client/core';\nimport { computed, effect, inject, Injectable, signal } from '@angular/core';\nimport { cloneDeep, get, isEmpty, isEqual, isNil, isNull, merge, result, set, sortBy } from 'lodash-es';\nimport { Subject } from 'rxjs';\nimport { AddWidgetCommand, CommandManager, RemoveWidgetCommand, UpdateWidgetCommand } from './command';\nimport { AXPDesignerConnector } from './designer-connector.service';\nimport {\n AXP_DESIGNER_ADD_WIDGET_MENU,\n AXP_DESIGNER_CLONE_MENU,\n AXP_DESIGNER_COPY_MENU,\n AXP_DESIGNER_CUT_MENU,\n AXP_DESIGNER_DELETE_WIDGET_MENU as AXP_DESIGNER_DELETE_WIDGET_MENU,\n AXP_DESIGNER_PASTE_MENU,\n AXP_DESIGNER_SAVE_AS_WIDGET_MENU,\n AXP_DESIGNER_SELECT_WIDGET_MENU,\n cloneWidgetMenu,\n} from './generic-commands.types';\nimport { AXPDesignerMessageKeys, AXPDesignerPreviewMessage, AXPDesignerSaveFormMessage, AXPDesignerWidgetComponent, AXPTemplateLoadingStrategy } from './designer.types';\nimport { storeDesignerPreviewDocument } from '../../preview/preview-session.util';\nimport { AXP_WIDGET_PICKER_TAB_CONTEXT } from '../components/widget-picker/widget-picker-tab-context';\nimport { AXPWidgetPickerService } from '../components/widget-picker/widget-picker.service';\nimport { AXP_FORM_DESIGNER_SURFACE_PROFILE } from './designer-surface-profile.defaults';\nimport type { AXPDesignerSurfaceProfile } from './designer-surface-profile.types';\nexport type AXPDesignerPreviewSize = 'sm' | 'md' | 'lg' | 'xl' | 'xxl';\n\nexport interface AXPDesignerFocusCommand {\n widget: AXPWidgetNode | null;\n}\n\nexport interface AXPDesignerUpdateCommand {\n values: any;\n widget?: AXPWidgetNode | null;\n mode: 'init' | 'update';\n}\nexport interface AXPDesignerUpdateEvent {\n values: any;\n widget: AXPWidgetNode;\n}\n\nexport interface AXPDesignerSelectCommand {\n widget: AXPWidgetNode;\n}\n\nexport interface AXPDesignerRegisterCommand {\n id: number;\n widget: AXPWidgetNode;\n config: AXPWidgetConfig;\n instance: AXPBaseWidgetComponent;\n}\n\nexport interface AXPDesignerSelectEvent {\n widget: AXPWidgetNode;\n}\n\nexport interface AXPDesignerRefreshCommand {\n widget: AXPWidgetNode;\n}\nexport interface AXPDesignerRefreshEvent {\n widget: AXPWidgetNode;\n}\n\nexport interface AXPDesignerAddNodeCommand {\n widget: AXPWidgetNode;\n}\nexport interface AXPDesignerAddNodeEvent {\n widget: AXPWidgetNode;\n}\n\nexport interface AXPDesignerFocusEvent {\n widget: AXPWidgetNode | null;\n}\n\n@Injectable()\nexport class AXPDesignerService {\n private popupService = inject(AXPopupService);\n private toastService = inject(AXToastService);\n private fileService = inject(AXFileService);\n private loadingService = inject(AXLoadingDialogService);\n private widgetRegisteryService = inject(AXPWidgetRegistryService);\n private connector = inject(AXPDesignerConnector);\n private eventService = inject(AXPBroadcastEventService);\n private widgetPickerService = inject(AXPWidgetPickerService);\n\n public readonly document = signal(this.createDoc());\n public readonly currentPageIndex = signal(0);\n\n public readonly currentPage = signal(this.document().children?.[0] as AXPWidgetNode);\n /** Bumps when the board must remount the page without cloning it off `document`. */\n public readonly pageRenderEpoch = signal(0);\n\n private commandManager = inject(CommandManager);\n\n private clipboard = signal<AXPWidgetNode | null>(null);\n\n //\n public canCutCopy = computed(() => this.can(this.selectedNode()).copyOrCut);\n public canDelete = computed(() => this.can(this.selectedNode()).delete);\n public canInsert = computed(() => this.can(this.selectedNode()).insert);\n public canPaste = computed(() => this.can(this.selectedNode()).paste);\n //\n public readonly history = computed(() => this.commandManager.history());\n public readonly canUndo = computed(() => this.commandManager.canUndo());\n public readonly canRedo = computed(() => this.commandManager.canRedo());\n //\n public readonly canSave = computed(() => this.templateId() != null);\n\n public readonly unsavedChanges = signal(false);\n\n public readonly surfaceProfile = signal<AXPDesignerSurfaceProfile>(AXP_FORM_DESIGNER_SURFACE_PROFILE);\n\n private readonly localDataSources = signal<AXPLocalDataSource[]>([]);\n public readonly sources = this.localDataSources.asReadonly();\n\n public breadcrumbs = computed<AXPWidgetNode[]>(() => {\n return this.selectedNode() ? this.findBreadcrumbs(this.currentPage(), this.selectedNode()) ?? [] : [];\n });\n\n public selectedNode = signal<AXPWidgetNode | null>(null);\n\n private readonly widgetInstances = new Map<string, AXPDesignerWidgetComponent>();\n\n /** Property-panel writes are recorded only after the user focuses the panel. */\n private acceptPropertyPanelHistory = false;\n /** Last panel payload applied to the canvas. Equal echoes must not republish the preview. */\n private lastAppliedPropertyPanelValues: unknown = null;\n\n public selectedNodeConfig = computed(() => get(this.selectedNode(), '__meta__.config') as any as AXPWidgetConfig);\n\n private _focusedNode: AXPWidgetNode | null = null;\n public focusedNode = () => this._focusedNode;\n\n public readonly size = signal<AXPDesignerPreviewSize>('xl');\n\n public readonly onSelected = new Subject<AXPDesignerSelectEvent>();\n public readonly onRefresh = new Subject<AXPDesignerRefreshEvent>();\n public readonly onUpdate = new Subject<AXPDesignerUpdateEvent>();\n public readonly onFocused = new Subject<AXPDesignerFocusEvent>();\n\n public readonly templateId = signal<string | null>(null);\n\n private loadingStrategy = signal<AXPTemplateLoadingStrategy>(AXPTemplateLoadingStrategy.Connector);\n\n #ef = effect(\n () => {\n this.refresh({ widget: this.currentPage() });\n }\n );\n\n constructor() {\n this.eventService.listen(AXPDesignerMessageKeys.Loaded).subscribe(() => {\n this.updatePreview();\n })\n //\n this.eventService.listen(AXPDesignerMessageKeys.PreviewWindow).subscribe(() => {\n this.openPreviewWindow();\n });\n //\n // window.addEventListener(\"beforeunload\", (event) => {\n // console.log(\"Window is before closing...\");\n // // event.preventDefault();\n // // event.returnValue = 'abc'; // Some browsers require this to show the prompt.\n // });\n window.addEventListener(\"unload\", async () => {\n console.log(\"Window is closing...\");\n if (this.unsavedChanges()) {\n this.eventService.publish<AXPDesignerSaveFormMessage>(AXPDesignerMessageKeys.SaveForm, { id: this.templateId()!, success: false });\n }\n this.unsubscribeEvents();\n });\n }\n\n private can = (widget: AXPWidgetNode | null): {\n delete: boolean,\n copyOrCut: boolean,\n insert: boolean,\n paste: boolean,\n } => {\n if (!widget) {\n return {\n delete: false,\n copyOrCut: false,\n insert: false,\n paste: false,\n }\n }\n const config = get(widget, '__meta__.config') as any as AXPWidgetConfig;\n return {\n delete: widget.type != 'page-layout',\n copyOrCut: widget.type != 'page-layout',\n paste: this.clipboard() != null && config.type == 'container' && config.designer?.canInsert != false,\n insert: config.type == 'container' && config.designer?.canInsert != false,\n }\n }\n\n public register(command: AXPDesignerRegisterCommand): void {\n const key = this.widgetInstanceKey(command.widget, command.id);\n if (key) {\n this.widgetInstances.set(key, command.instance as unknown as AXPDesignerWidgetComponent);\n }\n if (!this.selectedNode()) {\n this.select({ widget: command.widget });\n }\n }\n\n public unregister(widget: AXPWidgetNode): void {\n const key = this.widgetInstanceKey(widget);\n if (key) {\n this.widgetInstances.delete(key);\n }\n }\n\n public getWidgetInstance(widget: AXPWidgetNode): AXPDesignerWidgetComponent | null {\n const key = this.widgetInstanceKey(widget);\n return key ? this.widgetInstances.get(key) ?? null : null;\n }\n\n private widgetInstanceKey(widget: AXPWidgetNode, id?: number | string): string | null {\n const key = id ?? get(widget, '__meta__.id');\n return key == null ? null : String(key);\n }\n\n public select(command: AXPDesignerSelectCommand): void {\n this.acceptPropertyPanelHistory = false;\n this.lastAppliedPropertyPanelValues = null;\n this.selectedNode.set(command.widget);\n this.onSelected.next(command);\n }\n\n public armPropertyPanelHistory(): void {\n this.acceptPropertyPanelHistory = true;\n }\n\n public applyPropertyPanelChange(event: { values: unknown; mode: 'init' | 'update' }): void {\n // Init is hydration. update() always republishes the preview.\n if (event.mode !== 'update' || isEqual(event.values, this.lastAppliedPropertyPanelValues)) {\n return;\n }\n this.lastAppliedPropertyPanelValues = event.values;\n this.update({ values: event.values, mode: 'update' });\n }\n\n public update(command: AXPDesignerUpdateCommand): void {\n const node = command.widget ?? this.selectedNode();\n\n if (command.mode == 'update' && node) {\n this.commandManager.executeCommand(new UpdateWidgetCommand(node!, command.values, node!));\n this.unsavedChanges.set(true);\n }\n this.onUpdate.next({ widget: node!, values: command.values });\n this.updatePreview();\n }\n\n public focus(command: AXPDesignerFocusCommand): void {\n if (this._focusedNode != command.widget) {\n this._focusedNode = command.widget;\n this.onFocused.next({ widget: this._focusedNode });\n }\n }\n\n public refresh(command: AXPDesignerRefreshCommand) {\n this.onRefresh.next({ widget: command.widget });\n this.updatePreview();\n }\n\n private findBreadcrumbs(\n node: AXPWidgetNode,\n targetNode?: AXPWidgetNode | null,\n breadcrumb: AXPWidgetNode[] = []\n ): AXPWidgetNode[] | undefined {\n // Add the current node to the breadcrumb path\n const currentBreadcrumb = [...breadcrumb, node];\n\n // Check if the current node is the target node\n if (node === targetNode) {\n return currentBreadcrumb;\n }\n\n // If the node has children, recursively search them\n if (node.children) {\n for (const child of node.children) {\n const result = this.findBreadcrumbs(child, targetNode, currentBreadcrumb);\n if (result) {\n return result;\n }\n }\n }\n\n // Return undefined if no match is found\n return undefined;\n }\n\n async showPicker(currentNode: AXPWidgetNode = this.selectedNode()!): Promise<AXPWidgetNode[]> {\n const profile = this.surfaceProfile();\n const widgets = await this.widgetPickerService.showPicker({\n profile,\n tabPersistenceContext:\n profile.pickerTabContext ?? AXP_WIDGET_PICKER_TAB_CONTEXT.layoutDesignerFormElements,\n });\n const result: AXPWidgetNode[] = [];\n if (widgets.length) {\n const addAll = () => {\n widgets.forEach((c) => {\n result.push(this.addWidget(currentNode, { type: c.type })!);\n });\n };\n if (widgets.length > 1) {\n this.runTransaction(addAll, 'Added widgets');\n } else {\n addAll();\n }\n }\n return result;\n }\n\n public new() {\n this.commandManager.clear();\n this.document.set(this.createDoc());\n this.localDataSources.set([]);\n this.currentPage.set(this.document().children?.[0]!);\n this.reRenderPage();\n }\n\n private createDoc(): AXPWidgetNode {\n const doc: AXPWidgetNode = {\n type: AXPWidgetsCatalog.document,\n children: [this.createPage()],\n name: 'document',\n options: { [AXP_LOCAL_DATA_SOURCES_OPTION]: [] },\n };\n set(doc, '__meta__.id', this.generateUniqueId());\n return doc;\n }\n\n //#region ----- Local data sources -----\n\n public toLocalDataSourceStore(): AXPLocalDataSourceStore {\n return {\n sources: this.sources,\n get: (id) => this.getLocalDataSource(id),\n create: (name) => this.createLocalDataSource(name),\n update: (id, patch) => this.updateLocalDataSource(id, patch),\n remove: (id) => this.removeLocalDataSource(id),\n };\n }\n\n public getLocalDataSource(id: string): AXPLocalDataSource | undefined {\n return this.localDataSources().find((row) => row.id === id);\n }\n\n public createLocalDataSource(name: string): AXPLocalDataSource {\n const trimmed = name.trim();\n const source: AXPLocalDataSource = {\n id: AXPDataGenerator.uuid(),\n name: trimmed.length > 0 ? trimmed : `List ${this.localDataSources().length + 1}`,\n columns: createDefaultLocalDataSourceColumns(),\n items: [],\n };\n this.localDataSources.update((list) => [...list, source]);\n this.persistLocalDataSources(true);\n return source;\n }\n\n public updateLocalDataSource(id: string, patch: AXPLocalDataSourcePatch): void {\n this.localDataSources.update((list) =>\n list.map((row) => (row.id === id ? { ...row, ...patch } : row)),\n );\n this.persistLocalDataSources(true);\n }\n\n public removeLocalDataSource(id: string): void {\n this.localDataSources.update((list) => list.filter((row) => row.id !== id));\n this.persistLocalDataSources(true);\n }\n\n private hydrateLocalDataSources(root: AXPWidgetNode): void {\n const fromDoc = readLocalDataSourcesFromNode(root);\n const fromPages =\n fromDoc.length > 0\n ? []\n : (root.children ?? []).flatMap((page) => readLocalDataSourcesFromNode(page));\n this.localDataSources.set(fromDoc.length > 0 ? fromDoc : fromPages);\n this.persistLocalDataSources(false);\n }\n\n private persistLocalDataSources(markDirty: boolean): void {\n const list = this.localDataSources();\n const doc = this.document();\n doc.options = { ...(doc.options ?? {}), [AXP_LOCAL_DATA_SOURCES_OPTION]: list };\n this.stripLocalDataSourcesFromPages(doc);\n if (markDirty) {\n this.unsavedChanges.set(true);\n }\n }\n\n private stripLocalDataSourcesFromPages(doc: AXPWidgetNode): void {\n for (const page of doc.children ?? []) {\n const options = page.options;\n if (!options || !(AXP_LOCAL_DATA_SOURCES_OPTION in options)) {\n continue;\n }\n const { [AXP_LOCAL_DATA_SOURCES_OPTION]: _removed, ...rest } = options;\n page.options = rest;\n }\n }\n\n //#endregion\n\n private createPage(): AXPWidgetNode {\n const config = this.widgetRegisteryService.resolve('page-layout');\n\n const page: AXPWidgetNode = {\n type: 'page-layout',\n children: [],\n name: 'page-layout1',\n };\n\n set(page, '__meta__.id', this.generateUniqueId());\n set(page, '__meta__.config', config);\n return page;\n }\n\n public addNewPage() {\n this.addWidget(this.document(), this.createPage());\n this.goToPage(this.currentPageIndex() + 1);\n }\n\n public removePage(index: number) {\n const page = this.document().children?.[index]!;\n this.removeWidget(page);\n this.goToPage(index - 1);\n }\n\n public clonePage(index: number) {\n const page = this.document().children?.[index]!;\n this.clone(page);\n this.goToPage((this.document().children?.length ?? 1) - 1);\n }\n\n public goToPage(index: number) {\n this.currentPageIndex.set(index);\n this.currentPage.set(this.document().children?.[this.currentPageIndex()]!);\n this.select({ widget: this.currentPage() });\n }\n\n private reRenderPage() {\n const page = this.document().children?.[this.currentPageIndex()];\n if (!page) {\n return;\n }\n // Keep the same object as `document.children[i]`. A shallow copy made the\n // board edit a detached page, so page options never appeared in export.\n this.currentPage.set(page);\n this.pageRenderEpoch.update((epoch) => epoch + 1);\n const selected = this.selectedNode();\n if (selected?.type === 'page-layout' && selected !== page) {\n this.select({ widget: page });\n }\n setTimeout(() => {\n this.refresh({ widget: page });\n });\n }\n\n public findWidgetById(root: AXPWidgetNode, id: string): AXPWidgetNode | null {\n if (get(root, '__meta__.id') === id) {\n return root; // Return the root if it matches the ID\n }\n if (!root.children) return null;\n\n for (const child of root.children) {\n const found = this.findWidgetById(child, id);\n if (found) {\n return found; // Return the found child\n }\n }\n\n return null; // Node not found\n }\n\n private findParent(id: string, parent: AXPWidgetNode = this.currentPage()): AXPWidgetNode | null {\n if (!parent.children) return null;\n\n if (parent.children.some((child) => get(child, '__meta__.id') === id)) {\n return parent; // Return this node as it's the parent of the node with the given ID\n }\n\n for (const child of parent.children) {\n const foundParent = this.findParent(id, child);\n if (foundParent) return foundParent;\n }\n\n return null; // No parent found\n }\n\n private findNearestContainer(node: AXPWidgetNode, searchUpward = true): AXPWidgetNode | null {\n if (searchUpward) {\n let current: AXPWidgetNode | null = node;\n while (current) {\n const config = this.widgetRegisteryService.resolve(current.type);\n if (config && config.type == 'container') {\n return current;\n }\n current = this.findParent(get(current, '__meta__.id')!); // Use findParent to navigate upwards\n }\n } else {\n // Recursive search to find the first container among children\n if (node.children) {\n for (const child of node.children) {\n const config = this.widgetRegisteryService.resolve(child.type);\n if (config && config.type == 'container') {\n return child;\n }\n const foundContainer = this.findNearestContainer(child, false); // Continue searching downwards\n if (foundContainer) return foundContainer;\n }\n }\n }\n return null; // Return null if no container found\n }\n\n public createWidgetNode(node: AXPWidgetNode): AXPWidgetNode {\n const cloned = cloneDeep(node);\n this.stampNewWidgetTree(cloned, { keepNames: true, reservedNames: this.collectDocumentNameSet() });\n return cloned;\n }\n\n /** Fills missing `__meta__.id`, config, and name on an already-on-canvas tree (e.g. AI-added children). */\n public ensureWidgetTreeMeta(root: AXPWidgetNode = this.document()): void {\n this.stampMissingWidgetMeta(root, this.collectDocumentNameSet());\n }\n\n /**\n * Assigns unique `__meta__.id`, registry config, and a name on every node.\n * Nested AI add-widget trees must be stamped the same way paste already does;\n * otherwise children share `undefined` ids and the designer selects them all.\n */\n private stampNewWidgetTree(\n node: AXPWidgetNode,\n options: { keepNames: boolean; reservedNames: Set<string> },\n ): void {\n const existing = typeof node.name === 'string' ? node.name.trim() : '';\n if (!options.keepNames || !existing || options.reservedNames.has(existing)) {\n node.name = this.nextUniqueName(node.type, options.reservedNames);\n } else {\n node.name = existing;\n }\n options.reservedNames.add(node.name);\n set(node, '__meta__.id', this.generateUniqueId());\n set(node, '__meta__.config', this.widgetRegisteryService.resolve(node.type));\n set(node, '__meta__.added', true);\n node.children?.forEach((child) => this.stampNewWidgetTree(child, options));\n }\n\n private stampMissingWidgetMeta(node: AXPWidgetNode, reservedNames: Set<string>): void {\n if (get(node, '__meta__.id') == null) {\n set(node, '__meta__.id', this.generateUniqueId());\n }\n if (!get(node, '__meta__.config') && node.type) {\n set(node, '__meta__.config', this.widgetRegisteryService.resolve(node.type));\n }\n const existing = typeof node.name === 'string' ? node.name.trim() : '';\n if (!existing) {\n node.name = this.nextUniqueName(node.type, reservedNames);\n } else {\n node.name = existing;\n }\n reservedNames.add(node.name);\n node.children?.forEach((child) => this.stampMissingWidgetMeta(child, reservedNames));\n }\n\n addWidget(currentNode: AXPWidgetNode, node: AXPWidgetNode): AXPWidgetNode {\n const cloned = this.createWidgetNode(node);\n\n this.commandManager.executeCommand(new AddWidgetCommand(cloned, currentNode, currentNode));\n this.ensureDefaultTabsetChild(cloned);\n //\n if (!this.commandManager.isInTransaction()) {\n this.reRenderPage();\n this.refresh({ widget: currentNode });\n this.select({ widget: cloned });\n }\n\n return cloned;\n }\n\n public removeWidget(node: AXPWidgetNode = this.selectedNode()!): void {\n if (\n node.type === 'document-layout' ||\n (node.type === 'page-layout' && (this.document().children?.length ?? 1) == 1)\n ) {\n console.error('Cannot remove the page node.');\n return; // Prevent removing the root page node or document\n }\n\n const nodeIdToRemove = get(node, '__meta__.id');\n if (!nodeIdToRemove) {\n throw new Error('Node does not have a valid __meta__.id to identify it for removal.');\n }\n\n // Find the parent of the node to remove it\n const parent = this.findParent(nodeIdToRemove, this.document());\n if (!parent) {\n throw new Error('Parent node not found. The node might be the root node or does not exist.');\n }\n\n const previousSelection = this.selectedNode(); // Capture the currently selected node before removal\n const command = new RemoveWidgetCommand(node, parent, previousSelection!);\n this.commandManager.executeCommand(command);\n\n this.refresh({ widget: parent }); // Refresh the UI to reflect changes\n this.select({ widget: parent }); // Select the parent node after removal\n }\n\n navigateTo(index: number) {\n this.commandManager.goToCommand(index);\n this.syncCanvasAfterHistory();\n }\n\n public redo() {\n if (!this.canRedo()) {\n return;\n }\n this.commandManager.redo();\n this.syncCanvasAfterHistory();\n }\n\n public undo() {\n if (!this.canUndo()) {\n return;\n }\n this.commandManager.undo();\n this.syncCanvasAfterHistory();\n }\n\n public isInTransaction(): boolean {\n return this.commandManager.isInTransaction();\n }\n\n public runTransaction<T>(action: () => T, description?: string): T {\n this.commandManager.beginTransaction(description);\n try {\n return action();\n } finally {\n this.commandManager.endTransaction();\n if (!this.commandManager.isInTransaction()) {\n this.syncCanvasAfterHistory();\n }\n }\n }\n\n private syncCanvasAfterHistory() {\n const selected = this.commandManager.selectedNode() ?? this.currentPage();\n this.refresh({ widget: this.currentPage() });\n if (selected) {\n this.onUpdate.next({ widget: selected, values: { options: selected.options ?? {} } });\n }\n this.select({ widget: selected });\n }\n\n public clearHistory() {\n this.commandManager.clear();\n }\n\n private removeMetaProp(obj: any): any {\n const nodeName = '__meta__';\n // Check if the object is an array\n if (Array.isArray(obj)) {\n return obj.map((item) => this.removeMetaProp(item));\n } else if (typeof obj === 'object' && obj !== null) {\n // Create a new object to store the result\n let newObj: any = {};\n for (let key in obj) {\n // Only add the key if it's not the nodeName we want to remove\n if (key !== nodeName) {\n newObj[key] = this.removeMetaProp(obj[key]);\n }\n }\n return newObj;\n }\n // If the value is not an object or array, return it as is\n return obj;\n }\n\n private async addMetaToNodes(\n node: AXPWidgetNode,\n processedNodes: { count: number },\n progressCallback: (processed: number) => void,\n reservedNames: Set<string>,\n ): Promise<AXPWidgetNode> {\n const config = this.widgetRegisteryService.resolve(node.type);\n const existing = typeof node.name === 'string' ? node.name.trim() : '';\n if (!existing) {\n node.name = this.nextUniqueName(node.type, reservedNames);\n } else {\n node.name = existing;\n }\n reservedNames.add(node.name);\n set(node, '__meta__.id', this.generateUniqueId());\n set(node, '__meta__.config', config);\n processedNodes.count++;\n progressCallback(processedNodes.count);\n if (node.children && node.children.length > 0) {\n node.children = await Promise.all(\n node.children.map(async (child) =>\n this.addMetaToNodes(child, processedNodes, progressCallback, reservedNames),\n ),\n );\n }\n return node;\n }\n\n public copy(widget: AXPWidgetNode | null = this.selectedNode()): void {\n if (this.can(widget).copyOrCut) {\n this.clipboard.set(cloneDeep(widget)); // Use lodash's cloneDeep to ensure a deep copy\n }\n }\n\n public cut(widget: AXPWidgetNode | null = this.selectedNode()): void {\n if (this.can(widget).copyOrCut) {\n this.copy(widget); // Copy the widget to the clipboard\n this.removeWidget(widget!); // Reuse the removeWidget method which should handle undo internally\n }\n }\n\n public clone(widget: AXPWidgetNode | null = this.selectedNode()): void {\n if (!widget) return;\n this.copy(widget); // Copy the widget to the clipboard\n if (widget.type == 'page-layout') {\n this.paste(this.document());\n } else {\n this.paste(widget!);\n }\n }\n\n public paste(parentNode: AXPWidgetNode | undefined = this.selectedNode() ?? this.currentPage()): void {\n if (!this.clipboard() || !this.selectedNode() || !parentNode) {\n console.error('Clipboard is empty or no node is selected.');\n return;\n }\n const newNode = cloneDeep(this.clipboard() as AXPWidgetNode);\n const nearestContainer = this.findNearestContainer(parentNode, true);\n if (!nearestContainer) {\n console.error('No suitable container found.');\n return;\n }\n //\n if (!nearestContainer.children) {\n nearestContainer.children = [];\n }\n //\n this.stampNewWidgetTree(newNode, { keepNames: false, reservedNames: this.collectDocumentNameSet() });\n //\n this.commandManager.executeCommand(new AddWidgetCommand(newNode, nearestContainer, nearestContainer));\n //\n setTimeout(() => {\n this.refresh({ widget: nearestContainer }); // Refresh the UI\n this.select({ widget: newNode }); // Select the newly pasted node\n });\n }\n\n async save() {\n if (this.templateId()) {\n const content = this.export();\n if (this.loadingStrategy() == AXPTemplateLoadingStrategy.Connector) {\n await this.connector.save(this.templateId()!, { json: content });\n this.toastService.success('Your changes saved successfully');\n }\n else {\n const result = await this.eventService.sendAndWaitForResponse<AXPDesignerSaveFormMessage, { success: boolean }>(AXPDesignerMessageKeys.SaveForm, { id: this.templateId()!, success: true, content });\n if (result.success) {\n this.unsavedChanges.set(false);\n window.close();\n }\n }\n } else {\n this.downloadJson();\n }\n }\n\n async saveAs(node: AXPWidgetNode = this.document()) {\n const content = this.export(node);\n const result = await this.connector.saveAs({ json: content });\n if (result) {\n this.toastService.success('Your changes saved successfully');\n }\n }\n\n export(node: AXPWidgetNode = this.document()): string {\n const json = this.removeMetaProp(node);\n return JSON.stringify(json);\n }\n\n downloadJson() {\n // Convert the object to a JSON string\n const jsonStr = this.export();\n\n // Create a blob object from the JSON string\n const blob = new Blob([jsonStr], { type: 'application/json' });\n\n // Create a URL for the blob object\n const url = URL.createObjectURL(blob);\n\n // Create a temporary <a> element to trigger the download\n const a = document.createElement('a');\n a.href = url;\n a.download = 'export.json';\n\n // Append the <a> element to the document body (necessary for some browsers)\n document.body.appendChild(a);\n\n // Trigger the download by clicking the <a> element\n a.click();\n // Clean up by revoking the object URL and removing the <a> element\n URL.revokeObjectURL(url);\n document.body.removeChild(a);\n }\n\n async loadById(id: string, options: { strategy: AXPTemplateLoadingStrategy } = { strategy: AXPTemplateLoadingStrategy.Connector }) {\n let content: string | null = null;\n try {\n if (options.strategy == AXPTemplateLoadingStrategy.Connector) {\n content = await this.connector.load(id);\n }\n else {\n content = await this.eventService.sendAndWaitForResponse<{ formId: string }, string>(AXPDesignerMessageKeys.RequestFormContent, { formId: id }, { timeout: 10000, retries: 3, retryDelay: 1000 });\n }\n if (!isNil(content) && !isEmpty(content)) {\n await this.loadByContent(content!);\n }\n this.templateId.set(id);\n this.loadingStrategy.set(options.strategy);\n } catch (error: any) {\n this.toastService.danger(error.message);\n }\n }\n\n async importJSon() {\n const files = await this.fileService.choose({ multiple: false, accept: 'application/json' });\n if (files && files.length) {\n const file = files[0];\n const content = await file.text();\n await this.loadByContent(content);\n }\n }\n\n async loadByContent(content: string) {\n const rootNode = JSON.parse(content) as AXPWidgetNode;\n const totalNode = this.countTotalNodes(rootNode);\n const processedNodes = { count: 0 };\n\n const button: AXLoadingDialogButtonItem = {\n text: 'Cancel',\n autofocus: true,\n color: 'primary',\n onClick: (e) => {\n dialog.close();\n },\n };\n\n const dialog = this.loadingService.show({\n mode: 'determinate',\n title: 'Loading Content',\n progressColor: 'primary',\n text: 'Processing content',\n status: `0 of ${totalNode}`,\n buttons: [button],\n });\n\n try {\n const reservedNames = new Set<string>();\n const root = await this.addMetaToNodes(rootNode, processedNodes, (count) => {\n dialog.setProgressValue(Math.ceil((count / totalNode) * 100));\n dialog.setProgressStatus(`${count} of ${totalNode}`);\n }, reservedNames);\n\n const page = root.children?.[0]!;\n this.commandManager.clear();\n this.document.set(root);\n this.currentPage.set(page);\n this.hydrateLocalDataSources(root);\n\n dialog.setProgressColor('success');\n dialog.setProgressText('Content loaded successfully');\n button.text = 'Okay';\n button.color = 'success';\n dialog.setProgressValue(100);\n\n setTimeout(() => {\n this.reRenderPage();\n dialog.close();\n }, 250);\n } catch (error: any) {\n dialog.setProgressColor('danger');\n dialog.setProgressText(error instanceof Error ? error.message : 'Cannot load content');\n button.text = 'Close';\n button.color = 'danger';\n }\n }\n\n private countTotalNodes(node: AXPWidgetNode): number {\n let count = 1; // Count the current node\n if (node.children && node.children.length > 0) {\n count += node.children.reduce((sum, child) => sum + this.countTotalNodes(child), 0);\n }\n return count;\n }\n\n private ensureDefaultTabsetChild(node: AXPWidgetNode): void {\n if (node.type !== 'tabset-layout' || (node.children?.length ?? 0) > 0) {\n return;\n }\n const tabType = 'tabset-item';\n const tabConfig = this.widgetRegisteryService.resolve(tabType);\n const tab: AXPWidgetNode = {\n type: tabType,\n name: this.generateUniqueName(tabType),\n options: {\n title: '@platform-layout-widgets:widgets.tabset-item.default-title',\n },\n children: [],\n };\n set(tab, '__meta__.id', this.generateUniqueId());\n set(tab, '__meta__.config', tabConfig);\n node.children = [tab];\n }\n\n private generateUniqueName(type: string): string {\n return this.nextUniqueName(type, this.collectDocumentNameSet());\n }\n\n private collectDocumentNameSet(): Set<string> {\n const names = new Set<string>();\n this.collectAllNames(this.document(), names);\n return names;\n }\n\n private nextUniqueName(type: string, existingNames: Set<string>): string {\n const baseName = (type || 'widget').charAt(0).toLowerCase() + (type || 'widget').slice(1);\n let index = 1;\n let uniqueName = `${baseName}${index}`;\n while (existingNames.has(uniqueName)) {\n index++;\n uniqueName = `${baseName}${index}`;\n }\n return uniqueName;\n }\n\n generateUniqueId(): number {\n return Math.random() * Math.pow(10, 18);\n }\n\n private collectAllNames(node: AXPWidgetNode, names: Set<string>): void {\n if (node.name) {\n names.add(node.name);\n }\n if (node.children) {\n for (const child of node.children) {\n this.collectAllNames(child, names);\n }\n }\n }\n\n public updatePreview() {\n const document = this.removeMetaProp(this.document());\n storeDesignerPreviewDocument(document);\n this.eventService.publish<AXPDesignerPreviewMessage>(AXPDesignerMessageKeys.Preview, {\n id: this.templateId()!,\n document,\n });\n }\n\n public async openPreviewDialog() {\n this.updatePreview();\n const com = await import('../../preview/preview.component').then((c) => c.AXPLayoutDesignerPreviewComponent);\n await this.popupService.open(com, {\n header: false,\n size: 'full',\n data: {\n initialSize: this.size(),\n isDialogWindow: true,\n },\n });\n }\n\n public openPreviewWindow() {\n this.updatePreview();\n window.open('/forms/preview', '_blank');\n }\n\n getContextMenuItems(instance: AXPDesignerWidgetComponent, isRoot = false): AXMenuItem[] {\n const widget = instance as any as AXPValueWidgetComponent;\n return this.buildContextMenuItems(widget.node, instance, isRoot);\n }\n\n getContextMenuItemsForNode(node: AXPWidgetNode, isRoot = false): AXMenuItem[] {\n return this.buildContextMenuItems(node, this.getWidgetInstance(node), isRoot);\n }\n\n private buildContextMenuItems(\n node: AXPWidgetNode,\n instance: AXPDesignerWidgetComponent | null,\n isRoot = false,\n ): AXMenuItem[] {\n const items: AXMenuItem[] = [];\n if (this.can(node).insert) {\n items.push(cloneWidgetMenu(AXP_DESIGNER_ADD_WIDGET_MENU, {\n break: true,\n }));\n }\n items.push(cloneWidgetMenu(AXP_DESIGNER_CLONE_MENU, { disabled: !this.can(node).copyOrCut }));\n items.push(cloneWidgetMenu(AXP_DESIGNER_CUT_MENU, { disabled: !this.can(node).copyOrCut }));\n items.push(cloneWidgetMenu(AXP_DESIGNER_COPY_MENU, { disabled: !this.can(node).copyOrCut }));\n items.push(cloneWidgetMenu(AXP_DESIGNER_PASTE_MENU, { disabled: !this.can(node).paste, break: true }));\n items.push(cloneWidgetMenu(AXP_DESIGNER_DELETE_WIDGET_MENU, { disabled: !this.can(node).delete, break: true }));\n items.push(cloneWidgetMenu(AXP_DESIGNER_SAVE_AS_WIDGET_MENU));\n instance?.onContextMenu?.({ items });\n if (!isRoot) {\n items.forEach(item => {\n item.suffix = undefined;\n })\n }\n return items;\n }\n\n async executeCommand(context: {\n instance?: AXPDesignerWidgetComponent | null;\n node?: AXPWidgetNode;\n name: string;\n data?: any;\n }): Promise<void> {\n const instance = context.instance ?? (context.node ? this.getWidgetInstance(context.node) : null);\n const widget = instance as any as AXPValueWidgetComponent | null;\n const node = widget?.node ?? context.node;\n if (!node) {\n return;\n }\n if (instance?.executeCommand) {\n const command: any = {\n name: context.name,\n data: context.data,\n handled: false\n }\n await instance.executeCommand(command);\n if (command.handled)\n return;\n }\n switch (context.name) {\n case AXP_DESIGNER_SELECT_WIDGET_MENU.name: {\n this.select({ widget: node })\n break\n }\n case AXP_DESIGNER_ADD_WIDGET_MENU.name: {\n this.showPicker(node);\n break\n }\n case AXP_DESIGNER_DELETE_WIDGET_MENU.name: {\n this.removeWidget(node);\n break\n }\n case AXP_DESIGNER_CLONE_MENU.name: {\n this.clone(node);\n break\n }\n case AXP_DESIGNER_CUT_MENU.name: {\n this.cut(node);\n break\n }\n case AXP_DESIGNER_COPY_MENU.name: {\n this.copy(node);\n break\n }\n case AXP_DESIGNER_PASTE_MENU.name: {\n this.paste(node);\n break\n }\n }\n }\n\n unsubscribeEvents() {\n this.eventService.unsubscribe(AXPDesignerMessageKeys.Loaded);\n this.eventService.unsubscribe(AXPDesignerMessageKeys.PreviewWindow);\n }\n}","import { AXClickEvent } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPLayoutBaseWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXPDesignerService } from '../../shared/designer.service';\n\n@Component({\n selector: 'axp-designer-add-widget-button',\n styleUrls: ['./add-widget-button.component.css'],\n template: `\n <div class=\"container\">\n <ax-button [text]=\"'Add New Element'\" (onClick)=\"handleClick($event)\" [look]=\"'solid'\" [color]=\"'primary'\">\n <ax-icon icon=\"fa-solid fa-plus\"></ax-icon>\n </ax-button>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXButtonModule, AXDecoratorModule],\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPDesignerAddWidgetButtonComponent {\n private designerService = inject(AXPDesignerService);\n private parent = inject(AXPLayoutBaseWidgetComponent);\n\n async handleClick(e: AXClickEvent) {\n e.nativeEvent.stopPropagation();\n await this.designerService.showPicker(this.parent.node);\n }\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { ChangeDetectionStrategy, Component, input, output, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'axp-designer-add-widget-line-button',\n template: `\n <div class=\"flex items-center py-4 text-xs\">\n <div class=\"flex-grow border-t-2 border-dashed border-surface\"></div>\n <div class=\"mx-2 ax-sm\">\n <ax-button [text]=\"text()\" [look]=\"'twotone'\" class=\"capitalize\" (onClick)=\"handleClick()\">\n <ax-icon icon=\"fa-solid fa-plus\"></ax-icon>\n </ax-button>\n </div>\n <div class=\"flex-grow border-t-2 border-dashed border-surface\"></div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXButtonModule, AXDecoratorModule],\n encapsulation: ViewEncapsulation.None\n})\nexport class AXPDesignerAddWidgetLineButtonComponent {\n\n text = input();\n onClick = output();\n\n\n protected handleClick() {\n this.onClick.emit();\n }\n\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPLayoutBaseWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n inject,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPDesignerService } from '../../shared/designer.service';\n\n@Component({\n selector: 'axp-designer-add-widget-mini-button',\n template: `\n <div class=\"axp-empty-space\">\n <div class=\"m-auto py-4 px-8\">\n <div\n class=\"flex items-center justify-center size-4 hover:scale-125 cursor-pointer\"\n (click)=\"handleClick($event)\"\n >\n <i class=\"fa-solid fa-plus\"></i>\n </div>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXButtonModule, AXDecoratorModule],\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPDesignerAddWidgetMiniButtonComponent {\n private designerService = inject(AXPDesignerService);\n private parent = inject(AXPLayoutBaseWidgetComponent);\n\n @Output()\n public onClick: EventEmitter<void> = new EventEmitter<void>();\n\n protected async handleClick(e: MouseEvent) {\n e.stopPropagation();\n const a = this.onClick;\n if (this.onClick.observed) {\n this.onClick.emit();\n } else {\n await this.designerService.showPicker(this.parent.node);\n }\n }\n\n @HostBinding('class')\n private get __class(): string {\n const cls: any = {};\n //\n cls[`flex`] = true;\n cls[`w-full`] = true;\n cls[`h-full`] = true;\n return cls;\n }\n}\n","import { ChangeDetectionStrategy, Component, HostListener, computed, model, output, signal } from '@angular/core';\n\n@Component({\n selector: 'axp-designer-flex-drawer',\n styleUrls: ['./flex-drawer.component.css'],\n template: `\n <table class=\"table-picker\">\n <tbody>\n <tr>\n @for (c of items(); track $index) {\n <td (mouseenter)=\"handleMouseHover(c)\" [class.picked]=\"c <= range()\" (click)=\"handleClick(c)\"></td>\n }\n </tr>\n <tr>\n <td [attr.colspan]=\"items().length\" class=\"text-center\">\n <small>{{ range() > 0 ? range() : ' ' }}</small>\n </td>\n </tr>\n </tbody>\n </table>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [],\n})\nexport class AXPDesignerFlexDrawerComponent {\n itemsCount = model<number>(12, { alias: 'items' });\n\n onSelect = output<number>();\n\n protected items = computed(() => Array.from({ length: this.itemsCount() }).map((v, index) => index + 1));\n\n protected range = signal(0);\n\n protected handleMouseHover(c: number) {\n this.range.set(c);\n }\n\n protected handleClick(c: number) {\n this.onSelect.emit(c);\n }\n\n @HostListener('mouseleave', ['$event'])\n protected handleMouseLeave(event: MouseEvent) {\n this.range.set(0);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n HostListener,\n model,\n output,\n signal,\n} from '@angular/core';\n\n@Component({\n selector: 'axp-designer-grid-drawer',\n styleUrls: ['./grid-drawer.component.css'],\n template: `\n <table class=\"table-picker\">\n <tbody>\n @for (r of rows(); track $index) {\n <tr>\n @for (c of columns(); track $index) {\n <td\n (mouseenter)=\"handleMouseHover(r, c)\"\n [class.picked]=\"c <= rangeC() && r <= rangeR()\"\n (click)=\"handleClick(r, c)\"\n ></td>\n }\n </tr>\n }\n <tr>\n <td [attr.colspan]=\"columns().length\" class=\"text-center\">\n <small>{{ rangeC() > 0 && rangeR() > 0 ? rangeC() + '×' + rangeR() : ' ' }}</small>\n </td>\n </tr>\n </tbody>\n </table>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [],\n})\nexport class AXPDesignerGridDrawerComponent {\n rowsCount = model<number>(5, { alias: 'rows' });\n colsCount = model<number>(12, { alias: 'columns' });\n\n onSelect = output<{ rows: number; cols: number }>();\n\n protected rows = computed(() => Array.from({ length: this.rowsCount() }).map((v, index) => index + 1));\n protected columns = computed(() => Array.from({ length: this.colsCount() }).map((v, index) => index + 1));\n\n protected rangeR = signal(0);\n protected rangeC = signal(0);\n\n protected handleMouseHover(r: number, c: number) {\n this.rangeR.set(r);\n this.rangeC.set(c);\n }\n\n protected handleClick(r: number, c: number) {\n this.onSelect.emit({ rows: r, cols: c });\n }\n\n @HostListener('mouseleave', ['$event'])\n protected handleMouseLeave(event: MouseEvent) {\n this.rangeR.set(0);\n this.rangeC.set(0);\n }\n}\n","import { AXPWidgetConfig } from '@acorex-platform/framework-shared/widget-core';\nimport { AXCommonModule } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTabsComponent, AXTabsModule, AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPSettingsService, AXPStickyDirective } from '@acorex-platform/framework-client/common';\nimport { AXPDefinitionCategory, AXPMultiLanguageString, AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { AXPWidgetItemClickEvent, AXPWidgetItemComponent, AXPWidgetItemData } from '@acorex-platform/framework-client/layout/components';\n\nimport { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n Component,\n computed,\n inject,\n Injector,\n model,\n signal,\n viewChild,\n ViewEncapsulation,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { castArray, orderBy, uniqBy } from 'lodash-es';\n\nconst WIDGET_PICKER_I18N = {\n searchPlaceholder: '@form-template-management:designer.components.widget-picker.search-placeholder',\n selectedCount: '@form-template-management:designer.components.widget-picker.selected-count',\n tabAll: '@form-template-management:designer.components.widget-picker.tab-all',\n pinnedSectionTitle: '@form-template-management:designer.components.widget-picker.pinned-section-title',\n} as const;\n\nexport interface AXPDisplayWidgetConfig extends AXPWidgetConfig {\n pinned: boolean;\n}\n\ninterface AXPWidgetPickerSection {\n trackKey: string;\n title: AXPMultiLanguageString | null;\n widgetItems: AXPWidgetItemData[];\n}\n\n/**\n * Maps AXPDisplayWidgetConfig to generic AXPWidgetItemData\n */\nfunction mapToWidgetItemData(widget: AXPDisplayWidgetConfig): AXPWidgetItemData {\n return {\n title: widget.title,\n description: widget.description,\n icon: widget.icon ?? 'fa-solid fa-cube',\n isPinned: widget.pinned,\n data: widget,\n };\n}\n\n@Component({\n imports: [\n CommonModule,\n AXCommonModule,\n FormsModule,\n AXButtonModule,\n AXDecoratorModule,\n AXTabsModule,\n AXSearchBoxModule,\n AXPStickyDirective,\n AXPWidgetItemComponent,\n AXTranslationModule,\n ],\n templateUrl: './widget-picker.component.html',\n styleUrl: './widget-picker.component.css',\n changeDetection: ChangeDetectionStrategy.Eager,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPDesignerWidgetPickerComponent extends AXBasePageComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly injector = inject(Injector);\n private settingsService = inject(AXPSettingsService);\n private readonly mlResolver = inject(AXTranslationService);\n private readonly pinnedSettingKey = 'forms:widgets:picker:pinned';\n\n /** Keeps the line indicator in sync when the selected index is set programmatically (e.g. restored tab). */\n private readonly tabsHost = viewChild<AXTabsComponent>('tabsHost');\n\n //#endregion\n\n //#region ---- Constructor ----\n\n constructor() {\n super();\n afterNextRender(\n () => {\n this.allowTabPersistence = true;\n },\n { injector: this.injector },\n );\n }\n\n //#endregion\n\n //#region ---- Class Properties ----\n\n protected readonly i18n = WIDGET_PICKER_I18N;\n\n protected searchTerm = model('');\n\n /** Populated by popup `data.tabPersistenceContext` (optional for tests). */\n tabPersistenceContext?: string;\n\n private widgets: AXPWidgetConfig[] = [];\n private allWidgets = signal<AXPWidgetConfig[]>([]);\n private pinnedWidgets = signal<string[]>([]);\n\n protected selectedWidgets = signal<AXPDisplayWidgetConfig[]>([]);\n\n protected currentTabIndex = signal(0);\n\n /** Avoid persisting spurious tab events before restore + first paint complete. */\n private allowTabPersistence = false;\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n private displayWidgets = computed<AXPDisplayWidgetConfig[]>(() => {\n return this.allWidgets().map((c) => ({ ...c, pinned: this.pinnedWidgets().includes(c.name) }));\n });\n\n private orderedList = computed(() => {\n const search = this.searchTerm().toLowerCase();\n const selectedTabName = this.selectedTab().name;\n\n return orderBy(\n this.displayWidgets().filter((w) => {\n const matchesTab =\n selectedTabName === 'all' || castArray(w.categories ?? []).some((c) => c.name === selectedTabName);\n const titleText = this.mlResolver.resolve(w.title).toLowerCase();\n const descText = this.mlResolver.resolve(w.description ?? '').toLowerCase();\n const matchesSearch = !search || titleText.includes(search) || descText.includes(search);\n return matchesTab && matchesSearch;\n }),\n [(w) => w.pinned, (w) => this.mlResolver.resolve(w.title)],\n ['desc', 'asc'],\n );\n });\n\n protected pinnedList = computed(() => this.orderedList().filter((c) => c.pinned));\n protected regularList = computed(() => this.orderedList().filter((c) => !c.pinned));\n\n protected pinnedWidgetItems = computed(() => this.pinnedList().map(mapToWidgetItemData));\n\n protected regularGroupedSections = computed(() => {\n const tabName = this.selectedTab().name;\n const list = this.regularList();\n if (tabName === 'all') {\n return this.buildAllTabSections(list);\n }\n return this.buildCategoryTabSections(list);\n });\n\n protected categories = computed(() =>\n uniqBy(\n this.allWidgets()\n .map((w) => castArray(w.categories ?? []))\n .filter((c) => c.length > 0)\n .flat(),\n 'name',\n ),\n );\n\n protected tabs = computed<AXPDefinitionCategory[]>(() =>\n orderBy(\n [{ name: 'all', title: WIDGET_PICKER_I18N.tabAll, order: 0 } as AXPDefinitionCategory, ...this.categories()],\n (c) => c.order,\n ),\n );\n\n protected maxVisibleWidgets = computed(() =>\n Math.max(\n 1,\n ...this.categories().map(\n (cat) =>\n this.allWidgets().filter((w) => castArray(w.categories ?? []).some((wc) => wc.name === cat.name)).length,\n ),\n ),\n );\n\n protected selectedTab = computed(() => this.tabs()[this.currentTabIndex()]);\n\n protected pickerShellClass = computed(\n () =>\n `axp-designer-widget-picker flex flex-col h-[95vh] ${this.maxVisibleWidgets() > 10 ? 'lg:h-[75vh]' : 'lg:h-[50vh]'}`,\n );\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n protected override async ngOnInit() {\n super.ngOnInit();\n this.allWidgets.set(this.widgets);\n this.pinnedWidgets.set((await this.settingsService.get<string[]>(this.pinnedSettingKey)) || []);\n await this.restoreLastTabFromSettings();\n }\n\n //#endregion\n\n //#region ---- Tab persistence (user settings) ----\n\n private lastTabSettingKey(context: string): string {\n return `forms:widgets:picker:last-tab:${context}`;\n }\n\n private async restoreLastTabFromSettings(): Promise<void> {\n const ctx = this.tabPersistenceContext;\n if (!ctx) {\n return;\n }\n const saved = await this.settingsService.get<string | undefined>(this.lastTabSettingKey(ctx));\n if (!saved) {\n return;\n }\n const idx = this.tabs().findIndex((t) => t.name === saved);\n if (idx >= 0) {\n this.currentTabIndex.set(idx);\n this.syncTabsStripToIndex(idx);\n }\n }\n\n /**\n * `ax-tab-item` [active] updates labels, but `ax-tabs` keeps the underline from its own index until `select` runs.\n */\n private syncTabsStripToIndex(index: number): void {\n afterNextRender(\n () => {\n this.tabsHost()?.select(index);\n },\n { injector: this.injector },\n );\n }\n\n private async persistTabSelection(tabIndex: number): Promise<void> {\n const ctx = this.tabPersistenceContext;\n if (!ctx) {\n return;\n }\n const tab = this.tabs()[tabIndex];\n if (!tab) {\n return;\n }\n await this.settingsService.scope(AXPPlatformScope.User).set(this.lastTabSettingKey(ctx), tab.name);\n }\n\n //#endregion\n\n //#region ---- Grouped sections (All = parent only; category tab = sub-category) ----\n\n /**\n * Picks the primary parent category for the \"All\" tab (lowest `order` wins).\n */\n private primaryCategory(widget: AXPDisplayWidgetConfig): AXPDefinitionCategory | null {\n const cats = castArray(widget.categories ?? []);\n if (cats.length === 0) {\n return null;\n }\n return orderBy(cats, (c) => c.order)[0];\n }\n\n private buildAllTabSections(list: AXPDisplayWidgetConfig[]): AXPWidgetPickerSection[] {\n const categoryMeta = this.categories();\n const withCat = list.filter((w) => castArray(w.categories ?? []).length > 0);\n const withoutCat = list.filter((w) => castArray(w.categories ?? []).length === 0);\n\n const byPrimaryName = new Map<string, AXPDisplayWidgetConfig[]>();\n for (const w of withCat) {\n const primary = this.primaryCategory(w);\n if (primary == null) {\n continue;\n }\n const key = primary.name;\n const bucket = byPrimaryName.get(key) ?? [];\n bucket.push(w);\n byPrimaryName.set(key, bucket);\n }\n\n const orderedNames = orderBy(\n [...byPrimaryName.keys()],\n (name) => categoryMeta.find((c) => c.name === name)?.order ?? 999,\n );\n\n const sections: AXPWidgetPickerSection[] = orderedNames.map((name) => {\n const cat = categoryMeta.find((c) => c.name === name);\n const widgets = orderBy(byPrimaryName.get(name)!, (w) => this.mlResolver.resolve(w.title), 'asc');\n return {\n trackKey: `cat:${name}`,\n title: cat?.title ?? null,\n widgetItems: widgets.map(mapToWidgetItemData),\n };\n });\n\n if (withoutCat.length > 0) {\n const widgets = orderBy(withoutCat, (w) => this.mlResolver.resolve(w.title), 'asc');\n sections.push({\n trackKey: 'cat:uncategorized',\n title: null,\n widgetItems: widgets.map(mapToWidgetItemData),\n });\n }\n\n return sections;\n }\n\n private buildCategoryTabSections(list: AXPDisplayWidgetConfig[]): AXPWidgetPickerSection[] {\n const withSub = list.filter((w) => w.subCategory != null);\n const withoutSub = list.filter((w) => w.subCategory == null);\n\n const bySubName = new Map<string, AXPDisplayWidgetConfig[]>();\n for (const w of withSub) {\n const key = w.subCategory!.name;\n const bucket = bySubName.get(key) ?? [];\n bucket.push(w);\n bySubName.set(key, bucket);\n }\n\n const orderedSubNames = orderBy([...bySubName.keys()], (k) => bySubName.get(k)![0].subCategory!.order);\n\n const sections: AXPWidgetPickerSection[] = orderedSubNames.map((name) => {\n const widgets = orderBy(bySubName.get(name)!, (w) => this.mlResolver.resolve(w.title), 'asc');\n const sub = widgets[0].subCategory!;\n return {\n trackKey: `sub:${name}`,\n title: sub.title,\n widgetItems: widgets.map(mapToWidgetItemData),\n };\n });\n\n if (withoutSub.length > 0) {\n const widgets = orderBy(withoutSub, (w) => this.mlResolver.resolve(w.title), 'asc');\n sections.push({\n trackKey: 'sub:ungrouped',\n title: null,\n widgetItems: widgets.map(mapToWidgetItemData),\n });\n }\n\n return sections;\n }\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected async handleTabChange(event: AXTabStripChangedEvent): Promise<void> {\n const indx = event.index;\n if (this.currentTabIndex() != indx) {\n this.currentTabIndex.set(indx);\n }\n if (this.allowTabPersistence) {\n await this.persistTabSelection(indx);\n }\n }\n\n protected handleWidgetClick(clickEvent: AXPWidgetItemClickEvent): void {\n const { event, widget } = clickEvent;\n const originalWidget = widget.data as AXPDisplayWidgetConfig;\n\n if (event.ctrlKey) {\n const currentSelection = this.selectedWidgets();\n const isAlreadySelected = currentSelection.some((w) => w === originalWidget);\n\n if (isAlreadySelected) {\n this.selectedWidgets.set(currentSelection.filter((w) => w !== originalWidget));\n } else {\n this.selectedWidgets.set([...currentSelection, originalWidget]);\n }\n } else {\n this.close({ widgets: [originalWidget] });\n }\n }\n\n protected async handleWidgetPinClick(clickEvent: AXPWidgetItemClickEvent): Promise<void> {\n const { widget } = clickEvent;\n const originalWidget = widget.data as AXPDisplayWidgetConfig;\n\n originalWidget.pinned = !originalWidget.pinned;\n\n let pinnedWidgets = (await this.settingsService.get<string[]>(this.pinnedSettingKey)) || [];\n\n if (originalWidget.pinned) {\n if (!pinnedWidgets.includes(originalWidget.name)) {\n pinnedWidgets.push(originalWidget.name);\n }\n } else {\n pinnedWidgets = pinnedWidgets.filter((name) => name !== originalWidget.name);\n }\n\n await this.settingsService.scope(AXPPlatformScope.User).set(this.pinnedSettingKey, pinnedWidgets);\n\n this.pinnedWidgets.set(pinnedWidgets);\n }\n\n protected handleConfirmSelection(): void {\n this.close({ widgets: this.selectedWidgets() });\n }\n\n //#endregion\n\n //#region ---- Selection state ----\n\n protected isWidgetSelected(widget: AXPDisplayWidgetConfig): boolean {\n return this.selectedWidgets().includes(widget);\n }\n\n protected isWidgetItemSelected(widgetItem: AXPWidgetItemData): boolean {\n const originalWidget = widgetItem.data as AXPDisplayWidgetConfig;\n return this.isWidgetSelected(originalWidget);\n }\n\n //#endregion\n}\n","<div [class]=\"pickerShellClass()\">\n <div>\n <ax-tabs #tabsHost [look]=\"'with-line'\" (onActiveTabChanged)=\"handleTabChange($event)\">\n @for (w of tabs(); track w.name; let i = $index) {\n <ax-tab-item\n [text]=\"(w.title | translate | async)!\"\n [key]=\"w.name\"\n [active]=\"currentTabIndex() === i\"\n ></ax-tab-item>\n }\n </ax-tabs>\n </div>\n <div class=\"overflow-auto\" #content>\n <div\n class=\"p-4 sticky top-0 z-10 transition-all\"\n #sticky=\"axpSticky\"\n [axpSticky]=\"'lightest-surface shadow-xl'\"\n [stickyParent]=\"content\"\n [stickyOffset]=\"10\"\n >\n <ax-search-box\n look=\"fill\"\n [placeholder]=\"(i18n.searchPlaceholder | translate | async) ?? ''\"\n [(ngModel)]=\"searchTerm\"\n [delayTime]=\"300\"\n [axAutoFocus]=\"true\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n <div class=\"flex flex-col p-4 pt-0\">\n @if (pinnedWidgetItems().length) {\n <div class=\"axp-designer-widget-picker__section axp-designer-widget-picker__section--first\">\n <div class=\"axp-designer-widget-picker__group-heading\">\n <span class=\"axp-designer-widget-picker__group-title\">{{\n (i18n.pinnedSectionTitle | translate | async) ?? ''\n }}</span>\n <span class=\"axp-designer-widget-picker__group-line\"></span>\n </div>\n <div class=\"grid grid-cols-2 gap-2\">\n @for (widgetItem of pinnedWidgetItems(); track $any(widgetItem.data).name) {\n <axp-widget-item\n [widget]=\"widgetItem\"\n [isSelected]=\"isWidgetItemSelected(widgetItem)\"\n (onWidgetClick)=\"handleWidgetClick($event)\"\n (onPinClick)=\"handleWidgetPinClick($event)\"\n >\n </axp-widget-item>\n }\n </div>\n </div>\n }\n @for (group of regularGroupedSections(); track group.trackKey; let isFirst = $first) {\n <div\n class=\"axp-designer-widget-picker__section\"\n [class.axp-designer-widget-picker__section--first]=\"isFirst && pinnedWidgetItems().length === 0\"\n >\n @if (group.title) {\n <div class=\"axp-designer-widget-picker__group-heading\">\n <span class=\"axp-designer-widget-picker__group-title\">{{\n (group.title | translate | async) ?? ''\n }}</span>\n <span class=\"axp-designer-widget-picker__group-line\"></span>\n </div>\n }\n <div class=\"grid grid-cols-2 gap-2\">\n @for (widgetItem of group.widgetItems; track $any(widgetItem.data).name) {\n <axp-widget-item\n [widget]=\"widgetItem\"\n [isSelected]=\"isWidgetItemSelected(widgetItem)\"\n (onWidgetClick)=\"handleWidgetClick($event)\"\n (onPinClick)=\"handleWidgetPinClick($event)\"\n >\n </axp-widget-item>\n }\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n@if (selectedWidgets().length) {\n <ax-footer>\n <ax-suffix>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"(i18n.selectedCount | translate: { params: { count: selectedWidgets().length } } | async) ?? ''\"\n (onClick)=\"handleConfirmSelection()\"\n ></ax-button>\n </ax-suffix>\n </ax-footer>\n}\n","import { AXP_WIDGET_TOKEN, AXPWidgetConfig, AXPWidgetNodeToken, AXPWidgetStatus } from '@acorex-platform/framework-shared/widget-core';\nimport type { AXPWidgetNode, AXPWidgetRenderMode } from '@acorex-platform/framework-shared/core';\nimport { AXPBaseWidgetComponent, AXPLayoutBaseWidgetComponent, AXPValueWidgetComponent, AXPWidgetRegistryService } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport {\n ComponentRef,\n Directive,\n inject,\n Injector,\n input,\n NgZone,\n OnChanges,\n OnDestroy,\n signal,\n SimpleChanges,\n ViewContainerRef,\n WritableSignal,\n} from '@angular/core';\nimport { cloneDeep, get, isEqual, merge, set } from 'lodash-es';\nimport { debounceTime, distinctUntilChanged, filter, first, Subscription } from 'rxjs';\nimport { AXPDesignerService } from './designer.service';\n\n@Directive({\n selector: '[axp-widget-designer-renderer]',\n standalone: true,\n})\nexport class AXPWidgetDesignerRendererDirective implements OnChanges, OnDestroy {\n protected mergedOptions: WritableSignal<any> = signal<any>({});\n\n private injector = inject(Injector);\n protected widgetRegistry = inject(AXPWidgetRegistryService);\n protected zone = inject(NgZone);\n\n protected isLoading = signal(true);\n\n private instance!: AXPBaseWidgetComponent;\n private config?: AXPWidgetConfig | undefined;\n private isLoadingComponent = false;\n private currentNodeId: string | null = null;\n\n private service = inject(AXPDesignerService);\n private viewContainerRef = inject(ViewContainerRef);\n\n parentNode = input<AXPLayoutBaseWidgetComponent | null>();\n parentElement = input<HTMLElement | null>();\n parentComponent = input<ComponentRef<any> | null>();\n\n index = input<number | null>();\n locked = input<boolean>(false);\n\n mode = input.required<AXPWidgetRenderMode>();\n node = input.required<AXPWidgetNode>();\n\n private hostElement = () => this.instance?.host as HTMLDivElement;\n private getId = (w: AXPWidgetNode) => get(w, '__meta__.id');\n\n /** Prefer `__meta__.id`; fall back to object identity so nameless AI children are not all treated as the same widget. */\n private sameWidget(a: AXPWidgetNode | null | undefined, b: AXPWidgetNode | null | undefined): boolean {\n if (!a || !b) {\n return a === b;\n }\n const idA = this.getId(a);\n const idB = this.getId(b);\n if (idA != null && idB != null) {\n return idA == idB;\n }\n return a === b;\n }\n\n private isCurrentWidget = (w: AXPWidgetNode) => this.sameWidget(w, this.node());\n\n /**\n * Drawer inserts (flex, grid, table) run inside a transaction that refreshes the page only.\n * Each widget copies `node.children` into its own signal at creation, so a page refresh must\n * also sync every nested container or the size picker stays on screen after cells are added.\n */\n private shouldSyncChildren(widget: AXPWidgetNode): boolean {\n return this.isCurrentWidget(widget) || this.isNestedUnder(widget, this.node());\n }\n\n private isNestedUnder(ancestor: AXPWidgetNode, node: AXPWidgetNode): boolean {\n const children = ancestor.children;\n if (!children?.length) {\n return false;\n }\n for (const child of children) {\n if (this.sameWidget(child, node) || this.isNestedUnder(child, node)) {\n return true;\n }\n }\n return false;\n }\n\n private subs: Subscription[] = [];\n\n /**\n * @ignore\n */\n constructor() {\n this.subs[0] = this.service.onUpdate\n .pipe(\n //debounceTime(time),\n distinctUntilChanged(\n (p, c) => this.sameWidget(p.widget, c.widget) && isEqual(p.values?.options, c.values?.options),\n ),\n filter((c) => this.isCurrentWidget(c.widget) && !this.locked()),\n )\n .subscribe((c) => {\n this.applyOptions(c.values?.options);\n });\n //\n this.subs[1] = this.service.onSelected\n .pipe(distinctUntilChanged((p, c) => this.sameWidget(p.widget, c.widget)))\n .subscribe((c) => {\n this.zone.runOutsideAngular(() => {\n if (this.isCurrentWidget(c.widget) && !this.locked()) {\n this.applySelectedStyle();\n } else {\n this.removeSelectedStyle();\n }\n });\n });\n //\n this.subs[2] = this.service.onFocused\n .pipe(\n distinctUntilChanged((p, c) => this.sameWidget(p.widget, c.widget)),\n )\n .subscribe((c) => {\n if (c.widget && this.isCurrentWidget(c.widget)) {\n this.addOverlay();\n } else {\n this.removeOverlay();\n }\n });\n //\n this.subs[3] = this.service.onRefresh\n .pipe(\n debounceTime(200),\n filter((c) => this.shouldSyncChildren(c.widget)),\n )\n .subscribe((c) => {\n this.instance?.setChildren(this.node().children ?? []);\n if (this.isCurrentWidget(c.widget)) {\n this.applyOptions(this.node().options);\n }\n });\n //\n }\n\n // Detect input changes\n ngOnChanges(changes: SimpleChanges) {\n if (changes['mode'] || changes['node']) {\n const nodeId = this.getId(this.node()) || null;\n const modeChanged = changes['mode']?.currentValue !== changes['mode']?.previousValue;\n const nodeChanged = changes['node'] && nodeId !== this.currentNodeId;\n\n // Only load if there's an actual change and we're not already loading\n //if ((modeChanged || nodeChanged) && !this.isLoadingComponent) {\n this.loadComponent();\n //}\n }\n }\n\n ngOnDestroy(): void {\n this.subs.forEach((s) => {\n s.unsubscribe();\n });\n\n if (this.node()) {\n this.service.unregister(this.node());\n }\n\n // Clear loading state and reset tracking variables\n this.isLoadingComponent = false;\n this.currentNodeId = null;\n this.isLoading.set(false);\n\n // Clear view container\n this.viewContainerRef.clear();\n }\n\n private async loadComponent() {\n // Prevent duplicate loading\n if (this.isLoadingComponent) {\n return;\n }\n\n try {\n this.isLoadingComponent = true;\n const nodeId = this.getId(this.node()) || null;\n\n // Skip if already loaded for the same node and mode\n // if (this.currentNodeId === nodeId && this.instance) {\n // this.isLoadingComponent = false;\n // return;\n // }\n\n if (this.instance && this.node()) {\n this.service.unregister(this.node());\n }\n\n this.viewContainerRef.clear();\n this.isLoading.set(true);\n this.currentNodeId = nodeId;\n\n this.config = this.widgetRegistry.resolve(this.node().type);\n //\n const props = [...(this.config?.properties ?? []), ...(this.config?.components[this.mode()]?.properties ?? [])]\n ?.filter((c) => c.schema.defaultValue != null)\n .map((c) => ({ [c.name]: cloneDeep(c.schema.defaultValue) }))\n .reduce((acc, curr) => {\n return { ...acc, ...curr };\n }, {});\n //\n this.mergedOptions.set(merge(props, this.node().options) || {});\n\n this.preprocessAndInitialOptions(cloneDeep(this.node().options));\n\n const tokenValue = {\n node: this.node(),\n options: this.mergedOptions(),\n config: this.config,\n defaultValue: cloneDeep(this.node().defaultValue),\n } as AXPWidgetNodeToken;\n\n const token = Injector.create({\n parent: this.injector,\n providers: [\n {\n provide: AXP_WIDGET_TOKEN,\n useValue: tokenValue,\n },\n ],\n });\n\n const loadComponent =\n this.config?.components[this.mode()]?.component ??\n this.config?.components['edit']?.component ??\n this.config?.components['view']?.component;\n const com = await loadComponent?.();\n if (!com) {\n throw new Error(`No designer/edit/view component registered for widget \"${this.node().type}\"`);\n }\n this.instance = this.viewContainerRef.createComponent<AXPBaseWidgetComponent>(com, { injector: token }).instance;\n this.instance.locked = this.locked();\n this.instance.parent = this.parentNode();\n this.instance.parentElement = this.parentElement();\n this.instance.parentComponent = this.parentComponent();\n this.instance.index = this.index();\n this.instance.mode = this.mode();\n //\n this.instance.onStatusChanged\n .pipe(\n filter((c) => c == AXPWidgetStatus.Rendered),\n first(),\n )\n .subscribe(() => {\n const host = this.hostElement();\n set(host, '__meta__.renderer', this);\n set(host, '__meta__.instance', this.instance);\n host.classList.add('axp-widget-host');\n if (this.mode() == 'designer') {\n if (!this.locked()) {\n host.addEventListener('mouseover', (e) => {\n e.stopPropagation();\n this.addOverlay();\n this.focus();\n });\n host.addEventListener('mouseleave', (e) => {\n e.stopPropagation();\n this.removeOverlay();\n this.blur();\n });\n\n host.addEventListener('click', (e) => {\n e.stopPropagation();\n this.applySelectedStyle();\n this.service.select({ widget: this.node() });\n });\n this.service.register({\n config: this.config!,\n id: get(this.node(), '__meta__.id') as any as number,\n instance: this.instance,\n widget: this.node(),\n });\n }\n }\n this.isLoading.set(false);\n });\n } catch (error) {\n console.error('Error loading component:', error);\n this.isLoading.set(false);\n } finally {\n this.isLoadingComponent = false;\n }\n }\n\n private overlay: HTMLElement | null;\n\n public select() {\n if (this.locked()) return;\n //\n this.service.select({ widget: this.node() });\n this.applySelectedStyle();\n }\n\n public focus() {\n if (this.locked()) return;\n //\n this.service.focus({ widget: this.node() });\n }\n\n public blur() {\n if (this.locked()) return;\n //\n this.service.focus({ widget: null });\n }\n\n private applySelectedStyle() {\n if (this.locked()) return;\n const host = this.hostElement();\n if (!host) {\n return;\n }\n host.classList.add('axp-state-selected');\n if (!this.isHostFullyVisible(host)) {\n host.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n }\n\n private isHostFullyVisible(host: HTMLElement): boolean {\n const canvas = host.closest('.axp-designer-canvas');\n const board = host.closest('.axp-designer-board');\n const container =\n canvas instanceof HTMLElement ? canvas : board instanceof HTMLElement ? board : host.parentElement;\n if (!container) {\n return true;\n }\n const hostRect = host.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n return (\n hostRect.top >= containerRect.top &&\n hostRect.bottom <= containerRect.bottom &&\n hostRect.left >= containerRect.left &&\n hostRect.right <= containerRect.right\n );\n }\n\n private removeSelectedStyle() {\n this.hostElement()?.classList.remove('axp-state-selected');\n }\n\n private addOverlay() {\n if (this.locked()) return;\n //\n this.zone.runOutsideAngular(() => {\n if (this.hostElement()) {\n this.hostElement()?.classList.add('axp-state-hover');\n //\n if (this.hostElement().querySelector('.axp-widget-overlay') || this.config?.type == 'container') {\n return;\n }\n this.overlay = document.createElement('div');\n this.overlay.classList.add('axp-widget-overlay');\n this.overlay.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n this.select();\n });\n this.overlay.addEventListener('mouseleave', (e) => {\n e.preventDefault();\n e.stopPropagation();\n this.blur();\n });\n this.hostElement().appendChild(this.overlay);\n }\n });\n }\n\n private removeOverlay() {\n this.zone.runOutsideAngular(() => {\n if (this.hostElement()) {\n this.hostElement()?.classList.remove('axp-state-hover');\n //\n this.overlay?.remove();\n }\n });\n }\n\n private preprocessAndInitialOptions(obj: any, pathPrefix: string = ''): void {\n if (!obj) return;\n //\n Object.entries(obj).forEach(([key, value]) => {\n const currentPath = pathPrefix ? `${pathPrefix}.${key}` : key;\n this.mergedOptions.update((currentOptions) => {\n return set(currentOptions, currentPath, value);\n });\n });\n }\n\n private applyOptions(values: any): void {\n if (this.instance instanceof AXPValueWidgetComponent && this.node().defaultValue != null) {\n this.instance.setValue(cloneDeep(this.node().defaultValue));\n }\n this.mergedOptions.update((currentOptions) => {\n return merge(currentOptions, values);\n });\n this.instance?.setOptions(this.mergedOptions());\n }\n}\n","import {\n AXContextMenuComponent,\n AXContextMenuItemsClickEvent,\n AXContextMenuOpeningEvent,\n AXMenuItem,\n AXMenuModule,\n} from '@acorex/components/menu';\nimport { AXPValueWidgetComponent, AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n HostBinding,\n HostListener,\n inject,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { get } from 'lodash-es';\nimport { AXPDesignerService } from '../../shared/designer.service';\nimport { AXPDesignerWidgetComponent } from '../../shared/designer.types';\nimport { AXPWidgetDesignerRendererDirective } from '../../shared/widget-designer-renderer.directive';\n\n@Component({\n selector: 'axp-designer-board',\n templateUrl: './board.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXPWidgetCoreModule, AXPWidgetDesignerRendererDirective, AXMenuModule],\n})\nexport class AXPDesignerBoardComponent {\n @ViewChild('contextMenu')\n protected contextMenu: AXContextMenuComponent;\n\n protected context: any = {};\n private elementRef = inject(ElementRef<HTMLDivElement>) as ElementRef<HTMLDivElement>;\n private readonly mlResolver = inject(AXTranslationService);\n\n private breakpointMap = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n xxl: 1536,\n };\n\n // Unified method to extract media queries and create a custom class\n applyResponsiveStyles(breakpoint: string) {\n const minWidth = get(this.breakpointMap, breakpoint) as number;\n const mediaRules = [];\n\n // Loop through all the stylesheets\n for (const sheet of Array.from(document.styleSheets)) {\n try {\n // Loop through CSS rules\n for (const rule of Array.from(sheet.cssRules)) {\n // Check if the rule is a CSSMediaRule\n if (rule instanceof CSSMediaRule && rule.media.mediaText.includes(`min-width: ${minWidth}px`)) {\n // Loop through the media rule's CSS rules\n for (const subRule of Array.from(rule.cssRules)) {\n mediaRules.push(subRule.cssText);\n }\n }\n }\n } catch (e) {\n console.error('Error accessing stylesheet:', e);\n }\n }\n\n // Create a dynamic class for the media queries\n this.createCustomClass(`axp-preview-${breakpoint}`, mediaRules, breakpoint);\n }\n\n private createCustomClass(className: string, styles: string[], breakpoint: string) {\n const styleSheet = document.createElement('style');\n styleSheet.setAttribute('data-screen', breakpoint);\n\n // Construct a pure CSS string, dynamically replacing the breakpoint prefix\n let styleString = '';\n styles.forEach((style) => {\n // Replace any prefixed classes like 'lg:' or 'md:' dynamically\n const dynamicPrefix = new RegExp(`\\\\.${breakpoint}\\\\\\\\:`, 'g');\n styleString += `.${className} ${style.replace(dynamicPrefix, '.')}`; // Replace the breakpoint prefix\n });\n\n styleSheet.innerText = styleString;\n this.removeCustomClass();\n this.elementRef.nativeElement.appendChild(styleSheet);\n }\n\n private removeCustomClass() {\n this.elementRef.nativeElement.querySelectorAll('style').forEach((s) => s.remove());\n }\n\n protected service = inject(AXPDesignerService);\n\n protected width = computed(() => {\n switch (this.service.size()) {\n case 'sm':\n return '340px';\n case 'md':\n case 'lg':\n return '768px';\n default:\n return '100%';\n }\n });\n\n private ef = effect(() => {\n this.removeCustomClass();\n if (this.service.size() != 'xl') {\n this.applyResponsiveStyles(this.service.size());\n }\n });\n\n /**\n * @ignore\n */\n constructor() {\n this.service.onRefresh.subscribe(() => {\n this.contextMenu?.refresh();\n });\n }\n\n @HostListener('contextmenu', ['$event'])\n protected handleBoardContextMenu(event: MouseEvent): void {\n const target = event.target;\n if (!(target instanceof Element)) {\n return;\n }\n\n const host = target.closest('.axp-widget-host');\n if (!(host instanceof HTMLElement)) {\n return;\n }\n\n const renderer = get(host, '__meta__.renderer') as unknown as AXPWidgetDesignerRendererDirective;\n const instance = get(host, '__meta__.instance') as unknown as AXPDesignerWidgetComponent;\n if (!renderer || !instance) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n this.contextMenu?.showAt({ x: event.clientX, y: event.clientY }, host);\n }\n\n protected handleContextMenuOpening(e: AXContextMenuOpeningEvent) {\n const renderer = get(e.targetElement, '__meta__.renderer') as unknown as AXPWidgetDesignerRendererDirective;\n const instance = get(e.targetElement, '__meta__.instance') as unknown as AXPDesignerWidgetComponent;\n\n if (!renderer || !instance) {\n e.canceled = true;\n return;\n }\n\n renderer.select();\n\n // Fetch context menu items for the current instance\n try {\n const items: AXMenuItem[] = this.service.getContextMenuItems(instance, true);\n if (items.length) {\n e.items.push(...items);\n } else {\n e.canceled = true;\n }\n } catch (error) {\n console.error('Failed to get context menu items:', error);\n e.canceled = true;\n }\n\n // Recursively bind instance data to all items\n this.bindInstanceToItems(e.items, instance);\n\n // Traverse through parents and add their menu items directly to the root level\n this.addParentsToRootMenu(instance, e.items);\n }\n\n private addParentsToRootMenu(instance: AXPDesignerWidgetComponent, items: AXMenuItem[]) {\n let parent = (instance as unknown as AXPValueWidgetComponent)?.parent;\n const parentItems: AXMenuItem[] = [];\n\n // Traverse up the parent chain, adding each parent to the \"Parents\" menu\n while (parent) {\n try {\n const widget = parent as unknown as AXPDesignerWidgetComponent;\n const parentContextItems: AXMenuItem[] = this.service.getContextMenuItems(widget);\n\n // Create a new menu item for this parent\n const parentMenuItem: AXMenuItem = {\n text: this.mlResolver.resolve(parent.config.title),\n icon: parent.config.icon,\n items: [\n {\n text: 'Select',\n name: 'select',\n break: true,\n icon: 'fa-solid fa-arrow-pointer',\n },\n ...parentContextItems,\n ],\n };\n\n // Recursively bind instance data to all items\n this.bindInstanceToItems(parentMenuItem.items ?? [], widget);\n\n // Add the parent menu item to the parentItems array\n parentItems.push(parentMenuItem);\n } catch (error) {\n console.error('Failed to get parent context menu items:', error);\n }\n\n // Move to the next parent in the chain\n parent = (parent as unknown as AXPValueWidgetComponent)?.parent;\n }\n\n // If there are any parent items, add them under a \"Parents\" group\n if (parentItems.length > 0) {\n items[items.length - 1].break = true;\n items.push({\n text: 'Parents',\n icon: 'fa-solid fa-turn-up', // Icon for the \"Parents\" group\n items: parentItems, // Add all parent items here\n });\n }\n }\n\n protected async handleContextMenuItemClick(e: AXContextMenuItemsClickEvent) {\n if (e.item.name) {\n const instance: AXPDesignerWidgetComponent = get(\n e.item.data,\n 'instance',\n ) as unknown as AXPDesignerWidgetComponent;\n await this.service.executeCommand({ instance, name: e.item.name });\n }\n }\n\n private bindInstanceToItems(items: AXMenuItem[], instance: AXPDesignerWidgetComponent): void {\n items.forEach((item) => {\n // Ensure each item gets the correct instance\n item.data = { ...(item.data ?? {}), instance };\n\n // If the item has sub-items, bind instance to them recursively\n if (item.items) {\n this.bindInstanceToItems(item.items, instance);\n }\n });\n }\n\n @HostBinding('style')\n private get __style(): string {\n const cls: any = {};\n cls[`width`] = this.width();\n cls[`max-width`] = '1280px';\n cls[`min-height`] = 'calc(100% - 5rem)';\n return cls;\n }\n\n @HostBinding('class')\n private get __class(): string {\n const cls: any = {};\n cls[`axp-designer-board`] = true;\n cls[`axp-state-design`] = true;\n cls['min-h-full'] = true;\n cls['shrink-0'] = true;\n cls['self-start'] = true;\n cls['overflow-auto'] = true;\n cls[`axp-preview-${this.service.size()}`] = true;\n return cls;\n }\n}\n","<axp-widgets-container [context]=\"context\">\n <!-- ----- Remount the page when epoch changes; keep the document node identity ----- -->\n @for (epoch of [service.pageRenderEpoch()]; track epoch) {\n <ng-container axp-widget-designer-renderer [node]=\"service.currentPage()\" [mode]=\"'designer'\"></ng-container>\n }\n</axp-widgets-container>\n\n<!-- Opened from the board host contextmenu; [target] cannot bind hosts that render after the menu. -->\n<ax-context-menu\n class=\"ax-dark\"\n #contextMenu\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onOpening)=\"handleContextMenuOpening($event)\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n>\n</ax-context-menu>","import type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { AXPDesignerService } from '../../shared/designer.service';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n selector: 'axp-designer-breadcrumbs',\n template: `\n <ax-breadcrumbs>\n @for( b of service.breadcrumbs();track $index){\n <ax-breadcrumbs-item>\n <a (click)=\"handleClick(b)\" (mouseover)=\"handleMouseOver(b)\"> {{ getTitle(b) | translate | async }}</a>\n </ax-breadcrumbs-item>\n }\n <ng-template #divider>\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </ng-template>\n </ax-breadcrumbs>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXPWidgetCoreModule, AXBreadcrumbsModule, AXDecoratorModule, AXTranslationModule, AsyncPipe]\n})\nexport class AXPDesignerBreadcrumbsComponent {\n protected service = inject(AXPDesignerService);\n\n protected getTitle(node: AXPWidgetNode): string {\n return get(node, '__meta__.config.title') as any as string;\n }\n\n protected handleClick(node: AXPWidgetNode) {\n this.service.select({ widget: node });\n }\n\n protected handleMouseOver(node: AXPWidgetNode) {\n this.service.focus({ widget: node });\n }\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\n\nimport { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n imports: [AXButtonModule, AXDecoratorModule],\n selector: 'axp-designer-drawer-content',\n changeDetection: ChangeDetectionStrategy.Eager,\n templateUrl: 'drawer-content.component.html'\n})\n\nexport class AXPLayoutDesignerDrawerContentComponent implements OnInit {\n constructor() { }\n\n ngOnInit() { }\n}","<div class=\"flex flex-col border-e w-72 h-full\">\n <div class=\"flex flex-row w-full justify-between p-2 border-b\">\n <div class=\"flex flex-row gap-2 items-center font-semibold\">\n <ng-content select=\"ax-title\"></ng-content>\n </div>\n <div class=\"flex gap-1 items-center\">\n <ng-content select=\"ax-content[header]\">\n </ng-content>\n <ax-close-button class=\"ax-sm\"></ax-close-button>\n </div>\n </div>\n <div class=\"flex-1 h-full overflow-auto\">\n <ng-content select=\"ax-content[body]\">\n\n </ng-content>\n </div>\n</div>","//#region ----- Imports -----\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPLocalDataSourceEditorDialogService, AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXP_LOCAL_DATA_SOURCE_STORE } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPLayoutDesignerDrawerContentComponent } from '../../../shared/drawer-content/drawer-content.component';\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axp-designer-data-sources',\n templateUrl: 'data-sources.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n AXDecoratorModule,\n AXButtonModule,\n AXTranslationModule,\n AXPLayoutDesignerDrawerContentComponent,\n AXPStateMessageComponent,\n ],\n})\nexport class AXPDesignerDataSourcesComponent {\n //#region ----- Services & Dependencies -----\n\n protected readonly store = inject(AXP_LOCAL_DATA_SOURCE_STORE);\n private readonly listDialog = inject(AXPLocalDataSourceEditorDialogService);\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected handleAddClick(): void {\n void this.openListDialog();\n }\n\n protected handleEdit(id: string): void {\n void this.openListDialog(id);\n }\n\n protected handleRemove(id: string): void {\n this.store.remove(id);\n }\n\n //#endregion\n\n //#region ----- Private -----\n\n private async openListDialog(id?: string): Promise<void> {\n const existing = id ? this.store.get(id) : undefined;\n const form = await this.listDialog.open({\n mode: existing ? 'edit' : 'create',\n name: existing?.name,\n columns: existing?.columns,\n items: existing?.items,\n });\n if (!form) {\n return;\n }\n\n if (existing && id) {\n this.store.update(id, { name: form.name, items: form.items, columns: form.columns });\n return;\n }\n\n const created = this.store.create(form.name);\n this.store.update(created.id, { items: form.items, columns: form.columns });\n }\n\n //#endregion\n}\n\n//#endregion\n","<axp-designer-drawer-content>\n <ax-title>{{ '@layout-designer:components.data-sources.title' | translate | async }}</ax-title>\n\n <ax-content header>\n <ax-button\n look=\"blank\"\n class=\"ax-sm\"\n [title]=\"('@layout-designer:components.data-sources.add' | translate | async) ?? ''\"\n (onClick)=\"handleAddClick()\"\n >\n <ax-icon class=\"fa-light fa-plus\"></ax-icon>\n </ax-button>\n </ax-content>\n\n <ax-content body>\n @if (store.sources().length) {\n <!-- ----- Form-local named lists ----- -->\n <ul class=\"axp-designer-drawer-list\">\n @for (item of store.sources(); track item.id) {\n <li class=\"flex items-center gap-1\">\n <i class=\"me-1 fa-solid fa-table\"></i>\n <span class=\"flex-1 truncate\">{{ item.name || ('@layout-designer:components.data-sources.untitled' | translate | async) }}</span>\n <ax-button\n look=\"blank\"\n class=\"ax-sm\"\n [title]=\"('@general:actions.edit.title' | translate | async) ?? ''\"\n (onClick)=\"handleEdit(item.id)\"\n >\n <ax-icon class=\"fa-light fa-pen\"></ax-icon>\n </ax-button>\n <ax-button\n look=\"blank\"\n class=\"ax-sm\"\n [title]=\"('@layout-designer:components.data-sources.delete' | translate | async) ?? ''\"\n (onClick)=\"handleRemove(item.id)\"\n >\n <ax-icon class=\"fa-light fa-trash\"></ax-icon>\n </ax-button>\n </li>\n }\n </ul>\n }\n <!-- ----- Empty local bag ----- -->\n @else {\n <axp-state-message\n icon=\"fa-light fa-database\"\n [title]=\"'@layout-designer:components.data-sources.empty-states.no-data-sources.title'\"\n [description]=\"'@layout-designer:components.data-sources.empty-states.no-data-sources.description'\"\n >\n </axp-state-message>\n }\n </ax-content>\n</axp-designer-drawer-content>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPLayoutDesignerDrawerContentComponent } from '../../../shared/drawer-content/drawer-content.component';\nimport { AXPDesignerService } from '../../../shared/designer.service';\n\n@Component({\n selector: 'axp-designer-history',\n templateUrl: 'history.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXButtonModule,\n AXDropdownModule,\n AXPLayoutDesignerDrawerContentComponent,\n AXPStateMessageComponent\n ]\n})\n\nexport class AXPDesignerHistoryComponent {\n protected service = inject(AXPDesignerService);\n}","<axp-designer-drawer-content>\n <ax-title>History</ax-title>\n\n <ax-content header>\n <ax-button look=\"blank\" class=\"ax-sm\">\n <ax-icon class=\"fa-light fa-ellipsis\"></ax-icon>\n <ax-dropdown-panel class=\"ax-sm\">\n <ax-button-item-list>\n <ax-button-item text=\"Clear\" name=\"add\" (onClick)=\"service.clearHistory()\"> </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </ax-content>\n\n <ax-content body>\n @if (service.history().length) {\n <ul class=\"axp-designer-drawer-list\">\n @for (step of service.history(); track $index) {\n <li\n (click)=\"service.navigateTo($index)\"\n [class.italic]=\"step.isFuture\"\n [class.text-neutral-400]=\"step.isFuture\"\n [class.state-selected]=\"step.isCurrent\"\n >\n <i class=\"me-1\" [ngClass]=\"step.icon\"></i>\n {{ step.description }}\n </li>\n }\n </ul>\n } @else {\n <axp-state-message\n icon=\"fa-light fa-history\"\n [title]=\"'@layout-designer:components.history.empty-states.no-changes.title'\"\n [description]=\"'@layout-designer:components.history.empty-states.no-changes.description'\"\n >\n </axp-state-message>\n }\n </ax-content>\n</axp-designer-drawer-content>\n","import { AXPWidgetConfig } from '@acorex-platform/framework-shared/widget-core';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport {\n type AXPMultiLanguageString,\n type AXPWidgetNode,\n AXPWidgetsCatalog,\n} from '@acorex-platform/framework-shared/core';\nimport {\n AXContextMenuComponent,\n AXContextMenuItemsClickEvent,\n AXContextMenuOpeningEvent,\n AXMenuItem,\n AXMenuModule,\n} from '@acorex/components/menu';\n\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, signal, viewChild, ViewEncapsulation } from '@angular/core';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { get } from 'lodash-es';\nimport { merge } from 'rxjs';\nimport { AXPLayoutDesignerDrawerContentComponent } from '../../../shared/drawer-content/drawer-content.component';\nimport { AXPDesignerService } from '../../../shared/designer.service';\nimport { AXPDesignerWidgetComponent } from '../../../shared/designer.types';\n\n@Component({\n selector: 'axp-designer-outline',\n templateUrl: 'outline.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXMenuModule,\n AXPLayoutDesignerDrawerContentComponent,\n AXPStateMessageComponent,\n ],\n})\nexport class AXPDesignerOutlineComponent {\n //#region ----- Services & Dependencies -----\n protected service = inject(AXPDesignerService);\n private readonly contextMenu = viewChild<AXContextMenuComponent>('outlineContextMenu');\n //#endregion\n\n //#region ----- State Signals -----\n protected collapsedStates: Map<any, boolean> = new Map();\n protected root = signal(this.getTree());\n //#endregion\n\n //#region ----- Lifecycle -----\n constructor() {\n merge(this.service.onRefresh, this.service.onUpdate).subscribe(() => {\n this.root.update((c) => ({ ...this.getTree() }));\n });\n }\n //#endregion\n\n //#region ----- Tree -----\n private getTree(): AXPWidgetNode {\n return {\n type: AXPWidgetsCatalog.document,\n children: [this.service.currentPage()],\n } as AXPWidgetNode;\n }\n\n private toggleCollapse(node: any) {\n this.collapsedStates.set(node, !this.collapsedStates.get(node));\n }\n\n protected isCollapsed(node: any): boolean {\n return !!this.collapsedStates.get(node);\n }\n\n protected getConfig(node: AXPWidgetNode): AXPWidgetConfig | undefined {\n return get(node, '__meta__.config') as AXPWidgetConfig | undefined;\n }\n\n /** Solid, type-colored icon so outline rows stay scannable on a dark drawer. */\n protected getOutlineIconClass(config?: AXPWidgetConfig): string {\n const icon = (config?.icon ?? 'fa-solid fa-cube')\n .replace(/\\bfa-light\\b/g, 'fa-solid')\n .replace(/\\bfa-regular\\b/g, 'fa-solid');\n return `${icon} ${this.getOutlineIconColor(config)}`;\n }\n\n private getOutlineIconColor(config?: AXPWidgetConfig): string {\n switch (config?.type) {\n case 'container':\n return 'text-primary';\n case 'editor':\n return 'text-success';\n case 'action':\n return 'text-warning';\n case 'view':\n return 'text-secondary';\n case 'filter':\n return 'text-primary';\n case 'validation':\n return 'text-danger';\n case 'dashboard':\n return 'text-warning';\n default:\n return 'text-primary';\n }\n }\n\n /** Caption, text-block content, or the widget type title. Type-slug names stay off this string. */\n protected getOutlineTitle(node: AXPWidgetNode): AXPMultiLanguageString | string {\n return this.readOutlineCaption(node) ?? this.getConfig(node)?.title ?? node.type ?? '';\n }\n\n /** Plain captions render as-is. Type titles and multi-language captions go through translate. */\n protected usesOutlineTranslation(title: AXPMultiLanguageString | string): boolean {\n return typeof title !== 'string' || title.startsWith('@');\n }\n\n protected outlinePlainTitle(title: AXPMultiLanguageString | string): string {\n return typeof title === 'string' ? title : '';\n }\n\n /** Field names such as `txtlocation`. Generated slugs (`text-block-layout2`, `page`) stay off the row. */\n protected getOutlineNameSuffix(node: AXPWidgetNode): string {\n const name = typeof node.name === 'string' ? node.name.trim() : '';\n if (!name || this.isGeneratedWidgetName(node.type, name)) {\n return '';\n }\n return ` : ${name}`;\n }\n\n /** Full row text, plus the generated name when the visible label hides it. */\n protected outlineTooltip(node: AXPWidgetNode, title: string, suffix: string): string {\n const visible = `${title ?? ''}${suffix}`.trim();\n const name = typeof node.name === 'string' ? node.name.trim() : '';\n if (name && !visible.includes(name)) {\n return visible ? `${visible} (${name})` : name;\n }\n return visible;\n }\n\n private readOutlineCaption(node: AXPWidgetNode): AXPMultiLanguageString | string | undefined {\n const options = node.options;\n if (!options || typeof options !== 'object' || Array.isArray(options)) {\n return undefined;\n }\n const record = options as Record<string, unknown>;\n const caption = record['label'] ?? record['title'] ?? record['caption'] ?? record['text'];\n if (typeof caption === 'string' && caption.trim()) {\n return caption.trim();\n }\n if (caption && typeof caption === 'object' && !Array.isArray(caption)) {\n return caption as AXPMultiLanguageString;\n }\n if (node.type !== 'text-block-layout' || typeof record['content'] !== 'string') {\n return undefined;\n }\n const plain = this.stripOutlineHtml(record['content']).replace(/\\s+/g, ' ').trim();\n return plain || undefined;\n }\n\n private isGeneratedWidgetName(type: string | undefined, name: string): boolean {\n const widgetType = (type ?? '').trim();\n if (this.matchesTypeSlug(name, widgetType)) {\n return true;\n }\n const shortType = widgetType.replace(/-layout$/, '');\n return shortType !== widgetType && this.matchesTypeSlug(name, shortType);\n }\n\n private matchesTypeSlug(name: string, base: string): boolean {\n if (!base) {\n return false;\n }\n if (name === base) {\n return true;\n }\n if (!name.startsWith(base)) {\n return false;\n }\n return /^[0-9]+$/.test(name.slice(base.length));\n }\n\n private stripOutlineHtml(value: string): string {\n return value\n .replace(/<br\\s*\\/?>/gi, ' ')\n .replace(/<[^>]+>/g, ' ')\n .replace(/&nbsp;/gi, ' ')\n .replace(/&amp;/gi, '&')\n .replace(/&lt;/gi, '<')\n .replace(/&gt;/gi, '>');\n }\n //#endregion\n\n //#region ----- Event Handlers -----\n protected handleClick(e: MouseEvent, node: AXPWidgetNode) {\n e.stopPropagation();\n this.service.select({ widget: node });\n }\n\n protected handleToggleClick(event: MouseEvent, item: any): void {\n event.stopPropagation();\n this.toggleCollapse(item);\n }\n\n protected handleMouseOver(e: MouseEvent, node: AXPWidgetNode) {\n e.stopPropagation();\n this.service.focus({ widget: node });\n }\n\n protected handleContextMenu(event: MouseEvent, node: AXPWidgetNode): void {\n event.preventDefault();\n event.stopPropagation();\n\n this.service.select({ widget: node });\n\n const menu = this.contextMenu();\n if (!menu) {\n return;\n }\n\n const instance = this.service.getWidgetInstance(node);\n const items: AXMenuItem[] = this.service.getContextMenuItemsForNode(node, true);\n this.bindMenuData(items, instance, node);\n\n const targetElement = event.currentTarget instanceof HTMLElement ? event.currentTarget : undefined;\n menu.showAt({ x: event.clientX, y: event.clientY }, targetElement, {\n sender: menu,\n canceled: false,\n targetElement,\n items,\n } as AXContextMenuOpeningEvent);\n }\n\n protected async handleContextMenuItemClick(e: AXContextMenuItemsClickEvent) {\n if (e.item.name) {\n const instance = get(e.item.data, 'instance') as AXPDesignerWidgetComponent | undefined;\n const node = get(e.item.data, 'node') as AXPWidgetNode | undefined;\n await this.service.executeCommand({ instance, node, name: e.item.name });\n }\n }\n //#endregion\n\n //#region ----- Context Menu -----\n private bindMenuData(\n items: AXMenuItem[],\n instance: AXPDesignerWidgetComponent | null,\n node: AXPWidgetNode,\n ): void {\n items.forEach((item) => {\n item.data = { ...(item.data ?? {}), instance, node };\n if (item.items) {\n this.bindMenuData(item.items, instance, node);\n }\n });\n }\n //#endregion\n}\n","<axp-designer-drawer-content>\n <ax-title>{{ '@layout-designer:components.outline.title' | translate | async }}</ax-title>\n\n <ax-content body>\n @if (root().children?.length) {\n <!-- ----- Outline tree of the current page ----- -->\n <ul class=\"space-y-1 p-1 text-sm\">\n @for (node of root().children; track $index) {\n <ng-container [ngTemplateOutlet]=\"sideMenu\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-container>\n }\n </ul>\n <ng-template #sideMenu let-item>\n <li (click)=\"handleClick($event, item)\" (mouseover)=\"handleMouseOver($event, item)\">\n <div [class.darker-surface]=\"item === service.selectedNode()\" class=\"flex flex-row items-center gap-1 cursor-pointer transition duration-150 ease-in-out hover:dark-surface py-1 px-2 rounded-sm\" (contextmenu)=\"handleContextMenu($event, item)\">\n <span class=\"w-3 shrink-0 flex items-center justify-center\">\n <!--->\n <!-- ----- Collapse / expand when this node has children ----- -->\n @if (item.children?.length) {\n <i class=\"fa-solid fa-xs opacity-60\" [class.fa-chevron-right]=\"isCollapsed(item)\" (click)=\"handleToggleClick($event, item)\" [class.fa-chevron-down]=\"!isCollapsed(item)\"></i>\n }\n </span>\n @let config = getConfig(item);\n <span class=\"w-4 shrink-0 flex items-center justify-center\">\n <!--->\n <!-- ----- Widget icon from config, colored by widget type ----- -->\n @if (config?.icon) {\n <i [ngClass]=\"getOutlineIconClass(config)\"></i>\n }\n </span>\n @let title = getOutlineTitle(item);\n @let suffix = getOutlineNameSuffix(item);\n <!--------------------------------------------------------------->\n <!-- ----- Translate type titles; plain captions and text-block content stay as stored ----- -->\n @if (usesOutlineTranslation(title)) {\n @let translated = (title | translate | async) ?? '';\n <span class=\"truncate flex-1 pe-2\" [attr.title]=\"outlineTooltip(item, translated, suffix)\">{{ translated }}{{ suffix }}</span>\n }\n <!-- ----- Plain caption or stripped text-block content ----- -->\n @else {\n <span class=\"truncate flex-1 pe-2\" [attr.title]=\"outlineTooltip(item, outlinePlainTitle(title), suffix)\">{{ outlinePlainTitle(title) }}{{ suffix }}</span>\n }\n </div>\n <!--->\n <!-- ----- Nested outline children ----- -->\n @if (item.children?.length && !isCollapsed(item)) {\n <ul class=\"space-y-1 ps-3 text-sm\">\n @for (child of item.children; track child) {\n <ng-container [ngTemplateOutlet]=\"sideMenu\" [ngTemplateOutletContext]=\"{ $implicit: child }\"></ng-container>\n }\n </ul>\n }\n </li>\n </ng-template>\n }\n <!-- ----- Empty outline when the page has no widgets ----- -->\n @else {\n <axp-state-message icon=\"fa-light fa-shapes\" [title]=\"'@layout-designer:components.outline.empty-states.no-widgets.title'\" [description]=\"'@layout-designer:components.outline.empty-states.no-widgets.description'\"></axp-state-message>\n }\n </ax-content>\n</axp-designer-drawer-content>\n\n<!-- Opened from each outline row; same commands as the canvas widget menu. -->\n<ax-context-menu class=\"ax-dark\" #outlineContextMenu [orientation]=\"'vertical'\" [closeOn]=\"'leave'\" (onItemClick)=\"handleContextMenuItemClick($event)\"></ax-context-menu>\n","import { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPLayoutDesignerDrawerContentComponent } from '../../../shared/drawer-content/drawer-content.component';\nimport { AXPDesignerService } from '../../../shared/designer.service';\n\n@Component({\n selector: 'axp-designer-pages',\n templateUrl: 'pages.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXPWidgetCoreModule,\n AXDecoratorModule,\n AXButtonModule,\n AXTranslationModule,\n AXPLayoutDesignerDrawerContentComponent\n]\n})\n\nexport class AXPDesignerPagesComponent {\n\n protected service = inject(AXPDesignerService);\n\n}","<axp-designer-drawer-content>\n <ax-title>{{ '@layout-designer:components.pages.title' | translate | async }}</ax-title>\n <ax-content header>\n <ax-button look=\"blank\" class=\"ax-sm\" (onClick)=\"service.addNewPage()\" [title]=\"'@layout-designer:components.pages.add' | translate | async\">\n <ax-icon class=\"fa-light fa-file-circle-plus\"></ax-icon>\n </ax-button>\n </ax-content>\n\n <ax-content body>\n @let count = service.document().children?.length ?? 0; @if(count) {\n <ul class=\"text-sm p-2 rounded ax-md space-y-1\">\n @for( page of service.document().children;track $index) {\n <li (click)=\"service.goToPage($index)\"\n class=\"cursor-pointer transition duration-150 ease-in-out hover:dark-surface py-1 px-2 rounded-sm group flex justify-between items-center\"\n [class.darker-surface]=\"$index == service.currentPageIndex()\">\n <div>\n <i class=\"fa-light fa-file me-1\"></i>\n {{ '@layout-designer:components.pages.page-n' | translate: { params: { n: $index + 1 } } | async }}\n </div>\n <div class=\"invisible group-hover:visible flex gap-2\">\n @if(count>1) {\n <i class=\"fa-light fa-trash hover:text-danger-500\" (click)=\"service.removePage($index)\"></i>\n }\n <i class=\"fa-light fa-clone hover:text-primary-500\" (click)=\"service.clonePage($index)\"></i>\n </div>\n </li>\n }\n </ul>\n } @else {\n <div class=\"axp-designer-drawer-empty\">{{ '@layout-designer:components.pages.empty' | translate | async }}</div>\n }\n </ax-content>\n</axp-designer-drawer-content>\n","//#region ---- Imports ----\n\nimport type { DestroyRef } from '@angular/core';\n\n//#endregion\n\n//#region ---- Hook keys ----\n\n/**\n * Distributed hooks for extending the layout designer header menu without coupling the designer library to feature modules.\n *\n * - {@link AXPLayoutDesignerHeaderMenuHookKeys.root}: top-level bar items (siblings of File, Edit, …).\n * - {@link AXPLayoutDesignerHeaderMenuHookKeys.submenu}: extra items inside a menu (`file`, `import`, `edit`, `run`, `help`).\n */\nexport const AXPLayoutDesignerHeaderMenuHookKeys = {\n root: 'layout-designer.header-menu.root',\n submenu: 'layout-designer.header-menu.submenu',\n} as const;\n\n//#endregion\n\n//#region ---- Payload types ----\n\nexport type AXPLayoutDesignerHeaderParentMenuId = 'file' | 'import' | 'edit' | 'run' | 'help';\n\nexport interface AXPLayoutDesignerHeaderMenuEntry {\n id: string;\n priority?: number;\n /** i18n key (resolved by the menu host when set). */\n labelKey?: string;\n /** Plain label when no translation key is used. */\n label?: string;\n iconClass?: string;\n run: () => void | Promise<void>;\n}\n\nexport interface AXPLayoutDesignerHeaderMenuRootPayload {\n /** Current designer instance (typed as unknown to avoid circular imports in consumers). */\n designer: unknown;\n /** Header host lifetime — extensions register page context against this owner. */\n owner?: DestroyRef;\n items: AXPLayoutDesignerHeaderMenuEntry[];\n}\n\nexport interface AXPLayoutDesignerHeaderMenuSubmenuPayload {\n designer: unknown;\n /** Header host lifetime — extensions register page context against this owner. */\n owner?: DestroyRef;\n parentMenuId: AXPLayoutDesignerHeaderParentMenuId;\n items: AXPLayoutDesignerHeaderMenuEntry[];\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPKeyboardShortcutPriority } from '@acorex-platform/framework-shared/core';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXKBDComponent, AXKBDItemComponent } from '@acorex/components/kbd';\nimport { AXMenuModule } from '@acorex/components/menu';\n\nimport { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, inject, OnInit, signal } from '@angular/core';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPHookService, AXPKeyboardShortcutRegistry, chordToKbdItemKeys } from '@acorex-platform/framework-client/core';\nimport {\n AXPLayoutDesignerHeaderMenuEntry,\n AXPLayoutDesignerHeaderMenuHookKeys,\n AXPLayoutDesignerHeaderMenuRootPayload,\n AXPLayoutDesignerHeaderMenuSubmenuPayload,\n AXPLayoutDesignerHeaderParentMenuId,\n} from '../../shared/layout-designer-header-menu.hooks';\nimport { AXPDesignerService } from '../../shared/designer.service';\n\n//#endregion\n\n/** Menu entry with optional pre-resolved translation label for templates. */\ninterface AXPLayoutDesignerHeaderMenuEntryResolved extends AXPLayoutDesignerHeaderMenuEntry {\n resolvedLabel?: string;\n}\n\n@Component({\n imports: [AXDecoratorModule, AXKBDComponent, AXKBDItemComponent, AXMenuModule],\n selector: 'axp-designer-header-menu',\n templateUrl: 'header-menu.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPDesignerHeaderMenuComponent implements OnInit {\n //#region ---- Services & Dependencies ----\n\n protected readonly service = inject(AXPDesignerService);\n private readonly hooks = inject(AXPHookService);\n private readonly translationService = inject(AXTranslationService);\n private readonly shortcutRegistry = inject(AXPKeyboardShortcutRegistry);\n private readonly destroyRef = inject(DestroyRef);\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n constructor() {\n this.registerDesignerKeyboardShortcuts();\n }\n\n async ngOnInit(): Promise<void> {\n const rootPayload = await this.hooks.runAsync<AXPLayoutDesignerHeaderMenuRootPayload>(\n AXPLayoutDesignerHeaderMenuHookKeys.root,\n { designer: this.service, owner: this.destroyRef, items: [] },\n );\n rootPayload.items.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n this.rootMenuContributions.set(await this.resolveMenuLabels(rootPayload.items));\n\n const parents: AXPLayoutDesignerHeaderParentMenuId[] = ['file', 'import', 'edit', 'run', 'help'];\n const map: Partial<Record<AXPLayoutDesignerHeaderParentMenuId, AXPLayoutDesignerHeaderMenuEntryResolved[]>> = {};\n for (const parentMenuId of parents) {\n const subPayload = await this.hooks.runAsync<AXPLayoutDesignerHeaderMenuSubmenuPayload>(\n AXPLayoutDesignerHeaderMenuHookKeys.submenu,\n { designer: this.service, owner: this.destroyRef, parentMenuId, items: [] },\n );\n subPayload.items.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n map[parentMenuId] = await this.resolveMenuLabels(subPayload.items);\n }\n this.submenuContributions.set(map);\n }\n\n //#endregion\n\n //#region ---- Hook-driven menu contributions ----\n\n protected readonly rootMenuContributions = signal<AXPLayoutDesignerHeaderMenuEntryResolved[]>([]);\n\n protected readonly submenuContributions = signal<\n Partial<Record<AXPLayoutDesignerHeaderParentMenuId, AXPLayoutDesignerHeaderMenuEntryResolved[]>>\n >({});\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected submenuFor(parent: AXPLayoutDesignerHeaderParentMenuId): AXPLayoutDesignerHeaderMenuEntryResolved[] {\n return this.submenuContributions()[parent] ?? [];\n }\n\n protected runMenuEntry(entry: AXPLayoutDesignerHeaderMenuEntry): void {\n void Promise.resolve(entry.run());\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private async resolveMenuLabels(\n items: AXPLayoutDesignerHeaderMenuEntry[],\n ): Promise<AXPLayoutDesignerHeaderMenuEntryResolved[]> {\n return Promise.all(\n items.map(async (e) => ({\n ...e,\n resolvedLabel: e.labelKey\n ? await this.translationService.translateAsync(e.labelKey)\n : e.label,\n })),\n );\n }\n\n protected shortcutKeys(chord: string): string[] {\n return chordToKbdItemKeys(chord);\n }\n\n private registerDesignerKeyboardShortcuts(): void {\n const scope = '@layout-designer:feature.title';\n const base = {\n owner: this.destroyRef,\n elementRef: this.elementRef,\n priority: AXPKeyboardShortcutPriority.Page,\n scope,\n } as const;\n\n this.shortcutRegistry.register({\n ...base,\n id: 'designer-header-file',\n shortcuts: [\n {\n keys: ['shift+n'],\n title: '@layout-designer:keyboard-shortcuts.new',\n group: '@layout-designer:keyboard-shortcuts.groups.file',\n handler: (event) => {\n if (this.isDesignerBodyTarget(event)) {\n this.service.new();\n }\n },\n },\n {\n keys: ['ctrl+s'],\n title: '@layout-designer:keyboard-shortcuts.save',\n group: '@layout-designer:keyboard-shortcuts.groups.file',\n allowInEditableFields: true,\n handler: () => {\n void this.service.save();\n },\n },\n {\n keys: ['ctrl+shift+s'],\n title: '@layout-designer:keyboard-shortcuts.save-as',\n group: '@layout-designer:keyboard-shortcuts.groups.file',\n allowInEditableFields: true,\n handler: () => {\n void this.service.saveAs();\n },\n },\n ],\n });\n\n this.shortcutRegistry.register({\n ...base,\n id: 'designer-header-run',\n shortcuts: [\n {\n keys: ['ctrl+r'],\n title: '@layout-designer:keyboard-shortcuts.preview',\n group: '@layout-designer:keyboard-shortcuts.groups.run',\n allowInEditableFields: true,\n handler: () => {\n void this.service.openPreviewDialog();\n },\n },\n {\n keys: ['ctrl+shift+r'],\n title: '@layout-designer:keyboard-shortcuts.preview-window',\n group: '@layout-designer:keyboard-shortcuts.groups.run',\n allowInEditableFields: true,\n handler: () => {\n void this.service.openPreviewWindow();\n },\n },\n ],\n });\n\n this.shortcutRegistry.register({\n ...base,\n id: 'designer-header-delete',\n when: () => this.service.canDelete(),\n shortcuts: [\n {\n keys: ['delete'],\n title: '@layout-designer:keyboard-shortcuts.delete-widget',\n group: '@layout-designer:keyboard-shortcuts.groups.edit',\n handler: () => this.service.removeWidget(),\n },\n ],\n });\n\n this.shortcutRegistry.register({\n ...base,\n id: 'designer-header-insert',\n when: () => this.service.canInsert(),\n shortcuts: [\n {\n keys: ['insert'],\n title: '@layout-designer:keyboard-shortcuts.insert-widget',\n group: '@layout-designer:keyboard-shortcuts.groups.edit',\n handler: () => {\n void this.service.showPicker();\n },\n },\n ],\n });\n\n this.shortcutRegistry.register({\n ...base,\n id: 'designer-header-undo',\n when: () => this.service.canUndo(),\n shortcuts: [\n {\n keys: ['ctrl+z'],\n title: '@layout-designer:keyboard-shortcuts.undo',\n group: '@layout-designer:keyboard-shortcuts.groups.edit',\n handler: (event) => {\n if (this.isDesignerBodyTarget(event)) {\n this.service.undo();\n }\n },\n },\n ],\n });\n\n this.shortcutRegistry.register({\n ...base,\n id: 'designer-header-redo',\n when: () => this.service.canRedo(),\n shortcuts: [\n {\n keys: ['ctrl+y', 'ctrl+shift+z'],\n title: '@layout-designer:keyboard-shortcuts.redo',\n group: '@layout-designer:keyboard-shortcuts.groups.edit',\n handler: (event) => {\n if (this.isDesignerBodyTarget(event)) {\n this.service.redo();\n }\n },\n },\n ],\n });\n\n this.shortcutRegistry.register({\n ...base,\n id: 'designer-header-cut-copy',\n when: () => this.service.canCutCopy(),\n shortcuts: [\n {\n keys: ['ctrl+c'],\n title: '@layout-designer:keyboard-shortcuts.copy',\n group: '@layout-designer:keyboard-shortcuts.groups.edit',\n handler: (event) => {\n if (this.isDesignerBodyTarget(event)) {\n this.service.copy();\n }\n },\n },\n {\n keys: ['ctrl+d'],\n title: '@layout-designer:keyboard-shortcuts.clone',\n group: '@layout-designer:keyboard-shortcuts.groups.edit',\n handler: (event) => {\n if (this.isDesignerBodyTarget(event)) {\n this.service.clone();\n }\n },\n },\n {\n keys: ['ctrl+x'],\n title: '@layout-designer:keyboard-shortcuts.cut',\n group: '@layout-designer:keyboard-shortcuts.groups.edit',\n handler: (event) => {\n if (this.isDesignerBodyTarget(event)) {\n this.service.cut();\n }\n },\n },\n ],\n });\n\n this.shortcutRegistry.register({\n ...base,\n id: 'designer-header-paste',\n when: () => this.service.canPaste(),\n shortcuts: [\n {\n keys: ['ctrl+v'],\n title: '@layout-designer:keyboard-shortcuts.paste',\n group: '@layout-designer:keyboard-shortcuts.groups.edit',\n handler: (event) => {\n if (this.isDesignerBodyTarget(event)) {\n this.service.paste();\n }\n },\n },\n ],\n });\n }\n\n private isDesignerBodyTarget(event: KeyboardEvent): boolean {\n return event.target === document.body;\n }\n\n //#endregion\n}\n","<ax-menu [openOn]=\"'hover'\" [hasArrow]=\"false\">\n <ax-menu-item>\n <ax-text>File</ax-text>\n <ax-menu-item (onClick)=\"service.new()\">\n <ax-text>New</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-file\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-kbd look=\"blank\">\n <ax-kbd-item [keys]=\"shortcutKeys('shift+n')\"></ax-kbd-item>\n </ax-kbd>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n @if (service.canSave()) {\n <ng-container>\n <ax-menu-item (onClick)=\"service.save()\">\n <ax-text>Save</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-floppy-disk\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-kbd look=\"blank\">\n <ax-kbd-item [keys]=\"shortcutKeys('ctrl+s')\"></ax-kbd-item>\n </ax-kbd>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item (onClick)=\"service.saveAs()\">\n <ax-text>Save As...</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-file-pen\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-kbd look=\"blank\">\n <ax-kbd-item [keys]=\"shortcutKeys('ctrl+shift+s')\"></ax-kbd-item>\n </ax-kbd>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n </ng-container>\n }\n <ax-menu-item>\n <ax-text>Export</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-file-export\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-menu-item (onClick)=\"service.downloadJson()\">\n <ax-text>Download JSON</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-download\"></i>\n </ax-icon>\n </ax-prefix>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Import</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-file-import\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-menu-item (onClick)=\"service.importJSon()\">\n <ax-text>Import JSON</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-upload\"></i>\n </ax-icon>\n </ax-prefix>\n </ax-menu-item>\n @for (item of submenuFor('import'); track item.id) {\n <ax-menu-item (onClick)=\"runMenuEntry(item)\">\n @if (item.iconClass) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"item.iconClass\"></i>\n </ax-icon>\n </ax-prefix>\n }\n @if (item.resolvedLabel) {\n <ax-text>{{ item.resolvedLabel }}</ax-text>\n }\n </ax-menu-item>\n }\n </ax-menu-item>\n @for (item of submenuFor('file'); track item.id) {\n <ax-menu-item (onClick)=\"runMenuEntry(item)\">\n @if (item.iconClass) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"item.iconClass\"></i>\n </ax-icon>\n </ax-prefix>\n }\n @if (item.resolvedLabel) {\n <ax-text>{{ item.resolvedLabel }}</ax-text>\n }\n </ax-menu-item>\n }\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Edit</ax-text>\n <ax-menu-item [disabled]=\"!service.canUndo()\" (onClick)=\"service.undo()\">\n <ax-text>Undo</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-undo\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-kbd look=\"blank\">\n <ax-kbd-item [keys]=\"shortcutKeys('ctrl+z')\"></ax-kbd-item>\n </ax-kbd>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canRedo()\" (onClick)=\"service.redo()\">\n <ax-text>Redo</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-rotate-right\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-kbd look=\"blank\">\n <ax-kbd-item [keys]=\"shortcutKeys('ctrl+y')\"></ax-kbd-item>\n </ax-kbd>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n <ax-menu-item\n [disabled]=\"!service.canCutCopy()\"\n (onClick)=\"service.clone()\"\n >\n <ax-text>Clone</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-clone\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-kbd look=\"blank\">\n <ax-kbd-item [keys]=\"shortcutKeys('ctrl+d')\"></ax-kbd-item>\n </ax-kbd>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.cut()\">\n <ax-text>Cut</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-cut\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-kbd look=\"blank\">\n <ax-kbd-item [keys]=\"shortcutKeys('ctrl+x')\"></ax-kbd-item>\n </ax-kbd>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.copy()\">\n <ax-text>Copy</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-copy\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-kbd look=\"blank\">\n <ax-kbd-item [keys]=\"shortcutKeys('ctrl+c')\"></ax-kbd-item>\n </ax-kbd>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canPaste()\" (onClick)=\"service.paste()\">\n <ax-text>Paste</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-paste\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-kbd look=\"blank\">\n <ax-kbd-item [keys]=\"shortcutKeys('ctrl+v')\"></ax-kbd-item>\n </ax-kbd>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n <ax-menu-item\n [disabled]=\"!service.canDelete()\"\n (onClick)=\"service.removeWidget()\"\n >\n <ax-text>Delete</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-trash\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-kbd look=\"blank\">\n <ax-kbd-item [keys]=\"shortcutKeys('delete')\"></ax-kbd-item>\n </ax-kbd>\n </ax-suffix>\n </ax-menu-item>\n @for (item of submenuFor('edit'); track item.id) {\n <ax-menu-item (onClick)=\"runMenuEntry(item)\">\n @if (item.iconClass) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"item.iconClass\"></i>\n </ax-icon>\n </ax-prefix>\n }\n @if (item.resolvedLabel) {\n <ax-text>{{ item.resolvedLabel }}</ax-text>\n }\n </ax-menu-item>\n }\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Run</ax-text>\n <ax-menu-item (onClick)=\"service.openPreviewDialog()\">\n <ax-text>Preview</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-eye\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-kbd look=\"blank\">\n <ax-kbd-item [keys]=\"shortcutKeys('ctrl+r')\"></ax-kbd-item>\n </ax-kbd>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item (onClick)=\"service.openPreviewWindow()\">\n <ax-text>Preview in seperate window</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-window-restore\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-kbd look=\"blank\">\n <ax-kbd-item [keys]=\"shortcutKeys('ctrl+shift+r')\"></ax-kbd-item>\n </ax-kbd>\n </ax-suffix>\n </ax-menu-item>\n @for (item of submenuFor('run'); track item.id) {\n <ax-menu-item (onClick)=\"runMenuEntry(item)\">\n @if (item.iconClass) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"item.iconClass\"></i>\n </ax-icon>\n </ax-prefix>\n }\n @if (item.resolvedLabel) {\n <ax-text>{{ item.resolvedLabel }}</ax-text>\n }\n </ax-menu-item>\n }\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Help</ax-text>\n @for (item of submenuFor('help'); track item.id) {\n <ax-menu-item (onClick)=\"runMenuEntry(item)\">\n @if (item.iconClass) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"item.iconClass\"></i>\n </ax-icon>\n </ax-prefix>\n }\n @if (item.resolvedLabel) {\n <ax-text>{{ item.resolvedLabel }}</ax-text>\n }\n </ax-menu-item>\n }\n <ax-divider></ax-divider>\n <ax-menu-item>\n <ax-text>About</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-circle-info\"></i>\n </ax-icon>\n </ax-prefix>\n </ax-menu-item>\n </ax-menu-item>\n @for (item of rootMenuContributions(); track item.id) {\n <ax-menu-item (onClick)=\"runMenuEntry(item)\">\n @if (item.iconClass) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"item.iconClass\"></i>\n </ax-icon>\n </ax-prefix>\n }\n @if (item.resolvedLabel) {\n <ax-text>{{ item.resolvedLabel }}</ax-text>\n }\n </ax-menu-item>\n }\n</ax-menu>\n","import { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXMenuModule } from '@acorex/components/menu';\n\nimport { Component, model, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'axp-designer-view-sizes',\n imports: [AXButtonGroupModule, AXDecoratorModule, AXMenuModule],\n changeDetection: ChangeDetectionStrategy.Eager,\n template: `\n <ax-button-group [color]=\"'primary'\" [selection]=\"'multiple'\">\n <ax-button-group-item [selected]=\"size() == 'xl'\" [data]=\"'xl'\" (onClick)=\"size.set('xl')\">\n <ax-icon class=\"fa-light fa-desktop fa-fw\"></ax-icon>\n </ax-button-group-item>\n <ax-button-group-item [selected]=\"size() == 'lg'\" [data]=\"'lg'\" (onClick)=\"size.set('lg')\">\n <ax-icon class=\"fa-light fa-tablet fa-fw\"></ax-icon>\n </ax-button-group-item>\n <ax-button-group-item [selected]=\"size() == 'sm'\" [data]=\"'sm'\" (onClick)=\"size.set('sm')\">\n <ax-icon class=\"fa-light fa-mobile fa-fw\"></ax-icon>\n </ax-button-group-item>\n </ax-button-group>\n `,\n})\nexport class AXPDesignerViewSizeToolbarComponent {\n public size = model<string>('xl');\n}\n","//#region ----- Imports -----\n\nimport type { DestroyRef } from '@angular/core';\n\n//#endregion\n\n//#region ----- Hook keys -----\n\n/**\n * Distributed hooks for extending the layout designer footer without coupling the designer library to feature modules.\n *\n * - {@link AXPLayoutDesignerFooterHookKeys.end}: icon actions at the trailing end of the footer (after breadcrumbs).\n */\nexport const AXPLayoutDesignerFooterHookKeys = {\n end: 'layout-designer.footer.end',\n} as const;\n\n//#endregion\n\n//#region ----- Payload types -----\n\nexport interface AXPLayoutDesignerFooterAction {\n id: string;\n priority?: number;\n /** i18n key (resolved by the footer host when set). Used as the button title. */\n labelKey?: string;\n /** Plain label when no translation key is used. */\n label?: string;\n iconClass?: string;\n run: () => void | Promise<void>;\n}\n\nexport interface AXPLayoutDesignerFooterEndPayload {\n /** Current designer instance (typed as unknown to avoid circular imports in consumers). */\n designer: unknown;\n /** Designer host lifetime — extensions register page context against this owner. */\n owner?: DestroyRef;\n items: AXPLayoutDesignerFooterAction[];\n}\n\n//#endregion\n","//#region ----- Imports -----\nimport { AXPWidgetConfig, designerPreviewSizeToLayoutSize } from '@acorex-platform/framework-shared/widget-core';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXPHookService, AXPLogoComponent } from '@acorex-platform/framework-client/core';\nimport { AXPWidgetPropertyViewerComponent } from '@acorex-platform/framework-client/layout/components';\nimport {\n AXP_LAYOUT_PROFILE,\n AXP_LOCAL_DATA_SOURCE_STORE,\n AXPWidgetCoreModule,\n} from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, DestroyRef, effect, HostBinding, inject, input, signal, ViewChild, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { AXPDesignerBoardComponent } from './components/board/board.component';\nimport { AXPDesignerBreadcrumbsComponent } from './components/breadcrumbs/breadcrumbs.component';\nimport { AXPDesignerDataSourcesComponent } from './components/drawers/data-sources/data-sources.component';\nimport { AXPDesignerHistoryComponent } from './components/drawers/history/history.component';\nimport { AXPDesignerOutlineComponent } from './components/drawers/outline/outline.component';\nimport { AXPDesignerPagesComponent } from './components/drawers/pages/pages.component';\nimport { AXPDesignerHeaderMenuComponent } from './components/header-menu/header-menu.component';\nimport { AXPDesignerViewSizeToolbarComponent } from './components/size-mode/view-size-toolbar.component';\nimport { CommandManager } from './shared/command';\nimport { AXP_FORM_DESIGNER_SURFACE_PROFILE } from './shared/designer-surface-profile.defaults';\nimport type { AXPDesignerDrawerId, AXPDesignerSurfaceProfile } from './shared/designer-surface-profile.types';\nimport { designerSurfaceHasDrawer } from './shared/designer-surface-widget-filter.util';\nimport { AXPDesignerService } from './shared/designer.service';\nimport { AXPTemplateLoadingStrategy } from './shared/designer.types';\nimport {\n AXPLayoutDesignerFooterAction,\n AXPLayoutDesignerFooterEndPayload,\n AXPLayoutDesignerFooterHookKeys,\n} from './shared/layout-designer-footer.hooks';\n\n/** Footer action with a pre-resolved title for the icon button tooltip. */\ninterface AXPLayoutDesignerFooterActionResolved extends AXPLayoutDesignerFooterAction {\n resolvedLabel?: string;\n}\n//#endregion\n\n@Component({\n selector: 'axp-layout-designer',\n templateUrl: './designer.component.html',\n styleUrl: './designer.component.css',\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n AXPWidgetCoreModule,\n AXPDesignerBoardComponent,\n AXPWidgetPropertyViewerComponent,\n AXPDesignerBreadcrumbsComponent,\n AXPDesignerOutlineComponent,\n AXPDesignerHeaderMenuComponent,\n AXPDesignerHistoryComponent,\n AXPDesignerDataSourcesComponent,\n AXPDesignerPagesComponent,\n AXPDesignerViewSizeToolbarComponent,\n AXTabsModule,\n AXButtonModule,\n AXDrawerModule,\n AXDecoratorModule,\n AXMenuModule,\n AXButtonGroupModule,\n AXDropdownModule,\n AXDropdownButtonModule,\n AXTranslationModule,\n AXPLogoComponent,\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n providers: [\n AXPDesignerService,\n CommandManager,\n {\n provide: AXP_LOCAL_DATA_SOURCE_STORE,\n useFactory: (svc: AXPDesignerService) => svc.toLocalDataSourceStore(),\n deps: [AXPDesignerService],\n },\n {\n provide: AXP_LAYOUT_PROFILE,\n useFactory: () => {\n const service = inject(AXPDesignerService);\n return computed(() => ({\n size: designerPreviewSizeToLayoutSize(service.size()),\n medium: 'screen' as const,\n }));\n },\n },\n ]\n})\nexport class AXPLayoutDesignerComponent {\n //#region ----- Services & Dependencies -----\n protected service = inject(AXPDesignerService);\n private readonly hooks = inject(AXPHookService);\n private readonly translationService = inject(AXTranslationService);\n private readonly destroyRef = inject(DestroyRef);\n //#endregion\n\n //#region ----- State Signals -----\n protected readonly footerEndActions = signal<AXPLayoutDesignerFooterActionResolved[]>([]);\n //#endregion\n\n //#region ----- Inputs -----\n id = input<string | null>();\n strategy = input<string | null>();\n /** Host surface policy. Form Builder may omit this; the form profile is the default. */\n profile = input<AXPDesignerSurfaceProfile>(AXP_FORM_DESIGNER_SURFACE_PROFILE);\n //#endregion\n\n @ViewChild(AXPWidgetPropertyViewerComponent, { static: true })\n private propertyViewer: AXPWidgetPropertyViewerComponent;\n\n //#region ----- Computed Properties -----\n protected readonly layoutProfileContext = computed(() => ({\n size: designerPreviewSizeToLayoutSize(this.service.size()),\n medium: 'screen' as const,\n }));\n\n protected nodeConfig = computed<AXPWidgetConfig | null>(() =>\n this.service.selectedNode() ? (get(this.service.selectedNode(), '__meta__.config') as any as AXPWidgetConfig) : null\n );\n\n protected hasPagesDrawer = computed(() => this.hasDrawer('pages'));\n protected hasDataSourcesDrawer = computed(() => this.hasDrawer('dataSources'));\n protected hasOutlineDrawer = computed(() => this.hasDrawer('outline'));\n protected hasHistoryDrawer = computed(() => this.hasDrawer('history'));\n protected hasPaletteDrawer = computed(() => this.hasDrawer('palette'));\n //#endregion\n\n //#region ----- Lifecycle -----\n constructor() {\n this.service.onUpdate.subscribe((e) => {\n this.propertyViewer.update(e.values);\n });\n effect(() => {\n this.service.surfaceProfile.set(this.profile());\n });\n }\n\n ngOnInit() {\n if (this.id()) {\n this.service.loadById(this.id()!, { strategy: (this.strategy() ?? AXPTemplateLoadingStrategy.Connector) as AXPTemplateLoadingStrategy });\n }\n void this.loadFooterEndActions();\n }\n //#endregion\n\n @HostBinding('style.direction')\n protected readonly designerDirection = 'ltr';\n\n //#region ----- Chrome -----\n protected hasDrawer(drawer: AXPDesignerDrawerId): boolean {\n return designerSurfaceHasDrawer(this.profile(), drawer);\n }\n\n protected runFooterEndAction(entry: AXPLayoutDesignerFooterAction): void {\n void Promise.resolve(entry.run());\n }\n //#endregion\n\n //#region ----- Footer hooks -----\n private async loadFooterEndActions(): Promise<void> {\n const payload = await this.hooks.runAsync<AXPLayoutDesignerFooterEndPayload>(\n AXPLayoutDesignerFooterHookKeys.end,\n { designer: this.service, owner: this.destroyRef, items: [] },\n );\n payload.items.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n this.footerEndActions.set(\n await Promise.all(\n payload.items.map(async (item) => ({\n ...item,\n resolvedLabel: item.labelKey\n ? await this.translationService.translateAsync(item.labelKey)\n : item.label,\n })),\n ),\n );\n }\n //#endregion\n}\n","<ax-drawer-container class=\"h-full w-full flex relative overflow-hidden\">\n <ax-content class=\"contents\">\n <!-- Toolbar Side -->\n <div\n class=\"ax-dark min-w-10 lightest-surface border-e ax-sm flex flex-col items-center\"\n >\n <div class=\"min-w-10 h-10 flex items-center justify-center border-b\">\n <axp-logo logoKey=\"platform\" appearance=\"onDark\" format=\"icon\" [size]=\"24\"></axp-logo>\n </div>\n <div class=\"py-1\"></div>\n <div class=\"flex flex-col gap-2\">\n <!-- ----- Palette opens the widget picker when the surface has no dedicated drawer ----- -->\n @if (hasPaletteDrawer()) {\n <ax-button\n look=\"blank\"\n (onClick)=\"service.showPicker()\"\n [title]=\"('@layout-designer:components.palette.title' | translate | async) ?? ''\"\n >\n <ax-icon class=\"fa-solid fa-puzzle text-sm\"> </ax-icon>\n </ax-button>\n }\n <!-- ----- Pages drawer toggle ----- -->\n @if (hasPagesDrawer()) {\n <ax-button\n look=\"blank\"\n (onClick)=\"pages.toggle()\"\n [title]=\"('@layout-designer:components.pages.title' | translate | async) ?? ''\"\n >\n <ax-icon class=\"fa-solid fa-page text-sm\"> </ax-icon>\n </ax-button>\n }\n <!-- ----- Data sources drawer toggle ----- -->\n @if (hasDataSourcesDrawer()) {\n <ax-button\n look=\"blank\"\n (onClick)=\"datasources.toggle()\"\n [title]=\"('@layout-designer:components.data-sources.title' | translate | async) ?? ''\"\n >\n <ax-icon class=\"fa-solid fa-database text-sm\"> </ax-icon>\n </ax-button>\n }\n <!-- ----- Outline drawer toggle ----- -->\n @if (hasOutlineDrawer()) {\n <ax-button\n look=\"blank\"\n (onClick)=\"outline.toggle()\"\n [title]=\"('@layout-designer:components.outline.title' | translate | async) ?? ''\"\n >\n <ax-icon class=\"fa-solid fa-list-tree text-sm\"> </ax-icon>\n </ax-button>\n }\n <!-- ----- History drawer toggle ----- -->\n @if (hasHistoryDrawer()) {\n <ax-button\n look=\"blank\"\n (onClick)=\"history.toggle()\"\n [title]=\"('@layout-designer:components.history.title' | translate | async) ?? ''\"\n >\n <ax-icon class=\"fa-solid fa-clock-rotate-left text-sm\"> </ax-icon>\n </ax-button>\n }\n </div>\n </div>\n <!-- Main Side -->\n <div class=\"col-span-10 flex flex-col flex-1\">\n <!-- Header Toolbar -->\n <div class=\"ax-dark h-10 lightest-surface border-b flex justify-between px-2\">\n <div class=\"flex flex-1 items-center justify-start text-on-lightest\">\n <axp-designer-header-menu></axp-designer-header-menu>\n </div>\n <div\n class=\"flex flex-1 flex-row gap-2 ax-sm items-center justify-center\"\n >\n <axp-designer-view-sizes\n [(size)]=\"service.size\"\n ></axp-designer-view-sizes>\n </div>\n <div class=\"flex flex-1 flex-row gap-2 ax-sm items-center justify-end\">\n <ax-dropdown-button\n mode=\"split\"\n look=\"solid\"\n [text]=\"('@layout-designer:keyboard-shortcuts.preview' | translate | async) ?? ''\"\n class=\"ax-sm\"\n (onClick)=\"service.openPreviewDialog()\"\n >\n <ax-button-item-list>\n <ax-button-item\n [text]=\"('@layout-designer:keyboard-shortcuts.preview-window' | translate | async) ?? ''\"\n (onClick)=\"service.openPreviewWindow()\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-regular fa-window-restore\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-button>\n </div>\n </div>\n <!-- Board -->\n <ax-drawer-container class=\"w-full flex-1\">\n <!-- ----- Pages drawer (rail button is profile-gated; panel stays mounted for #pages) ----- -->\n <ax-drawer\n #pages\n location=\"start\"\n mode=\"push\"\n class=\"ax-dark lightest-surface\"\n >\n <ax-content>\n <axp-designer-pages></axp-designer-pages>\n </ax-content>\n </ax-drawer>\n <!-- ----- Data sources drawer ----- -->\n <ax-drawer\n #datasources\n location=\"start\"\n mode=\"push\"\n class=\"ax-dark lightest-surface\"\n >\n <ax-content>\n <axp-designer-data-sources></axp-designer-data-sources>\n </ax-content>\n </ax-drawer>\n <!-- ----- Outline drawer ----- -->\n <ax-drawer\n #outline\n location=\"start\"\n mode=\"push\"\n class=\"ax-dark lightest-surface\"\n >\n <ax-content>\n <axp-designer-outline></axp-designer-outline>\n </ax-content>\n </ax-drawer>\n <!-- ----- History drawer ----- -->\n <ax-drawer\n #history\n location=\"start\"\n mode=\"push\"\n class=\"ax-dark lightest-surface\"\n >\n <ax-content>\n <axp-designer-history></axp-designer-history>\n </ax-content>\n </ax-drawer>\n <!-- Content of board -->\n <ax-content class=\"ax-light lighter-surface axp-designer-canvas flex h-full min-h-0 items-start justify-center overflow-auto p-10\">\n <axp-designer-board class=\"rounded-lg lightest-surface shadow-md\">\n </axp-designer-board>\n </ax-content>\n </ax-drawer-container>\n <!-- Footer -->\n <div class=\"ax-dark h-10 lightest-surface border-t flex items-center text-on-lightest\">\n <axp-designer-breadcrumbs class=\"border-default p-2 font-normal min-w-0 flex-1\">\n </axp-designer-breadcrumbs>\n <!-- ----- Hook-contributed actions at the footer end ----- -->\n @if (footerEndActions().length) {\n <div class=\"ms-auto flex items-center gap-1 pe-2\">\n @for (item of footerEndActions(); track item.id) {\n <ax-button\n class=\"ax-sm\"\n look=\"blank\"\n [iconOnly]=\"true\"\n [title]=\"item.resolvedLabel ?? ''\"\n (onClick)=\"runFooterEndAction(item)\"\n >\n @if (item.iconClass) {\n <ax-icon>\n <i [class]=\"item.iconClass\"></i>\n </ax-icon>\n }\n </ax-button>\n }\n </div>\n }\n </div>\n </div>\n </ax-content>\n <!-- Property Side -->\n <ax-drawer\n class=\"ax-dark axp-designer-prop-side lightest-surface\"\n location=\"end\"\n mode=\"push\"\n [collapsed]=\"false\"\n #pd\n >\n <ax-content class=\"flex flex-col h-full overflow-hidden\">\n <div\n class=\"flex flex-row w-full justify-between px-4 border-b h-10 text-on-lightest\"\n >\n <div class=\"flex flex-row gap-2 items-center\">\n <i [ngClass]=\"$safeNavigationMigration(nodeConfig()?.icon)\"></i>\n <span class=\"font-semibold\">{{\n $safeNavigationMigration(nodeConfig()?.title) | translate | async\n }}</span>\n </div>\n </div>\n <axp-widget-property-viewer\n [mode]=\"'advanced'\"\n [bindingExpressionEditorMode]=\"'popup'\"\n [widget]=\"service.selectedNode()!\"\n [layoutProfile]=\"layoutProfileContext()\"\n (onChanged)=\"service.applyPropertyPanelChange($event)\"\n (pointerdown)=\"service.armPropertyPanelHistory()\"\n (focusin)=\"service.armPropertyPanelHistory()\"\n class=\"flex-1 overflow-auto\"\n >\n </axp-widget-property-viewer>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>\n","//#region ----- Imports -----\nimport type { AXPWidgetGroup, AXPWidgetViewType } from '@acorex-platform/framework-shared/widget-core';\n//#endregion\n\n//#region ----- Types -----\n\nexport type AXPDesignerSurfaceId = 'form' | 'widget' | 'page' | 'email';\n\nexport type AXPDesignerDocumentKind = 'widget-tree' | 'text-template-blocks';\n\nexport type AXPDesignerDrawerId = 'pages' | 'dataSources' | 'outline' | 'history' | 'palette';\n\nexport type AXPDesignerPreviewPlayer = 'angular' | 'html-walker';\n\nexport type AXPDesignerWalkerChannel = 'html' | 'email' | 'print';\n\n/**\n * Host policy for which registered widgets appear in Add Widget / palette.\n * Widget configs stay taxonomy (`type`, `groups`, `categories`); the profile selects.\n */\nexport interface AXPDesignerSurfaceWidgetFilter {\n includeGroups?: AXPWidgetGroup[];\n includeTypes?: AXPWidgetViewType[];\n includeNames?: string[];\n excludeNames?: string[];\n}\n\nexport interface AXPDesignerSurfacePreview {\n player: AXPDesignerPreviewPlayer;\n path?: string;\n viewerPath?: string;\n walkerChannel?: AXPDesignerWalkerChannel;\n}\n\nexport interface AXPDesignerSurfaceChrome {\n drawers?: AXPDesignerDrawerId[];\n}\n\n/**\n * Host-provided designer surface. The shell, undo, board, and property panel stay shared.\n */\nexport interface AXPDesignerSurfaceProfile {\n id: AXPDesignerSurfaceId;\n documentKind: AXPDesignerDocumentKind;\n widgets?: AXPDesignerSurfaceWidgetFilter;\n chrome?: AXPDesignerSurfaceChrome;\n preview?: AXPDesignerSurfacePreview;\n rootWidget?: string;\n pickerTabContext?: string;\n}\n\n//#endregion\n","import { AXPContextChangeEvent, type AXPWidgetNode, AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\nimport {\n AXP_LOCAL_DATA_SOURCE_STORE,\n AXPWidgetCoreModule,\n readLocalDataSourcesFromNode,\n type AXPLocalDataSource,\n type AXPLocalDataSourceStore,\n} from '@acorex-platform/framework-client/layout/widget-core';\n\nimport {\n Component,\n computed,\n HostBinding,\n inject,\n input,\n signal,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { AXPDesignerConnector, AXPDesignerMessageKeys, AXPDesignerPreviewMessage } from '../designer';\n\nimport { AXPBroadcastEventService } from '@acorex-platform/framework-client/core';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport { isEqual } from 'lodash-es';\nimport { readDesignerPreviewDocument } from './preview-session.util';\n\n@Component({\n selector: 'axp-layout-builder-viewer',\n template: `\n <axp-widgets-container [context]=\"context\" (onContextChanged)=\"handleContextChanged($event)\">\n <ng-container axp-widget-renderer [node]=\"currentPage()\" [mode]=\"'edit'\"></ng-container>\n </axp-widgets-container>\n `,\n encapsulation: ViewEncapsulation.None,\n imports: [AXPWidgetCoreModule],\n changeDetection: ChangeDetectionStrategy.Eager,\n providers: [\n AXUnsubscriber,\n { provide: AXP_LOCAL_DATA_SOURCE_STORE, useExisting: AXPLayoutDesignerPreviewViewerComponent },\n ],\n})\nexport class AXPLayoutDesignerPreviewViewerComponent implements AXPLocalDataSourceStore {\n protected context: any = {};\n\n public readonly initialDocument = input<AXPWidgetNode | null>(null);\n\n protected readonly document = signal({ type: AXPWidgetsCatalog.document } as AXPWidgetNode);\n protected readonly currentPageIndex = signal(0);\n protected connector = inject(AXPDesignerConnector);\n protected eventService = inject(AXPBroadcastEventService);\n protected unsubscriber = inject(AXUnsubscriber);\n\n public readonly sources = computed(() => readLocalDataSourcesFromNode(this.document()));\n\n public get(id: string): AXPLocalDataSource | undefined {\n return this.sources().find((row) => row.id === id);\n }\n\n public create(name: string): AXPLocalDataSource {\n return { id: '', name, items: [] };\n }\n\n public update(): void {\n return;\n }\n\n public remove(): void {\n return;\n }\n\n protected readonly currentPage = computed(() => {\n return (\n this.document().children?.[this.currentPageIndex()] ?? ({ type: AXPWidgetsCatalog.pageLayout } as AXPWidgetNode)\n );\n });\n\n @HostBinding('class')\n private get __class(): string {\n return 'block w-full min-h-full';\n }\n\n constructor() {\n const seeded = readDesignerPreviewDocument();\n if (seeded) {\n this.document.set(seeded);\n }\n\n this.eventService\n .listen<AXPDesignerPreviewMessage>(AXPDesignerMessageKeys.Preview)\n .pipe(this.unsubscriber.takeUntilDestroy)\n .subscribe((event) => {\n if (event.data?.document && !isEqual(this.document(), event.data.document)) {\n this.document.set(event.data.document);\n }\n });\n }\n\n ngAfterViewInit() {\n this.eventService.publish(AXPDesignerMessageKeys.Loaded);\n }\n\n protected handleContextChanged(e: AXPContextChangeEvent) {\n this.context = e.data;\n this.eventService.publish(AXPDesignerMessageKeys.ContextChanged, this.context);\n }\n\n ngOnDestroy(): void {\n this.eventService.unsubscribe(AXPDesignerMessageKeys.Preview);\n }\n}\n","import { designerPreviewSizeToLayoutSize } from '@acorex-platform/framework-shared/widget-core';\nimport { AXP_LAYOUT_PROFILE } from '@acorex-platform/framework-client/layout/widget-core';\nimport { Component, computed, HostBinding, inject, input, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\nimport { AXPLayoutDesignerPreviewViewerComponent } from './preview-viewer.component';\n\n@Component({\n selector: 'axp-layout-preview-frame',\n template: `\n <div\n class=\"lightest-surface min-h-full w-full shrink-0 rounded-lg shadow-md p-4\"\n [style.max-width]=\"width()\"\n >\n <axp-layout-builder-viewer></axp-layout-builder-viewer>\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [AXPLayoutDesignerPreviewViewerComponent],\n providers: [\n {\n provide: AXP_LAYOUT_PROFILE,\n useFactory: () => {\n const frame = inject(AXPLayoutDesignerPreviewFrameComponent);\n return computed(() => ({\n size: designerPreviewSizeToLayoutSize(frame.size()),\n medium: 'screen' as const,\n }));\n },\n },\n ],\n})\nexport class AXPLayoutDesignerPreviewFrameComponent {\n public size = input<string>('xl');\n\n protected width = computed(() => {\n switch (this.size()) {\n case 'sm':\n return '340px';\n case 'md':\n case 'lg':\n return '768px';\n default:\n return '1280px';\n }\n });\n\n @HostBinding('class')\n private get __class(): string {\n return 'lighter-surface flex flex-col h-full w-full items-center overflow-auto p-6';\n }\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXJsonViewerModule } from '@acorex/components/json-viewer';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXPClipBoardService, AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { AXTranslationModule } from '@acorex/core/translation';\n\nimport { CommonModule } from '@angular/common';\nimport { Component, inject, signal, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\nimport { AXPDesignerViewSizeToolbarComponent } from '../designer/components/size-mode/view-size-toolbar.component';\nimport { AXPLayoutDesignerPreviewFrameComponent } from './preview-frame.component';\nimport { AXPBroadcastEventService } from '@acorex-platform/framework-client/core';\nimport { AXPDesignerMessageKeys } from '../designer';\n\n@Component({\n selector: 'axp-layout-preview',\n templateUrl: './preview.component.html',\n styleUrls: ['./preview.component.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [\n AXButtonModule,\n AXButtonGroupModule,\n AXDrawerModule,\n AXDecoratorModule,\n AXJsonViewerModule,\n CommonModule,\n AXPLayoutDesignerPreviewFrameComponent,\n AXPDesignerViewSizeToolbarComponent,\n AXTranslationModule,\n ]\n})\nexport class AXPLayoutDesignerPreviewComponent extends AXBasePageComponent {\n protected clipboard = inject(AXPClipBoardService);\n protected settings = inject(AXPSettingsService);\n protected eventService = inject(AXPBroadcastEventService);\n\n protected initialSize: string = 'xl';\n protected isDialogWindow: boolean = false;\n\n private jsonSettingsKey = 'forms:preview:json';\n protected jsonViewCollapsed = signal(true);\n\n protected size = signal<string>(this.initialSize);\n\n protected context = signal<any>({});\n\n constructor() {\n super();\n //\n this.eventService.listen(AXPDesignerMessageKeys.ContextChanged).subscribe((event) => {\n this.context.set(event.data);\n });\n }\n\n protected override async ngOnInit() {\n this.size.set(this.initialSize);\n const settingValue = await this.settings.get<boolean>(this.jsonSettingsKey);\n this.jsonViewCollapsed.set(!settingValue);\n }\n\n protected handleCloseButton() {\n if (this.isDialogWindow) {\n this.close();\n } else {\n window.opener.focus();\n window.close();\n }\n }\n\n protected handlePreviewWindow() {\n this.eventService.publish(AXPDesignerMessageKeys.PreviewWindow)\n this.close();\n }\n\n protected handleCopyJson() {\n this.clipboard.copy('Json Data', JSON.stringify(this.context()));\n }\n\n protected async handleCollapsedChange(value: boolean) {\n await this.settings.scope(AXPPlatformScope.User).set<boolean>(this.jsonSettingsKey, !value);\n }\n}\n","<ax-drawer-container class=\"ax-dark h-full w-full flex relative overflow-hidden\">\n <ax-content>\n <div class=\"ax-dark flex flex-col h-full relative\">\n <div class=\"flex items-center justify-between h-12 lightest-surface shadow ax-sm px-2\">\n <div class=\"flex flex-1 w-16 justify-start\">\n <ax-button look=\"blank\" [text]=\"'@layout-designer:preview.back' | translate | async\" (onClick)=\"handleCloseButton()\">\n <ax-prefix>\n <ax-icon class=\"fa-regular fa-chevron-left\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n <div class=\"flex flex-1 flex-row gap-2 ax-sm items-center justify-center\">\n <axp-designer-view-sizes [(size)]=\"size\"></axp-designer-view-sizes>\n </div>\n <div class=\"flex flex-1 w-16 justify-end\">\n @if (isDialogWindow) {\n <ax-button look=\"blank\" [title]=\"'@layout-designer:keyboard-shortcuts.preview-window' | translate | async\" (onClick)=\"handlePreviewWindow()\">\n <ax-prefix>\n <ax-icon class=\"fa-regular fa-window-restore\"></ax-icon>\n </ax-prefix>\n </ax-button>\n }\n <ax-button look=\"blank\" (onClick)=\"jsonView.toggle()\">\n <ax-prefix>\n <ax-icon class=\"fa-regular fa-list-tree\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </div>\n\n <div class=\"ax-light lighter-surface flex flex-1 justify-center overflow-auto min-h-0\">\n <axp-layout-preview-frame [size]=\"size()\"></axp-layout-preview-frame>\n </div>\n </div>\n </ax-content>\n <ax-drawer class=\"ax-dark w-1/3 border-s\" location=\"end\" mode=\"push\" #jsonView>\n <ax-content>\n <div class=\"ax-dark flex flex-col h-full relative\">\n <div class=\"flex items-center justify-between h-12 lightest-surface border-b shadow ax-sm px-2\">\n <div class=\"flex flex-1 w-16 justify-start\">\n <span class=\"font-semibold text-on-lightest\">{{ '@layout-designer:preview.form-data' | translate | async }}</span>\n </div>\n <div class=\"flex flex-1 flex-row gap-2 ax-sm items-center justify-center\"></div>\n <div class=\"flex flex-1 w-16 justify-end\">\n <ax-button look=\"blank\" (onClick)=\"handleCopyJson()\">\n <ax-prefix>\n <ax-icon class=\"fa-regular fa-copy\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </div>\n <div class=\"px-6\">\n <ax-json-viewer [json]=\"context()\"></ax-json-viewer>\n </div>\n </div>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i4","i7","i8","i3","merge","i5","i6"],"mappings":"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"}