{"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-tab-context.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/flex-drawer/flex-drawer.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/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/shared/layout-designer-header-menu.hooks.ts","../../../../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":["\nimport type { AXPWidgetNode } from '@acorex/platform/contracts';\nimport { computed, Injectable, signal } from \"@angular/core\";\nimport { cloneDeep, merge } from \"lodash-es\";\n\n// Command interface\nexport interface Command {\n    execute(): void;\n    undo(): void;\n    description(): string;\n    icon(): string;\n    getExecutionSelection(): AXPWidgetNode;  // Node to select after execution\n    getUndoSelection(): AXPWidgetNode;       // Node to select after undo\n}\n\n// AddWidgetCommand\nexport class AddWidgetCommand implements Command {\n    private widget: AXPWidgetNode;\n    private parent: AXPWidgetNode;\n    private previousSelection: AXPWidgetNode;\n\n    constructor(widget: AXPWidgetNode, parent: AXPWidgetNode, previousSelection: AXPWidgetNode) {\n        this.widget = widget;\n        this.parent = parent;\n        this.previousSelection = previousSelection;\n    }\n\n    execute() {\n        this.parent.children = this.parent.children || [];\n        this.parent.children.push(this.widget);\n    }\n\n    undo() {\n        this.parent.children = this.parent.children || [];\n        const index = this.parent.children.indexOf(this.widget);\n        if (index > -1) {\n            this.parent.children.splice(index, 1);\n        }\n    }\n\n    description() {\n        return `Added widget ${this.widget.name}`;\n    }\n\n    icon() {\n        return `fa-solid fa-square-plus`;\n    }\n\n    getExecutionSelection() {\n        return this.widget;  // After executing, select the newly added widget\n    }\n\n    getUndoSelection() {\n        return this.previousSelection;  // After undo, select the previously selected widget\n    }\n}\n\n\nexport class RemoveWidgetCommand implements Command {\n    private widget: AXPWidgetNode;\n    private parent: AXPWidgetNode;\n    private previousSelection: AXPWidgetNode;\n    private index: number;\n\n    constructor(widget: AXPWidgetNode, parent: AXPWidgetNode, previousSelection: AXPWidgetNode) {\n        this.widget = widget;\n        this.parent = parent;\n        this.previousSelection = previousSelection;\n        parent.children = parent.children || [];\n        this.index = parent.children.indexOf(widget);  // Capture the index for undo purposes\n    }\n\n    execute() {\n        this.parent.children = this.parent.children || [];\n        this.index = this.parent.children.indexOf(this.widget);  // Re-assert the index in case it has changed\n        this.parent.children.splice(this.index, 1);\n    }\n\n    undo() {\n        this.parent.children = this.parent.children || [];\n        this.parent.children.splice(this.index, 0, this.widget);  // Reinsert at the original index\n    }\n\n    description() {\n        return `Removed widget ${this.widget.name}`;\n    }\n\n    icon() {\n        return `fa-solid fa-square-minus`;\n    }\n\n    getExecutionSelection() {\n        return this.previousSelection;  // Typically the parent or a nearby sibling could be focused\n    }\n\n    getUndoSelection() {\n        return this.widget;  // Select the widget itself when the operation is undone\n    }\n}\n\nexport class UpdateWidgetCommand implements Command {\n    private widget: AXPWidgetNode;\n    private previousState: AXPWidgetNode;\n    private newState: AXPWidgetNode;\n    private previousSelection: AXPWidgetNode;\n\n    constructor(widget: AXPWidgetNode, values: Partial<AXPWidgetNode>, previousSelection: AXPWidgetNode) {\n        this.widget = widget;\n        this.newState = merge(cloneDeep(widget), values);\n        this.previousSelection = previousSelection;\n        this.previousState = cloneDeep(widget);\n    }\n\n    execute() {\n        merge(this.widget, this.newState)\n    }\n\n    undo() {\n        this.deepPruneAndRestore(this.widget, this.previousState);\n    }\n\n    description() {\n        return `Updated widget ${this.widget.name}`;\n    }\n\n    icon() {\n        return `fa-solid fa-pen`;\n    }\n\n    getExecutionSelection() {\n        return this.widget;  // Focus the widget after it's updated\n    }\n\n    getUndoSelection() {\n        return this.previousSelection;  // Restore the focus to where it was before the update\n    }\n\n    private deepPruneAndRestore(current: any, original: any) {\n        Object.keys(current).forEach(key => {\n            if (original.hasOwnProperty(key)) {\n                if (typeof current[key] === 'object' && current[key] !== null && !(current[key] instanceof Array)) {\n                    this.deepPruneAndRestore(current[key], original[key]);\n                }\n            } else {\n                delete current[key];  // Remove properties not present in original\n            }\n        });\n\n        // Restore the original properties\n        merge(current, original);\n    }\n}\n\n\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class CommandManager {\n    private undoStack = signal<Command[]>([]);\n    private currentIndex = signal<number>(-1);\n    public readonly selectedNode = signal<AXPWidgetNode | null>(null);\n\n    public canUndo = computed(() => this.currentIndex() >= 0)\n    public canRedo = computed(() => this.currentIndex() < this.undoStack().length - 1)\n\n    executeCommand(command: Command) {\n        // Check if the currentIndex is not at the end of the undoStack\n        if (this.currentIndex() !== this.undoStack().length - 1) {\n            // Remove all commands beyond the current index to discard the \"future\" commands\n            const newUndoStack = this.undoStack().slice(0, this.currentIndex() + 1);\n            this.undoStack.set(newUndoStack);\n        }\n\n        command.execute();\n        this.undoStack.set([...this.undoStack(), command]); // Add the new command to the stack\n        this.currentIndex.set(this.undoStack().length - 1); // Update currentIndex to the end of the stack\n        this.selectedNode.set(command.getExecutionSelection()); // Update the selected node\n    }\n\n    undo() {\n        if (this.currentIndex() >= 0) {\n            const command = this.undoStack()[this.currentIndex()];\n            command.undo();\n            this.currentIndex.set(this.currentIndex() - 1);\n            if (this.currentIndex() >= 0) {\n                this.selectedNode.set(this.undoStack()[this.currentIndex()].getUndoSelection());\n            } else {\n                this.selectedNode.set(null); // No selection if all commands are undone\n            }\n        }\n    }\n\n    redo() {\n        if (this.currentIndex() < this.undoStack().length - 1) {\n            this.currentIndex.set(this.currentIndex() + 1);\n            const command = this.undoStack()[this.currentIndex()];\n            command.execute();\n            this.selectedNode.set(command.getExecutionSelection());\n        }\n    }\n\n    goToCommand(index: number) {\n        if (index < 0 || index >= this.undoStack().length || index === this.currentIndex()) {\n            return;  // Out of bounds or already at the desired index\n        }\n\n        if (index > this.currentIndex()) {\n            // Need to redo until reaching the desired index\n            while (this.currentIndex() < index) {\n                this.redo();\n            }\n        } else {\n            // Need to undo until reaching the desired index\n            while (this.currentIndex() > index) {\n                this.undo();\n            }\n        }\n\n        // Optionally update any UI components or state here\n        this.selectedNode.set(this.undoStack()[this.currentIndex()].getExecutionSelection());\n    }\n\n    public history = computed(() => this.undoStack().map((cmd, index) => (\n        {\n            description: cmd.description(),\n            icon: cmd.icon(),\n            isPast: this.currentIndex() > index,\n            isFuture: this.currentIndex() < index,\n            isCurrent: this.currentIndex() == index\n        }\n    )))\n\n\n    public clear() {\n        this.undoStack.set([]);\n        this.currentIndex.set(-1);\n    }\n}","import { Injectable } from \"@angular/core\";\n\n\nexport interface AXPDesignerContent {\n    json: string,\n    html?: string\n}\n\n@Injectable()\nexport abstract class AXPDesignerConnector<T = string> {\n\n    public abstract save(id: string, content: AXPDesignerContent): Promise<boolean>;\n\n    public abstract saveAs(content: AXPDesignerContent): Promise<boolean>;\n\n    public abstract load(id: T): Promise<string | null>;\n}","import { AXMenuItem } from '@acorex/components/menu';\nimport { assign, cloneDeep } from 'lodash-es';\n\nexport const AXP_DESIGNER_COPY_MENU: AXMenuItem = {\n  text: 'Copy',\n  name: 'copy',\n  icon: 'fa-solid fa-copy',\n  suffix: {\n    text: 'Ctrl+C',\n  },\n};\n\nexport const AXP_DESIGNER_CLONE_MENU: AXMenuItem = {\n  text: 'Clone',\n  name: 'clone',\n  icon: 'fa-solid fa-clone',\n  suffix: {\n    text: 'Ctrl+D',\n  },\n};\n\nexport const AXP_DESIGNER_CUT_MENU: AXMenuItem = {\n  text: 'Cut',\n  name: 'cut',\n  icon: 'fa-solid fa-cut',\n  suffix: {\n    text: 'Ctrl+X',\n  },\n};\n\nexport const AXP_DESIGNER_PASTE_MENU: AXMenuItem = {\n  text: 'Paste',\n  name: 'paste',\n  icon: 'fa-solid fa-paste',\n  suffix: {\n    text: 'Ctrl+V',\n  },\n};\n\nexport const AXP_DESIGNER_ADD_WIDGET_MENU: AXMenuItem = {\n  text: 'Add Widget',\n  name: 'add-widget',\n  icon: 'fa-solid fa-plus',\n};\n\nexport const AXP_DESIGNER_SELECT_WIDGET_MENU: AXMenuItem = {\n  text: 'Select',\n  name: 'select',\n  break: true,\n  icon: 'fa-solid fa-arrow-pointer',\n}\n\nexport const AXP_DESIGNER_DELETE_WIDGET_MENU: AXMenuItem = {\n  text: 'Delete',\n  name: 'remove-widget',\n  icon: 'fa-solid fa-trash',\n};\n\nexport const AXP_DESIGNER_SAVE_AS_WIDGET_MENU: AXMenuItem = {\n  text: 'Save As...',\n  name: 'save-as',\n  icon: 'fa-solid fa-save',\n};\n\n\nexport function cloneWidgetMenu(item: AXMenuItem, options?: Partial<AXMenuItem>): AXMenuItem {\n  return assign(cloneDeep(item), options);\n}\n","import type { AXPWidgetNode } from '@acorex/platform/contracts';\nimport { AXMenuItem } from \"@acorex/components/menu\";\n\n\nexport type AXPDesignerMode =\n  | { id: 'designer'; title: 'Designer' }\n  | { id: 'view'; title: 'View' }\n  | { id: 'edit'; title: 'Edit' };\n\nexport class AXPDesignerModes {\n  static readonly View: AXPDesignerMode = { id: 'view', title: 'View' };\n  static readonly Design: AXPDesignerMode = { id: 'designer', title: 'Designer' };\n  static readonly Edit: AXPDesignerMode = { id: 'edit', title: 'Edit' };\n}\n\n\nexport enum AXPTemplateLoadingStrategy {\n  Connector = \"Connector\",\n  Broadcast = \"Broadcast\",\n}\n\n\n\nexport interface AXPDesignerWidgetComponent {\n  onContextMenu(context: { items: AXMenuItem[] }): void\n  executeCommand(command: { name: string, data?: any, handled: boolean }): Promise<void>\n}\n\nexport interface AXPDesignerPreviewMessage {\n  id: string,\n  document: AXPWidgetNode\n}\n\nexport interface AXPDesignerSaveFormMessage {\n  id: string,\n  success: boolean,\n  content?: string\n}\n\nexport const AXPDesignerMessageKeys =\n{\n  Preview: \"designer-preview\",\n  Loaded: \"designer-preview-loaded\",\n  ContextChanged: \"designer-preview-context-changed\",\n  PreviewWindow: \"designer-open-preview-window\",\n  RequestFormContent: \"designer-request-form-content\",\n  ResponseFormContent: \"designer-response-form-content\",\n  SaveForm: 'designer-save-form-content',\n  FormSaved: 'designer-form-saved-content',\n}","/**\n * Suffixes for `forms:widgets:picker:last-tab:{id}` user settings keys.\n * Use one id per distinct widget-picker host (different tab strips / widget sets).\n */\nexport const AXP_WIDGET_PICKER_TAB_CONTEXT = {\n  layoutDesignerFormElements: 'layout-designer-form-elements',\n  dashboardHome: 'dashboard-home',\n} as const;\n","import { AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core-contracts';\nimport type { AXPWidgetNode } from '@acorex/platform/contracts';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPWidgetRegistryService } from '@acorex/platform/layout/widget-core';\nimport { inject, Injectable } from '@angular/core';\nimport { sortBy } from 'lodash-es';\n\nexport interface AXPWidgetPickerShowOptions {\n  groups: AXPWidgetGroupEnum[];\n  /** User-scoped last tab; unique per picker host (use `AXP_WIDGET_PICKER_TAB_CONTEXT`). */\n  tabPersistenceContext: string;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPWidgetPickerService {\n  private popupService = inject(AXPopupService);\n  private widgetRegistryService = inject(AXPWidgetRegistryService);\n  private translationService = inject(AXTranslationService);\n\n  async showPicker(options: AXPWidgetPickerShowOptions): Promise<AXPWidgetNode[]> {\n    const com = await import('./widget-picker.component').then((c) => c.AXPDesignerWidgetPickerComponent);\n    const widgets = this.widgetRegistryService.all();\n    const filteredWidgets = widgets.filter((c) => options.groups.some((d) => c.groups?.includes(d)));\n    //\n    const result = await this.popupService.open(com, {\n      title: await this.translationService.translateAsync(\n        '@form-template-management:designer.components.widget-picker.title',\n      ),\n      size: 'md',\n      closeButton: true,\n      data: {\n        widgets: sortBy(filteredWidgets, (c) => c.title),\n        tabPersistenceContext: options.tabPersistenceContext,\n      },\n    });\n    //\n    const selectedWidgets = (result.data?.widgets ?? []) as AXPWidgetConfig[];\n\n    return selectedWidgets.map((c) => ({\n      type: c.name as any,\n      options: c.options,\n      title: c.title,\n      meta: c.meta,\n    }));\n  }\n}\n","import { AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core-contracts';\nimport { AXLoadingDialogButtonItem, AXLoadingDialogService } from '@acorex/components/loading-dialog';\nimport { AXMenuItem } from '@acorex/components/menu';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXFileService } from '@acorex/core/file';\nimport { type AXPWidgetNode, AXPWidgetsCatalog } from '@acorex/platform/contracts';\nimport { AXPBaseWidgetComponent, AXPValueWidgetComponent, AXPWidgetRegistryService } from '@acorex/platform/layout/widget-core';\nimport { computed, effect, inject, Injectable, signal } from '@angular/core';\nimport { cloneDeep, get, isEmpty, isNil, isNull, merge, result, set, sortBy } from 'lodash-es';\nimport { Subject } from 'rxjs';\nimport { AddWidgetCommand, CommandManager, RemoveWidgetCommand, UpdateWidgetCommand } from './command';\nimport { AXPDesignerConnector } from './designer-connector.service';\nimport {\n  AXP_DESIGNER_ADD_WIDGET_MENU,\n  AXP_DESIGNER_CLONE_MENU,\n  AXP_DESIGNER_COPY_MENU,\n  AXP_DESIGNER_CUT_MENU,\n  AXP_DESIGNER_DELETE_WIDGET_MENU as AXP_DESIGNER_DELETE_WIDGET_MENU,\n  AXP_DESIGNER_PASTE_MENU,\n  AXP_DESIGNER_SAVE_AS_WIDGET_MENU,\n  AXP_DESIGNER_SELECT_WIDGET_MENU,\n  cloneWidgetMenu,\n} from './generic-commands.types';\nimport { AXPDesignerMessageKeys, AXPDesignerPreviewMessage, AXPDesignerSaveFormMessage, AXPDesignerWidgetComponent, AXPTemplateLoadingStrategy } from './designer.types';\nimport { AXPBroadcastEventService } from '@acorex/platform/core';\nimport { AXP_WIDGET_PICKER_TAB_CONTEXT } from '../components/widget-picker/widget-picker-tab-context';\nimport { AXPWidgetPickerService } from '../components/widget-picker/widget-picker.service';\nexport type AXPDesignerPreviewSize = 'sm' | 'md' | 'lg' | 'xl' | 'xxl';\n\nexport interface AXPDesignerFocusCommand {\n  widget: AXPWidgetNode | null;\n}\n\nexport interface AXPDesignerUpdateCommand {\n  values: any;\n  widget?: AXPWidgetNode | null;\n  mode: 'init' | 'update';\n}\nexport interface AXPDesignerUpdateEvent {\n  values: any;\n  widget: AXPWidgetNode;\n}\n\nexport interface AXPDesignerSelectCommand {\n  widget: AXPWidgetNode;\n}\n\nexport interface AXPDesignerRegisterCommand {\n  id: number;\n  widget: AXPWidgetNode;\n  config: AXPWidgetConfig;\n  instance: AXPBaseWidgetComponent;\n}\n\nexport interface AXPDesignerSelectEvent {\n  widget: AXPWidgetNode;\n}\n\nexport interface AXPDesignerRefreshCommand {\n  widget: AXPWidgetNode;\n}\nexport interface AXPDesignerRefreshEvent {\n  widget: AXPWidgetNode;\n}\n\nexport interface AXPDesignerAddNodeCommand {\n  widget: AXPWidgetNode;\n}\nexport interface AXPDesignerAddNodeEvent {\n  widget: AXPWidgetNode;\n}\n\nexport interface AXPDesignerFocusEvent {\n  widget: AXPWidgetNode | null;\n}\n\n@Injectable()\nexport class AXPDesignerService {\n  private popupService = inject(AXPopupService);\n  private toastService = inject(AXToastService);\n  private fileService = inject(AXFileService);\n  private loadingService = inject(AXLoadingDialogService);\n  private widgetRegisteryService = inject(AXPWidgetRegistryService);\n  private connector = inject(AXPDesignerConnector);\n  private eventService = inject(AXPBroadcastEventService);\n  private widgetPickerService = inject(AXPWidgetPickerService);\n\n  public readonly document = signal(this.createDoc());\n  public readonly currentPageIndex = signal(0);\n\n  public readonly currentPage = signal(this.document().children?.[0] as AXPWidgetNode);\n\n  private commandManager = inject(CommandManager);\n\n  private clipboard = signal<AXPWidgetNode | null>(null);\n\n  //\n  public canCutCopy = computed(() => this.can(this.selectedNode()).copyOrCut);\n  public canDelete = computed(() => this.can(this.selectedNode()).delete);\n  public canInsert = computed(() => this.can(this.selectedNode()).insert);\n  public canPaste = computed(() => this.can(this.selectedNode()).paste);\n  //\n  public readonly history = computed(() => this.commandManager.history());\n  public readonly canUndo = computed(() => this.commandManager.canUndo());\n  public readonly canRedo = computed(() => this.commandManager.canRedo());\n  //\n  public readonly canSave = computed(() => this.templateId() != null);\n\n  public readonly unsavedChanges = signal(false);\n\n  public breadcrumbs = computed<AXPWidgetNode[]>(() => {\n    return this.selectedNode() ? this.findBreadcrumbs(this.currentPage(), this.selectedNode()) ?? [] : [];\n  });\n\n  public selectedNode = signal<AXPWidgetNode | null>(null);\n\n  public selectedNodeConfig = computed(() => get(this.selectedNode(), '__meta__.config') as any as AXPWidgetConfig);\n\n  private _focusedNode: AXPWidgetNode | null = null;\n  public focusedNode = () => this._focusedNode;\n\n  public readonly size = signal<AXPDesignerPreviewSize>('xl');\n\n  public readonly onSelected = new Subject<AXPDesignerSelectEvent>();\n  public readonly onRefresh = new Subject<AXPDesignerRefreshEvent>();\n  public readonly onUpdate = new Subject<AXPDesignerUpdateEvent>();\n  public readonly onFocused = new Subject<AXPDesignerFocusEvent>();\n\n  public readonly templateId = signal<string | null>(null);\n\n  private loadingStrategy = signal<AXPTemplateLoadingStrategy>(AXPTemplateLoadingStrategy.Connector);\n\n  #ef = effect(\n    () => {\n      this.refresh({ widget: this.currentPage() });\n    }\n  );\n\n  constructor() {\n    this.eventService.listen(AXPDesignerMessageKeys.Loaded).subscribe(() => {\n      this.updatePreview();\n    })\n    //\n    this.eventService.listen(AXPDesignerMessageKeys.PreviewWindow).subscribe(() => {\n      this.openPreviewWindow();\n    });\n    //\n    // window.addEventListener(\"beforeunload\", (event) => {\n    //   console.log(\"Window is before closing...\");\n    //   // event.preventDefault();\n    //   // event.returnValue = 'abc'; // Some browsers require this to show the prompt.\n    // });\n    window.addEventListener(\"unload\", async () => {\n      console.log(\"Window is closing...\");\n      if (this.unsavedChanges()) {\n        this.eventService.publish<AXPDesignerSaveFormMessage>(AXPDesignerMessageKeys.SaveForm, { id: this.templateId()!, success: false });\n      }\n      this.unsubscribeEvents();\n    });\n  }\n\n  private can = (widget: AXPWidgetNode | null): {\n    delete: boolean,\n    copyOrCut: boolean,\n    insert: boolean,\n    paste: boolean,\n  } => {\n    if (!widget) {\n      return {\n        delete: false,\n        copyOrCut: false,\n        insert: false,\n        paste: false,\n      }\n    }\n    const config = get(widget, '__meta__.config') as any as AXPWidgetConfig;\n    return {\n      delete: widget.type != 'page-layout',\n      copyOrCut: widget.type != 'page-layout',\n      paste: this.clipboard() != null && config.type == 'container' && config.designer?.canInsert != false,\n      insert: config.type == 'container' && config.designer?.canInsert != false,\n    }\n  }\n\n  public register(command: AXPDesignerRegisterCommand): void {\n    this.select({ widget: command.widget });\n  }\n\n  public select(command: AXPDesignerSelectCommand): void {\n    this.selectedNode.set(command.widget);\n    this.onSelected.next(command);\n  }\n\n  public update(command: AXPDesignerUpdateCommand): void {\n    const node = command.widget ?? this.selectedNode();\n\n    if (command.mode == 'update' && node) {\n      this.commandManager.executeCommand(new UpdateWidgetCommand(node!, command.values, node!));\n    }\n    //this.selectedNode.update((c) => merge(node, command.values));\n    this.onUpdate.next({ widget: node!, values: command.values });\n    this.unsavedChanges.set(true);\n    this.updatePreview();\n  }\n\n  public focus(command: AXPDesignerFocusCommand): void {\n    if (this._focusedNode != command.widget) {\n      this._focusedNode = command.widget;\n      this.onFocused.next({ widget: this._focusedNode });\n    }\n  }\n\n  public refresh(command: AXPDesignerRefreshCommand) {\n    this.onRefresh.next({ widget: command.widget });\n    this.updatePreview();\n  }\n\n  private findBreadcrumbs(\n    node: AXPWidgetNode,\n    targetNode?: AXPWidgetNode | null,\n    breadcrumb: AXPWidgetNode[] = []\n  ): AXPWidgetNode[] | undefined {\n    // Add the current node to the breadcrumb path\n    const currentBreadcrumb = [...breadcrumb, node];\n\n    // Check if the current node is the target node\n    if (node === targetNode) {\n      return currentBreadcrumb;\n    }\n\n    // If the node has children, recursively search them\n    if (node.children) {\n      for (const child of node.children) {\n        const result = this.findBreadcrumbs(child, targetNode, currentBreadcrumb);\n        if (result) {\n          return result;\n        }\n      }\n    }\n\n    // Return undefined if no match is found\n    return undefined;\n  }\n\n  async showPicker(currentNode: AXPWidgetNode = this.selectedNode()!): Promise<AXPWidgetNode[]> {\n    const widgets = await this.widgetPickerService.showPicker({\n      groups: [AXPWidgetGroupEnum.FormElement],\n      tabPersistenceContext: AXP_WIDGET_PICKER_TAB_CONTEXT.layoutDesignerFormElements,\n    });\n    const result: AXPWidgetNode[] = [];\n    if (widgets.length) {\n      widgets.forEach((c) => {\n        result.push(this.addWidget(currentNode, { type: c.type })!);\n      });\n    }\n    return result;\n  }\n\n  public new() {\n    this.commandManager.clear();\n    this.document.set(this.createDoc());\n    this.currentPage.set(this.document().children?.[0]!);\n    this.reRenderPage();\n  }\n\n  private createDoc(): AXPWidgetNode {\n    const doc: AXPWidgetNode = {\n      type: AXPWidgetsCatalog.document,\n      children: [this.createPage()],\n      name: 'document',\n    };\n    set(doc, '__meta__.id', this.generateUniqueId());\n    return doc;\n  }\n\n  private createPage(): AXPWidgetNode {\n    const config = this.widgetRegisteryService.resolve('page-layout');\n\n    const page: AXPWidgetNode = {\n      type: 'page-layout',\n      children: [],\n      name: 'page-layout1',\n    };\n\n    set(page, '__meta__.id', this.generateUniqueId());\n    set(page, '__meta__.config', config);\n    return page;\n  }\n\n  public addNewPage() {\n    this.addWidget(this.document(), this.createPage());\n    this.goToPage(this.currentPageIndex() + 1);\n  }\n\n  public removePage(index: number) {\n    const page = this.document().children?.[index]!;\n    this.removeWidget(page);\n    this.goToPage(index - 1);\n  }\n\n  public clonePage(index: number) {\n    const page = this.document().children?.[index]!;\n    this.clone(page);\n    this.goToPage((this.document().children?.length ?? 1) - 1);\n  }\n\n  public goToPage(index: number) {\n    this.currentPageIndex.set(index);\n    this.currentPage.set(this.document().children?.[this.currentPageIndex()]!);\n    this.select({ widget: this.currentPage() });\n  }\n\n  private reRenderPage() {\n    this.currentPage.set({ ...this.currentPage() });\n    setTimeout(() => {\n      this.refresh({ widget: this.currentPage() });\n    });\n  }\n\n  public findWidgetById(root: AXPWidgetNode, id: string): AXPWidgetNode | null {\n    if (get(root, '__meta__.id') === id) {\n      return root; // Return the root if it matches the ID\n    }\n    if (!root.children) return null;\n\n    for (const child of root.children) {\n      const found = this.findWidgetById(child, id);\n      if (found) {\n        return found; // Return the found child\n      }\n    }\n\n    return null; // Node not found\n  }\n\n  private findParent(id: string, parent: AXPWidgetNode = this.currentPage()): AXPWidgetNode | null {\n    if (!parent.children) return null;\n\n    if (parent.children.some((child) => get(child, '__meta__.id') === id)) {\n      return parent; // Return this node as it's the parent of the node with the given ID\n    }\n\n    for (const child of parent.children) {\n      const foundParent = this.findParent(id, child);\n      if (foundParent) return foundParent;\n    }\n\n    return null; // No parent found\n  }\n\n  private findNearestContainer(node: AXPWidgetNode, searchUpward = true): AXPWidgetNode | null {\n    if (searchUpward) {\n      let current: AXPWidgetNode | null = node;\n      while (current) {\n        const config = this.widgetRegisteryService.resolve(current.type);\n        if (config && config.type == 'container') {\n          return current;\n        }\n        current = this.findParent(get(current, '__meta__.id')!); // Use findParent to navigate upwards\n      }\n    } else {\n      // Recursive search to find the first container among children\n      if (node.children) {\n        for (const child of node.children) {\n          const config = this.widgetRegisteryService.resolve(child.type);\n          if (config && config.type == 'container') {\n            return child;\n          }\n          const foundContainer = this.findNearestContainer(child, false); // Continue searching downwards\n          if (foundContainer) return foundContainer;\n        }\n      }\n    }\n    return null; // Return null if no container found\n  }\n\n  addWidget(currentNode: AXPWidgetNode, node: AXPWidgetNode): AXPWidgetNode {\n    //\n    const cloned = cloneDeep(node);\n    const config = this.widgetRegisteryService.resolve(node.type);\n\n    //\n    this.commandManager.executeCommand(new AddWidgetCommand(cloned, currentNode, currentNode));\n    //\n    cloned.name = this.generateUniqueName(node.type);\n    set(cloned, '__meta__.id', this.generateUniqueId());\n    set(cloned, '__meta__.config', config);\n    set(cloned, '__meta__.added', true);\n    //\n    this.reRenderPage();\n    //\n    this.refresh({ widget: currentNode });\n    this.select({ widget: cloned });\n\n    return cloned;\n  }\n\n  public removeWidget(node: AXPWidgetNode = this.selectedNode()!): void {\n    if (\n      node.type === 'document-layout' ||\n      (node.type === 'page-layout' && (this.document().children?.length ?? 1) == 1)\n    ) {\n      console.error('Cannot remove the page node.');\n      return; // Prevent removing the root page node or document\n    }\n\n    const nodeIdToRemove = get(node, '__meta__.id');\n    if (!nodeIdToRemove) {\n      throw new Error('Node does not have a valid __meta__.id to identify it for removal.');\n    }\n\n    // Find the parent of the node to remove it\n    const parent = this.findParent(nodeIdToRemove, this.document());\n    if (!parent) {\n      throw new Error('Parent node not found. The node might be the root node or does not exist.');\n    }\n\n    const previousSelection = this.selectedNode(); // Capture the currently selected node before removal\n    const command = new RemoveWidgetCommand(node, parent, previousSelection!);\n    this.commandManager.executeCommand(command);\n\n    this.refresh({ widget: parent }); // Refresh the UI to reflect changes\n    this.select({ widget: parent }); // Select the parent node after removal\n  }\n\n  navigateTo(index: number) {\n    this.commandManager.goToCommand(index);\n    this.reRenderPage();\n    const currentSelection = this.commandManager.selectedNode();\n    this.refresh({ widget: this.currentPage() });\n    this.select({ widget: currentSelection! });\n  }\n\n  public redo() {\n    this.commandManager.redo();\n    this.reRenderPage();\n    const currentSelection = this.commandManager.selectedNode();\n    this.refresh({ widget: this.currentPage() });\n    this.select({ widget: currentSelection! });\n  }\n\n  public undo() {\n    this.commandManager.undo();\n    this.reRenderPage();\n    const currentSelection = this.commandManager.selectedNode();\n    this.refresh({ widget: this.currentPage() });\n    this.select({ widget: currentSelection! });\n  }\n\n  public clearHistory() {\n    this.commandManager.clear();\n  }\n\n  private removeMetaProp(obj: any): any {\n    const nodeName = '__meta__';\n    // Check if the object is an array\n    if (Array.isArray(obj)) {\n      return obj.map((item) => this.removeMetaProp(item));\n    } else if (typeof obj === 'object' && obj !== null) {\n      // Create a new object to store the result\n      let newObj: any = {};\n      for (let key in obj) {\n        // Only add the key if it's not the nodeName we want to remove\n        if (key !== nodeName) {\n          newObj[key] = this.removeMetaProp(obj[key]);\n        }\n      }\n      return newObj;\n    }\n    // If the value is not an object or array, return it as is\n    return obj;\n  }\n\n  private async addMetaToNodes(\n    node: AXPWidgetNode,\n    processedNodes: { count: number },\n    progressCallback: (processed: number) => void\n  ): Promise<AXPWidgetNode> {\n    // Apply your meta logic here\n    const config = this.widgetRegisteryService.resolve(node.type);\n    //\n    set(node, '__meta__.id', this.generateUniqueId());\n    set(node, '__meta__.config', config);\n    //\n    // Increment the processed node count and update the progress dialog\n    processedNodes.count++;\n    progressCallback(processedNodes.count);\n    // Recursively process child nodes using Promise.all\n    if (node.children && node.children.length > 0) {\n      node.children = await Promise.all(\n        node.children.map(async (child) => await this.addMetaToNodes(child, processedNodes, progressCallback))\n      );\n    }\n    return node;\n  }\n\n  public copy(widget: AXPWidgetNode | null = this.selectedNode()): void {\n    if (this.can(widget).copyOrCut) {\n      this.clipboard.set(cloneDeep(widget)); // Use lodash's cloneDeep to ensure a deep copy\n    }\n  }\n\n  public cut(widget: AXPWidgetNode | null = this.selectedNode()): void {\n    if (this.can(widget).copyOrCut) {\n      this.copy(widget); // Copy the widget to the clipboard\n      this.removeWidget(widget!); // Reuse the removeWidget method which should handle undo internally\n    }\n  }\n\n  public clone(widget: AXPWidgetNode | null = this.selectedNode()): void {\n    if (!widget) return;\n    this.copy(widget); // Copy the widget to the clipboard\n    if (widget.type == 'page-layout') {\n      this.paste(this.document());\n    } else {\n      this.paste(widget!);\n    }\n  }\n\n  public paste(parentNode: AXPWidgetNode | undefined = this.selectedNode() ?? this.currentPage()): void {\n    if (!this.clipboard() || !this.selectedNode() || !parentNode) {\n      console.error('Clipboard is empty or no node is selected.');\n      return;\n    }\n    const newNode = cloneDeep(this.clipboard() as AXPWidgetNode);\n    const nearestContainer = this.findNearestContainer(parentNode, true);\n    if (!nearestContainer) {\n      console.error('No suitable container found.');\n      return;\n    }\n    //\n    if (!nearestContainer.children) {\n      nearestContainer.children = [];\n    }\n    //\n    const setNameId = (node: AXPWidgetNode) => {\n      set(node, 'name', this.generateUniqueName(node.type));\n      set(node, '__meta__.id', this.generateUniqueId());\n      node.children?.forEach((n) => {\n        setNameId(n);\n      });\n    };\n    setNameId(newNode);\n    //\n    this.commandManager.executeCommand(new AddWidgetCommand(newNode, nearestContainer, nearestContainer));\n    //\n    setTimeout(() => {\n      this.refresh({ widget: nearestContainer }); // Refresh the UI\n      this.select({ widget: newNode }); // Select the newly pasted node\n    });\n  }\n\n  async save() {\n    if (this.templateId()) {\n      const content = this.export();\n      if (this.loadingStrategy() == AXPTemplateLoadingStrategy.Connector) {\n        await this.connector.save(this.templateId()!, { json: content });\n        this.toastService.success('Your changes saved successfully');\n      }\n      else {\n        const result = await this.eventService.sendAndWaitForResponse<AXPDesignerSaveFormMessage, { success: boolean }>(AXPDesignerMessageKeys.SaveForm, { id: this.templateId()!, success: true, content });\n        if (result.success) {\n          this.unsavedChanges.set(false);\n          window.close();\n        }\n      }\n    } else {\n      this.downloadJson();\n    }\n  }\n\n  async saveAs(node: AXPWidgetNode = this.document()) {\n    const content = this.export(node);\n    const result = await this.connector.saveAs({ json: content });\n    if (result) {\n      this.toastService.success('Your changes saved successfully');\n    }\n  }\n\n  export(node: AXPWidgetNode = this.document()): string {\n    const json = this.removeMetaProp(node);\n    return JSON.stringify(json);\n  }\n\n  downloadJson() {\n    // Convert the object to a JSON string\n    const jsonStr = this.export();\n\n    // Create a blob object from the JSON string\n    const blob = new Blob([jsonStr], { type: 'application/json' });\n\n    // Create a URL for the blob object\n    const url = URL.createObjectURL(blob);\n\n    // Create a temporary <a> element to trigger the download\n    const a = document.createElement('a');\n    a.href = url;\n    a.download = 'export.json';\n\n    // Append the <a> element to the document body (necessary for some browsers)\n    document.body.appendChild(a);\n\n    // Trigger the download by clicking the <a> element\n    a.click();\n    // Clean up by revoking the object URL and removing the <a> element\n    URL.revokeObjectURL(url);\n    document.body.removeChild(a);\n  }\n\n  async loadById(id: string, options: { strategy: AXPTemplateLoadingStrategy } = { strategy: AXPTemplateLoadingStrategy.Connector }) {\n    let content: string | null = null;\n    try {\n      if (options.strategy == AXPTemplateLoadingStrategy.Connector) {\n        content = await this.connector.load(id);\n      }\n      else {\n        content = await this.eventService.sendAndWaitForResponse<{ formId: string }, string>(AXPDesignerMessageKeys.RequestFormContent, { formId: id }, { timeout: 10000, retries: 3, retryDelay: 1000 });\n      }\n      if (!isNil(content) && !isEmpty(content)) {\n        await this.loadByContent(content!);\n      }\n      this.templateId.set(id);\n      this.loadingStrategy.set(options.strategy);\n    } catch (error: any) {\n      this.toastService.danger(error.message);\n    }\n  }\n\n  async importJSon() {\n    const files = await this.fileService.choose({ multiple: false, accept: 'application/json' });\n    if (files && files.length) {\n      const file = files[0];\n      const content = await file.text();\n      await this.loadByContent(content);\n    }\n  }\n\n  async loadByContent(content: string) {\n    const rootNode = JSON.parse(content) as AXPWidgetNode;\n    const totalNode = this.countTotalNodes(rootNode);\n    const processedNodes = { count: 0 };\n\n    const button: AXLoadingDialogButtonItem = {\n      text: 'Cancel',\n      autofocus: true,\n      color: 'primary',\n      onClick: (e) => {\n        dialog.close();\n      },\n    };\n\n    const dialog = this.loadingService.show({\n      mode: 'determinate',\n      title: 'Loading Content',\n      progressColor: 'primary',\n      text: 'Processing content',\n      status: `0 of ${totalNode}`,\n      buttons: [button],\n    });\n\n    try {\n      const root = await this.addMetaToNodes(rootNode, processedNodes, (count) => {\n        dialog.setProgressValue(Math.ceil((count / totalNode) * 100));\n        dialog.setProgressStatus(`${count} of ${totalNode}`);\n      });\n\n      const page = root.children?.[0]!;\n      this.document.set(root);\n      this.currentPage.set(page);\n\n      dialog.setProgressColor('success');\n      dialog.setProgressText('Content loaded successfully');\n      button.text = 'Okay';\n      button.color = 'success';\n      dialog.setProgressValue(100);\n\n      setTimeout(() => {\n        this.reRenderPage();\n        dialog.close();\n      }, 250);\n    } catch (error: any) {\n      dialog.setProgressColor('danger');\n      dialog.setProgressText(error instanceof Error ? error.message : 'Cannot load content');\n      button.text = 'Close';\n      button.color = 'danger';\n    }\n  }\n\n  private countTotalNodes(node: AXPWidgetNode): number {\n    let count = 1; // Count the current node\n    if (node.children && node.children.length > 0) {\n      count += node.children.reduce((sum, child) => sum + this.countTotalNodes(child), 0);\n    }\n    return count;\n  }\n\n  private generateUniqueName(type: string): string {\n    // Normalize the type to follow camelCase convention\n    const baseName = type.charAt(0).toLowerCase() + type.slice(1);\n    let index = 1;\n    let uniqueName = `${baseName}${index}`;\n\n    // Gather all existing names to check against\n    const existingNames = new Set<string>();\n    this.collectAllNames(this.document(), existingNames);\n\n    // Increment the index until a unique name is found\n    while (existingNames.has(uniqueName)) {\n      index++;\n      uniqueName = `${baseName}${index}`;\n    }\n\n    return uniqueName;\n  }\n\n  generateUniqueId(): number {\n    return Math.random() * Math.pow(10, 18);\n  }\n\n  private collectAllNames(node: AXPWidgetNode, names: Set<string>): void {\n    if (node.name) {\n      names.add(node.name);\n    }\n    if (node.children) {\n      for (const child of node.children) {\n        this.collectAllNames(child, names);\n      }\n    }\n  }\n\n  public updatePreview() {\n    this.eventService.publish<AXPDesignerPreviewMessage>(AXPDesignerMessageKeys.Preview, {\n      id: this.templateId()!,\n      document: this.removeMetaProp(this.document())\n    });\n  }\n\n  public async openPreviewDialog() {\n    const com = await import('../../preview/preview.component').then((c) => c.AXPLayoutDesignerPreviewComponent);\n    await this.popupService.open(com, {\n      header: false,\n      size: 'full',\n      data: {\n        initialSize: this.size(),\n        isDialogWindow: true,\n      },\n    });\n  }\n\n  public openPreviewWindow() {\n    window.open('/forms/preview', '_blank');\n  }\n\n  getContextMenuItems(instance: AXPDesignerWidgetComponent, isRoot = false): AXMenuItem[] {\n    const widget = instance as any as AXPValueWidgetComponent;\n    const node = widget.node;\n\n    const items: AXMenuItem[] = [];\n    //       \n    if (this.can(node).insert) {\n      items.push(cloneWidgetMenu(AXP_DESIGNER_ADD_WIDGET_MENU, {\n        break: true,\n      }));\n    }\n    //\n    items.push(cloneWidgetMenu(AXP_DESIGNER_CLONE_MENU, { disabled: !this.can(node).copyOrCut }));\n    items.push(cloneWidgetMenu(AXP_DESIGNER_CUT_MENU, { disabled: !this.can(node).copyOrCut }));\n    items.push(cloneWidgetMenu(AXP_DESIGNER_COPY_MENU, { disabled: !this.can(node).copyOrCut }));\n    items.push(cloneWidgetMenu(AXP_DESIGNER_PASTE_MENU, { disabled: !this.can(node).paste, break: true }));\n    //\n    items.push(cloneWidgetMenu(AXP_DESIGNER_DELETE_WIDGET_MENU, { disabled: !this.can(node).delete, break: true }));\n    //\n    items.push(cloneWidgetMenu(AXP_DESIGNER_SAVE_AS_WIDGET_MENU));\n    if (instance.onContextMenu) {\n      instance.onContextMenu({ items })\n    }\n    if (!isRoot) {\n      items.forEach(item => {\n        item.suffix = undefined;\n      })\n    }\n    return items;\n  }\n\n  async executeCommand(context: { instance: AXPDesignerWidgetComponent, name: string, data?: any }): Promise<void> {\n    const widget = context.instance as any as AXPValueWidgetComponent;\n    if (context.instance.executeCommand) {\n      const command: any = {\n        name: context.name,\n        data: context.data,\n        handled: false\n      }\n      await context.instance.executeCommand(command);\n      if (command.handled)\n        return;\n    }\n    switch (context.name) {\n      case AXP_DESIGNER_SELECT_WIDGET_MENU.name: {\n        this.select({ widget: widget.node })\n        break\n      }\n      case AXP_DESIGNER_ADD_WIDGET_MENU.name: {\n        this.showPicker(widget.node);\n        break\n      }\n      //\n      case AXP_DESIGNER_DELETE_WIDGET_MENU.name: {\n        this.removeWidget(widget.node);\n        break\n      }\n      //\n      case AXP_DESIGNER_CLONE_MENU.name: {\n        this.clone(widget.node);\n        break\n      }\n      case AXP_DESIGNER_CUT_MENU.name: {\n        this.cut(widget.node);\n        break\n      }\n      case AXP_DESIGNER_COPY_MENU.name: {\n        this.copy(widget.node);\n        break\n      }\n      case AXP_DESIGNER_PASTE_MENU.name: {\n        this.paste(widget.node);\n        break\n      }\n      //\n    }\n  }\n\n  unsubscribeEvents() {\n    this.eventService.unsubscribe(AXPDesignerMessageKeys.Loaded);\n    this.eventService.unsubscribe(AXPDesignerMessageKeys.PreviewWindow);\n  }\n}","import { AXClickEvent } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPLayoutBaseWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXPDesignerService } from '../../shared/designer.service';\n\n@Component({\n  selector: 'axp-designer-add-widget-button',\n  styleUrls: ['./add-widget-button.component.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(AXPLayoutBaseWidgetComponent);\n\n  async handleClick(e: AXClickEvent) {\n    e.nativeEvent.stopPropagation();\n    await this.designerService.showPicker(this.parent.node);\n  }\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { ChangeDetectionStrategy, Component, input, output, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'axp-designer-add-widget-line-button',\n  template: `\n   <div class=\"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 { AXPLayoutBaseWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  HostBinding,\n  inject,\n  Output,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { AXPDesignerService } from '../../shared/designer.service';\n\n@Component({\n  selector: 'axp-designer-add-widget-mini-button',\n  template: `\n    <div class=\"axp-empty-space\">\n      <div class=\"ax-m-auto ax-py-4 ax-px-8\">\n        <div\n          class=\"ax-flex ax-items-center ax-justify-center ax-size-4 hover:ax-scale-125 ax-cursor-pointer\"\n          (click)=\"handleClick($event)\"\n        >\n          <i class=\"fa-solid fa-plus\"></i>\n        </div>\n      </div>\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AXButtonModule, AXDecoratorModule],\n  encapsulation: ViewEncapsulation.None,\n})\nexport class AXPDesignerAddWidgetMiniButtonComponent {\n  private designerService = inject(AXPDesignerService);\n  private parent = inject(AXPLayoutBaseWidgetComponent);\n\n  @Output()\n  public onClick: EventEmitter<void> = new EventEmitter<void>();\n\n  protected async handleClick(e: MouseEvent) {\n    e.stopPropagation();\n    const a = this.onClick;\n    if (this.onClick.observed) {\n      this.onClick.emit();\n    } else {\n      await this.designerService.showPicker(this.parent.node);\n    }\n  }\n\n  @HostBinding('class')\n  private get __class(): string {\n    const cls: any = {};\n    //\n    cls[`ax-flex`] = true;\n    cls[`ax-w-full`] = true;\n    cls[`ax-h-full`] = true;\n    return cls;\n  }\n}\n","import { ChangeDetectionStrategy, Component, HostListener, computed, model, output, signal } from '@angular/core';\n\n@Component({\n  selector: 'axp-designer-flex-drawer',\n  styleUrls: ['./flex-drawer.component.scss'],\n  template: `\n    <table class=\"table-picker\">\n      <tbody>\n        <tr>\n          @for (c of items(); track $index) {\n            <td (mouseenter)=\"handleMouseHover(c)\" [class.picked]=\"c <= range()\" (click)=\"handleClick(c)\"></td>\n          }\n        </tr>\n        <tr>\n          <td [attr.colspan]=\"items().length\" class=\"ax-text-center\">\n            <small>{{ range() }}</small>\n          </td>\n        </tr>\n      </tbody>\n    </table>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [],\n})\nexport class AXPDesignerFlexDrawerComponent {\n  itemsCount = model<number>(12, { alias: 'items' });\n\n  onSelect = output<number>();\n\n  protected items = computed(() => Array.from({ length: this.itemsCount() }).map((v, index) => index + 1));\n\n  protected range = signal(0);\n\n  protected handleMouseHover(c: number) {\n    this.range.set(c);\n  }\n\n  protected handleClick(c: number) {\n    this.onSelect.emit(c);\n  }\n\n  @HostListener('mouseleave', ['$event'])\n  protected handleMouseLeave(event: MouseEvent) {\n    this.range.set(0);\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  HostBinding,\n  HostListener,\n  model,\n  output,\n  signal,\n} from '@angular/core';\n\n@Component({\n  selector: 'axp-designer-grid-drawer',\n  styleUrls: ['./grid-drawer.component.scss'],\n  template: `\n    <table class=\"table-picker\">\n      <tbody>\n        @for (r of rows(); track $index) {\n          <tr>\n            @for (c of columns(); track $index) {\n              <td\n                (mouseenter)=\"handleMouseHover(r, c)\"\n                [class.picked]=\"c <= rangeC() && r <= rangeR()\"\n                (click)=\"handleClick(r, c)\"\n              ></td>\n            }\n          </tr>\n        }\n        <tr>\n          <td [attr.colspan]=\"columns().length\" class=\"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  rowsCount = model<number>(5, { alias: 'rows' });\n  colsCount = model<number>(12, { alias: 'columns' });\n\n  onSelect = output<{ rows: number; cols: number }>();\n\n  protected rows = computed(() => Array.from({ length: this.rowsCount() }).map((v, index) => index + 1));\n  protected columns = computed(() => Array.from({ length: this.colsCount() }).map((v, index) => index + 1));\n\n  protected rangeR = signal(0);\n  protected rangeC = signal(0);\n\n  protected handleMouseHover(r: number, c: number) {\n    this.rangeR.set(r);\n    this.rangeC.set(c);\n  }\n\n  protected handleClick(r: number, c: number) {\n    this.onSelect.emit({ rows: r, cols: c });\n  }\n\n  @HostListener('mouseleave', ['$event'])\n  protected handleMouseLeave(event: MouseEvent) {\n    this.rangeR.set(0);\n    this.rangeC.set(0);\n  }\n\n  @HostBinding('style')\n  private get __style(): any {\n    return {\n      '--cols-width': `${this.colsCount() == 0 ? 0 : 100 / this.colsCount()}%`,\n    };\n  }\n}\n","import { AXPWidgetConfig } from '@acorex/platform/layout/widget-core-contracts';\nimport { AXCommonModule } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTabsComponent, AXTabsModule, AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPSettingsService, AXPStickyDirective } from '@acorex/platform/common';\nimport { AXPDefinitionCategory, AXPMultiLanguageString, AXPPlatformScope } from '@acorex/platform/contracts';\nimport { AXPWidgetItemClickEvent, AXPWidgetItemComponent, AXPWidgetItemData } from '@acorex/platform/layout/components';\n\nimport { CommonModule } from '@angular/common';\nimport {\n  afterNextRender,\n  Component,\n  computed,\n  inject,\n  Injector,\n  model,\n  signal,\n  viewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { castArray, orderBy, uniqBy } from 'lodash-es';\n\nconst WIDGET_PICKER_I18N = {\n  searchPlaceholder: '@form-template-management:designer.components.widget-picker.search-placeholder',\n  selectedCount: '@form-template-management:designer.components.widget-picker.selected-count',\n  tabAll: '@form-template-management:designer.components.widget-picker.tab-all',\n  pinnedSectionTitle: '@form-template-management:designer.components.widget-picker.pinned-section-title',\n} as const;\n\nexport interface AXPDisplayWidgetConfig extends AXPWidgetConfig {\n  pinned: boolean;\n}\n\ninterface AXPWidgetPickerSection {\n  trackKey: string;\n  title: AXPMultiLanguageString | null;\n  widgetItems: AXPWidgetItemData[];\n}\n\n/**\n * Maps AXPDisplayWidgetConfig to generic AXPWidgetItemData\n */\nfunction mapToWidgetItemData(widget: AXPDisplayWidgetConfig): AXPWidgetItemData {\n  return {\n    title: widget.title,\n    description: widget.description,\n    icon: widget.icon ?? 'fa-solid fa-cube',\n    isPinned: widget.pinned,\n    data: widget,\n  };\n}\n\n@Component({\n  imports: [\n    CommonModule,\n    AXCommonModule,\n    FormsModule,\n    AXButtonModule,\n    AXDecoratorModule,\n    AXTabsModule,\n    AXSearchBoxModule,\n    AXPStickyDirective,\n    AXPWidgetItemComponent,\n    AXTranslationModule,\n  ],\n  templateUrl: './widget-picker.component.html',\n  styleUrl: './widget-picker.component.scss',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class AXPDesignerWidgetPickerComponent extends AXBasePageComponent {\n  //#region ---- Services & Dependencies ----\n\n  private readonly injector = inject(Injector);\n  private settingsService = inject(AXPSettingsService);\n  private readonly mlResolver = inject(AXTranslationService);\n  private readonly pinnedSettingKey = 'forms:widgets:picker:pinned';\n\n  /** Keeps the line indicator in sync when the selected index is set programmatically (e.g. restored tab). */\n  private readonly tabsHost = viewChild<AXTabsComponent>('tabsHost');\n\n  //#endregion\n\n  //#region ---- Constructor ----\n\n  constructor() {\n    super();\n    afterNextRender(\n      () => {\n        this.allowTabPersistence = true;\n      },\n      { injector: this.injector },\n    );\n  }\n\n  //#endregion\n\n  //#region ---- Class Properties ----\n\n  protected readonly i18n = WIDGET_PICKER_I18N;\n\n  protected searchTerm = model('');\n\n  /** Populated by popup `data.tabPersistenceContext` (optional for tests). */\n  tabPersistenceContext?: string;\n\n  private widgets: AXPWidgetConfig[] = [];\n  private allWidgets = signal<AXPWidgetConfig[]>([]);\n  private pinnedWidgets = signal<string[]>([]);\n\n  protected selectedWidgets = signal<AXPDisplayWidgetConfig[]>([]);\n\n  protected currentTabIndex = signal(0);\n\n  /** Avoid persisting spurious tab events before restore + first paint complete. */\n  private allowTabPersistence = false;\n\n  //#endregion\n\n  //#region ---- Computed Properties ----\n\n  private displayWidgets = computed<AXPDisplayWidgetConfig[]>(() => {\n    return this.allWidgets().map((c) => ({ ...c, pinned: this.pinnedWidgets().includes(c.name) }));\n  });\n\n  private orderedList = computed(() => {\n    const search = this.searchTerm().toLowerCase();\n    const selectedTabName = this.selectedTab().name;\n\n    return orderBy(\n      this.displayWidgets().filter((w) => {\n        const matchesTab =\n          selectedTabName === 'all' || castArray(w.categories ?? []).some((c) => c.name === selectedTabName);\n        const titleText = this.mlResolver.resolve(w.title).toLowerCase();\n        const descText = this.mlResolver.resolve(w.description ?? '').toLowerCase();\n        const matchesSearch = !search || titleText.includes(search) || descText.includes(search);\n        return matchesTab && matchesSearch;\n      }),\n      [(w) => w.pinned, (w) => this.mlResolver.resolve(w.title)],\n      ['desc', 'asc'],\n    );\n  });\n\n  protected pinnedList = computed(() => this.orderedList().filter((c) => c.pinned));\n  protected regularList = computed(() => this.orderedList().filter((c) => !c.pinned));\n\n  protected pinnedWidgetItems = computed(() => this.pinnedList().map(mapToWidgetItemData));\n\n  protected regularGroupedSections = computed(() => {\n    const tabName = this.selectedTab().name;\n    const list = this.regularList();\n    if (tabName === 'all') {\n      return this.buildAllTabSections(list);\n    }\n    return this.buildCategoryTabSections(list);\n  });\n\n  protected categories = computed(() =>\n    uniqBy(\n      this.allWidgets()\n        .map((w) => castArray(w.categories ?? []))\n        .filter((c) => c.length > 0)\n        .flat(),\n      'name',\n    ),\n  );\n\n  protected tabs = computed<AXPDefinitionCategory[]>(() =>\n    orderBy(\n      [{ name: 'all', title: WIDGET_PICKER_I18N.tabAll, order: 0 } as AXPDefinitionCategory, ...this.categories()],\n      (c) => c.order,\n    ),\n  );\n\n  protected maxVisibleWidgets = computed(() =>\n    Math.max(\n      1,\n      ...this.categories().map(\n        (cat) =>\n          this.allWidgets().filter((w) => castArray(w.categories ?? []).some((wc) => wc.name === cat.name)).length,\n      ),\n    ),\n  );\n\n  protected selectedTab = computed(() => this.tabs()[this.currentTabIndex()]);\n\n  protected pickerShellClass = computed(\n    () =>\n      `axp-designer-widget-picker ax-flex ax-flex-col ax-h-[95vh] ${this.maxVisibleWidgets() > 10 ? 'lg:ax-h-[75vh]' : 'lg:ax-h-[50vh]'}`,\n  );\n\n  //#endregion\n\n  //#region ---- Lifecycle Methods ----\n\n  protected override async ngOnInit() {\n    super.ngOnInit();\n    this.allWidgets.set(this.widgets);\n    this.pinnedWidgets.set((await this.settingsService.get<string[]>(this.pinnedSettingKey)) || []);\n    await this.restoreLastTabFromSettings();\n  }\n\n  //#endregion\n\n  //#region ---- Tab persistence (user settings) ----\n\n  private lastTabSettingKey(context: string): string {\n    return `forms:widgets:picker:last-tab:${context}`;\n  }\n\n  private async restoreLastTabFromSettings(): Promise<void> {\n    const ctx = this.tabPersistenceContext;\n    if (!ctx) {\n      return;\n    }\n    const saved = await this.settingsService.get<string | undefined>(this.lastTabSettingKey(ctx));\n    if (!saved) {\n      return;\n    }\n    const idx = this.tabs().findIndex((t) => t.name === saved);\n    if (idx >= 0) {\n      this.currentTabIndex.set(idx);\n      this.syncTabsStripToIndex(idx);\n    }\n  }\n\n  /**\n   * `ax-tab-item` [active] updates labels, but `ax-tabs` keeps the underline from its own index until `select` runs.\n   */\n  private syncTabsStripToIndex(index: number): void {\n    afterNextRender(\n      () => {\n        this.tabsHost()?.select(index);\n      },\n      { injector: this.injector },\n    );\n  }\n\n  private async persistTabSelection(tabIndex: number): Promise<void> {\n    const ctx = this.tabPersistenceContext;\n    if (!ctx) {\n      return;\n    }\n    const tab = this.tabs()[tabIndex];\n    if (!tab) {\n      return;\n    }\n    await this.settingsService.scope(AXPPlatformScope.User).set(this.lastTabSettingKey(ctx), tab.name);\n  }\n\n  //#endregion\n\n  //#region ---- Grouped sections (All = parent only; category tab = sub-category) ----\n\n  /**\n   * Picks the primary parent category for the \"All\" tab (lowest `order` wins).\n   */\n  private primaryCategory(widget: AXPDisplayWidgetConfig): AXPDefinitionCategory | null {\n    const cats = castArray(widget.categories ?? []);\n    if (cats.length === 0) {\n      return null;\n    }\n    return orderBy(cats, (c) => c.order)[0];\n  }\n\n  private buildAllTabSections(list: AXPDisplayWidgetConfig[]): AXPWidgetPickerSection[] {\n    const categoryMeta = this.categories();\n    const withCat = list.filter((w) => castArray(w.categories ?? []).length > 0);\n    const withoutCat = list.filter((w) => castArray(w.categories ?? []).length === 0);\n\n    const byPrimaryName = new Map<string, AXPDisplayWidgetConfig[]>();\n    for (const w of withCat) {\n      const primary = this.primaryCategory(w);\n      if (primary == null) {\n        continue;\n      }\n      const key = primary.name;\n      const bucket = byPrimaryName.get(key) ?? [];\n      bucket.push(w);\n      byPrimaryName.set(key, bucket);\n    }\n\n    const orderedNames = orderBy(\n      [...byPrimaryName.keys()],\n      (name) => categoryMeta.find((c) => c.name === name)?.order ?? 999,\n    );\n\n    const sections: AXPWidgetPickerSection[] = orderedNames.map((name) => {\n      const cat = categoryMeta.find((c) => c.name === name);\n      const widgets = orderBy(byPrimaryName.get(name)!, (w) => this.mlResolver.resolve(w.title), 'asc');\n      return {\n        trackKey: `cat:${name}`,\n        title: cat?.title ?? null,\n        widgetItems: widgets.map(mapToWidgetItemData),\n      };\n    });\n\n    if (withoutCat.length > 0) {\n      const widgets = orderBy(withoutCat, (w) => this.mlResolver.resolve(w.title), 'asc');\n      sections.push({\n        trackKey: 'cat:uncategorized',\n        title: null,\n        widgetItems: widgets.map(mapToWidgetItemData),\n      });\n    }\n\n    return sections;\n  }\n\n  private buildCategoryTabSections(list: AXPDisplayWidgetConfig[]): AXPWidgetPickerSection[] {\n    const withSub = list.filter((w) => w.subCategory != null);\n    const withoutSub = list.filter((w) => w.subCategory == null);\n\n    const bySubName = new Map<string, AXPDisplayWidgetConfig[]>();\n    for (const w of withSub) {\n      const key = w.subCategory!.name;\n      const bucket = bySubName.get(key) ?? [];\n      bucket.push(w);\n      bySubName.set(key, bucket);\n    }\n\n    const orderedSubNames = orderBy([...bySubName.keys()], (k) => bySubName.get(k)![0].subCategory!.order);\n\n    const sections: AXPWidgetPickerSection[] = orderedSubNames.map((name) => {\n      const widgets = orderBy(bySubName.get(name)!, (w) => this.mlResolver.resolve(w.title), 'asc');\n      const sub = widgets[0].subCategory!;\n      return {\n        trackKey: `sub:${name}`,\n        title: sub.title,\n        widgetItems: widgets.map(mapToWidgetItemData),\n      };\n    });\n\n    if (withoutSub.length > 0) {\n      const widgets = orderBy(withoutSub, (w) => this.mlResolver.resolve(w.title), 'asc');\n      sections.push({\n        trackKey: 'sub:ungrouped',\n        title: null,\n        widgetItems: widgets.map(mapToWidgetItemData),\n      });\n    }\n\n    return sections;\n  }\n\n  //#endregion\n\n  //#region ---- UI Handlers ----\n\n  protected async handleTabChange(event: AXTabStripChangedEvent): Promise<void> {\n    const indx = event.index;\n    if (this.currentTabIndex() != indx) {\n      this.currentTabIndex.set(indx);\n    }\n    if (this.allowTabPersistence) {\n      await this.persistTabSelection(indx);\n    }\n  }\n\n  protected handleWidgetClick(clickEvent: AXPWidgetItemClickEvent): void {\n    const { event, widget } = clickEvent;\n    const originalWidget = widget.data as AXPDisplayWidgetConfig;\n\n    if (event.ctrlKey) {\n      const currentSelection = this.selectedWidgets();\n      const isAlreadySelected = currentSelection.some((w) => w === originalWidget);\n\n      if (isAlreadySelected) {\n        this.selectedWidgets.set(currentSelection.filter((w) => w !== originalWidget));\n      } else {\n        this.selectedWidgets.set([...currentSelection, originalWidget]);\n      }\n    } else {\n      this.close({ widgets: [originalWidget] });\n    }\n  }\n\n  protected async handleWidgetPinClick(clickEvent: AXPWidgetItemClickEvent): Promise<void> {\n    const { widget } = clickEvent;\n    const originalWidget = widget.data as AXPDisplayWidgetConfig;\n\n    originalWidget.pinned = !originalWidget.pinned;\n\n    let pinnedWidgets = (await this.settingsService.get<string[]>(this.pinnedSettingKey)) || [];\n\n    if (originalWidget.pinned) {\n      if (!pinnedWidgets.includes(originalWidget.name)) {\n        pinnedWidgets.push(originalWidget.name);\n      }\n    } else {\n      pinnedWidgets = pinnedWidgets.filter((name) => name !== originalWidget.name);\n    }\n\n    await this.settingsService.scope(AXPPlatformScope.User).set(this.pinnedSettingKey, pinnedWidgets);\n\n    this.pinnedWidgets.set(pinnedWidgets);\n  }\n\n  protected handleConfirmSelection(): void {\n    this.close({ widgets: this.selectedWidgets() });\n  }\n\n  //#endregion\n\n  //#region ---- Selection state ----\n\n  protected isWidgetSelected(widget: AXPDisplayWidgetConfig): boolean {\n    return this.selectedWidgets().includes(widget);\n  }\n\n  protected isWidgetItemSelected(widgetItem: AXPWidgetItemData): boolean {\n    const originalWidget = widgetItem.data as AXPDisplayWidgetConfig;\n    return this.isWidgetSelected(originalWidget);\n  }\n\n  //#endregion\n}\n","<div [class]=\"pickerShellClass()\">\n  <div>\n    <ax-tabs #tabsHost [look]=\"'with-line'\" (onActiveTabChanged)=\"handleTabChange($event)\">\n      @for (w of tabs(); track w.name; let i = $index) {\n        <ax-tab-item\n          [text]=\"(w.title | translate | async)!\"\n          [key]=\"w.name\"\n          [active]=\"currentTabIndex() === i\"\n        ></ax-tab-item>\n      }\n    </ax-tabs>\n  </div>\n  <div class=\"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]=\"(i18n.searchPlaceholder | translate | async) ?? ''\"\n        [(ngModel)]=\"searchTerm\"\n        [delayTime]=\"300\"\n        [axAutoFocus]=\"true\"\n      >\n        <ax-clear-button></ax-clear-button>\n      </ax-search-box>\n    </div>\n    <div class=\"ax-flex ax-flex-col ax-p-4 ax-pt-0\">\n      @if (pinnedWidgetItems().length) {\n        <div class=\"axp-designer-widget-picker__section axp-designer-widget-picker__section--first\">\n          <div class=\"axp-designer-widget-picker__group-heading\">\n            <span class=\"axp-designer-widget-picker__group-title\">{{\n              (i18n.pinnedSectionTitle | translate | async) ?? ''\n            }}</span>\n            <span class=\"axp-designer-widget-picker__group-line\"></span>\n          </div>\n          <div class=\"ax-grid ax-grid-cols-2 ax-gap-2\">\n            @for (widgetItem of pinnedWidgetItems(); track $any(widgetItem.data).name) {\n              <axp-widget-item\n                [widget]=\"widgetItem\"\n                [isSelected]=\"isWidgetItemSelected(widgetItem)\"\n                (onWidgetClick)=\"handleWidgetClick($event)\"\n                (onPinClick)=\"handleWidgetPinClick($event)\"\n              >\n              </axp-widget-item>\n            }\n          </div>\n        </div>\n      }\n      @for (group of regularGroupedSections(); track group.trackKey; let isFirst = $first) {\n        <div\n          class=\"axp-designer-widget-picker__section\"\n          [class.axp-designer-widget-picker__section--first]=\"isFirst && pinnedWidgetItems().length === 0\"\n        >\n          @if (group.title) {\n            <div class=\"axp-designer-widget-picker__group-heading\">\n              <span class=\"axp-designer-widget-picker__group-title\">{{\n                (group.title | translate | async) ?? ''\n              }}</span>\n              <span class=\"axp-designer-widget-picker__group-line\"></span>\n            </div>\n          }\n          <div class=\"ax-grid ax-grid-cols-2 ax-gap-2\">\n            @for (widgetItem of group.widgetItems; track $any(widgetItem.data).name) {\n              <axp-widget-item\n                [widget]=\"widgetItem\"\n                [isSelected]=\"isWidgetItemSelected(widgetItem)\"\n                (onWidgetClick)=\"handleWidgetClick($event)\"\n                (onPinClick)=\"handleWidgetPinClick($event)\"\n              >\n              </axp-widget-item>\n            }\n          </div>\n        </div>\n      }\n    </div>\n  </div>\n</div>\n@if (selectedWidgets().length) {\n  <ax-footer>\n    <ax-suffix>\n      <ax-button\n        look=\"solid\"\n        color=\"primary\"\n        [text]=\"(i18n.selectedCount | translate: { params: { count: selectedWidgets().length } } | async) ?? ''\"\n        (onClick)=\"handleConfirmSelection()\"\n      ></ax-button>\n    </ax-suffix>\n  </ax-footer>\n}\n","import { AXP_WIDGET_TOKEN, AXPWidgetConfig, AXPWidgetNodeToken, AXPWidgetStatus } from '@acorex/platform/layout/widget-core-contracts';\nimport type { AXPWidgetNode, AXPWidgetRenderMode } from '@acorex/platform/contracts';\nimport { AXPBaseWidgetComponent, AXPLayoutBaseWidgetComponent, AXPValueWidgetComponent, AXPWidgetRegistryService } from '@acorex/platform/layout/widget-core';\n\nimport {\n  ComponentRef,\n  Directive,\n  inject,\n  Injector,\n  input,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  signal,\n  SimpleChanges,\n  ViewContainerRef,\n  WritableSignal,\n} from '@angular/core';\nimport { cloneDeep, get, isEqual, isNil, merge, set } from 'lodash-es';\nimport { debounceTime, distinctUntilChanged, filter, first, Subscription } from 'rxjs';\nimport { AXPDesignerService } from './designer.service';\n\n@Directive({\n  selector: '[axp-widget-designer-renderer]',\n  standalone: true,\n})\nexport class AXPWidgetDesignerRendererDirective implements OnChanges, OnDestroy {\n  protected mergedOptions: WritableSignal<any> = signal<any>({});\n\n  private injector = inject(Injector);\n  protected widgetRegistry = inject(AXPWidgetRegistryService);\n  protected zone = inject(NgZone);\n\n  protected isLoading = signal(true);\n\n  private instance!: AXPBaseWidgetComponent;\n  private config?: AXPWidgetConfig | undefined;\n  private isLoadingComponent = false;\n  private currentNodeId: string | null = null;\n\n  private service = inject(AXPDesignerService);\n  private viewContainerRef = inject(ViewContainerRef);\n\n  parentNode = input<AXPLayoutBaseWidgetComponent | null>();\n  parentElement = input<HTMLElement | null>();\n  parentComponent = input<ComponentRef<any> | null>();\n\n  index = input<number | null>();\n  locked = input<boolean>(false);\n\n  mode = input.required<AXPWidgetRenderMode>();\n  node = input.required<AXPWidgetNode>();\n\n  private hostElement = () => this.instance?.host as HTMLDivElement;\n  private getId = (w: AXPWidgetNode) => get(w, '__meta__.id');\n  private isCurrentWidget = (w: AXPWidgetNode) => this.getId(w) == this.getId(this.node());\n\n  private subs: Subscription[] = [];\n\n  /**\n   * @ignore\n   */\n  constructor() {\n    this.subs[0] = this.service.onUpdate\n      .pipe(\n        //debounceTime(time),\n        distinctUntilChanged(\n          (p, c) => this.getId(p.widget) == this.getId(c.widget) && isEqual(p.values?.options, c.values?.options),\n        ),\n        filter((c) => this.isCurrentWidget(c.widget) && !this.locked()),\n      )\n      .subscribe((c) => {\n        this.applyOptions(c.values?.options);\n      });\n    //\n    this.subs[1] = this.service.onSelected\n      .pipe(distinctUntilChanged((p, c) => this.getId(p.widget) == this.getId(c.widget)))\n      .subscribe((c) => {\n        this.zone.runOutsideAngular(() => {\n          if (this.isCurrentWidget(c.widget) && !this.locked()) {\n            this.applySelectedStyle();\n          } else {\n            this.removeSelectedStyle();\n          }\n        });\n      });\n    //\n    this.subs[2] = this.service.onFocused\n      .pipe(\n        distinctUntilChanged(\n          (p, c) => !isNil(p.widget) && !isNil(c.widget) && this.getId(p.widget) == this.getId(c.widget),\n        ),\n      )\n      .subscribe((c) => {\n        if (c.widget && this.isCurrentWidget(c.widget)) {\n          this.addOverlay();\n        } else {\n          this.removeOverlay();\n        }\n      });\n    //\n    this.subs[3] = this.service.onRefresh\n      .pipe(\n        debounceTime(200),\n        filter((c) => this.isCurrentWidget(c.widget)),\n      )\n      .subscribe((c) => {\n        this.instance?.setChildren(this.node().children ?? []);\n      });\n    //\n  }\n\n  // Detect input changes\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['mode'] || changes['node']) {\n      const nodeId = this.getId(this.node()) || null;\n      const modeChanged = changes['mode']?.currentValue !== changes['mode']?.previousValue;\n      const nodeChanged = changes['node'] && nodeId !== this.currentNodeId;\n\n      // Only load if there's an actual change and we're not already loading\n      //if ((modeChanged || nodeChanged) && !this.isLoadingComponent) {\n      this.loadComponent();\n      //}\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.subs.forEach((s) => {\n      s.unsubscribe();\n    });\n\n    // Clear loading state and reset tracking variables\n    this.isLoadingComponent = false;\n    this.currentNodeId = null;\n    this.isLoading.set(false);\n\n    // Clear view container\n    this.viewContainerRef.clear();\n  }\n\n  private async loadComponent() {\n    // Prevent duplicate loading\n    if (this.isLoadingComponent) {\n      return;\n    }\n\n    try {\n      this.isLoadingComponent = true;\n      const nodeId = this.getId(this.node()) || null;\n\n      // Skip if already loaded for the same node and mode\n      // if (this.currentNodeId === nodeId && this.instance) {\n      //   this.isLoadingComponent = false;\n      //   return;\n      // }\n\n      this.viewContainerRef.clear();\n      this.isLoading.set(true);\n      this.currentNodeId = nodeId;\n\n      this.config = this.widgetRegistry.resolve(this.node().type);\n      //\n      const props = [...(this.config?.properties ?? []), ...(this.config?.components[this.mode()]?.properties ?? [])]\n        ?.filter((c) => c.schema.defaultValue != null)\n        .map((c) => ({ [c.name]: cloneDeep(c.schema.defaultValue) }))\n        .reduce((acc, curr) => {\n          return { ...acc, ...curr };\n        }, {});\n      //\n      this.mergedOptions.set(merge(props, this.node().options) || {});\n\n      this.preprocessAndInitialOptions(cloneDeep(this.node().options));\n\n      const tokenValue = {\n        node: this.node(),\n        options: this.mergedOptions(),\n        config: this.config,\n        defaultValue: cloneDeep(this.node().defaultValue),\n      } as AXPWidgetNodeToken;\n\n      const token = Injector.create({\n        parent: this.injector,\n        providers: [\n          {\n            provide: AXP_WIDGET_TOKEN,\n            useValue: tokenValue,\n          },\n        ],\n      });\n\n      var com = await this.config?.components[this.mode()]?.component();\n      this.instance = this.viewContainerRef.createComponent<AXPBaseWidgetComponent>(com, { injector: token }).instance;\n      this.instance.locked = this.locked();\n      this.instance.parent = this.parentNode();\n      this.instance.parentElement = this.parentElement();\n      this.instance.parentComponent = this.parentComponent();\n      this.instance.index = this.index();\n      this.instance.mode = this.mode();\n      //\n      this.instance.onStatusChanged\n        .pipe(\n          filter((c) => c == AXPWidgetStatus.Rendered),\n          first(),\n        )\n        .subscribe(() => {\n          const host = this.hostElement();\n          set(host, '__meta__.renderer', this);\n          set(host, '__meta__.instance', this.instance);\n          host.classList.add('axp-widget-host');\n          if (this.mode() == 'designer') {\n            if (!this.locked()) {\n              host.addEventListener('mouseover', (e) => {\n                e.stopPropagation();\n                this.addOverlay();\n                this.focus();\n              });\n              host.addEventListener('mouseleave', (e) => {\n                e.stopPropagation();\n                this.removeOverlay();\n                this.blur();\n              });\n\n              host.addEventListener('click', (e) => {\n                e.stopPropagation();\n                this.applySelectedStyle();\n                this.service.select({ widget: this.node() });\n              });\n              this.service.register({\n                config: this.config!,\n                id: get(this.node(), '__meta__.id') as any as number,\n                instance: this.instance,\n                widget: this.node(),\n              });\n            }\n          }\n          this.isLoading.set(false);\n        });\n    } catch (error) {\n      console.error('Error loading component:', error);\n      this.isLoading.set(false);\n    } finally {\n      this.isLoadingComponent = false;\n    }\n  }\n\n  private overlay: HTMLElement | null;\n\n  public select() {\n    if (this.locked()) return;\n    //\n    this.service.select({ widget: this.node() });\n    this.applySelectedStyle();\n  }\n\n  public focus() {\n    if (this.locked()) return;\n    //\n    this.service.focus({ widget: this.node() });\n  }\n\n  public blur() {\n    if (this.locked()) return;\n    //\n    this.service.focus({ widget: null });\n  }\n\n  private applySelectedStyle() {\n    if (this.locked()) return;\n    //\n    this.hostElement()?.classList.add('axp-state-selected');\n    this.hostElement()?.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n  }\n\n  private removeSelectedStyle() {\n    this.hostElement()?.classList.remove('axp-state-selected');\n  }\n\n  private addOverlay() {\n    if (this.locked()) return;\n    //\n    this.zone.runOutsideAngular(() => {\n      if (this.hostElement()) {\n        this.hostElement()?.classList.add('axp-state-hover');\n        //\n        if (this.hostElement().querySelector('.axp-widget-overlay') || this.config?.type == 'container') {\n          return;\n        }\n        this.overlay = document.createElement('div');\n        this.overlay.classList.add('axp-widget-overlay');\n        this.overlay.addEventListener('click', (e) => {\n          e.preventDefault();\n          e.stopPropagation();\n          this.select();\n        });\n        this.overlay.addEventListener('mouseleave', (e) => {\n          e.preventDefault();\n          e.stopPropagation();\n          this.blur();\n        });\n        this.hostElement().appendChild(this.overlay);\n      }\n    });\n  }\n\n  private removeOverlay() {\n    this.zone.runOutsideAngular(() => {\n      if (this.hostElement()) {\n        this.hostElement()?.classList.remove('axp-state-hover');\n        //\n        this.overlay?.remove();\n      }\n    });\n  }\n\n  private preprocessAndInitialOptions(obj: any, pathPrefix: string = ''): void {\n    if (!obj) return;\n    //\n    Object.entries(obj).forEach(([key, value]) => {\n      const currentPath = pathPrefix ? `${pathPrefix}.${key}` : key;\n      this.mergedOptions.update((currentOptions) => {\n        return set(currentOptions, currentPath, value);\n      });\n    });\n  }\n\n  private applyOptions(values: any): void {\n    if (this.instance instanceof AXPValueWidgetComponent && this.node().defaultValue != null) {\n      this.instance.setValue(cloneDeep(this.node().defaultValue));\n    }\n    this.mergedOptions.update((currentOptions) => {\n      return merge(currentOptions, values);\n    });\n    this.instance?.setOptions(this.mergedOptions());\n  }\n}\n","import {\n  AXContextMenuComponent,\n  AXContextMenuItemsClickEvent,\n  AXContextMenuOpeningEvent,\n  AXMenuItem,\n  AXMenuModule,\n} from '@acorex/components/menu';\nimport { AXPValueWidgetComponent, AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\n\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  ElementRef,\n  HostBinding,\n  inject,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { get } from 'lodash-es';\nimport { AXPDesignerService } from '../../shared/designer.service';\nimport { AXPDesignerWidgetComponent } from '../../shared/designer.types';\nimport { AXPWidgetDesignerRendererDirective } from '../../shared/widget-designer-renderer.directive';\n\n@Component({\n  selector: 'axp-designer-board',\n  templateUrl: './board.component.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AXPWidgetCoreModule, AXPWidgetDesignerRendererDirective, AXMenuModule],\n})\nexport class AXPDesignerBoardComponent {\n  @ViewChild('contextMenu')\n  protected contextMenu: AXContextMenuComponent;\n\n  protected context: any = {};\n  private elementRef = inject(ElementRef<HTMLDivElement>) as ElementRef<HTMLDivElement>;\n  private readonly mlResolver = inject(AXTranslationService);\n\n  private breakpointMap = {\n    sm: 640,\n    md: 768,\n    lg: 1024,\n    xl: 1280,\n    xxl: 1536,\n  };\n\n  // Unified method to extract media queries and create a custom class\n  applyResponsiveStyles(breakpoint: string) {\n    const minWidth = get(this.breakpointMap, breakpoint) as number;\n    const mediaRules = [];\n\n    // Loop through all the stylesheets\n    for (const sheet of Array.from(document.styleSheets)) {\n      try {\n        // Loop through CSS rules\n        for (const rule of Array.from(sheet.cssRules)) {\n          // Check if the rule is a CSSMediaRule\n          if (rule instanceof CSSMediaRule && rule.media.mediaText.includes(`min-width: ${minWidth}px`)) {\n            // Loop through the media rule's CSS rules\n            for (const subRule of Array.from(rule.cssRules)) {\n              mediaRules.push(subRule.cssText);\n            }\n          }\n        }\n      } catch (e) {\n        console.error('Error accessing stylesheet:', e);\n      }\n    }\n\n    // Create a dynamic class for the media queries\n    this.createCustomClass(`axp-preview-${breakpoint}`, mediaRules, breakpoint);\n  }\n\n  private createCustomClass(className: string, styles: string[], breakpoint: string) {\n    const styleSheet = document.createElement('style');\n    styleSheet.setAttribute('data-screen', breakpoint);\n\n    // Construct a pure CSS string, dynamically replacing the breakpoint prefix\n    let styleString = '';\n    styles.forEach((style) => {\n      // Replace any prefixed classes like 'lg:' or 'md:' dynamically\n      const dynamicPrefix = new RegExp(`\\\\.${breakpoint}\\\\\\\\:`, 'g');\n      styleString += `.${className} ${style.replace(dynamicPrefix, '.')}`; // Replace the breakpoint prefix\n    });\n\n    styleSheet.innerText = styleString;\n    this.removeCustomClass();\n    this.elementRef.nativeElement.appendChild(styleSheet);\n  }\n\n  private removeCustomClass() {\n    this.elementRef.nativeElement.querySelectorAll('style').forEach((s) => s.remove());\n  }\n\n  protected service = inject(AXPDesignerService);\n\n  protected width = computed(() => {\n    switch (this.service.size()) {\n      case 'sm':\n        return '340px';\n      case 'md':\n      case 'lg':\n        return '768px';\n      default:\n        return '100%';\n    }\n  });\n\n  private ef = effect(() => {\n    this.removeCustomClass();\n    if (this.service.size() != 'xl') {\n      this.applyResponsiveStyles(this.service.size());\n    }\n  });\n\n  /**\n   * @ignore\n   */\n  constructor() {\n    this.service.onRefresh.subscribe(() => {\n      this.contextMenu?.refresh();\n    });\n  }\n\n  protected handleContextMenuOpening(e: AXContextMenuOpeningEvent) {\n    const renderer = get(e.targetElement, '__meta__.renderer') as unknown as AXPWidgetDesignerRendererDirective;\n    const instance = get(e.targetElement, '__meta__.instance') as unknown as AXPDesignerWidgetComponent;\n\n    if (!renderer || !instance) {\n      e.canceled = true;\n      return;\n    }\n\n    renderer.select();\n\n    // Fetch context menu items for the current instance\n    try {\n      const items: AXMenuItem[] = this.service.getContextMenuItems(instance, true);\n      if (items.length) {\n        e.items.push(...items);\n      } else {\n        e.canceled = true;\n      }\n    } catch (error) {\n      console.error('Failed to get context menu items:', error);\n      e.canceled = true;\n    }\n\n    // Recursively bind instance data to all items\n    this.bindInstanceToItems(e.items, instance);\n\n    // Traverse through parents and add their menu items directly to the root level\n    this.addParentsToRootMenu(instance, e.items);\n  }\n\n  private addParentsToRootMenu(instance: AXPDesignerWidgetComponent, items: AXMenuItem[]) {\n    let parent = (instance as unknown as AXPValueWidgetComponent)?.parent;\n    const parentItems: AXMenuItem[] = [];\n\n    // Traverse up the parent chain, adding each parent to the \"Parents\" menu\n    while (parent) {\n      try {\n        const widget = parent as unknown as AXPDesignerWidgetComponent;\n        const parentContextItems: AXMenuItem[] = this.service.getContextMenuItems(widget);\n\n        // Create a new menu item for this parent\n        const parentMenuItem: AXMenuItem = {\n          text: this.mlResolver.resolve(parent.config.title),\n          icon: parent.config.icon,\n          items: [\n            {\n              text: 'Select',\n              name: 'select',\n              break: true,\n              icon: 'fa-solid fa-arrow-pointer',\n            },\n            ...parentContextItems,\n          ],\n        };\n\n        // Recursively bind instance data to all items\n        this.bindInstanceToItems(parentMenuItem.items ?? [], widget);\n\n        // Add the parent menu item to the parentItems array\n        parentItems.push(parentMenuItem);\n      } catch (error) {\n        console.error('Failed to get parent context menu items:', error);\n      }\n\n      // Move to the next parent in the chain\n      parent = (parent as unknown as AXPValueWidgetComponent)?.parent;\n    }\n\n    // If there are any parent items, add them under a \"Parents\" group\n    if (parentItems.length > 0) {\n      items[items.length - 1].break = true;\n      items.push({\n        text: 'Parents',\n        icon: 'fa-solid fa-turn-up', // Icon for the \"Parents\" group\n        items: parentItems, // Add all parent items here\n      });\n    }\n  }\n\n  protected async handleContextMenuItemClick(e: AXContextMenuItemsClickEvent) {\n    if (e.item.name) {\n      const instance: AXPDesignerWidgetComponent = get(\n        e.item.data,\n        'instance',\n      ) as unknown as AXPDesignerWidgetComponent;\n      await this.service.executeCommand({ instance, name: e.item.name });\n    }\n  }\n\n  private bindInstanceToItems(items: AXMenuItem[], instance: AXPDesignerWidgetComponent): void {\n    items.forEach((item) => {\n      // Ensure each item gets the correct instance\n      item.data = { ...(item.data ?? {}), instance };\n\n      // If the item has sub-items, bind instance to them recursively\n      if (item.items) {\n        this.bindInstanceToItems(item.items, instance);\n      }\n    });\n  }\n\n  @HostBinding('style')\n  private get __style(): string {\n    const cls: any = {};\n    cls[`width`] = this.width();\n    cls[`max-width`] = '1280px';\n    return cls;\n  }\n\n  @HostBinding('class')\n  private get __class(): string {\n    const cls: any = {};\n    cls[`axp-designer-board`] = true;\n    cls[`axp-state-design`] = true;\n    cls['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 type { AXPWidgetNode } from '@acorex/platform/contracts';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { AXPDesignerService } from '../../shared/designer.service';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n  selector: 'axp-designer-breadcrumbs',\n  template: `\n    <ax-breadcrumbs>\n      @for( b of service.breadcrumbs();track $index){\n      <ax-breadcrumbs-item>\n        <a (click)=\"handleClick(b)\" (mouseover)=\"handleMouseOver(b)\"> {{ getTitle(b) | translate | async }}</a>\n      </ax-breadcrumbs-item>\n      }\n      <ng-template #divider>\n        <i class=\"ax-icon ax-icon-chevron-right\"></i>\n      </ng-template>\n    </ax-breadcrumbs>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AXPWidgetCoreModule, AXBreadcrumbsModule, AXDecoratorModule, AXTranslationModule, AsyncPipe]\n})\nexport class AXPDesignerBreadcrumbsComponent {\n  protected service = inject(AXPDesignerService);\n\n  protected getTitle(node: AXPWidgetNode): string {\n    return get(node, '__meta__.config.title') as any as string;\n  }\n\n  protected handleClick(node: AXPWidgetNode) {\n    this.service.select({ widget: node });\n  }\n\n  protected handleMouseOver(node: AXPWidgetNode) {\n    this.service.focus({ widget: node });\n  }\n}\n","import { AXDecoratorModule } from '@acorex/components/decorators';\n\nimport { Component, OnInit } from '@angular/core';\n\n@Component({\n    imports: [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-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>","\nimport { ChangeDetectionStrategy, Component, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXPStateMessageComponent } from '@acorex/platform/layout/components';\nimport { AXPDesignerService } from '../../../shared/designer.service';\nimport { AXPLayoutDesignerDrawerContentComponent } from '../../../shared/drawer-content/drawer-content.component';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { AXPDataSourceDefinitionProviderService } 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        AXDecoratorModule,\n        AXButtonModule,\n        AXPLayoutDesignerDrawerContentComponent,\n        AXPStateMessageComponent\n    ]\n})\n\nexport class AXPDesignerDataSourcesComponent {\n\n    protected service = inject(AXPDesignerService);\n    protected workflow = inject(AXPWorkflowService);\n    protected dataSourceProvider = inject(AXPDataSourceDefinitionProviderService);\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  <ax-title>Data Sources</ax-title>\n\n  <ax-content header>\n    <ax-button look=\"blank\" class=\"ax-sm\" title=\"Add New Data Source\" (onClick)=\"handleAddClick()\">\n      <ax-icon class=\"fa-light fa-plus\"></ax-icon>\n    </ax-button>\n  </ax-content>\n\n  <ax-content body>\n    @if (list().length) {\n      <ul class=\"axp-designer-drawer-list\">\n        @for (item of list(); track $index) {\n          <li>\n            <i class=\"ax-me-1 fa-solid fa-table\"></i>\n            {{ item.title }}\n          </li>\n        }\n      </ul>\n    } @else {\n      <axp-state-message\n        icon=\"fa-light fa-database\"\n        [title]=\"'@layout-designer:components.data-sources.empty-states.no-data-sources.title'\"\n        [description]=\"'@layout-designer:components.data-sources.empty-states.no-data-sources.description'\"\n      >\n      </axp-state-message>\n    }\n  </ax-content>\n</axp-designer-drawer-content>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXPStateMessageComponent } from '@acorex/platform/layout/components';\nimport { AXPLayoutDesignerDrawerContentComponent } from '../../../shared/drawer-content/drawer-content.component';\nimport { AXPDesignerService } from '../../../shared/designer.service';\n\n@Component({\n    selector: 'axp-designer-history',\n    templateUrl: 'history.component.html',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        CommonModule,\n        AXDecoratorModule,\n        AXButtonModule,\n        AXDropdownModule,\n        AXPLayoutDesignerDrawerContentComponent,\n        AXPStateMessageComponent\n    ]\n})\n\nexport class AXPDesignerHistoryComponent {\n    protected service = inject(AXPDesignerService);\n}","<axp-designer-drawer-content>\n  <ax-title>History</ax-title>\n\n  <ax-content header>\n    <ax-button look=\"blank\" class=\"ax-sm\">\n      <ax-icon class=\"fa-light fa-ellipsis\"></ax-icon>\n      <ax-dropdown-panel class=\"ax-sm\">\n        <ax-button-item-list>\n          <ax-button-item text=\"Clear\" name=\"add\" (onClick)=\"service.clearHistory()\"> </ax-button-item>\n        </ax-button-item-list>\n      </ax-dropdown-panel>\n    </ax-button>\n  </ax-content>\n\n  <ax-content body>\n    @if (service.history().length) {\n      <ul class=\"axp-designer-drawer-list\">\n        @for (step of service.history(); track $index) {\n          <li\n            (click)=\"service.navigateTo($index)\"\n            [class.ax-italic]=\"step.isFuture\"\n            [class.ax-text-neutral-400]=\"step.isFuture\"\n            [class.ax-state-selected]=\"step.isCurrent\"\n          >\n            <i class=\"ax-me-1\" [ngClass]=\"step.icon\"></i>\n            {{ step.description }}\n          </li>\n        }\n      </ul>\n    } @else {\n      <axp-state-message\n        icon=\"fa-light fa-history\"\n        [title]=\"'@layout-designer:components.history.empty-states.no-changes.title'\"\n        [description]=\"'@layout-designer:components.history.empty-states.no-changes.description'\"\n      >\n      </axp-state-message>\n    }\n  </ax-content>\n</axp-designer-drawer-content>\n","import { AXPWidgetConfig } from '@acorex/platform/layout/widget-core-contracts';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPStateMessageComponent } from '@acorex/platform/layout/components';\nimport { type AXPWidgetNode, AXPWidgetsCatalog } from '@acorex/platform/contracts';\n\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { merge } from 'rxjs';\nimport { AXPLayoutDesignerDrawerContentComponent } from '../../../shared/drawer-content/drawer-content.component';\nimport { AXPDesignerService } from '../../../shared/designer.service';\n\n@Component({\n  selector: 'axp-designer-outline',\n  templateUrl: 'outline.component.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    CommonModule,\n    AXDecoratorModule,\n    AXPLayoutDesignerDrawerContentComponent,\n    AXPStateMessageComponent\n  ]\n})\nexport class AXPDesignerOutlineComponent {\n  protected service = inject(AXPDesignerService);\n\n  protected collapsedStates: Map<any, boolean> = new Map();\n\n  protected root = signal(this.getTree());\n\n  constructor() {\n    merge(this.service.onRefresh, this.service.onUpdate).subscribe(() => {\n      this.root.update((c) => ({ ...this.getTree() }));\n    });\n  }\n\n  private getTree(): AXPWidgetNode {\n    return {\n      type: AXPWidgetsCatalog.document,\n      children: [this.service.currentPage()],\n    } as AXPWidgetNode;\n  }\n\n  private toggleCollapse(node: any) {\n    // Toggle the current state or set to true if undefined\n    this.collapsedStates.set(node, !this.collapsedStates.get(node));\n  }\n\n  protected isCollapsed(node: any): boolean {\n    // Return the collapsed state, default is false (expanded)\n    return !!this.collapsedStates.get(node);\n  }\n\n  protected getConfig(node: AXPWidgetNode): AXPWidgetConfig {\n    return get(node, '__meta__.config') as any as AXPWidgetConfig;\n  }\n\n  protected handleClick(e: MouseEvent, node: AXPWidgetNode) {\n    e.stopPropagation();\n    this.service.select({ widget: node });\n  }\n\n  protected handleToggleClick(event: MouseEvent, item: any): void {\n    event.stopPropagation(); // Prevents the event from bubbling up to parent elements\n    this.toggleCollapse(item);\n  }\n\n  protected handleMouseOver(e: MouseEvent, node: AXPWidgetNode) {\n    e.stopPropagation();\n    this.service.focus({ widget: node });\n  }\n}\n","<axp-designer-drawer-content>\n  <ax-title>Outline</ax-title>\n\n  <ax-content body>\n    @if (root().children?.length) {\n      <ul class=\"ax-space-y-1 ax-p-1 ax-text-white ax-text-sm\">\n        @for (node of root().children; track $index) {\n          <ng-container [ngTemplateOutlet]=\"sideMenu\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-container>\n        }\n      </ul>\n      <ng-template #sideMenu let-item>\n        <li (click)=\"handleClick($event, item)\" (mouseover)=\"handleMouseOver($event, item)\">\n          <div\n            [class.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          >\n            <span class=\"ax-w-5\">\n              @if (item.children?.length) {\n                <i\n                  class=\"fa-solid\"\n                  [class.fa-chevron-right]=\"isCollapsed(item)\"\n                  (click)=\"handleToggleClick($event, item)\"\n                  [class.fa-chevron-down]=\"!isCollapsed(item)\"\n                ></i>\n              }\n            </span>\n            @let config = getConfig(item);\n            <span class=\"ax-w-5\">\n              @if (config.icon) {\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                <i class=\"fa-light fa-plus hover:ax-text-primary-500\" (click)=\"service.showPicker(item)\"></i>\n              }\n              @if (config.name != 'page-layout') {\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              @for (child of item.children; track child) {\n                <ng-container [ngTemplateOutlet]=\"sideMenu\" [ngTemplateOutletContext]=\"{ $implicit: child }\">\n                </ng-container>\n              }\n            </ul>\n          }\n        </li>\n      </ng-template>\n    } @else {\n      <axp-state-message\n        icon=\"fa-light fa-shapes\"\n        [title]=\"'@layout-designer:components.outline.empty-states.no-widgets.title'\"\n        [description]=\"'@layout-designer:components.outline.empty-states.no-widgets.description'\"\n      >\n      </axp-state-message>\n    }\n  </ax-content>\n</axp-designer-drawer-content>\n","import { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXPLayoutDesignerDrawerContentComponent } from '../../../shared/drawer-content/drawer-content.component';\nimport { AXPDesignerService } from '../../../shared/designer.service';\n\n@Component({\n    selector: 'axp-designer-pages',\n    templateUrl: 'pages.component.html',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n    AXPWidgetCoreModule,\n    AXDecoratorModule,\n    AXButtonModule,\n    AXPLayoutDesignerDrawerContentComponent\n]\n})\n\nexport class AXPDesignerPagesComponent {\n\n    protected service = inject(AXPDesignerService);\n\n}","<axp-designer-drawer-content class=\"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","//#region ---- Hook keys ----\n\n/**\n * Distributed hooks for extending the layout designer header menu without coupling the designer library to feature modules.\n *\n * - {@link AXPLayoutDesignerHeaderMenuHookKeys.root}: top-level bar items (siblings of File, Edit, …).\n * - {@link AXPLayoutDesignerHeaderMenuHookKeys.submenu}: extra items inside a top-level menu (`file`, `edit`, `run`, `help`).\n */\nexport const AXPLayoutDesignerHeaderMenuHookKeys = {\n  root: 'layout-designer.header-menu.root',\n  submenu: 'layout-designer.header-menu.submenu',\n} as const;\n\n//#endregion\n\n//#region ---- Payload types ----\n\nexport type AXPLayoutDesignerHeaderParentMenuId = 'file' | 'edit' | 'run' | 'help';\n\nexport interface AXPLayoutDesignerHeaderMenuEntry {\n  id: string;\n  priority?: number;\n  /** i18n key (resolved by the menu host when set). */\n  labelKey?: string;\n  /** Plain label when no translation key is used. */\n  label?: string;\n  iconClass?: string;\n  run: () => void | Promise<void>;\n}\n\nexport interface AXPLayoutDesignerHeaderMenuRootPayload {\n  /** Current designer instance (typed as unknown to avoid circular imports in consumers). */\n  designer: unknown;\n  items: AXPLayoutDesignerHeaderMenuEntry[];\n}\n\nexport interface AXPLayoutDesignerHeaderMenuSubmenuPayload {\n  designer: unknown;\n  parentMenuId: AXPLayoutDesignerHeaderParentMenuId;\n  items: AXPLayoutDesignerHeaderMenuEntry[];\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPKeyboardShortcutPriority } from '@acorex/platform/contracts';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXKBDComponent, AXKBDItemComponent } from '@acorex/components/kbd';\nimport { AXMenuModule } from '@acorex/components/menu';\n\nimport { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, inject, OnInit, signal } from '@angular/core';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPHookService, AXPKeyboardShortcutRegistry, chordToKbdItemKeys } from '@acorex/platform/core';\nimport {\n  AXPLayoutDesignerHeaderMenuEntry,\n  AXPLayoutDesignerHeaderMenuHookKeys,\n  AXPLayoutDesignerHeaderMenuRootPayload,\n  AXPLayoutDesignerHeaderMenuSubmenuPayload,\n  AXPLayoutDesignerHeaderParentMenuId,\n} from '../../shared/layout-designer-header-menu.hooks';\nimport { AXPDesignerService } from '../../shared/designer.service';\n\n//#endregion\n\n/** Menu entry with optional pre-resolved translation label for templates. */\ninterface AXPLayoutDesignerHeaderMenuEntryResolved extends AXPLayoutDesignerHeaderMenuEntry {\n  resolvedLabel?: string;\n}\n\n@Component({\n  imports: [AXDecoratorModule, AXKBDComponent, AXKBDItemComponent, AXMenuModule],\n  selector: 'axp-designer-header-menu',\n  templateUrl: 'header-menu.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPDesignerHeaderMenuComponent implements OnInit {\n  //#region ---- Services & Dependencies ----\n\n  protected readonly service = inject(AXPDesignerService);\n  private readonly hooks = inject(AXPHookService);\n  private readonly translationService = inject(AXTranslationService);\n  private readonly shortcutRegistry = inject(AXPKeyboardShortcutRegistry);\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly elementRef = inject(ElementRef<HTMLElement>);\n\n  //#endregion\n\n  //#region ---- Lifecycle Methods ----\n\n  constructor() {\n    this.registerDesignerKeyboardShortcuts();\n  }\n\n  async ngOnInit(): Promise<void> {\n    const rootPayload = await this.hooks.runAsync<AXPLayoutDesignerHeaderMenuRootPayload>(\n      AXPLayoutDesignerHeaderMenuHookKeys.root,\n      { designer: this.service, items: [] },\n    );\n    rootPayload.items.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n    this.rootMenuContributions.set(await this.resolveMenuLabels(rootPayload.items));\n\n    const parents: AXPLayoutDesignerHeaderParentMenuId[] = ['file', 'edit', 'run', 'help'];\n    const map: Partial<Record<AXPLayoutDesignerHeaderParentMenuId, AXPLayoutDesignerHeaderMenuEntryResolved[]>> = {};\n    for (const parentMenuId of parents) {\n      const subPayload = await this.hooks.runAsync<AXPLayoutDesignerHeaderMenuSubmenuPayload>(\n        AXPLayoutDesignerHeaderMenuHookKeys.submenu,\n        { designer: this.service, parentMenuId, items: [] },\n      );\n      subPayload.items.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n      map[parentMenuId] = await this.resolveMenuLabels(subPayload.items);\n    }\n    this.submenuContributions.set(map);\n  }\n\n  //#endregion\n\n  //#region ---- Hook-driven menu contributions ----\n\n  protected readonly rootMenuContributions = signal<AXPLayoutDesignerHeaderMenuEntryResolved[]>([]);\n\n  protected readonly submenuContributions = signal<\n    Partial<Record<AXPLayoutDesignerHeaderParentMenuId, AXPLayoutDesignerHeaderMenuEntryResolved[]>>\n  >({});\n\n  //#endregion\n\n  //#region ---- UI Handlers ----\n\n  protected submenuFor(parent: AXPLayoutDesignerHeaderParentMenuId): AXPLayoutDesignerHeaderMenuEntryResolved[] {\n    return this.submenuContributions()[parent] ?? [];\n  }\n\n  protected runMenuEntry(entry: AXPLayoutDesignerHeaderMenuEntry): void {\n    void Promise.resolve(entry.run());\n  }\n\n  //#endregion\n\n  //#region ---- Utility Methods ----\n\n  private async resolveMenuLabels(\n    items: AXPLayoutDesignerHeaderMenuEntry[],\n  ): Promise<AXPLayoutDesignerHeaderMenuEntryResolved[]> {\n    return Promise.all(\n      items.map(async (e) => ({\n        ...e,\n        resolvedLabel: e.labelKey\n          ? await this.translationService.translateAsync(e.labelKey)\n          : e.label,\n      })),\n    );\n  }\n\n  protected shortcutKeys(chord: string): string[] {\n    return chordToKbdItemKeys(chord);\n  }\n\n  private registerDesignerKeyboardShortcuts(): void {\n    const scope = '@layout-designer:feature.title';\n    const base = {\n      owner: this.destroyRef,\n      elementRef: this.elementRef,\n      priority: AXPKeyboardShortcutPriority.Page,\n      scope,\n    } as const;\n\n    this.shortcutRegistry.register({\n      ...base,\n      id: 'designer-header-file',\n      shortcuts: [\n        {\n          keys: ['shift+n'],\n          title: '@layout-designer:keyboard-shortcuts.new',\n          group: '@layout-designer:keyboard-shortcuts.groups.file',\n          handler: (event) => {\n            if (this.isDesignerBodyTarget(event)) {\n              this.service.new();\n            }\n          },\n        },\n        {\n          keys: ['ctrl+s'],\n          title: '@layout-designer:keyboard-shortcuts.save',\n          group: '@layout-designer:keyboard-shortcuts.groups.file',\n          allowInEditableFields: true,\n          handler: () => {\n            void this.service.save();\n          },\n        },\n        {\n          keys: ['ctrl+shift+s'],\n          title: '@layout-designer:keyboard-shortcuts.save-as',\n          group: '@layout-designer:keyboard-shortcuts.groups.file',\n          allowInEditableFields: true,\n          handler: () => {\n            void this.service.saveAs();\n          },\n        },\n      ],\n    });\n\n    this.shortcutRegistry.register({\n      ...base,\n      id: 'designer-header-run',\n      shortcuts: [\n        {\n          keys: ['ctrl+r'],\n          title: '@layout-designer:keyboard-shortcuts.preview',\n          group: '@layout-designer:keyboard-shortcuts.groups.run',\n          allowInEditableFields: true,\n          handler: () => {\n            void this.service.openPreviewDialog();\n          },\n        },\n        {\n          keys: ['ctrl+shift+r'],\n          title: '@layout-designer:keyboard-shortcuts.preview-window',\n          group: '@layout-designer:keyboard-shortcuts.groups.run',\n          allowInEditableFields: true,\n          handler: () => {\n            void this.service.openPreviewWindow();\n          },\n        },\n      ],\n    });\n\n    this.shortcutRegistry.register({\n      ...base,\n      id: 'designer-header-delete',\n      when: () => this.service.canDelete(),\n      shortcuts: [\n        {\n          keys: ['delete'],\n          title: '@layout-designer:keyboard-shortcuts.delete-widget',\n          group: '@layout-designer:keyboard-shortcuts.groups.edit',\n          handler: () => this.service.removeWidget(),\n        },\n      ],\n    });\n\n    this.shortcutRegistry.register({\n      ...base,\n      id: 'designer-header-insert',\n      when: () => this.service.canInsert(),\n      shortcuts: [\n        {\n          keys: ['insert'],\n          title: '@layout-designer:keyboard-shortcuts.insert-widget',\n          group: '@layout-designer:keyboard-shortcuts.groups.edit',\n          handler: () => {\n            void this.service.showPicker();\n          },\n        },\n      ],\n    });\n\n    this.shortcutRegistry.register({\n      ...base,\n      id: 'designer-header-undo',\n      when: () => this.service.canUndo(),\n      shortcuts: [\n        {\n          keys: ['ctrl+z'],\n          title: '@layout-designer:keyboard-shortcuts.undo',\n          group: '@layout-designer:keyboard-shortcuts.groups.edit',\n          handler: (event) => {\n            if (this.isDesignerBodyTarget(event)) {\n              this.service.undo();\n            }\n          },\n        },\n      ],\n    });\n\n    this.shortcutRegistry.register({\n      ...base,\n      id: 'designer-header-redo',\n      when: () => this.service.canRedo(),\n      shortcuts: [\n        {\n          keys: ['ctrl+y'],\n          title: '@layout-designer:keyboard-shortcuts.redo',\n          group: '@layout-designer:keyboard-shortcuts.groups.edit',\n          handler: (event) => {\n            if (this.isDesignerBodyTarget(event)) {\n              this.service.redo();\n            }\n          },\n        },\n      ],\n    });\n\n    this.shortcutRegistry.register({\n      ...base,\n      id: 'designer-header-cut-copy',\n      when: () => this.service.canCutCopy(),\n      shortcuts: [\n        {\n          keys: ['ctrl+c'],\n          title: '@layout-designer:keyboard-shortcuts.copy',\n          group: '@layout-designer:keyboard-shortcuts.groups.edit',\n          handler: (event) => {\n            if (this.isDesignerBodyTarget(event)) {\n              this.service.copy();\n            }\n          },\n        },\n        {\n          keys: ['ctrl+d'],\n          title: '@layout-designer:keyboard-shortcuts.clone',\n          group: '@layout-designer:keyboard-shortcuts.groups.edit',\n          handler: (event) => {\n            if (this.isDesignerBodyTarget(event)) {\n              this.service.clone();\n            }\n          },\n        },\n        {\n          keys: ['ctrl+x'],\n          title: '@layout-designer:keyboard-shortcuts.cut',\n          group: '@layout-designer:keyboard-shortcuts.groups.edit',\n          handler: (event) => {\n            if (this.isDesignerBodyTarget(event)) {\n              this.service.cut();\n            }\n          },\n        },\n      ],\n    });\n\n    this.shortcutRegistry.register({\n      ...base,\n      id: 'designer-header-paste',\n      when: () => this.service.canPaste(),\n      shortcuts: [\n        {\n          keys: ['ctrl+v'],\n          title: '@layout-designer:keyboard-shortcuts.paste',\n          group: '@layout-designer:keyboard-shortcuts.groups.edit',\n          handler: (event) => {\n            if (this.isDesignerBodyTarget(event)) {\n              this.service.paste();\n            }\n          },\n        },\n      ],\n    });\n  }\n\n  private isDesignerBodyTarget(event: KeyboardEvent): boolean {\n    return event.target === document.body;\n  }\n\n  //#endregion\n}\n","<ax-menu [openOn]=\"'hover'\" [hasArrow]=\"false\">\n  <ax-menu-item>\n    <ax-text>File</ax-text>\n    <ax-menu-item (onClick)=\"service.new()\">\n      <ax-text>New</ax-text>\n      <ax-suffix>\n        <ax-kbd class=\"look-text\">\n          <ax-kbd-item [keys]=\"shortcutKeys('shift+n')\"></ax-kbd-item>\n        </ax-kbd>\n      </ax-suffix>\n    </ax-menu-item>\n    <ax-divider></ax-divider>\n    @if(service.canSave())\n    {\n    <ng-container>\n      <ax-menu-item (onClick)=\"service.save()\">\n        <ax-text>Save</ax-text>\n        <ax-suffix>\n          <ax-kbd class=\"look-text\">\n            <ax-kbd-item [keys]=\"shortcutKeys('ctrl+s')\"></ax-kbd-item>\n          </ax-kbd>\n        </ax-suffix>\n      </ax-menu-item>\n      <ax-menu-item (onClick)=\"service.saveAs()\">\n        <ax-text>Save As...</ax-text>\n        <ax-suffix>\n          <ax-kbd class=\"look-text\">\n            <ax-kbd-item [keys]=\"shortcutKeys('ctrl+shift+s')\"></ax-kbd-item>\n          </ax-kbd>\n        </ax-suffix>\n      </ax-menu-item>\n      <ax-divider></ax-divider>\n    </ng-container>\n    }\n    <ax-menu-item>\n      <ax-text>Export</ax-text>\n      <ax-menu-item (onClick)=\"service.downloadJson()\">\n        <ax-text>Download JSON</ax-text>\n      </ax-menu-item>\n    </ax-menu-item>\n    <ax-menu-item>\n      <ax-text>Import</ax-text>\n      <ax-menu-item (onClick)=\"service.importJSon()\">\n        <ax-text>Import JSON</ax-text>\n      </ax-menu-item>\n    </ax-menu-item>\n    @for (item of submenuFor('file'); track item.id) {\n      <ax-menu-item (onClick)=\"runMenuEntry(item)\">\n        @if (item.iconClass) {\n          <ax-prefix>\n            <ax-icon>\n              <i [class]=\"item.iconClass\"></i>\n            </ax-icon>\n          </ax-prefix>\n        }\n        @if (item.resolvedLabel) {\n          <ax-text>{{ item.resolvedLabel }}</ax-text>\n        }\n      </ax-menu-item>\n    }\n  </ax-menu-item>\n  <ax-menu-item>\n    <ax-text>Edit</ax-text>\n    <ax-menu-item [disabled]=\"!service.canUndo()\" (onClick)=\"service.undo()\">\n      <ax-text>Undo</ax-text>\n      <ax-prefix>\n        <ax-icon>\n          <i class=\"fa-solid fa-rotate-left\"></i>\n        </ax-icon>\n      </ax-prefix>\n      <ax-suffix>\n        <ax-kbd class=\"look-text\">\n          <ax-kbd-item [keys]=\"shortcutKeys('ctrl+z')\"></ax-kbd-item>\n        </ax-kbd>\n      </ax-suffix>\n    </ax-menu-item>\n    <ax-menu-item [disabled]=\"!service.canRedo()\" (onClick)=\"service.redo()\">\n      <ax-text>Redo</ax-text>\n      <ax-prefix>\n        <ax-icon>\n          <i class=\"fa-solid fa-rotate-right\"></i>\n        </ax-icon>\n      </ax-prefix>\n      <ax-suffix>\n        <ax-kbd class=\"look-text\">\n          <ax-kbd-item [keys]=\"shortcutKeys('ctrl+y')\"></ax-kbd-item>\n        </ax-kbd>\n      </ax-suffix>\n    </ax-menu-item>\n    <ax-divider></ax-divider>\n    <ax-menu-item [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-kbd class=\"look-text\">\n          <ax-kbd-item [keys]=\"shortcutKeys('ctrl+d')\"></ax-kbd-item>\n        </ax-kbd>\n      </ax-suffix>\n    </ax-menu-item>\n    <ax-menu-item [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.cut()\">\n      <ax-text>Cut</ax-text>\n      <ax-prefix>\n        <ax-icon>\n          <i class=\"fa-solid fa-cut\"></i>\n        </ax-icon>\n      </ax-prefix>\n      <ax-suffix>\n        <ax-kbd class=\"look-text\">\n          <ax-kbd-item [keys]=\"shortcutKeys('ctrl+x')\"></ax-kbd-item>\n        </ax-kbd>\n      </ax-suffix>\n    </ax-menu-item>\n    <ax-menu-item [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.copy()\">\n      <ax-text>Copy</ax-text>\n      <ax-prefix>\n        <ax-icon>\n          <i class=\"fa-solid fa-copy\"></i>\n        </ax-icon>\n      </ax-prefix>\n      <ax-suffix>\n        <ax-kbd class=\"look-text\">\n          <ax-kbd-item [keys]=\"shortcutKeys('ctrl+c')\"></ax-kbd-item>\n        </ax-kbd>\n      </ax-suffix>\n    </ax-menu-item>\n    <ax-menu-item [disabled]=\"!service.canPaste()\" (onClick)=\"service.paste()\">\n      <ax-text>Paste</ax-text>\n      <ax-prefix>\n        <ax-icon>\n          <i class=\"fa-solid fa-paste\"></i>\n        </ax-icon>\n      </ax-prefix>\n      <ax-suffix>\n        <ax-kbd class=\"look-text\">\n          <ax-kbd-item [keys]=\"shortcutKeys('ctrl+v')\"></ax-kbd-item>\n        </ax-kbd>\n      </ax-suffix>\n    </ax-menu-item>\n    <ax-divider></ax-divider>\n    <ax-menu-item [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-kbd class=\"look-text\">\n          <ax-kbd-item [keys]=\"shortcutKeys('delete')\"></ax-kbd-item>\n        </ax-kbd>\n      </ax-suffix>\n    </ax-menu-item>\n    @for (item of submenuFor('edit'); track item.id) {\n      <ax-menu-item (onClick)=\"runMenuEntry(item)\">\n        @if (item.iconClass) {\n          <ax-prefix>\n            <ax-icon>\n              <i [class]=\"item.iconClass\"></i>\n            </ax-icon>\n          </ax-prefix>\n        }\n        @if (item.resolvedLabel) {\n          <ax-text>{{ item.resolvedLabel }}</ax-text>\n        }\n      </ax-menu-item>\n    }\n  </ax-menu-item>\n  <ax-menu-item>\n    <ax-text>Run</ax-text>\n    <ax-menu-item (onClick)=\"service.openPreviewDialog()\">\n      <ax-text>Preview</ax-text>\n      <ax-prefix>\n      </ax-prefix>\n      <ax-suffix>\n        <ax-kbd class=\"look-text\">\n          <ax-kbd-item [keys]=\"shortcutKeys('ctrl+r')\"></ax-kbd-item>\n        </ax-kbd>\n      </ax-suffix>\n    </ax-menu-item>\n    <ax-menu-item (onClick)=\"service.openPreviewWindow()\">\n      <ax-text>Preview in seperate window</ax-text>\n      <ax-prefix> </ax-prefix>\n      <ax-suffix>\n        <ax-kbd class=\"look-text\">\n          <ax-kbd-item [keys]=\"shortcutKeys('ctrl+shift+r')\"></ax-kbd-item>\n        </ax-kbd>\n      </ax-suffix>\n    </ax-menu-item>\n    @for (item of submenuFor('run'); track item.id) {\n      <ax-menu-item (onClick)=\"runMenuEntry(item)\">\n        @if (item.iconClass) {\n          <ax-prefix>\n            <ax-icon>\n              <i [class]=\"item.iconClass\"></i>\n            </ax-icon>\n          </ax-prefix>\n        }\n        @if (item.resolvedLabel) {\n          <ax-text>{{ item.resolvedLabel }}</ax-text>\n        }\n      </ax-menu-item>\n    }\n  </ax-menu-item>\n  <ax-menu-item>\n    <ax-text>Help</ax-text>\n    <ax-menu-item>\n      <ax-text>About</ax-text>\n    </ax-menu-item>\n    @for (item of submenuFor('help'); track item.id) {\n      <ax-menu-item (onClick)=\"runMenuEntry(item)\">\n        @if (item.iconClass) {\n          <ax-prefix>\n            <ax-icon>\n              <i [class]=\"item.iconClass\"></i>\n            </ax-icon>\n          </ax-prefix>\n        }\n        @if (item.resolvedLabel) {\n          <ax-text>{{ item.resolvedLabel }}</ax-text>\n        }\n      </ax-menu-item>\n    }\n  </ax-menu-item>\n  @for (item of rootMenuContributions(); track item.id) {\n    <ax-menu-item (onClick)=\"runMenuEntry(item)\">\n      @if (item.iconClass) {\n        <ax-prefix>\n          <ax-icon>\n            <i [class]=\"item.iconClass\"></i>\n          </ax-icon>\n        </ax-prefix>\n      }\n      @if (item.resolvedLabel) {\n        <ax-text>{{ item.resolvedLabel }}</ax-text>\n      }\n    </ax-menu-item>\n  }\n</ax-menu>\n","import { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXMenuModule } from '@acorex/components/menu';\n\nimport { Component, model } from '@angular/core';\n\n@Component({\n  selector: 'axp-designer-view-sizes',\n  imports: [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 { AXPWidgetConfig } from '@acorex/platform/layout/widget-core-contracts';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, HostBinding, inject, input, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { AXPDesignerBoardComponent } from './components/board/board.component';\nimport { AXPDesignerBreadcrumbsComponent } from './components/breadcrumbs/breadcrumbs.component';\nimport { AXPDesignerDataSourcesComponent } from './components/drawers/data-sources/data-sources.component';\nimport { AXPDesignerHistoryComponent } from './components/drawers/history/history.component';\nimport { AXPDesignerOutlineComponent } from './components/drawers/outline/outline.component';\nimport { AXPDesignerPagesComponent } from './components/drawers/pages/pages.component';\nimport { AXPDesignerHeaderMenuComponent } from './components/header-menu/header-menu.component';\nimport { AXPDesignerViewSizeToolbarComponent } from './components/size-mode/view-size-toolbar.component';\nimport { AXPDesignerService } from './shared/designer.service';\nimport { AXPTemplateLoadingStrategy } from './shared/designer.types';\nimport { AXPWidgetPropertyViewerComponent } from '@acorex/platform/layout/components';\nimport { AXTranslationModule } from '@acorex/core/translation';\n\n@Component({\n  selector: 'axp-layout-designer',\n  templateUrl: './designer.component.html',\n  styleUrl: './designer.component.scss',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    CommonModule,\n    AXPWidgetCoreModule,\n    AXPDesignerBoardComponent,\n    AXPWidgetPropertyViewerComponent,\n    AXPDesignerBreadcrumbsComponent,\n    AXPDesignerOutlineComponent,\n    AXPDesignerHeaderMenuComponent,\n    AXPDesignerHistoryComponent,\n    AXPDesignerDataSourcesComponent,\n    AXPDesignerPagesComponent,\n    AXPDesignerViewSizeToolbarComponent,\n    AXTabsModule,\n    AXButtonModule,\n    AXDrawerModule,\n    AXDecoratorModule,\n    AXMenuModule,\n    AXButtonGroupModule,\n    AXDropdownModule,\n    AXDropdownButtonModule,\n    AXTranslationModule,\n  ],\n  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/images/logos/icon-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 mode=\"split\" look=\"solid\" text=\"Preview\" class=\"ax-sm\"\n            (onClick)=\"service.openPreviewDialog()\">\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-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 class=\"ax-flex ax-flex-col ax-h-full ax-overflow-hidden \">\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 | translate | async }}</span>\n        </div>\n      </div>\n      <axp-widget-property-viewer [mode]=\"'advanced'\" [widget]=\"service.selectedNode()!\"\n        (onChanged)=\"service.update({ values: $event.values, mode: $event.mode })\" class=\"ax-flex-1 ax-overflow-auto\">\n      </axp-widget-property-viewer>\n    </ax-content>\n  </ax-drawer>\n</ax-drawer-container>","\nimport { AXPContextChangeEvent, type AXPWidgetNode, AXPWidgetsCatalog } from '@acorex/platform/contracts';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\n\nimport { Component, computed, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { AXPDesignerConnector, AXPDesignerMessageKeys, AXPDesignerPreviewMessage } from '../designer';\n\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: [AXPWidgetCoreModule],\n  providers: [AXUnsubscriber],\n})\nexport class AXPLayoutDesignerPreviewViewerComponent {\n  protected context: any = {};\n\n  protected readonly document = signal({ type: AXPWidgetsCatalog.document } as AXPWidgetNode);\n  protected readonly currentPageIndex = signal(0);\n  protected connector = inject(AXPDesignerConnector);\n  protected eventService = inject(AXPBroadcastEventService);\n  protected unsubscriber = inject(AXUnsubscriber);\n\n  protected readonly currentPage = computed(() => {\n    return (\n      this.document().children?.[this.currentPageIndex()] ?? ({ type: AXPWidgetsCatalog.pageLayout } as AXPWidgetNode)\n    );\n  });\n\n  constructor() {\n    this.eventService\n      .listen<AXPDesignerPreviewMessage>(AXPDesignerMessageKeys.Preview)\n      .pipe(this.unsubscriber.takeUntilDestroy)\n      .subscribe((event) => {\n        this.document.set(event.data.document);\n      })\n    //\n    if (document.body.parentElement) {\n      document.body.parentElement.classList.remove('ax-dark');\n      document.body.parentElement.style.backgroundColor = 'unset';\n      document.body.style.backgroundColor = 'unset';\n    }\n  }\n\n  ngAfterViewInit() {\n    this.eventService.publish(AXPDesignerMessageKeys.Loaded)\n  }\n\n  protected handleContextChanged(e: AXPContextChangeEvent) {\n    this.context = e.data;\n    this.eventService.publish(AXPDesignerMessageKeys.ContextChanged, this.context)\n  }\n\n  ngOnDestroy(): void {\n    this.eventService.unsubscribe(AXPDesignerMessageKeys.Preview);\n\n  }\n}\n","import { AXSafePipe } from '@acorex/core/pipes';\nimport { Component, computed, HostBinding, input, ViewEncapsulation } 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, AXPSettingsService } from '@acorex/platform/common';\nimport { AXPPlatformScope } from '@acorex/platform/contracts';\n\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    AXButtonModule,\n    AXButtonGroupModule,\n    AXDrawerModule,\n    AXDecoratorModule,\n    AXJsonViewerModule,\n    AXPLayoutDesignerPreviewFrameComponent,\n    AXPDesignerViewSizeToolbarComponent\n  ]\n})\nexport class AXPLayoutDesignerPreviewComponent extends AXBasePageComponent {\n  protected clipboard = inject(AXPClipBoardService);\n  protected settings = inject(AXPSettingsService);\n  protected eventService = inject(AXPBroadcastEventService);\n\n  protected initialSize: string = 'xl';\n  protected isDialogWindow: boolean = false;\n\n  private jsonSettingsKey = 'forms:preview:json';\n  protected jsonViewCollapsed = signal(true);\n\n  protected size = signal<string>(this.initialSize);\n\n  protected context = signal<any>({});\n\n  constructor() {\n    super();\n    //\n    this.eventService.listen(AXPDesignerMessageKeys.ContextChanged).subscribe((event) => {\n      this.context.set(event.data);\n    });\n  }\n\n  protected override async ngOnInit() {\n    this.size.set(this.initialSize);\n    const settingValue = await this.settings.get<boolean>(this.jsonSettingsKey);\n    this.jsonViewCollapsed.set(!settingValue);\n  }\n\n  protected handleCloseButton() {\n    if (this.isDialogWindow) {\n      this.close();\n    } else {\n      window.opener.focus();\n      window.close();\n    }\n  }\n\n  protected handlePreviewWindow() {\n    this.eventService.publish(AXPDesignerMessageKeys.PreviewWindow)\n    this.close();\n  }\n\n  protected handleCopyJson() {\n    this.clipboard.copy('Json Data', JSON.stringify(this.context()));\n  }\n\n  protected async handleCollapsedChange(value: boolean) {\n    await this.settings.scope(AXPPlatformScope.User).set<boolean>(this.jsonSettingsKey, !value);\n  }\n}\n","<ax-drawer-container class=\"ax-dark 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","i4","i7","i3","merge","i5","i6"],"mappings":"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"}