@acorex-platform/framework-client 0.0.57 → 0.0.58
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/acorex-platform-framework-client-common.mjs +31 -33
- package/fesm2022/acorex-platform-framework-client-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-core.mjs +157 -2
- package/fesm2022/acorex-platform-framework-client-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-builder.mjs +55 -19
- package/fesm2022/acorex-platform-framework-client-layout-builder.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-BqPaHKPM.mjs → acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CyZpdazq.mjs} +6 -6
- package/fesm2022/{acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-BqPaHKPM.mjs.map → acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CyZpdazq.mjs.map} +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-components.mjs +639 -212
- package/fesm2022/acorex-platform-framework-client-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-designer.mjs +32 -16
- package/fesm2022/acorex-platform-framework-client-layout-designer.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-Cmzwhmjw.mjs → acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-jeOx-Rb8.mjs} +207 -143
- package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-jeOx-Rb8.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-K9HAtqL6.mjs → acorex-platform-framework-client-layout-entity-attachments-page.component-B93uWhea.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-K9HAtqL6.mjs.map → acorex-platform-framework-client-layout-entity-attachments-page.component-B93uWhea.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-BZECKfez.mjs → acorex-platform-framework-client-layout-entity-bulk-entity.command-DITHE0f6.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-BZECKfez.mjs.map → acorex-platform-framework-client-layout-entity-bulk-entity.command-DITHE0f6.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-BuDpC58x.mjs → acorex-platform-framework-client-layout-entity-gallery-page.component-f5rLdctT.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-BuDpC58x.mjs.map → acorex-platform-framework-client-layout-entity-gallery-page.component-f5rLdctT.mjs.map} +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs +59 -3
- package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-D5pndfBW.mjs → acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-D9WiRo-_.mjs} +225 -136
- package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-D9WiRo-_.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-BL621E1r.mjs → acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-DqJIiEyu.mjs} +9 -3
- package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-DqJIiEyu.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-BFgrSnfT.mjs → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-kwbJdTwe.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-BFgrSnfT.mjs.map → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-kwbJdTwe.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-Ctjz1PjP.mjs → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-Bke-Wy-4.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-Ctjz1PjP.mjs.map → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-Bke-Wy-4.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-B_OM0T7i.mjs → acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-C-r7txgg.mjs} +21 -17
- package/fesm2022/acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-C-r7txgg.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs +1 -1
- package/fesm2022/acorex-platform-framework-client-themes-shared.mjs +48 -9
- package/fesm2022/acorex-platform-framework-client-themes-shared.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-workflow.mjs +47 -1
- package/fesm2022/acorex-platform-framework-client-workflow.mjs.map +1 -1
- package/package.json +2 -2
- package/types/acorex-platform-framework-client-common.d.ts +2 -3
- package/types/acorex-platform-framework-client-core.d.ts +67 -2
- package/types/acorex-platform-framework-client-layout-builder.d.ts +4 -3
- package/types/acorex-platform-framework-client-layout-components.d.ts +119 -7
- package/types/acorex-platform-framework-client-layout-designer.d.ts +2 -0
- package/types/acorex-platform-framework-client-layout-entity.d.ts +16 -9
- package/types/acorex-platform-framework-client-layout-widget-core.d.ts +14 -1
- package/types/acorex-platform-framework-client-layout-widgets.d.ts +6 -0
- package/types/acorex-platform-framework-client-workflow.d.ts +29 -2
- package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-Cmzwhmjw.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-D5pndfBW.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-BL621E1r.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-B_OM0T7i.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/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 { AXTranslationService } from '@acorex/core/translation';\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 translationService = inject(AXTranslationService);\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 [cancelLabel, dialogTitle, processingText, loadedText, okLabel, closeLabel, cannotLoadText] =\n await Promise.all([\n this.translationService.translateAsync('@general:actions.cancel.title'),\n this.translationService.translateAsync('@layout-designer:import-dialog.title'),\n this.translationService.translateAsync('@layout-designer:import-dialog.processing'),\n this.translationService.translateAsync('@layout-designer:import-dialog.content-loaded'),\n this.translationService.translateAsync('@general:actions.ok.title'),\n this.translationService.translateAsync('@general:actions.close.title'),\n this.translationService.translateAsync('@layout-designer:import-dialog.cannot-load'),\n ]);\n\n const progressStatus = async (count: number) =>\n this.translationService.translateAsync('@layout-designer:import-dialog.progress', {\n params: { count, total: totalNode },\n });\n\n const button: AXLoadingDialogButtonItem = {\n text: cancelLabel,\n autofocus: true,\n color: 'primary',\n onClick: () => {\n dialog.close();\n },\n };\n\n const dialog = this.loadingService.show({\n mode: 'determinate',\n title: dialogTitle,\n progressColor: 'primary',\n text: processingText,\n status: await progressStatus(0),\n buttons: [button],\n });\n\n try {\n const reservedNames = new Set<string>();\n const root = await this.addMetaToNodes(rootNode, processedNodes, async (count) => {\n dialog.setProgressValue(Math.ceil((count / totalNode) * 100));\n dialog.setProgressStatus(await progressStatus(count));\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(loadedText);\n button.text = okLabel;\n button.color = 'success';\n dialog.setProgressValue(100);\n\n setTimeout(() => {\n this.reRenderPage();\n dialog.close();\n }, 250);\n } catch (error: unknown) {\n dialog.setProgressColor('danger');\n dialog.setProgressText(error instanceof Error ? error.message : cannotLoadText);\n button.text = closeLabel;\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 { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\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]=\"('@layout-designer:components.add-widget.add-new-element' | translate | async) ?? ''\" (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, AXTranslationModule, AsyncPipe],\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 { AXTranslationModule } from '@acorex/core/translation';\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 AXTranslationModule,\n ]\n})\n\nexport class AXPDesignerHistoryComponent {\n protected service = inject(AXPDesignerService);\n}","<axp-designer-drawer-content>\n <ax-title>{{ '@layout-designer:components.history.title' | translate | async }}</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]=\"('@layout-designer:components.history.clear' | translate | async) ?? ''\" 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(/ /gi, ' ')\n .replace(/&/gi, '&')\n .replace(/</gi, '<')\n .replace(/>/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 { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, inject, OnInit, signal } from '@angular/core';\nimport { AXTranslationModule, 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, AXTranslationModule, AsyncPipe],\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>{{ '@layout-designer:keyboard-shortcuts.groups.file' | translate | async }}</ax-text>\n <ax-menu-item (onClick)=\"service.new()\">\n <ax-text>{{ '@layout-designer:menus.new' | translate | async }}</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>{{ '@layout-designer:keyboard-shortcuts.save' | translate | async }}</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>{{ '@layout-designer:menus.save-as-ellipsis' | translate | async }}</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>{{ '@layout-designer:menus.export' | translate | async }}</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>{{ '@layout-designer:menus.download-json' | translate | async }}</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>{{ '@layout-designer:menus.import' | translate | async }}</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>{{ '@layout-designer:menus.import-json' | translate | async }}</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>{{ '@layout-designer:keyboard-shortcuts.groups.edit' | translate | async }}</ax-text>\n <ax-menu-item [disabled]=\"!service.canUndo()\" (onClick)=\"service.undo()\">\n <ax-text>{{ '@layout-designer:keyboard-shortcuts.undo' | translate | async }}</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>{{ '@layout-designer:keyboard-shortcuts.redo' | translate | async }}</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>{{ '@layout-designer:keyboard-shortcuts.clone' | translate | async }}</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>{{ '@layout-designer:keyboard-shortcuts.cut' | translate | async }}</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>{{ '@layout-designer:keyboard-shortcuts.copy' | translate | async }}</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>{{ '@layout-designer:keyboard-shortcuts.paste' | translate | async }}</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>{{ '@general:actions.delete.title' | translate | async }}</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>{{ '@layout-designer:keyboard-shortcuts.groups.run' | translate | async }}</ax-text>\n <ax-menu-item (onClick)=\"service.openPreviewDialog()\">\n <ax-text>{{ '@layout-designer:keyboard-shortcuts.preview' | translate | async }}</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>{{ '@layout-designer:keyboard-shortcuts.preview-window' | translate | async }}</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>{{ '@layout-designer:menus.help' | translate | async }}</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>{{ '@layout-designer:menus.about' | translate | async }}</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":["i1","i2","i4","i7","i8","i3","i5","merge","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 { AXPDialogOpener } from '@acorex-platform/framework-client/layout/builder';\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 dialogOpener = inject(AXPDialogOpener);\n private widgetRegistryService = inject(AXPWidgetRegistryService);\n private translationService = inject(AXTranslationService);\n\n async showPicker(options: AXPWidgetPickerShowOptions): Promise<AXPWidgetNode[]> {\n const widgets = this.widgetRegistryService.all();\n const filteredWidgets = widgets.filter((widget) => this.matchesPickerOptions(widget, options));\n let title = '';\n const result = await this.dialogOpener.openPopup({\n load: () => import('./widget-picker.component').then((c) => c.AXPDesignerWidgetPickerComponent),\n data: {\n tabPersistenceContext: options.tabPersistenceContext,\n groups: options.groups ?? null,\n profileId: options.profile?.id ?? null,\n },\n prepare: async () => {\n title = await this.translationService.translateAsync(\n '@form-template-management:designer.components.widget-picker.title',\n );\n },\n show: (component) =>\n this.popupService.open(component, {\n title,\n size: 'md',\n closeButton: true,\n data: {\n widgets: sortBy(filteredWidgets, (c) => c.title),\n tabPersistenceContext: options.tabPersistenceContext,\n },\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 { AXTranslationService } from '@acorex/core/translation';\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 { AXPDialogOpener } from '@acorex-platform/framework-client/layout/builder';\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 dialogOpener = inject(AXPDialogOpener);\n private toastService = inject(AXToastService);\n private fileService = inject(AXFileService);\n private loadingService = inject(AXLoadingDialogService);\n private translationService = inject(AXTranslationService);\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 [cancelLabel, dialogTitle, processingText, loadedText, okLabel, closeLabel, cannotLoadText] =\n await Promise.all([\n this.translationService.translateAsync('@general:actions.cancel.title'),\n this.translationService.translateAsync('@layout-designer:import-dialog.title'),\n this.translationService.translateAsync('@layout-designer:import-dialog.processing'),\n this.translationService.translateAsync('@layout-designer:import-dialog.content-loaded'),\n this.translationService.translateAsync('@general:actions.ok.title'),\n this.translationService.translateAsync('@general:actions.close.title'),\n this.translationService.translateAsync('@layout-designer:import-dialog.cannot-load'),\n ]);\n\n const progressStatus = async (count: number) =>\n this.translationService.translateAsync('@layout-designer:import-dialog.progress', {\n params: { count, total: totalNode },\n });\n\n const button: AXLoadingDialogButtonItem = {\n text: cancelLabel,\n autofocus: true,\n color: 'primary',\n onClick: () => {\n dialog.close();\n },\n };\n\n const dialog = this.loadingService.show({\n mode: 'determinate',\n title: dialogTitle,\n progressColor: 'primary',\n text: processingText,\n status: await progressStatus(0),\n buttons: [button],\n });\n\n try {\n const reservedNames = new Set<string>();\n const root = await this.addMetaToNodes(rootNode, processedNodes, async (count) => {\n dialog.setProgressValue(Math.ceil((count / totalNode) * 100));\n dialog.setProgressStatus(await progressStatus(count));\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(loadedText);\n button.text = okLabel;\n button.color = 'success';\n dialog.setProgressValue(100);\n\n setTimeout(() => {\n this.reRenderPage();\n dialog.close();\n }, 250);\n } catch (error: unknown) {\n dialog.setProgressColor('danger');\n dialog.setProgressText(error instanceof Error ? error.message : cannotLoadText);\n button.text = closeLabel;\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 await this.dialogOpener.openPopup({\n load: () => import('../../preview/preview.component').then((c) => c.AXPLayoutDesignerPreviewComponent),\n data: { templateId: this.templateId() ?? null },\n show: (component) =>\n this.popupService.open(component, {\n header: false,\n size: 'full',\n data: {\n initialSize: this.size(),\n isDialogWindow: true,\n },\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 { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\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]=\"('@layout-designer:components.add-widget.add-new-element' | translate | async) ?? ''\" (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, AXTranslationModule, AsyncPipe],\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 { AXTranslationModule } from '@acorex/core/translation';\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 AXTranslationModule,\n ]\n})\n\nexport class AXPDesignerHistoryComponent {\n protected service = inject(AXPDesignerService);\n}","<axp-designer-drawer-content>\n <ax-title>{{ '@layout-designer:components.history.title' | translate | async }}</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]=\"('@layout-designer:components.history.clear' | translate | async) ?? ''\" 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(/ /gi, ' ')\n .replace(/&/gi, '&')\n .replace(/</gi, '<')\n .replace(/>/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 { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, inject, OnInit, signal } from '@angular/core';\nimport { AXTranslationModule, 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, AXTranslationModule, AsyncPipe],\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>{{ '@layout-designer:keyboard-shortcuts.groups.file' | translate | async }}</ax-text>\n <ax-menu-item (onClick)=\"service.new()\">\n <ax-text>{{ '@layout-designer:menus.new' | translate | async }}</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>{{ '@layout-designer:keyboard-shortcuts.save' | translate | async }}</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>{{ '@layout-designer:menus.save-as-ellipsis' | translate | async }}</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>{{ '@layout-designer:menus.export' | translate | async }}</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>{{ '@layout-designer:menus.download-json' | translate | async }}</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>{{ '@layout-designer:menus.import' | translate | async }}</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>{{ '@layout-designer:menus.import-json' | translate | async }}</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>{{ '@layout-designer:keyboard-shortcuts.groups.edit' | translate | async }}</ax-text>\n <ax-menu-item [disabled]=\"!service.canUndo()\" (onClick)=\"service.undo()\">\n <ax-text>{{ '@layout-designer:keyboard-shortcuts.undo' | translate | async }}</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>{{ '@layout-designer:keyboard-shortcuts.redo' | translate | async }}</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>{{ '@layout-designer:keyboard-shortcuts.clone' | translate | async }}</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>{{ '@layout-designer:keyboard-shortcuts.cut' | translate | async }}</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>{{ '@layout-designer:keyboard-shortcuts.copy' | translate | async }}</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>{{ '@layout-designer:keyboard-shortcuts.paste' | translate | async }}</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>{{ '@general:actions.delete.title' | translate | async }}</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>{{ '@layout-designer:keyboard-shortcuts.groups.run' | translate | async }}</ax-text>\n <ax-menu-item (onClick)=\"service.openPreviewDialog()\">\n <ax-text>{{ '@layout-designer:keyboard-shortcuts.preview' | translate | async }}</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>{{ '@layout-designer:keyboard-shortcuts.preview-window' | translate | async }}</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>{{ '@layout-designer:menus.help' | translate | async }}</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>{{ '@layout-designer:menus.about' | translate | async }}</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":["i1","i2","i4","i7","i8","i3","i5","merge","i6"],"mappings":"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"}
|