@acorex/platform 18.0.11 → 18.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/auth/lib/session.service.d.ts +2 -2
  2. package/core/utils/countdown-timer.d.ts +4 -2
  3. package/esm2022/auth/lib/session.service.mjs +23 -38
  4. package/esm2022/core/utils/countdown-timer.mjs +10 -3
  5. package/esm2022/layout/builder/lib/builder/widget.types.mjs +3 -2
  6. package/esm2022/layout/designer/lib/board/board.component.mjs +72 -13
  7. package/esm2022/layout/designer/lib/buttons/add-widget-button/add-widget-button.component.mjs +16 -16
  8. package/esm2022/layout/designer/lib/designer/designer.component.mjs +18 -41
  9. package/esm2022/layout/designer/lib/designer.service.mjs +37 -51
  10. package/esm2022/layout/designer/lib/header-menu/header-menu.component.mjs +24 -0
  11. package/esm2022/layout/designer/lib/history/history.component.mjs +21 -0
  12. package/esm2022/layout/designer/lib/history-manager.service.mjs +117 -0
  13. package/esm2022/layout/designer/lib/outline/outline.component.mjs +4 -5
  14. package/esm2022/layout/designer/lib/property-viewer/widget-property-viewer.component.mjs +2 -2
  15. package/esm2022/layouts/lib/admin/entity-layout/entity-modify-view/entity-modify-view.component.mjs +7 -6
  16. package/esm2022/widgets/lib/properties/editors.props.mjs +40 -5
  17. package/esm2022/widgets/lib/widgets/actions/button-widget/button-widget-view.component.mjs +19 -4
  18. package/esm2022/widgets/lib/widgets/editors/checkbox/checkbox-widget.config.mjs +2 -1
  19. package/esm2022/widgets/lib/widgets/editors/color-box-widget/color-box-widget-edit.component.mjs +7 -13
  20. package/esm2022/widgets/lib/widgets/editors/contact-widget/contact-widget-edit.component.mjs +5 -5
  21. package/esm2022/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget-edit.component.mjs +2 -2
  22. package/esm2022/widgets/lib/widgets/editors/select-box-widget/select-box-widget-edit.component.mjs +31 -21
  23. package/esm2022/widgets/lib/widgets/editors/select-box-widget/select-box-widget.config.mjs +11 -4
  24. package/esm2022/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget.config.mjs +2 -1
  25. package/esm2022/widgets/lib/widgets/editors/text-box-widget/text-box-widget-edit.component.mjs +4 -4
  26. package/esm2022/widgets/lib/widgets/editors/text-box-widget/text-box-widget.config.mjs +3 -2
  27. package/esm2022/widgets/lib/widgets/editors/toggle-widget/toggle-widget.config.mjs +2 -1
  28. package/esm2022/widgets/lib/widgets/layout/page-widget/page-widget-designer.component.mjs +14 -4
  29. package/esm2022/widgets/lib/widgets/layout/page-widget/page-widget.config.mjs +3 -2
  30. package/esm2022/widgets/lib/widgets/layout/repeater-widget/repeater-widget.config.mjs +2 -1
  31. package/esm2022/widgets/lib/widgets/layout/text-block-widget/text-block-widget.config.mjs +2 -2
  32. package/fesm2022/acorex-platform-auth.mjs +22 -37
  33. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  34. package/fesm2022/acorex-platform-core.mjs +9 -2
  35. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  36. package/fesm2022/acorex-platform-layout-builder.mjs +2 -1
  37. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  38. package/fesm2022/acorex-platform-layout-designer.mjs +319 -156
  39. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  40. package/fesm2022/{acorex-platform-layouts-entity-modify-view.component-CjofXJku.mjs → acorex-platform-layouts-entity-modify-view.component-C9L8cyBm.mjs} +7 -5
  41. package/fesm2022/acorex-platform-layouts-entity-modify-view.component-C9L8cyBm.mjs.map +1 -0
  42. package/fesm2022/acorex-platform-layouts.mjs +2 -2
  43. package/fesm2022/{acorex-platform-widgets-page-widget-designer.component-DYb6bilD.mjs → acorex-platform-widgets-page-widget-designer.component-DlfG4EP1.mjs} +14 -4
  44. package/fesm2022/acorex-platform-widgets-page-widget-designer.component-DlfG4EP1.mjs.map +1 -0
  45. package/fesm2022/acorex-platform-widgets.mjs +332 -267
  46. package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
  47. package/layout/builder/lib/builder/widget.types.d.ts +2 -2
  48. package/layout/designer/lib/board/board.component.d.ts +7 -1
  49. package/layout/designer/lib/designer/designer.component.d.ts +1 -10
  50. package/layout/designer/lib/designer.service.d.ts +20 -16
  51. package/layout/designer/lib/header-menu/header-menu.component.d.ts +7 -0
  52. package/layout/designer/lib/history/history.component.d.ts +7 -0
  53. package/layout/designer/lib/history-manager.service.d.ts +31 -0
  54. package/package.json +7 -7
  55. package/widgets/lib/properties/editors.props.d.ts +1 -0
  56. package/widgets/lib/widgets/actions/button-widget/button-widget-view.component.d.ts +1 -0
  57. package/widgets/lib/widgets/editors/color-box-widget/color-box-widget-edit.component.d.ts +2 -4
  58. package/widgets/lib/widgets/editors/select-box-widget/select-box-widget-edit.component.d.ts +2 -0
  59. package/widgets/lib/widgets/editors/text-box-widget/text-box-widget-edit.component.d.ts +1 -1
  60. package/widgets/lib/widgets/layout/page-widget/page-widget-designer.component.d.ts +2 -0
  61. package/fesm2022/acorex-platform-layouts-entity-modify-view.component-CjofXJku.mjs.map +0 -1
  62. package/fesm2022/acorex-platform-widgets-page-widget-designer.component-DYb6bilD.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-layout-designer.mjs","sources":["../../../../libs/platform/layout/designer/src/lib/designer.service.ts","../../../../libs/platform/layout/designer/src/lib/widget-designer-renderer.component.ts","../../../../libs/platform/layout/designer/src/lib/board/board.component.ts","../../../../libs/platform/layout/designer/src/lib/board/board.component.html","../../../../libs/platform/layout/designer/src/lib/buttons/add-widget-button/add-widget-button.component.ts","../../../../libs/platform/layout/designer/src/lib/designer.module.ts","../../../../libs/platform/layout/designer/src/lib/breadcrumbs/breadcrumbs.component.ts","../../../../libs/platform/layout/designer/src/lib/property-viewer/widget-property-viewer.component.ts","../../../../libs/platform/layout/designer/src/lib/property-viewer/widget-property-viewer.component.html","../../../../libs/platform/layout/designer/src/lib/outline/outline.component.ts","../../../../libs/platform/layout/designer/src/lib/outline/outline.component.html","../../../../libs/platform/layout/designer/src/lib/designer/designer.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/designer.component.html","../../../../libs/platform/layout/designer/src/acorex-platform-layout-designer.ts"],"sourcesContent":["import { AXPopupService } from '@acorex/components/popup';\nimport { AXFileService } from '@acorex/core/file';\nimport { AXPWidgetComponent, AXPWidgetConfig, AXPWidgetNode, AXPWidgetRegistryService, AXPWidgetRenderMode } from '@acorex/platform/layout/builder';\nimport { computed, effect, inject, Injectable, signal } from '@angular/core';\nimport { cloneDeep, forEach, get, isEqual, merge, set, sortBy, values } from 'lodash-es';\nimport { Subject } from 'rxjs';\n\nexport interface AXPDesignerFocusCommand {\n widget: AXPWidgetNode | null,\n}\n\nexport interface AXPDesignerUpdateCommand {\n values: any;\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: AXPWidgetComponent,\n}\n\nexport interface AXPDesignerSelectEvent {\n widget: AXPWidgetNode,\n}\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 clipboard = signal<AXPWidgetNode | null>(null);\n private undoStack: AXPWidgetNode[] = [];\n private redoStack: AXPWidgetNode[] = [];\n private maxHistorySize = 20;\n public canUndo = signal<boolean>(false);\n public canRedo = signal<boolean>(false);\n public canCutCopy = computed(() => this.selectedNode() != null && this.selectedNode()?.name != \"page\");\n public canPaste = computed(() => (this.clipboard() != null));\n\n private popupService = inject(AXPopupService);\n private widgetRegisteryService = inject(AXPWidgetRegistryService);\n\n public readonly root = signal(this.createPage());\n\n public breadcrumbs = computed<AXPWidgetNode[]>(() => {\n return this.selectedNode() ? this.findBreadcrumbs(this.root(), this.selectedNode()!) ?? [] : [];\n });\n\n public selectedNode = signal<AXPWidgetNode | null>(null);\n\n private _lastSelectedNode: AXPWidgetNode | null = null;\n\n private _focusedNode: AXPWidgetNode | null = null;\n public focusedNode = () => this._focusedNode;\n\n private _mode = signal<AXPWidgetRenderMode>('designer');\n public mode = this._mode.asReadonly();\n\n public setMode(mode: AXPWidgetRenderMode) {\n this._mode.set(mode);\n }\n\n\n public readonly onSelected = new Subject<AXPDesignerSelectEvent>();\n public readonly onRefresh = new Subject<AXPDesignerRefreshEvent>();\n\n\n public register(command: AXPDesignerRegisterCommand): void {\n if (!this._lastSelectedNode) {\n this.select({ widget: command.widget });\n }\n else {\n this.select({ widget: this._lastSelectedNode });\n }\n }\n\n public select(command: AXPDesignerSelectCommand): void {\n this.selectedNode.set(command.widget);\n this._lastSelectedNode = this.selectedNode();\n this.onSelected.next(command);\n }\n\n public readonly onUpdate = new Subject<AXPDesignerUpdateEvent>();\n\n public update(command: AXPDesignerUpdateCommand): void {\n if (command.mode == 'update') {\n console.log(this.selectedNode()?.name, command);\n this.saveStateForUndo();\n }\n this.selectedNode.update(c => merge(this.selectedNode(), command.values));\n this.onUpdate.next({ widget: this.selectedNode()!, values: command.values });\n }\n\n\n public readonly onFocused = new Subject<AXPDesignerFocusEvent>();\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 }\n\n\n private findBreadcrumbs(\n node: AXPWidgetNode,\n targetNode: AXPWidgetNode,\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\n async showPicker(currentNode: AXPWidgetNode): Promise<void> {\n const com = await import('./widget-picker/widget-picker.component').then(c => c.AXPDesignerWidgetPickerComponent);\n const result = await this.popupService.open(com, {\n title: \"Widget Gallery\",\n size: 'md',\n closeButton: true,\n data: {\n widgets: sortBy(this.widgetRegisteryService.all().filter(c => c.visible != false), c => c.title)\n }\n })\n\n if ((result.data?.widgets ?? []).length) {\n const selected = result.data?.widgets as AXPWidgetConfig[];\n selected.forEach(c => {\n this.addWidget(currentNode, { type: c.name });\n });\n }\n\n }\n\n private createPage(): AXPWidgetNode {\n const config = this.widgetRegisteryService.resolve('page');\n\n const page: AXPWidgetNode = {\n type: 'page',\n children: [],\n name: \"page\",\n }\n\n set(page, '__meta__.id', Math.random() * Math.pow(10, 18));\n set(page, '__meta__.config', config);\n return page;\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.root()): 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: boolean = 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.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.container) {\n return child;\n }\n const foundContainer = this.findNearestContainer(child, false); // Continue searching downwards\n if (foundContainer) return foundContainer;\n }\n }\n }\n return null; // Return null if no container found\n }\n\n addWidget(currentNode: AXPWidgetNode, node: AXPWidgetNode): AXPWidgetNode | null {\n if (!currentNode)\n return null;\n //\n this.saveStateForUndo();\n //\n if (!currentNode.children) {\n currentNode.children = [];\n }\n\n const config = this.widgetRegisteryService.resolve(node.type);\n //\n const cloned = cloneDeep(node);\n cloned.name = this.generateUniqueName(node.type);\n set(cloned, '__meta__.id', Math.random() * Math.pow(10, 18));\n set(cloned, '__meta__.config', config);\n //\n currentNode.children.push(cloned);\n //\n //\n this.refresh({ widget: currentNode });\n this.select({ widget: cloned });\n return cloned;\n }\n\n public removeWidget(node: AXPWidgetNode): void {\n if (node.type === \"page\") {\n console.error(\"Cannot remove the page node.\");\n return; // Prevent removing the root page node\n }\n\n this.saveStateForUndo(); // Save state before making changes\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.root());\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 index = parent.children?.findIndex(child => get(child, \"__meta__.id\") === nodeIdToRemove) ?? -1;\n if (index > -1) {\n parent.children!.splice(index, 1);\n this.refresh({ widget: parent }); // Refresh the UI to reflect changes\n this.select({ widget: parent }); // Select the parent node after removal\n } else {\n throw new Error(\"Node to remove not found in the widget tree.\");\n }\n }\n\n\n\n private saveStateForUndo() {\n if (this.undoStack.length >= this.maxHistorySize) {\n this.undoStack.shift(); // Remove the oldest snapshot if exceeding the max history size.\n }\n this.undoStack.push(cloneDeep(this.root()));\n this.canUndo.set(true);\n\n // Clear the redo stack whenever a new change is made after undo\n if (this.redoStack.length > 0) {\n this.redoStack = [];\n this.canRedo.set(false);\n }\n }\n\n private applyState(state: AXPWidgetNode) {\n this.root.set(state);\n this.refresh({ widget: this.root() });\n //TODO: select the selected widget on this state\n this.select({ widget: this._lastSelectedNode ?? this.root() });\n }\n\n public undo() {\n if (this.undoStack.length > 0) {\n const currentState = cloneDeep(this.root());\n this.redoStack.push(currentState);\n const prevState = this.undoStack.pop();\n this.applyState(prevState!);\n this.canUndo.set(this.undoStack.length > 0);\n this.canRedo.set(true); // There is at least one action to redo now\n }\n }\n\n public redo() {\n if (this.redoStack.length > 0) {\n const nextState = this.redoStack.pop();\n this.undoStack.push(cloneDeep(this.root()));\n this.applyState(nextState!);\n this.canRedo.set(this.redoStack.length > 0);\n this.canUndo.set(true); // Undo is always available after a redo\n }\n }\n\n\n private formatOutputJSON(obj: any, nodeName: string): any {\n // Check if the object is an array\n if (Array.isArray(obj)) {\n return obj.map(item => this.formatOutputJSON(item, nodeName));\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.formatOutputJSON(obj[key], nodeName);\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\n public copy(widget: AXPWidgetNode | null = this.selectedNode()): void {\n if (!widget)\n return;\n this.clipboard.set(cloneDeep(widget)); // Use lodash's cloneDeep to ensure a deep copy\n }\n\n public cut(widget: AXPWidgetNode | null = this.selectedNode()): void {\n if (!widget)\n return;\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 paste(parentNode: AXPWidgetNode = this.selectedNode() ?? this.root()): void {\n if (!this.clipboard() || !this.selectedNode()) {\n console.error(\"Clipboard is empty or no node is selected.\");\n return;\n }\n\n const nearestContainer = this.findNearestContainer(parentNode, true);\n if (!nearestContainer) {\n console.error(\"No suitable container found.\");\n return;\n }\n //\n this.saveStateForUndo(); // Prepare for undo functionality\n //\n if (!nearestContainer.children) {\n nearestContainer.children = [];\n }\n\n const newNode = cloneDeep(this.clipboard())!;\n set(newNode, \"__meta__.id\", Math.random() * Math.pow(10, 18)); // Ensure a unique ID\n //\n nearestContainer.children.push(newNode); // Add the new node to the container\n this.refresh({ widget: nearestContainer }); // Refresh the UI\n this.select({ widget: newNode }); // Select the newly pasted node\n }\n\n\n export(): string {\n const json = this.formatOutputJSON(this.root(), \"__meta__\");\n return JSON.stringify(json);\n }\n\n download() {\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\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\n /**\n * Generates a well-formed, unique name for a new widget node based on its type.\n * @param type The type of the widget (e.g., 'textBox', 'numberBox').\n * @returns A unique name for the widget (e.g., 'textBox1', 'numberBox2').\n */\n private generateUniqueName(type: string): string {\n // Normalize the type to follow camelCase convention\n const baseName = type.charAt(0).toLowerCase() + type.slice(1);\n let index = 1;\n let uniqueName = `${baseName}${index}`;\n\n // Gather all existing names to check against\n const existingNames = new Set<string>();\n this.collectAllNames(this.root(), existingNames);\n\n // Increment the index until a unique name is found\n while (existingNames.has(uniqueName)) {\n index++;\n uniqueName = `${baseName}${index}`;\n }\n\n return uniqueName;\n }\n\n /**\n * Collects all existing widget names from the widget tree.\n * @param node The current node being inspected.\n * @param names A set to store existing names.\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}","import { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport {\n AXP_WIDGET_TOKEN,\n AXPWidgetComponent,\n AXPWidgetConfig,\n AXPWidgetNode,\n AXPWidgetNodeToken,\n AXPWidgetRegistryService,\n AXPWidgetRenderMode,\n} from '@acorex/platform/layout/builder';\nimport { CdkPortalOutletAttachedRef, ComponentPortal, PortalModule } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n effect,\n ElementRef,\n HostListener,\n inject,\n Injector,\n input,\n NgZone,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { cloneDeep, get, isEmpty, merge, set } from 'lodash-es';\nimport { first } from 'rxjs';\nimport { AXPDesignerService } from './designer.service';\n\n@Component({\n selector: 'axp-widget-designer-renderer',\n template: `\n @if(mergedOptions().isVisible!=false) { @if(isLoading()){\n <ax-skeleton [animated]=\"true\" class=\"ax-w-full lg:ax-w-[50%] ax-h-8 ax-rounded\"></ax-skeleton>\n } @else {\n <ng-container *ngTemplateOutlet=\"tt\"></ng-container>\n } }\n <ng-template #tt>\n <ng-template [cdkPortalOutlet]=\"portal\" (attached)=\"handleAttached($event)\"></ng-template>\n </ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule, PortalModule, AXSkeletonModule, CommonModule],\n providers: [\n {\n provide: AXUnsubscriber,\n },\n ],\n host: { class: 'axp-widget-host' },\n})\nexport class AXPWidgetDesignerRendererComponent {\n protected mergedOptions: WritableSignal<any> = signal<any>({});\n\n private injector = inject(Injector);\n protected widgetRegistery = inject(AXPWidgetRegistryService);\n protected unsubscriber = inject(AXUnsubscriber);\n protected zone = inject(NgZone);\n\n protected isLoading = signal(true);\n private instance!: AXPWidgetComponent;\n private config?: AXPWidgetConfig | undefined;\n protected portal!: ComponentPortal<any>;\n\n private service = inject(AXPDesignerService);\n private elementRef = inject(ElementRef);\n\n parentNode = input<AXPWidgetComponent | null>();\n\n index = input<number | null>();\n\n mode = input.required<AXPWidgetRenderMode>();\n node = input.required<AXPWidgetNode>();\n\n private hostElement = () => this.elementRef.nativeElement as HTMLDivElement;\n private isCurrentWidget = (w: AXPWidgetNode) => get(w, '__meta__.id') == get(this.node(), '__meta__.id');\n\n /**\n * @ignore\n */\n constructor() {\n this.service.onUpdate.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {\n if (this.isCurrentWidget(c.widget)) {\n this.applyOptions(c.values?.options);\n }\n });\n //\n this.service.onSelected.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {\n this.zone.runOutsideAngular(() => {\n if (this.isCurrentWidget(c.widget)) {\n this.hostElement()?.classList.add('axp-state-selected');\n } else {\n this.hostElement()?.classList.remove('axp-state-selected');\n }\n });\n });\n //\n this.service.onFocused.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {\n if (c.widget && this.isCurrentWidget(c.widget)) {\n this.addOverlay();\n } else {\n this.removeOverlay();\n }\n });\n //\n this.service.onRefresh.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {\n if (this.isCurrentWidget(c.widget)) {\n this.instance.setChildren(this.node().children ?? []);\n }\n });\n //\n effect(\n async () => {\n await this.loadComponent();\n },\n { allowSignalWrites: true }\n );\n }\n\n private async loadComponent() {\n this.isLoading.set(true);\n this.config = this.widgetRegistery.resolve(this.node().type);\n //\n const props = this.config?.components[this.mode()]?.properties\n ?.filter((c) => c.schema.defaultValue)\n .map((c) => ({ [c.name]: c.schema.defaultValue }))\n .reduce((acc, curr) => {\n return { ...acc, ...curr };\n }, {});\n //\n this.mergedOptions.set(merge(props, this.node().options) || {});\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: 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 var com = await this.config?.components[this.mode()]?.component();\n this.portal = new ComponentPortal(com, null, token);\n this.isLoading.set(false);\n }\n\n protected async handleAttached(portalOutletRef: CdkPortalOutletAttachedRef) {\n portalOutletRef = portalOutletRef as ComponentRef<AXPWidgetComponent>;\n this.instance = portalOutletRef.instance as AXPWidgetComponent;\n this.instance.parent = this.parentNode();\n this.instance.index = this.index();\n this.instance.mode = this.mode();\n //\n this.instance.onReady.pipe(first()).subscribe(() => {\n if (this.mode() == 'designer') {\n this.hostElement()?.addEventListener('mouseover', (e) => {\n e.stopPropagation();\n this.service.focus({ widget: this.node() });\n });\n this.hostElement()?.addEventListener('mouseleave', (e) => {\n e.stopPropagation();\n this.service.focus({ widget: null });\n });\n\n this.hostElement()?.addEventListener('click', (e) => {\n e.stopPropagation();\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 }\n\n private overlay: HTMLElement | null;\n\n private addOverlay() {\n this.zone.runOutsideAngular(() => {\n //console.log('add', this.node().type);\n if (this.hostElement()) {\n this.hostElement()?.classList.add('axp-state-hover');\n //\n if (this.hostElement().querySelector('.axp-widget-overlay') || this.config?.container) return;\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.service.select({ widget: this.node() });\n });\n this.overlay.addEventListener('mouseleave', (e) => {\n e.preventDefault();\n e.stopPropagation();\n this.service.focus({ widget: null });\n });\n this.hostElement().appendChild(this.overlay);\n }\n });\n }\n\n private removeOverlay() {\n //console.log('remove', this.node().type);\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 preprocessAndInitialOptions(obj: any, pathPrefix: string = ''): void {\n if (!obj) return;\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.node().defaultValue != null) {\n this.instance.setValue(this.node().defaultValue);\n }\n this.mergedOptions.update((currentOptions) => {\n return merge(currentOptions, values);\n });\n this.instance?.setOptions(this.mergedOptions());\n }\n\n @HostListener('document:keydown', ['$event'])\n async onKeydownHandler(event: KeyboardEvent) {\n if (this.service.selectedNode() && this.isCurrentWidget(this.service.selectedNode()!)) {\n // handle delete\n if (event.key == \"Delete\") {\n event.preventDefault();\n event.stopPropagation();\n this.service.removeWidget(this.node());\n }\n //\n // handle delete\n if (this.config?.container && event.key == \"Insert\") {\n this.service.showPicker(this.node());\n }\n }\n }\n}\n","import { AXPLayoutBuilderModule } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport { Component, inject, ViewEncapsulation, HostBinding, ChangeDetectionStrategy, HostListener } from '@angular/core';\nimport { AXPWidgetDesignerRendererComponent } from '../widget-designer-renderer.component';\nimport { AXPDesignerService } from '../designer.service';\n\n\n@Component({\n selector: 'axp-designer-board',\n templateUrl: './board.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n AXPLayoutBuilderModule,\n AXPWidgetDesignerRendererComponent\n ],\n})\nexport class AXPDesignerBoardComponent {\n\n protected context: any = {};\n\n protected service = inject(AXPDesignerService);\n\n @HostBinding('class')\n private get __class(): any {\n return {\n \"axp-designer-board\": true,\n \"axp-state-design\": this.service.mode() == 'designer'\n };\n }\n\n @HostListener('document:keydown', ['$event'])\n private handleKeyboardEvent(event: KeyboardEvent) {\n if (event.ctrlKey) {\n switch (event.key.toLowerCase()) { // Convert the key to lowercase to ensure case insensitivity\n case 'z':\n event.preventDefault(); // Prevent the browser's default undo action\n this.service.undo();\n break;\n case 'y':\n event.preventDefault(); // Prevent the browser's default redo action\n this.service.redo();\n break;\n case 'c':\n if (this.service.canCutCopy()) {\n event.preventDefault(); // Prevent the browser's default copy action\n this.service.copy();\n }\n break;\n case 'x':\n if (this.service.canCutCopy()) {\n event.preventDefault(); // Prevent the browser's default cut action\n this.service.cut();\n }\n break;\n case 'v':\n if (this.service.canPaste()) {\n event.preventDefault(); // Prevent the browser's default paste action\n this.service.paste();\n }\n break;\n }\n }\n }\n\n}\n","<axp-widgets-container [(context)]=\"context\">\n <axp-widget-designer-renderer [node]=\"service.root()\" [mode]=\"service.mode()\">\n </axp-widget-designer-renderer>\n</axp-widgets-container>","\n\n\nimport { ChangeDetectionStrategy, Component, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { AXPDesignerService } from '../../designer.service';\nimport { AXPContainerWidgetComponent } from '@acorex/platform/layout/builder';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXClickEvent } from '@acorex/components/common';\n\n@Component({\n selector: 'axp-designer-add-widget-button',\n styleUrls: ['./add-widget-button.component.scss'],\n template: `\n <div class=\"ax-container\">\n <ax-button [text]=\"'Add New Element'\" (onClick)=\"handleClick($event)\" [look]=\"'twotone'\">\n <ax-icon icon=\"fa-solid fa-plus\"></ax-icon>\n </ax-button>\n </div>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXButtonModule, AXDecoratorModule],\n encapsulation: ViewEncapsulation.None\n})\n\nexport class AXPDesignerAddWidgetButtonComponent {\n\n private designerService = inject(AXPDesignerService);\n private parent = inject(AXPContainerWidgetComponent);\n\n\n async handleClick(e: AXClickEvent) {\n e.nativeEvent.stopPropagation();\n await this.designerService.showPicker(this.parent.node);\n }\n}","import { NgModule } from \"@angular/core\";\n\n@NgModule({\n imports: [],\n exports: [],\n declarations: [],\n})\nexport class AXPDesignerModule {\n}\n","import { AXPLayoutBuilderModule, AXPWidgetNode } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { AXPDesignerService } from '../designer.service';\nimport { get } from 'lodash-es';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\n\n@Component({\n selector: 'axp-designer-breadcrumbs',\n template: `\n <ax-breadcrumbs class=\"ax-text-white\">\n @for( b of service.breadcrumbs();track $index){\n <ax-breadcrumbs-item>\n <a (click)=\"handleClick(b)\" (mouseover)=\"handleMouseOver(b)\"> {{getTitle(b)}}</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 standalone: true,\n imports: [\n CommonModule,\n AXPLayoutBuilderModule,\n AXBreadcrumbsModule,\n AXDecoratorModule\n ],\n})\n\nexport class AXPDesignerBreadcrumbsComponent {\n\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}","import { AXCollapseModule } from '@acorex/components/collapse';\nimport { AXTabsModule, AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport { AXPLayoutBuilderModule, AXPLayoutContextEvent, AXPWidgetConfig, AXPWidgetNode, AXPWidgetProperty, AXPWidgetRegistryService } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\n\nimport { ChangeDetectionStrategy, Component, computed, effect, EventEmitter, inject, Input, input, model, Output, signal, untracked, WritableSignal } from '@angular/core';\nimport { capitalize, cloneDeep, get, isArray, isEmpty, isNil, merge, set, sortBy, unionBy } from 'lodash-es';\n\nexport interface AXPWidgetPropertyTab {\n name: string;\n title: string;\n groups: {\n name: string;\n title: string;\n isCollapsed: boolean;\n props: AXPWidgetProperty[];\n }[];\n}\n\n\nexport interface AXPWidgetPropertiesChangedEvent {\n values: any,\n mode: 'init' | 'update'\n}\n\n@Component({\n selector: 'axp-widget-property-viewer',\n templateUrl: './widget-property-viewer.component.html',\n styleUrls: ['./widget-property-viewer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule, AXCollapseModule, AXTabsModule, AXPLayoutBuilderModule],\n})\nexport class AXPWidgetPropertyViewerComponent {\n widget = input.required<AXPWidgetNode>();\n\n private widgetRegistryService = inject(AXPWidgetRegistryService);\n\n protected currentTabIndex: WritableSignal<number> = signal(0);\n\n protected config = signal<AXPWidgetConfig | null>(null);\n protected allPoperties: AXPWidgetProperty[] = [];\n\n protected tabs = signal<AXPWidgetPropertyTab[]>([]);\n\n protected groups = computed(() => {\n return this.tabs().length ? this.tabs()[this.currentTabIndex()].groups : [];\n });\n\n\n @Output()\n onChanged = new EventEmitter<AXPWidgetPropertiesChangedEvent>();\n\n protected context = signal<any>({});\n\n\n protected initialContext: any = {};\n\n constructor() {\n effect(\n () => {\n if (!this.widget())\n return\n const config = this.widgetRegistryService.resolve(this.widget()?.type);\n if (config) {\n this.initialContext = {};\n this.config.set(config);\n this.fillTabs();\n } else {\n console.error(`Invalid widget name: ${this.widget()}`);\n }\n },\n { allowSignalWrites: true }\n );\n }\n\n private fillTabs() {\n const tabs: AXPWidgetPropertyTab[] = [\n {\n name: 'general',\n title: 'General',\n groups: [],\n },\n ];\n Object.entries(this.config()?.components ?? {}).forEach((c) => {\n if (c[1].component != null && c[1].properties?.length) {\n tabs.push({ name: c[0], title: capitalize(c[0]), groups: [] });\n }\n });\n ///\n this.allPoperties = [];\n ///\n tabs.forEach((tab) => {\n const props =\n tab.name == 'general'\n ? this.config()?.properties ?? []\n : (((this.config()?.components as any)[tab.name]?.properties as AXPWidgetProperty[]) ?? []).filter((c) => c.visible);\n //\n this.allPoperties.push(...props);\n tab.groups = unionBy(\n sortBy(\n props.map((pg) => ({\n isCollapsed: false,\n name: pg.group.name,\n title: pg.group.title,\n props: sortBy(\n props.filter((p) => p.group.name == pg.group.name),\n 'title'\n ),\n })),\n 'title'\n ),\n 'name'\n );\n });\n this.tabs.set(tabs.filter((c) => c.groups.length));\n //\n this.initialContext = this.allPoperties\n .filter(\n (c) =>\n (!isArray(c.schema.defaultValue) && !isNil(c.schema.defaultValue)) || (isArray(c.schema.defaultValue) && !isEmpty(c.schema.defaultValue))\n )\n .reduce((acc, c) => {\n set(acc, c.schema.interface.path, c.schema.defaultValue); // Use lodash's set\n return acc;\n }, {});\n //\n untracked(() => {\n this.context.set(merge(cloneDeep(this.initialContext), this.widget()));\n this.onChanged.emit({ values: this.context(), mode: 'init' });\n });\n }\n\n protected handleContextChange(e: AXPLayoutContextEvent) {\n untracked(() => {\n this.context.set(e.data);\n });\n this.onChanged.emit({ values: e.data, mode: 'update' });\n }\n\n protected handleTabChange(event: AXTabStripChangedEvent): void {\n const indx = event.index;\n if (this.currentTabIndex() != indx) {\n this.currentTabIndex.set(indx);\n }\n }\n}\n","<axp-widgets-container [context]=\"context()\" (onChanged)=\"handleContextChange($event)\">\n <div class=\"ax-flex ax-flex-col\">\n <div class=\"ax-pb-2\">\n <ax-tabs look=\"default\" (onActiveTabChanged)=\"handleTabChange($event)\" [look]=\"'with-line'\">\n @for( tab of tabs();track $index){\n <ax-tab-item [text]=\"tab.title\" [key]=\"$index.toString()\" [active]=\"currentTabIndex() === $index\">\n </ax-tab-item>\n }\n </ax-tabs>\n </div>\n <div class=\"ax-flex-1 ax-overflow-auto\">\n <ax-collapse-group class=\"ax-h-fit\" look=\"blank\">\n @for( group of groups();track $index){\n <ax-collapse [caption]=\"group.title\" look=\"solid\" [(isCollapsed)]=\"group.isCollapsed\">\n <div class=\"ax-flex ax-flex-col ax-divide-y\">\n @for( p of group.props;track $index){\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-py-2 first:ax-pt-0 last:ax-pb-0\">\n <span class=\"ax-font-semibold\">{{p.title}}</span>\n @if(p.schema.interface)\n {\n <axp-widget-renderer [node]=\"p.schema.interface\" [mode]=\"'edit'\">\n </axp-widget-renderer>\n }\n </div>\n }\n </div>\n </ax-collapse>\n }\n </ax-collapse-group>\n </div>\n </div>\n</axp-widgets-container>","import { AXPLayoutBuilderModule, AXPWidgetConfig, AXPWidgetNode } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, OnInit, signal, ViewEncapsulation } from '@angular/core';\nimport { AXPDesignerService } from '../designer.service';\nimport { get } from 'lodash-es';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { merge } from 'rxjs';\n\n@Component({\n selector: 'axp-designer-outline',\n templateUrl: 'outline.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n AXPLayoutBuilderModule,\n AXBreadcrumbsModule,\n AXDecoratorModule,\n ],\n})\n\nexport class AXPDesignerOutlineComponent {\n\n protected service = inject(AXPDesignerService);\n\n protected collapsedStates: Map<any, boolean> = new Map();\n\n protected root = signal(this.service.root());\n\n constructor() {\n merge(this.service.onRefresh, this.service.onUpdate)\n .subscribe(() => {\n this.root.update(c => ({ ...this.service.root() }));\n })\n }\n\n\n private toggleCollapse(node: any) {\n // Toggle the current state or set to true if undefined\n this.collapsedStates.set(node, !this.collapsedStates.get(node));\n }\n\n protected isCollapsed(node: any): boolean {\n // Return the collapsed state, default is false (expanded)\n return !!this.collapsedStates.get(node);\n }\n\n protected getConfig(node: AXPWidgetNode): AXPWidgetConfig {\n return get(node, \"__meta__.config\") as any as AXPWidgetConfig;\n }\n\n protected handleClick(e: MouseEvent, node: AXPWidgetNode) {\n e.stopPropagation();\n this.service.select({ widget: node });\n }\n\n protected handleToggleClick(event: MouseEvent, item: any): void {\n event.stopPropagation(); // Prevents the event from bubbling up to parent elements\n this.toggleCollapse(item);\n }\n\n protected handleMouseOver(e: MouseEvent, node: AXPWidgetNode) {\n e.stopPropagation();\n this.service.focus({ widget: node });\n }\n}","@if(root().children?.length)\n{\n<ul class=\"ax-text-white ax-text-sm ax-bg-gray-800 ax-p-2 ax-rounded-md ax-space-y-1\">\n @for( node of root().children;track $index)\n {\n <ng-container [ngTemplateOutlet]=\"sideMenu\" [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n }\n</ul>\n<ng-template #sideMenu let-item>\n <li class=\"ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700\"\n (click)=\"handleClick($event,item)\" (mouseover)=\"handleMouseOver($event,item)\">\n <div [class.ax-bg-blue-200]=\"item === service.selectedNode()\"\n [class.ax-text-blue-900]=\"item === service.selectedNode()\"\n class=\"ax-flex ax-flex-row ax-items-center ax-p-1 ax-px-2\">\n <span class=\"ax-w-5\">\n @if(item.children?.length)\n {\n <i class=\"fa-solid\" [class.fa-chevron-right]=\"isCollapsed(item)\"\n (click)=\"handleToggleClick($event, item)\" [class.fa-chevron-down]=\"!isCollapsed(item)\"></i>\n }\n </span>\n @let config= getConfig(item);\n <span class=\"ax-w-5\">\n @if(config.icon)\n {\n <i [ngClass]=\"config.icon\"></i>\n }\n </span>\n <span>{{config.title}} : {{item.name}}</span>\n </div>\n @if(item.children?.length && !isCollapsed(item)) {\n <ul class=\"ax-pl-5 ax-space-y-1\">\n <ng-container *ngFor=\"let child of item.children\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\">\n </ng-container>\n </ul>\n }\n </li>\n</ng-template>\n}\n@else {\n<div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">No widgets found in the page</div>\n}","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXTabsModule, AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport { AXPLayoutBuilderModule, AXPWidgetConfig, AXPWidgetRenderMode } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, HostBinding, inject, signal, ViewEncapsulation, WritableSignal } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { AXPDesignerBoardComponent } from '../board/board.component';\nimport { AXPDesignerBreadcrumbsComponent } from '../breadcrumbs/breadcrumbs.component';\nimport { AXPDesignerService } from '../designer.service';\nimport { AXPWidgetPropertyViewerComponent } from '../property-viewer/widget-property-viewer.component';\nimport { AXPDesignerOutlineComponent } from '../outline/outline.component';\nimport { AXMenuModule } from '@acorex/components/menu'\n\n@Component({\n selector: 'axp-layout-designer',\n templateUrl: './designer.component.html',\n styleUrls: ['./designer.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [\n CommonModule,\n AXPLayoutBuilderModule,\n AXPDesignerBoardComponent,\n AXPWidgetPropertyViewerComponent,\n AXPDesignerBreadcrumbsComponent,\n AXPDesignerOutlineComponent,\n AXTabsModule,\n AXButtonModule,\n AXDrawerModule,\n AXDecoratorModule,\n AXMenuModule\n ],\n providers: [AXPDesignerService],\n})\nexport class AXPLayoutDesignerComponent {\n protected currentTabIndex: WritableSignal<number> = signal(0);\n\n protected service = inject(AXPDesignerService);\n\n protected tabs: { mode: AXPWidgetRenderMode; title: string }[] = [\n {\n mode: 'designer',\n title: 'Designer',\n },\n {\n mode: 'edit',\n title: 'Edit',\n },\n {\n mode: 'view',\n title: 'View',\n },\n {\n mode: 'print',\n title: 'Print',\n },\n ];\n\n protected handleTabChange(event: AXTabStripChangedEvent): void {\n const index = event.index;\n if (this.currentTabIndex() != index) {\n this.currentTabIndex.set(index);\n this.service.setMode(this.tabs[this.currentTabIndex()].mode);\n }\n }\n\n @HostBinding('class')\n private get __class(): string {\n return 'ax-h-full';\n }\n\n\n protected nodeConfig = computed<AXPWidgetConfig | null>(() => this.service.selectedNode() ? get(this.service.selectedNode(), '__meta__.config') as any as AXPWidgetConfig : null);\n}\n","<ax-drawer-container class=\"ax-h-full ax-w-full ax-flex ax-relative child:ax-h-full ax-overflow-hidden\">\n <ax-content class=\"ax-contents\">\n <!-- Toolbar Side -->\n <div class=\"ax-min-w-10 ax-bg-surface ax-border-e ax-xs ax-flex ax-flex-col ax-items-center ax-dark\">\n <div class=\"ax-min-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-border-b\">\n <img src=\"assets/logos/logo.png\" class=\"ax-w-6\" />\n </div>\n <div class=\"ax-py-1\"></div>\n <div class=\"ax-flex ax-flex-col ax-gap-2\">\n <ax-button color=\"ghost\" look=\"twotone\">\n <ax-icon class=\"fa-solid fa-puzzle ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\">\n <ax-icon class=\"fa-solid fa-plus ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\">\n <ax-icon class=\"fa-solid fa-database ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"outline.toggle()\">\n <ax-icon class=\"fa-solid fa-list-tree ax-text-sm\"> </ax-icon>\n </ax-button>\n </div>\n </div>\n\n <!-- Main Side -->\n <div class=\"ax-col-span-10 ax-flex ax-flex-col ax-flex-1\">\n <!-- Header Toolbar -->\n <div class=\"ax-min-h-10 ax-bg-surface ax-border-b ax-dark ax-flex ax-flex-grow ax-justify-between ax-px-2\">\n <div class=\"ax-flex ax-items-center ax-justify-center ax-text-white\">\n <ax-menu [openOn]=\"'hover'\">\n <ax-menu-item text=\"Home\">\n <ax-menu-item text=\"New\"></ax-menu-item>\n <ax-menu-item text=\"Export\">\n <ax-menu-item text=\"Download JSON\" (onClick)=\"service.download()\">\n </ax-menu-item>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item text=\"Edit\">\n <ax-menu-item text=\"Undo\" [disabled]=\"!service.canUndo()\" (onClick)=\"service.undo()\">\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-rotate-left\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text>\n Ctrl+Z\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item text=\"Redo\" [disabled]=\"!service.canRedo()\" (onClick)=\"service.redo()\">\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-text>\n Ctrl+Y\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n <ax-menu-item text=\"Cut\" [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.cut()\">\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-text>\n Ctrl+X\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item text=\"Copy\" [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.copy()\">\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-text>\n Ctrl+C\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item text=\"Paste\" [disabled]=\"!service.canPaste()\" (onClick)=\"service.paste()\">\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-text>\n Ctrl+V\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item text=\"Help\">\n <ax-menu-item text=\"About\"></ax-menu-item>\n </ax-menu-item>\n </ax-menu>\n </div>\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-xs ax-items-center\">\n <ax-button color=\"success\" look=\"twotone\" text=\"Preview\">\n <ax-icon class=\"fa-solid fa-eye \"> </ax-icon>\n </ax-button>\n <!-- <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"service.undo()\" [disabled]=\"!service.canUndo()\">\n <ax-icon class=\"fa-solid fa-rotate-left ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"service.redo()\" [disabled]=\"!service.canRedo()\">\n <ax-icon class=\"fa-solid fa-rotate-right ax-text-sm\"> </ax-icon>\n </ax-button> -->\n </div>\n </div>\n\n <!-- Board -->\n <div class=\"ax-h-full\">\n <ax-drawer-container class=\"ax-w-full ax-h-full\">\n <ax-drawer #bd location=\"start\" mode=\"push\" class=\"ax-dark\">\n <ax-content>\n <div class=\"ax-min-w-80 ax-h-full ax-overflow-auto ax-border-e\">\n </div>\n </ax-content>\n </ax-drawer>\n <ax-drawer #outline location=\"start\" mode=\"push\" class=\"ax-dark\">\n <ax-content>\n <div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-p-2 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <span class=\"ax-font-semibold\">Outline</span>\n </div>\n <ax-close-button></ax-close-button>\n </div>\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n <axp-designer-outline></axp-designer-outline>\n </div>\n </div>\n </ax-content>\n </ax-drawer>\n <!-- Content of board -->\n <ax-content>\n <div class=\"ax-bg-white ax-h-full ax-block\">\n <axp-designer-board class=\"ax-w-full ax-border-default ax-border ax-flex-1 ax-overflow-auto ax-p-3\">\n </axp-designer-board>\n </div>\n </ax-content>\n </ax-drawer-container>\n </div>\n\n <!-- Footer -->\n <div class=\"ax-min-h-10 ax-bg-surface ax-border-t ax-dark ax-flex ax-items-center\">\n @if(currentTabIndex()==0) {\n <axp-designer-breadcrumbs class=\"ax-border-default ax-border-t ax-p-2 ax-font-normal\">\n </axp-designer-breadcrumbs>\n }\n </div>\n </div>\n </ax-content>\n <!-- Property Side -->\n <ax-drawer class=\"ax-w-80 ax-border-s ax-dark \" location=\"end\" mode=\"push\" [collapsed]=\"false\" #pd>\n <ax-content>\n\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-py-2 ax-px-4 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <i [ngClass]=\"nodeConfig()?.icon\"></i>\n <span class=\"ax-font-semibold\">{{nodeConfig()?.title}}</span>\n </div>\n </div>\n <axp-widget-property-viewer [widget]=\"service.selectedNode()!\"\n (onChanged)=\"service.update({ values: $event.values,mode:$event.mode})\" class=\"ax-w-1/4\">\n </axp-widget-property-viewer>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i3","merge"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-layout-designer.mjs","sources":["../../../../libs/platform/layout/designer/src/lib/history-manager.service.ts","../../../../libs/platform/layout/designer/src/lib/designer.service.ts","../../../../libs/platform/layout/designer/src/lib/widget-designer-renderer.component.ts","../../../../libs/platform/layout/designer/src/lib/board/board.component.ts","../../../../libs/platform/layout/designer/src/lib/board/board.component.html","../../../../libs/platform/layout/designer/src/lib/buttons/add-widget-button/add-widget-button.component.ts","../../../../libs/platform/layout/designer/src/lib/designer.module.ts","../../../../libs/platform/layout/designer/src/lib/breadcrumbs/breadcrumbs.component.ts","../../../../libs/platform/layout/designer/src/lib/header-menu/header-menu.component.ts","../../../../libs/platform/layout/designer/src/lib/header-menu/header-menu.component.html","../../../../libs/platform/layout/designer/src/lib/outline/outline.component.ts","../../../../libs/platform/layout/designer/src/lib/outline/outline.component.html","../../../../libs/platform/layout/designer/src/lib/property-viewer/widget-property-viewer.component.ts","../../../../libs/platform/layout/designer/src/lib/property-viewer/widget-property-viewer.component.html","../../../../libs/platform/layout/designer/src/lib/history/history.component.ts","../../../../libs/platform/layout/designer/src/lib/history/history.component.html","../../../../libs/platform/layout/designer/src/lib/designer/designer.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/designer.component.html","../../../../libs/platform/layout/designer/src/acorex-platform-layout-designer.ts"],"sourcesContent":["import { Injectable, signal, computed } from '@angular/core';\nimport { cloneDeep } from 'lodash-es';\n\nexport interface AXPHistoryState<T> {\n state: T;\n date: Date;\n description: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPObjectHistoryManager<T> {\n private readonly undoStack = signal<AXPHistoryState<T>[]>([]); // Undo history as a signal\n private readonly redoStack = signal<AXPHistoryState<T>[]>([]); // Redo history as a signal\n private readonly _currentState = signal<AXPHistoryState<T> | null>(null); // Current state as a signal\n private maxHistorySize: number = 50;\n private revertedIndex: number | null = null; // Track the index when reverting\n\n public readonly currentState = this._currentState.asReadonly();\n\n public canUndo = computed<boolean>(() => this.undoStack().length > 0);\n public canRedo = computed<boolean>(() => this.redoStack().length > 0);\n\n // Save a new state and clear redo if necessary\n public saveState(newState: T, description: string): void {\n const newHistoryState: AXPHistoryState<T> = {\n state: cloneDeep(newState),\n date: new Date(),\n description: description,\n };\n\n // Limit undo history size\n if (this.undoStack().length >= this.maxHistorySize) {\n this.undoStack.set(this.undoStack().slice(1)); // Remove oldest state\n }\n\n // Add the current state to the undo stack\n //if (this._currentState()) {\n this.undoStack.set([...this.undoStack(), this._currentState()!]);\n //}\n\n // Set the new state as the current state\n this._currentState.set(newHistoryState);\n\n // Clear the redo stack if a new state is saved after undoing\n if (this.revertedIndex !== null) {\n this.redoStack.set([]);\n this.revertedIndex = null; // Reset reverted index\n }\n }\n\n // Update the current state's last entry in the undo stack\n public updateState(newState: T): void {\n const lastStateIndex = this.undoStack().length - 1;\n\n // Check if there is a valid state to update\n if (lastStateIndex >= 0) {\n const lastState = this.undoStack()[lastStateIndex];\n\n // Update the state in the last history entry\n const updatedState: AXPHistoryState<T> = {\n ...lastState,\n state: cloneDeep(newState),\n date: new Date() // Update the date to reflect the change\n };\n\n // Update the undo stack with the modified state\n const updatedUndoStack = [...this.undoStack()];\n updatedUndoStack[lastStateIndex] = updatedState;\n this.undoStack.set(updatedUndoStack);\n\n // Also update the currentState to reflect the latest change\n this._currentState.set(updatedState);\n }\n }\n\n // Undo the last action and update the current state\n public undo(): void {\n if (this.undoStack().length > 0) {\n const previousState = this.undoStack().pop()!; // Get the last state\n this.redoStack.set([...this.redoStack(), this._currentState()!]); // Save current state to redo stack\n this._currentState.set(previousState); // Revert to the previous state\n this.revertedIndex = this.undoStack().length - 1; // Update reverted index\n }\n }\n\n // Redo the last undone action and update the current state\n public redo(): void {\n if (this.redoStack().length > 0) {\n const nextState = this.redoStack().pop()!; // Get the next state\n this.undoStack.set([...this.undoStack(), this._currentState()!]); // Save current state to undo stack\n this._currentState.set(nextState); // Apply the redo state\n this.revertedIndex = this.undoStack().length - 1; // Update reverted index\n }\n }\n\n // Revert to a specific state by index in the undo stack\n public revert(index: number): void {\n if (index < 0 || index >= this.undoStack().length) {\n return; // Invalid index, do nothing\n }\n\n const targetState = this.undoStack()[index];\n const currentStateSnapshot = this._currentState(); // Save the current state for redo\n\n // Move states after the reverted index to the redo stack\n const statesToRedo = this.undoStack().slice(index + 1);\n this.redoStack.set([currentStateSnapshot!, ...statesToRedo]);\n\n // Update the undo stack to the reverted point\n this.undoStack.set(this.undoStack().slice(0, index + 1));\n\n // Set the reverted state as the current state\n this._currentState.set(targetState);\n this.revertedIndex = index; // Track the reverted index\n }\n\n // Get the undo history for UI with disabled future states\n public history = computed(() => {\n const undoHistory = this.undoStack();\n return undoHistory.map((state, index) => ({\n ...state,\n index,\n disabled: this.revertedIndex !== null && index > this.revertedIndex\n }));\n });\n\n\n\n // Clear all history\n public clear(): void {\n this.undoStack.set([]);\n this.redoStack.set([]);\n this.revertedIndex = null;\n this._currentState.set(null);\n }\n}","import { AXPopupService } from '@acorex/components/popup';\nimport { AXPWidgetComponent, AXPWidgetConfig, AXPWidgetNode, AXPWidgetRegistryService, AXPWidgetRenderMode } from '@acorex/platform/layout/builder';\nimport { computed, inject, Injectable, signal } from '@angular/core';\nimport { cloneDeep, get, merge, set, sortBy } from 'lodash-es';\nimport { Subject } from 'rxjs';\nimport { AXPObjectHistoryManager } from './history-manager.service';\n\nexport type AXPDesignerPreviewSize = 'sm' | 'md' | 'lg' | 'xl' | 'xxl';\n\n\nexport interface AXPDesignerFocusCommand {\n widget: AXPWidgetNode | null,\n}\n\nexport interface AXPDesignerUpdateCommand {\n values: any;\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: AXPWidgetComponent,\n}\n\nexport interface AXPDesignerSelectEvent {\n widget: AXPWidgetNode,\n}\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\n private popupService = inject(AXPopupService);\n private widgetRegisteryService = inject(AXPWidgetRegistryService);\n\n private readonly historyManager = inject(AXPObjectHistoryManager<AXPWidgetNode>);\n\n\n\n private clipboard = signal<AXPWidgetNode | null>(null);\n public canCutCopy = computed(() => this.selectedNode() != null && this.selectedNode()?.name != \"page\");\n public canPaste = computed(() => (this.clipboard() != null));\n\n\n public readonly history = computed(() => this.historyManager.history());\n public readonly canUndo = computed(() => this.historyManager.canUndo());\n public readonly canRedo = computed(() => this.historyManager.canRedo());\n\n\n public readonly root = signal(this.createPage());\n\n public breadcrumbs = computed<AXPWidgetNode[]>(() => {\n return this.selectedNode() ? this.findBreadcrumbs(this.root(), this.selectedNode()!) ?? [] : [];\n });\n\n public selectedNode = signal<AXPWidgetNode | null>(null);\n\n private _lastSelectedNode: AXPWidgetNode | null = null;\n\n private _focusedNode: AXPWidgetNode | null = null;\n public focusedNode = () => this._focusedNode;\n\n public readonly mode = signal<AXPWidgetRenderMode>('designer');\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\n public register(command: AXPDesignerRegisterCommand): void {\n if (!this._lastSelectedNode) {\n this.select({ widget: command.widget });\n }\n else {\n this.select({ widget: this._lastSelectedNode });\n }\n }\n\n public select(command: AXPDesignerSelectCommand): void {\n this.selectedNode.set(command.widget);\n this._lastSelectedNode = this.selectedNode();\n this.onSelected.next(command);\n }\n\n public update(command: AXPDesignerUpdateCommand): void {\n if (command.mode == 'update') {\n this.historyManager.saveState(cloneDeep(this.root()), `Updated ${this.selectedNode()?.name}`);\n }\n this.selectedNode.update(c => merge(this.selectedNode(), command.values));\n this.onUpdate.next({ widget: this.selectedNode()!, values: command.values });\n }\n\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 }\n\n\n private findBreadcrumbs(\n node: AXPWidgetNode,\n targetNode: AXPWidgetNode,\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\n async showPicker(currentNode: AXPWidgetNode): Promise<void> {\n const com = await import('./widget-picker/widget-picker.component').then(c => c.AXPDesignerWidgetPickerComponent);\n const result = await this.popupService.open(com, {\n title: \"Widget Gallery\",\n size: 'md',\n closeButton: true,\n data: {\n widgets: sortBy(this.widgetRegisteryService.all().filter(c => c.visible != false), c => c.title)\n }\n })\n\n if ((result.data?.widgets ?? []).length) {\n const selected = result.data?.widgets as AXPWidgetConfig[];\n selected.forEach(c => {\n this.addWidget(currentNode, { type: c.name });\n });\n }\n\n }\n\n private createPage(): AXPWidgetNode {\n const config = this.widgetRegisteryService.resolve('page');\n\n const page: AXPWidgetNode = {\n type: 'page',\n children: [],\n name: \"page\",\n }\n\n set(page, '__meta__.id', Math.random() * Math.pow(10, 18));\n set(page, '__meta__.config', config);\n this.historyManager.saveState(page, \"New\");\n return page;\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.root()): 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: boolean = 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.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.container) {\n return child;\n }\n const foundContainer = this.findNearestContainer(child, false); // Continue searching downwards\n if (foundContainer) return foundContainer;\n }\n }\n }\n return null; // Return null if no container found\n }\n\n addWidget(currentNode: AXPWidgetNode, node: AXPWidgetNode): AXPWidgetNode | null {\n if (!currentNode)\n return null;\n //\n const cloned = cloneDeep(node);\n this.historyManager.saveState(cloneDeep(this.root()), `Added ${cloned.type}`);\n //\n if (!currentNode.children) {\n currentNode.children = [];\n }\n\n const config = this.widgetRegisteryService.resolve(node.type);\n //\n cloned.name = this.generateUniqueName(node.type);\n set(cloned, '__meta__.id', Math.random() * Math.pow(10, 18));\n set(cloned, '__meta__.config', config);\n //\n currentNode.children.push(cloned);\n //\n this.historyManager.updateState(this.root());\n //\n this.refresh({ widget: currentNode });\n this.select({ widget: cloned });\n return cloned;\n }\n\n public removeWidget(node: AXPWidgetNode): void {\n if (node.type === \"page\") {\n console.error(\"Cannot remove the page node.\");\n return; // Prevent removing the root page node\n }\n\n this.historyManager.saveState(cloneDeep(this.root()), `Removed ${node.name}`);\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.root());\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 index = parent.children?.findIndex(child => get(child, \"__meta__.id\") === nodeIdToRemove) ?? -1;\n if (index > -1) {\n parent.children!.splice(index, 1);\n //\n this.historyManager.updateState(this.root());\n //\n this.refresh({ widget: parent }); // Refresh the UI to reflect changes\n this.select({ widget: parent }); // Select the parent node after removal\n } else {\n throw new Error(\"Node to remove not found in the widget tree.\");\n }\n }\n\n public revertToChange(index: number): void {\n this.historyManager.revert(index);\n this.root.set(this.historyManager.currentState()?.state);\n this.refresh({ widget: this.root() });\n }\n\n public redo() {\n if (this.historyManager.canRedo()) {\n this.historyManager.redo();\n this.root.set(this.historyManager.currentState()?.state);\n this.refresh({ widget: this.root() });\n }\n }\n\n public undo() {\n if (this.historyManager.canUndo()) {\n this.historyManager.undo();\n this.root.set(this.historyManager.currentState()?.state);\n this.refresh({ widget: this.root() });\n }\n }\n\n\n private formatOutputJSON(obj: any, nodeName: string): any {\n // Check if the object is an array\n if (Array.isArray(obj)) {\n return obj.map(item => this.formatOutputJSON(item, nodeName));\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.formatOutputJSON(obj[key], nodeName);\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\n public copy(widget: AXPWidgetNode | null = this.selectedNode()): void {\n if (!widget)\n return;\n this.clipboard.set(cloneDeep(widget)); // Use lodash's cloneDeep to ensure a deep copy\n }\n\n public cut(widget: AXPWidgetNode | null = this.selectedNode()): void {\n if (!widget)\n return;\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 paste(parentNode: AXPWidgetNode = this.selectedNode() ?? this.root()): void {\n if (!this.clipboard() || !this.selectedNode()) {\n console.error(\"Clipboard is empty or no node is selected.\");\n return;\n }\n const newNode = cloneDeep(this.clipboard())!;\n const nearestContainer = this.findNearestContainer(parentNode, true);\n if (!nearestContainer) {\n console.error(\"No suitable container found.\");\n return;\n }\n //\n this.historyManager.saveState(newNode, `Pasted ${newNode.name}`); // Prepare for undo functionality\n //\n if (!nearestContainer.children) {\n nearestContainer.children = [];\n }\n\n\n set(newNode, \"__meta__.id\", Math.random() * Math.pow(10, 18)); // Ensure a unique ID\n //\n nearestContainer.children.push(newNode); // Add the new node to the container\n //\n this.historyManager.updateState(this.root());\n //\n this.refresh({ widget: nearestContainer }); // Refresh the UI\n this.select({ widget: newNode }); // Select the newly pasted node\n }\n\n\n export(): string {\n const json = this.formatOutputJSON(this.root(), \"__meta__\");\n return JSON.stringify(json);\n }\n\n download() {\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\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\n /**\n * Generates a well-formed, unique name for a new widget node based on its type.\n * @param type The type of the widget (e.g., 'textBox', 'numberBox').\n * @returns A unique name for the widget (e.g., 'textBox1', 'numberBox2').\n */\n private generateUniqueName(type: string): string {\n // Normalize the type to follow camelCase convention\n const baseName = type.charAt(0).toLowerCase() + type.slice(1);\n let index = 1;\n let uniqueName = `${baseName}${index}`;\n\n // Gather all existing names to check against\n const existingNames = new Set<string>();\n this.collectAllNames(this.root(), existingNames);\n\n // Increment the index until a unique name is found\n while (existingNames.has(uniqueName)) {\n index++;\n uniqueName = `${baseName}${index}`;\n }\n\n return uniqueName;\n }\n\n /**\n * Collects all existing widget names from the widget tree.\n * @param node The current node being inspected.\n * @param names A set to store existing names.\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}","import { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport {\n AXP_WIDGET_TOKEN,\n AXPWidgetComponent,\n AXPWidgetConfig,\n AXPWidgetNode,\n AXPWidgetNodeToken,\n AXPWidgetRegistryService,\n AXPWidgetRenderMode,\n} from '@acorex/platform/layout/builder';\nimport { CdkPortalOutletAttachedRef, ComponentPortal, PortalModule } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n effect,\n ElementRef,\n HostListener,\n inject,\n Injector,\n input,\n NgZone,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { cloneDeep, get, isEmpty, merge, set } from 'lodash-es';\nimport { first } from 'rxjs';\nimport { AXPDesignerService } from './designer.service';\n\n@Component({\n selector: 'axp-widget-designer-renderer',\n template: `\n @if(mergedOptions().isVisible!=false) { @if(isLoading()){\n <ax-skeleton [animated]=\"true\" class=\"ax-w-full lg:ax-w-[50%] ax-h-8 ax-rounded\"></ax-skeleton>\n } @else {\n <ng-container *ngTemplateOutlet=\"tt\"></ng-container>\n } }\n <ng-template #tt>\n <ng-template [cdkPortalOutlet]=\"portal\" (attached)=\"handleAttached($event)\"></ng-template>\n </ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule, PortalModule, AXSkeletonModule, CommonModule],\n providers: [\n {\n provide: AXUnsubscriber,\n },\n ],\n host: { class: 'axp-widget-host' },\n})\nexport class AXPWidgetDesignerRendererComponent {\n protected mergedOptions: WritableSignal<any> = signal<any>({});\n\n private injector = inject(Injector);\n protected widgetRegistery = inject(AXPWidgetRegistryService);\n protected unsubscriber = inject(AXUnsubscriber);\n protected zone = inject(NgZone);\n\n protected isLoading = signal(true);\n private instance!: AXPWidgetComponent;\n private config?: AXPWidgetConfig | undefined;\n protected portal!: ComponentPortal<any>;\n\n private service = inject(AXPDesignerService);\n private elementRef = inject(ElementRef);\n\n parentNode = input<AXPWidgetComponent | null>();\n\n index = input<number | null>();\n\n mode = input.required<AXPWidgetRenderMode>();\n node = input.required<AXPWidgetNode>();\n\n private hostElement = () => this.elementRef.nativeElement as HTMLDivElement;\n private isCurrentWidget = (w: AXPWidgetNode) => get(w, '__meta__.id') == get(this.node(), '__meta__.id');\n\n /**\n * @ignore\n */\n constructor() {\n this.service.onUpdate.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {\n if (this.isCurrentWidget(c.widget)) {\n this.applyOptions(c.values?.options);\n }\n });\n //\n this.service.onSelected.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {\n this.zone.runOutsideAngular(() => {\n if (this.isCurrentWidget(c.widget)) {\n this.hostElement()?.classList.add('axp-state-selected');\n } else {\n this.hostElement()?.classList.remove('axp-state-selected');\n }\n });\n });\n //\n this.service.onFocused.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {\n if (c.widget && this.isCurrentWidget(c.widget)) {\n this.addOverlay();\n } else {\n this.removeOverlay();\n }\n });\n //\n this.service.onRefresh.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {\n if (this.isCurrentWidget(c.widget)) {\n this.instance.setChildren(this.node().children ?? []);\n }\n });\n //\n effect(\n async () => {\n await this.loadComponent();\n },\n { allowSignalWrites: true }\n );\n }\n\n private async loadComponent() {\n this.isLoading.set(true);\n this.config = this.widgetRegistery.resolve(this.node().type);\n //\n const props = this.config?.components[this.mode()]?.properties\n ?.filter((c) => c.schema.defaultValue)\n .map((c) => ({ [c.name]: c.schema.defaultValue }))\n .reduce((acc, curr) => {\n return { ...acc, ...curr };\n }, {});\n //\n this.mergedOptions.set(merge(props, this.node().options) || {});\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: 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 var com = await this.config?.components[this.mode()]?.component();\n this.portal = new ComponentPortal(com, null, token);\n this.isLoading.set(false);\n }\n\n protected async handleAttached(portalOutletRef: CdkPortalOutletAttachedRef) {\n portalOutletRef = portalOutletRef as ComponentRef<AXPWidgetComponent>;\n this.instance = portalOutletRef.instance as AXPWidgetComponent;\n this.instance.parent = this.parentNode();\n this.instance.index = this.index();\n this.instance.mode = this.mode();\n //\n this.instance.onReady.pipe(first()).subscribe(() => {\n if (this.mode() == 'designer') {\n this.hostElement()?.addEventListener('mouseover', (e) => {\n e.stopPropagation();\n this.service.focus({ widget: this.node() });\n });\n this.hostElement()?.addEventListener('mouseleave', (e) => {\n e.stopPropagation();\n this.service.focus({ widget: null });\n });\n\n this.hostElement()?.addEventListener('click', (e) => {\n e.stopPropagation();\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 }\n\n private overlay: HTMLElement | null;\n\n private addOverlay() {\n this.zone.runOutsideAngular(() => {\n //console.log('add', this.node().type);\n if (this.hostElement()) {\n this.hostElement()?.classList.add('axp-state-hover');\n //\n if (this.hostElement().querySelector('.axp-widget-overlay') || this.config?.container) return;\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.service.select({ widget: this.node() });\n });\n this.overlay.addEventListener('mouseleave', (e) => {\n e.preventDefault();\n e.stopPropagation();\n this.service.focus({ widget: null });\n });\n this.hostElement().appendChild(this.overlay);\n }\n });\n }\n\n private removeOverlay() {\n //console.log('remove', this.node().type);\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 preprocessAndInitialOptions(obj: any, pathPrefix: string = ''): void {\n if (!obj) return;\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.node().defaultValue != null) {\n this.instance.setValue(this.node().defaultValue);\n }\n this.mergedOptions.update((currentOptions) => {\n return merge(currentOptions, values);\n });\n this.instance?.setOptions(this.mergedOptions());\n }\n\n @HostListener('document:keydown', ['$event'])\n async onKeydownHandler(event: KeyboardEvent) {\n if (this.service.selectedNode() && this.isCurrentWidget(this.service.selectedNode()!)) {\n // handle delete\n if (event.key == \"Delete\") {\n event.preventDefault();\n event.stopPropagation();\n this.service.removeWidget(this.node());\n }\n //\n // handle delete\n if (this.config?.container && event.key == \"Insert\") {\n this.service.showPicker(this.node());\n }\n }\n }\n}\n","import { AXPLayoutBuilderModule } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport { Component, inject, ViewEncapsulation, HostBinding, ChangeDetectionStrategy, HostListener, computed, effect, ElementRef } from '@angular/core';\nimport { AXPWidgetDesignerRendererComponent } from '../widget-designer-renderer.component';\nimport { AXPDesignerService } from '../designer.service';\nimport { get } from 'lodash-es';\n\n\n@Component({\n selector: 'axp-designer-board',\n templateUrl: './board.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n AXPLayoutBuilderModule,\n AXPWidgetDesignerRendererComponent\n ],\n})\nexport class AXPDesignerBoardComponent {\n\n protected context: any = {};\n private elementRef = inject(ElementRef<HTMLDivElement>) as ElementRef<HTMLDivElement>;\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 (let sheet of Array.from(document.styleSheets)) {\n try {\n // Loop through CSS rules\n for (let 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 (let 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\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\n private ef = effect(() => {\n this.removeCustomClass();\n if (this.service.size() != 'xl') {\n this.applyResponsiveStyles(this.service.size());\n }\n });\n\n\n @HostListener('document:keydown', ['$event'])\n private handleKeyboardEvent(event: KeyboardEvent) {\n if (event.ctrlKey) {\n switch (event.key.toLowerCase()) { // Convert the key to lowercase to ensure case insensitivity\n case 'z':\n event.preventDefault(); // Prevent the browser's default undo action\n this.service.undo();\n break;\n case 'y':\n event.preventDefault(); // Prevent the browser's default redo action\n this.service.redo();\n break;\n case 'c':\n if (this.service.canCutCopy()) {\n event.preventDefault(); // Prevent the browser's default copy action\n this.service.copy();\n }\n break;\n case 'x':\n if (this.service.canCutCopy()) {\n event.preventDefault(); // Prevent the browser's default cut action\n this.service.cut();\n }\n break;\n case 'v':\n if (this.service.canPaste()) {\n event.preventDefault(); // Prevent the browser's default paste action\n this.service.paste();\n }\n break;\n }\n }\n }\n\n}\n","<div class=\"axp-designer-board axp-state-design axp-preview-{{service.size()}}\" [style.width]=\"width()\">\n <axp-widgets-container [(context)]=\"context\">\n <axp-widget-designer-renderer [node]=\"service.root()\" [mode]=\"service.mode()\">\n </axp-widget-designer-renderer>\n </axp-widgets-container>\n</div>","import { AXButtonModule } from '@acorex/components/button';\nimport { AXClickEvent } from '@acorex/components/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPContainerWidgetComponent } from '@acorex/platform/layout/builder';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXPDesignerService } from '../../designer.service';\n\n@Component({\n selector: 'axp-designer-add-widget-button',\n styleUrls: ['./add-widget-button.component.scss'],\n template: `\n <div class=\"ax-container ax-mx-auto\">\n <ax-button [text]=\"'Add New Element'\" (onClick)=\"handleClick($event)\" [look]=\"'twotone'\">\n <ax-icon icon=\"fa-solid fa-plus\"></ax-icon>\n </ax-button>\n </div>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXButtonModule, AXDecoratorModule],\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPDesignerAddWidgetButtonComponent {\n private designerService = inject(AXPDesignerService);\n private parent = inject(AXPContainerWidgetComponent);\n\n async handleClick(e: AXClickEvent) {\n e.nativeEvent.stopPropagation();\n await this.designerService.showPicker(this.parent.node);\n }\n}\n","import { NgModule } from \"@angular/core\";\n\n@NgModule({\n imports: [],\n exports: [],\n declarations: [],\n})\nexport class AXPDesignerModule {\n}\n","import { AXPLayoutBuilderModule, AXPWidgetNode } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { AXPDesignerService } from '../designer.service';\nimport { get } from 'lodash-es';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\n\n@Component({\n selector: 'axp-designer-breadcrumbs',\n template: `\n <ax-breadcrumbs class=\"ax-text-white\">\n @for( b of service.breadcrumbs();track $index){\n <ax-breadcrumbs-item>\n <a (click)=\"handleClick(b)\" (mouseover)=\"handleMouseOver(b)\"> {{getTitle(b)}}</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 standalone: true,\n imports: [\n CommonModule,\n AXPLayoutBuilderModule,\n AXBreadcrumbsModule,\n AXDecoratorModule\n ],\n})\n\nexport class AXPDesignerBreadcrumbsComponent {\n\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}","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { CommonModule } from '@angular/common';\nimport { Component, inject, OnInit } from '@angular/core';\nimport { AXPDesignerService } from '../designer.service';\n\n@Component({\n standalone: true,\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXMenuModule,\n ],\n selector: 'axp-designer-header-menu',\n templateUrl: 'header-menu.component.html'\n})\n\nexport class AXPDesignerHeaderMenuComponent {\n protected service = inject(AXPDesignerService);\n}","<ax-menu [openOn]=\"'hover'\">\n <ax-menu-item text=\"Home\">\n <ax-menu-item text=\"New\"></ax-menu-item>\n <ax-menu-item text=\"Export\">\n <ax-menu-item text=\"Download JSON\" (onClick)=\"service.download()\">\n </ax-menu-item>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item text=\"Edit\">\n <ax-menu-item text=\"Undo\" [disabled]=\"!service.canUndo()\" (onClick)=\"service.undo()\">\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-rotate-left\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text>\n Ctrl+Z\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item text=\"Redo\" [disabled]=\"!service.canRedo()\" (onClick)=\"service.redo()\">\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-text>\n Ctrl+Y\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n <ax-menu-item text=\"Cut\" [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.cut()\">\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-text>\n Ctrl+X\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item text=\"Copy\" [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.copy()\">\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-text>\n Ctrl+C\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item text=\"Paste\" [disabled]=\"!service.canPaste()\" (onClick)=\"service.paste()\">\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-text>\n Ctrl+V\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item text=\"Help\">\n <ax-menu-item text=\"About\"></ax-menu-item>\n </ax-menu-item>\n</ax-menu>","import { AXPLayoutBuilderModule, AXPWidgetConfig, AXPWidgetNode } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, OnInit, signal, ViewEncapsulation } from '@angular/core';\nimport { AXPDesignerService } from '../designer.service';\nimport { get } from 'lodash-es';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { merge } from 'rxjs';\n\n@Component({\n selector: 'axp-designer-outline',\n templateUrl: 'outline.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n AXPLayoutBuilderModule,\n AXDecoratorModule,\n ],\n})\n\nexport class AXPDesignerOutlineComponent {\n\n protected service = inject(AXPDesignerService);\n\n protected collapsedStates: Map<any, boolean> = new Map();\n\n protected root = signal(this.service.root());\n\n constructor() {\n merge(this.service.onRefresh, this.service.onUpdate)\n .subscribe(() => {\n this.root.update(c => ({ ...this.service.root() }));\n })\n }\n\n\n private toggleCollapse(node: any) {\n // Toggle the current state or set to true if undefined\n this.collapsedStates.set(node, !this.collapsedStates.get(node));\n }\n\n protected isCollapsed(node: any): boolean {\n // Return the collapsed state, default is false (expanded)\n return !!this.collapsedStates.get(node);\n }\n\n protected getConfig(node: AXPWidgetNode): AXPWidgetConfig {\n return get(node, \"__meta__.config\") as any as AXPWidgetConfig;\n }\n\n protected handleClick(e: MouseEvent, node: AXPWidgetNode) {\n e.stopPropagation();\n this.service.select({ widget: node });\n }\n\n protected handleToggleClick(event: MouseEvent, item: any): void {\n event.stopPropagation(); // Prevents the event from bubbling up to parent elements\n this.toggleCollapse(item);\n }\n\n protected handleMouseOver(e: MouseEvent, node: AXPWidgetNode) {\n e.stopPropagation();\n this.service.focus({ widget: node });\n }\n}","<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-p-2 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <span class=\"ax-font-semibold\">Outline</span>\n </div>\n <ax-close-button></ax-close-button>\n </div>\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n\n @if(root().children?.length)\n {\n <ul class=\"ax-text-white ax-text-sm ax-bg-gray-800 ax-p-2 ax-rounded-md ax-space-y-1\">\n @for( node of root().children;track $index)\n {\n <ng-container [ngTemplateOutlet]=\"sideMenu\" [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n }\n </ul>\n <ng-template #sideMenu let-item>\n <li class=\"ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700\"\n (click)=\"handleClick($event,item)\" (mouseover)=\"handleMouseOver($event,item)\">\n <div [class.ax-bg-blue-200]=\"item === service.selectedNode()\"\n [class.ax-text-blue-900]=\"item === service.selectedNode()\"\n class=\"ax-flex ax-flex-row ax-items-center ax-p-1 ax-px-2\">\n <span class=\"ax-w-5\">\n @if(item.children?.length)\n {\n <i class=\"fa-solid\" [class.fa-chevron-right]=\"isCollapsed(item)\"\n (click)=\"handleToggleClick($event, item)\" [class.fa-chevron-down]=\"!isCollapsed(item)\"></i>\n }\n </span>\n @let config= getConfig(item);\n <span class=\"ax-w-5\">\n @if(config.icon)\n {\n <i [ngClass]=\"config.icon\"></i>\n }\n </span>\n <span>{{config.title}} : {{item.name}}</span>\n </div>\n @if(item.children?.length && !isCollapsed(item)) {\n <ul class=\"ax-pl-5 ax-space-y-1\">\n <ng-container *ngFor=\"let child of item.children\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\">\n </ng-container>\n </ul>\n }\n </li>\n </ng-template>\n }\n @else {\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">No widgets found in the page\n </div>\n }\n </div>\n</div>","import { AXCollapseModule } from '@acorex/components/collapse';\nimport { AXTabsModule, AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport { AXPLayoutBuilderModule, AXPLayoutContextEvent, AXPWidgetConfig, AXPWidgetNode, AXPWidgetProperty, AXPWidgetRegistryService } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\n\nimport { ChangeDetectionStrategy, Component, computed, effect, EventEmitter, inject, Input, input, model, Output, signal, untracked, WritableSignal } from '@angular/core';\nimport { capitalize, cloneDeep, get, isArray, isEmpty, isNil, merge, set, sortBy, unionBy } from 'lodash-es';\n\nexport interface AXPWidgetPropertyTab {\n name: string;\n title: string;\n groups: {\n name: string;\n title: string;\n isCollapsed: boolean;\n props: AXPWidgetProperty[];\n }[];\n}\n\n\nexport interface AXPWidgetPropertiesChangedEvent {\n values: any,\n mode: 'init' | 'update'\n}\n\n@Component({\n selector: 'axp-widget-property-viewer',\n templateUrl: './widget-property-viewer.component.html',\n styleUrls: ['./widget-property-viewer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule, AXCollapseModule, AXTabsModule, AXPLayoutBuilderModule],\n})\nexport class AXPWidgetPropertyViewerComponent {\n widget = input.required<AXPWidgetNode>();\n\n private widgetRegistryService = inject(AXPWidgetRegistryService);\n\n protected currentTabIndex: WritableSignal<number> = signal(0);\n\n protected config = signal<AXPWidgetConfig | null>(null);\n protected allPoperties: AXPWidgetProperty[] = [];\n\n protected tabs = signal<AXPWidgetPropertyTab[]>([]);\n\n protected groups = computed(() => {\n return this.tabs().length ? this.tabs()[this.currentTabIndex()].groups : [];\n });\n\n\n @Output()\n onChanged = new EventEmitter<AXPWidgetPropertiesChangedEvent>();\n\n protected context = signal<any>({});\n\n\n protected initialContext: any = {};\n\n constructor() {\n effect(\n () => {\n if (!this.widget())\n return\n const config = this.widgetRegistryService.resolve(this.widget()?.type);\n if (config) {\n this.initialContext = {};\n this.config.set(config);\n this.fillTabs();\n } else {\n console.error(`Invalid widget name: ${this.widget()}`);\n }\n },\n { allowSignalWrites: true }\n );\n }\n\n private fillTabs() {\n const tabs: AXPWidgetPropertyTab[] = [\n {\n name: 'general',\n title: 'General',\n groups: [],\n },\n ];\n Object.entries(this.config()?.components ?? {}).forEach((c) => {\n if (c[1].component != null && c[1].properties?.length) {\n tabs.push({ name: c[0], title: capitalize(c[0]), groups: [] });\n }\n });\n ///\n this.allPoperties = [];\n ///\n tabs.forEach((tab) => {\n const props =\n tab.name == 'general'\n ? this.config()?.properties ?? []\n : (((this.config()?.components as any)[tab.name]?.properties as AXPWidgetProperty[]) ?? []).filter((c) => c.visible);\n //\n this.allPoperties.push(...props);\n tab.groups = unionBy(\n sortBy(\n props.map((pg) => ({\n isCollapsed: false,\n name: pg.group.name,\n title: pg.group.title,\n props: sortBy(\n props.filter((p) => p.group.name == pg.group.name),\n 'title'\n ),\n })),\n 'title'\n ),\n 'name'\n );\n });\n this.tabs.set(tabs.filter((c) => c.groups.length));\n //\n this.initialContext = this.allPoperties\n .filter(\n (c) =>\n (!isArray(c.schema.defaultValue) && !isNil(c.schema.defaultValue)) || (isArray(c.schema.defaultValue) && !isEmpty(c.schema.defaultValue))\n )\n .reduce((acc, c) => {\n set(acc, c.schema.interface.path, c.schema.defaultValue); // Use lodash's set\n return acc;\n }, {});\n //\n untracked(() => {\n this.context.set(merge(cloneDeep(this.initialContext), this.widget()));\n this.onChanged.emit({ values: this.context(), mode: 'init' });\n });\n }\n\n protected handleContextChange(e: AXPLayoutContextEvent) {\n untracked(() => {\n this.context.set(e.data);\n });\n this.onChanged.emit({ values: this.context(), mode: 'update', });\n }\n\n protected handleTabChange(event: AXTabStripChangedEvent): void {\n const indx = event.index;\n if (this.currentTabIndex() != indx) {\n this.currentTabIndex.set(indx);\n }\n }\n}\n","<axp-widgets-container [context]=\"context()\" (onChanged)=\"handleContextChange($event)\">\n <div class=\"ax-flex ax-flex-col\">\n <div class=\"ax-pb-2\">\n <ax-tabs look=\"default\" (onActiveTabChanged)=\"handleTabChange($event)\" [look]=\"'with-line'\">\n @for( tab of tabs();track $index){\n <ax-tab-item [text]=\"tab.title\" [key]=\"$index.toString()\" [active]=\"currentTabIndex() === $index\">\n </ax-tab-item>\n }\n </ax-tabs>\n </div>\n <div class=\"ax-flex-1 ax-overflow-auto\">\n <ax-collapse-group class=\"ax-h-fit\" look=\"blank\">\n @for( group of groups();track $index){\n <ax-collapse [caption]=\"group.title\" look=\"solid\" [(isCollapsed)]=\"group.isCollapsed\">\n <div class=\"ax-flex ax-flex-col ax-divide-y\">\n @for( p of group.props;track $index){\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-py-2 first:ax-pt-0 last:ax-pb-0\">\n <span class=\"ax-font-semibold\">{{p.title}}</span>\n @if(p.schema.interface)\n {\n <axp-widget-renderer [node]=\"p.schema.interface\" [mode]=\"'edit'\">\n </axp-widget-renderer>\n }\n </div>\n }\n </div>\n </ax-collapse>\n }\n </ax-collapse-group>\n </div>\n </div>\n</axp-widgets-container>","import { AXPLayoutBuilderModule, AXPWidgetConfig, AXPWidgetNode } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, OnInit, signal, ViewEncapsulation } from '@angular/core';\nimport { AXPDesignerService } from '../designer.service';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\n\n@Component({\n selector: 'axp-designer-history',\n templateUrl: 'history.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n AXDecoratorModule,\n ],\n})\n\nexport class AXPDesignerHistoryComponent {\n protected service = inject(AXPDesignerService);\n}","<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\n <!-- Header -->\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-p-2 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <span class=\"ax-font-semibold\">History</span>\n </div>\n <ax-close-button></ax-close-button>\n </div>\n\n <!-- History List or Empty State -->\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n @if(service.history().length)\n {\n <!-- History Items -->\n <ul class=\"ax-space-y-2 ax-p-2 ax-text-white ax-text-sm\">\n @for (step of service.history(); track $index) {\n <li (click)=\"service.revertToChange($index)\"\n class=\"ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700\">\n {{ step.description }} {{step.disabled}}\n </li>\n }\n </ul>\n }\n @else {\n <!-- No History Found -->\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">\n No changes have been made yet.\n </div>\n }\n </div>\n</div>","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 { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXPLayoutBuilderModule, AXPWidgetConfig } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, HostBinding, inject, ViewEncapsulation } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { AXPDesignerBoardComponent } from '../board/board.component';\nimport { AXPDesignerBreadcrumbsComponent } from '../breadcrumbs/breadcrumbs.component';\nimport { AXPDesignerService } from '../designer.service';\nimport { AXPDesignerHeaderMenuComponent } from '../header-menu/header-menu.component';\nimport { AXPDesignerOutlineComponent } from '../outline/outline.component';\nimport { AXPWidgetPropertyViewerComponent } from '../property-viewer/widget-property-viewer.component';\nimport { AXPDesignerHistoryComponent } from '../history/history.component';\n\n@Component({\n selector: 'axp-layout-designer',\n templateUrl: './designer.component.html',\n styleUrls: ['./designer.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [\n CommonModule,\n AXPLayoutBuilderModule,\n AXPDesignerBoardComponent,\n AXPWidgetPropertyViewerComponent,\n AXPDesignerBreadcrumbsComponent,\n AXPDesignerOutlineComponent,\n AXPDesignerHeaderMenuComponent,\n AXPDesignerHistoryComponent,\n AXTabsModule,\n AXButtonModule,\n AXDrawerModule,\n AXDecoratorModule,\n AXMenuModule,\n AXButtonGroupModule,\n AXDropdownModule,\n ],\n providers: [AXPDesignerService],\n})\nexport class AXPLayoutDesignerComponent {\n\n protected service = inject(AXPDesignerService);\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}\n","<ax-drawer-container class=\"ax-h-full ax-w-full ax-flex ax-relative child:ax-h-full ax-overflow-hidden ax-dark\">\n <ax-content class=\"ax-contents\">\n <!-- Toolbar Side -->\n <div class=\"ax-min-w-10 ax-bg-surface ax-border-e ax-xs ax-flex ax-flex-col ax-items-center \">\n <div class=\"ax-min-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-border-b\">\n <img src=\"assets/logos/logo.png\" class=\"ax-w-6\" />\n </div>\n <div class=\"ax-py-1\"></div>\n <div class=\"ax-flex ax-flex-col ax-gap-2\">\n <ax-button color=\"ghost\" look=\"twotone\">\n <ax-icon class=\"fa-solid fa-puzzle ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\">\n <ax-icon class=\"fa-solid fa-plus ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\">\n <ax-icon class=\"fa-solid fa-database ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"outline.toggle()\" title=\"Outline\">\n <ax-icon class=\"fa-solid fa-list-tree ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"history.toggle()\" title=\"History\">\n <ax-icon class=\"fa-solid fa-clock-rotate-left ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" title=\"Timeline\">\n <ax-icon class=\"fa-solid fa-diagram-sankey ax-text-sm\"> </ax-icon>\n </ax-button>\n </div>\n </div>\n <!-- Main Side -->\n <div class=\"ax-col-span-10 ax-flex ax-flex-col ax-flex-1\">\n <!-- Header Toolbar -->\n <div class=\"ax-min-h-10 ax-bg-surface ax-border-b ax-flex ax-flex-grow ax-justify-between ax-px-2\">\n <div class=\"ax-flex ax-items-center ax-justify-center ax-text-white\">\n <axp-designer-header-menu></axp-designer-header-menu>\n </div>\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-xs ax-items-center\">\n <ax-button-group color=\"ghost\" look=\"twotone\" [selection]=\"'single'\">\n <ax-button-item [selected]=\"service.size() == 'xl'\" [data]=\"'xl'\" (onClick)=\"service.size.set('xl')\">\n <ax-icon class=\"fa-light fa-desktop\"></ax-icon>\n </ax-button-item>\n <ax-button-item [selected]=\"service.size() == 'lg'\" [data]=\"'lg'\" (onClick)=\"service.size.set('lg')\">\n <ax-icon class=\"fa-light fa-tablet\"></ax-icon>\n </ax-button-item>\n <ax-button-item [selected]=\"service.size() == 'sm'\" [data]=\"'sm'\" (onClick)=\"service.size.set('sm')\">\n <ax-icon class=\"fa-light fa-mobile\"></ax-icon>\n </ax-button-item>\n </ax-button-group>\n </div>\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-xs ax-items-center\">\n <ax-button text=\"Design\" look=\"outline\" class=\"ax-xs\">\n <ax-suffix>\n <ax-icon class=\"fa-light fa-chevron-down\"></ax-icon>\n </ax-suffix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item text=\"Print\" name=\"print\"> </ax-button-item>\n <ax-button-item text=\"View\" name=\"view\"> </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n <ax-button color=\"success\" look=\"outline\" text=\"Preview\" class=\"ax-xs\">\n <ax-suffix>\n <ax-icon class=\"fa-solid fa-play\"></ax-icon>\n </ax-suffix>\n </ax-button>\n </div>\n </div>\n <!-- Board -->\n <div class=\"ax-h-full \">\n <ax-drawer-container class=\"ax-w-full ax-h-full\">\n <ax-drawer #bd location=\"start\" mode=\"push\">\n <ax-content>\n <div class=\"ax-min-w-80 ax-h-full ax-overflow-auto ax-border-e\"></div>\n </ax-content>\n </ax-drawer>\n <!-- Outline Pnael -->\n <ax-drawer #outline location=\"start\" mode=\"push\">\n <ax-content>\n <axp-designer-outline></axp-designer-outline>\n </ax-content>\n </ax-drawer>\n <!-- History Pnael -->\n <ax-drawer #history location=\"start\" mode=\"push\">\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\">\n <axp-designer-board class=\"ax-h-full ax-bg-on-surface ax-flex ax-justify-center\"> </axp-designer-board>\n </ax-content>\n </ax-drawer-container>\n </div>\n <!-- Footer -->\n <div class=\"ax-min-h-10 ax-bg-surface ax-border-t ax-flex ax-items-center\">\n <axp-designer-breadcrumbs class=\"ax-border-default ax-border-t ax-p-2 ax-font-normal\">\n </axp-designer-breadcrumbs>\n </div>\n </div>\n </ax-content>\n <!-- Property Side -->\n <ax-drawer class=\"ax-w-80 ax-border-s\" location=\"end\" mode=\"push\" [collapsed]=\"false\" #pd>\n <ax-content>\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-py-2 ax-px-4 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <i [ngClass]=\"nodeConfig()?.icon\"></i>\n <span class=\"ax-font-semibold\">{{ nodeConfig()?.title }}</span>\n </div>\n </div>\n <axp-widget-property-viewer [widget]=\"service.selectedNode()!\"\n (onChanged)=\"service.update({ values: $event.values, mode: $event.mode })\" class=\"ax-w-1/4\">\n </axp-widget-property-viewer>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","merge","i1","i3","i4"],"mappings":"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"}
@@ -13,6 +13,8 @@ import { AXLoadingModule } from '@acorex/components/loading';
13
13
  import { AXBasePageComponent } from '@acorex/components/page';
14
14
  import { AXTabsModule } from '@acorex/components/tabs';
15
15
  import { AXTooltipModule } from '@acorex/components/tooltip';
16
+ import * as i8 from '@acorex/core/translation';
17
+ import { AXTranslationModule } from '@acorex/core/translation';
16
18
  import { AXValidationModule } from '@acorex/core/validation';
17
19
  import * as i10 from '@acorex/platform/common';
18
20
  import { AXPSchemaModule, AXPStickyDirective } from '@acorex/platform/common';
@@ -22,8 +24,6 @@ import * as i0 from '@angular/core';
22
24
  import { signal, Component, ChangeDetectionStrategy } from '@angular/core';
23
25
  import { FormsModule } from '@angular/forms';
24
26
  import { cloneDeep } from 'lodash-es';
25
- import * as i8 from '@acorex/core/translation';
26
- import { AXTranslationModule } from '@acorex/core/translation';
27
27
 
28
28
  class AXPEntityModifyViewComponent extends AXBasePageComponent {
29
29
  constructor() {
@@ -50,9 +50,11 @@ class AXPEntityModifyViewComponent extends AXBasePageComponent {
50
50
  if (formResult.result) {
51
51
  if (this.entity.commands?.update) {
52
52
  this.submitLoading.set(true);
53
- await this.entity.commands.update(this.editForm.context.id, this.editForm.context);
53
+ const res = await this.entity.commands.update(this.editForm.context.id, this.editForm.context);
54
54
  this.submitLoading.set(false);
55
- this.close({ result: true, context: this.editForm.context });
55
+ if (res?.result != false) {
56
+ this.close({ result: true, context: this.editForm.context });
57
+ }
56
58
  }
57
59
  }
58
60
  }
@@ -88,4 +90,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
88
90
  }] });
89
91
 
90
92
  export { AXPEntityModifyViewComponent };
91
- //# sourceMappingURL=acorex-platform-layouts-entity-modify-view.component-CjofXJku.mjs.map
93
+ //# sourceMappingURL=acorex-platform-layouts-entity-modify-view.component-C9L8cyBm.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-layouts-entity-modify-view.component-C9L8cyBm.mjs","sources":["../../../../libs/platform/layouts/src/lib/admin/entity-layout/entity-modify-view/entity-modify-view.component.ts","../../../../libs/platform/layouts/src/lib/admin/entity-layout/entity-modify-view/entity-modify-view.component.html"],"sourcesContent":["import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDialogModule } from '@acorex/components/dialog';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXValidationModule } from '@acorex/core/validation';\nimport { AXPEntityConfig, AXPSchemaModule, AXPStickyDirective } from '@acorex/platform/common';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, WritableSignal, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { cloneDeep } from 'lodash-es';\nimport { AXPEntityModifyViewLoader } from './entity-modify-view.config';\n\n@Component({\n templateUrl: './entity-modify-view.component.html',\n imports: [\n CommonModule,\n FormsModule,\n AXFormModule,\n AXDecoratorModule,\n CommonModule,\n AXButtonModule,\n AXDialogModule,\n AXLoadingModule,\n AXTabsModule,\n AXPSchemaModule,\n AXTooltipModule,\n AXValidationModule,\n AXLabelModule,\n AXDropdownButtonModule,\n AXTranslationModule,\n //\n AXPStickyDirective,\n ],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPEntityModifyViewComponent extends AXBasePageComponent {\n protected loader!: AXPEntityModifyViewLoader;\n context: any;\n entity!: AXPEntityConfig;\n properties: string[] = [];\n submitLoading: WritableSignal<boolean> = signal(false);\n\n protected editForm: {\n context?: any;\n previousContext?: any;\n } = {};\n\n protected handleCloseClick() {\n this.close({ result: false });\n }\n\n protected override ngOnInit(): void {\n this.editForm.context = cloneDeep(this.context);\n this.editForm.previousContext = cloneDeep(this.context);\n }\n\n protected async handleSectionDiscard(form: AXFormComponent) {\n this.close({ result: false });\n }\n\n protected async handleSectionReset(form: AXFormComponent) {\n this.editForm.context = cloneDeep(this.editForm.previousContext);\n }\n\n protected async handleSectionSubmit(form: AXFormComponent) {\n const formResult = await form.validate();\n if (formResult.result) {\n if (this.entity.commands?.update) {\n this.submitLoading.set(true);\n const res = await this.entity.commands.update(this.editForm.context.id, this.editForm.context);\n this.submitLoading.set(false);\n if (res?.result != false) {\n this.close({ result: true, context: this.editForm.context });\n }\n }\n }\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this.editForm.context = null;\n this.editForm.previousContext = null;\n }\n\n // override onClosing(e: AXComponentClosing): void | Promise<void> {\n // if (e.data?.save || isEmpty(this.loader.data))\n // e.cancel = false;\n // else {\n // e.cancel = true;\n // }\n // }\n}\n","<div class=\"ax-min-h-[25vh]\">\n <ax-form class=\"ax-flex ax-flex-col ax-gap-6 ax-p-4\" #form [messageStyle]=\"'bottom'\" [updateOn]=\"'blur'\">\n <div class=\"ax-flex ax-flex-col ax-pb-4\">\n <ax-form-field class=\"ax-grid ax-grid-cols-12 ax-gap-4 ax-py-2 first:ax-pt-0 last:ax-pb-0\">\n <ng-container *ngFor=\"let name of properties\">\n <ng-container *ngIf=\"loader.getProp(name) as prop\">\n <!-- lg:ax-col-span-6 -->\n <!-- lg:ax-col-start-1 -->\n <div *ngIf=\"prop.canEdit\" class=\"ax-col-span-12 ax-col-start-1 lg:ax-col-span-{{\n prop.layout?.positions?.default?.span || 12\n }} lg:ax-col-start-{{ prop.layout?.positions?.default?.start || 1 }} ax-flex ax-flex-col ax-gap-1\">\n <span class=\"ax-font-semibold ax-text-sm\">{{ prop.title }}</span>\n <axp-widget-renderer [schema]=\"prop.schema\" [prop]=\"prop\" [mode]=\"'edit'\"\n [context]=\"editForm.context\"></axp-widget-renderer>\n </div>\n </ng-container>\n </ng-container>\n </ax-form-field>\n </div>\n </ax-form>\n <ax-footer>\n <ax-suffix>\n <ax-dropdown-button [text]=\"'discard' | translate | async\" (onClick)=\"handleSectionDiscard(form)\">\n <ax-button-item-list>\n <ax-button-item [text]=\"('reset' | translate | async) ?? ' '\" (onClick)=\"handleSectionReset(form)\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-rotate-left fa-flip-horizontal\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-button>\n <ax-button [disabled]=\"submitLoading()\" color=\"primary\" [text]=\"'save-changes' | translate | async\" (onClick)=\"handleSectionSubmit(form)\">\n <ax-loading *ngIf=\"submitLoading()\"></ax-loading>\n </ax-button>\n </ax-suffix>\n </ax-footer>\n</div>"],"names":["i3","i4","i6"],"mappings":"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"}