@acorex/platform 19.4.13 → 19.4.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common/lib/utils/regional.types.d.ts +3 -1
- package/core/lib/data/datasource-definition-provider.service.d.ts +8 -2
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +4 -1
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-designer.mjs +6 -4
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +4 -4
- package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-b5e_ccLv.mjs → acorex-platform-themes-default-entity-master-list-view.component-BupuLA5U.mjs} +16 -4
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-BupuLA5U.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default.mjs +4 -4
- package/fesm2022/acorex-platform-themes-shared.mjs +84 -89
- package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
- package/fesm2022/acorex-platform-widgets.mjs +258 -185
- package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
- package/layout/builder/lib/builder/widget-map.d.ts +3 -0
- package/package.json +1 -1
- package/widgets/lib/widgets/layout/grid/grid-widget-designer.component.d.ts +1 -0
- package/widgets/lib/widgets/layout/grid/grid-widget-view.component.d.ts +1 -0
- package/widgets/lib/widgets/layout/grid-item/grid-item-widget-designer.component.d.ts +4 -9
- package/widgets/lib/widgets/layout/grid-item/grid-item-widget-view.component.d.ts +3 -0
- package/widgets/lib/widgets/property-editors/border/border-widget-editor.component.d.ts +1 -0
- package/widgets/lib/widgets/property-editors/direction/direction-widget-editor.component.d.ts +0 -1
- package/widgets/lib/widgets/property-editors/spacing/spacing-widget-editor.component.d.ts +1 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-b5e_ccLv.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-layout-designer.mjs","sources":["../../../../libs/platform/layout/designer/src/lib/designer/shared/command.ts","../../../../libs/platform/layout/designer/src/lib/designer/shared/designer-connector.service.ts","../../../../libs/platform/layout/designer/src/lib/designer/shared/generic-commands.types.ts","../../../../libs/platform/layout/designer/src/lib/designer/shared/designer.types.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/widget-picker/widget-picker.service.ts","../../../../libs/platform/layout/designer/src/lib/designer/shared/designer.service.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/add-widget-button/add-widget-button.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/add-widget-button/add-widget-line-button.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/add-widget-button/add-widget-mini-button.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/grid-drawer/grid-drawer.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/widget-picker/widget-picker.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/widget-picker/widget-picker.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/designer/shared/widget-designer-renderer.directive.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/board/board.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/board/board.component.html","../../../../libs/platform/layout/designer/src/lib/designer/components/breadcrumbs/breadcrumbs.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/shared/drawer-content/drawer-content.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/shared/drawer-content/drawer-content.component.html","../../../../libs/platform/layout/designer/src/lib/designer/components/drawers/data-sources/data-sources.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/drawers/data-sources/data-sources.component.html","../../../../libs/platform/layout/designer/src/lib/designer/components/drawers/history/history.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/drawers/history/history.component.html","../../../../libs/platform/layout/designer/src/lib/designer/components/drawers/outline/outline.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/drawers/outline/outline.component.html","../../../../libs/platform/layout/designer/src/lib/designer/components/drawers/pages/pages.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/drawers/pages/pages.component.html","../../../../libs/platform/layout/designer/src/lib/designer/components/header-menu/header-menu.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/header-menu/header-menu.component.html","../../../../libs/platform/layout/designer/src/lib/designer/components/size-mode/view-size-toolbar.component.ts","../../../../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/lib/preview/preview-viewer.component.ts","../../../../libs/platform/layout/designer/src/lib/preview/preview-frame.component.ts","../../../../libs/platform/layout/designer/src/lib/preview/preview.component.ts","../../../../libs/platform/layout/designer/src/lib/preview/preview.component.html","../../../../libs/platform/layout/designer/src/acorex-platform-layout-designer.ts"],"sourcesContent":["import { AXPWidgetNode } from \"@acorex/platform/layout/builder\";\nimport { computed, Injectable, signal } from \"@angular/core\";\nimport { cloneDeep, merge } from \"lodash-es\";\n\n// Command interface\nexport interface Command {\n execute(): void;\n undo(): void;\n description(): string;\n icon(): string;\n getExecutionSelection(): AXPWidgetNode; // Node to select after execution\n getUndoSelection(): AXPWidgetNode; // Node to select after undo\n}\n\n// AddWidgetCommand\nexport class AddWidgetCommand implements Command {\n private widget: AXPWidgetNode;\n private parent: AXPWidgetNode;\n private previousSelection: AXPWidgetNode;\n\n constructor(widget: AXPWidgetNode, parent: AXPWidgetNode, previousSelection: AXPWidgetNode) {\n this.widget = widget;\n this.parent = parent;\n this.previousSelection = previousSelection;\n }\n\n execute() {\n this.parent.children = this.parent.children || [];\n this.parent.children.push(this.widget);\n }\n\n undo() {\n this.parent.children = this.parent.children || [];\n const index = this.parent.children.indexOf(this.widget);\n if (index > -1) {\n this.parent.children.splice(index, 1);\n }\n }\n\n description() {\n return `Added widget ${this.widget.name}`;\n }\n\n icon() {\n return `fa-solid fa-square-plus`;\n }\n\n getExecutionSelection() {\n return this.widget; // After executing, select the newly added widget\n }\n\n getUndoSelection() {\n return this.previousSelection; // After undo, select the previously selected widget\n }\n}\n\n\nexport class RemoveWidgetCommand implements Command {\n private widget: AXPWidgetNode;\n private parent: AXPWidgetNode;\n private previousSelection: AXPWidgetNode;\n private index: number;\n\n constructor(widget: AXPWidgetNode, parent: AXPWidgetNode, previousSelection: AXPWidgetNode) {\n this.widget = widget;\n this.parent = parent;\n this.previousSelection = previousSelection;\n parent.children = parent.children || [];\n this.index = parent.children.indexOf(widget); // Capture the index for undo purposes\n }\n\n execute() {\n this.parent.children = this.parent.children || [];\n this.index = this.parent.children.indexOf(this.widget); // Re-assert the index in case it has changed\n this.parent.children.splice(this.index, 1);\n }\n\n undo() {\n this.parent.children = this.parent.children || [];\n this.parent.children.splice(this.index, 0, this.widget); // Reinsert at the original index\n }\n\n description() {\n return `Removed widget ${this.widget.name}`;\n }\n\n icon() {\n return `fa-solid fa-square-minus`;\n }\n\n getExecutionSelection() {\n return this.previousSelection; // Typically the parent or a nearby sibling could be focused\n }\n\n getUndoSelection() {\n return this.widget; // Select the widget itself when the operation is undone\n }\n}\n\nexport class UpdateWidgetCommand implements Command {\n private widget: AXPWidgetNode;\n private previousState: AXPWidgetNode;\n private newState: AXPWidgetNode;\n private previousSelection: AXPWidgetNode;\n\n constructor(widget: AXPWidgetNode, values: Partial<AXPWidgetNode>, previousSelection: AXPWidgetNode) {\n this.widget = widget;\n this.newState = merge(cloneDeep(widget), values);\n this.previousSelection = previousSelection;\n this.previousState = cloneDeep(widget);\n }\n\n execute() {\n merge(this.widget, this.newState)\n }\n\n undo() {\n this.deepPruneAndRestore(this.widget, this.previousState);\n }\n\n description() {\n return `Updated widget ${this.widget.name}`;\n }\n\n icon() {\n return `fa-solid fa-pen-to-square`;\n }\n\n getExecutionSelection() {\n return this.widget; // Focus the widget after it's updated\n }\n\n getUndoSelection() {\n return this.previousSelection; // Restore the focus to where it was before the update\n }\n\n private deepPruneAndRestore(current: any, original: any) {\n Object.keys(current).forEach(key => {\n if (original.hasOwnProperty(key)) {\n if (typeof current[key] === 'object' && current[key] !== null && !(current[key] instanceof Array)) {\n this.deepPruneAndRestore(current[key], original[key]);\n }\n } else {\n delete current[key]; // Remove properties not present in original\n }\n });\n\n // Restore the original properties\n merge(current, original);\n }\n}\n\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CommandManager {\n private undoStack = signal<Command[]>([]);\n private currentIndex = signal<number>(-1);\n public readonly selectedNode = signal<AXPWidgetNode | null>(null);\n\n public canUndo = computed(() => this.currentIndex() >= 0)\n public canRedo = computed(() => this.currentIndex() < this.undoStack().length - 1)\n\n executeCommand(command: Command) {\n // Check if the currentIndex is not at the end of the undoStack\n if (this.currentIndex() !== this.undoStack().length - 1) {\n // Remove all commands beyond the current index to discard the \"future\" commands\n const newUndoStack = this.undoStack().slice(0, this.currentIndex() + 1);\n this.undoStack.set(newUndoStack);\n }\n\n command.execute();\n this.undoStack.set([...this.undoStack(), command]); // Add the new command to the stack\n this.currentIndex.set(this.undoStack().length - 1); // Update currentIndex to the end of the stack\n this.selectedNode.set(command.getExecutionSelection()); // Update the selected node\n }\n\n undo() {\n if (this.currentIndex() >= 0) {\n const command = this.undoStack()[this.currentIndex()];\n command.undo();\n this.currentIndex.set(this.currentIndex() - 1);\n if (this.currentIndex() >= 0) {\n this.selectedNode.set(this.undoStack()[this.currentIndex()].getUndoSelection());\n } else {\n this.selectedNode.set(null); // No selection if all commands are undone\n }\n }\n }\n\n redo() {\n if (this.currentIndex() < this.undoStack().length - 1) {\n this.currentIndex.set(this.currentIndex() + 1);\n const command = this.undoStack()[this.currentIndex()];\n command.execute();\n this.selectedNode.set(command.getExecutionSelection());\n }\n }\n\n goToCommand(index: number) {\n if (index < 0 || index >= this.undoStack().length || index === this.currentIndex()) {\n return; // Out of bounds or already at the desired index\n }\n\n if (index > this.currentIndex()) {\n // Need to redo until reaching the desired index\n while (this.currentIndex() < index) {\n this.redo();\n }\n } else {\n // Need to undo until reaching the desired index\n while (this.currentIndex() > index) {\n this.undo();\n }\n }\n\n // Optionally update any UI components or state here\n this.selectedNode.set(this.undoStack()[this.currentIndex()].getExecutionSelection());\n }\n\n public history = computed(() => this.undoStack().map((cmd, index) => (\n {\n description: cmd.description(),\n icon: cmd.icon(),\n isPast: this.currentIndex() > index,\n isFuture: this.currentIndex() < index,\n isCurrent: this.currentIndex() == index\n }\n )))\n\n\n public clear() {\n this.undoStack.set([]);\n this.currentIndex.set(-1);\n }\n}","import { Injectable } from \"@angular/core\";\n\n\nexport interface AXPDesignerContent {\n json: string,\n html?: string\n}\n\n@Injectable()\nexport abstract class AXPDesignerConnector<T = string> {\n\n public abstract save(id: string, content: AXPDesignerContent): Promise<boolean>;\n\n public abstract saveAs(content: AXPDesignerContent): Promise<boolean>;\n\n public abstract load(id: T): Promise<string | null>;\n}","import { AXMenuItem } from '@acorex/components/menu';\nimport { assign, cloneDeep } from 'lodash-es';\n\nexport const AXP_DESIGNER_COPY_MENU: AXMenuItem = {\n text: 'Copy',\n name: 'copy',\n icon: 'fa-solid fa-copy',\n suffix: {\n text: 'Ctrl+C',\n },\n};\n\nexport const AXP_DESIGNER_CLONE_MENU: AXMenuItem = {\n text: 'Clone',\n name: 'clone',\n icon: 'fa-solid fa-clone',\n suffix: {\n text: 'Ctrl+D',\n },\n};\n\nexport const AXP_DESIGNER_CUT_MENU: AXMenuItem = {\n text: 'Cut',\n name: 'cut',\n icon: 'fa-solid fa-cut',\n suffix: {\n text: 'Ctrl+X',\n },\n};\n\nexport const AXP_DESIGNER_PASTE_MENU: AXMenuItem = {\n text: 'Paste',\n name: 'paste',\n icon: 'fa-solid fa-paste',\n suffix: {\n text: 'Ctrl+V',\n },\n};\n\nexport const AXP_DESIGNER_ADD_WIDGET_MENU: AXMenuItem = {\n text: 'Add Widget',\n name: 'add-widget',\n icon: 'fa-solid fa-plus',\n};\n\nexport const AXP_DESIGNER_SELECT_WIDGET_MENU: AXMenuItem = {\n text: 'Select',\n name: 'select',\n break: true,\n icon: 'fa-solid fa-arrow-pointer',\n}\n\nexport const AXP_DESIGNER_DELETE_WIDGET_MENU: AXMenuItem = {\n text: 'Delete',\n name: 'remove-widget',\n icon: 'fa-solid fa-trash',\n};\n\nexport const AXP_DESIGNER_SAVE_AS_WIDGET_MENU: AXMenuItem = {\n text: 'Save As...',\n name: 'save-as',\n icon: 'fa-solid fa-save',\n};\n\n\nexport function cloneWidgetMenu(item: AXMenuItem, options?: Partial<AXMenuItem>): AXMenuItem {\n return assign(cloneDeep(item), options);\n}\n","import { AXMenuItem } from \"@acorex/components/menu\";\nimport { AXPWidgetNode } from \"@acorex/platform/layout/builder\";\n\nexport type AXPDesignerMode =\n | { id: 'designer'; title: 'Designer' }\n | { id: 'view'; title: 'View' }\n | { id: 'edit'; title: 'Edit' };\n\nexport class AXPDesignerModes {\n static readonly View: AXPDesignerMode = { id: 'view', title: 'View' };\n static readonly Design: AXPDesignerMode = { id: 'designer', title: 'Designer' };\n static readonly Edit: AXPDesignerMode = { id: 'edit', title: 'Edit' };\n}\n\n\nexport enum AXPTemplateLoadingStrategy {\n Connector = \"Connector\",\n Broadcast = \"Broadcast\",\n}\n\n\n\nexport interface AXPDesignerWidgetComponent {\n onContextMenu(context: { items: AXMenuItem[] }): void\n executeCommand(command: { name: string, data?: any, handled: boolean }): Promise<void>\n}\n\nexport interface AXPDesignerPreviewMessage {\n id: string,\n document: AXPWidgetNode\n}\n\nexport interface AXPDesignerSaveFormMessage {\n id: string,\n success: boolean,\n content?: string\n}\n\nexport const AXPDesignerMessageKeys =\n{\n Preview: \"designer-preview\",\n Loaded: \"designer-preview-loaded\",\n ContextChanged: \"designer-preview-context-changed\",\n PreviewWindow: \"designer-open-preview-window\",\n RequestFormContent: \"designer-request-form-content\",\n ResponseFormContent: \"designer-response-form-content\",\n SaveForm: 'designer-save-form-content',\n FormSaved: 'designer-form-saved-content',\n}","import { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPWidgetConfig,\n AXPWidgetGroupEnum,\n AXPWidgetNode,\n AXPWidgetRegistryService,\n} from '@acorex/platform/layout/builder';\nimport { inject, Injectable } from '@angular/core';\nimport { sortBy } from 'lodash-es';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPWidgetPickerService {\n private popupService = inject(AXPopupService);\n private widgetRegistryService = inject(AXPWidgetRegistryService);\n private translationService = inject(AXTranslationService);\n\n async showPicker(options: { groups: AXPWidgetGroupEnum[] }): Promise<AXPWidgetNode[]> {\n const com = await import('./widget-picker.component').then((c) => c.AXPDesignerWidgetPickerComponent);\n const widgets = this.widgetRegistryService.all();\n const filteredWidgets = widgets.filter((c) => options.groups.some((d) => c.groups?.includes(d)));\n //\n const result = await this.popupService.open(com, {\n title: await this.translationService.translateAsync('widget-picker.title', { scope: 'form-template-management' }),\n size: 'md',\n closeButton: true,\n data: {\n widgets: sortBy(filteredWidgets, (c) => c.title),\n },\n });\n //\n const selectedWidgets = (result.data?.widgets ?? []) as AXPWidgetConfig[];\n\n return selectedWidgets.map((c) => ({\n type: c.name as any,\n meta: c.meta,\n }));\n }\n}\n","import { AXLoadingDialogButtonItem, AXLoadingDialogService } from '@acorex/components/loading-dialog';\nimport { AXMenuItem } from '@acorex/components/menu';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXFileService } from '@acorex/core/file';\nimport {\n AXPBaseWidgetComponent,\n AXPValueWidgetComponent,\n AXPWidgetConfig,\n AXPWidgetGroupEnum,\n AXPWidgetNode,\n AXPWidgetRegistryService,\n AXPWidgetsCatalog,\n} from '@acorex/platform/layout/builder';\nimport { computed, effect, inject, Injectable, signal } from '@angular/core';\nimport { cloneDeep, get, isEmpty, isNil, isNull, merge, result, set, sortBy } from 'lodash-es';\nimport { Subject } from 'rxjs';\nimport { AddWidgetCommand, CommandManager, RemoveWidgetCommand, UpdateWidgetCommand } from './command';\nimport { AXPDesignerConnector } from './designer-connector.service';\nimport {\n AXP_DESIGNER_ADD_WIDGET_MENU,\n AXP_DESIGNER_CLONE_MENU,\n AXP_DESIGNER_COPY_MENU,\n AXP_DESIGNER_CUT_MENU,\n AXP_DESIGNER_DELETE_WIDGET_MENU as AXP_DESIGNER_DELETE_WIDGET_MENU,\n AXP_DESIGNER_PASTE_MENU,\n AXP_DESIGNER_SAVE_AS_WIDGET_MENU,\n AXP_DESIGNER_SELECT_WIDGET_MENU,\n cloneWidgetMenu,\n} from './generic-commands.types';\nimport { AXPDesignerMessageKeys, AXPDesignerPreviewMessage, AXPDesignerSaveFormMessage, AXPDesignerWidgetComponent, AXPTemplateLoadingStrategy } from './designer.types';\nimport { AXPBroadcastEventService } from '@acorex/platform/core';\nimport { AXPWidgetPickerService } from '../components/widget-picker/widget-picker.service';\nexport type AXPDesignerPreviewSize = 'sm' | 'md' | 'lg' | 'xl' | 'xxl';\n\nexport interface AXPDesignerFocusCommand {\n widget: AXPWidgetNode | null;\n}\n\nexport interface AXPDesignerUpdateCommand {\n values: any;\n widget?: AXPWidgetNode | null;\n mode: 'init' | 'update';\n}\nexport interface AXPDesignerUpdateEvent {\n values: any;\n widget: AXPWidgetNode;\n}\n\nexport interface AXPDesignerSelectCommand {\n widget: AXPWidgetNode;\n}\n\nexport interface AXPDesignerRegisterCommand {\n id: number;\n widget: AXPWidgetNode;\n config: AXPWidgetConfig;\n instance: AXPBaseWidgetComponent;\n}\n\nexport interface AXPDesignerSelectEvent {\n widget: AXPWidgetNode;\n}\n\nexport interface AXPDesignerRefreshCommand {\n widget: AXPWidgetNode;\n}\nexport interface AXPDesignerRefreshEvent {\n widget: AXPWidgetNode;\n}\n\nexport interface AXPDesignerAddNodeCommand {\n widget: AXPWidgetNode;\n}\nexport interface AXPDesignerAddNodeEvent {\n widget: AXPWidgetNode;\n}\n\nexport interface AXPDesignerFocusEvent {\n widget: AXPWidgetNode | null;\n}\n\n@Injectable()\nexport class AXPDesignerService {\n private popupService = inject(AXPopupService);\n private toastService = inject(AXToastService);\n private fileService = inject(AXFileService);\n private loadingService = inject(AXLoadingDialogService);\n private widgetRegisteryService = inject(AXPWidgetRegistryService);\n private connector = inject(AXPDesignerConnector);\n private eventService = inject(AXPBroadcastEventService);\n private widgetPickerService = inject(AXPWidgetPickerService);\n\n\n public readonly document = signal(this.createDoc());\n public readonly currentPageIndex = signal(0);\n\n public readonly currentPage = signal(this.document().children?.[0] as AXPWidgetNode);\n\n private commandManager = inject(CommandManager);\n\n private clipboard = signal<AXPWidgetNode | null>(null);\n\n //\n public canCutCopy = computed(() => this.can(this.selectedNode()).copyOrCut);\n public canDelete = computed(() => this.can(this.selectedNode()).delete);\n public canInsert = computed(() => this.can(this.selectedNode()).insert);\n public canPaste = computed(() => this.can(this.selectedNode()).paste);\n //\n public readonly history = computed(() => this.commandManager.history());\n public readonly canUndo = computed(() => this.commandManager.canUndo());\n public readonly canRedo = computed(() => this.commandManager.canRedo());\n //\n public readonly canSave = computed(() => this.templateId() != null);\n\n public readonly unsavedChanges = signal(false);\n\n public breadcrumbs = computed<AXPWidgetNode[]>(() => {\n return this.selectedNode() ? this.findBreadcrumbs(this.currentPage(), this.selectedNode()) ?? [] : [];\n });\n\n public selectedNode = signal<AXPWidgetNode | null>(null);\n\n public selectedNodeConfig = computed(() => get(this.selectedNode(), '__meta__.config') as any as AXPWidgetConfig);\n\n private _focusedNode: AXPWidgetNode | null = null;\n public focusedNode = () => this._focusedNode;\n\n public readonly size = signal<AXPDesignerPreviewSize>('xl');\n\n public readonly onSelected = new Subject<AXPDesignerSelectEvent>();\n public readonly onRefresh = new Subject<AXPDesignerRefreshEvent>();\n public readonly onUpdate = new Subject<AXPDesignerUpdateEvent>();\n public readonly onFocused = new Subject<AXPDesignerFocusEvent>();\n\n private templateId = signal<string | null>(null);\n\n private loadingStrategy = signal<AXPTemplateLoadingStrategy>(AXPTemplateLoadingStrategy.Connector);\n\n #ef = effect(\n () => {\n this.refresh({ widget: this.currentPage() });\n }\n );\n\n constructor() {\n this.eventService.listen(AXPDesignerMessageKeys.Loaded).subscribe(() => {\n this.updatePreview();\n })\n //\n this.eventService.listen(AXPDesignerMessageKeys.PreviewWindow).subscribe(() => {\n this.openPreviewWindow();\n });\n //\n // window.addEventListener(\"beforeunload\", (event) => {\n // console.log(\"Window is before closing...\");\n // // event.preventDefault();\n // // event.returnValue = 'abc'; // Some browsers require this to show the prompt.\n // });\n window.addEventListener(\"unload\", async () => {\n console.log(\"Window is closing...\");\n if (this.unsavedChanges()) {\n this.eventService.publish<AXPDesignerSaveFormMessage>(AXPDesignerMessageKeys.SaveForm, { id: this.templateId()!, success: false });\n }\n this.unsubscribeEvents();\n });\n }\n\n\n private can = (widget: AXPWidgetNode | null): {\n delete: boolean,\n copyOrCut: boolean,\n insert: boolean,\n paste: boolean,\n } => {\n if (!widget) {\n return {\n delete: false,\n copyOrCut: false,\n insert: false,\n paste: false,\n }\n }\n const config = get(widget, '__meta__.config') as any as AXPWidgetConfig;\n return {\n delete: widget.type != 'page-layout',\n copyOrCut: widget.type != 'page-layout',\n paste: this.clipboard() != null && config.type == 'container' && config.designer?.canInsert != false,\n insert: config.type == 'container' && config.designer?.canInsert != false,\n }\n }\n\n\n\n public register(command: AXPDesignerRegisterCommand): void {\n this.select({ widget: command.widget });\n }\n\n public select(command: AXPDesignerSelectCommand): void {\n this.selectedNode.set(command.widget);\n this.onSelected.next(command);\n }\n\n public update(command: AXPDesignerUpdateCommand): void {\n const node = command.widget ?? this.selectedNode();\n\n if (command.mode == 'update' && node) {\n this.commandManager.executeCommand(new UpdateWidgetCommand(node!, command.values, node!));\n }\n //this.selectedNode.update((c) => merge(node, command.values));\n this.onUpdate.next({ widget: node!, values: command.values });\n this.unsavedChanges.set(true);\n this.updatePreview();\n }\n\n public focus(command: AXPDesignerFocusCommand): void {\n if (this._focusedNode != command.widget) {\n this._focusedNode = command.widget;\n this.onFocused.next({ widget: this._focusedNode });\n }\n }\n\n public refresh(command: AXPDesignerRefreshCommand) {\n this.onRefresh.next({ widget: command.widget });\n this.updatePreview();\n }\n\n private findBreadcrumbs(\n node: AXPWidgetNode,\n targetNode?: AXPWidgetNode | null,\n breadcrumb: AXPWidgetNode[] = []\n ): AXPWidgetNode[] | undefined {\n // Add the current node to the breadcrumb path\n const currentBreadcrumb = [...breadcrumb, node];\n\n // Check if the current node is the target node\n if (node === targetNode) {\n return currentBreadcrumb;\n }\n\n // If the node has children, recursively search them\n if (node.children) {\n for (const child of node.children) {\n const result = this.findBreadcrumbs(child, targetNode, currentBreadcrumb);\n if (result) {\n return result;\n }\n }\n }\n\n // Return undefined if no match is found\n return undefined;\n }\n\n async showPicker(currentNode: AXPWidgetNode = this.selectedNode()!): Promise<AXPWidgetNode[]> {\n const widgets = await this.widgetPickerService.showPicker({ groups: [AXPWidgetGroupEnum.FormElement] });\n const result: AXPWidgetNode[] = [];\n if (widgets.length) {\n widgets.forEach((c) => {\n result.push(this.addWidget(currentNode, { type: c.type })!);\n });\n }\n return result;\n }\n\n public new() {\n this.commandManager.clear();\n this.document.set(this.createDoc());\n this.currentPage.set(this.document().children?.[0]!);\n this.reRenderPage();\n }\n\n private createDoc(): AXPWidgetNode {\n const doc: AXPWidgetNode = {\n type: AXPWidgetsCatalog.document,\n children: [this.createPage()],\n name: 'document',\n };\n set(doc, '__meta__.id', this.generateUniqueId());\n return doc;\n }\n\n private createPage(): AXPWidgetNode {\n const config = this.widgetRegisteryService.resolve('page-layout');\n\n const page: AXPWidgetNode = {\n type: 'page-layout',\n children: [],\n name: 'page-layout1',\n };\n\n set(page, '__meta__.id', this.generateUniqueId());\n set(page, '__meta__.config', config);\n return page;\n }\n\n public addNewPage() {\n this.addWidget(this.document(), this.createPage());\n this.goToPage(this.currentPageIndex() + 1);\n }\n\n public removePage(index: number) {\n const page = this.document().children?.[index]!;\n this.removeWidget(page);\n this.goToPage(index - 1);\n }\n\n public clonePage(index: number) {\n const page = this.document().children?.[index]!;\n this.clone(page);\n this.goToPage((this.document().children?.length ?? 1) - 1);\n }\n\n public goToPage(index: number) {\n this.currentPageIndex.set(index);\n this.currentPage.set(this.document().children?.[this.currentPageIndex()]!);\n this.select({ widget: this.currentPage() });\n }\n\n private reRenderPage() {\n this.currentPage.set({ ...this.currentPage() });\n setTimeout(() => {\n this.refresh({ widget: this.currentPage() });\n });\n }\n\n public findWidgetById(root: AXPWidgetNode, id: string): AXPWidgetNode | null {\n if (get(root, '__meta__.id') === id) {\n return root; // Return the root if it matches the ID\n }\n if (!root.children) return null;\n\n for (const child of root.children) {\n const found = this.findWidgetById(child, id);\n if (found) {\n return found; // Return the found child\n }\n }\n\n return null; // Node not found\n }\n\n private findParent(id: string, parent: AXPWidgetNode = this.currentPage()): AXPWidgetNode | null {\n if (!parent.children) return null;\n\n if (parent.children.some((child) => get(child, '__meta__.id') === id)) {\n return parent; // Return this node as it's the parent of the node with the given ID\n }\n\n for (const child of parent.children) {\n const foundParent = this.findParent(id, child);\n if (foundParent) return foundParent;\n }\n\n return null; // No parent found\n }\n\n private findNearestContainer(node: AXPWidgetNode, searchUpward = true): AXPWidgetNode | null {\n if (searchUpward) {\n let current: AXPWidgetNode | null = node;\n while (current) {\n const config = this.widgetRegisteryService.resolve(current.type);\n if (config && config.type == 'container') {\n return current;\n }\n current = this.findParent(get(current, '__meta__.id')!); // Use findParent to navigate upwards\n }\n } else {\n // Recursive search to find the first container among children\n if (node.children) {\n for (const child of node.children) {\n const config = this.widgetRegisteryService.resolve(child.type);\n if (config && config.type == 'container') {\n return child;\n }\n const foundContainer = this.findNearestContainer(child, false); // Continue searching downwards\n if (foundContainer) return foundContainer;\n }\n }\n }\n return null; // Return null if no container found\n }\n\n addWidget(currentNode: AXPWidgetNode, node: AXPWidgetNode): AXPWidgetNode {\n //\n const cloned = cloneDeep(node);\n const config = this.widgetRegisteryService.resolve(node.type);\n\n //\n this.commandManager.executeCommand(new AddWidgetCommand(cloned, currentNode, currentNode));\n //\n cloned.name = this.generateUniqueName(node.type);\n set(cloned, '__meta__.id', this.generateUniqueId());\n set(cloned, '__meta__.config', config);\n set(cloned, '__meta__.added', true);\n //\n this.reRenderPage();\n //\n this.refresh({ widget: currentNode });\n this.select({ widget: cloned });\n\n return cloned;\n }\n\n public removeWidget(node: AXPWidgetNode = this.selectedNode()!): void {\n if (\n node.type === 'document-layout' ||\n (node.type === 'page-layout' && (this.document().children?.length ?? 1) == 1)\n ) {\n console.error('Cannot remove the page node.');\n return; // Prevent removing the root page node or document\n }\n\n const nodeIdToRemove = get(node, '__meta__.id');\n if (!nodeIdToRemove) {\n throw new Error('Node does not have a valid __meta__.id to identify it for removal.');\n }\n\n // Find the parent of the node to remove it\n const parent = this.findParent(nodeIdToRemove, this.document());\n if (!parent) {\n throw new Error('Parent node not found. The node might be the root node or does not exist.');\n }\n\n const previousSelection = this.selectedNode(); // Capture the currently selected node before removal\n const command = new RemoveWidgetCommand(node, parent, previousSelection!);\n this.commandManager.executeCommand(command);\n\n this.refresh({ widget: parent }); // Refresh the UI to reflect changes\n this.select({ widget: parent }); // Select the parent node after removal\n }\n\n navigateTo(index: number) {\n this.commandManager.goToCommand(index);\n this.reRenderPage();\n const currentSelection = this.commandManager.selectedNode();\n this.refresh({ widget: this.currentPage() });\n this.select({ widget: currentSelection! });\n }\n\n public redo() {\n this.commandManager.redo();\n this.reRenderPage();\n const currentSelection = this.commandManager.selectedNode();\n this.refresh({ widget: this.currentPage() });\n this.select({ widget: currentSelection! });\n }\n\n public undo() {\n this.commandManager.undo();\n this.reRenderPage();\n const currentSelection = this.commandManager.selectedNode();\n this.refresh({ widget: this.currentPage() });\n this.select({ widget: currentSelection! });\n }\n\n public clearHistory() {\n this.commandManager.clear();\n }\n\n private removeMetaProp(obj: any): any {\n const nodeName = '__meta__';\n // Check if the object is an array\n if (Array.isArray(obj)) {\n return obj.map((item) => this.removeMetaProp(item));\n } else if (typeof obj === 'object' && obj !== null) {\n // Create a new object to store the result\n let newObj: any = {};\n for (let key in obj) {\n // Only add the key if it's not the nodeName we want to remove\n if (key !== nodeName) {\n newObj[key] = this.removeMetaProp(obj[key]);\n }\n }\n return newObj;\n }\n // If the value is not an object or array, return it as is\n return obj;\n }\n\n private async addMetaToNodes(\n node: AXPWidgetNode,\n processedNodes: { count: number },\n progressCallback: (processed: number) => void\n ): Promise<AXPWidgetNode> {\n // Apply your meta logic here\n const config = this.widgetRegisteryService.resolve(node.type);\n //\n set(node, '__meta__.id', this.generateUniqueId());\n set(node, '__meta__.config', config);\n //\n // Increment the processed node count and update the progress dialog\n processedNodes.count++;\n progressCallback(processedNodes.count);\n // Recursively process child nodes using Promise.all\n if (node.children && node.children.length > 0) {\n node.children = await Promise.all(\n node.children.map(async (child) => await this.addMetaToNodes(child, processedNodes, progressCallback))\n );\n }\n return node;\n }\n\n public copy(widget: AXPWidgetNode | null = this.selectedNode()): void {\n if (this.can(widget).copyOrCut) {\n this.clipboard.set(cloneDeep(widget)); // Use lodash's cloneDeep to ensure a deep copy\n }\n }\n\n public cut(widget: AXPWidgetNode | null = this.selectedNode()): void {\n if (this.can(widget).copyOrCut) {\n this.copy(widget); // Copy the widget to the clipboard\n this.removeWidget(widget!); // Reuse the removeWidget method which should handle undo internally\n }\n }\n\n public clone(widget: AXPWidgetNode | null = this.selectedNode()): void {\n if (!widget) return;\n this.copy(widget); // Copy the widget to the clipboard\n if (widget.type == 'page-layout') {\n this.paste(this.document());\n } else {\n this.paste(widget!);\n }\n }\n\n public paste(parentNode: AXPWidgetNode | undefined = this.selectedNode() ?? this.currentPage()): void {\n if (!this.clipboard() || !this.selectedNode() || !parentNode) {\n console.error('Clipboard is empty or no node is selected.');\n return;\n }\n const newNode = cloneDeep(this.clipboard() as AXPWidgetNode);\n const nearestContainer = this.findNearestContainer(parentNode, true);\n if (!nearestContainer) {\n console.error('No suitable container found.');\n return;\n }\n //\n if (!nearestContainer.children) {\n nearestContainer.children = [];\n }\n //\n const setNameId = (node: AXPWidgetNode) => {\n set(node, 'name', this.generateUniqueName(node.type));\n set(node, '__meta__.id', this.generateUniqueId());\n node.children?.forEach((n) => {\n setNameId(n);\n });\n };\n setNameId(newNode);\n //\n this.commandManager.executeCommand(new AddWidgetCommand(newNode, nearestContainer, nearestContainer));\n //\n setTimeout(() => {\n this.refresh({ widget: nearestContainer }); // Refresh the UI\n this.select({ widget: newNode }); // Select the newly pasted node\n });\n }\n\n async save() {\n if (this.templateId()) {\n const content = this.export();\n if (this.loadingStrategy() == AXPTemplateLoadingStrategy.Connector) {\n await this.connector.save(this.templateId()!, { json: content });\n this.toastService.success('Your changes saved successfully');\n }\n else {\n const result = await this.eventService.sendAndWaitForResponse<AXPDesignerSaveFormMessage, { success: boolean }>(AXPDesignerMessageKeys.SaveForm, { id: this.templateId()!, success: true, content });\n if (result.success) {\n this.unsavedChanges.set(false);\n window.close();\n }\n }\n } else {\n this.downloadJson();\n }\n }\n\n async saveAs(node: AXPWidgetNode = this.document()) {\n const content = this.export(node);\n const result = await this.connector.saveAs({ json: content });\n if (result) {\n this.toastService.success('Your changes saved successfully');\n }\n }\n\n export(node: AXPWidgetNode = this.document()): string {\n const json = this.removeMetaProp(node);\n return JSON.stringify(json);\n }\n\n downloadJson() {\n // Convert the object to a JSON string\n const jsonStr = this.export();\n\n // Create a blob object from the JSON string\n const blob = new Blob([jsonStr], { type: 'application/json' });\n\n // Create a URL for the blob object\n const url = URL.createObjectURL(blob);\n\n // Create a temporary <a> element to trigger the download\n const a = document.createElement('a');\n a.href = url;\n a.download = 'export.json';\n\n // Append the <a> element to the document body (necessary for some browsers)\n document.body.appendChild(a);\n\n // Trigger the download by clicking the <a> element\n a.click();\n // Clean up by revoking the object URL and removing the <a> element\n URL.revokeObjectURL(url);\n document.body.removeChild(a);\n }\n\n async loadById(id: string, options: { strategy: AXPTemplateLoadingStrategy } = { strategy: AXPTemplateLoadingStrategy.Connector }) {\n let content: string | null = null;\n try {\n if (options.strategy == AXPTemplateLoadingStrategy.Connector) {\n content = await this.connector.load(id);\n }\n else {\n content = await this.eventService.sendAndWaitForResponse<{ formId: string }, string>(AXPDesignerMessageKeys.RequestFormContent, { formId: id }, { timeout: 10000, retries: 3, retryDelay: 1000 });\n }\n if (!isNil(content) && !isEmpty(content)) {\n await this.loadByContent(content!);\n }\n this.templateId.set(id);\n this.loadingStrategy.set(options.strategy);\n } catch (error: any) {\n this.toastService.danger(error.message);\n }\n }\n\n async importJSon() {\n const files = await this.fileService.choose({ multiple: false, accept: 'application/json' });\n if (files && files.length) {\n const file = files[0];\n const content = await file.text();\n await this.loadByContent(content);\n }\n }\n\n async loadByContent(content: string) {\n const rootNode = JSON.parse(content) as AXPWidgetNode;\n const totalNode = this.countTotalNodes(rootNode);\n const processedNodes = { count: 0 };\n\n const button: AXLoadingDialogButtonItem = {\n text: 'Cancel',\n autofocus: true,\n color: 'primary',\n onClick: (e) => {\n dialog.close();\n },\n };\n\n const dialog = this.loadingService.show({\n mode: 'determinate',\n title: 'Loading Content',\n progressColor: 'primary',\n text: 'Processing content',\n status: `0 of ${totalNode}`,\n buttons: [button],\n });\n\n try {\n const root = await this.addMetaToNodes(rootNode, processedNodes, (count) => {\n dialog.setProgressValue(Math.ceil((count / totalNode) * 100));\n dialog.setProgressStatus(`${count} of ${totalNode}`);\n });\n\n const page = root.children?.[0]!;\n this.document.set(root);\n this.currentPage.set(page);\n\n dialog.setProgressColor('success');\n dialog.setProgressText('Content loaded successfully');\n button.text = 'Okay';\n button.color = 'success';\n dialog.setProgressValue(100);\n\n setTimeout(() => {\n this.reRenderPage();\n dialog.close();\n }, 250);\n } catch (error: any) {\n dialog.setProgressColor('danger');\n dialog.setProgressText(error instanceof Error ? error.message : 'Cannot load content');\n button.text = 'Close';\n button.color = 'danger';\n }\n }\n\n private countTotalNodes(node: AXPWidgetNode): number {\n let count = 1; // Count the current node\n if (node.children && node.children.length > 0) {\n count += node.children.reduce((sum, child) => sum + this.countTotalNodes(child), 0);\n }\n return count;\n }\n\n private generateUniqueName(type: string): string {\n // Normalize the type to follow camelCase convention\n const baseName = type.charAt(0).toLowerCase() + type.slice(1);\n let index = 1;\n let uniqueName = `${baseName}${index}`;\n\n // Gather all existing names to check against\n const existingNames = new Set<string>();\n this.collectAllNames(this.document(), existingNames);\n\n // Increment the index until a unique name is found\n while (existingNames.has(uniqueName)) {\n index++;\n uniqueName = `${baseName}${index}`;\n }\n\n return uniqueName;\n }\n\n generateUniqueId(): number {\n return Math.random() * Math.pow(10, 18);\n }\n\n private collectAllNames(node: AXPWidgetNode, names: Set<string>): void {\n if (node.name) {\n names.add(node.name);\n }\n if (node.children) {\n for (const child of node.children) {\n this.collectAllNames(child, names);\n }\n }\n }\n\n public updatePreview() {\n this.eventService.publish<AXPDesignerPreviewMessage>(AXPDesignerMessageKeys.Preview, {\n id: this.templateId()!,\n document: this.removeMetaProp(this.document())\n });\n }\n\n public async openPreviewDialog() {\n const com = await import('../../preview/preview.component').then((c) => c.AXPLayoutDesignerPreviewComponent);\n await this.popupService.open(com, {\n header: false,\n size: 'full',\n data: {\n initialSize: this.size(),\n isDialogWindow: true,\n },\n });\n }\n\n public openPreviewWindow() {\n window.open('/forms/preview', '_blank');\n }\n\n\n\n getContextMenuItems(instance: AXPDesignerWidgetComponent, isRoot = false): AXMenuItem[] {\n const widget = instance as any as AXPValueWidgetComponent;\n const node = widget.node;\n\n const items: AXMenuItem[] = [];\n // \n if (this.can(node).insert) {\n items.push(cloneWidgetMenu(AXP_DESIGNER_ADD_WIDGET_MENU, {\n break: true,\n }));\n }\n //\n items.push(cloneWidgetMenu(AXP_DESIGNER_CLONE_MENU, { disabled: !this.can(node).copyOrCut }));\n items.push(cloneWidgetMenu(AXP_DESIGNER_CUT_MENU, { disabled: !this.can(node).copyOrCut }));\n items.push(cloneWidgetMenu(AXP_DESIGNER_COPY_MENU, { disabled: !this.can(node).copyOrCut }));\n items.push(cloneWidgetMenu(AXP_DESIGNER_PASTE_MENU, { disabled: !this.can(node).paste, break: true }));\n //\n items.push(cloneWidgetMenu(AXP_DESIGNER_DELETE_WIDGET_MENU, { disabled: !this.can(node).delete, break: true }));\n //\n items.push(cloneWidgetMenu(AXP_DESIGNER_SAVE_AS_WIDGET_MENU));\n if (instance.onContextMenu) {\n instance.onContextMenu({ items })\n }\n if (!isRoot) {\n items.forEach(item => {\n item.suffix = undefined;\n })\n }\n return items;\n }\n\n async executeCommand(context: { instance: AXPDesignerWidgetComponent, name: string, data?: any }): Promise<void> {\n const widget = context.instance as any as AXPValueWidgetComponent;\n if (context.instance.executeCommand) {\n const command: any = {\n name: context.name,\n data: context.data,\n handled: false\n }\n await context.instance.executeCommand(command);\n if (command.handled)\n return;\n }\n switch (context.name) {\n case AXP_DESIGNER_SELECT_WIDGET_MENU.name: {\n this.select({ widget: widget.node })\n break\n }\n case AXP_DESIGNER_ADD_WIDGET_MENU.name: {\n this.showPicker(widget.node);\n break\n }\n //\n case AXP_DESIGNER_DELETE_WIDGET_MENU.name: {\n this.removeWidget(widget.node);\n break\n }\n //\n case AXP_DESIGNER_CLONE_MENU.name: {\n this.clone(widget.node);\n break\n }\n case AXP_DESIGNER_CUT_MENU.name: {\n this.cut(widget.node);\n break\n }\n case AXP_DESIGNER_COPY_MENU.name: {\n this.copy(widget.node);\n break\n }\n case AXP_DESIGNER_PASTE_MENU.name: {\n this.paste(widget.node);\n break\n }\n //\n }\n }\n\n unsubscribeEvents() {\n this.eventService.unsubscribe(AXPDesignerMessageKeys.Loaded);\n this.eventService.unsubscribe(AXPDesignerMessageKeys.PreviewWindow);\n }\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXClickEvent } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPLayoutWidgetComponent } from '@acorex/platform/layout/builder';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXPDesignerService } from '../../shared/designer.service';\n\n@Component({\n selector: 'axp-designer-add-widget-button',\n styleUrls: ['./add-widget-button.component.scss'],\n template: `\n <div class=\"ax-container\">\n <ax-button [text]=\"'Add New Element'\" (onClick)=\"handleClick($event)\" [look]=\"'solid'\" [color]=\"'primary'\">\n <ax-icon icon=\"fa-solid fa-plus\"></ax-icon>\n </ax-button>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXButtonModule, AXDecoratorModule],\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPDesignerAddWidgetButtonComponent {\n private designerService = inject(AXPDesignerService);\n private parent = inject(AXPLayoutWidgetComponent);\n\n async handleClick(e: AXClickEvent) {\n e.nativeEvent.stopPropagation();\n await this.designerService.showPicker(this.parent.node);\n }\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { ChangeDetectionStrategy, Component, input, output, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'axp-designer-add-widget-line-button',\n template: `\n <div class=\"ax-flex ax-items-center ax-py-4 ax-text-xs\">\n <div class=\"ax-flex-grow ax-border-t-2 ax-border-dashed ax-border-surface\"></div>\n <div class=\"ax-mx-2 ax-sm \">\n <ax-button [text]=\"text()\" [look]=\"'twotone'\" class=\"ax-capitalize\" (onClick)=\"handleClick()\">\n <ax-icon icon=\"fa-solid fa-plus\"></ax-icon>\n </ax-button>\n </div>\n <div class=\"ax-flex-grow ax-border-t-2 ax-border-dashed ax-border-surface\"></div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXButtonModule, AXDecoratorModule],\n encapsulation: ViewEncapsulation.None\n})\nexport class AXPDesignerAddWidgetLineButtonComponent {\n\n text = input();\n onClick = output();\n\n\n protected handleClick() {\n this.onClick.emit();\n }\n\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPLayoutWidgetComponent } from '@acorex/platform/layout/builder';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n inject,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPDesignerService } from '../../shared/designer.service';\n\n@Component({\n selector: 'axp-designer-add-widget-mini-button',\n template: `\n <div class=\"axp-empty-space\">\n <div\n class=\"ax-m-auto ax-py-4 ax-px-8 ax-text-primary-500 hover:ax-text-primary-700 ax-cursor-pointer\"\n (click)=\"handleClick($event)\"\n >\n <i class=\"fa-solid fa-plus \"></i>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXButtonModule, AXDecoratorModule],\n encapsulation: ViewEncapsulation.None\n})\nexport class AXPDesignerAddWidgetMiniButtonComponent {\n private designerService = inject(AXPDesignerService);\n private parent = inject(AXPLayoutWidgetComponent);\n\n @Output()\n public onClick: EventEmitter<void> = new EventEmitter<void>();\n\n protected async handleClick(e: MouseEvent) {\n e.stopPropagation();\n const a = this.onClick;\n if (this.onClick.observed) {\n this.onClick.emit();\n } else {\n await this.designerService.showPicker(this.parent.node);\n }\n }\n\n @HostBinding('class')\n private get __class(): string {\n const cls: any = {};\n //\n cls[`ax-flex`] = true;\n cls[`ax-w-full`] = true;\n return cls;\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, HostBinding, HostListener, model, output, signal } from '@angular/core';\n\n@Component({\n selector: 'axp-designer-grid-drawer',\n styleUrls: ['./grid-drawer.component.scss'],\n template: `\n <table class=\"table-picker\" >\n <tbody>\n @for(r of rows();track $index)\n {\n <tr >\n @for(c of columns();track $index)\n {\n <td (mouseenter)=\"handleMouseHover(r,c)\" [class.picked]=\"c<=rangeC() && r<=rangeR()\" (click)=\"handleClick(r,c)\">\n </td>\n }\n </tr>\n }\n <tr>\n <td [attr.colspan]=\"columns().length\" class=\"ax-text-center\">\n <small >{{rangeC()}}*{{rangeR()}}</small>\n </td>\n </tr>\n </tbody>\n </table>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: []\n})\nexport class AXPDesignerGridDrawerComponent {\n\n rowsCount = model<number>(5, { alias: \"rows\" });\n colsCount = model<number>(12, { alias: \"columns\" });\n\n onSelect = output<{ rows: number, cols: number }>();\n\n\n protected rows = computed(() => Array.from({ length: this.rowsCount() }).map((v, index) => index + 1));\n protected columns = computed(() => Array.from({ length: this.colsCount() }).map((v, index) => index + 1));\n\n protected rangeR = signal(0);\n protected rangeC = signal(0);\n\n\n protected handleMouseHover(r: number, c: number) {\n this.rangeR.set(r);\n this.rangeC.set(c);\n }\n\n protected handleClick(r: number, c: number) {\n this.onSelect.emit({ rows: r, cols: c });\n }\n\n @HostListener('mouseleave', ['$event'])\n private handleMouseLeave(event: KeyboardEvent) {\n this.rangeR.set(0);\n this.rangeC.set(0);\n }\n\n @HostBinding('style')\n private get __style(): any {\n return {\n \"--cols-width\": `${this.colsCount() == 0 ? 0 : (100 / this.colsCount())}%`\n };\n }\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXCommonModule } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTabsModule, AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport { AXPSettingService, AXPStickyDirective } from '@acorex/platform/common';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { AXP_WIDGETS_CATEGORIES, AXPWidgetConfig, AXPWidgetCategory } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, inject, model, signal, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { castArray, orderBy, uniqBy } from 'lodash-es';\n\nexport interface AXPDisplayWidgetConfig extends AXPWidgetConfig {\n pinned: boolean;\n}\n\n@Component({\n imports: [\n CommonModule,\n AXCommonModule,\n FormsModule,\n AXButtonModule,\n AXDecoratorModule,\n AXTabsModule,\n AXSearchBoxModule,\n AXPStickyDirective,\n ],\n templateUrl: './widget-picker.component.html',\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./widget-picker.component.scss'],\n})\nexport class AXPDesignerWidgetPickerComponent extends AXBasePageComponent {\n private settingService = inject(AXPSettingService);\n private readonly pinnedSettingKey = 'forms:widgets:picker:pinned';\n\n protected searchTerm = model('');\n\n // Signals\n private widgets: AXPWidgetConfig[] = [];\n private allWidgets = signal<AXPWidgetConfig[]>([]);\n private pinnedWidgets = signal<string[]>([]);\n\n private displayWidgets = computed<AXPDisplayWidgetConfig[]>(() => {\n return this.allWidgets().map((c) => ({ ...c, pinned: this.pinnedWidgets().includes(c.name) }));\n });\n\n // Signal to track selected widgets\n protected selectedWidgets = signal<AXPDisplayWidgetConfig[]>([]);\n\n // Computed for filtered and ordered widget list\n private orderedList = computed(() => {\n const search = this.searchTerm().toLowerCase();\n const selectedTabName = this.selectedTab().name;\n\n return orderBy(\n this.displayWidgets().filter((w) => {\n const matchesTab =\n selectedTabName === 'all' || castArray(w.categories ?? []).some((c) => c.name === selectedTabName);\n const matchesSearch =\n !search || w.title.toLowerCase().includes(search) || w.description?.toLowerCase().includes(search);\n return matchesTab && matchesSearch;\n }),\n ['pinned', 'title'],\n ['desc', 'asc'],\n );\n });\n\n // Pinned and regular lists\n protected pinnedList = computed(() => this.orderedList().filter((c) => c.pinned));\n protected regularList = computed(() => this.orderedList().filter((c) => !c.pinned));\n\n // Tabs for the widget groups\n protected categories = computed(() =>\n uniqBy(\n this.allWidgets()\n .map((w) => castArray(w.categories ?? []))\n .filter((c) => c.length > 0)\n .flat(),\n 'name',\n ),\n );\n\n protected tabs = computed<AXPWidgetCategory[]>(() =>\n orderBy([{ name: 'all', title: 'All', order: 0 }, ...this.categories()], (c) => c.order),\n );\n\n // computed max visible widgets in a tab\n protected maxVisibleWidgets = computed(() =>\n Math.max(\n ...this.categories().map(\n (c) => this.allWidgets().filter((w) => castArray(w.categories ?? []).some((c) => c.name === c.name)).length,\n ),\n ),\n );\n\n protected currentTabIndex = signal(0);\n protected selectedTab = computed(() => this.tabs()[this.currentTabIndex()]);\n\n protected override async ngOnInit() {\n super.ngOnInit();\n this.allWidgets.set(this.widgets);\n this.pinnedWidgets.set((await this.settingService.get<string[]>(this.pinnedSettingKey)) || []);\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 protected handleClick(event: MouseEvent, widget: AXPDisplayWidgetConfig) {\n if (event.ctrlKey) {\n const currentSelection = this.selectedWidgets();\n const isAlreadySelected = currentSelection.some((w) => w === widget);\n\n if (isAlreadySelected) {\n // Deselect widget if already selected\n this.selectedWidgets.set(currentSelection.filter((w) => w !== widget));\n } else {\n // Add widget to selection\n this.selectedWidgets.set([...currentSelection, widget]);\n }\n } else {\n // If CTRL is not pressed, select only the clicked widget\n this.close({ widgets: [widget] });\n }\n }\n\n protected async handlePinClick(e: MouseEvent, widget: AXPDisplayWidgetConfig) {\n e.stopPropagation();\n widget.pinned = !widget.pinned;\n // Get the current list of pinned widgets from settings\n let pinnedWidgets = (await this.settingService.get<string[]>(this.pinnedSettingKey)) || [];\n\n // Update the list of pinned widgets based on the pinned status\n if (widget.pinned) {\n if (!pinnedWidgets.includes(widget.name)) {\n pinnedWidgets.push(widget.name);\n }\n } else {\n pinnedWidgets = pinnedWidgets.filter((name) => name !== widget.name);\n }\n\n // Save the updated list of pinned widgets\n await this.settingService.scope(AXPPlatformScope.User).set(this.pinnedSettingKey, pinnedWidgets);\n\n // Trigger a re-render of the widgets\n this.pinnedWidgets.set(pinnedWidgets);\n }\n\n // Check if a widget is selected\n protected isWidgetSelected(widget: AXPDisplayWidgetConfig): boolean {\n return this.selectedWidgets().includes(widget);\n }\n\n protected handleConfirmSelection(): void {\n this.close({ widgets: this.selectedWidgets() });\n }\n}\n","<div\n class=\"ax-flex ax-flex-col ax-h-[95vh]\"\n [ngClass]=\"{ 'lg:ax-h-[75vh]': maxVisibleWidgets() > 10, 'lg:ax-h-[50vh]': maxVisibleWidgets() <= 10 }\"\n>\n <div>\n <ax-tabs [look]=\"'with-line'\" (onActiveTabChanged)=\"handleTabChange($event)\">\n @for(w of tabs();track $index) {\n <ax-tab-item [text]=\"w.title\" [key]=\"$index.toString()\" [active]=\"currentTabIndex() === $index\"></ax-tab-item>\n }\n </ax-tabs>\n </div>\n <div class=\"ax-overflow-auto\" #content>\n <div\n class=\"ax-p-4 ax-sticky ax-top-0 ax-z-10 ax-transition-all\"\n #sticky=\"axpSticky\"\n [axpSticky]=\"'ax-bg-lightest ax-shadow-xl'\"\n [stickyParent]=\"content\"\n [stickyOffset]=\"10\"\n >\n <ax-search-box\n look=\"fill\"\n placeholder=\"e.g. Button, Text, ...\"\n [(ngModel)]=\"searchTerm\"\n [delayTime]=\"300\"\n [axAutoFocus]=\"true\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n <div class=\"ax-flex ax-flex-col ax-p-4 ax-pt-0\">\n <ng-template #itemTpl let-w>\n @let isSelected= isWidgetSelected(w);\n <div\n (click)=\"handleClick($event, w)\"\n class=\"ax-py-2 ax-px-3 ax-rounded-md ax-flex ax-gap-3 ax-items-center ax-group hover:ax-bg-primary-lightest/65 hover:ax-text-primary-on-lightest ax-cursor-pointer\"\n [class.ax-bg-primary-lightest]=\"isSelected\"\n [class.ax-text-primary-on-lightest]=\"isSelected\"\n [class.ax-border-primary-lightest]=\"isSelected\"\n >\n <div\n class=\"ax-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-rounded-md ax-border group-hover:ax-bg-primary-lighter group-hover:ax-text-primary-on-lighter group-hover:ax-border-primary-lighter\"\n [class.ax-bg-primary-light]=\"isSelected\"\n [class.ax-text-primary-on-light]=\"isSelected\"\n [class.ax-border-primary-light]=\"isSelected\"\n [class.ax-surface]=\"!isSelected\"\n >\n <i [ngClass]=\"w.icon\" class=\"ax-text-lg\"></i>\n </div>\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-flex-1\">\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n <div class=\"ax-font-semibold ax-text-sm\">{{ w.title }}</div>\n <div (click)=\"handlePinClick($event, w)\">\n @if (w.pinned) {\n <i class=\"fa-solid fa-thumbtack ax-text-sm ax-rotate-45\"></i>\n } @else {\n <i class=\"fa-light fa-thumbtack ax-text-sm ax-rotate-45 ax-invisible group-hover:ax-visible\"></i>\n }\n </div>\n </div>\n <span class=\"ax-text-xs ax-truncate\">\n {{ w.description }}\n </span>\n </div>\n </div>\n </ng-template>\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2\">\n @for(w of pinnedList();track $index) {\n <ng-container *ngTemplateOutlet=\"itemTpl; context: { $implicit: w }\"></ng-container>\n }\n </div>\n @if(pinnedList().length) {\n <hr class=\"ax-my-4 ax-border-dashed\" />\n }\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2\">\n @for(w of regularList();track $index) {\n <ng-container *ngTemplateOutlet=\"itemTpl; context: { $implicit: w }\"></ng-container>\n }\n </div>\n </div>\n </div>\n</div>\n@if(selectedWidgets().length) {\n<ax-footer>\n <ax-suffix>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n text=\"{{ selectedWidgets().length }} Selected\"\n (onClick)=\"handleConfirmSelection()\"\n ></ax-button>\n </ax-suffix>\n</ax-footer>\n}\n","import { AXCollapseModule } from '@acorex/components/collapse';\nimport { convertArrayToDataSource } from '@acorex/cdk/common';\nimport { AXTabsModule, AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport {\n AXPLayoutBuilderModule,\n AXPLayoutContextChangeEvent,\n AXPWidgetConfig,\n AXPWidgetDataSourceProviderService,\n AXPWidgetNode,\n AXPWidgetProperty,\n AXPWidgetRegistryService,\n} from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\n\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n EventEmitter,\n inject,\n input,\n Output,\n signal,\n untracked,\n WritableSignal,\n} from '@angular/core';\nimport { capitalize, cloneDeep, isArray, isEmpty, isNil, merge, set, sortBy, unionBy } from 'lodash-es';\nimport { AXPDesignerConnector } from '../designer';\nimport { AXTranslationModule } from '@acorex/core/translation';\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\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 imports: [CommonModule, AXCollapseModule, AXTabsModule, AXPLayoutBuilderModule, AXTranslationModule],\n})\nexport class AXPWidgetPropertyViewerComponent {\n widget = input.required<AXPWidgetNode>();\n\n mode = input<'simple' | 'advanced'>('simple');\n\n private widgetRegistryService = inject(AXPWidgetRegistryService);\n\n protected connector = inject(AXPDesignerConnector);\n protected dataSourceProvider = inject(AXPWidgetDataSourceProviderService);\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 protected groupCollapsedStates: Map<string, boolean> = new Map();\n\n @Output()\n onChanged = new EventEmitter<AXPWidgetPropertiesChangedEvent>();\n\n protected context = signal<any>({});\n\n protected initialContext: any = {};\n\n constructor() {\n effect(() => {\n if (!this.widget()) 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 }\n\n public update(values: any) {\n this.context.set(merge(cloneDeep(this.context()), values));\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[]) ?? []);\n //\n this.allPoperties.push(...props);\n tab.groups = unionBy(\n sortBy(\n props.map((pg) => ({\n isCollapsed: !!this.groupCollapsedStates.get(pg.group.name),\n name: pg.group.name,\n title: pg.group.title,\n props: sortBy(\n props.filter((p) => p.group.name == pg.group.name && pg.visible),\n ['order', 'title'],\n ),\n })),\n ['order', 'title'],\n ),\n 'name',\n ).filter((c) => c.props.length);\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)) ||\n (isArray(c.schema.defaultValue) && !isEmpty(c.schema.defaultValue)),\n )\n .reduce((acc, c) => {\n set(acc, c.schema.interface.path, c.schema.defaultValue);\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: AXPLayoutContextChangeEvent) {\n untracked(() => {\n this.context.set(e.data);\n this.onChanged.emit({ values: this.context(), mode: e.state == 'initiated' ? 'init' : 'update' });\n });\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 protected handleCollapsedChange(group: string, collapsed: boolean) {\n this.groupCollapsedStates.set(group, collapsed);\n }\n\n protected functions = {\n getDataSourceNames: this.getDataSourceNames.bind(this),\n };\n\n private async getDataSourceNames(): Promise<{ id: string; title: string; valueField: string; textField: string }[]> {\n const result = (await this.dataSourceProvider.items()).map((c) => ({\n id: c.name,\n title: c.title,\n valueField: c.valueField,\n textField: c.textField,\n }));\n return result;\n }\n}\n","<axp-widgets-container [context]=\"context()\" (onContextChanged)=\"handleContextChange($event)\" [functions]=\"functions\">\n @if (mode()=='advanced') {\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]=\"'flat'\">\n @for( group of groups();track $index){\n <ax-collapse class=\"!ax-mb-0\" [caption]=\"group.title\" [(isCollapsed)]=\"group.isCollapsed\"\n (isCollapsedChange)=\"handleCollapsedChange(group.name, $event)\">\n <div class=\"ax-flex ax-flex-col\">\n @for( p of group.props;track $index){\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-py-2\">\n <span class=\"ax-font-semibold\">{{ p.title }}</span>\n @if(p.schema.interface) {\n <ng-container axp-widget-renderer [node]=\"p.schema.interface\" [mode]=\"'edit'\"> </ng-container>\n }\n </div>\n }\n </div>\n </ax-collapse>\n }\n </ax-collapse-group>\n </div>\n </div>\n }\n <!-- Simple-->\n @else {\n <div class=\"ax-flex ax-flex-col ax-p-4 ax-gap-4\">\n <!-- groups -->\n @for( group of groups();track $index){\n <!-- props -->\n @for( p of group.props;track $index){\n <div class=\"ax-flex ax-flex-col ax-gap-2\">\n <span class=\"ax-font-semibold\">{{ p.title | translate | async }}</span>\n @if(p.schema.interface) {\n <ng-container axp-widget-renderer [node]=\"p.schema.interface\" [mode]=\"'edit'\"> </ng-container>\n }\n </div>\n }\n }\n </div>\n }\n\n</axp-widgets-container>","import {\n AXP_WIDGET_TOKEN,\n AXPBaseWidgetComponent,\n AXPLayoutWidgetComponent,\n AXPValueWidgetComponent,\n AXPWidgetConfig,\n AXPWidgetNode,\n AXPWidgetNodeToken,\n AXPWidgetRegistryService,\n AXPWidgetRenderMode,\n AXPWidgetStatus,\n} from '@acorex/platform/layout/builder';\nimport {\n Directive,\n effect,\n inject,\n Injector,\n input,\n NgZone,\n OnChanges,\n OnDestroy,\n signal,\n SimpleChanges,\n ViewContainerRef,\n WritableSignal,\n} from '@angular/core';\nimport { cloneDeep, get, isEqual, isNil, merge, set } from 'lodash-es';\nimport { debounceTime, distinctUntilChanged, filter, first, Subscription } from 'rxjs';\nimport { AXPDesignerService } from './designer.service';\n\n@Directive({\n selector: '[axp-widget-designer-renderer]',\n standalone: true,\n})\nexport class AXPWidgetDesignerRendererDirective implements OnChanges, OnDestroy {\n protected mergedOptions: WritableSignal<any> = signal<any>({});\n\n private injector = inject(Injector);\n protected widgetRegistery = inject(AXPWidgetRegistryService);\n protected zone = inject(NgZone);\n\n protected isLoading = signal(true);\n\n private instance!: AXPBaseWidgetComponent;\n private config?: AXPWidgetConfig | undefined;\n\n private service = inject(AXPDesignerService);\n private viewContainerRef = inject(ViewContainerRef);\n\n parentNode = input<AXPLayoutWidgetComponent | null>();\n\n index = input<number | null>();\n locked = input<boolean>(false);\n\n mode = input.required<AXPWidgetRenderMode>();\n node = input.required<AXPWidgetNode>();\n\n private hostElement = () => this.instance?.host as HTMLDivElement;\n private getId = (w: AXPWidgetNode) => get(w, '__meta__.id');\n private isCurrentWidget = (w: AXPWidgetNode) => this.getId(w) == this.getId(this.node());\n\n private subs: Subscription[] = [];\n\n /**\n * @ignore\n */\n constructor() {\n this.subs[0] = this.service.onUpdate\n .pipe(\n //debounceTime(time),\n distinctUntilChanged(\n (p, c) => this.getId(p.widget) == this.getId(c.widget) && isEqual(p.values?.options, c.values?.options)\n ),\n filter((c) => this.isCurrentWidget(c.widget) && !this.locked())\n )\n .subscribe((c) => {\n this.applyOptions(c.values?.options);\n });\n //\n this.subs[1] = this.service.onSelected\n .pipe(distinctUntilChanged((p, c) => this.getId(p.widget) == this.getId(c.widget)))\n .subscribe((c) => {\n this.zone.runOutsideAngular(() => {\n if (this.isCurrentWidget(c.widget) && !this.locked()) {\n this.applySelectedStyle();\n } else {\n this.removeSelectedStyle();\n }\n });\n });\n //\n this.subs[2] = this.service.onFocused\n .pipe(\n distinctUntilChanged(\n (p, c) => !isNil(p.widget) && !isNil(c.widget) && this.getId(p.widget) == this.getId(c.widget)\n )\n )\n .subscribe((c) => {\n if (c.widget && this.isCurrentWidget(c.widget)) {\n this.addOverlay();\n } else {\n this.removeOverlay();\n }\n });\n //\n this.subs[3] = this.service.onRefresh\n .pipe(\n debounceTime(200),\n filter((c) => this.isCurrentWidget(c.widget))\n )\n .subscribe((c) => {\n this.instance?.setChildren(this.node().children ?? []);\n });\n //\n }\n\n // Detect input changes\n ngOnChanges(changes: SimpleChanges) {\n if (changes['mode'] || changes['node']) {\n this.loadComponent();\n }\n }\n\n ngOnDestroy(): void {\n this.subs.forEach((s) => {\n s.unsubscribe();\n });\n }\n\n private async loadComponent() {\n this.viewContainerRef.clear();\n this.isLoading.set(true);\n this.config = this.widgetRegistery.resolve(this.node().type);\n //\n const props = [...(this.config?.properties ?? []), ...(this.config?.components[this.mode()]?.properties ?? [])]\n ?.filter((c) => c.schema.defaultValue != null)\n .map((c) => ({ [c.name]: c.schema.defaultValue }))\n .reduce((acc, curr) => {\n return { ...acc, ...curr };\n }, {});\n //\n this.mergedOptions.set(merge(props, this.node().options) || {});\n\n this.preprocessAndInitialOptions(cloneDeep(this.node().options));\n\n const tokenValue = {\n node: this.node(),\n options: this.mergedOptions(),\n config: this.config,\n defaultValue: 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.instance = this.viewContainerRef.createComponent<AXPBaseWidgetComponent>(com, { injector: token }).instance;\n this.instance.locked = this.locked();\n this.instance.parent = this.parentNode();\n this.instance.index = this.index();\n this.instance.mode = this.mode();\n //\n this.instance.onStatusChanged.pipe(filter(c => c == AXPWidgetStatus.Rendered), first()).subscribe(() => {\n const host = this.hostElement();\n set(host, '__meta__.renderer', this);\n set(host, '__meta__.instance', this.instance);\n host.classList.add('axp-widget-host');\n if (this.mode() == 'designer') {\n if (!this.locked()) {\n host.addEventListener('mouseover', (e) => {\n e.stopPropagation();\n this.addOverlay();\n this.focus();\n });\n host.addEventListener('mouseleave', (e) => {\n e.stopPropagation();\n this.removeOverlay();\n this.blur();\n });\n\n host.addEventListener('click', (e) => {\n e.stopPropagation();\n this.applySelectedStyle();\n this.service.select({ widget: this.node() });\n });\n this.service.register({\n config: this.config!,\n id: get(this.node(), '__meta__.id') as any as number,\n instance: this.instance,\n widget: this.node(),\n });\n }\n }\n });\n }\n\n private overlay: HTMLElement | null;\n\n public select() {\n if (this.locked()) return;\n //\n this.service.select({ widget: this.node() });\n this.applySelectedStyle();\n }\n\n public focus() {\n if (this.locked()) return;\n //\n this.service.focus({ widget: this.node() });\n }\n\n public blur() {\n if (this.locked()) return;\n //\n this.service.focus({ widget: null });\n }\n\n private applySelectedStyle() {\n if (this.locked()) return;\n //\n this.hostElement()?.classList.add('axp-state-selected');\n this.hostElement()?.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n\n private removeSelectedStyle() {\n this.hostElement()?.classList.remove('axp-state-selected');\n }\n\n private addOverlay() {\n if (this.locked()) return;\n //\n this.zone.runOutsideAngular(() => {\n if (this.hostElement()) {\n this.hostElement()?.classList.add('axp-state-hover');\n //\n if (this.hostElement().querySelector('.axp-widget-overlay') || this.config?.type == 'container') {\n return;\n }\n this.overlay = document.createElement('div');\n this.overlay.classList.add('axp-widget-overlay');\n this.overlay.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n this.select();\n });\n this.overlay.addEventListener('mouseleave', (e) => {\n e.preventDefault();\n e.stopPropagation();\n this.blur();\n });\n this.hostElement().appendChild(this.overlay);\n }\n });\n }\n\n private removeOverlay() {\n this.zone.runOutsideAngular(() => {\n if (this.hostElement()) {\n this.hostElement()?.classList.remove('axp-state-hover');\n //\n this.overlay?.remove();\n }\n });\n }\n\n private preprocessAndInitialOptions(obj: any, pathPrefix: string = ''): void {\n if (!obj) return;\n //\n Object.entries(obj).forEach(([key, value]) => {\n const currentPath = pathPrefix ? `${pathPrefix}.${key}` : key;\n this.mergedOptions.update((currentOptions) => {\n return set(currentOptions, currentPath, value);\n });\n });\n }\n\n private applyOptions(values: any): void {\n if (this.instance instanceof AXPValueWidgetComponent && this.node().defaultValue != null) {\n this.instance.setValue(this.node().defaultValue);\n }\n this.mergedOptions.update((currentOptions) => {\n return merge(currentOptions, values);\n });\n this.instance?.setOptions(this.mergedOptions());\n }\n}\n","import {\n AXContextMenuComponent,\n AXContextMenuItemsClickEvent,\n AXContextMenuOpeningEvent,\n AXMenuItem,\n AXMenuModule,\n} from '@acorex/components/menu';\nimport { AXPLayoutBuilderModule, AXPValueWidgetComponent } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n HostBinding,\n inject,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { get, set } from 'lodash-es';\nimport { AXPDesignerService } from '../../shared/designer.service';\nimport { AXPWidgetDesignerRendererDirective } from '../../shared/widget-designer-renderer.directive';\nimport { AXPDesignerWidgetComponent } from '../../shared/designer.types';\nimport { AXP_DESIGNER_SELECT_WIDGET_MENU } from '../../shared/generic-commands.types';\n\n@Component({\n selector: 'axp-designer-board',\n templateUrl: './board.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXPLayoutBuilderModule, AXPWidgetDesignerRendererDirective, AXMenuModule]\n})\nexport class AXPDesignerBoardComponent {\n @ViewChild('contextMenu')\n protected contextMenu: AXContextMenuComponent;\n\n protected context: any = {};\n private elementRef = inject(ElementRef<HTMLDivElement>) as ElementRef<HTMLDivElement>;\n\n private breakpointMap = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n xxl: 1536,\n };\n\n // Unified method to extract media queries and create a custom class\n applyResponsiveStyles(breakpoint: string) {\n const minWidth = get(this.breakpointMap, breakpoint) as number;\n const mediaRules = [];\n\n // Loop through all the stylesheets\n for (const sheet of Array.from(document.styleSheets)) {\n try {\n // Loop through CSS rules\n for (const rule of Array.from(sheet.cssRules)) {\n // Check if the rule is a CSSMediaRule\n if (rule instanceof CSSMediaRule && rule.media.mediaText.includes(`min-width: ${minWidth}px`)) {\n // Loop through the media rule's CSS rules\n for (const subRule of Array.from(rule.cssRules)) {\n mediaRules.push(subRule.cssText);\n }\n }\n }\n } catch (e) {\n console.error('Error accessing stylesheet:', e);\n }\n }\n\n // Create a dynamic class for the media queries\n this.createCustomClass(`axp-preview-${breakpoint}`, mediaRules, breakpoint);\n }\n\n private createCustomClass(className: string, styles: string[], breakpoint: string) {\n const styleSheet = document.createElement('style');\n styleSheet.setAttribute('data-screen', breakpoint);\n\n // Construct a pure CSS string, dynamically replacing the breakpoint prefix\n let styleString = '';\n styles.forEach((style) => {\n // Replace any prefixed classes like 'lg:' or 'md:' dynamically\n const dynamicPrefix = new RegExp(`\\\\.${breakpoint}\\\\\\\\:`, 'g');\n styleString += `.${className} ${style.replace(dynamicPrefix, '.')}`; // Replace the breakpoint prefix\n });\n\n styleSheet.innerText = styleString;\n this.removeCustomClass();\n this.elementRef.nativeElement.appendChild(styleSheet);\n }\n\n private removeCustomClass() {\n this.elementRef.nativeElement.querySelectorAll('style').forEach((s) => s.remove());\n }\n\n protected service = inject(AXPDesignerService);\n\n protected width = computed(() => {\n switch (this.service.size()) {\n case 'sm':\n return '340px';\n case 'md':\n case 'lg':\n return '768px';\n default:\n return '100%';\n }\n });\n\n private ef = effect(() => {\n this.removeCustomClass();\n if (this.service.size() != 'xl') {\n this.applyResponsiveStyles(this.service.size());\n }\n });\n\n /**\n * @ignore\n */\n constructor() {\n this.service.onRefresh.subscribe(() => {\n this.contextMenu?.refresh();\n });\n }\n\n\n protected handleContextMenuOpening(e: AXContextMenuOpeningEvent) {\n const renderer = get(e.targetElement, '__meta__.renderer') as unknown as AXPWidgetDesignerRendererDirective;\n const instance = get(e.targetElement, '__meta__.instance') as unknown as AXPDesignerWidgetComponent;\n\n if (!renderer || !instance) {\n e.canceled = true;\n return;\n }\n\n renderer.select();\n\n // Fetch context menu items for the current instance\n try {\n const items: AXMenuItem[] = this.service.getContextMenuItems(instance, true);\n if (items.length) {\n e.items.push(...items);\n } else {\n e.canceled = true;\n }\n } catch (error) {\n console.error('Failed to get context menu items:', error);\n e.canceled = true;\n }\n\n // Recursively bind instance data to all items\n this.bindInstanceToItems(e.items, instance);\n\n // Traverse through parents and add their menu items directly to the root level\n this.addParentsToRootMenu(instance, e.items);\n }\n\n\n private addParentsToRootMenu(instance: AXPDesignerWidgetComponent, items: AXMenuItem[]) {\n let parent = (instance as unknown as AXPValueWidgetComponent)?.parent;\n const parentItems: AXMenuItem[] = [];\n\n // Traverse up the parent chain, adding each parent to the \"Parents\" menu\n while (parent) {\n try {\n const widget = parent as unknown as AXPDesignerWidgetComponent;\n const parentContextItems: AXMenuItem[] = this.service.getContextMenuItems(widget);\n\n // Create a new menu item for this parent\n const parentMenuItem: AXMenuItem = {\n text: parent.config.title,\n icon: parent.config.icon,\n items: [\n {\n text: 'Select',\n name: 'select',\n break: true,\n icon: 'fa-solid fa-arrow-pointer',\n },\n ...parentContextItems,\n ],\n };\n\n // Recursively bind instance data to all items\n this.bindInstanceToItems(parentMenuItem.items ?? [], widget);\n\n // Add the parent menu item to the parentItems array\n parentItems.push(parentMenuItem);\n } catch (error) {\n console.error('Failed to get parent context menu items:', error);\n }\n\n // Move to the next parent in the chain\n parent = (parent as unknown as AXPValueWidgetComponent)?.parent;\n }\n\n // If there are any parent items, add them under a \"Parents\" group\n if (parentItems.length > 0) {\n items[items.length - 1].break = true;\n items.push({\n text: 'Parents',\n icon: 'fa-solid fa-turn-up', // Icon for the \"Parents\" group\n items: parentItems, // Add all parent items here\n });\n }\n }\n\n protected async handleContextMenuItemClick(e: AXContextMenuItemsClickEvent) {\n if (e.item.name) {\n const instance: AXPDesignerWidgetComponent = get(e.item.data, \"instance\") as unknown as AXPDesignerWidgetComponent;\n await this.service.executeCommand({ instance, name: e.item.name });\n }\n }\n\n private bindInstanceToItems(items: AXMenuItem[], instance: AXPDesignerWidgetComponent): void {\n items.forEach(item => {\n // Ensure each item gets the correct instance\n item.data = { ...(item.data ?? {}), instance };\n\n // If the item has sub-items, bind instance to them recursively\n if (item.items) {\n this.bindInstanceToItems(item.items, instance);\n }\n });\n }\n\n @HostBinding('style')\n private get __style(): string {\n const cls: any = {};\n cls[`width`] = this.width();\n cls[`max-width`] = '1280px';\n return cls;\n }\n\n @HostBinding('class')\n private get __class(): string {\n const cls: any = {};\n cls[`axp-designer-board`] = true;\n cls[`axp-state-design`] = true;\n cls['ax-h-full'] = true;\n cls['ax-overflow-auto'] = true;\n cls[`axp-preview-${this.service.size()}`] = true;\n return cls;\n }\n}\n","<axp-widgets-container [context]=\"context\">\n <ng-container axp-widget-designer-renderer [node]=\"service.currentPage()\" [mode]=\"'designer'\"></ng-container>\n</axp-widgets-container>\n\n<ax-context-menu class=\"ax-dark\" #contextMenu [target]=\"'.axp-widget-host'\" [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\" (onOpening)=\"handleContextMenuOpening($event)\" (onItemClick)=\"handleContextMenuItemClick($event)\">\n</ax-context-menu>","import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPLayoutBuilderModule, AXPWidgetNode } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { AXPDesignerService } from '../../shared/designer.service';\n\n@Component({\n selector: 'axp-designer-breadcrumbs',\n template: `\n <ax-breadcrumbs>\n @for( b of service.breadcrumbs();track $index){\n <ax-breadcrumbs-item>\n <a (click)=\"handleClick(b)\" (mouseover)=\"handleMouseOver(b)\"> {{ getTitle(b) }}</a>\n </ax-breadcrumbs-item>\n }\n <ng-template #divider>\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </ng-template>\n </ax-breadcrumbs>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXPLayoutBuilderModule, AXBreadcrumbsModule, AXDecoratorModule]\n})\nexport class AXPDesignerBreadcrumbsComponent {\n protected service = inject(AXPDesignerService);\n\n protected getTitle(node: AXPWidgetNode): string {\n return get(node, '__meta__.config.title') as any as string;\n }\n\n protected handleClick(node: AXPWidgetNode) {\n this.service.select({ widget: node });\n }\n\n protected handleMouseOver(node: AXPWidgetNode) {\n this.service.focus({ widget: node });\n }\n}\n","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { CommonModule } from '@angular/common';\nimport { Component, OnInit } from '@angular/core';\n\n@Component({\n imports: [CommonModule, AXDecoratorModule],\n selector: 'axp-designer-drawer-content',\n templateUrl: 'drawer-content.component.html'\n})\n\nexport class AXPLayoutDesignerDrawerContentComponent implements OnInit {\n constructor() { }\n\n ngOnInit() { }\n}","<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72 ax-h-full\">\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 ax-font-semibold\">\n <ng-content select=\"ax-title\"></ng-content>\n </div>\n <div class=\"ax-flex ax-gap-1 ax-items-center\">\n <ng-content select=\"ax-content[header]\">\n </ng-content>\n <ax-close-button></ax-close-button>\n </div>\n </div>\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n <ng-content select=\"ax-content[body]\">\n\n </ng-content>\n </div>\n</div>","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXPDesignerService } from '../../../shared/designer.service';\nimport { AXPLayoutDesignerDrawerContentComponent } from '../../../shared/drawer-content/drawer-content.component';\nimport { AXPDesignerConnector } from '../../../shared/designer-connector.service';\nimport { AXPWidgetDataSourceProviderService } from '@acorex/platform/layout/builder';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { AXPDataGenerator } from '@acorex/platform/core';\n\n@Component({\n selector: 'axp-designer-data-sources',\n templateUrl: 'data-sources.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXButtonModule,\n AXPLayoutDesignerDrawerContentComponent\n ]\n})\n\nexport class AXPDesignerDataSourcesComponent {\n\n protected service = inject(AXPDesignerService);\n protected workflow = inject(AXPWorkflowService);\n protected dataSourceProvider = inject(AXPWidgetDataSourceProviderService);\n\n protected list = signal<{ name: string, title: string }[]>([]);\n\n\n async ngOnInit() {\n const items = (await this.dataSourceProvider.items()).map(c => ({ name: c.name, title: c.title }));\n this.list.set(items);\n }\n\n\n protected async handleAddClick() {\n this.workflow.execute('create-entity',\n {\n entity: `PlatformManagement.DataSource`,\n options: {\n process: {\n canCreateNewOne: false,\n redirect: false,\n },\n layout: {\n size: 'lg'\n }\n },\n metadata: {\n formBuilder: true\n }\n }\n\n )\n }\n\n\n}","<axp-designer-drawer-content>\n\n <ax-title>Data Sources</ax-title>\n\n <ax-content header>\n <ax-button look=\"blank\" class=\"ax-sm\" title=\"Add New Data Source\" (onClick)=\"handleAddClick()\">\n <ax-icon class=\"fa-light fa-plus\"></ax-icon>\n </ax-button>\n </ax-content>\n\n <ax-content body>\n @if(list().length)\n {\n <ul class=\"axp-designer-drawer-list\">\n @for (item of list(); track $index) {\n <li>\n <i class=\"ax-me-1 fa-solid fa-table\"></i>\n {{ item.title }}\n </li>\n }\n </ul>\n }\n @else {\n <div class=\"axp-designer-drawer-empty\">No data source found in the\n document\n </div>\n }\n </ax-content>\n\n</axp-designer-drawer-content>","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXPLayoutDesignerDrawerContentComponent } from '../../../shared/drawer-content/drawer-content.component';\nimport { AXPDesignerService } from '../../../shared/designer.service';\n\n@Component({\n selector: 'axp-designer-history',\n templateUrl: 'history.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXButtonModule,\n AXDropdownModule,\n AXPLayoutDesignerDrawerContentComponent\n ]\n})\n\nexport class AXPDesignerHistoryComponent {\n protected service = inject(AXPDesignerService);\n}","<axp-designer-drawer-content>\n\n <ax-title>History</ax-title>\n\n <ax-content header>\n <ax-button look=\"blank\" class=\"ax-sm\">\n <ax-icon class=\"fa-light fa-ellipsis\"></ax-icon>\n <ax-dropdown-panel class=\"ax-sm\">\n <ax-button-item-list>\n <ax-button-item text=\"Clear\" name=\"add\" (onClick)=\"service.clearHistory()\"> </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </ax-content>\n\n <ax-content body>\n @if(service.history().length)\n {\n <ul class=\"axp-designer-drawer-list\">\n @for (step of service.history(); track $index) {\n <li (click)=\"service.navigateTo($index)\" [class.ax-italic]=\"step.isFuture\"\n [class.ax-text-neutral-400]=\"step.isFuture\" [class.ax-state-selected]=\"step.isCurrent\">\n <i class=\"ax-me-1\" [ngClass]=\"step.icon\"></i>\n {{ step.description }}\n </li>\n }\n </ul>\n }\n @else {\n <div class=\"axp-designer-drawer-empty\">\n No changes have been made yet.\n </div>\n }\n </ax-content>\n\n</axp-designer-drawer-content>\n","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPWidgetConfig, AXPWidgetNode, AXPWidgetsCatalog } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { merge } from 'rxjs';\nimport { AXPLayoutDesignerDrawerContentComponent } from '../../../shared/drawer-content/drawer-content.component';\nimport { AXPDesignerService } from '../../../shared/designer.service';\n\n@Component({\n selector: 'axp-designer-outline',\n templateUrl: 'outline.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXPLayoutDesignerDrawerContentComponent\n ]\n})\nexport class AXPDesignerOutlineComponent {\n protected service = inject(AXPDesignerService);\n\n protected collapsedStates: Map<any, boolean> = new Map();\n\n protected root = signal(this.getTree());\n\n constructor() {\n merge(this.service.onRefresh, this.service.onUpdate).subscribe(() => {\n this.root.update((c) => ({ ...this.getTree() }));\n });\n }\n\n private getTree(): AXPWidgetNode {\n return {\n type: AXPWidgetsCatalog.document,\n children: [this.service.currentPage()],\n } as AXPWidgetNode;\n }\n\n private toggleCollapse(node: any) {\n // Toggle the current state or set to true if undefined\n this.collapsedStates.set(node, !this.collapsedStates.get(node));\n }\n\n protected isCollapsed(node: any): boolean {\n // Return the collapsed state, default is false (expanded)\n return !!this.collapsedStates.get(node);\n }\n\n protected getConfig(node: AXPWidgetNode): AXPWidgetConfig {\n return get(node, '__meta__.config') as any as AXPWidgetConfig;\n }\n\n protected handleClick(e: MouseEvent, node: AXPWidgetNode) {\n e.stopPropagation();\n this.service.select({ widget: node });\n }\n\n protected handleToggleClick(event: MouseEvent, item: any): void {\n event.stopPropagation(); // Prevents the event from bubbling up to parent elements\n this.toggleCollapse(item);\n }\n\n protected handleMouseOver(e: MouseEvent, node: AXPWidgetNode) {\n e.stopPropagation();\n this.service.focus({ widget: node });\n }\n}\n","<axp-designer-drawer-content>\n\n <ax-title>Outline</ax-title>\n\n <ax-content body>\n @if(root().children?.length)\n {\n <ul class=\"ax-space-y-1 ax-p-1 ax-text-white ax-text-sm\">\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 (click)=\"handleClick($event,item)\" (mouseover)=\"handleMouseOver($event,item)\">\n <div [class.ax-bg-neutral-700]=\"item === service.selectedNode()\"\n class=\"ax-flex ax-flex-row ax-items-center ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700 ax-py-1 ax-px-2 ax-rounded-sm ax-group\">\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 class=\"ax-truncate ax-flex-1 ax-pe-2\">{{config.title}} : {{item.name}}</span>\n <div class=\"ax-invisible group-hover:ax-visible ax-flex ax-gap-2 ax-justify-end \">\n @if(config.type=='container')\n {\n <i class=\"fa-light fa-plus hover:ax-text-primary-500\" (click)=\"service.showPicker(item)\"></i>\n }\n @if(config.name!=\"page-layout\")\n {\n <i class=\"fa-light fa-xmark hover:ax-text-danger-500\" (click)=\"service.removeWidget(item)\"></i>\n }\n </div>\n </div>\n @if(item.children?.length && !isCollapsed(item)) {\n <ul class=\"ax-space-y-1 ax-ps-3 ax-text-white ax-text-sm\">\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=\"axp-designer-drawer-empty\">No widgets found in the page\n </div>\n }\n </ax-content>\n\n</axp-designer-drawer-content>","import { AXPLayoutBuilderModule } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXPLayoutDesignerDrawerContentComponent } from '../../../shared/drawer-content/drawer-content.component';\nimport { AXPDesignerService } from '../../../shared/designer.service';\n\n@Component({\n selector: 'axp-designer-pages',\n templateUrl: 'pages.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXPLayoutBuilderModule,\n AXDecoratorModule,\n AXButtonModule,\n AXPLayoutDesignerDrawerContentComponent\n ]\n})\n\nexport class AXPDesignerPagesComponent {\n\n protected service = inject(AXPDesignerService);\n\n}","<axp-designer-drawer-content class=\"ax-text-on-lightest\">\n <ax-title>Pages</ax-title>\n <ax-content header>\n <ax-button look=\"blank\" class=\"ax-sm\" (onClick)=\"service.addNewPage()\" title=\"Add New Page\">\n <ax-icon class=\"fa-light fa-file-circle-plus\"></ax-icon>\n </ax-button>\n </ax-content>\n\n <ax-content body>\n @let count = service.document().children?.length ?? 0; @if(count) {\n <ul class=\"ax-text-sm ax-p-2 ax-rounded ax-md ax-space-y-1\">\n @for( page of service.document().children;track $index) {\n <li (click)=\"service.goToPage($index)\"\n class=\"ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out hover:ax-bg-dark ax-py-1 ax-px-2 ax-rounded-sm ax-group ax-flex ax-justify-between ax-items-center\"\n [class.ax-bg-darkest]=\"$index == service.currentPageIndex()\">\n <div>\n <i class=\"fa-light fa-file ax-me-1\"></i>\n Page {{ $index + 1 }}\n </div>\n <div class=\"ax-invisible group-hover:ax-visible ax-flex ax-gap-2\">\n @if(count>1) {\n <i class=\"fa-light fa-xmark hover:ax-text-danger-500\" (click)=\"service.removePage($index)\"></i>\n }\n <i class=\"fa-light fa-clone hover:ax-text-primary-500\" (click)=\"service.clonePage($index)\"></i>\n </div>\n </li>\n }\n </ul>\n } @else {\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">No pages found in the document</div>\n }\n </ax-content>\n</axp-designer-drawer-content>\n","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { CommonModule } from '@angular/common';\nimport { Component, HostListener, inject } from '@angular/core';\nimport { AXPDesignerService } from '../../shared/designer.service';\n\n@Component({\n imports: [CommonModule, AXDecoratorModule, AXMenuModule],\n selector: 'axp-designer-header-menu',\n templateUrl: 'header-menu.component.html'\n})\nexport class AXPDesignerHeaderMenuComponent {\n protected service = inject(AXPDesignerService);\n\n @HostListener('document:keydown', ['$event'])\n private handleKeyboardEvent(event: KeyboardEvent) {\n if (event.code == 'Delete' && this.service.canDelete()) {\n event.preventDefault();\n this.service.removeWidget();\n }\n if (event.code == 'Insert' && this.service.canInsert()) {\n event.preventDefault();\n this.service.showPicker();\n }\n if (event.shiftKey && event.target == document.body) {\n switch (event.code) {\n case 'KeyN':\n event.preventDefault();\n this.service.new();\n break;\n }\n }\n if (event.ctrlKey) {\n switch (event.code) {\n case 'KeyS':\n event.preventDefault();\n if (event.shiftKey) {\n this.service.saveAs();\n } else {\n this.service.save();\n }\n break;\n case 'KeyR':\n event.preventDefault();\n if (event.shiftKey) {\n this.service.openPreviewWindow();\n } else {\n this.service.openPreviewDialog();\n }\n break;\n }\n }\n //\n if (event.ctrlKey && event.target == document.body) {\n switch (event.code) {\n case 'KeyZ':\n if (this.service.canUndo()) {\n event.preventDefault();\n this.service.undo();\n }\n break;\n case 'KeyY':\n if (this.service.canRedo()) {\n event.preventDefault();\n this.service.redo();\n }\n break;\n case 'KeyC':\n if (this.service.canCutCopy()) {\n event.preventDefault();\n this.service.copy();\n }\n break;\n case 'KeyD':\n if (this.service.canCutCopy()) {\n event.preventDefault();\n this.service.clone();\n }\n break;\n case 'KeyX':\n if (this.service.canCutCopy()) {\n // ;\n event.preventDefault();\n this.service.cut();\n }\n break;\n case 'KeyV':\n if (this.service.canPaste()) {\n event.preventDefault();\n this.service.paste();\n }\n break;\n }\n }\n }\n}\n","<ax-menu [openOn]=\"'hover'\" [hasArrow]=\"false\">\n <ax-menu-item>\n <ax-text>File</ax-text>\n <ax-menu-item (onClick)=\"service.new()\">\n <ax-text>New</ax-text>\n <ax-suffix>\n <ax-text> Shift+N </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n @if(service.canSave())\n {\n <ng-container>\n <ax-menu-item (onClick)=\"service.save()\">\n <ax-text>Save</ax-text>\n <ax-suffix>\n <ax-text> Ctrl+S </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item (onClick)=\"service.saveAs()\">\n <ax-text>Save As...</ax-text>\n <ax-suffix>\n <ax-text> Ctrl+Shift+S </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n </ng-container>\n }\n <ax-menu-item>\n <ax-text>Export</ax-text>\n <ax-menu-item (onClick)=\"service.downloadJson()\">\n <ax-text>Download JSON</ax-text>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Import</ax-text>\n <ax-menu-item (onClick)=\"service.importJSon()\">\n <ax-text>Import JSON</ax-text>\n </ax-menu-item>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Edit</ax-text>\n <ax-menu-item [disabled]=\"!service.canUndo()\" (onClick)=\"service.undo()\">\n <ax-text>Undo</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-rotate-left\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+Z </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canRedo()\" (onClick)=\"service.redo()\">\n <ax-text>Redo</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-rotate-right\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+Y </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n <ax-menu-item [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.clone()\">\n <ax-text>Clone</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-clone\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+D </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.cut()\">\n <ax-text>Cut</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-cut\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+X </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.copy()\">\n <ax-text>Copy</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-copy\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+C </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canPaste()\" (onClick)=\"service.paste()\">\n <ax-text>Paste</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-paste\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text>Ctrl+V</ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n <ax-menu-item [disabled]=\"!service.canDelete()\" (onClick)=\"service.removeWidget()\">\n <ax-text>Delete</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-trash\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text>Del</ax-text>\n </ax-suffix>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Run</ax-text>\n <ax-menu-item (onClick)=\"service.openPreviewDialog()\">\n <ax-text>Preview</ax-text>\n <ax-prefix>\n </ax-prefix>\n <ax-suffix>\n <ax-text>Ctrl+R</ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item (onClick)=\"service.openPreviewWindow()\">\n <ax-text>Preview in seperate window</ax-text>\n <ax-prefix> </ax-prefix>\n <ax-suffix>\n <ax-text>Ctrl+Shift+R</ax-text>\n </ax-suffix>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Help</ax-text>\n <ax-menu-item>\n <ax-text>About</ax-text>\n </ax-menu-item>\n </ax-menu-item>\n</ax-menu>","import { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { CommonModule } from '@angular/common';\nimport { Component, model } from '@angular/core';\n\n@Component({\n selector: 'axp-designer-view-sizes',\n imports: [CommonModule, AXButtonGroupModule, AXDecoratorModule, AXMenuModule],\n template: `\n <ax-button-group [color]=\"'primary'\" [selection]=\"'multiple'\">\n <ax-button-group-item [selected]=\"size() == 'xl'\" [data]=\"'xl'\" (onClick)=\"size.set('xl')\">\n <ax-icon class=\"fa-light fa-desktop fa-fw \"></ax-icon>\n </ax-button-group-item>\n <ax-button-group-item [selected]=\"size() == 'lg'\" [data]=\"'lg'\" (onClick)=\"size.set('lg')\">\n <ax-icon class=\"fa-light fa-tablet fa-fw \"></ax-icon>\n </ax-button-group-item>\n <ax-button-group-item [selected]=\"size() == 'sm'\" [data]=\"'sm'\" (onClick)=\"size.set('sm')\">\n <ax-icon class=\"fa-light fa-mobile fa-fw \"></ax-icon>\n </ax-button-group-item>\n </ax-button-group>\n `,\n})\nexport class AXPDesignerViewSizeToolbarComponent {\n public size = model<string>('xl');\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXPLayoutBuilderModule, AXPWidgetConfig } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, HostBinding, inject, input, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { AXPWidgetPropertyViewerComponent } from '../property-viewer/widget-property-viewer.component';\nimport { AXPDesignerBoardComponent } from './components/board/board.component';\nimport { AXPDesignerBreadcrumbsComponent } from './components/breadcrumbs/breadcrumbs.component';\nimport { AXPDesignerDataSourcesComponent } from './components/drawers/data-sources/data-sources.component';\nimport { AXPDesignerHistoryComponent } from './components/drawers/history/history.component';\nimport { AXPDesignerOutlineComponent } from './components/drawers/outline/outline.component';\nimport { AXPDesignerPagesComponent } from './components/drawers/pages/pages.component';\nimport { AXPDesignerHeaderMenuComponent } from './components/header-menu/header-menu.component';\nimport { AXPDesignerViewSizeToolbarComponent } from './components/size-mode/view-size-toolbar.component';\nimport { AXPDesignerService } from './shared/designer.service';\nimport { AXPTemplateLoadingStrategy } from './shared/designer.types';\n\n@Component({\n selector: 'axp-layout-designer',\n templateUrl: './designer.component.html',\n styleUrl: './designer.component.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n AXPLayoutBuilderModule,\n AXPDesignerBoardComponent,\n AXPWidgetPropertyViewerComponent,\n AXPDesignerBreadcrumbsComponent,\n AXPDesignerOutlineComponent,\n AXPDesignerHeaderMenuComponent,\n AXPDesignerHistoryComponent,\n AXPDesignerDataSourcesComponent,\n AXPDesignerPagesComponent,\n AXPDesignerViewSizeToolbarComponent,\n AXTabsModule,\n AXButtonModule,\n AXDrawerModule,\n AXDecoratorModule,\n AXMenuModule,\n AXButtonGroupModule,\n AXDropdownModule,\n AXDropdownButtonModule,\n ],\n providers: [AXPDesignerService]\n})\nexport class AXPLayoutDesignerComponent {\n protected service = inject(AXPDesignerService);\n\n id = input<string | null>();\n strategy = input<string | null>();\n\n @ViewChild(AXPWidgetPropertyViewerComponent, { static: true })\n private propertyViewer: AXPWidgetPropertyViewerComponent;\n\n protected nodeConfig = computed<AXPWidgetConfig | null>(() =>\n this.service.selectedNode() ? (get(this.service.selectedNode(), '__meta__.config') as any as AXPWidgetConfig) : null\n );\n\n constructor() {\n this.service.onUpdate.subscribe((e) => {\n this.propertyViewer.update(e.values);\n });\n }\n\n ngOnInit() {\n if (this.id()) {\n this.service.loadById(this.id()!, { strategy: (this.strategy() ?? AXPTemplateLoadingStrategy.Connector) as AXPTemplateLoadingStrategy });\n }\n }\n\n @HostBinding('style')\n private get __styles(): string {\n const styles: any = {};\n styles[`direction`] = 'ltr';\n return styles;\n }\n}\n","<ax-drawer-container class=\"ax-h-full ax-w-full ax-flex ax-relative ax-overflow-hidden\">\n <ax-content class=\"ax-contents\">\n <!-- Toolbar Side -->\n <div class=\"ax-min-w-10 ax-bg-lightest ax-border-e ax-sm 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-light.svg\" 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 look=\"blank\">\n <ax-icon class=\"fa-solid fa-puzzle ax-text-sm\"> </ax-icon>\n </ax-button> -->\n <ax-button look=\"blank\" (onClick)=\"pages.toggle()\" title=\"Pages\">\n <ax-icon class=\"fa-solid fa-page ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button look=\"blank\" (onClick)=\"datasources.toggle()\" title=\"Data Sources\">\n <ax-icon class=\"fa-solid fa-database ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button look=\"blank\" (onClick)=\"outline.toggle()\" title=\"Outline\">\n <ax-icon class=\"fa-solid fa-list-tree ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button look=\"blank\" (onClick)=\"history.toggle()\" title=\"History\">\n <ax-icon class=\"fa-solid fa-clock-rotate-left ax-text-sm\"> </ax-icon>\n </ax-button>\n <!-- <ax-button look=\"blank\" 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-h-10 ax-bg-lightest ax-border-b ax-flex ax-justify-between ax-px-2 ax-dark\">\n <div class=\"ax-flex ax-flex-1 ax-items-center ax-text-white ax-justify-start\">\n <axp-designer-header-menu></axp-designer-header-menu>\n </div>\n <div class=\"ax-flex ax-flex-1 ax-flex-row ax-gap-2 ax-sm ax-items-center ax-justify-center\">\n <axp-designer-view-sizes [(size)]=\"service.size\"></axp-designer-view-sizes>\n </div>\n <div class=\"ax-flex ax-flex-1 ax-flex-row ax-gap-2 ax-sm ax-items-center ax-justify-end\">\n <ax-dropdown-button\n mode=\"split\"\n look=\"solid\"\n text=\"Preview\"\n class=\"ax-sm\"\n (onClick)=\"service.openPreviewDialog()\"\n >\n <ax-button-item-list>\n <ax-button-item text=\"Open in new window\" (onClick)=\"service.openPreviewWindow()\">\n <ax-prefix>\n <ax-icon icon=\"fa-regular fa-window-restore\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-button>\n </div>\n </div>\n <!-- Board -->\n <ax-drawer-container class=\"ax-w-full ax-flex-1\">\n <!-- Pages -->\n <ax-drawer #pages location=\"start\" mode=\"push\" class=\"ax-dark ax-bg-lightest\">\n <ax-content>\n <axp-designer-pages></axp-designer-pages>\n </ax-content>\n </ax-drawer>\n <!-- Datasources -->\n <ax-drawer #datasources location=\"start\" mode=\"push\" class=\"ax-dark ax-bg-lightest\">\n <ax-content>\n <axp-designer-data-sources></axp-designer-data-sources>\n </ax-content>\n </ax-drawer>\n <!-- Outline Pnael -->\n <ax-drawer #outline location=\"start\" mode=\"push\" class=\"ax-dark ax-bg-lightest\">\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\" class=\"ax-dark ax-bg-lightest\">\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 ax-bg-lighter ax-flex ax-justify-center ax-p-10\">\n <axp-designer-board class=\"ax-rounded-lg ax-bg-lightest ax-shadow-md\"> </axp-designer-board>\n </ax-content>\n </ax-drawer-container>\n <!-- Footer -->\n <div class=\"ax-h-10 ax-bg-lightest ax-border-t ax-flex ax-items-center ax-dark\">\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-dark axp-designer-prop-side\" 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-px-4 ax-border-b ax-h-10\">\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\n [widget]=\"service.selectedNode()!\"\n style=\"--ax-sys-size-base: 1.875rem\"\n (onChanged)=\"service.update({ values: $event.values, mode: $event.mode })\"\n class=\"ax-w-1/4\"\n >\n </axp-widget-property-viewer>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>\n","import { AXPLayoutBuilderModule, AXPLayoutContextChangeEvent, AXPWidgetDataSource, AXPWidgetDataSourceProviderService, AXPWidgetNode, AXPWidgetsCatalog } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { AXPDesignerConnector, AXPDesignerMessageKeys, AXPDesignerPreviewMessage } from '../designer';\nimport { AXPBroadcastEventService } from '@acorex/platform/core';\nimport { AXUnsubscriber } from '@acorex/core/utils';\n\n@Component({\n selector: 'axp-layout-builder-viewer',\n template: `\n <axp-widgets-container [context]=\"context\" (onContextChanged)=\"handleContextChanged($event)\">\n <ng-container axp-widget-renderer [node]=\"currentPage()\" [mode]=\"'edit'\"></ng-container>\n </axp-widgets-container>\n `,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, AXPLayoutBuilderModule],\n providers: [AXUnsubscriber],\n})\nexport class AXPLayoutDesignerPreviewViewerComponent {\n protected context: any = {};\n\n protected readonly document = signal({ type: AXPWidgetsCatalog.document } as AXPWidgetNode);\n protected readonly currentPageIndex = signal(0);\n protected connector = inject(AXPDesignerConnector);\n protected dataSourceProvider = inject(AXPWidgetDataSourceProviderService);\n protected eventService = inject(AXPBroadcastEventService);\n protected unsubscriber = inject(AXUnsubscriber);\n\n protected readonly currentPage = computed(() => {\n return (\n this.document().children?.[this.currentPageIndex()] ?? ({ type: AXPWidgetsCatalog.pageLayout } as AXPWidgetNode)\n );\n });\n\n\n constructor() {\n this.eventService\n .listen<AXPDesignerPreviewMessage>(AXPDesignerMessageKeys.Preview)\n .pipe(this.unsubscriber.takeUntilDestroy)\n .subscribe((event) => {\n this.document.set(event.data.document);\n })\n //\n if (document.body.parentElement) {\n document.body.parentElement.classList.remove('ax-dark');\n document.body.parentElement.style.backgroundColor = 'unset';\n document.body.style.backgroundColor = 'unset';\n }\n }\n\n ngAfterViewInit() {\n this.eventService.publish(AXPDesignerMessageKeys.Loaded)\n }\n\n protected handleContextChanged(e: AXPLayoutContextChangeEvent) {\n this.context = e.data;\n this.eventService.publish(AXPDesignerMessageKeys.ContextChanged, this.context)\n }\n\n protected functions = {\n getDataSourceNames: this.getDataSources.bind(this),\n };\n\n private async getDataSources(name: string): Promise<AXPWidgetDataSource | undefined> {\n return await this.dataSourceProvider.get(name);\n }\n\n\n ngOnDestroy(): void {\n this.eventService.unsubscribe(AXPDesignerMessageKeys.Preview);\n\n }\n}\n","import { AXSafePipe } from '@acorex/core/pipes';\nimport { Component, computed, HostBinding, input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'axp-layout-preview-frame',\n template: `\n <div\n class=\"ax-flex-1 lg:ax-rounded-lg ax-bg-white lg:ax-shadow-md ax-p-2\"\n [style.width]=\"width()\"\n style=\"max-width: 1280px;\"\n >\n <iframe\n class=\"ax-w-full ax-h-full ax-bg-transparent\"\n [frameBorder]=\"0\"\n [src]=\"'/forms/viewer' | safe : 'resourceUrl'\"\n >\n </iframe>\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n imports: [AXSafePipe]\n})\nexport class AXPLayoutDesignerPreviewFrameComponent {\n public size = input<string>('xl');\n\n protected width = computed(() => {\n ;\n switch (this.size()) {\n case 'sm':\n return '340px';\n case 'md':\n case 'lg':\n return '768px';\n default:\n return '100%';\n }\n });\n\n @HostBinding('class')\n private get __class(): string {\n const cls: any = {};\n cls['ax-flex'] = true;\n cls['ax-flex-col'] = true;\n cls['ax-h-full'] = true;\n cls['ax-W-full'] = true;\n cls['lg:ax-p-20'] = true;\n cls['ax-bg-[#f3f3fe]'] = true;\n cls['ax-w-full'] = true;\n cls['ax-items-center'] = true;\n cls['ax-overflow-auto'] = true;\n return cls;\n }\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXJsonViewerModule } from '@acorex/components/json-viewer';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXPClipBoardService, AXPSettingService } from '@acorex/platform/common';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { CommonModule } from '@angular/common';\nimport { Component, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { AXPDesignerViewSizeToolbarComponent } from '../designer/components/size-mode/view-size-toolbar.component';\nimport { AXPLayoutDesignerPreviewFrameComponent } from './preview-frame.component';\nimport { AXPBroadcastEventService } from '@acorex/platform/core';\nimport { AXPDesignerMessageKeys } from '../designer';\n\n@Component({\n selector: 'axp-layout-preview',\n templateUrl: './preview.component.html',\n styleUrls: ['./preview.component.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n AXButtonModule,\n AXButtonGroupModule,\n AXDrawerModule,\n AXDecoratorModule,\n AXJsonViewerModule,\n AXPLayoutDesignerPreviewFrameComponent,\n AXPDesignerViewSizeToolbarComponent,\n ]\n})\nexport class AXPLayoutDesignerPreviewComponent extends AXBasePageComponent {\n protected clipboard = inject(AXPClipBoardService);\n protected settings = inject(AXPSettingService);\n protected eventService = inject(AXPBroadcastEventService);\n\n protected initialSize: string = 'xl';\n protected isDialogWindow: boolean = false;\n\n private jsonSettingsKey = 'forms:preview:json';\n protected jsonViewCollapsed = signal(true);\n\n protected size = signal<string>(this.initialSize);\n\n protected context = signal<any>({});\n\n constructor() {\n super();\n //\n this.eventService.listen(AXPDesignerMessageKeys.ContextChanged).subscribe((event) => {\n this.context.set(event.data);\n });\n }\n\n protected override async ngOnInit() {\n this.size.set(this.initialSize);\n const settingValue = await this.settings.get<boolean>(this.jsonSettingsKey);\n this.jsonViewCollapsed.set(!settingValue);\n }\n\n protected handleCloseButton() {\n if (this.isDialogWindow) {\n this.close();\n } else {\n window.opener.focus();\n window.close();\n }\n }\n\n protected handlePreviewWindow() {\n this.eventService.publish(AXPDesignerMessageKeys.PreviewWindow)\n this.close();\n }\n\n protected handleCopyJson() {\n this.clipboard.copy('Json Data', JSON.stringify(this.context()));\n }\n\n protected async handleCollapsedChange(value: boolean) {\n await this.settings.scope(AXPPlatformScope.User).set<boolean>(this.jsonSettingsKey, !value);\n }\n}\n","<ax-drawer-container class=\"ax-dark ax-h-full ax-w-full ax-flex ax-relative ax-overflow-hidden\">\n <ax-content>\n <div class=\"ax-dark ax-flex ax-flex-col ax-h-full ax-relative ax-bg-default\">\n <div class=\"ax-flex ax-items-center ax-justify-between ax-h-12 ax-bg-lightest ax-shadow ax-sm ax-px-2\">\n <div class=\"ax-flex ax-flex-1 ax-w-16 ax-justify-start\">\n <ax-button look=\"blank\" text=\"Back to Designer\" (onClick)=\"handleCloseButton()\">\n <ax-prefix>\n <ax-icon class=\"fa-regular fa-chevron-left\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n <div class=\"ax-flex ax-flex-1 ax-flex-row ax-gap-2 ax-sm ax-items-center ax-justify-center\">\n <axp-designer-view-sizes [(size)]=\"size\"></axp-designer-view-sizes>\n </div>\n <div class=\"ax-flex ax-flex-1 ax-w-16 ax-justify-end\">\n @if(isDialogWindow) {\n <ax-button look=\"blank\" [title]=\"'Preview in to seperate window'\" (onClick)=\"handlePreviewWindow()\">\n <ax-prefix>\n <ax-icon class=\"fa-regular fa-window-restore\"></ax-icon>\n </ax-prefix>\n </ax-button>\n }@else { }\n <ax-button look=\"blank\" (onClick)=\"jsonView.toggle()\">\n <ax-prefix>\n <ax-icon class=\"fa-regular fa-list-tree\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </div>\n\n <div class=\"ax-bg-[#f3f3fe] ax-flex ax-flex-1 ax-justify-center ax-overflow-auto\">\n <axp-layout-preview-frame [size]=\"size()\"></axp-layout-preview-frame>\n </div>\n </div>\n </ax-content>\n <!-- [collapsed]=\"jsonViewCollapsed()\"\n (collapsedChange)=\"handleCollapsedChange($event)\" -->\n <ax-drawer class=\"ax-w-1/3 ax-border-s\" location=\"end\" mode=\"push\" #jsonView>\n <ax-content>\n <div class=\"ax-dark ax-flex ax-flex-col ax-h-full ax-relative ax-bg-default\">\n <div class=\"ax-flex ax-items-center ax-justify-between ax-h-12 ax-bg-lightest ax-shadow ax-sm ax-px-2\">\n <div class=\"ax-flex ax-flex-1 ax-w-16 ax-justify-start\">\n <span class=\"ax-text-surface-fore ax-font-semibold\">Form Data</span>\n </div>\n <div class=\"ax-flex ax-flex-1 ax-flex-row ax-gap-2 ax-sm ax-items-center ax-justify-center\"></div>\n <div class=\"ax-flex ax-flex-1 ax-w-16 ax-justify-end\">\n <ax-button look=\"blank\" (onClick)=\"handleCopyJson()\">\n <ax-prefix>\n <ax-icon class=\"fa-regular fa-copy\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </div>\n <div class=\"ax-px-6 ax-text-white\">\n <ax-json-viewer [json]=\"context()\"></ax-json-viewer>\n </div>\n </div>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i5","i3","i4","merge"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-layout-designer.mjs","sources":["../../../../libs/platform/layout/designer/src/lib/designer/shared/command.ts","../../../../libs/platform/layout/designer/src/lib/designer/shared/designer-connector.service.ts","../../../../libs/platform/layout/designer/src/lib/designer/shared/generic-commands.types.ts","../../../../libs/platform/layout/designer/src/lib/designer/shared/designer.types.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/widget-picker/widget-picker.service.ts","../../../../libs/platform/layout/designer/src/lib/designer/shared/designer.service.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/add-widget-button/add-widget-button.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/add-widget-button/add-widget-line-button.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/add-widget-button/add-widget-mini-button.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/grid-drawer/grid-drawer.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/widget-picker/widget-picker.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/widget-picker/widget-picker.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/designer/shared/widget-designer-renderer.directive.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/board/board.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/board/board.component.html","../../../../libs/platform/layout/designer/src/lib/designer/components/breadcrumbs/breadcrumbs.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/shared/drawer-content/drawer-content.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/shared/drawer-content/drawer-content.component.html","../../../../libs/platform/layout/designer/src/lib/designer/components/drawers/data-sources/data-sources.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/drawers/data-sources/data-sources.component.html","../../../../libs/platform/layout/designer/src/lib/designer/components/drawers/history/history.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/drawers/history/history.component.html","../../../../libs/platform/layout/designer/src/lib/designer/components/drawers/outline/outline.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/drawers/outline/outline.component.html","../../../../libs/platform/layout/designer/src/lib/designer/components/drawers/pages/pages.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/drawers/pages/pages.component.html","../../../../libs/platform/layout/designer/src/lib/designer/components/header-menu/header-menu.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/header-menu/header-menu.component.html","../../../../libs/platform/layout/designer/src/lib/designer/components/size-mode/view-size-toolbar.component.ts","../../../../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/lib/preview/preview-viewer.component.ts","../../../../libs/platform/layout/designer/src/lib/preview/preview-frame.component.ts","../../../../libs/platform/layout/designer/src/lib/preview/preview.component.ts","../../../../libs/platform/layout/designer/src/lib/preview/preview.component.html","../../../../libs/platform/layout/designer/src/acorex-platform-layout-designer.ts"],"sourcesContent":["import { AXPWidgetNode } from \"@acorex/platform/layout/builder\";\nimport { computed, Injectable, signal } from \"@angular/core\";\nimport { cloneDeep, merge } from \"lodash-es\";\n\n// Command interface\nexport interface Command {\n execute(): void;\n undo(): void;\n description(): string;\n icon(): string;\n getExecutionSelection(): AXPWidgetNode; // Node to select after execution\n getUndoSelection(): AXPWidgetNode; // Node to select after undo\n}\n\n// AddWidgetCommand\nexport class AddWidgetCommand implements Command {\n private widget: AXPWidgetNode;\n private parent: AXPWidgetNode;\n private previousSelection: AXPWidgetNode;\n\n constructor(widget: AXPWidgetNode, parent: AXPWidgetNode, previousSelection: AXPWidgetNode) {\n this.widget = widget;\n this.parent = parent;\n this.previousSelection = previousSelection;\n }\n\n execute() {\n this.parent.children = this.parent.children || [];\n this.parent.children.push(this.widget);\n }\n\n undo() {\n this.parent.children = this.parent.children || [];\n const index = this.parent.children.indexOf(this.widget);\n if (index > -1) {\n this.parent.children.splice(index, 1);\n }\n }\n\n description() {\n return `Added widget ${this.widget.name}`;\n }\n\n icon() {\n return `fa-solid fa-square-plus`;\n }\n\n getExecutionSelection() {\n return this.widget; // After executing, select the newly added widget\n }\n\n getUndoSelection() {\n return this.previousSelection; // After undo, select the previously selected widget\n }\n}\n\n\nexport class RemoveWidgetCommand implements Command {\n private widget: AXPWidgetNode;\n private parent: AXPWidgetNode;\n private previousSelection: AXPWidgetNode;\n private index: number;\n\n constructor(widget: AXPWidgetNode, parent: AXPWidgetNode, previousSelection: AXPWidgetNode) {\n this.widget = widget;\n this.parent = parent;\n this.previousSelection = previousSelection;\n parent.children = parent.children || [];\n this.index = parent.children.indexOf(widget); // Capture the index for undo purposes\n }\n\n execute() {\n this.parent.children = this.parent.children || [];\n this.index = this.parent.children.indexOf(this.widget); // Re-assert the index in case it has changed\n this.parent.children.splice(this.index, 1);\n }\n\n undo() {\n this.parent.children = this.parent.children || [];\n this.parent.children.splice(this.index, 0, this.widget); // Reinsert at the original index\n }\n\n description() {\n return `Removed widget ${this.widget.name}`;\n }\n\n icon() {\n return `fa-solid fa-square-minus`;\n }\n\n getExecutionSelection() {\n return this.previousSelection; // Typically the parent or a nearby sibling could be focused\n }\n\n getUndoSelection() {\n return this.widget; // Select the widget itself when the operation is undone\n }\n}\n\nexport class UpdateWidgetCommand implements Command {\n private widget: AXPWidgetNode;\n private previousState: AXPWidgetNode;\n private newState: AXPWidgetNode;\n private previousSelection: AXPWidgetNode;\n\n constructor(widget: AXPWidgetNode, values: Partial<AXPWidgetNode>, previousSelection: AXPWidgetNode) {\n this.widget = widget;\n this.newState = merge(cloneDeep(widget), values);\n this.previousSelection = previousSelection;\n this.previousState = cloneDeep(widget);\n }\n\n execute() {\n merge(this.widget, this.newState)\n }\n\n undo() {\n this.deepPruneAndRestore(this.widget, this.previousState);\n }\n\n description() {\n return `Updated widget ${this.widget.name}`;\n }\n\n icon() {\n return `fa-solid fa-pen-to-square`;\n }\n\n getExecutionSelection() {\n return this.widget; // Focus the widget after it's updated\n }\n\n getUndoSelection() {\n return this.previousSelection; // Restore the focus to where it was before the update\n }\n\n private deepPruneAndRestore(current: any, original: any) {\n Object.keys(current).forEach(key => {\n if (original.hasOwnProperty(key)) {\n if (typeof current[key] === 'object' && current[key] !== null && !(current[key] instanceof Array)) {\n this.deepPruneAndRestore(current[key], original[key]);\n }\n } else {\n delete current[key]; // Remove properties not present in original\n }\n });\n\n // Restore the original properties\n merge(current, original);\n }\n}\n\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CommandManager {\n private undoStack = signal<Command[]>([]);\n private currentIndex = signal<number>(-1);\n public readonly selectedNode = signal<AXPWidgetNode | null>(null);\n\n public canUndo = computed(() => this.currentIndex() >= 0)\n public canRedo = computed(() => this.currentIndex() < this.undoStack().length - 1)\n\n executeCommand(command: Command) {\n // Check if the currentIndex is not at the end of the undoStack\n if (this.currentIndex() !== this.undoStack().length - 1) {\n // Remove all commands beyond the current index to discard the \"future\" commands\n const newUndoStack = this.undoStack().slice(0, this.currentIndex() + 1);\n this.undoStack.set(newUndoStack);\n }\n\n command.execute();\n this.undoStack.set([...this.undoStack(), command]); // Add the new command to the stack\n this.currentIndex.set(this.undoStack().length - 1); // Update currentIndex to the end of the stack\n this.selectedNode.set(command.getExecutionSelection()); // Update the selected node\n }\n\n undo() {\n if (this.currentIndex() >= 0) {\n const command = this.undoStack()[this.currentIndex()];\n command.undo();\n this.currentIndex.set(this.currentIndex() - 1);\n if (this.currentIndex() >= 0) {\n this.selectedNode.set(this.undoStack()[this.currentIndex()].getUndoSelection());\n } else {\n this.selectedNode.set(null); // No selection if all commands are undone\n }\n }\n }\n\n redo() {\n if (this.currentIndex() < this.undoStack().length - 1) {\n this.currentIndex.set(this.currentIndex() + 1);\n const command = this.undoStack()[this.currentIndex()];\n command.execute();\n this.selectedNode.set(command.getExecutionSelection());\n }\n }\n\n goToCommand(index: number) {\n if (index < 0 || index >= this.undoStack().length || index === this.currentIndex()) {\n return; // Out of bounds or already at the desired index\n }\n\n if (index > this.currentIndex()) {\n // Need to redo until reaching the desired index\n while (this.currentIndex() < index) {\n this.redo();\n }\n } else {\n // Need to undo until reaching the desired index\n while (this.currentIndex() > index) {\n this.undo();\n }\n }\n\n // Optionally update any UI components or state here\n this.selectedNode.set(this.undoStack()[this.currentIndex()].getExecutionSelection());\n }\n\n public history = computed(() => this.undoStack().map((cmd, index) => (\n {\n description: cmd.description(),\n icon: cmd.icon(),\n isPast: this.currentIndex() > index,\n isFuture: this.currentIndex() < index,\n isCurrent: this.currentIndex() == index\n }\n )))\n\n\n public clear() {\n this.undoStack.set([]);\n this.currentIndex.set(-1);\n }\n}","import { Injectable } from \"@angular/core\";\n\n\nexport interface AXPDesignerContent {\n json: string,\n html?: string\n}\n\n@Injectable()\nexport abstract class AXPDesignerConnector<T = string> {\n\n public abstract save(id: string, content: AXPDesignerContent): Promise<boolean>;\n\n public abstract saveAs(content: AXPDesignerContent): Promise<boolean>;\n\n public abstract load(id: T): Promise<string | null>;\n}","import { AXMenuItem } from '@acorex/components/menu';\nimport { assign, cloneDeep } from 'lodash-es';\n\nexport const AXP_DESIGNER_COPY_MENU: AXMenuItem = {\n text: 'Copy',\n name: 'copy',\n icon: 'fa-solid fa-copy',\n suffix: {\n text: 'Ctrl+C',\n },\n};\n\nexport const AXP_DESIGNER_CLONE_MENU: AXMenuItem = {\n text: 'Clone',\n name: 'clone',\n icon: 'fa-solid fa-clone',\n suffix: {\n text: 'Ctrl+D',\n },\n};\n\nexport const AXP_DESIGNER_CUT_MENU: AXMenuItem = {\n text: 'Cut',\n name: 'cut',\n icon: 'fa-solid fa-cut',\n suffix: {\n text: 'Ctrl+X',\n },\n};\n\nexport const AXP_DESIGNER_PASTE_MENU: AXMenuItem = {\n text: 'Paste',\n name: 'paste',\n icon: 'fa-solid fa-paste',\n suffix: {\n text: 'Ctrl+V',\n },\n};\n\nexport const AXP_DESIGNER_ADD_WIDGET_MENU: AXMenuItem = {\n text: 'Add Widget',\n name: 'add-widget',\n icon: 'fa-solid fa-plus',\n};\n\nexport const AXP_DESIGNER_SELECT_WIDGET_MENU: AXMenuItem = {\n text: 'Select',\n name: 'select',\n break: true,\n icon: 'fa-solid fa-arrow-pointer',\n}\n\nexport const AXP_DESIGNER_DELETE_WIDGET_MENU: AXMenuItem = {\n text: 'Delete',\n name: 'remove-widget',\n icon: 'fa-solid fa-trash',\n};\n\nexport const AXP_DESIGNER_SAVE_AS_WIDGET_MENU: AXMenuItem = {\n text: 'Save As...',\n name: 'save-as',\n icon: 'fa-solid fa-save',\n};\n\n\nexport function cloneWidgetMenu(item: AXMenuItem, options?: Partial<AXMenuItem>): AXMenuItem {\n return assign(cloneDeep(item), options);\n}\n","import { AXMenuItem } from \"@acorex/components/menu\";\nimport { AXPWidgetNode } from \"@acorex/platform/layout/builder\";\n\nexport type AXPDesignerMode =\n | { id: 'designer'; title: 'Designer' }\n | { id: 'view'; title: 'View' }\n | { id: 'edit'; title: 'Edit' };\n\nexport class AXPDesignerModes {\n static readonly View: AXPDesignerMode = { id: 'view', title: 'View' };\n static readonly Design: AXPDesignerMode = { id: 'designer', title: 'Designer' };\n static readonly Edit: AXPDesignerMode = { id: 'edit', title: 'Edit' };\n}\n\n\nexport enum AXPTemplateLoadingStrategy {\n Connector = \"Connector\",\n Broadcast = \"Broadcast\",\n}\n\n\n\nexport interface AXPDesignerWidgetComponent {\n onContextMenu(context: { items: AXMenuItem[] }): void\n executeCommand(command: { name: string, data?: any, handled: boolean }): Promise<void>\n}\n\nexport interface AXPDesignerPreviewMessage {\n id: string,\n document: AXPWidgetNode\n}\n\nexport interface AXPDesignerSaveFormMessage {\n id: string,\n success: boolean,\n content?: string\n}\n\nexport const AXPDesignerMessageKeys =\n{\n Preview: \"designer-preview\",\n Loaded: \"designer-preview-loaded\",\n ContextChanged: \"designer-preview-context-changed\",\n PreviewWindow: \"designer-open-preview-window\",\n RequestFormContent: \"designer-request-form-content\",\n ResponseFormContent: \"designer-response-form-content\",\n SaveForm: 'designer-save-form-content',\n FormSaved: 'designer-form-saved-content',\n}","import { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPWidgetConfig,\n AXPWidgetGroupEnum,\n AXPWidgetNode,\n AXPWidgetRegistryService,\n} from '@acorex/platform/layout/builder';\nimport { inject, Injectable } from '@angular/core';\nimport { sortBy } from 'lodash-es';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPWidgetPickerService {\n private popupService = inject(AXPopupService);\n private widgetRegistryService = inject(AXPWidgetRegistryService);\n private translationService = inject(AXTranslationService);\n\n async showPicker(options: { groups: AXPWidgetGroupEnum[] }): Promise<AXPWidgetNode[]> {\n const com = await import('./widget-picker.component').then((c) => c.AXPDesignerWidgetPickerComponent);\n const widgets = this.widgetRegistryService.all();\n const filteredWidgets = widgets.filter((c) => options.groups.some((d) => c.groups?.includes(d)));\n //\n const result = await this.popupService.open(com, {\n title: await this.translationService.translateAsync('widget-picker.title', { scope: 'form-template-management' }),\n size: 'md',\n closeButton: true,\n data: {\n widgets: sortBy(filteredWidgets, (c) => c.title),\n },\n });\n //\n const selectedWidgets = (result.data?.widgets ?? []) as AXPWidgetConfig[];\n\n return selectedWidgets.map((c) => ({\n type: c.name as any,\n meta: c.meta,\n }));\n }\n}\n","import { AXLoadingDialogButtonItem, AXLoadingDialogService } from '@acorex/components/loading-dialog';\nimport { AXMenuItem } from '@acorex/components/menu';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXFileService } from '@acorex/core/file';\nimport {\n AXPBaseWidgetComponent,\n AXPValueWidgetComponent,\n AXPWidgetConfig,\n AXPWidgetGroupEnum,\n AXPWidgetNode,\n AXPWidgetRegistryService,\n AXPWidgetsCatalog,\n} from '@acorex/platform/layout/builder';\nimport { computed, effect, inject, Injectable, signal } from '@angular/core';\nimport { cloneDeep, get, isEmpty, isNil, isNull, merge, result, set, sortBy } from 'lodash-es';\nimport { Subject } from 'rxjs';\nimport { AddWidgetCommand, CommandManager, RemoveWidgetCommand, UpdateWidgetCommand } from './command';\nimport { AXPDesignerConnector } from './designer-connector.service';\nimport {\n AXP_DESIGNER_ADD_WIDGET_MENU,\n AXP_DESIGNER_CLONE_MENU,\n AXP_DESIGNER_COPY_MENU,\n AXP_DESIGNER_CUT_MENU,\n AXP_DESIGNER_DELETE_WIDGET_MENU as AXP_DESIGNER_DELETE_WIDGET_MENU,\n AXP_DESIGNER_PASTE_MENU,\n AXP_DESIGNER_SAVE_AS_WIDGET_MENU,\n AXP_DESIGNER_SELECT_WIDGET_MENU,\n cloneWidgetMenu,\n} from './generic-commands.types';\nimport { AXPDesignerMessageKeys, AXPDesignerPreviewMessage, AXPDesignerSaveFormMessage, AXPDesignerWidgetComponent, AXPTemplateLoadingStrategy } from './designer.types';\nimport { AXPBroadcastEventService } from '@acorex/platform/core';\nimport { AXPWidgetPickerService } from '../components/widget-picker/widget-picker.service';\nexport type AXPDesignerPreviewSize = 'sm' | 'md' | 'lg' | 'xl' | 'xxl';\n\nexport interface AXPDesignerFocusCommand {\n widget: AXPWidgetNode | null;\n}\n\nexport interface AXPDesignerUpdateCommand {\n values: any;\n widget?: AXPWidgetNode | null;\n mode: 'init' | 'update';\n}\nexport interface AXPDesignerUpdateEvent {\n values: any;\n widget: AXPWidgetNode;\n}\n\nexport interface AXPDesignerSelectCommand {\n widget: AXPWidgetNode;\n}\n\nexport interface AXPDesignerRegisterCommand {\n id: number;\n widget: AXPWidgetNode;\n config: AXPWidgetConfig;\n instance: AXPBaseWidgetComponent;\n}\n\nexport interface AXPDesignerSelectEvent {\n widget: AXPWidgetNode;\n}\n\nexport interface AXPDesignerRefreshCommand {\n widget: AXPWidgetNode;\n}\nexport interface AXPDesignerRefreshEvent {\n widget: AXPWidgetNode;\n}\n\nexport interface AXPDesignerAddNodeCommand {\n widget: AXPWidgetNode;\n}\nexport interface AXPDesignerAddNodeEvent {\n widget: AXPWidgetNode;\n}\n\nexport interface AXPDesignerFocusEvent {\n widget: AXPWidgetNode | null;\n}\n\n@Injectable()\nexport class AXPDesignerService {\n private popupService = inject(AXPopupService);\n private toastService = inject(AXToastService);\n private fileService = inject(AXFileService);\n private loadingService = inject(AXLoadingDialogService);\n private widgetRegisteryService = inject(AXPWidgetRegistryService);\n private connector = inject(AXPDesignerConnector);\n private eventService = inject(AXPBroadcastEventService);\n private widgetPickerService = inject(AXPWidgetPickerService);\n\n\n public readonly document = signal(this.createDoc());\n public readonly currentPageIndex = signal(0);\n\n public readonly currentPage = signal(this.document().children?.[0] as AXPWidgetNode);\n\n private commandManager = inject(CommandManager);\n\n private clipboard = signal<AXPWidgetNode | null>(null);\n\n //\n public canCutCopy = computed(() => this.can(this.selectedNode()).copyOrCut);\n public canDelete = computed(() => this.can(this.selectedNode()).delete);\n public canInsert = computed(() => this.can(this.selectedNode()).insert);\n public canPaste = computed(() => this.can(this.selectedNode()).paste);\n //\n public readonly history = computed(() => this.commandManager.history());\n public readonly canUndo = computed(() => this.commandManager.canUndo());\n public readonly canRedo = computed(() => this.commandManager.canRedo());\n //\n public readonly canSave = computed(() => this.templateId() != null);\n\n public readonly unsavedChanges = signal(false);\n\n public breadcrumbs = computed<AXPWidgetNode[]>(() => {\n return this.selectedNode() ? this.findBreadcrumbs(this.currentPage(), this.selectedNode()) ?? [] : [];\n });\n\n public selectedNode = signal<AXPWidgetNode | null>(null);\n\n public selectedNodeConfig = computed(() => get(this.selectedNode(), '__meta__.config') as any as AXPWidgetConfig);\n\n private _focusedNode: AXPWidgetNode | null = null;\n public focusedNode = () => this._focusedNode;\n\n public readonly size = signal<AXPDesignerPreviewSize>('xl');\n\n public readonly onSelected = new Subject<AXPDesignerSelectEvent>();\n public readonly onRefresh = new Subject<AXPDesignerRefreshEvent>();\n public readonly onUpdate = new Subject<AXPDesignerUpdateEvent>();\n public readonly onFocused = new Subject<AXPDesignerFocusEvent>();\n\n private templateId = signal<string | null>(null);\n\n private loadingStrategy = signal<AXPTemplateLoadingStrategy>(AXPTemplateLoadingStrategy.Connector);\n\n #ef = effect(\n () => {\n this.refresh({ widget: this.currentPage() });\n }\n );\n\n constructor() {\n this.eventService.listen(AXPDesignerMessageKeys.Loaded).subscribe(() => {\n this.updatePreview();\n })\n //\n this.eventService.listen(AXPDesignerMessageKeys.PreviewWindow).subscribe(() => {\n this.openPreviewWindow();\n });\n //\n // window.addEventListener(\"beforeunload\", (event) => {\n // console.log(\"Window is before closing...\");\n // // event.preventDefault();\n // // event.returnValue = 'abc'; // Some browsers require this to show the prompt.\n // });\n window.addEventListener(\"unload\", async () => {\n console.log(\"Window is closing...\");\n if (this.unsavedChanges()) {\n this.eventService.publish<AXPDesignerSaveFormMessage>(AXPDesignerMessageKeys.SaveForm, { id: this.templateId()!, success: false });\n }\n this.unsubscribeEvents();\n });\n }\n\n\n private can = (widget: AXPWidgetNode | null): {\n delete: boolean,\n copyOrCut: boolean,\n insert: boolean,\n paste: boolean,\n } => {\n if (!widget) {\n return {\n delete: false,\n copyOrCut: false,\n insert: false,\n paste: false,\n }\n }\n const config = get(widget, '__meta__.config') as any as AXPWidgetConfig;\n return {\n delete: widget.type != 'page-layout',\n copyOrCut: widget.type != 'page-layout',\n paste: this.clipboard() != null && config.type == 'container' && config.designer?.canInsert != false,\n insert: config.type == 'container' && config.designer?.canInsert != false,\n }\n }\n\n\n\n public register(command: AXPDesignerRegisterCommand): void {\n this.select({ widget: command.widget });\n }\n\n public select(command: AXPDesignerSelectCommand): void {\n this.selectedNode.set(command.widget);\n this.onSelected.next(command);\n }\n\n public update(command: AXPDesignerUpdateCommand): void {\n const node = command.widget ?? this.selectedNode();\n\n if (command.mode == 'update' && node) {\n this.commandManager.executeCommand(new UpdateWidgetCommand(node!, command.values, node!));\n }\n //this.selectedNode.update((c) => merge(node, command.values));\n this.onUpdate.next({ widget: node!, values: command.values });\n this.unsavedChanges.set(true);\n this.updatePreview();\n }\n\n public focus(command: AXPDesignerFocusCommand): void {\n if (this._focusedNode != command.widget) {\n this._focusedNode = command.widget;\n this.onFocused.next({ widget: this._focusedNode });\n }\n }\n\n public refresh(command: AXPDesignerRefreshCommand) {\n this.onRefresh.next({ widget: command.widget });\n this.updatePreview();\n }\n\n private findBreadcrumbs(\n node: AXPWidgetNode,\n targetNode?: AXPWidgetNode | null,\n breadcrumb: AXPWidgetNode[] = []\n ): AXPWidgetNode[] | undefined {\n // Add the current node to the breadcrumb path\n const currentBreadcrumb = [...breadcrumb, node];\n\n // Check if the current node is the target node\n if (node === targetNode) {\n return currentBreadcrumb;\n }\n\n // If the node has children, recursively search them\n if (node.children) {\n for (const child of node.children) {\n const result = this.findBreadcrumbs(child, targetNode, currentBreadcrumb);\n if (result) {\n return result;\n }\n }\n }\n\n // Return undefined if no match is found\n return undefined;\n }\n\n async showPicker(currentNode: AXPWidgetNode = this.selectedNode()!): Promise<AXPWidgetNode[]> {\n const widgets = await this.widgetPickerService.showPicker({ groups: [AXPWidgetGroupEnum.FormElement] });\n const result: AXPWidgetNode[] = [];\n if (widgets.length) {\n widgets.forEach((c) => {\n result.push(this.addWidget(currentNode, { type: c.type })!);\n });\n }\n return result;\n }\n\n public new() {\n this.commandManager.clear();\n this.document.set(this.createDoc());\n this.currentPage.set(this.document().children?.[0]!);\n this.reRenderPage();\n }\n\n private createDoc(): AXPWidgetNode {\n const doc: AXPWidgetNode = {\n type: AXPWidgetsCatalog.document,\n children: [this.createPage()],\n name: 'document',\n };\n set(doc, '__meta__.id', this.generateUniqueId());\n return doc;\n }\n\n private createPage(): AXPWidgetNode {\n const config = this.widgetRegisteryService.resolve('page-layout');\n\n const page: AXPWidgetNode = {\n type: 'page-layout',\n children: [],\n name: 'page-layout1',\n };\n\n set(page, '__meta__.id', this.generateUniqueId());\n set(page, '__meta__.config', config);\n return page;\n }\n\n public addNewPage() {\n this.addWidget(this.document(), this.createPage());\n this.goToPage(this.currentPageIndex() + 1);\n }\n\n public removePage(index: number) {\n const page = this.document().children?.[index]!;\n this.removeWidget(page);\n this.goToPage(index - 1);\n }\n\n public clonePage(index: number) {\n const page = this.document().children?.[index]!;\n this.clone(page);\n this.goToPage((this.document().children?.length ?? 1) - 1);\n }\n\n public goToPage(index: number) {\n this.currentPageIndex.set(index);\n this.currentPage.set(this.document().children?.[this.currentPageIndex()]!);\n this.select({ widget: this.currentPage() });\n }\n\n private reRenderPage() {\n this.currentPage.set({ ...this.currentPage() });\n setTimeout(() => {\n this.refresh({ widget: this.currentPage() });\n });\n }\n\n public findWidgetById(root: AXPWidgetNode, id: string): AXPWidgetNode | null {\n if (get(root, '__meta__.id') === id) {\n return root; // Return the root if it matches the ID\n }\n if (!root.children) return null;\n\n for (const child of root.children) {\n const found = this.findWidgetById(child, id);\n if (found) {\n return found; // Return the found child\n }\n }\n\n return null; // Node not found\n }\n\n private findParent(id: string, parent: AXPWidgetNode = this.currentPage()): AXPWidgetNode | null {\n if (!parent.children) return null;\n\n if (parent.children.some((child) => get(child, '__meta__.id') === id)) {\n return parent; // Return this node as it's the parent of the node with the given ID\n }\n\n for (const child of parent.children) {\n const foundParent = this.findParent(id, child);\n if (foundParent) return foundParent;\n }\n\n return null; // No parent found\n }\n\n private findNearestContainer(node: AXPWidgetNode, searchUpward = true): AXPWidgetNode | null {\n if (searchUpward) {\n let current: AXPWidgetNode | null = node;\n while (current) {\n const config = this.widgetRegisteryService.resolve(current.type);\n if (config && config.type == 'container') {\n return current;\n }\n current = this.findParent(get(current, '__meta__.id')!); // Use findParent to navigate upwards\n }\n } else {\n // Recursive search to find the first container among children\n if (node.children) {\n for (const child of node.children) {\n const config = this.widgetRegisteryService.resolve(child.type);\n if (config && config.type == 'container') {\n return child;\n }\n const foundContainer = this.findNearestContainer(child, false); // Continue searching downwards\n if (foundContainer) return foundContainer;\n }\n }\n }\n return null; // Return null if no container found\n }\n\n addWidget(currentNode: AXPWidgetNode, node: AXPWidgetNode): AXPWidgetNode {\n //\n const cloned = cloneDeep(node);\n const config = this.widgetRegisteryService.resolve(node.type);\n\n //\n this.commandManager.executeCommand(new AddWidgetCommand(cloned, currentNode, currentNode));\n //\n cloned.name = this.generateUniqueName(node.type);\n set(cloned, '__meta__.id', this.generateUniqueId());\n set(cloned, '__meta__.config', config);\n set(cloned, '__meta__.added', true);\n //\n this.reRenderPage();\n //\n this.refresh({ widget: currentNode });\n this.select({ widget: cloned });\n\n return cloned;\n }\n\n public removeWidget(node: AXPWidgetNode = this.selectedNode()!): void {\n if (\n node.type === 'document-layout' ||\n (node.type === 'page-layout' && (this.document().children?.length ?? 1) == 1)\n ) {\n console.error('Cannot remove the page node.');\n return; // Prevent removing the root page node or document\n }\n\n const nodeIdToRemove = get(node, '__meta__.id');\n if (!nodeIdToRemove) {\n throw new Error('Node does not have a valid __meta__.id to identify it for removal.');\n }\n\n // Find the parent of the node to remove it\n const parent = this.findParent(nodeIdToRemove, this.document());\n if (!parent) {\n throw new Error('Parent node not found. The node might be the root node or does not exist.');\n }\n\n const previousSelection = this.selectedNode(); // Capture the currently selected node before removal\n const command = new RemoveWidgetCommand(node, parent, previousSelection!);\n this.commandManager.executeCommand(command);\n\n this.refresh({ widget: parent }); // Refresh the UI to reflect changes\n this.select({ widget: parent }); // Select the parent node after removal\n }\n\n navigateTo(index: number) {\n this.commandManager.goToCommand(index);\n this.reRenderPage();\n const currentSelection = this.commandManager.selectedNode();\n this.refresh({ widget: this.currentPage() });\n this.select({ widget: currentSelection! });\n }\n\n public redo() {\n this.commandManager.redo();\n this.reRenderPage();\n const currentSelection = this.commandManager.selectedNode();\n this.refresh({ widget: this.currentPage() });\n this.select({ widget: currentSelection! });\n }\n\n public undo() {\n this.commandManager.undo();\n this.reRenderPage();\n const currentSelection = this.commandManager.selectedNode();\n this.refresh({ widget: this.currentPage() });\n this.select({ widget: currentSelection! });\n }\n\n public clearHistory() {\n this.commandManager.clear();\n }\n\n private removeMetaProp(obj: any): any {\n const nodeName = '__meta__';\n // Check if the object is an array\n if (Array.isArray(obj)) {\n return obj.map((item) => this.removeMetaProp(item));\n } else if (typeof obj === 'object' && obj !== null) {\n // Create a new object to store the result\n let newObj: any = {};\n for (let key in obj) {\n // Only add the key if it's not the nodeName we want to remove\n if (key !== nodeName) {\n newObj[key] = this.removeMetaProp(obj[key]);\n }\n }\n return newObj;\n }\n // If the value is not an object or array, return it as is\n return obj;\n }\n\n private async addMetaToNodes(\n node: AXPWidgetNode,\n processedNodes: { count: number },\n progressCallback: (processed: number) => void\n ): Promise<AXPWidgetNode> {\n // Apply your meta logic here\n const config = this.widgetRegisteryService.resolve(node.type);\n //\n set(node, '__meta__.id', this.generateUniqueId());\n set(node, '__meta__.config', config);\n //\n // Increment the processed node count and update the progress dialog\n processedNodes.count++;\n progressCallback(processedNodes.count);\n // Recursively process child nodes using Promise.all\n if (node.children && node.children.length > 0) {\n node.children = await Promise.all(\n node.children.map(async (child) => await this.addMetaToNodes(child, processedNodes, progressCallback))\n );\n }\n return node;\n }\n\n public copy(widget: AXPWidgetNode | null = this.selectedNode()): void {\n if (this.can(widget).copyOrCut) {\n this.clipboard.set(cloneDeep(widget)); // Use lodash's cloneDeep to ensure a deep copy\n }\n }\n\n public cut(widget: AXPWidgetNode | null = this.selectedNode()): void {\n if (this.can(widget).copyOrCut) {\n this.copy(widget); // Copy the widget to the clipboard\n this.removeWidget(widget!); // Reuse the removeWidget method which should handle undo internally\n }\n }\n\n public clone(widget: AXPWidgetNode | null = this.selectedNode()): void {\n if (!widget) return;\n this.copy(widget); // Copy the widget to the clipboard\n if (widget.type == 'page-layout') {\n this.paste(this.document());\n } else {\n this.paste(widget!);\n }\n }\n\n public paste(parentNode: AXPWidgetNode | undefined = this.selectedNode() ?? this.currentPage()): void {\n if (!this.clipboard() || !this.selectedNode() || !parentNode) {\n console.error('Clipboard is empty or no node is selected.');\n return;\n }\n const newNode = cloneDeep(this.clipboard() as AXPWidgetNode);\n const nearestContainer = this.findNearestContainer(parentNode, true);\n if (!nearestContainer) {\n console.error('No suitable container found.');\n return;\n }\n //\n if (!nearestContainer.children) {\n nearestContainer.children = [];\n }\n //\n const setNameId = (node: AXPWidgetNode) => {\n set(node, 'name', this.generateUniqueName(node.type));\n set(node, '__meta__.id', this.generateUniqueId());\n node.children?.forEach((n) => {\n setNameId(n);\n });\n };\n setNameId(newNode);\n //\n this.commandManager.executeCommand(new AddWidgetCommand(newNode, nearestContainer, nearestContainer));\n //\n setTimeout(() => {\n this.refresh({ widget: nearestContainer }); // Refresh the UI\n this.select({ widget: newNode }); // Select the newly pasted node\n });\n }\n\n async save() {\n if (this.templateId()) {\n const content = this.export();\n if (this.loadingStrategy() == AXPTemplateLoadingStrategy.Connector) {\n await this.connector.save(this.templateId()!, { json: content });\n this.toastService.success('Your changes saved successfully');\n }\n else {\n const result = await this.eventService.sendAndWaitForResponse<AXPDesignerSaveFormMessage, { success: boolean }>(AXPDesignerMessageKeys.SaveForm, { id: this.templateId()!, success: true, content });\n if (result.success) {\n this.unsavedChanges.set(false);\n window.close();\n }\n }\n } else {\n this.downloadJson();\n }\n }\n\n async saveAs(node: AXPWidgetNode = this.document()) {\n const content = this.export(node);\n const result = await this.connector.saveAs({ json: content });\n if (result) {\n this.toastService.success('Your changes saved successfully');\n }\n }\n\n export(node: AXPWidgetNode = this.document()): string {\n const json = this.removeMetaProp(node);\n return JSON.stringify(json);\n }\n\n downloadJson() {\n // Convert the object to a JSON string\n const jsonStr = this.export();\n\n // Create a blob object from the JSON string\n const blob = new Blob([jsonStr], { type: 'application/json' });\n\n // Create a URL for the blob object\n const url = URL.createObjectURL(blob);\n\n // Create a temporary <a> element to trigger the download\n const a = document.createElement('a');\n a.href = url;\n a.download = 'export.json';\n\n // Append the <a> element to the document body (necessary for some browsers)\n document.body.appendChild(a);\n\n // Trigger the download by clicking the <a> element\n a.click();\n // Clean up by revoking the object URL and removing the <a> element\n URL.revokeObjectURL(url);\n document.body.removeChild(a);\n }\n\n async loadById(id: string, options: { strategy: AXPTemplateLoadingStrategy } = { strategy: AXPTemplateLoadingStrategy.Connector }) {\n let content: string | null = null;\n try {\n if (options.strategy == AXPTemplateLoadingStrategy.Connector) {\n content = await this.connector.load(id);\n }\n else {\n content = await this.eventService.sendAndWaitForResponse<{ formId: string }, string>(AXPDesignerMessageKeys.RequestFormContent, { formId: id }, { timeout: 10000, retries: 3, retryDelay: 1000 });\n }\n if (!isNil(content) && !isEmpty(content)) {\n await this.loadByContent(content!);\n }\n this.templateId.set(id);\n this.loadingStrategy.set(options.strategy);\n } catch (error: any) {\n this.toastService.danger(error.message);\n }\n }\n\n async importJSon() {\n const files = await this.fileService.choose({ multiple: false, accept: 'application/json' });\n if (files && files.length) {\n const file = files[0];\n const content = await file.text();\n await this.loadByContent(content);\n }\n }\n\n async loadByContent(content: string) {\n const rootNode = JSON.parse(content) as AXPWidgetNode;\n const totalNode = this.countTotalNodes(rootNode);\n const processedNodes = { count: 0 };\n\n const button: AXLoadingDialogButtonItem = {\n text: 'Cancel',\n autofocus: true,\n color: 'primary',\n onClick: (e) => {\n dialog.close();\n },\n };\n\n const dialog = this.loadingService.show({\n mode: 'determinate',\n title: 'Loading Content',\n progressColor: 'primary',\n text: 'Processing content',\n status: `0 of ${totalNode}`,\n buttons: [button],\n });\n\n try {\n const root = await this.addMetaToNodes(rootNode, processedNodes, (count) => {\n dialog.setProgressValue(Math.ceil((count / totalNode) * 100));\n dialog.setProgressStatus(`${count} of ${totalNode}`);\n });\n\n const page = root.children?.[0]!;\n this.document.set(root);\n this.currentPage.set(page);\n\n dialog.setProgressColor('success');\n dialog.setProgressText('Content loaded successfully');\n button.text = 'Okay';\n button.color = 'success';\n dialog.setProgressValue(100);\n\n setTimeout(() => {\n this.reRenderPage();\n dialog.close();\n }, 250);\n } catch (error: any) {\n dialog.setProgressColor('danger');\n dialog.setProgressText(error instanceof Error ? error.message : 'Cannot load content');\n button.text = 'Close';\n button.color = 'danger';\n }\n }\n\n private countTotalNodes(node: AXPWidgetNode): number {\n let count = 1; // Count the current node\n if (node.children && node.children.length > 0) {\n count += node.children.reduce((sum, child) => sum + this.countTotalNodes(child), 0);\n }\n return count;\n }\n\n private generateUniqueName(type: string): string {\n // Normalize the type to follow camelCase convention\n const baseName = type.charAt(0).toLowerCase() + type.slice(1);\n let index = 1;\n let uniqueName = `${baseName}${index}`;\n\n // Gather all existing names to check against\n const existingNames = new Set<string>();\n this.collectAllNames(this.document(), existingNames);\n\n // Increment the index until a unique name is found\n while (existingNames.has(uniqueName)) {\n index++;\n uniqueName = `${baseName}${index}`;\n }\n\n return uniqueName;\n }\n\n generateUniqueId(): number {\n return Math.random() * Math.pow(10, 18);\n }\n\n private collectAllNames(node: AXPWidgetNode, names: Set<string>): void {\n if (node.name) {\n names.add(node.name);\n }\n if (node.children) {\n for (const child of node.children) {\n this.collectAllNames(child, names);\n }\n }\n }\n\n public updatePreview() {\n this.eventService.publish<AXPDesignerPreviewMessage>(AXPDesignerMessageKeys.Preview, {\n id: this.templateId()!,\n document: this.removeMetaProp(this.document())\n });\n }\n\n public async openPreviewDialog() {\n const com = await import('../../preview/preview.component').then((c) => c.AXPLayoutDesignerPreviewComponent);\n await this.popupService.open(com, {\n header: false,\n size: 'full',\n data: {\n initialSize: this.size(),\n isDialogWindow: true,\n },\n });\n }\n\n public openPreviewWindow() {\n window.open('/forms/preview', '_blank');\n }\n\n\n\n getContextMenuItems(instance: AXPDesignerWidgetComponent, isRoot = false): AXMenuItem[] {\n const widget = instance as any as AXPValueWidgetComponent;\n const node = widget.node;\n\n const items: AXMenuItem[] = [];\n // \n if (this.can(node).insert) {\n items.push(cloneWidgetMenu(AXP_DESIGNER_ADD_WIDGET_MENU, {\n break: true,\n }));\n }\n //\n items.push(cloneWidgetMenu(AXP_DESIGNER_CLONE_MENU, { disabled: !this.can(node).copyOrCut }));\n items.push(cloneWidgetMenu(AXP_DESIGNER_CUT_MENU, { disabled: !this.can(node).copyOrCut }));\n items.push(cloneWidgetMenu(AXP_DESIGNER_COPY_MENU, { disabled: !this.can(node).copyOrCut }));\n items.push(cloneWidgetMenu(AXP_DESIGNER_PASTE_MENU, { disabled: !this.can(node).paste, break: true }));\n //\n items.push(cloneWidgetMenu(AXP_DESIGNER_DELETE_WIDGET_MENU, { disabled: !this.can(node).delete, break: true }));\n //\n items.push(cloneWidgetMenu(AXP_DESIGNER_SAVE_AS_WIDGET_MENU));\n if (instance.onContextMenu) {\n instance.onContextMenu({ items })\n }\n if (!isRoot) {\n items.forEach(item => {\n item.suffix = undefined;\n })\n }\n return items;\n }\n\n async executeCommand(context: { instance: AXPDesignerWidgetComponent, name: string, data?: any }): Promise<void> {\n const widget = context.instance as any as AXPValueWidgetComponent;\n if (context.instance.executeCommand) {\n const command: any = {\n name: context.name,\n data: context.data,\n handled: false\n }\n await context.instance.executeCommand(command);\n if (command.handled)\n return;\n }\n switch (context.name) {\n case AXP_DESIGNER_SELECT_WIDGET_MENU.name: {\n this.select({ widget: widget.node })\n break\n }\n case AXP_DESIGNER_ADD_WIDGET_MENU.name: {\n this.showPicker(widget.node);\n break\n }\n //\n case AXP_DESIGNER_DELETE_WIDGET_MENU.name: {\n this.removeWidget(widget.node);\n break\n }\n //\n case AXP_DESIGNER_CLONE_MENU.name: {\n this.clone(widget.node);\n break\n }\n case AXP_DESIGNER_CUT_MENU.name: {\n this.cut(widget.node);\n break\n }\n case AXP_DESIGNER_COPY_MENU.name: {\n this.copy(widget.node);\n break\n }\n case AXP_DESIGNER_PASTE_MENU.name: {\n this.paste(widget.node);\n break\n }\n //\n }\n }\n\n unsubscribeEvents() {\n this.eventService.unsubscribe(AXPDesignerMessageKeys.Loaded);\n this.eventService.unsubscribe(AXPDesignerMessageKeys.PreviewWindow);\n }\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXClickEvent } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPLayoutWidgetComponent } from '@acorex/platform/layout/builder';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXPDesignerService } from '../../shared/designer.service';\n\n@Component({\n selector: 'axp-designer-add-widget-button',\n styleUrls: ['./add-widget-button.component.scss'],\n template: `\n <div class=\"ax-container\">\n <ax-button [text]=\"'Add New Element'\" (onClick)=\"handleClick($event)\" [look]=\"'solid'\" [color]=\"'primary'\">\n <ax-icon icon=\"fa-solid fa-plus\"></ax-icon>\n </ax-button>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXButtonModule, AXDecoratorModule],\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPDesignerAddWidgetButtonComponent {\n private designerService = inject(AXPDesignerService);\n private parent = inject(AXPLayoutWidgetComponent);\n\n async handleClick(e: AXClickEvent) {\n e.nativeEvent.stopPropagation();\n await this.designerService.showPicker(this.parent.node);\n }\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { ChangeDetectionStrategy, Component, input, output, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'axp-designer-add-widget-line-button',\n template: `\n <div class=\"ax-flex ax-items-center ax-py-4 ax-text-xs\">\n <div class=\"ax-flex-grow ax-border-t-2 ax-border-dashed ax-border-surface\"></div>\n <div class=\"ax-mx-2 ax-sm \">\n <ax-button [text]=\"text()\" [look]=\"'twotone'\" class=\"ax-capitalize\" (onClick)=\"handleClick()\">\n <ax-icon icon=\"fa-solid fa-plus\"></ax-icon>\n </ax-button>\n </div>\n <div class=\"ax-flex-grow ax-border-t-2 ax-border-dashed ax-border-surface\"></div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXButtonModule, AXDecoratorModule],\n encapsulation: ViewEncapsulation.None\n})\nexport class AXPDesignerAddWidgetLineButtonComponent {\n\n text = input();\n onClick = output();\n\n\n protected handleClick() {\n this.onClick.emit();\n }\n\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPLayoutWidgetComponent } from '@acorex/platform/layout/builder';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n inject,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPDesignerService } from '../../shared/designer.service';\n\n@Component({\n selector: 'axp-designer-add-widget-mini-button',\n template: `\n <div class=\"axp-empty-space\">\n <div\n class=\"ax-m-auto ax-py-4 ax-px-8 ax-text-primary-500 hover:ax-text-primary-700 ax-cursor-pointer\"\n (click)=\"handleClick($event)\"\n >\n <i class=\"fa-solid fa-plus \"></i>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXButtonModule, AXDecoratorModule],\n encapsulation: ViewEncapsulation.None\n})\nexport class AXPDesignerAddWidgetMiniButtonComponent {\n private designerService = inject(AXPDesignerService);\n private parent = inject(AXPLayoutWidgetComponent);\n\n @Output()\n public onClick: EventEmitter<void> = new EventEmitter<void>();\n\n protected async handleClick(e: MouseEvent) {\n e.stopPropagation();\n const a = this.onClick;\n if (this.onClick.observed) {\n this.onClick.emit();\n } else {\n await this.designerService.showPicker(this.parent.node);\n }\n }\n\n @HostBinding('class')\n private get __class(): string {\n const cls: any = {};\n //\n cls[`ax-flex`] = true;\n cls[`ax-w-full`] = true;\n return cls;\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, HostBinding, HostListener, model, output, signal } from '@angular/core';\n\n@Component({\n selector: 'axp-designer-grid-drawer',\n styleUrls: ['./grid-drawer.component.scss'],\n template: `\n <table class=\"table-picker\" >\n <tbody>\n @for(r of rows();track $index)\n {\n <tr >\n @for(c of columns();track $index)\n {\n <td (mouseenter)=\"handleMouseHover(r,c)\" [class.picked]=\"c<=rangeC() && r<=rangeR()\" (click)=\"handleClick(r,c)\">\n </td>\n }\n </tr>\n }\n <tr>\n <td [attr.colspan]=\"columns().length\" class=\"ax-text-center\">\n <small >{{rangeC()}}*{{rangeR()}}</small>\n </td>\n </tr>\n </tbody>\n </table>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: []\n})\nexport class AXPDesignerGridDrawerComponent {\n\n rowsCount = model<number>(5, { alias: \"rows\" });\n colsCount = model<number>(12, { alias: \"columns\" });\n\n onSelect = output<{ rows: number, cols: number }>();\n\n\n protected rows = computed(() => Array.from({ length: this.rowsCount() }).map((v, index) => index + 1));\n protected columns = computed(() => Array.from({ length: this.colsCount() }).map((v, index) => index + 1));\n\n protected rangeR = signal(0);\n protected rangeC = signal(0);\n\n\n protected handleMouseHover(r: number, c: number) {\n this.rangeR.set(r);\n this.rangeC.set(c);\n }\n\n protected handleClick(r: number, c: number) {\n this.onSelect.emit({ rows: r, cols: c });\n }\n\n @HostListener('mouseleave', ['$event'])\n private handleMouseLeave(event: KeyboardEvent) {\n this.rangeR.set(0);\n this.rangeC.set(0);\n }\n\n @HostBinding('style')\n private get __style(): any {\n return {\n \"--cols-width\": `${this.colsCount() == 0 ? 0 : (100 / this.colsCount())}%`\n };\n }\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXCommonModule } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTabsModule, AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport { AXPSettingService, AXPStickyDirective } from '@acorex/platform/common';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { AXP_WIDGETS_CATEGORIES, AXPWidgetConfig, AXPWidgetCategory } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, inject, model, signal, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { castArray, orderBy, uniqBy } from 'lodash-es';\n\nexport interface AXPDisplayWidgetConfig extends AXPWidgetConfig {\n pinned: boolean;\n}\n\n@Component({\n imports: [\n CommonModule,\n AXCommonModule,\n FormsModule,\n AXButtonModule,\n AXDecoratorModule,\n AXTabsModule,\n AXSearchBoxModule,\n AXPStickyDirective,\n ],\n templateUrl: './widget-picker.component.html',\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./widget-picker.component.scss'],\n})\nexport class AXPDesignerWidgetPickerComponent extends AXBasePageComponent {\n private settingService = inject(AXPSettingService);\n private readonly pinnedSettingKey = 'forms:widgets:picker:pinned';\n\n protected searchTerm = model('');\n\n // Signals\n private widgets: AXPWidgetConfig[] = [];\n private allWidgets = signal<AXPWidgetConfig[]>([]);\n private pinnedWidgets = signal<string[]>([]);\n\n private displayWidgets = computed<AXPDisplayWidgetConfig[]>(() => {\n return this.allWidgets().map((c) => ({ ...c, pinned: this.pinnedWidgets().includes(c.name) }));\n });\n\n // Signal to track selected widgets\n protected selectedWidgets = signal<AXPDisplayWidgetConfig[]>([]);\n\n // Computed for filtered and ordered widget list\n private orderedList = computed(() => {\n const search = this.searchTerm().toLowerCase();\n const selectedTabName = this.selectedTab().name;\n\n return orderBy(\n this.displayWidgets().filter((w) => {\n const matchesTab =\n selectedTabName === 'all' || castArray(w.categories ?? []).some((c) => c.name === selectedTabName);\n const matchesSearch =\n !search || w.title.toLowerCase().includes(search) || w.description?.toLowerCase().includes(search);\n return matchesTab && matchesSearch;\n }),\n ['pinned', 'title'],\n ['desc', 'asc'],\n );\n });\n\n // Pinned and regular lists\n protected pinnedList = computed(() => this.orderedList().filter((c) => c.pinned));\n protected regularList = computed(() => this.orderedList().filter((c) => !c.pinned));\n\n // Tabs for the widget groups\n protected categories = computed(() =>\n uniqBy(\n this.allWidgets()\n .map((w) => castArray(w.categories ?? []))\n .filter((c) => c.length > 0)\n .flat(),\n 'name',\n ),\n );\n\n protected tabs = computed<AXPWidgetCategory[]>(() =>\n orderBy([{ name: 'all', title: 'All', order: 0 }, ...this.categories()], (c) => c.order),\n );\n\n // computed max visible widgets in a tab\n protected maxVisibleWidgets = computed(() =>\n Math.max(\n ...this.categories().map(\n (c) => this.allWidgets().filter((w) => castArray(w.categories ?? []).some((c) => c.name === c.name)).length,\n ),\n ),\n );\n\n protected currentTabIndex = signal(0);\n protected selectedTab = computed(() => this.tabs()[this.currentTabIndex()]);\n\n protected override async ngOnInit() {\n super.ngOnInit();\n this.allWidgets.set(this.widgets);\n this.pinnedWidgets.set((await this.settingService.get<string[]>(this.pinnedSettingKey)) || []);\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 protected handleClick(event: MouseEvent, widget: AXPDisplayWidgetConfig) {\n if (event.ctrlKey) {\n const currentSelection = this.selectedWidgets();\n const isAlreadySelected = currentSelection.some((w) => w === widget);\n\n if (isAlreadySelected) {\n // Deselect widget if already selected\n this.selectedWidgets.set(currentSelection.filter((w) => w !== widget));\n } else {\n // Add widget to selection\n this.selectedWidgets.set([...currentSelection, widget]);\n }\n } else {\n // If CTRL is not pressed, select only the clicked widget\n this.close({ widgets: [widget] });\n }\n }\n\n protected async handlePinClick(e: MouseEvent, widget: AXPDisplayWidgetConfig) {\n e.stopPropagation();\n widget.pinned = !widget.pinned;\n // Get the current list of pinned widgets from settings\n let pinnedWidgets = (await this.settingService.get<string[]>(this.pinnedSettingKey)) || [];\n\n // Update the list of pinned widgets based on the pinned status\n if (widget.pinned) {\n if (!pinnedWidgets.includes(widget.name)) {\n pinnedWidgets.push(widget.name);\n }\n } else {\n pinnedWidgets = pinnedWidgets.filter((name) => name !== widget.name);\n }\n\n // Save the updated list of pinned widgets\n await this.settingService.scope(AXPPlatformScope.User).set(this.pinnedSettingKey, pinnedWidgets);\n\n // Trigger a re-render of the widgets\n this.pinnedWidgets.set(pinnedWidgets);\n }\n\n // Check if a widget is selected\n protected isWidgetSelected(widget: AXPDisplayWidgetConfig): boolean {\n return this.selectedWidgets().includes(widget);\n }\n\n protected handleConfirmSelection(): void {\n this.close({ widgets: this.selectedWidgets() });\n }\n}\n","<div\n class=\"ax-flex ax-flex-col ax-h-[95vh]\"\n [ngClass]=\"{ 'lg:ax-h-[75vh]': maxVisibleWidgets() > 10, 'lg:ax-h-[50vh]': maxVisibleWidgets() <= 10 }\"\n>\n <div>\n <ax-tabs [look]=\"'with-line'\" (onActiveTabChanged)=\"handleTabChange($event)\">\n @for(w of tabs();track $index) {\n <ax-tab-item [text]=\"w.title\" [key]=\"$index.toString()\" [active]=\"currentTabIndex() === $index\"></ax-tab-item>\n }\n </ax-tabs>\n </div>\n <div class=\"ax-overflow-auto\" #content>\n <div\n class=\"ax-p-4 ax-sticky ax-top-0 ax-z-10 ax-transition-all\"\n #sticky=\"axpSticky\"\n [axpSticky]=\"'ax-bg-lightest ax-shadow-xl'\"\n [stickyParent]=\"content\"\n [stickyOffset]=\"10\"\n >\n <ax-search-box\n look=\"fill\"\n placeholder=\"e.g. Button, Text, ...\"\n [(ngModel)]=\"searchTerm\"\n [delayTime]=\"300\"\n [axAutoFocus]=\"true\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n <div class=\"ax-flex ax-flex-col ax-p-4 ax-pt-0\">\n <ng-template #itemTpl let-w>\n @let isSelected= isWidgetSelected(w);\n <div\n (click)=\"handleClick($event, w)\"\n class=\"ax-py-2 ax-px-3 ax-rounded-md ax-flex ax-gap-3 ax-items-center ax-group hover:ax-bg-primary-lightest/65 hover:ax-text-primary-on-lightest ax-cursor-pointer\"\n [class.ax-bg-primary-lightest]=\"isSelected\"\n [class.ax-text-primary-on-lightest]=\"isSelected\"\n [class.ax-border-primary-lightest]=\"isSelected\"\n >\n <div\n class=\"ax-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-rounded-md ax-border group-hover:ax-bg-primary-lighter group-hover:ax-text-primary-on-lighter group-hover:ax-border-primary-lighter\"\n [class.ax-bg-primary-light]=\"isSelected\"\n [class.ax-text-primary-on-light]=\"isSelected\"\n [class.ax-border-primary-light]=\"isSelected\"\n [class.ax-surface]=\"!isSelected\"\n >\n <i [ngClass]=\"w.icon\" class=\"ax-text-lg\"></i>\n </div>\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-flex-1\">\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n <div class=\"ax-font-semibold ax-text-sm\">{{ w.title }}</div>\n <div (click)=\"handlePinClick($event, w)\">\n @if (w.pinned) {\n <i class=\"fa-solid fa-thumbtack ax-text-sm ax-rotate-45\"></i>\n } @else {\n <i class=\"fa-light fa-thumbtack ax-text-sm ax-rotate-45 ax-invisible group-hover:ax-visible\"></i>\n }\n </div>\n </div>\n <span class=\"ax-text-xs ax-truncate\">\n {{ w.description }}\n </span>\n </div>\n </div>\n </ng-template>\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2\">\n @for(w of pinnedList();track $index) {\n <ng-container *ngTemplateOutlet=\"itemTpl; context: { $implicit: w }\"></ng-container>\n }\n </div>\n @if(pinnedList().length) {\n <hr class=\"ax-my-4 ax-border-dashed\" />\n }\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2\">\n @for(w of regularList();track $index) {\n <ng-container *ngTemplateOutlet=\"itemTpl; context: { $implicit: w }\"></ng-container>\n }\n </div>\n </div>\n </div>\n</div>\n@if(selectedWidgets().length) {\n<ax-footer>\n <ax-suffix>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n text=\"{{ selectedWidgets().length }} Selected\"\n (onClick)=\"handleConfirmSelection()\"\n ></ax-button>\n </ax-suffix>\n</ax-footer>\n}\n","import { AXCollapseModule } from '@acorex/components/collapse';\nimport { convertArrayToDataSource } from '@acorex/cdk/common';\nimport { AXTabsModule, AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport {\n AXPLayoutBuilderModule,\n AXPLayoutContextChangeEvent,\n AXPWidgetConfig,\n AXPWidgetDataSourceProviderService,\n AXPWidgetNode,\n AXPWidgetProperty,\n AXPWidgetRegistryService,\n} from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\n\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n EventEmitter,\n inject,\n input,\n Output,\n signal,\n untracked,\n WritableSignal,\n} from '@angular/core';\nimport { capitalize, cloneDeep, isArray, isEmpty, isNil, merge, set, sortBy, unionBy } from 'lodash-es';\nimport { AXPDesignerConnector } from '../designer';\nimport { AXTranslationModule } from '@acorex/core/translation';\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\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 imports: [CommonModule, AXCollapseModule, AXTabsModule, AXPLayoutBuilderModule, AXTranslationModule],\n})\nexport class AXPWidgetPropertyViewerComponent {\n widget = input.required<AXPWidgetNode>();\n\n mode = input<'simple' | 'advanced'>('simple');\n\n private widgetRegistryService = inject(AXPWidgetRegistryService);\n\n protected connector = inject(AXPDesignerConnector);\n protected dataSourceProvider = inject(AXPWidgetDataSourceProviderService);\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 protected groupCollapsedStates: Map<string, boolean> = new Map();\n\n @Output()\n onChanged = new EventEmitter<AXPWidgetPropertiesChangedEvent>();\n\n protected context = signal<any>({});\n\n protected initialContext: any = {};\n\n constructor() {\n effect(() => {\n if (!this.widget()) 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 }\n\n public update(values: any) {\n this.context.set(merge(cloneDeep(this.context()), values));\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[]) ?? []);\n //\n this.allPoperties.push(...props);\n tab.groups = unionBy(\n sortBy(\n props.map((pg) => ({\n isCollapsed: !!this.groupCollapsedStates.get(pg.group.name),\n name: pg.group.name,\n title: pg.group.title,\n props: sortBy(\n props.filter((p) => p.group.name == pg.group.name && pg.visible),\n ['order', 'title'],\n ),\n })),\n ['order', 'title'],\n ),\n 'name',\n ).filter((c) => c.props.length);\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)) ||\n (isArray(c.schema.defaultValue) && !isEmpty(c.schema.defaultValue)),\n )\n .reduce((acc, c) => {\n set(acc, c.schema.interface.path, c.schema.defaultValue);\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: AXPLayoutContextChangeEvent) {\n untracked(() => {\n this.context.set(e.data);\n this.onChanged.emit({ values: this.context(), mode: e.state == 'initiated' ? 'init' : 'update' });\n });\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 protected handleCollapsedChange(group: string, collapsed: boolean) {\n this.groupCollapsedStates.set(group, collapsed);\n }\n\n protected functions = {\n getDataSourceNames: this.getDataSourceNames.bind(this),\n };\n\n private async getDataSourceNames(): Promise<{ id: string; title: string; valueField: string; textField: string }[]> {\n const result = (await this.dataSourceProvider.items()).map((c) => ({\n id: c.name,\n title: c.title,\n valueField: c.valueField,\n textField: c.textField,\n }));\n return result;\n }\n}\n","<axp-widgets-container [context]=\"context()\" (onContextChanged)=\"handleContextChange($event)\" [functions]=\"functions\">\n @if (mode()=='advanced') {\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]=\"'flat'\">\n @for( group of groups();track $index){\n <ax-collapse class=\"!ax-mb-0\" [caption]=\"group.title\" [(isCollapsed)]=\"group.isCollapsed\"\n (isCollapsedChange)=\"handleCollapsedChange(group.name, $event)\">\n <div class=\"ax-flex ax-flex-col\">\n @for( p of group.props;track $index){\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-py-2\">\n <span class=\"ax-font-semibold\">{{ p.title }}</span>\n @if(p.schema.interface) {\n <ng-container axp-widget-renderer [node]=\"p.schema.interface\" [mode]=\"'edit'\"> </ng-container>\n }\n </div>\n }\n </div>\n </ax-collapse>\n }\n </ax-collapse-group>\n </div>\n </div>\n }\n <!-- Simple-->\n @else {\n <div class=\"ax-flex ax-flex-col ax-p-4 ax-gap-4\">\n <!-- groups -->\n @for( group of groups();track $index){\n <!-- props -->\n @for( p of group.props;track $index){\n <div class=\"ax-flex ax-flex-col ax-gap-2\">\n <span class=\"ax-font-semibold\">{{ p.title | translate | async }}</span>\n @if(p.schema.interface) {\n <ng-container axp-widget-renderer [node]=\"p.schema.interface\" [mode]=\"'edit'\"> </ng-container>\n }\n </div>\n }\n }\n </div>\n }\n\n</axp-widgets-container>","import {\n AXP_WIDGET_TOKEN,\n AXPBaseWidgetComponent,\n AXPLayoutWidgetComponent,\n AXPValueWidgetComponent,\n AXPWidgetConfig,\n AXPWidgetNode,\n AXPWidgetNodeToken,\n AXPWidgetRegistryService,\n AXPWidgetRenderMode,\n AXPWidgetStatus,\n} from '@acorex/platform/layout/builder';\nimport {\n Directive,\n inject,\n Injector,\n input,\n NgZone,\n OnChanges,\n OnDestroy,\n signal,\n SimpleChanges,\n ViewContainerRef,\n WritableSignal,\n} from '@angular/core';\nimport { cloneDeep, get, isEqual, isNil, merge, set } from 'lodash-es';\nimport { debounceTime, distinctUntilChanged, filter, first, Subscription } from 'rxjs';\nimport { AXPDesignerService } from './designer.service';\n\n@Directive({\n selector: '[axp-widget-designer-renderer]',\n standalone: true,\n})\nexport class AXPWidgetDesignerRendererDirective implements OnChanges, OnDestroy {\n protected mergedOptions: WritableSignal<any> = signal<any>({});\n\n private injector = inject(Injector);\n protected widgetRegistery = inject(AXPWidgetRegistryService);\n protected zone = inject(NgZone);\n\n protected isLoading = signal(true);\n\n private instance!: AXPBaseWidgetComponent;\n private config?: AXPWidgetConfig | undefined;\n\n private service = inject(AXPDesignerService);\n private viewContainerRef = inject(ViewContainerRef);\n\n parentNode = input<AXPLayoutWidgetComponent | null>();\n\n index = input<number | null>();\n locked = input<boolean>(false);\n\n mode = input.required<AXPWidgetRenderMode>();\n node = input.required<AXPWidgetNode>();\n\n private hostElement = () => this.instance?.host as HTMLDivElement;\n private getId = (w: AXPWidgetNode) => get(w, '__meta__.id');\n private isCurrentWidget = (w: AXPWidgetNode) => this.getId(w) == this.getId(this.node());\n\n private subs: Subscription[] = [];\n\n /**\n * @ignore\n */\n constructor() {\n this.subs[0] = this.service.onUpdate\n .pipe(\n //debounceTime(time),\n distinctUntilChanged(\n (p, c) => this.getId(p.widget) == this.getId(c.widget) && isEqual(p.values?.options, c.values?.options),\n ),\n filter((c) => this.isCurrentWidget(c.widget) && !this.locked()),\n )\n .subscribe((c) => {\n this.applyOptions(c.values?.options);\n });\n //\n this.subs[1] = this.service.onSelected\n .pipe(distinctUntilChanged((p, c) => this.getId(p.widget) == this.getId(c.widget)))\n .subscribe((c) => {\n this.zone.runOutsideAngular(() => {\n if (this.isCurrentWidget(c.widget) && !this.locked()) {\n this.applySelectedStyle();\n } else {\n this.removeSelectedStyle();\n }\n });\n });\n //\n this.subs[2] = this.service.onFocused\n .pipe(\n distinctUntilChanged(\n (p, c) => !isNil(p.widget) && !isNil(c.widget) && this.getId(p.widget) == this.getId(c.widget),\n ),\n )\n .subscribe((c) => {\n if (c.widget && this.isCurrentWidget(c.widget)) {\n this.addOverlay();\n } else {\n this.removeOverlay();\n }\n });\n //\n this.subs[3] = this.service.onRefresh\n .pipe(\n debounceTime(200),\n filter((c) => this.isCurrentWidget(c.widget)),\n )\n .subscribe((c) => {\n this.instance?.setChildren(this.node().children ?? []);\n });\n //\n }\n\n // Detect input changes\n ngOnChanges(changes: SimpleChanges) {\n if (changes['mode'] || changes['node']) {\n this.loadComponent();\n }\n }\n\n ngOnDestroy(): void {\n this.subs.forEach((s) => {\n s.unsubscribe();\n });\n }\n\n private async loadComponent() {\n this.viewContainerRef.clear();\n this.isLoading.set(true);\n this.config = this.widgetRegistery.resolve(this.node().type);\n //\n const props = [...(this.config?.properties ?? []), ...(this.config?.components[this.mode()]?.properties ?? [])]\n ?.filter((c) => c.schema.defaultValue != null)\n .map((c) => ({ [c.name]: cloneDeep(c.schema.defaultValue) }))\n .reduce((acc, curr) => {\n return { ...acc, ...curr };\n }, {});\n //\n this.mergedOptions.set(merge(props, this.node().options) || {});\n\n this.preprocessAndInitialOptions(cloneDeep(this.node().options));\n\n const tokenValue = {\n node: this.node(),\n options: this.mergedOptions(),\n config: this.config,\n defaultValue: cloneDeep(this.node().defaultValue),\n } as AXPWidgetNodeToken;\n\n const token = Injector.create({\n parent: this.injector,\n providers: [\n {\n provide: AXP_WIDGET_TOKEN,\n useValue: tokenValue,\n },\n ],\n });\n var com = await this.config?.components[this.mode()]?.component();\n this.instance = this.viewContainerRef.createComponent<AXPBaseWidgetComponent>(com, { injector: token }).instance;\n this.instance.locked = this.locked();\n this.instance.parent = this.parentNode();\n this.instance.index = this.index();\n this.instance.mode = this.mode();\n //\n this.instance.onStatusChanged\n .pipe(\n filter((c) => c == AXPWidgetStatus.Rendered),\n first(),\n )\n .subscribe(() => {\n const host = this.hostElement();\n set(host, '__meta__.renderer', this);\n set(host, '__meta__.instance', this.instance);\n host.classList.add('axp-widget-host');\n if (this.mode() == 'designer') {\n if (!this.locked()) {\n host.addEventListener('mouseover', (e) => {\n e.stopPropagation();\n this.addOverlay();\n this.focus();\n });\n host.addEventListener('mouseleave', (e) => {\n e.stopPropagation();\n this.removeOverlay();\n this.blur();\n });\n\n host.addEventListener('click', (e) => {\n e.stopPropagation();\n this.applySelectedStyle();\n this.service.select({ widget: this.node() });\n });\n this.service.register({\n config: this.config!,\n id: get(this.node(), '__meta__.id') as any as number,\n instance: this.instance,\n widget: this.node(),\n });\n }\n }\n });\n }\n\n private overlay: HTMLElement | null;\n\n public select() {\n if (this.locked()) return;\n //\n this.service.select({ widget: this.node() });\n this.applySelectedStyle();\n }\n\n public focus() {\n if (this.locked()) return;\n //\n this.service.focus({ widget: this.node() });\n }\n\n public blur() {\n if (this.locked()) return;\n //\n this.service.focus({ widget: null });\n }\n\n private applySelectedStyle() {\n if (this.locked()) return;\n //\n this.hostElement()?.classList.add('axp-state-selected');\n this.hostElement()?.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n\n private removeSelectedStyle() {\n this.hostElement()?.classList.remove('axp-state-selected');\n }\n\n private addOverlay() {\n if (this.locked()) return;\n //\n this.zone.runOutsideAngular(() => {\n if (this.hostElement()) {\n this.hostElement()?.classList.add('axp-state-hover');\n //\n if (this.hostElement().querySelector('.axp-widget-overlay') || this.config?.type == 'container') {\n return;\n }\n this.overlay = document.createElement('div');\n this.overlay.classList.add('axp-widget-overlay');\n this.overlay.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n this.select();\n });\n this.overlay.addEventListener('mouseleave', (e) => {\n e.preventDefault();\n e.stopPropagation();\n this.blur();\n });\n this.hostElement().appendChild(this.overlay);\n }\n });\n }\n\n private removeOverlay() {\n this.zone.runOutsideAngular(() => {\n if (this.hostElement()) {\n this.hostElement()?.classList.remove('axp-state-hover');\n //\n this.overlay?.remove();\n }\n });\n }\n\n private preprocessAndInitialOptions(obj: any, pathPrefix: string = ''): void {\n if (!obj) return;\n //\n Object.entries(obj).forEach(([key, value]) => {\n const currentPath = pathPrefix ? `${pathPrefix}.${key}` : key;\n this.mergedOptions.update((currentOptions) => {\n return set(currentOptions, currentPath, value);\n });\n });\n }\n\n private applyOptions(values: any): void {\n if (this.instance instanceof AXPValueWidgetComponent && this.node().defaultValue != null) {\n this.instance.setValue(cloneDeep(this.node().defaultValue));\n }\n this.mergedOptions.update((currentOptions) => {\n return merge(currentOptions, values);\n });\n this.instance?.setOptions(this.mergedOptions());\n }\n}\n","import {\n AXContextMenuComponent,\n AXContextMenuItemsClickEvent,\n AXContextMenuOpeningEvent,\n AXMenuItem,\n AXMenuModule,\n} from '@acorex/components/menu';\nimport { AXPLayoutBuilderModule, AXPValueWidgetComponent } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n HostBinding,\n inject,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { get, set } from 'lodash-es';\nimport { AXPDesignerService } from '../../shared/designer.service';\nimport { AXPWidgetDesignerRendererDirective } from '../../shared/widget-designer-renderer.directive';\nimport { AXPDesignerWidgetComponent } from '../../shared/designer.types';\nimport { AXP_DESIGNER_SELECT_WIDGET_MENU } from '../../shared/generic-commands.types';\n\n@Component({\n selector: 'axp-designer-board',\n templateUrl: './board.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXPLayoutBuilderModule, AXPWidgetDesignerRendererDirective, AXMenuModule]\n})\nexport class AXPDesignerBoardComponent {\n @ViewChild('contextMenu')\n protected contextMenu: AXContextMenuComponent;\n\n protected context: any = {};\n private elementRef = inject(ElementRef<HTMLDivElement>) as ElementRef<HTMLDivElement>;\n\n private breakpointMap = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n xxl: 1536,\n };\n\n // Unified method to extract media queries and create a custom class\n applyResponsiveStyles(breakpoint: string) {\n const minWidth = get(this.breakpointMap, breakpoint) as number;\n const mediaRules = [];\n\n // Loop through all the stylesheets\n for (const sheet of Array.from(document.styleSheets)) {\n try {\n // Loop through CSS rules\n for (const rule of Array.from(sheet.cssRules)) {\n // Check if the rule is a CSSMediaRule\n if (rule instanceof CSSMediaRule && rule.media.mediaText.includes(`min-width: ${minWidth}px`)) {\n // Loop through the media rule's CSS rules\n for (const subRule of Array.from(rule.cssRules)) {\n mediaRules.push(subRule.cssText);\n }\n }\n }\n } catch (e) {\n console.error('Error accessing stylesheet:', e);\n }\n }\n\n // Create a dynamic class for the media queries\n this.createCustomClass(`axp-preview-${breakpoint}`, mediaRules, breakpoint);\n }\n\n private createCustomClass(className: string, styles: string[], breakpoint: string) {\n const styleSheet = document.createElement('style');\n styleSheet.setAttribute('data-screen', breakpoint);\n\n // Construct a pure CSS string, dynamically replacing the breakpoint prefix\n let styleString = '';\n styles.forEach((style) => {\n // Replace any prefixed classes like 'lg:' or 'md:' dynamically\n const dynamicPrefix = new RegExp(`\\\\.${breakpoint}\\\\\\\\:`, 'g');\n styleString += `.${className} ${style.replace(dynamicPrefix, '.')}`; // Replace the breakpoint prefix\n });\n\n styleSheet.innerText = styleString;\n this.removeCustomClass();\n this.elementRef.nativeElement.appendChild(styleSheet);\n }\n\n private removeCustomClass() {\n this.elementRef.nativeElement.querySelectorAll('style').forEach((s) => s.remove());\n }\n\n protected service = inject(AXPDesignerService);\n\n protected width = computed(() => {\n switch (this.service.size()) {\n case 'sm':\n return '340px';\n case 'md':\n case 'lg':\n return '768px';\n default:\n return '100%';\n }\n });\n\n private ef = effect(() => {\n this.removeCustomClass();\n if (this.service.size() != 'xl') {\n this.applyResponsiveStyles(this.service.size());\n }\n });\n\n /**\n * @ignore\n */\n constructor() {\n this.service.onRefresh.subscribe(() => {\n this.contextMenu?.refresh();\n });\n }\n\n\n protected handleContextMenuOpening(e: AXContextMenuOpeningEvent) {\n const renderer = get(e.targetElement, '__meta__.renderer') as unknown as AXPWidgetDesignerRendererDirective;\n const instance = get(e.targetElement, '__meta__.instance') as unknown as AXPDesignerWidgetComponent;\n\n if (!renderer || !instance) {\n e.canceled = true;\n return;\n }\n\n renderer.select();\n\n // Fetch context menu items for the current instance\n try {\n const items: AXMenuItem[] = this.service.getContextMenuItems(instance, true);\n if (items.length) {\n e.items.push(...items);\n } else {\n e.canceled = true;\n }\n } catch (error) {\n console.error('Failed to get context menu items:', error);\n e.canceled = true;\n }\n\n // Recursively bind instance data to all items\n this.bindInstanceToItems(e.items, instance);\n\n // Traverse through parents and add their menu items directly to the root level\n this.addParentsToRootMenu(instance, e.items);\n }\n\n\n private addParentsToRootMenu(instance: AXPDesignerWidgetComponent, items: AXMenuItem[]) {\n let parent = (instance as unknown as AXPValueWidgetComponent)?.parent;\n const parentItems: AXMenuItem[] = [];\n\n // Traverse up the parent chain, adding each parent to the \"Parents\" menu\n while (parent) {\n try {\n const widget = parent as unknown as AXPDesignerWidgetComponent;\n const parentContextItems: AXMenuItem[] = this.service.getContextMenuItems(widget);\n\n // Create a new menu item for this parent\n const parentMenuItem: AXMenuItem = {\n text: parent.config.title,\n icon: parent.config.icon,\n items: [\n {\n text: 'Select',\n name: 'select',\n break: true,\n icon: 'fa-solid fa-arrow-pointer',\n },\n ...parentContextItems,\n ],\n };\n\n // Recursively bind instance data to all items\n this.bindInstanceToItems(parentMenuItem.items ?? [], widget);\n\n // Add the parent menu item to the parentItems array\n parentItems.push(parentMenuItem);\n } catch (error) {\n console.error('Failed to get parent context menu items:', error);\n }\n\n // Move to the next parent in the chain\n parent = (parent as unknown as AXPValueWidgetComponent)?.parent;\n }\n\n // If there are any parent items, add them under a \"Parents\" group\n if (parentItems.length > 0) {\n items[items.length - 1].break = true;\n items.push({\n text: 'Parents',\n icon: 'fa-solid fa-turn-up', // Icon for the \"Parents\" group\n items: parentItems, // Add all parent items here\n });\n }\n }\n\n protected async handleContextMenuItemClick(e: AXContextMenuItemsClickEvent) {\n if (e.item.name) {\n const instance: AXPDesignerWidgetComponent = get(e.item.data, \"instance\") as unknown as AXPDesignerWidgetComponent;\n await this.service.executeCommand({ instance, name: e.item.name });\n }\n }\n\n private bindInstanceToItems(items: AXMenuItem[], instance: AXPDesignerWidgetComponent): void {\n items.forEach(item => {\n // Ensure each item gets the correct instance\n item.data = { ...(item.data ?? {}), instance };\n\n // If the item has sub-items, bind instance to them recursively\n if (item.items) {\n this.bindInstanceToItems(item.items, instance);\n }\n });\n }\n\n @HostBinding('style')\n private get __style(): string {\n const cls: any = {};\n cls[`width`] = this.width();\n cls[`max-width`] = '1280px';\n return cls;\n }\n\n @HostBinding('class')\n private get __class(): string {\n const cls: any = {};\n cls[`axp-designer-board`] = true;\n cls[`axp-state-design`] = true;\n cls['ax-h-full'] = true;\n cls['ax-overflow-auto'] = true;\n cls[`axp-preview-${this.service.size()}`] = true;\n return cls;\n }\n}\n","<axp-widgets-container [context]=\"context\">\n <ng-container axp-widget-designer-renderer [node]=\"service.currentPage()\" [mode]=\"'designer'\"></ng-container>\n</axp-widgets-container>\n\n<ax-context-menu class=\"ax-dark\" #contextMenu [target]=\"'.axp-widget-host'\" [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\" (onOpening)=\"handleContextMenuOpening($event)\" (onItemClick)=\"handleContextMenuItemClick($event)\">\n</ax-context-menu>","import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPLayoutBuilderModule, AXPWidgetNode } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { AXPDesignerService } from '../../shared/designer.service';\n\n@Component({\n selector: 'axp-designer-breadcrumbs',\n template: `\n <ax-breadcrumbs>\n @for( b of service.breadcrumbs();track $index){\n <ax-breadcrumbs-item>\n <a (click)=\"handleClick(b)\" (mouseover)=\"handleMouseOver(b)\"> {{ getTitle(b) }}</a>\n </ax-breadcrumbs-item>\n }\n <ng-template #divider>\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </ng-template>\n </ax-breadcrumbs>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXPLayoutBuilderModule, AXBreadcrumbsModule, AXDecoratorModule]\n})\nexport class AXPDesignerBreadcrumbsComponent {\n protected service = inject(AXPDesignerService);\n\n protected getTitle(node: AXPWidgetNode): string {\n return get(node, '__meta__.config.title') as any as string;\n }\n\n protected handleClick(node: AXPWidgetNode) {\n this.service.select({ widget: node });\n }\n\n protected handleMouseOver(node: AXPWidgetNode) {\n this.service.focus({ widget: node });\n }\n}\n","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { CommonModule } from '@angular/common';\nimport { Component, OnInit } from '@angular/core';\n\n@Component({\n imports: [CommonModule, AXDecoratorModule],\n selector: 'axp-designer-drawer-content',\n templateUrl: 'drawer-content.component.html'\n})\n\nexport class AXPLayoutDesignerDrawerContentComponent implements OnInit {\n constructor() { }\n\n ngOnInit() { }\n}","<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72 ax-h-full\">\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 ax-font-semibold\">\n <ng-content select=\"ax-title\"></ng-content>\n </div>\n <div class=\"ax-flex ax-gap-1 ax-items-center\">\n <ng-content select=\"ax-content[header]\">\n </ng-content>\n <ax-close-button></ax-close-button>\n </div>\n </div>\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n <ng-content select=\"ax-content[body]\">\n\n </ng-content>\n </div>\n</div>","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXPDesignerService } from '../../../shared/designer.service';\nimport { AXPLayoutDesignerDrawerContentComponent } from '../../../shared/drawer-content/drawer-content.component';\nimport { AXPDesignerConnector } from '../../../shared/designer-connector.service';\nimport { AXPWidgetDataSourceProviderService } from '@acorex/platform/layout/builder';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { AXPDataGenerator } from '@acorex/platform/core';\n\n@Component({\n selector: 'axp-designer-data-sources',\n templateUrl: 'data-sources.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXButtonModule,\n AXPLayoutDesignerDrawerContentComponent\n ]\n})\n\nexport class AXPDesignerDataSourcesComponent {\n\n protected service = inject(AXPDesignerService);\n protected workflow = inject(AXPWorkflowService);\n protected dataSourceProvider = inject(AXPWidgetDataSourceProviderService);\n\n protected list = signal<{ name: string, title: string }[]>([]);\n\n\n async ngOnInit() {\n const items = (await this.dataSourceProvider.items()).map(c => ({ name: c.name, title: c.title }));\n this.list.set(items);\n }\n\n\n protected async handleAddClick() {\n this.workflow.execute('create-entity',\n {\n entity: `PlatformManagement.DataSource`,\n options: {\n process: {\n canCreateNewOne: false,\n redirect: false,\n },\n layout: {\n size: 'lg'\n }\n },\n metadata: {\n formBuilder: true\n }\n }\n\n )\n }\n\n\n}","<axp-designer-drawer-content>\n\n <ax-title>Data Sources</ax-title>\n\n <ax-content header>\n <ax-button look=\"blank\" class=\"ax-sm\" title=\"Add New Data Source\" (onClick)=\"handleAddClick()\">\n <ax-icon class=\"fa-light fa-plus\"></ax-icon>\n </ax-button>\n </ax-content>\n\n <ax-content body>\n @if(list().length)\n {\n <ul class=\"axp-designer-drawer-list\">\n @for (item of list(); track $index) {\n <li>\n <i class=\"ax-me-1 fa-solid fa-table\"></i>\n {{ item.title }}\n </li>\n }\n </ul>\n }\n @else {\n <div class=\"axp-designer-drawer-empty\">No data source found in the\n document\n </div>\n }\n </ax-content>\n\n</axp-designer-drawer-content>","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXPLayoutDesignerDrawerContentComponent } from '../../../shared/drawer-content/drawer-content.component';\nimport { AXPDesignerService } from '../../../shared/designer.service';\n\n@Component({\n selector: 'axp-designer-history',\n templateUrl: 'history.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXButtonModule,\n AXDropdownModule,\n AXPLayoutDesignerDrawerContentComponent\n ]\n})\n\nexport class AXPDesignerHistoryComponent {\n protected service = inject(AXPDesignerService);\n}","<axp-designer-drawer-content>\n\n <ax-title>History</ax-title>\n\n <ax-content header>\n <ax-button look=\"blank\" class=\"ax-sm\">\n <ax-icon class=\"fa-light fa-ellipsis\"></ax-icon>\n <ax-dropdown-panel class=\"ax-sm\">\n <ax-button-item-list>\n <ax-button-item text=\"Clear\" name=\"add\" (onClick)=\"service.clearHistory()\"> </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </ax-content>\n\n <ax-content body>\n @if(service.history().length)\n {\n <ul class=\"axp-designer-drawer-list\">\n @for (step of service.history(); track $index) {\n <li (click)=\"service.navigateTo($index)\" [class.ax-italic]=\"step.isFuture\"\n [class.ax-text-neutral-400]=\"step.isFuture\" [class.ax-state-selected]=\"step.isCurrent\">\n <i class=\"ax-me-1\" [ngClass]=\"step.icon\"></i>\n {{ step.description }}\n </li>\n }\n </ul>\n }\n @else {\n <div class=\"axp-designer-drawer-empty\">\n No changes have been made yet.\n </div>\n }\n </ax-content>\n\n</axp-designer-drawer-content>\n","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPWidgetConfig, AXPWidgetNode, AXPWidgetsCatalog } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { merge } from 'rxjs';\nimport { AXPLayoutDesignerDrawerContentComponent } from '../../../shared/drawer-content/drawer-content.component';\nimport { AXPDesignerService } from '../../../shared/designer.service';\n\n@Component({\n selector: 'axp-designer-outline',\n templateUrl: 'outline.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXPLayoutDesignerDrawerContentComponent\n ]\n})\nexport class AXPDesignerOutlineComponent {\n protected service = inject(AXPDesignerService);\n\n protected collapsedStates: Map<any, boolean> = new Map();\n\n protected root = signal(this.getTree());\n\n constructor() {\n merge(this.service.onRefresh, this.service.onUpdate).subscribe(() => {\n this.root.update((c) => ({ ...this.getTree() }));\n });\n }\n\n private getTree(): AXPWidgetNode {\n return {\n type: AXPWidgetsCatalog.document,\n children: [this.service.currentPage()],\n } as AXPWidgetNode;\n }\n\n private toggleCollapse(node: any) {\n // Toggle the current state or set to true if undefined\n this.collapsedStates.set(node, !this.collapsedStates.get(node));\n }\n\n protected isCollapsed(node: any): boolean {\n // Return the collapsed state, default is false (expanded)\n return !!this.collapsedStates.get(node);\n }\n\n protected getConfig(node: AXPWidgetNode): AXPWidgetConfig {\n return get(node, '__meta__.config') as any as AXPWidgetConfig;\n }\n\n protected handleClick(e: MouseEvent, node: AXPWidgetNode) {\n e.stopPropagation();\n this.service.select({ widget: node });\n }\n\n protected handleToggleClick(event: MouseEvent, item: any): void {\n event.stopPropagation(); // Prevents the event from bubbling up to parent elements\n this.toggleCollapse(item);\n }\n\n protected handleMouseOver(e: MouseEvent, node: AXPWidgetNode) {\n e.stopPropagation();\n this.service.focus({ widget: node });\n }\n}\n","<axp-designer-drawer-content>\n\n <ax-title>Outline</ax-title>\n\n <ax-content body>\n @if(root().children?.length)\n {\n <ul class=\"ax-space-y-1 ax-p-1 ax-text-white ax-text-sm\">\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 (click)=\"handleClick($event,item)\" (mouseover)=\"handleMouseOver($event,item)\">\n <div [class.ax-bg-neutral-700]=\"item === service.selectedNode()\"\n class=\"ax-flex ax-flex-row ax-items-center ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700 ax-py-1 ax-px-2 ax-rounded-sm ax-group\">\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 class=\"ax-truncate ax-flex-1 ax-pe-2\">{{config.title}} : {{item.name}}</span>\n <div class=\"ax-invisible group-hover:ax-visible ax-flex ax-gap-2 ax-justify-end \">\n @if(config.type=='container')\n {\n <i class=\"fa-light fa-plus hover:ax-text-primary-500\" (click)=\"service.showPicker(item)\"></i>\n }\n @if(config.name!=\"page-layout\")\n {\n <i class=\"fa-light fa-xmark hover:ax-text-danger-500\" (click)=\"service.removeWidget(item)\"></i>\n }\n </div>\n </div>\n @if(item.children?.length && !isCollapsed(item)) {\n <ul class=\"ax-space-y-1 ax-ps-3 ax-text-white ax-text-sm\">\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=\"axp-designer-drawer-empty\">No widgets found in the page\n </div>\n }\n </ax-content>\n\n</axp-designer-drawer-content>","import { AXPLayoutBuilderModule } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXPLayoutDesignerDrawerContentComponent } from '../../../shared/drawer-content/drawer-content.component';\nimport { AXPDesignerService } from '../../../shared/designer.service';\n\n@Component({\n selector: 'axp-designer-pages',\n templateUrl: 'pages.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXPLayoutBuilderModule,\n AXDecoratorModule,\n AXButtonModule,\n AXPLayoutDesignerDrawerContentComponent\n ]\n})\n\nexport class AXPDesignerPagesComponent {\n\n protected service = inject(AXPDesignerService);\n\n}","<axp-designer-drawer-content class=\"ax-text-on-lightest\">\n <ax-title>Pages</ax-title>\n <ax-content header>\n <ax-button look=\"blank\" class=\"ax-sm\" (onClick)=\"service.addNewPage()\" title=\"Add New Page\">\n <ax-icon class=\"fa-light fa-file-circle-plus\"></ax-icon>\n </ax-button>\n </ax-content>\n\n <ax-content body>\n @let count = service.document().children?.length ?? 0; @if(count) {\n <ul class=\"ax-text-sm ax-p-2 ax-rounded ax-md ax-space-y-1\">\n @for( page of service.document().children;track $index) {\n <li (click)=\"service.goToPage($index)\"\n class=\"ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out hover:ax-bg-dark ax-py-1 ax-px-2 ax-rounded-sm ax-group ax-flex ax-justify-between ax-items-center\"\n [class.ax-bg-darkest]=\"$index == service.currentPageIndex()\">\n <div>\n <i class=\"fa-light fa-file ax-me-1\"></i>\n Page {{ $index + 1 }}\n </div>\n <div class=\"ax-invisible group-hover:ax-visible ax-flex ax-gap-2\">\n @if(count>1) {\n <i class=\"fa-light fa-xmark hover:ax-text-danger-500\" (click)=\"service.removePage($index)\"></i>\n }\n <i class=\"fa-light fa-clone hover:ax-text-primary-500\" (click)=\"service.clonePage($index)\"></i>\n </div>\n </li>\n }\n </ul>\n } @else {\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">No pages found in the document</div>\n }\n </ax-content>\n</axp-designer-drawer-content>\n","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { CommonModule } from '@angular/common';\nimport { Component, HostListener, inject } from '@angular/core';\nimport { AXPDesignerService } from '../../shared/designer.service';\n\n@Component({\n imports: [CommonModule, AXDecoratorModule, AXMenuModule],\n selector: 'axp-designer-header-menu',\n templateUrl: 'header-menu.component.html'\n})\nexport class AXPDesignerHeaderMenuComponent {\n protected service = inject(AXPDesignerService);\n\n @HostListener('document:keydown', ['$event'])\n private handleKeyboardEvent(event: KeyboardEvent) {\n if (event.code == 'Delete' && this.service.canDelete()) {\n event.preventDefault();\n this.service.removeWidget();\n }\n if (event.code == 'Insert' && this.service.canInsert()) {\n event.preventDefault();\n this.service.showPicker();\n }\n if (event.shiftKey && event.target == document.body) {\n switch (event.code) {\n case 'KeyN':\n event.preventDefault();\n this.service.new();\n break;\n }\n }\n if (event.ctrlKey) {\n switch (event.code) {\n case 'KeyS':\n event.preventDefault();\n if (event.shiftKey) {\n this.service.saveAs();\n } else {\n this.service.save();\n }\n break;\n case 'KeyR':\n event.preventDefault();\n if (event.shiftKey) {\n this.service.openPreviewWindow();\n } else {\n this.service.openPreviewDialog();\n }\n break;\n }\n }\n //\n if (event.ctrlKey && event.target == document.body) {\n switch (event.code) {\n case 'KeyZ':\n if (this.service.canUndo()) {\n event.preventDefault();\n this.service.undo();\n }\n break;\n case 'KeyY':\n if (this.service.canRedo()) {\n event.preventDefault();\n this.service.redo();\n }\n break;\n case 'KeyC':\n if (this.service.canCutCopy()) {\n event.preventDefault();\n this.service.copy();\n }\n break;\n case 'KeyD':\n if (this.service.canCutCopy()) {\n event.preventDefault();\n this.service.clone();\n }\n break;\n case 'KeyX':\n if (this.service.canCutCopy()) {\n // ;\n event.preventDefault();\n this.service.cut();\n }\n break;\n case 'KeyV':\n if (this.service.canPaste()) {\n event.preventDefault();\n this.service.paste();\n }\n break;\n }\n }\n }\n}\n","<ax-menu [openOn]=\"'hover'\" [hasArrow]=\"false\">\n <ax-menu-item>\n <ax-text>File</ax-text>\n <ax-menu-item (onClick)=\"service.new()\">\n <ax-text>New</ax-text>\n <ax-suffix>\n <ax-text> Shift+N </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n @if(service.canSave())\n {\n <ng-container>\n <ax-menu-item (onClick)=\"service.save()\">\n <ax-text>Save</ax-text>\n <ax-suffix>\n <ax-text> Ctrl+S </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item (onClick)=\"service.saveAs()\">\n <ax-text>Save As...</ax-text>\n <ax-suffix>\n <ax-text> Ctrl+Shift+S </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n </ng-container>\n }\n <ax-menu-item>\n <ax-text>Export</ax-text>\n <ax-menu-item (onClick)=\"service.downloadJson()\">\n <ax-text>Download JSON</ax-text>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Import</ax-text>\n <ax-menu-item (onClick)=\"service.importJSon()\">\n <ax-text>Import JSON</ax-text>\n </ax-menu-item>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Edit</ax-text>\n <ax-menu-item [disabled]=\"!service.canUndo()\" (onClick)=\"service.undo()\">\n <ax-text>Undo</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-rotate-left\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+Z </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canRedo()\" (onClick)=\"service.redo()\">\n <ax-text>Redo</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-rotate-right\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+Y </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n <ax-menu-item [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.clone()\">\n <ax-text>Clone</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-clone\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+D </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.cut()\">\n <ax-text>Cut</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-cut\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+X </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.copy()\">\n <ax-text>Copy</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-copy\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+C </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canPaste()\" (onClick)=\"service.paste()\">\n <ax-text>Paste</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-paste\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text>Ctrl+V</ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n <ax-menu-item [disabled]=\"!service.canDelete()\" (onClick)=\"service.removeWidget()\">\n <ax-text>Delete</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-trash\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text>Del</ax-text>\n </ax-suffix>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Run</ax-text>\n <ax-menu-item (onClick)=\"service.openPreviewDialog()\">\n <ax-text>Preview</ax-text>\n <ax-prefix>\n </ax-prefix>\n <ax-suffix>\n <ax-text>Ctrl+R</ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item (onClick)=\"service.openPreviewWindow()\">\n <ax-text>Preview in seperate window</ax-text>\n <ax-prefix> </ax-prefix>\n <ax-suffix>\n <ax-text>Ctrl+Shift+R</ax-text>\n </ax-suffix>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Help</ax-text>\n <ax-menu-item>\n <ax-text>About</ax-text>\n </ax-menu-item>\n </ax-menu-item>\n</ax-menu>","import { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { CommonModule } from '@angular/common';\nimport { Component, model } from '@angular/core';\n\n@Component({\n selector: 'axp-designer-view-sizes',\n imports: [CommonModule, AXButtonGroupModule, AXDecoratorModule, AXMenuModule],\n template: `\n <ax-button-group [color]=\"'primary'\" [selection]=\"'multiple'\">\n <ax-button-group-item [selected]=\"size() == 'xl'\" [data]=\"'xl'\" (onClick)=\"size.set('xl')\">\n <ax-icon class=\"fa-light fa-desktop fa-fw \"></ax-icon>\n </ax-button-group-item>\n <ax-button-group-item [selected]=\"size() == 'lg'\" [data]=\"'lg'\" (onClick)=\"size.set('lg')\">\n <ax-icon class=\"fa-light fa-tablet fa-fw \"></ax-icon>\n </ax-button-group-item>\n <ax-button-group-item [selected]=\"size() == 'sm'\" [data]=\"'sm'\" (onClick)=\"size.set('sm')\">\n <ax-icon class=\"fa-light fa-mobile fa-fw \"></ax-icon>\n </ax-button-group-item>\n </ax-button-group>\n `,\n})\nexport class AXPDesignerViewSizeToolbarComponent {\n public size = model<string>('xl');\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXPLayoutBuilderModule, AXPWidgetConfig } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, HostBinding, inject, input, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { AXPWidgetPropertyViewerComponent } from '../property-viewer/widget-property-viewer.component';\nimport { AXPDesignerBoardComponent } from './components/board/board.component';\nimport { AXPDesignerBreadcrumbsComponent } from './components/breadcrumbs/breadcrumbs.component';\nimport { AXPDesignerDataSourcesComponent } from './components/drawers/data-sources/data-sources.component';\nimport { AXPDesignerHistoryComponent } from './components/drawers/history/history.component';\nimport { AXPDesignerOutlineComponent } from './components/drawers/outline/outline.component';\nimport { AXPDesignerPagesComponent } from './components/drawers/pages/pages.component';\nimport { AXPDesignerHeaderMenuComponent } from './components/header-menu/header-menu.component';\nimport { AXPDesignerViewSizeToolbarComponent } from './components/size-mode/view-size-toolbar.component';\nimport { AXPDesignerService } from './shared/designer.service';\nimport { AXPTemplateLoadingStrategy } from './shared/designer.types';\n\n@Component({\n selector: 'axp-layout-designer',\n templateUrl: './designer.component.html',\n styleUrl: './designer.component.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n AXPLayoutBuilderModule,\n AXPDesignerBoardComponent,\n AXPWidgetPropertyViewerComponent,\n AXPDesignerBreadcrumbsComponent,\n AXPDesignerOutlineComponent,\n AXPDesignerHeaderMenuComponent,\n AXPDesignerHistoryComponent,\n AXPDesignerDataSourcesComponent,\n AXPDesignerPagesComponent,\n AXPDesignerViewSizeToolbarComponent,\n AXTabsModule,\n AXButtonModule,\n AXDrawerModule,\n AXDecoratorModule,\n AXMenuModule,\n AXButtonGroupModule,\n AXDropdownModule,\n AXDropdownButtonModule,\n ],\n providers: [AXPDesignerService]\n})\nexport class AXPLayoutDesignerComponent {\n protected service = inject(AXPDesignerService);\n\n id = input<string | null>();\n strategy = input<string | null>();\n\n @ViewChild(AXPWidgetPropertyViewerComponent, { static: true })\n private propertyViewer: AXPWidgetPropertyViewerComponent;\n\n protected nodeConfig = computed<AXPWidgetConfig | null>(() =>\n this.service.selectedNode() ? (get(this.service.selectedNode(), '__meta__.config') as any as AXPWidgetConfig) : null\n );\n\n constructor() {\n this.service.onUpdate.subscribe((e) => {\n this.propertyViewer.update(e.values);\n });\n }\n\n ngOnInit() {\n if (this.id()) {\n this.service.loadById(this.id()!, { strategy: (this.strategy() ?? AXPTemplateLoadingStrategy.Connector) as AXPTemplateLoadingStrategy });\n }\n }\n\n @HostBinding('style')\n private get __styles(): string {\n const styles: any = {};\n styles[`direction`] = 'ltr';\n return styles;\n }\n}\n","<ax-drawer-container class=\"ax-h-full ax-w-full ax-flex ax-relative ax-overflow-hidden\">\n <ax-content class=\"ax-contents\">\n <!-- Toolbar Side -->\n <div class=\"ax-min-w-10 ax-bg-lightest ax-border-e ax-sm 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-light.svg\" 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 look=\"blank\">\n <ax-icon class=\"fa-solid fa-puzzle ax-text-sm\"> </ax-icon>\n </ax-button> -->\n <ax-button look=\"blank\" (onClick)=\"pages.toggle()\" title=\"Pages\">\n <ax-icon class=\"fa-solid fa-page ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button look=\"blank\" (onClick)=\"datasources.toggle()\" title=\"Data Sources\">\n <ax-icon class=\"fa-solid fa-database ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button look=\"blank\" (onClick)=\"outline.toggle()\" title=\"Outline\">\n <ax-icon class=\"fa-solid fa-list-tree ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button look=\"blank\" (onClick)=\"history.toggle()\" title=\"History\">\n <ax-icon class=\"fa-solid fa-clock-rotate-left ax-text-sm\"> </ax-icon>\n </ax-button>\n <!-- <ax-button look=\"blank\" 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-h-10 ax-bg-lightest ax-border-b ax-flex ax-justify-between ax-px-2 ax-dark\">\n <div class=\"ax-flex ax-flex-1 ax-items-center ax-text-white ax-justify-start\">\n <axp-designer-header-menu></axp-designer-header-menu>\n </div>\n <div class=\"ax-flex ax-flex-1 ax-flex-row ax-gap-2 ax-sm ax-items-center ax-justify-center\">\n <axp-designer-view-sizes [(size)]=\"service.size\"></axp-designer-view-sizes>\n </div>\n <div class=\"ax-flex ax-flex-1 ax-flex-row ax-gap-2 ax-sm ax-items-center ax-justify-end\">\n <ax-dropdown-button\n mode=\"split\"\n look=\"solid\"\n text=\"Preview\"\n class=\"ax-sm\"\n (onClick)=\"service.openPreviewDialog()\"\n >\n <ax-button-item-list>\n <ax-button-item text=\"Open in new window\" (onClick)=\"service.openPreviewWindow()\">\n <ax-prefix>\n <ax-icon icon=\"fa-regular fa-window-restore\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-button>\n </div>\n </div>\n <!-- Board -->\n <ax-drawer-container class=\"ax-w-full ax-flex-1\">\n <!-- Pages -->\n <ax-drawer #pages location=\"start\" mode=\"push\" class=\"ax-dark ax-bg-lightest\">\n <ax-content>\n <axp-designer-pages></axp-designer-pages>\n </ax-content>\n </ax-drawer>\n <!-- Datasources -->\n <ax-drawer #datasources location=\"start\" mode=\"push\" class=\"ax-dark ax-bg-lightest\">\n <ax-content>\n <axp-designer-data-sources></axp-designer-data-sources>\n </ax-content>\n </ax-drawer>\n <!-- Outline Pnael -->\n <ax-drawer #outline location=\"start\" mode=\"push\" class=\"ax-dark ax-bg-lightest\">\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\" class=\"ax-dark ax-bg-lightest\">\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 ax-bg-lighter ax-flex ax-justify-center ax-p-10\">\n <axp-designer-board class=\"ax-rounded-lg ax-bg-lightest ax-shadow-md\"> </axp-designer-board>\n </ax-content>\n </ax-drawer-container>\n <!-- Footer -->\n <div class=\"ax-h-10 ax-bg-lightest ax-border-t ax-flex ax-items-center ax-dark\">\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-dark axp-designer-prop-side\" 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-px-4 ax-border-b ax-h-10\">\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\n [widget]=\"service.selectedNode()!\"\n style=\"--ax-sys-size-base: 1.875rem\"\n (onChanged)=\"service.update({ values: $event.values, mode: $event.mode })\"\n class=\"ax-w-1/4\"\n >\n </axp-widget-property-viewer>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>\n","import { AXPLayoutBuilderModule, AXPLayoutContextChangeEvent, AXPWidgetDataSource, AXPWidgetDataSourceProviderService, AXPWidgetNode, AXPWidgetsCatalog } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { AXPDesignerConnector, AXPDesignerMessageKeys, AXPDesignerPreviewMessage } from '../designer';\nimport { AXPBroadcastEventService } from '@acorex/platform/core';\nimport { AXUnsubscriber } from '@acorex/core/utils';\n\n@Component({\n selector: 'axp-layout-builder-viewer',\n template: `\n <axp-widgets-container [context]=\"context\" (onContextChanged)=\"handleContextChanged($event)\">\n <ng-container axp-widget-renderer [node]=\"currentPage()\" [mode]=\"'edit'\"></ng-container>\n </axp-widgets-container>\n `,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, AXPLayoutBuilderModule],\n providers: [AXUnsubscriber],\n})\nexport class AXPLayoutDesignerPreviewViewerComponent {\n protected context: any = {};\n\n protected readonly document = signal({ type: AXPWidgetsCatalog.document } as AXPWidgetNode);\n protected readonly currentPageIndex = signal(0);\n protected connector = inject(AXPDesignerConnector);\n protected dataSourceProvider = inject(AXPWidgetDataSourceProviderService);\n protected eventService = inject(AXPBroadcastEventService);\n protected unsubscriber = inject(AXUnsubscriber);\n\n protected readonly currentPage = computed(() => {\n return (\n this.document().children?.[this.currentPageIndex()] ?? ({ type: AXPWidgetsCatalog.pageLayout } as AXPWidgetNode)\n );\n });\n\n\n constructor() {\n this.eventService\n .listen<AXPDesignerPreviewMessage>(AXPDesignerMessageKeys.Preview)\n .pipe(this.unsubscriber.takeUntilDestroy)\n .subscribe((event) => {\n this.document.set(event.data.document);\n })\n //\n if (document.body.parentElement) {\n document.body.parentElement.classList.remove('ax-dark');\n document.body.parentElement.style.backgroundColor = 'unset';\n document.body.style.backgroundColor = 'unset';\n }\n }\n\n ngAfterViewInit() {\n this.eventService.publish(AXPDesignerMessageKeys.Loaded)\n }\n\n protected handleContextChanged(e: AXPLayoutContextChangeEvent) {\n this.context = e.data;\n this.eventService.publish(AXPDesignerMessageKeys.ContextChanged, this.context)\n }\n\n protected functions = {\n getDataSourceNames: this.getDataSources.bind(this),\n };\n\n private async getDataSources(name: string): Promise<AXPWidgetDataSource | undefined> {\n return await this.dataSourceProvider.get(name);\n }\n\n\n ngOnDestroy(): void {\n this.eventService.unsubscribe(AXPDesignerMessageKeys.Preview);\n\n }\n}\n","import { AXSafePipe } from '@acorex/core/pipes';\nimport { Component, computed, HostBinding, input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'axp-layout-preview-frame',\n template: `\n <div\n class=\"ax-flex-1 lg:ax-rounded-lg ax-bg-white lg:ax-shadow-md ax-p-2\"\n [style.width]=\"width()\"\n style=\"max-width: 1280px;\"\n >\n <iframe\n class=\"ax-w-full ax-h-full ax-bg-transparent\"\n [frameBorder]=\"0\"\n [src]=\"'/forms/viewer' | safe : 'resourceUrl'\"\n >\n </iframe>\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n imports: [AXSafePipe]\n})\nexport class AXPLayoutDesignerPreviewFrameComponent {\n public size = input<string>('xl');\n\n protected width = computed(() => {\n ;\n switch (this.size()) {\n case 'sm':\n return '340px';\n case 'md':\n case 'lg':\n return '768px';\n default:\n return '100%';\n }\n });\n\n @HostBinding('class')\n private get __class(): string {\n const cls: any = {};\n cls['ax-flex'] = true;\n cls['ax-flex-col'] = true;\n cls['ax-h-full'] = true;\n cls['ax-W-full'] = true;\n cls['lg:ax-p-20'] = true;\n cls['ax-bg-[#f3f3fe]'] = true;\n cls['ax-w-full'] = true;\n cls['ax-items-center'] = true;\n cls['ax-overflow-auto'] = true;\n return cls;\n }\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXJsonViewerModule } from '@acorex/components/json-viewer';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXPClipBoardService, AXPSettingService } from '@acorex/platform/common';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { CommonModule } from '@angular/common';\nimport { Component, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { AXPDesignerViewSizeToolbarComponent } from '../designer/components/size-mode/view-size-toolbar.component';\nimport { AXPLayoutDesignerPreviewFrameComponent } from './preview-frame.component';\nimport { AXPBroadcastEventService } from '@acorex/platform/core';\nimport { AXPDesignerMessageKeys } from '../designer';\n\n@Component({\n selector: 'axp-layout-preview',\n templateUrl: './preview.component.html',\n styleUrls: ['./preview.component.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n AXButtonModule,\n AXButtonGroupModule,\n AXDrawerModule,\n AXDecoratorModule,\n AXJsonViewerModule,\n AXPLayoutDesignerPreviewFrameComponent,\n AXPDesignerViewSizeToolbarComponent,\n ]\n})\nexport class AXPLayoutDesignerPreviewComponent extends AXBasePageComponent {\n protected clipboard = inject(AXPClipBoardService);\n protected settings = inject(AXPSettingService);\n protected eventService = inject(AXPBroadcastEventService);\n\n protected initialSize: string = 'xl';\n protected isDialogWindow: boolean = false;\n\n private jsonSettingsKey = 'forms:preview:json';\n protected jsonViewCollapsed = signal(true);\n\n protected size = signal<string>(this.initialSize);\n\n protected context = signal<any>({});\n\n constructor() {\n super();\n //\n this.eventService.listen(AXPDesignerMessageKeys.ContextChanged).subscribe((event) => {\n this.context.set(event.data);\n });\n }\n\n protected override async ngOnInit() {\n this.size.set(this.initialSize);\n const settingValue = await this.settings.get<boolean>(this.jsonSettingsKey);\n this.jsonViewCollapsed.set(!settingValue);\n }\n\n protected handleCloseButton() {\n if (this.isDialogWindow) {\n this.close();\n } else {\n window.opener.focus();\n window.close();\n }\n }\n\n protected handlePreviewWindow() {\n this.eventService.publish(AXPDesignerMessageKeys.PreviewWindow)\n this.close();\n }\n\n protected handleCopyJson() {\n this.clipboard.copy('Json Data', JSON.stringify(this.context()));\n }\n\n protected async handleCollapsedChange(value: boolean) {\n await this.settings.scope(AXPPlatformScope.User).set<boolean>(this.jsonSettingsKey, !value);\n }\n}\n","<ax-drawer-container class=\"ax-dark ax-h-full ax-w-full ax-flex ax-relative ax-overflow-hidden\">\n <ax-content>\n <div class=\"ax-dark ax-flex ax-flex-col ax-h-full ax-relative ax-bg-default\">\n <div class=\"ax-flex ax-items-center ax-justify-between ax-h-12 ax-bg-lightest ax-shadow ax-sm ax-px-2\">\n <div class=\"ax-flex ax-flex-1 ax-w-16 ax-justify-start\">\n <ax-button look=\"blank\" text=\"Back to Designer\" (onClick)=\"handleCloseButton()\">\n <ax-prefix>\n <ax-icon class=\"fa-regular fa-chevron-left\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n <div class=\"ax-flex ax-flex-1 ax-flex-row ax-gap-2 ax-sm ax-items-center ax-justify-center\">\n <axp-designer-view-sizes [(size)]=\"size\"></axp-designer-view-sizes>\n </div>\n <div class=\"ax-flex ax-flex-1 ax-w-16 ax-justify-end\">\n @if(isDialogWindow) {\n <ax-button look=\"blank\" [title]=\"'Preview in to seperate window'\" (onClick)=\"handlePreviewWindow()\">\n <ax-prefix>\n <ax-icon class=\"fa-regular fa-window-restore\"></ax-icon>\n </ax-prefix>\n </ax-button>\n }@else { }\n <ax-button look=\"blank\" (onClick)=\"jsonView.toggle()\">\n <ax-prefix>\n <ax-icon class=\"fa-regular fa-list-tree\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </div>\n\n <div class=\"ax-bg-[#f3f3fe] ax-flex ax-flex-1 ax-justify-center ax-overflow-auto\">\n <axp-layout-preview-frame [size]=\"size()\"></axp-layout-preview-frame>\n </div>\n </div>\n </ax-content>\n <!-- [collapsed]=\"jsonViewCollapsed()\"\n (collapsedChange)=\"handleCollapsedChange($event)\" -->\n <ax-drawer class=\"ax-w-1/3 ax-border-s\" location=\"end\" mode=\"push\" #jsonView>\n <ax-content>\n <div class=\"ax-dark ax-flex ax-flex-col ax-h-full ax-relative ax-bg-default\">\n <div class=\"ax-flex ax-items-center ax-justify-between ax-h-12 ax-bg-lightest ax-shadow ax-sm ax-px-2\">\n <div class=\"ax-flex ax-flex-1 ax-w-16 ax-justify-start\">\n <span class=\"ax-text-surface-fore ax-font-semibold\">Form Data</span>\n </div>\n <div class=\"ax-flex ax-flex-1 ax-flex-row ax-gap-2 ax-sm ax-items-center ax-justify-center\"></div>\n <div class=\"ax-flex ax-flex-1 ax-w-16 ax-justify-end\">\n <ax-button look=\"blank\" (onClick)=\"handleCopyJson()\">\n <ax-prefix>\n <ax-icon class=\"fa-regular fa-copy\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </div>\n <div class=\"ax-px-6 ax-text-white\">\n <ax-json-viewer [json]=\"context()\"></ax-json-viewer>\n </div>\n </div>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i5","i3","i4","merge"],"mappings":"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"}
|