@acorex/platform 21.0.0-next.34 → 21.0.0-next.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/acorex-platform-common.mjs +19 -1
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +11 -172
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +7 -8
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-components.mjs +39 -29
- package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-designer.mjs +8 -9
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +468 -255
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +171 -86
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-widget-core.mjs +36 -13
- package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-file-list-popup.component-9uCkMxcc.mjs → acorex-platform-layout-widgets-file-list-popup.component-CDYAGBku.mjs} +5 -60
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CDYAGBku.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-widgets.mjs +101 -128
- package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-default.mjs +16 -4
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/acorex-platform-workflow.mjs +25 -5
- package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
- package/package.json +1 -1
- package/types/acorex-platform-common.d.ts +11 -6
- package/types/acorex-platform-core.d.ts +56 -101
- package/types/acorex-platform-layout-builder.d.ts +0 -1
- package/types/acorex-platform-layout-components.d.ts +4 -3
- package/types/acorex-platform-layout-designer.d.ts +1 -1
- package/types/acorex-platform-layout-entity.d.ts +36 -30
- package/types/acorex-platform-layout-views.d.ts +31 -29
- package/types/acorex-platform-layout-widget-core.d.ts +30 -14
- package/types/acorex-platform-layout-widgets.d.ts +17 -11
- package/types/acorex-platform-themes-default.d.ts +1 -0
- package/types/acorex-platform-workflow.d.ts +28 -51
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-9uCkMxcc.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-layout-builder.mjs","sources":["../../../../libs/platform/layout/builder/src/lib/layout-conversion.service.ts","../../../../libs/platform/layout/builder/src/lib/layout-builder.service.ts","../../../../libs/platform/layout/builder/src/lib/layout-renderer.component.ts","../../../../libs/platform/layout/builder/src/lib/preview-widget-field.command.key.ts","../../../../libs/platform/layout/builder/src/lib/layout-builder.module.ts","../../../../libs/platform/layout/builder/src/lib/layout-builder.types.ts","../../../../libs/platform/layout/builder/src/lib/dialog-renderer.component.ts","../../../../libs/platform/layout/builder/src/lib/preview-widget-field.command.ts","../../../../libs/platform/layout/builder/src/acorex-platform-layout-builder.ts"],"sourcesContent":["import { AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport {\n AXPDynamicFormDefinition,\n AXPDynamicFormFieldDefinition,\n AXPDynamicFormGroupDefinition,\n AXPDynamicFormMode,\n} from './layout-builder.types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPLayoutConversionService {\n //#region ---- Caching ----\n\n private widgetTreeCache = new Map<string, AXPWidgetNode>();\n private formDefinitionCache = new Map<string, AXPDynamicFormDefinition>();\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Convert AXPDynamicFormDefinition to AXPWidgetNode tree structure\n * Groups become Fieldset Layouts with Form Field widgets as children\n * Fields become Form Field widgets with Editor widgets as children\n */\n convertFormDefinition(formDefinition: AXPDynamicFormDefinition): AXPWidgetNode {\n // Create cache key based on form definition content\n const cacheKey = this.createFormDefinitionCacheKey(formDefinition);\n\n // Check cache first\n if (this.widgetTreeCache.has(cacheKey)) {\n return this.widgetTreeCache.get(cacheKey)!;\n }\n\n // Generate widget tree\n const widgetTree: AXPWidgetNode = {\n type: 'grid-layout',\n name: 'dynamic-form-container',\n mode: formDefinition.mode, // Preserve form-level mode\n options: {\n title: 'Dynamic Form',\n grid: {\n default: {\n columns: 1,\n gap: '1rem',\n },\n },\n },\n children: formDefinition.groups.map((group) => this.createGroupAsFieldsetWidget(group, formDefinition.mode)),\n };\n\n // Cache the result\n this.widgetTreeCache.set(cacheKey, widgetTree);\n\n return widgetTree;\n }\n\n /**\n * Convert AXPWidgetNode tree back to AXPDynamicFormDefinition\n * Parses Fieldset Layouts back to Groups\n * Parses Form Field widgets back to Fields\n */\n convertWidgetTreeToFormDefinition(widgetTree: AXPWidgetNode): AXPDynamicFormDefinition {\n // Create cache key based on widget tree content\n const cacheKey = this.createWidgetTreeCacheKey(widgetTree);\n\n // Check cache first\n if (this.formDefinitionCache.has(cacheKey)) {\n return this.formDefinitionCache.get(cacheKey)!;\n }\n\n // Parse widget tree\n const groups: AXPDynamicFormGroupDefinition[] = [];\n\n if (widgetTree.children) {\n widgetTree.children.forEach((child) => {\n if (child.type === 'fieldset-layout') {\n const group = this.extractGroupFromFieldset(child);\n groups.push(group);\n }\n });\n }\n\n const formDefinition = { groups };\n\n // Cache the result\n this.formDefinitionCache.set(cacheKey, formDefinition);\n\n return formDefinition;\n }\n\n /**\n * Validate that a widget tree represents a valid dynamic form structure\n */\n validateFormWidgetTree(widgetTree: AXPWidgetNode): boolean {\n if (!widgetTree || widgetTree.type !== 'grid-layout') {\n return false;\n }\n\n if (!widgetTree.children || widgetTree.children.length === 0) {\n return true; // Empty form is valid\n }\n\n // Check that all children are fieldset-layout widgets\n return widgetTree.children.every(\n (child) =>\n child.type === 'fieldset-layout' &&\n child.children &&\n child.children.every(\n (formField) => formField.type === 'form-field' && formField.children && formField.children.length > 0,\n ),\n );\n }\n\n /**\n * Clear all caches\n */\n clearCaches(): void {\n this.widgetTreeCache.clear();\n this.formDefinitionCache.clear();\n }\n\n /**\n * Get cache statistics\n */\n getCacheStats(): { widgetTreeCacheSize: number; formDefinitionCacheSize: number } {\n return {\n widgetTreeCacheSize: this.widgetTreeCache.size,\n formDefinitionCacheSize: this.formDefinitionCache.size,\n };\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n /**\n * Convert a single group to Fieldset widget structure\n */\n private createGroupAsFieldsetWidget(group: AXPDynamicFormGroupDefinition, formMode?: AXPDynamicFormMode): AXPWidgetNode {\n // Determine columns count from layout or default to 1\n const columnsCount = 1;\n // Use group mode if set, otherwise inherit from form mode\n const groupMode = group.mode || formMode;\n\n return {\n type: 'fieldset-layout',\n name: group.name,\n mode: groupMode,\n options: {\n title: group.title,\n description: group.description,\n cols: columnsCount,\n look: group.look || 'container', // Default to 'container' if not specified\n },\n children: this.createFieldWidgets(group.parameters, columnsCount, groupMode),\n };\n }\n\n /**\n * Convert fields to Form Field widgets\n */\n private createFieldWidgets(fields: AXPDynamicFormFieldDefinition[], columnsCount: number, groupMode?: AXPDynamicFormMode): AXPWidgetNode[] {\n return fields.map((field) => this.createFormFieldWidget(field, groupMode));\n }\n\n /**\n * Convert a single field to Form Field widget with editor as child\n */\n private createFormFieldWidget(field: AXPDynamicFormFieldDefinition, groupMode?: AXPDynamicFormMode): AXPWidgetNode {\n // Use field mode if set, otherwise inherit from group mode\n const fieldMode = field.mode || groupMode;\n\n // Ensure the editor widget also has the mode set\n const editorWidget = { ...field.widget };\n if (!editorWidget.mode) {\n editorWidget.mode = fieldMode;\n }\n\n return {\n type: 'form-field',\n name: field.path,\n mode: fieldMode,\n options: {\n label: field.title,\n badge: field.badge,\n description: field.description,\n showLabel: true,\n },\n children: [editorWidget], // The editor widget becomes a child of form-field\n };\n }\n\n /**\n * Extract group information from Fieldset Layout widget\n */\n private extractGroupFromFieldset(fieldsetNode: AXPWidgetNode): AXPDynamicFormGroupDefinition {\n const columnsCount = fieldsetNode.options?.['cols'] || 1;\n\n // Extract fields directly from fieldset children\n const fields: AXPDynamicFormFieldDefinition[] = [];\n\n if (fieldsetNode.children) {\n fieldsetNode.children.forEach((formField) => {\n if (formField.type === 'form-field' && formField.children && formField.children.length > 0) {\n const field = this.extractFieldFromFormWidget(formField);\n if (field) {\n fields.push(field);\n }\n }\n });\n }\n\n return {\n name: fieldsetNode.name || `group-${Date.now()}`,\n title: fieldsetNode.options?.['title'],\n description: fieldsetNode.options?.['description'],\n parameters: fields,\n mode: fieldsetNode.mode as AXPDynamicFormMode | undefined,\n look: fieldsetNode.options?.['look'] as 'fieldset' | 'card' | 'group' | 'container',\n };\n }\n\n /**\n * Extract field information from Form Field widget\n */\n private extractFieldFromFormWidget(formFieldNode: AXPWidgetNode): AXPDynamicFormFieldDefinition | null {\n if (!formFieldNode.children || formFieldNode.children.length === 0) {\n return null;\n }\n\n const editorWidget = formFieldNode.children[0];\n\n return {\n path: formFieldNode.name || editorWidget.name || `field-${Date.now()}`,\n title: formFieldNode.options?.['label'],\n badge: formFieldNode.options?.['badge'],\n description: formFieldNode.options?.['description'],\n widget: editorWidget,\n mode: formFieldNode.mode as AXPDynamicFormMode,\n };\n }\n\n /**\n * Create cache key for form definition\n */\n private createFormDefinitionCacheKey(formDefinition: AXPDynamicFormDefinition): string {\n // Create a hash-like key instead of full JSON string\n const keyParts: string[] = [];\n\n keyParts.push(`groups:${formDefinition.groups.length}`);\n\n formDefinition.groups.forEach((group, groupIndex) => {\n // Include group.mode so view vs edit (or mixed) layouts do not share a cached widget tree.\n const groupModePart = group.mode ?? '_';\n keyParts.push(`g${groupIndex}:${group.name}:${group.parameters.length}:${groupModePart}`);\n keyParts.push(`gL${groupIndex}:${JSON.stringify(group.title ?? null)}:${JSON.stringify(group.description ?? null)}`);\n\n group.parameters.forEach((param, paramIndex) => {\n // Field mode must be part of the key; otherwise metadata forms that only differ by\n // view/edit (same paths and widget types) incorrectly reuse the first cached tree.\n const fieldModePart = param.mode ?? '_';\n keyParts.push(`p${groupIndex}.${paramIndex}:${param.path}:${param.widget.type}:${fieldModePart}`);\n keyParts.push(\n `pL${groupIndex}.${paramIndex}:${JSON.stringify(param.title ?? null)}:${JSON.stringify(param.description ?? null)}:${JSON.stringify(param.badge ?? null)}`,\n );\n });\n });\n\n if (formDefinition.mode) {\n keyParts.push(`mode:${formDefinition.mode}`);\n }\n\n // Join with delimiter and create a shorter hash\n const keyString = keyParts.join('|');\n\n // If still too long, create a simple hash\n if (keyString.length > 100) {\n return this.createSimpleHash(keyString);\n }\n\n return keyString;\n }\n\n /**\n * Create cache key for widget tree\n */\n private createWidgetTreeCacheKey(widgetTree: AXPWidgetNode): string {\n // Create a hash-like key instead of full JSON string\n const keyParts: string[] = [];\n\n keyParts.push(`type:${widgetTree.type}`);\n\n if (widgetTree.name) {\n keyParts.push(`name:${widgetTree.name}`);\n }\n\n if (widgetTree.children) {\n keyParts.push(`children:${widgetTree.children.length}`);\n\n widgetTree.children.forEach((child, index) => {\n keyParts.push(`c${index}:${child.type}`);\n\n if (child.children) {\n keyParts.push(`cc${index}:${child.children.length}`);\n\n child.children.forEach((grandChild, gIndex) => {\n keyParts.push(`gc${index}.${gIndex}:${grandChild.type}`);\n\n if (grandChild.children) {\n keyParts.push(`gcc${index}.${gIndex}:${grandChild.children.length}`);\n }\n });\n }\n });\n }\n\n // Join with delimiter and create a shorter hash\n const keyString = keyParts.join('|');\n\n // If still too long, create a simple hash\n if (keyString.length > 100) {\n return this.createSimpleHash(keyString);\n }\n\n return keyString;\n }\n\n /**\n * Create a simple hash from a string\n */\n private createSimpleHash(str: string): string {\n let hash = 0;\n if (str.length === 0) return hash.toString();\n\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n\n return Math.abs(hash).toString(36); // Convert to base36 for shorter string\n }\n\n //#endregion\n}\n","import { AXPopupService } from '@acorex/components/popup';\nimport { AXPActionMenuItem, AXPGridLayoutOptions } from '@acorex/platform/core';\n\nimport { AXPWidgetNode, AXPWidgetRenderMode, AXPWidgetSerializationHelper } from '@acorex/platform/layout/widget-core';\nimport { Injectable, inject } from '@angular/core';\nimport { cloneDeep, isNil, set } from 'lodash-es';\nimport {\n AXPDialogContainerOptions,\n AXPDialogRef,\n AXPDynamicFormDefinition,\n AXPFieldsetContainerOptions,\n AXPFlexContainerOptions,\n AXPFormFieldOptions,\n // Container options\n AXPGridContainerOptions,\n AXPListWidgetOptions,\n AXPPageContainerOptions,\n AXPPanelContainerOptions,\n AXPStepDefinition,\n AXPStepWizardDefinition,\n AXPStepWizardGuardPayload,\n AXPStepWizardStatus,\n AXPTabsetContainerOptions,\n AXPWidgetNodeExtendedProperties,\n AXPWizardActions,\n ColorBoxOptions,\n DateTimeBoxOptions,\n DialogBuilderState,\n IActionBuilder,\n IDialogBuilder,\n IFieldsetContainerBuilder,\n IFlexContainerBuilder,\n IFormFieldBuilder,\n IGridContainerBuilder,\n ILayoutBuilder,\n IListWidgetBuilder,\n IPageContainerBuilder,\n IPanelContainerBuilder,\n IStepWizardBuilder,\n ITabsetContainerBuilder,\n IWidgetBuilder,\n // Inheritance context\n InheritanceContext,\n InheritedProperties,\n LargeTextBoxOptions,\n LayoutBuilderState,\n LookupBoxOptions,\n NumberBoxOptions,\n PasswordBoxOptions,\n RichTextOptions,\n SelectBoxOptions,\n SelectionListOptions,\n TextBoxOptions,\n ToggleSwitchOptions,\n WidgetBuilderState,\n} from './layout-builder.types';\nimport { AXPLayoutConversionService } from './layout-conversion.service';\n\n//#region ---- Inheritance Utilities ----\n\n/**\n * Resolves inherited properties from context and local values\n */\nfunction resolveInheritedProperties(\n context: InheritanceContext,\n localValues: Partial<InheritanceContext> = {},\n): InheritedProperties {\n return {\n mode: localValues.mode ?? context.mode ?? 'edit',\n disabled: localValues.disabled ?? context.disabled,\n readonly: localValues.readonly ?? context.readonly,\n direction: localValues.direction ?? context.direction,\n visible: localValues.visible ?? context.visible,\n };\n}\n\n/**\n * Merges inheritance context with local overrides\n */\nfunction mergeInheritanceContext(\n parentContext: InheritanceContext,\n localOverrides: Partial<InheritanceContext> = {},\n): InheritanceContext {\n return {\n ...parentContext,\n ...localOverrides,\n };\n}\n\n/**\n * Generates a random string for path/name generation\n */\nfunction generateRandomId(): string {\n return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n}\n\n/**\n * Converts label to a valid path/name\n */\nfunction labelToPath(label: string): string {\n return label\n .toLowerCase()\n .replace(/[^a-z0-9\\s]/g, '') // Remove special characters\n .replace(/\\s+/g, '_') // Replace spaces with underscores\n .substring(0, 50); // Limit length\n}\n\n/**\n * Generates path for value widgets based on hierarchy\n */\nfunction generateValueWidgetPath(widgetName?: string, formFieldName?: string, formFieldLabel?: string): string {\n // Priority: widget name -> form field name -> generated from label -> random\n if (widgetName) {\n return widgetName;\n }\n\n if (formFieldName) {\n return formFieldName;\n }\n\n if (formFieldLabel) {\n return labelToPath(formFieldLabel);\n }\n\n return generateRandomId();\n}\n\n/**\n * Collects default values from widget node tree and merges them into context\n * Only sets values for paths that don't already exist in the context\n * @param node - The widget node to process\n * @param context - The context object to modify in place (cloned at top level only)\n * @param isTopLevel - Internal flag to track if this is the top-level call\n */\nfunction collectDefaultValues(node: AXPWidgetNode, context: any = {}, isTopLevel: boolean = true): any {\n // Clone context only at the top level, then modify in place for recursive calls\n const result = isTopLevel ? cloneDeep(context) : context;\n\n // Check if this node has a defaultValue and a path\n // Note: We check for both node.defaultValue and also look in node.options.defaultValue as fallback\n const defaultValue = node.defaultValue !== undefined ? node.defaultValue : (node.options as any)?.defaultValue;\n\n if (defaultValue !== undefined && !isNil(defaultValue) && node.path) {\n // Check if path exists in context using lodash get equivalent check\n const currentValue = getNestedValue(result, node.path);\n if (currentValue === undefined) {\n // Clone the defaultValue to avoid reference issues (especially for Date objects)\n const clonedValue = defaultValue instanceof Date ? new Date(defaultValue.getTime()) : cloneDeep(defaultValue);\n set(result, node.path, clonedValue);\n }\n }\n\n // Recursively process children - pass result object to accumulate values in place\n if (node.children && Array.isArray(node.children)) {\n for (const child of node.children) {\n collectDefaultValues(child, result, false);\n }\n }\n\n return result;\n}\n\n/**\n * Gets a nested value from an object using dot notation path\n */\nfunction getNestedValue(obj: any, path: string): any {\n const keys = path.split('.');\n let current = obj;\n for (const key of keys) {\n if (current === undefined || current === null || typeof current !== 'object') {\n return undefined;\n }\n current = current[key];\n }\n return current;\n}\n\n//#endregion\n\n//#region ---- Service Implementation ----\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPLayoutBuilderService {\n private popupService = inject(AXPopupService);\n\n /**\n * Create a new layout builder\n */\n create(): ILayoutBuilder {\n return new LayoutBuilder(this.popupService);\n }\n}\n\n//#endregion\n\n//#region ---- Layout Builder Implementation ----\n\n/**\n * Main layout builder - Single Responsibility: Layout orchestration\n * Open/Closed: Extensible through container delegates\n */\nclass LayoutBuilder implements ILayoutBuilder {\n private root: AXPWidgetNode = {\n children: [],\n mode: 'edit',\n type: 'flex-layout',\n };\n\n private inheritanceContext: InheritanceContext = {\n mode: 'edit',\n };\n\n constructor(private popupService?: AXPopupService) { }\n\n // Predefined layout containers at root level - delegate pattern required\n grid(delegate: (container: IGridContainerBuilder) => void): ILayoutBuilder {\n const container = new GridContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n //this.state.children!.push(container.build());\n this.root = container.build();\n return this;\n }\n\n flex(delegate: (container: IFlexContainerBuilder) => void): ILayoutBuilder {\n const container = new FlexContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.root.children!.push(container.build());\n return this;\n }\n\n panel(delegate: (container: IPanelContainerBuilder) => void): ILayoutBuilder {\n const container = new PanelContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.root.children!.push(container.build());\n return this;\n }\n\n page(delegate: (container: IPageContainerBuilder) => void): ILayoutBuilder {\n const container = new PageContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.root.children!.push(container.build());\n return this;\n }\n\n tabset(delegate: (container: ITabsetContainerBuilder) => void): ILayoutBuilder {\n const container = new TabsetContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.root.children!.push(container.build());\n return this;\n }\n\n fieldset(delegate: (container: IFieldsetContainerBuilder) => void): ILayoutBuilder {\n const container = new FieldsetContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.root.children!.push(container.build());\n return this;\n }\n\n dialog<T = AXPDialogRef>(delegate: (container: IDialogBuilder<T>) => void): IDialogBuilder<T> {\n if (!this.popupService) {\n throw new Error(\n 'LayoutBuilder requires AXPopupService to create dialogs. Please inject it in the service constructor.',\n );\n }\n const container = new DialogContainerBuilder<T>(this.popupService);\n if (delegate) {\n delegate(container);\n }\n return container;\n }\n\n stepWizard(delegate: (wizard: IStepWizardBuilder) => void): ILayoutBuilder {\n const wizard = new StepWizardBuilder();\n wizard.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(wizard);\n }\n this.root.children!.push(wizard.build());\n return this;\n }\n\n formField(label: string, delegate?: (field: IFormFieldBuilder) => void): ILayoutBuilder {\n const field = new FormFieldBuilder(label);\n field.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(field);\n }\n this.root.children!.push(field.build());\n return this;\n }\n\n build(): AXPWidgetNode {\n return {\n type: this.root.type,\n children: this.root.children,\n mode: this.root.mode,\n };\n }\n\n /**\n * Converts the built widget node to JSON string\n * @param options - Serialization options\n * @returns JSON string representation of the widget node\n */\n toJson(options?: { removeMeta?: boolean; removeFunctions?: boolean; pretty?: boolean }): string {\n const node = this.build();\n return AXPWidgetSerializationHelper.toJson(node, options);\n }\n}\n\n//#endregion\n\n//#region ---- Container Builder Implementation ----\n\n/**\n * Abstract base container builder - Open/Closed Principle\n * Provides common functionality for all container types\n */\nabstract class BaseContainerBuilder {\n protected containerState: LayoutBuilderState = {\n mode: 'edit',\n type: 'flex-layout',\n children: [],\n };\n\n protected inheritanceContext: InheritanceContext = {};\n\n constructor(containerType: string) {\n this.containerState.type = containerType;\n }\n\n // Base methods shared by all containers\n protected ensureChildren(): void {\n this.containerState.children = this.containerState.children || [];\n }\n\n protected addWidget<T>(type: string, options?: T): this {\n const child = new WidgetBuilder();\n child.type(type);\n\n // For value widgets, ensure path is provided\n const widgetOptions = options ?? {};\n const path = (widgetOptions as any).path;\n const name = (widgetOptions as any).name;\n\n if (this.isValueWidget(type) && !path) {\n throw new Error(`Value widget '${type}' requires a 'path' property`);\n }\n\n // Set name and path in widget state, not options\n if (name) {\n child.name(name);\n }\n if (path) {\n child.path(path);\n }\n\n // Remove name and path from options\n const { name: _, path: __, ...cleanOptions } = widgetOptions as any;\n\n // IMPORTANT: Apply inheritance context BEFORE setting options\n // This ensures that inherited properties (readonly, disabled, etc.) are applied first\n // Then user-provided options will override them if explicitly set\n child.withInheritanceContext(this.inheritanceContext);\n child.options(cleanOptions);\n\n this.ensureChildren();\n this.containerState.children!.push(child.build());\n return this;\n }\n\n private isValueWidget(type: string): boolean {\n const valueWidgetTypes = [\n 'text-editor',\n 'large-text-editor',\n 'rich-text-editor',\n 'password-editor',\n 'number-editor',\n 'select-editor',\n 'lookup-editor',\n 'entity-definition-provider-editor',\n 'selection-list-editor',\n 'date-time-editor',\n 'toggle-editor',\n 'color-editor',\n ];\n return valueWidgetTypes.includes(type);\n }\n\n build(): AXPWidgetNode {\n const result: AXPWidgetNode = {\n type: this.containerState.type,\n children: this.containerState.children,\n options: this.containerState.options,\n mode: this.containerState.mode,\n visible: this.containerState.visible,\n };\n\n // Add name with _form_field suffix for form fields\n if (this.containerState.type === 'form-field') {\n if (this.containerState.name) {\n result.name = this.containerState.name;\n } else if (this.containerState.options?.['label']) {\n result.name = labelToPath(this.containerState.options['label']) + '_form_field';\n }\n // Form fields don't have path\n } else {\n // Other containers can have name and path\n if (this.containerState.name) {\n result.name = this.containerState.name;\n }\n if (this.containerState.path) {\n result.path = this.containerState.path;\n }\n if (this.containerState.defaultValue !== undefined) {\n result.defaultValue = this.containerState.defaultValue;\n }\n }\n\n return result;\n }\n}\n\n/**\n * Base container builder mixin - Interface Segregation Principle\n * Provides common container operations\n */\nabstract class BaseContainerMixin<TContainer> extends BaseContainerBuilder {\n name(name: string): TContainer {\n this.containerState.name = name;\n return this as unknown as TContainer;\n }\n path(path: string): TContainer {\n this.containerState.path = path;\n return this as unknown as TContainer;\n }\n\n mode(mode: AXPWidgetRenderMode): TContainer {\n this.containerState.mode = mode;\n this.inheritanceContext.mode = mode;\n return this as unknown as TContainer;\n }\n\n visible(condition: boolean | string): TContainer {\n if (!this.containerState.options) this.containerState.options = {};\n this.containerState.options['visible'] = condition;\n this.inheritanceContext.visible = condition;\n return this as unknown as TContainer;\n }\n\n disabled(condition: boolean | string): TContainer {\n if (!this.containerState.options) this.containerState.options = {};\n this.containerState.options['disabled'] = condition;\n this.inheritanceContext.disabled = condition;\n return this as unknown as TContainer;\n }\n\n readonly(condition: boolean | string): TContainer {\n if (!this.containerState.options) this.containerState.options = {};\n this.containerState.options['readonly'] = condition;\n this.inheritanceContext.readonly = condition;\n return this as unknown as TContainer;\n }\n\n direction(direction: 'rtl' | 'ltr'): TContainer {\n if (!this.containerState.options) this.containerState.options = {};\n this.containerState.options['direction'] = direction;\n this.inheritanceContext.direction = direction;\n return this as unknown as TContainer;\n }\n\n // Inheritance context methods\n withInheritanceContext(context: InheritanceContext): TContainer {\n this.inheritanceContext = mergeInheritanceContext(context);\n return this as unknown as TContainer;\n }\n\n getInheritanceContext(): InheritanceContext {\n return { ...this.inheritanceContext };\n }\n}\n\n/**\n * Layout container mixin - Interface Segregation Principle\n * Provides layout-specific operations\n */\nabstract class LayoutContainerMixin<TContainer> extends BaseContainerMixin<TContainer> {\n layout(value: Partial<AXPGridLayoutOptions> | number): TContainer {\n // Map layout intent to grid item sizing so containers like `form-field`\n // can span multiple columns/rows inside grid/fieldset layouts.\n if (!this.containerState.options) this.containerState.options = {};\n\n if (typeof value === 'number') {\n (this.containerState.options as any).colSpan = value;\n } else if (value) {\n const positions = (value as any).positions as any;\n if (positions) {\n const placement = positions?.lg ?? positions?.xl ?? positions?.xxl ?? positions?.md ?? positions?.sm;\n if (placement) {\n const opts = this.containerState.options as any;\n if (placement.colSpan != null) opts.colSpan = placement.colSpan;\n if (placement.colStart != null) opts.colStart = placement.colStart;\n if (placement.colEnd != null) opts.colEnd = placement.colEnd;\n if (placement.rowSpan != null) opts.rowSpan = placement.rowSpan;\n if (placement.rowStart != null) opts.rowStart = placement.rowStart;\n if (placement.rowEnd != null) opts.rowEnd = placement.rowEnd;\n }\n }\n }\n\n return this as unknown as TContainer;\n }\n}\n\n/**\n * Child container mixin - Interface Segregation Principle\n * Provides child container management\n */\nabstract class ChildContainerMixin<TContainer> extends LayoutContainerMixin<TContainer> {\n grid(delegate: (container: IGridContainerBuilder) => void): TContainer {\n const container = new GridContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.ensureChildren();\n this.containerState.children!.push(container.build());\n return this as unknown as TContainer;\n }\n\n flex(delegate: (container: IFlexContainerBuilder) => void): TContainer {\n const container = new FlexContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.ensureChildren();\n this.containerState.children!.push(container.build());\n return this as unknown as TContainer;\n }\n\n panel(delegate: (container: IPanelContainerBuilder) => void): TContainer {\n const container = new PanelContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.ensureChildren();\n this.containerState.children!.push(container.build());\n return this as unknown as TContainer;\n }\n\n page(delegate: (container: IPageContainerBuilder) => void): TContainer {\n const container = new PageContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.ensureChildren();\n this.containerState.children!.push(container.build());\n return this as unknown as TContainer;\n }\n\n tabset(delegate: (container: ITabsetContainerBuilder) => void): TContainer {\n const container = new TabsetContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.ensureChildren();\n this.containerState.children!.push(container.build());\n return this as unknown as TContainer;\n }\n\n fieldset(delegate: (container: IFieldsetContainerBuilder) => void): TContainer {\n const container = new FieldsetContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.ensureChildren();\n this.containerState.children!.push(container.build());\n return this as unknown as TContainer;\n }\n\n dialog<T = AXPDialogRef>(delegate: (container: IDialogBuilder<T>) => void): IDialogBuilder<T> {\n const container = new DialogContainerBuilder<T>(); // Will use inject() fallback\n if (delegate) {\n delegate(container);\n }\n return container;\n }\n\n stepWizard(delegate: (wizard: IStepWizardBuilder) => void): TContainer {\n const wizard = new StepWizardBuilder();\n wizard.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(wizard);\n }\n this.ensureChildren();\n this.containerState.children!.push(wizard.build());\n return this as unknown as TContainer;\n }\n\n formField(label: string, delegate?: (field: IFormFieldBuilder) => void): TContainer {\n const field = new FormFieldBuilder(label);\n field.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(field);\n }\n this.ensureChildren();\n this.containerState.children!.push(field.build());\n return this as unknown as TContainer;\n }\n\n dynamicForm(definition: AXPDynamicFormDefinition): TContainer {\n // Get conversion service using inject() - works in any context in Angular 14+\n let conversionService: AXPLayoutConversionService;\n try {\n conversionService = inject(AXPLayoutConversionService);\n } catch {\n // Fallback: create service instance if inject() fails (shouldn't happen in normal usage)\n conversionService = new AXPLayoutConversionService();\n }\n\n // Convert form definition to widget node\n const widgetNode = conversionService.convertFormDefinition(definition);\n\n // Add the widget node's children to this container\n // The converted widget node has a root grid-layout, we want its children (fieldsets)\n if (widgetNode.children && widgetNode.children.length > 0) {\n this.ensureChildren();\n this.containerState.children!.push(...widgetNode.children);\n }\n\n return this as unknown as TContainer;\n }\n}\n\n/**\n * Widget container mixin - Interface Segregation Principle\n * Provides widget creation operations\n */\nabstract class WidgetContainerMixin<TContainer> extends ChildContainerMixin<TContainer> {\n textBox(options?: TextBoxOptions): TContainer {\n this.addWidget('text-editor', options);\n return this as unknown as TContainer;\n }\n\n largeTextBox(options?: LargeTextBoxOptions): TContainer {\n this.addWidget('large-text-editor', options);\n return this as unknown as TContainer;\n }\n\n richText(options?: RichTextOptions): TContainer {\n this.addWidget('rich-text-editor', options);\n return this as unknown as TContainer;\n }\n\n passwordBox(options?: PasswordBoxOptions): TContainer {\n this.addWidget('password-editor', options);\n return this as unknown as TContainer;\n }\n\n numberBox(options?: NumberBoxOptions): TContainer {\n this.addWidget('number-editor', options);\n return this as unknown as TContainer;\n }\n\n selectBox(options: SelectBoxOptions): TContainer {\n this.addWidget('select-editor', options);\n return this as unknown as TContainer;\n }\n\n lookupBox(options: LookupBoxOptions): TContainer {\n this.addWidget('lookup-editor', options);\n return this as unknown as TContainer;\n }\n\n selectionList(options: SelectionListOptions): TContainer {\n this.addWidget('selection-list-editor', options);\n return this as unknown as TContainer;\n }\n\n dateTimeBox(options?: DateTimeBoxOptions): TContainer {\n this.addWidget('date-time-editor', options);\n return this as unknown as TContainer;\n }\n\n toggleSwitch(options?: ToggleSwitchOptions): TContainer {\n this.addWidget('toggle-editor', options);\n return this as unknown as TContainer;\n }\n\n colorBox(options?: ColorBoxOptions): TContainer {\n this.addWidget('color-editor', options);\n return this as unknown as TContainer;\n }\n\n list(delegate: (container: IListWidgetBuilder) => void): TContainer {\n const container = new ListWidgetBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.ensureChildren();\n this.containerState.children!.push(container.build());\n return this as unknown as TContainer;\n }\n\n customWidget<T>(type: string, options?: T): TContainer;\n customWidget<T>(type: string, delegate: (widget: IWidgetBuilder) => void): TContainer;\n customWidget<T>(\n type: string,\n optionsOrDelegate?: T | ((widget: IWidgetBuilder) => void),\n delegate?: (widget: IWidgetBuilder) => void,\n ): TContainer {\n const child = new WidgetBuilder();\n child.type(type);\n\n // Determine if second parameter is delegate or options\n const isDelegate = typeof optionsOrDelegate === 'function';\n const options = isDelegate ? undefined : (optionsOrDelegate as T | undefined);\n const actualDelegate = isDelegate ? (optionsOrDelegate as (widget: IWidgetBuilder) => void) : delegate;\n\n // Apply inheritance context BEFORE setting options or calling delegate\n child.withInheritanceContext(this.inheritanceContext);\n\n // If options are provided (non-delegate overload), handle them\n if (!isDelegate && options !== undefined) {\n const widgetOptions = options as any;\n const path = widgetOptions.path;\n const name = widgetOptions.name;\n\n // Set name and path in widget state, not options\n if (name) {\n child.name(name);\n }\n if (path) {\n child.path(path);\n }\n\n // Remove name and path from options\n const { name: _, path: __, ...cleanOptions } = widgetOptions;\n child.options(cleanOptions);\n }\n\n // If delegate is provided, call it to allow setting path, options, and other control methods\n if (actualDelegate) {\n actualDelegate(child);\n }\n\n // Build the widget to check if path is set (for value widgets)\n const builtWidget = child.build();\n\n // Check if value widget requires path\n const valueWidgetTypes = [\n 'text-editor',\n 'large-text-editor',\n 'rich-text-editor',\n 'password-editor',\n 'number-editor',\n 'select-editor',\n 'lookup-editor',\n 'entity-definition-provider-editor',\n 'selection-list-editor',\n 'date-time-editor',\n 'toggle-editor',\n 'color-editor',\n ];\n if (valueWidgetTypes.includes(type) && !builtWidget.path) {\n throw new Error(`Value widget '${type}' requires a 'path' property`);\n }\n\n this.ensureChildren();\n this.containerState.children!.push(builtWidget);\n return this as unknown as TContainer;\n }\n}\n\n/**\n * Flex Container Builder - Liskov Substitution Principle\n * Extends WidgetContainerMixin to inherit all common functionality\n */\nclass FlexContainerBuilder extends WidgetContainerMixin<IFlexContainerBuilder> implements IFlexContainerBuilder {\n constructor() {\n super('flex-layout');\n }\n\n setOptions(options: AXPFlexContainerOptions): IFlexContainerBuilder {\n this.containerState.options = { ...this.containerState.options, ...options };\n return this;\n }\n\n // Individual fluent methods for Flex\n setDirection(direction: 'row' | 'column' | 'row-reverse' | 'column-reverse'): IFlexContainerBuilder {\n return this.setOptions({ flexDirection: direction });\n }\n\n setWrap(wrap: 'nowrap' | 'wrap' | 'wrap-reverse'): IFlexContainerBuilder {\n return this.setOptions({ flexWrap: wrap });\n }\n\n setJustifyContent(\n justify: 'flex-start' | 'flex-end' | 'center' | 'space-between' | 'space-around' | 'space-evenly',\n ): IFlexContainerBuilder {\n return this.setOptions({ justifyContent: justify });\n }\n\n setAlignItems(align: 'flex-start' | 'flex-end' | 'center' | 'baseline' | 'stretch'): IFlexContainerBuilder {\n return this.setOptions({ alignItems: align });\n }\n\n setGap(gap: string): IFlexContainerBuilder {\n return this.setOptions({ gap });\n }\n\n setBackgroundColor(color: string): IFlexContainerBuilder {\n return this.setOptions({ backgroundColor: color });\n }\n\n setPadding(padding: string): IFlexContainerBuilder {\n return this.setOptions({ spacing: { padding } });\n }\n\n setMargin(margin: string): IFlexContainerBuilder {\n return this.setOptions({ spacing: { margin } });\n }\n}\n\n/**\n * Grid Container Builder - Liskov Substitution Principle\n * Extends WidgetContainerMixin to inherit all common functionality\n */\n/**\n * Extracts flat grid-item options from AXPGridLayoutOptions for grid-item-layout widget.\n * Uses first available breakpoint (lg, xl, md, sm).\n */\nfunction toGridItemOptions(layoutOptions: Partial<AXPGridLayoutOptions> | null | undefined): Record<string, number> {\n if (!layoutOptions?.positions) return { colSpan: 12 };\n const positions = layoutOptions.positions as Record<\n string,\n { colSpan?: number; colStart?: number; colEnd?: number; rowSpan?: number; rowStart?: number; rowEnd?: number }\n >;\n const placement = positions['lg'] ?? positions['xl'] ?? positions['xxl'] ?? positions['md'] ?? positions['sm'];\n if (!placement) return { colSpan: 12 };\n const opts: Record<string, number> = {};\n if (placement['colSpan'] != null) opts['colSpan'] = placement['colSpan'];\n if (placement['colStart'] != null) opts['colStart'] = placement['colStart'];\n if (placement['colEnd'] != null) opts['colEnd'] = placement['colEnd'];\n if (placement['rowSpan'] != null) opts['rowSpan'] = placement['rowSpan'];\n if (placement['rowStart'] != null) opts['rowStart'] = placement['rowStart'];\n if (placement['rowEnd'] != null) opts['rowEnd'] = placement['rowEnd'];\n if (Object.keys(opts).length === 0) opts['colSpan'] = 12;\n return opts;\n}\n\nclass GridContainerBuilder extends WidgetContainerMixin<IGridContainerBuilder> implements IGridContainerBuilder {\n constructor() {\n super('grid-layout');\n }\n\n setOptions(options: AXPGridContainerOptions): IGridContainerBuilder {\n this.containerState.options = { ...this.containerState.options, ...options };\n return this;\n }\n\n item(\n layoutOptions: Partial<AXPGridLayoutOptions> | null | undefined,\n delegate: (container: IFieldsetContainerBuilder) => void,\n ): IGridContainerBuilder {\n const fieldset = new FieldsetContainerBuilder();\n fieldset.withInheritanceContext(this.inheritanceContext);\n delegate(fieldset);\n const fieldsetNode = fieldset.build();\n const gridItemOptions = toGridItemOptions(layoutOptions);\n const gridItemNode: AXPWidgetNode = {\n type: 'grid-item-layout',\n options: gridItemOptions,\n children: [fieldsetNode],\n };\n this.ensureChildren();\n this.containerState.children!.push(gridItemNode);\n return this;\n }\n\n // Individual fluent methods for Grid\n setColumns(columns: number): IGridContainerBuilder {\n return this.setOptions({ grid: { default: { columns } } });\n }\n\n setRows(rows: number): IGridContainerBuilder {\n return this.setOptions({ grid: { default: { rows } } });\n }\n\n setGap(gap: string): IGridContainerBuilder {\n return this.setOptions({ grid: { default: { gap } } });\n }\n\n setJustifyItems(justify: 'start' | 'end' | 'center' | 'stretch'): IGridContainerBuilder {\n return this.setOptions({ grid: { default: { justifyItems: justify } } });\n }\n\n setAlignItems(align: 'start' | 'end' | 'center' | 'stretch'): IGridContainerBuilder {\n return this.setOptions({ grid: { default: { alignItems: align } } });\n }\n\n setAutoFlow(flow: 'row' | 'column' | 'row dense' | 'column dense'): IGridContainerBuilder {\n return this.setOptions({ grid: { default: { autoFlow: flow } } });\n }\n\n setBackgroundColor(color: string): IGridContainerBuilder {\n return this.setOptions({ backgroundColor: color });\n }\n\n setPadding(padding: string): IGridContainerBuilder {\n return this.setOptions({ spacing: { padding } });\n }\n\n setMargin(margin: string): IGridContainerBuilder {\n return this.setOptions({ spacing: { margin } });\n }\n}\n\n/**\n * Panel Container Builder - Liskov Substitution Principle\n * Extends WidgetContainerMixin to inherit all common functionality\n */\nclass PanelContainerBuilder extends WidgetContainerMixin<IPanelContainerBuilder> implements IPanelContainerBuilder {\n constructor() {\n super('panel-layout');\n }\n\n setOptions(options: AXPPanelContainerOptions): IPanelContainerBuilder {\n this.containerState.options = { ...this.containerState.options, ...options };\n return this;\n }\n\n // Individual fluent methods for Panel\n setCaption(caption: string): IPanelContainerBuilder {\n return this.setOptions({ caption });\n }\n\n setIcon(icon: string): IPanelContainerBuilder {\n return this.setOptions({ icon });\n }\n\n setLook(look: 'solid' | 'fill' | 'outline' | 'flat' | 'none'): IPanelContainerBuilder {\n return this.setOptions({ look });\n }\n\n setShowHeader(show: boolean): IPanelContainerBuilder {\n return this.setOptions({ showHeader: show });\n }\n\n setCollapsed(collapsed: boolean): IPanelContainerBuilder {\n return this.setOptions({ collapsed });\n }\n}\n\n/**\n * Page Container Builder - Liskov Substitution Principle\n * Extends WidgetContainerMixin to inherit all common functionality\n */\nclass PageContainerBuilder extends WidgetContainerMixin<IPageContainerBuilder> implements IPageContainerBuilder {\n constructor() {\n super('page-layout');\n }\n\n setOptions(options: AXPPageContainerOptions): IPageContainerBuilder {\n this.containerState.options = { ...this.containerState.options, ...options };\n return this;\n }\n\n // Individual fluent methods for Page\n setBackgroundColor(color: string): IPageContainerBuilder {\n return this.setOptions({ backgroundColor: color });\n }\n\n setTheme(theme: { id: string }): IPageContainerBuilder {\n return this.setOptions({ theme });\n }\n\n setHasHeader(hasHeader: boolean): IPageContainerBuilder {\n return this.setOptions({ hasHeader });\n }\n\n setHasFooter(hasFooter: boolean): IPageContainerBuilder {\n return this.setOptions({ hasFooter });\n }\n\n setDirection(direction: string): IPageContainerBuilder {\n return this.setOptions({ direction });\n }\n}\n\n/**\n * Tabset Container Builder - Liskov Substitution Principle\n * Extends WidgetContainerMixin to inherit all common functionality\n */\nclass TabsetContainerBuilder extends WidgetContainerMixin<ITabsetContainerBuilder> implements ITabsetContainerBuilder {\n constructor() {\n super('tabset-layout');\n }\n\n setOptions(options: AXPTabsetContainerOptions): ITabsetContainerBuilder {\n this.containerState.options = { ...this.containerState.options, ...options };\n return this;\n }\n\n // Individual fluent methods for Tabset\n setLook(look: 'with-line' | 'with-line-color' | 'pills' | 'pills-color'): ITabsetContainerBuilder {\n return this.setOptions({ look });\n }\n\n setOrientation(orientation: 'vertical' | 'horizontal'): ITabsetContainerBuilder {\n return this.setOptions({ orientation });\n }\n\n setActiveIndex(index: number): ITabsetContainerBuilder {\n return this.setOptions({ activeIndex: index });\n }\n}\n\n/**\n * Form Field Builder - Liskov Substitution Principle\n * Can only contain ONE widget with automatic path generation\n */\nclass FormFieldBuilder extends LayoutContainerMixin<IFormFieldBuilder> implements IFormFieldBuilder {\n private hasWidget = false;\n private childWidget?: WidgetBuilder; // Store the widget builder, not the built widget\n\n constructor(label: string) {\n super('form-field');\n this.containerState.options = { label, showLabel: true };\n }\n\n setOptions(options: AXPFormFieldOptions): IFormFieldBuilder {\n this.containerState.options = { ...this.containerState.options, ...options };\n return this;\n }\n\n setLabel(label: string): IFormFieldBuilder {\n return this.setOptions({ label });\n }\n\n setShowLabel(showLabel: boolean): IFormFieldBuilder {\n return this.setOptions({ showLabel });\n }\n\n defaultValue(value: any): IFormFieldBuilder {\n this.containerState.defaultValue = value;\n this.inheritanceContext.defaultValue = value;\n if (this.childWidget) {\n this.childWidget.withInheritanceContext(this.inheritanceContext);\n }\n return this;\n }\n\n // Single widget methods with automatic path generation\n private addSingleWidget<T>(\n type: string,\n options?: Omit<T, 'path'> | (Omit<T, 'path'> & Partial<AXPWidgetNodeExtendedProperties>),\n ): IFormFieldBuilder {\n if (this.hasWidget) {\n throw new Error('Form field can only contain one widget');\n }\n\n const formFieldName = this.containerState.name;\n const formFieldPath = this.containerState.path; // Get explicit path from form field\n const formFieldLabel = this.containerState.options?.['label'];\n const widgetName = (options as any)?.name;\n\n // Generate widget path: explicit path -> widget name -> form field name -> label -> random\n let widgetPath: string;\n if (formFieldPath) {\n widgetPath = formFieldPath; // Use explicit form field path first\n } else if (widgetName) {\n widgetPath = widgetName;\n } else if (formFieldName) {\n widgetPath = formFieldName; // Use form field name as default path\n } else if (formFieldLabel) {\n widgetPath = labelToPath(formFieldLabel);\n } else {\n widgetPath = generateRandomId();\n }\n\n const finalName = widgetName || formFieldName || widgetPath;\n\n const child = new WidgetBuilder();\n child.type(type);\n child.name(finalName);\n child.path(widgetPath);\n\n // Extract extended properties from options (triggers, meta, valueTransforms, mode, visible, defaultValue)\n const {\n name: _,\n triggers,\n meta,\n valueTransforms,\n mode: extendedMode,\n visible: extendedVisible,\n defaultValue: extendedDefaultValue,\n children: extendedChildren,\n ...cleanOptions\n } = (options || {}) as any;\n\n child.withInheritanceContext(this.inheritanceContext);\n child.options(cleanOptions);\n\n // Apply extended properties if provided\n if (extendedMode !== undefined) {\n child.mode(extendedMode);\n }\n if (extendedVisible !== undefined) {\n child.visible(extendedVisible);\n }\n if (extendedDefaultValue !== undefined) {\n child.defaultValue(extendedDefaultValue);\n }\n // Set triggers, meta, and valueTransforms directly on widgetState\n // These are part of AXPWidgetNode but not handled by WidgetBuilder methods\n if (triggers !== undefined) {\n (child as any).widgetState.triggers = triggers;\n }\n if (meta !== undefined) {\n (child as any).widgetState.meta = meta;\n }\n if (valueTransforms !== undefined) {\n (child as any).widgetState.valueTransforms = valueTransforms;\n }\n if (extendedChildren !== undefined) {\n (child as any).widgetState.children = extendedChildren;\n }\n\n // IMPORTANT: Store the widget builder, don't build it yet!\n // This allows properties set after this method (like disabled, readonly) to be applied\n this.childWidget = child;\n this.hasWidget = true;\n\n return this;\n }\n\n textBox(options?: Omit<TextBoxOptions, 'path'>): IFormFieldBuilder {\n return this.addSingleWidget<TextBoxOptions>('text-editor', options);\n }\n\n largeTextBox(options?: Omit<LargeTextBoxOptions, 'path'>): IFormFieldBuilder {\n return this.addSingleWidget<LargeTextBoxOptions>('large-text-editor', options);\n }\n\n richText(options?: Omit<RichTextOptions, 'path'>): IFormFieldBuilder {\n return this.addSingleWidget<RichTextOptions>('rich-text-editor', options);\n }\n\n passwordBox(options?: Omit<PasswordBoxOptions, 'path'>): IFormFieldBuilder {\n return this.addSingleWidget<PasswordBoxOptions>('password-editor', options);\n }\n\n numberBox(options?: Omit<NumberBoxOptions, 'path'>): IFormFieldBuilder {\n return this.addSingleWidget<NumberBoxOptions>('number-editor', options);\n }\n\n selectBox(options: Omit<SelectBoxOptions, 'path'>): IFormFieldBuilder {\n return this.addSingleWidget<SelectBoxOptions>('select-editor', options);\n }\n\n lookupBox(options: Omit<LookupBoxOptions, 'path'>): IFormFieldBuilder {\n return this.addSingleWidget<LookupBoxOptions>('lookup-editor', options);\n }\n\n selectionList(options: Omit<SelectionListOptions, 'path'>): IFormFieldBuilder {\n return this.addSingleWidget<SelectionListOptions>('selection-list-editor', options);\n }\n\n dateTimeBox(options?: Omit<DateTimeBoxOptions, 'path'>): IFormFieldBuilder {\n return this.addSingleWidget<DateTimeBoxOptions>('date-time-editor', options);\n }\n\n toggleSwitch(options?: Omit<ToggleSwitchOptions, 'path'>): IFormFieldBuilder {\n return this.addSingleWidget<ToggleSwitchOptions>('toggle-editor', options);\n }\n\n colorBox(options?: Omit<ColorBoxOptions, 'path'>): IFormFieldBuilder {\n return this.addSingleWidget<ColorBoxOptions>('color-editor', options);\n }\n\n customWidget<T>(type: string, options?: Omit<T, 'path'>): IFormFieldBuilder;\n customWidget<T>(\n type: string,\n options?: Omit<T, 'path'> & Partial<AXPWidgetNodeExtendedProperties>,\n ): IFormFieldBuilder;\n customWidget<T>(\n type: string,\n options?: Omit<T, 'path'> | (Omit<T, 'path'> & Partial<AXPWidgetNodeExtendedProperties>),\n ): IFormFieldBuilder {\n return this.addSingleWidget<T>(type, options);\n }\n\n // Override property setters to propagate changes to child widget\n override disabled(condition: boolean | string): IFormFieldBuilder {\n super.disabled(condition);\n if (this.childWidget) {\n this.childWidget.withInheritanceContext(this.inheritanceContext);\n }\n return this;\n }\n\n override readonly(condition: boolean | string): IFormFieldBuilder {\n super.readonly(condition);\n if (this.childWidget) {\n this.childWidget.withInheritanceContext(this.inheritanceContext);\n }\n return this;\n }\n\n override visible(condition: boolean | string): IFormFieldBuilder {\n super.visible(condition);\n if (this.childWidget) {\n this.childWidget.withInheritanceContext(this.inheritanceContext);\n }\n return this;\n }\n\n override direction(direction: 'rtl' | 'ltr'): IFormFieldBuilder {\n super.direction(direction);\n if (this.childWidget) {\n this.childWidget.withInheritanceContext(this.inheritanceContext);\n }\n return this;\n }\n\n override mode(mode: AXPWidgetRenderMode): IFormFieldBuilder {\n super.mode(mode);\n if (this.childWidget) {\n this.childWidget.withInheritanceContext(this.inheritanceContext);\n }\n return this;\n }\n\n // Override withInheritanceContext to pass it to the child widget if it exists\n override withInheritanceContext(context: InheritanceContext): IFormFieldBuilder {\n // Call parent implementation first\n super.withInheritanceContext(context);\n\n // If we have a child widget, update its inheritance context too\n if (this.childWidget) {\n this.childWidget.withInheritanceContext(this.inheritanceContext);\n }\n\n return this;\n }\n\n // Override build() to build the child widget at the last moment\n override build(): AXPWidgetNode {\n // Build the child widget and add it to children before building the form field\n if (this.childWidget) {\n this.ensureChildren();\n this.containerState.children!.push(this.childWidget.build());\n }\n\n // Call parent build\n return super.build();\n }\n}\n\n/**\n * Fieldset Container Builder - Liskov Substitution Principle\n * Extends LayoutContainerMixin to inherit layout functionality\n * Specialized for form fields only\n */\nclass FieldsetContainerBuilder\n extends LayoutContainerMixin<IFieldsetContainerBuilder>\n implements IFieldsetContainerBuilder {\n constructor() {\n super('fieldset-layout');\n this.containerState.options = {};\n }\n\n setOptions(options: AXPFieldsetContainerOptions): IFieldsetContainerBuilder {\n this.containerState.options = { ...this.containerState.options, ...options };\n return this;\n }\n\n // Individual fluent methods for Fieldset\n setTitle(title: string): IFieldsetContainerBuilder {\n return this.setOptions({ title });\n }\n\n setDescription(description: string): IFieldsetContainerBuilder {\n return this.setOptions({ description });\n }\n\n setIcon(icon: string): IFieldsetContainerBuilder {\n return this.setOptions({ icon });\n }\n\n setCollapsible(collapsible: boolean): IFieldsetContainerBuilder {\n return this.setOptions({ collapsible });\n }\n\n setIsOpen(isOpen: boolean): IFieldsetContainerBuilder {\n return this.setOptions({ isOpen });\n }\n\n setLook(look: 'fieldset' | 'card' | 'group' | 'container'): IFieldsetContainerBuilder {\n return this.setOptions({ look });\n }\n\n setShowHeader(showHeader: boolean): IFieldsetContainerBuilder {\n return this.setOptions({ showHeader });\n }\n\n setCols(cols: number): IFieldsetContainerBuilder {\n return this.setOptions({ cols });\n }\n\n // Only form fields are allowed in fieldset\n formField(label: string, delegate?: (field: IFormFieldBuilder) => void): IFieldsetContainerBuilder {\n const field = new FormFieldBuilder(label);\n field.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(field);\n }\n this.ensureChildren();\n this.containerState.children!.push(field.build());\n return this;\n }\n}\n\n/**\n * List Widget Builder - Liskov Substitution Principle\n * Extends WidgetContainerMixin to inherit all common functionality\n */\nclass ListWidgetBuilder extends WidgetContainerMixin<IListWidgetBuilder> implements IListWidgetBuilder {\n constructor() {\n super('data-list');\n }\n\n setOptions(options: AXPListWidgetOptions): IListWidgetBuilder {\n this.containerState.options = { ...this.containerState.options, ...options };\n return this;\n }\n\n // Individual fluent methods for List Widget\n setDataSource(dataSource: any[]): IListWidgetBuilder {\n return this.setOptions({ dataSource });\n }\n\n setColumns(columns: any[]): IListWidgetBuilder {\n return this.setOptions({ columns });\n }\n\n // Event handlers\n setOnRowClick(handler: (row: any) => void): IListWidgetBuilder {\n return this.setOptions({ onRowClick: handler });\n }\n\n setOnRowDoubleClick(handler: (row: any) => void): IListWidgetBuilder {\n return this.setOptions({ onRowDoubleClick: handler });\n }\n\n setOnSelectionChange(handler: (selectedRows: any[]) => void): IListWidgetBuilder {\n return this.setOptions({ onSelectionChange: handler });\n }\n\n setOnRowCommand(handler: (command: any, selectedRows: any[]) => void): IListWidgetBuilder {\n return this.setOptions({ onRowCommand: handler });\n }\n\n // Table features\n setPaging(paging: boolean): IListWidgetBuilder {\n return this.setOptions({ paging });\n }\n\n setShowHeader(show: boolean): IListWidgetBuilder {\n return this.setOptions({ showHeader: show });\n }\n\n setShowFooter(show: boolean): IListWidgetBuilder {\n return this.setOptions({ showFooter: show });\n }\n\n setFixHeader(fix: boolean): IListWidgetBuilder {\n return this.setOptions({ fixHeader: fix });\n }\n\n setFixFooter(fix: boolean): IListWidgetBuilder {\n return this.setOptions({ fixFooter: fix });\n }\n\n setFetchDataMode(mode: 'auto' | 'manual'): IListWidgetBuilder {\n return this.setOptions({ fetchDataMode: mode });\n }\n\n setParentField(field: string): IListWidgetBuilder {\n return this.setOptions({ parentField: field });\n }\n\n setMinHeight(height: string | number): IListWidgetBuilder {\n return this.setOptions({ minHeight: height });\n }\n\n // Selection & Index\n setShowIndex(show: boolean): IListWidgetBuilder {\n return this.setOptions({ showIndex: show });\n }\n\n setAllowSelection(allow: boolean): IListWidgetBuilder {\n return this.setOptions({ allowSelection: allow });\n }\n\n // Commands\n setPrimaryCommands(commands: any[]): IListWidgetBuilder {\n return this.setOptions({ primaryCommands: commands });\n }\n\n setSecondaryCommands(commands: any[]): IListWidgetBuilder {\n return this.setOptions({ secondaryCommands: commands });\n }\n\n // Loading\n setLoading(loading: { enabled?: boolean; animation?: boolean }): IListWidgetBuilder {\n return this.setOptions({ loading });\n }\n}\n\n/**\n * Dialog Container Builder - Specialized for dialog functionality\n * Uses composition instead of inheritance for cleaner separation\n */\nclass DialogContainerBuilder<T = AXPDialogRef> implements IDialogBuilder<T> {\n private dialogState: DialogBuilderState = {\n type: 'flex-layout', // This will be overridden when content layout exists\n children: [],\n mode: 'edit',\n dialogOptions: {\n title: '',\n size: 'md',\n closeButton: false,\n },\n actions: {\n footer: {\n prefix: [],\n suffix: [],\n },\n },\n };\n\n private popupService: AXPopupService;\n private contentLayout?: AXPWidgetNode;\n\n constructor(popupService?: AXPopupService) {\n if (popupService) {\n this.popupService = popupService;\n } else {\n this.popupService = inject(AXPopupService);\n }\n }\n\n setOptions(options: AXPDialogContainerOptions): IDialogBuilder<T> {\n this.dialogState.dialogOptions = { ...this.dialogState.dialogOptions, ...options };\n\n return this;\n }\n\n // Individual fluent methods for Dialog\n setTitle(title: string): IDialogBuilder<T> {\n return this.setOptions({ title });\n }\n\n setMessage(message?: string): IDialogBuilder<T> {\n return this.setOptions({ message });\n }\n\n setSize(size: any): IDialogBuilder<T> {\n return this.setOptions({ size });\n }\n\n setCloseButton(closeButton: boolean): IDialogBuilder<T> {\n return this.setOptions({ closeButton });\n }\n\n setContext(context: any): IDialogBuilder<T> {\n return this.setOptions({ context });\n }\n\n content(delegate: (layoutBuilder: IFlexContainerBuilder) => void): IDialogBuilder<T> {\n if (delegate) {\n // Create a flex container directly instead of through LayoutBuilder\n const flexContainer = new FlexContainerBuilder();\n flexContainer.setDirection('column');\n flexContainer.setGap('10px');\n\n delegate(flexContainer);\n this.contentLayout = flexContainer.build();\n }\n return this;\n }\n\n setActions(delegate?: (actions: IActionBuilder) => void): IDialogBuilder<T> {\n if (delegate) {\n const actionBuilder = new ActionBuilder(this);\n delegate(actionBuilder);\n }\n return this;\n }\n\n onAction(handler: (dialogRef: AXPDialogRef) => T | Promise<T>): IDialogBuilder<T> {\n (this.dialogState.dialogOptions ??= {} as any).onAction = handler;\n return this;\n }\n\n addCustomAction(action: AXPActionMenuItem): IDialogBuilder<T> {\n // Add to actions based on position\n const position = (action as any).position || 'suffix';\n\n if (position === 'prefix') {\n if (!this.dialogState.actions!.footer!.prefix) {\n this.dialogState.actions!.footer!.prefix = [];\n }\n this.dialogState.actions!.footer!.prefix!.push(action);\n } else {\n if (!this.dialogState.actions!.footer!.suffix) {\n this.dialogState.actions!.footer!.suffix = [];\n }\n this.dialogState.actions!.footer!.suffix!.push(action);\n }\n\n return this;\n }\n\n // Build method to create dialog node\n build(): AXPWidgetNode {\n // If we have content layout, use it directly to avoid extra wrapper\n if (this.contentLayout) {\n return {\n ...this.contentLayout,\n // Add dialog-specific properties\n options: {\n ...this.contentLayout.options,\n ...this.dialogState.dialogOptions,\n },\n };\n }\n\n // Fallback to dialog state structure if no content\n const result: AXPWidgetNode = {\n ...this.dialogState,\n children: [],\n };\n\n // Add dialog-specific properties\n if (this.dialogState.dialogOptions) {\n result.options = { ...result.options, ...this.dialogState.dialogOptions };\n }\n\n return result;\n }\n\n // Dialog-specific methods\n async show(): Promise<T> {\n const dialogNode = this.build();\n\n // Import the dialog renderer component dynamically\n const { AXPDialogRendererComponent } = await import('./dialog-renderer.component');\n\n // Collect default values from widget tree and merge into initial context\n const initialContext = this.dialogState.dialogOptions?.context || {};\n\n //TODO remove using collectDefaultValues and use initialContext directly for now:\n const contextWithDefaults = collectDefaultValues(dialogNode, initialContext);\n\n // Create dialog configuration\n const dialogConfig = {\n title: this.dialogState.dialogOptions?.title || '',\n message: this.dialogState.dialogOptions?.message,\n\n context: initialContext,\n definition: dialogNode,\n actions: this.dialogState.actions,\n onAction: (this.dialogState.dialogOptions as any)?.onAction,\n };\n\n // The Promise resolves when user clicks an action button\n return new Promise(async (resolve) => {\n this.popupService.open(AXPDialogRendererComponent, {\n title: dialogConfig.title,\n size: this.dialogState.dialogOptions?.size || 'md',\n closeButton: this.dialogState.dialogOptions?.closeButton || false,\n closeOnBackdropClick: false,\n draggable: false,\n data: {\n config: dialogConfig,\n callBack: (result: T | AXPDialogRef) => {\n resolve(result as T);\n },\n },\n });\n });\n }\n}\n\n//#endregion\n\n//#region ---- Widget Builder Implementation ----\n\n/**\n * Widget Builder - Single Responsibility Principle\n * Handles individual widget configuration and building\n */\nclass WidgetBuilder implements IWidgetBuilder {\n private widgetState: WidgetBuilderState = {\n type: 'widget' as const,\n options: {} as any,\n children: [],\n };\n\n private inheritanceContext: InheritanceContext = {};\n\n constructor(name?: string) {\n if (name) {\n this.widgetState.name = name;\n }\n }\n\n type(type: string): IWidgetBuilder {\n this.widgetState.type = type;\n return this;\n }\n\n name(name: string): IWidgetBuilder {\n this.widgetState.name = name;\n if (!this.widgetState.path) {\n this.widgetState.path = name;\n }\n return this;\n }\n\n path(path: string): IWidgetBuilder {\n this.widgetState.path = path;\n return this;\n }\n\n options(options: any): IWidgetBuilder {\n // Extract defaultValue from options - it's an exceptional parameter that updates context, not a widget option\n if (options && options.defaultValue !== undefined) {\n this.widgetState.defaultValue = options.defaultValue;\n // Remove defaultValue from options since it's stored on the node, not in options\n const { defaultValue: _, ...cleanOptions } = options;\n // Merge clean options instead of replacing to preserve inherited properties\n this.widgetState.options = { ...this.widgetState.options, ...cleanOptions };\n } else {\n // Merge options instead of replacing to preserve inherited properties\n this.widgetState.options = { ...this.widgetState.options, ...options };\n }\n return this;\n }\n\n layout(value: Partial<AXPGridLayoutOptions> | number): IWidgetBuilder {\n if (typeof value === 'number') {\n this.widgetState.layout = {\n positions: {\n sm: { colSpan: 12 },\n md: { colSpan: 12 },\n lg: { colSpan: value },\n xl: { colSpan: value },\n xxl: { colSpan: value },\n },\n };\n } else {\n this.widgetState.layout = value;\n }\n return this;\n }\n\n mode(mode: AXPWidgetRenderMode): IWidgetBuilder {\n this.widgetState.mode = mode;\n this.inheritanceContext.mode = mode;\n return this;\n }\n\n visible(condition: boolean | string): IWidgetBuilder {\n if (!this.widgetState.options) {\n this.widgetState.options = {};\n }\n this.widgetState.options['visible'] = condition;\n this.widgetState.visible = condition;\n this.inheritanceContext.visible = condition;\n return this;\n }\n\n disabled(condition: boolean | string): IWidgetBuilder {\n if (!this.widgetState.options) {\n this.widgetState.options = {};\n }\n this.widgetState.options['disabled'] = condition;\n this.inheritanceContext.disabled = condition;\n return this;\n }\n\n defaultValue(defaultValue: any): IWidgetBuilder {\n this.widgetState.defaultValue = defaultValue;\n return this;\n }\n\n readonly(condition: boolean | string): IWidgetBuilder {\n if (!this.widgetState.options) {\n this.widgetState.options = {};\n }\n this.widgetState.options['readonly'] = condition;\n this.inheritanceContext.readonly = condition;\n return this;\n }\n\n direction(direction: 'rtl' | 'ltr'): IWidgetBuilder {\n if (!this.widgetState.options) {\n this.widgetState.options = {};\n }\n this.widgetState.options['direction'] = direction;\n this.inheritanceContext.direction = direction;\n return this;\n }\n\n children(children: AXPWidgetNode[]): IWidgetBuilder {\n this.widgetState.children = children;\n return this;\n }\n\n // Inheritance context methods\n withInheritanceContext(context: InheritanceContext): IWidgetBuilder {\n this.inheritanceContext = mergeInheritanceContext(context);\n\n // Apply inherited properties to widget state\n const resolved = resolveInheritedProperties(context, this.inheritanceContext);\n\n // Always apply inherited properties (remove the conditions that check if already set)\n // This allows properties to be updated when inheritance context changes\n if (resolved.mode) {\n this.widgetState.mode = resolved.mode;\n }\n\n if (!this.widgetState.options) this.widgetState.options = {};\n\n if (resolved.disabled !== undefined) {\n this.widgetState.options['disabled'] = resolved.disabled;\n }\n\n if (resolved.readonly !== undefined) {\n this.widgetState.options['readonly'] = resolved.readonly;\n }\n\n if (resolved.direction !== undefined) {\n this.widgetState.options['direction'] = resolved.direction;\n }\n\n if (resolved.visible !== undefined) {\n this.widgetState.options['visible'] = resolved.visible;\n this.widgetState.visible = resolved.visible;\n }\n\n if (context.defaultValue !== undefined) {\n this.widgetState.defaultValue = context.defaultValue;\n }\n\n return this;\n }\n\n getInheritanceContext(): InheritanceContext {\n return { ...this.inheritanceContext };\n }\n\n build(): AXPWidgetNode {\n const node: AXPWidgetNode = {\n name: this.widgetState.name,\n type: this.widgetState.type,\n options: this.widgetState.options,\n mode: this.widgetState.mode,\n path: this.widgetState.path,\n defaultValue: this.widgetState.defaultValue,\n children: this.widgetState.children,\n };\n\n // Add extended properties if they exist\n if (this.widgetState.triggers !== undefined) {\n node.triggers = this.widgetState.triggers;\n }\n if (this.widgetState.meta !== undefined) {\n node.meta = this.widgetState.meta;\n }\n if (this.widgetState.valueTransforms !== undefined) {\n node.valueTransforms = this.widgetState.valueTransforms;\n }\n if (this.widgetState.visible !== undefined) {\n node.visible = this.widgetState.visible;\n }\n\n return node;\n }\n}\n\n//#region ---- Action Builder Implementation ----\n\nclass ActionBuilder implements IActionBuilder {\n constructor(private dialogBuilder: DialogContainerBuilder<any>) { }\n\n cancel(text?: string): IActionBuilder {\n if (!this.dialogBuilder['dialogState'].actions!.footer!.suffix) {\n this.dialogBuilder['dialogState'].actions!.footer!.suffix = [];\n }\n this.dialogBuilder['dialogState'].actions!.footer!.suffix!.push({\n title: text || '@general:actions.cancel.title',\n color: 'default',\n command: { name: 'cancel' },\n });\n return this;\n }\n\n submit(text?: string): IActionBuilder {\n if (!this.dialogBuilder['dialogState'].actions!.footer!.suffix) {\n this.dialogBuilder['dialogState'].actions!.footer!.suffix = [];\n }\n this.dialogBuilder['dialogState'].actions!.footer!.suffix!.push({\n title: text || '@general:actions.submit.title',\n color: 'primary',\n command: { name: 'submit', options: { validate: true } },\n });\n return this;\n }\n\n custom(action: AXPActionMenuItem & { position?: 'prefix' | 'suffix' }): IActionBuilder {\n const position = action.position ?? 'suffix';\n if (position === 'prefix') {\n if (!this.dialogBuilder['dialogState'].actions!.footer!.prefix) {\n this.dialogBuilder['dialogState'].actions!.footer!.prefix = [];\n }\n this.dialogBuilder['dialogState'].actions!.footer!.prefix!.push(action);\n } else {\n if (!this.dialogBuilder['dialogState'].actions!.footer!.suffix) {\n this.dialogBuilder['dialogState'].actions!.footer!.suffix = [];\n }\n this.dialogBuilder['dialogState'].actions!.footer!.suffix!.push(action);\n }\n return this;\n }\n}\n\n//#endregion\n\n//#region ---- Step Wizard Builder Implementation ----\n\n/**\n * Step Builder - Builds individual steps for step wizard\n */\nclass StepBuilder {\n private icon?: string;\n private description?: string;\n private skippable = false;\n private contentNode?: AXPWidgetNode;\n private inheritanceContext: InheritanceContext = {};\n\n constructor(\n private id: string,\n private title: string,\n ) { }\n\n setIcon(icon: string): StepBuilder {\n this.icon = icon;\n return this;\n }\n\n setDescription(description: string): StepBuilder {\n this.description = description;\n return this;\n }\n\n setSkippable(skippable: boolean): StepBuilder {\n this.skippable = skippable;\n return this;\n }\n\n content(delegate: (layoutBuilder: ILayoutBuilder) => void): StepBuilder {\n if (delegate) {\n // Create LayoutBuilder in injection context (will be called from component)\n const layoutBuilder = new LayoutBuilder();\n\n // ✅ IMPORTANT: Propagate inheritance context to content\n (layoutBuilder as any).inheritanceContext = { ...this.inheritanceContext };\n\n delegate(layoutBuilder);\n this.contentNode = layoutBuilder.build();\n }\n return this;\n }\n\n withInheritanceContext(context: InheritanceContext): StepBuilder {\n this.inheritanceContext = mergeInheritanceContext(context);\n return this;\n }\n\n build(): AXPStepDefinition {\n if (!this.contentNode) {\n throw new Error(`Step '${this.id}' must have content`);\n }\n\n return {\n id: this.id,\n title: this.title,\n icon: this.icon,\n description: this.description,\n skippable: this.skippable,\n content: this.contentNode,\n };\n }\n}\n\n/**\n * Step Wizard Builder - Builds step wizard widget\n */\nclass StepWizardBuilder extends LayoutContainerMixin<IStepWizardBuilder> implements IStepWizardBuilder {\n private steps: AXPStepDefinition[] = [];\n private linear = true;\n private wizardDirection: 'horizontal' | 'vertical' = 'horizontal';\n private look?: string;\n private showActions?: boolean; // undefined = auto-detect\n private wizardActions?: AXPWizardActions;\n private guards?: {\n next?: (payload: AXPStepWizardGuardPayload) => boolean | Promise<boolean>;\n prev?: (payload: AXPStepWizardGuardPayload) => boolean | Promise<boolean>;\n };\n private events?: {\n onStepChanged?: (status: AXPStepWizardStatus) => void;\n onComplete?: (status: AXPStepWizardStatus) => void;\n };\n\n constructor() {\n super('step-wizard');\n }\n\n setLinear(linear: boolean): IStepWizardBuilder {\n this.linear = linear;\n return this;\n }\n\n setDirection(direction: 'horizontal' | 'vertical'): IStepWizardBuilder {\n this.wizardDirection = direction;\n return this;\n }\n\n setLook(look: string): IStepWizardBuilder {\n this.look = look;\n return this;\n }\n\n setShowActions(show: boolean): IStepWizardBuilder {\n this.showActions = show;\n return this;\n }\n\n setActions(actions: AXPWizardActions): IStepWizardBuilder {\n this.wizardActions = actions;\n return this;\n }\n\n setGuards(guards: {\n next?: (payload: AXPStepWizardGuardPayload) => boolean | Promise<boolean>;\n prev?: (payload: AXPStepWizardGuardPayload) => boolean | Promise<boolean>;\n }): IStepWizardBuilder {\n this.guards = guards;\n return this;\n }\n\n setEvents(events: {\n onStepChanged?: (status: AXPStepWizardStatus) => void;\n onComplete?: (status: AXPStepWizardStatus) => void;\n }): IStepWizardBuilder {\n this.events = events;\n return this;\n }\n\n step(id: string, title: string, delegate: (step: StepBuilder) => void): IStepWizardBuilder {\n const stepBuilder = new StepBuilder(id, title);\n\n // ✅ IMPORTANT: Propagate inheritance context to step\n stepBuilder.withInheritanceContext(this.inheritanceContext);\n\n if (delegate) {\n delegate(stepBuilder);\n }\n\n this.steps.push(stepBuilder.build());\n return this;\n }\n\n override build(): AXPWidgetNode {\n // ✅ Validation\n if (this.steps.length === 0) {\n throw new Error('StepWizard must have at least one step');\n }\n\n // ✅ Check duplicate IDs\n const ids = this.steps.map((s) => s.id);\n const duplicates = ids.filter((id, index) => ids.indexOf(id) !== index);\n if (duplicates.length > 0) {\n throw new Error(`Duplicate step IDs found: ${duplicates.join(', ')}`);\n }\n\n const definition: AXPStepWizardDefinition = {\n steps: this.steps,\n linear: this.linear,\n direction: this.wizardDirection,\n look: this.look,\n // Do not auto-detect based on dialog context; keep explicit or undefined\n showActions: this.showActions,\n actions: this.wizardActions,\n guards: this.guards,\n events: this.events,\n };\n\n const node: AXPWidgetNode = {\n name: this.containerState.name,\n type: 'step-wizard',\n options: { definition },\n mode: this.containerState.mode,\n };\n\n return node;\n }\n}\n\n//#endregion\n","import { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXValidationSummary } from '@acorex/core/validation';\nimport {\n AXPPageStatus,\n AXPWidgetContainerComponent,\n AXPWidgetCoreModule,\n AXPWidgetNode,\n} from '@acorex/platform/layout/widget-core';\n\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n input,\n model,\n OnInit,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { cloneDeep, isEqual } from 'lodash-es';\nimport { debounceTime, distinctUntilChanged, startWith, Subject } from 'rxjs';\nimport { AXPDynamicFormDefinition, AXPDynamicFormLook, AXPDynamicFormMode } from './layout-builder.types';\nimport { AXPLayoutConversionService } from './layout-conversion.service';\nimport { AXPContextChangeEvent } from '@acorex/platform/core';\n\n@Component({\n selector: 'axp-layout-renderer',\n standalone: true,\n imports: [AXPWidgetCoreModule, AXFormModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <ax-form>\n <axp-widgets-container [context]=\"internalContext()\" (onContextChanged)=\"handleContextChanged($event)\">\n @if (widgetTree()) {\n <ng-container axp-widget-renderer [node]=\"widgetTree()!\" [mode]=\"mode()\"></ng-container>\n }\n </axp-widgets-container>\n </ax-form>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n `,\n ],\n})\nexport class AXPLayoutRendererComponent implements OnInit {\n private conversionService = inject(AXPLayoutConversionService);\n\n /**\n * RxJS subjects for context management\n */\n private contextUpdateSubject = new Subject<any>();\n private contextChangeSubject = new Subject<any>();\n\n //#region ---- Inputs ----\n\n /**\n * Form definition containing groups and fields OR widget tree\n */\n layout = input.required<AXPDynamicFormDefinition | AXPWidgetNode>();\n\n /**\n * Form context/model data\n */\n context = model<any>({});\n\n /**\n * Form appearance and density styling (normal, compact, spacious)\n */\n look = input<AXPDynamicFormLook>('fieldset');\n\n /**\n * Default form mode. Can be overridden by section/group and field.\n */\n mode = input<AXPDynamicFormMode>('edit');\n\n //#endregion\n\n //#region ---- Widget Tree Conversion ----\n\n protected widgetTree = signal<AXPWidgetNode | null>(null);\n\n /**\n * Convert layout data to widget tree when inputs change\n */\n conversionEffect = effect(() => {\n const inputData = this.layout();\n\n // Convert to widget tree\n let tree: AXPWidgetNode;\n\n if (this.isFormDefinition(inputData)) {\n // Convert form definition to widget tree\n tree = this.conversionService.convertFormDefinition(inputData);\n } else if (this.isWidgetNode(inputData)) {\n // Use widget tree directly\n tree = inputData;\n } else {\n console.warn(\n 'AXPLayoutRendererComponent: Invalid layout input. Expected AXPDynamicFormDefinition or AXPWidgetNode.',\n inputData,\n );\n return;\n }\n\n // Update widget tree only if changed (Angular effect already prevents unnecessary runs)\n const prev = this.widgetTree();\n if (!isEqual(prev, tree)) {\n this.widgetTree.set(tree);\n }\n });\n\n //#endregion\n\n //#region ---- Outputs ----\n\n /**\n * Emitted when context change is initiated\n */\n contextInitiated = output<any>();\n\n /**\n * Emitted when form becomes valid/invalid\n */\n validityChange = output<boolean>();\n\n //#endregion\n\n //#region ---- Properties ----\n\n private form = viewChild(AXFormComponent);\n private container = viewChild(AXPWidgetContainerComponent);\n\n /**\n * Internal context signal for reactivity\n */\n protected internalContext = signal<any>({});\n\n /**\n * Initial context for reset functionality\n */\n private initialContext: any = {};\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n ngOnInit(): void {\n // Initialize internal context with input context\n const ctx = this.context() ?? {};\n this.internalContext.set(ctx);\n\n // Store initial context for reset functionality\n this.initialContext = cloneDeep(ctx);\n\n // Setup RxJS streams for context management\n this.setupContextStreams();\n }\n\n //#endregion\n\n //#region ---- Effects ----\n\n /**\n * Effect to sync context changes from external to internal (optimized with RxJS)\n */\n #contextSyncEffect = effect(() => {\n const ctx = this.context() ?? {};\n this.contextUpdateSubject.next(ctx);\n });\n\n /**\n * Effect to handle widget tree status changes\n */\n #widgetStatusEffect = effect(() => {\n const widgetTree = this.widgetTree();\n if (widgetTree) {\n this.container()?.builderService.setStatus(AXPPageStatus.Rendered);\n }\n });\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n /**\n * Handle context change events from widget container (optimized with RxJS)\n */\n protected handleContextChanged(event: AXPContextChangeEvent): void {\n if (event.state === 'initiated') {\n this.contextInitiated.emit(event.data);\n } else {\n this.contextChangeSubject.next(event.data ?? {});\n }\n }\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Get the form component instance\n */\n public getForm(): AXFormComponent | undefined {\n return this.form();\n }\n\n /**\n * Get the widget container component instance\n */\n public getContainer(): AXPWidgetContainerComponent | undefined {\n return this.container();\n }\n\n /**\n * Get current form context\n */\n public getContext(): any {\n return this.internalContext();\n }\n\n /**\n * Update form context programmatically\n */\n public updateContext(context: any): void {\n this.internalContext.set(context);\n }\n\n /**\n * Get the current widget tree\n */\n public getWidgetTree(): AXPWidgetNode | null {\n return this.widgetTree();\n }\n\n /**\n * Validate the form\n */\n public async validate(): Promise<AXValidationSummary> {\n const form = this.form();\n if (form) {\n const isValid = await form.validate();\n this.validityChange.emit(isValid.result);\n return isValid;\n }\n return {\n result: false,\n messages: [],\n rules: [],\n } as AXValidationSummary;\n }\n\n /**\n * Clear the form context\n */\n public clear(): void {\n // Clear internal context\n this.internalContext.set({});\n\n // Update the model signal\n this.context.set({});\n }\n\n /**\n * Reset the form to its initial state\n */\n public reset(): void {\n // Reset to initial context\n const resetContext = cloneDeep(this.initialContext);\n this.internalContext.set(resetContext);\n\n // Update the model signal\n this.context.set(resetContext);\n }\n\n //#endregion\n\n //#region ---- RxJS Stream Setup ----\n\n /**\n * Setup RxJS streams for context management\n */\n private setupContextStreams(): void {\n // Debounced context updates from external source\n this.contextUpdateSubject\n .pipe(\n debounceTime(16), // ~60fps\n distinctUntilChanged((prev, curr) => isEqual(prev, curr)),\n startWith(this.context() ?? {}),\n )\n .subscribe((ctx) => {\n this.internalContext.set(ctx);\n });\n\n // Debounced context changes from widgets\n this.contextChangeSubject\n .pipe(\n debounceTime(16), // ~60fps\n distinctUntilChanged((prev, curr) => isEqual(prev, curr)),\n )\n .subscribe((ctx) => {\n this.internalContext.set(ctx);\n // Update the model signal directly - it will emit change events automatically\n this.context.set(this.internalContext());\n });\n }\n\n //#endregion\n\n //#region ---- Type Guards ----\n\n /**\n * Type guard to check if the input is a form definition\n */\n private isFormDefinition(data: any): data is AXPDynamicFormDefinition {\n return data && typeof data === 'object' && 'groups' in data && Array.isArray(data.groups);\n }\n\n /**\n * Type guard to check if the input is a widget node\n */\n private isWidgetNode(data: any): data is AXPWidgetNode {\n return data && typeof data === 'object' && 'type' in data && typeof data.type === 'string';\n }\n\n //#endregion\n}\n","/** Registration key for {@link AXPPreviewWidgetFieldCommand}; lives alone so `LayoutBuilderModule` can reference it without static-importing the command implementation. */\nexport const AXP_PREVIEW_WIDGET_FIELD_COMMAND_KEY = 'Widget:Preview';\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { provideCommandSetups } from '@acorex/platform/runtime';\nimport { AXPLayoutBuilderService } from './layout-builder.service';\nimport { AXPLayoutRendererComponent } from './layout-renderer.component';\nimport { AXP_PREVIEW_WIDGET_FIELD_COMMAND_KEY } from './preview-widget-field.command.key';\n\n@NgModule({\n imports: [CommonModule, AXPLayoutRendererComponent],\n providers: [\n AXPLayoutBuilderService,\n provideCommandSetups([\n {\n key: AXP_PREVIEW_WIDGET_FIELD_COMMAND_KEY,\n command: () => import('./preview-widget-field.command').then((c) => c.AXPPreviewWidgetFieldCommand),\n },\n ]),\n ],\n exports: [AXPLayoutRendererComponent],\n})\nexport class LayoutBuilderModule {}\n","import { AXDataSource } from '@acorex/cdk/common';\nimport { AXPopupSizeType } from '@acorex/components/popup';\nimport { AXStepWizardLook } from '@acorex/components/step-wizard';\nimport {\n AXPActionMenuItem,\n AXPExpression,\n AXPGridLayoutOptions,\n AXPOptionsData,\n AXPValidationRules,\n type AXPMultiLanguageString,\n} from '@acorex/platform/core';\nimport { AXPWidgetNode, AXPWidgetRenderMode } from '@acorex/platform/layout/widget-core';\n\n/**\n * Extended widget node properties (excluding type, path, name, options, children)\n * These properties can be passed as a third parameter to customWidget method\n */\nexport type AXPWidgetNodeExtendedProperties = Omit<AXPWidgetNode, 'type' | 'path' | 'name' | 'options'>;\n\n/**\n * Form appearance and density styling (using fieldset widget look)\n */\nexport type AXPDynamicFormLook = 'fieldset' | 'card' | 'group' | 'container';\n\n/**\n * Form rendering mode\n */\nexport type AXPDynamicFormMode = 'view' | 'edit';\n\n/**\n * Form layout direction and flow\n */\nexport type AXPDynamicFormDirection = 'vertical' | 'horizontal' | 'grid';\n\n\nexport interface AXPDynamicFormFieldDefinition {\n path: string;\n title?: AXPMultiLanguageString;\n badge?: string;\n description?: AXPMultiLanguageString;\n widget: AXPWidgetNode;\n /**\n * Optional per-field rendering mode. Takes precedence over section and form modes.\n */\n mode?: AXPDynamicFormMode;\n layout?: AXPGridLayoutOptions;\n}\n\nexport interface AXPDynamicFormGroupDefinition {\n name: string;\n title?: AXPMultiLanguageString;\n description?: AXPMultiLanguageString;\n parameters: AXPDynamicFormFieldDefinition[];\n /**\n * Optional per-section rendering mode. Takes precedence over form mode and is overridden by field mode.\n */\n mode?: AXPDynamicFormMode;\n /**\n * Visual appearance of the group (fieldset, card, group, container)\n */\n look?: 'fieldset' | 'card' | 'group' | 'container';\n}\n\nexport interface AXPDynamicFormDefinition {\n groups: AXPDynamicFormGroupDefinition[];\n /**\n * Optional form-level rendering mode\n */\n mode?: AXPDynamicFormMode;\n}\n\nexport interface AXPDialogRef {\n /**\n * Manually close the dialog (optional - dialog closes automatically after user interaction)\n */\n close(): void;\n /**\n * Get the form data from the dialog\n */\n context(): any;\n /**\n * Get the action that was clicked by the user\n */\n action(): string | undefined;\n /**\n * Set the loading state of the dialog\n */\n setLoading(loading: boolean): void;\n\n /**\n * Set the options for a field after the dialog is shown and rendered\n */\n //setFieldOptions(name: string, options: AXPFormFieldOptions): void;\n}\n\n//#region ---- Widget Options Interfaces ----\n\nexport interface LayoutWidgetOptions {\n name?: string;\n}\n\nexport interface ValueWidgetOptions extends LayoutWidgetOptions {\n path: string; // Required for all value widgets\n defaultValue?: any; // should update the value in the context;\n validations?: AXPValidationRules;\n}\n\n// Widget type options - only internal widget behavior, no styling/layout\nexport interface TextBoxOptions extends ValueWidgetOptions {\n placeholder?: AXPMultiLanguageString;\n maxLength?: number;\n minLength?: number;\n prefix?: string;\n suffix?: string;\n clearButton?: boolean;\n}\n\nexport interface NumberBoxOptions extends ValueWidgetOptions {\n min?: number;\n max?: number;\n step?: number;\n placeholder?: AXPMultiLanguageString;\n format?: string;\n}\n\nexport interface SelectBoxOptions extends ValueWidgetOptions {\n dataSource: any[] | (() => any[]) | (() => Promise<any[]>) | AXDataSource<any>;\n valueField?: string;\n textField?: string;\n placeholder?: AXPMultiLanguageString;\n multiple?: boolean;\n searchable?: boolean;\n clearButton?: boolean;\n allowSearch?: boolean;\n}\n\nexport interface DateTimeBoxOptions extends ValueWidgetOptions {\n type?: 'date' | 'time' | 'datetime';\n format?: string;\n min?: Date | string;\n max?: Date | string;\n placeholder?: AXPMultiLanguageString;\n clearButton?: boolean;\n}\n\nexport interface ToggleSwitchOptions extends ValueWidgetOptions {\n label?: string;\n trueText?: string;\n falseText?: string;\n}\n\nexport interface LargeTextBoxOptions extends ValueWidgetOptions {\n rows?: number;\n maxLength?: number;\n minLength?: number;\n placeholder?: AXPMultiLanguageString;\n resizable?: boolean;\n}\n\nexport interface ColorBoxOptions extends ValueWidgetOptions {\n format?: 'hex' | 'rgb' | 'hsl';\n showAlpha?: boolean;\n showPalette?: boolean;\n}\n\n// Container-specific options based on actual widget configs\nexport interface AXPFlexContainerOptions extends LayoutWidgetOptions {\n flexDirection?: 'row' | 'column' | 'row-reverse' | 'column-reverse';\n flexWrap?: 'nowrap' | 'wrap' | 'wrap-reverse';\n justifyContent?: 'flex-start' | 'flex-end' | 'center' | 'space-between' | 'space-around' | 'space-evenly';\n alignItems?: 'flex-start' | 'flex-end' | 'center' | 'baseline' | 'stretch';\n gap?: string;\n spacing?: {\n padding?: string;\n margin?: string;\n };\n border?: {\n radius?: string;\n width?: string;\n color?: string;\n style?: string;\n };\n backgroundColor?: string;\n direction?: string;\n overflow?: string;\n overflowX?: string;\n overflowY?: string;\n width?: string;\n minWidth?: string;\n maxWidth?: string;\n height?: string;\n minHeight?: string;\n maxHeight?: string;\n}\n\nexport interface AXPGridContainerOptions extends LayoutWidgetOptions {\n grid?: {\n default?: {\n columns?: number;\n rows?: number;\n gap?: string;\n justifyItems?: string;\n alignItems?: string;\n autoFlow?: string;\n };\n };\n spacing?: {\n padding?: string;\n margin?: string;\n };\n border?: {\n radius?: string;\n width?: string;\n color?: string;\n style?: string;\n };\n backgroundColor?: string;\n direction?: string;\n overflow?: string;\n overflowX?: string;\n overflowY?: string;\n width?: string;\n minWidth?: string;\n maxWidth?: string;\n height?: string;\n minHeight?: string;\n maxHeight?: string;\n}\n\nexport interface AXPPanelContainerOptions extends LayoutWidgetOptions {\n caption?: string;\n icon?: string;\n look?: 'solid' | 'fill' | 'outline' | 'flat' | 'none';\n disabled?: boolean;\n showHeader?: boolean;\n collapsed?: boolean;\n}\n\nexport interface AXPPageContainerOptions extends LayoutWidgetOptions {\n backgroundColor?: string;\n theme?: { id: string };\n hasHeader?: boolean;\n hasFooter?: boolean;\n direction?: string;\n}\n\nexport interface AXPTabsetContainerOptions extends LayoutWidgetOptions {\n look?: 'with-line' | 'with-line-color' | 'pills' | 'pills-color';\n orientation?: 'vertical' | 'horizontal';\n activeIndex?: number;\n}\n\nexport interface AXPFieldsetContainerOptions extends LayoutWidgetOptions {\n title?: string;\n description?: string;\n icon?: string;\n collapsible?: boolean;\n isOpen?: boolean;\n look?: 'fieldset' | 'card' | 'group' | 'container';\n disabled?: boolean;\n showHeader?: boolean;\n cols?: number;\n}\n\nexport interface AXPFormFieldOptions extends LayoutWidgetOptions {\n label?: string;\n showLabel?: boolean;\n}\n\nexport interface AXPDialogContainerOptions extends LayoutWidgetOptions {\n title?: string;\n message?: string;\n size?: AXPopupSizeType;\n closeButton?: boolean;\n context?: any;\n}\n\nexport interface RichTextOptions extends ValueWidgetOptions {\n placeholder?: AXPMultiLanguageString;\n toolbar?: string[];\n readonly?: boolean;\n}\n\nexport interface PasswordBoxOptions extends ValueWidgetOptions {\n placeholder?: AXPMultiLanguageString;\n revealToggle?: boolean;\n maxLength?: number;\n}\n\nexport interface LookupBoxOptions extends ValueWidgetOptions {\n dataSource?: any[] | (() => any[]) | (() => Promise<any[]>);\n valueField?: string;\n textField?: string;\n searchable?: boolean;\n entity?: string;\n look?: string;\n columns?: any[];\n expose?: any[];\n multiple?: boolean;\n allowClear?: boolean;\n}\n\nexport interface SelectionListOptions extends ValueWidgetOptions {\n dataSource: any[] | (() => any[]) | (() => Promise<any[]>) | AXDataSource<any>;\n valueField?: string;\n textField?: string;\n multiple?: boolean;\n searchable?: boolean;\n placeholder?: AXPMultiLanguageString;\n}\n\n// List Widget Types\nexport interface AXPListWidgetColumn {\n name: string;\n title?: string;\n visible?: boolean;\n width?: string;\n widget?: {\n type: string;\n path?: string;\n options?: any;\n };\n}\n\nexport interface AXPListWidgetRowCommand {\n title?: string;\n icon?: string;\n color?: string;\n disabled?: boolean | string;\n hidden?: boolean | string;\n command?: any;\n}\n\nexport interface AXPListWidgetOptions extends LayoutWidgetOptions {\n dataSource?: any[] | AXDataSource;\n columns?: AXPListWidgetColumn[];\n\n // Event Callbacks\n onRowClick?: (row: any) => void;\n onRowDoubleClick?: (row: any) => void;\n onSelectionChange?: (selectedRows: any[]) => void;\n onRowCommand?: (command: any, selectedRows: any[]) => void;\n\n // Table Features\n paging?: boolean;\n showHeader?: boolean;\n showFooter?: boolean;\n fixHeader?: boolean;\n fixFooter?: boolean;\n fetchDataMode?: 'auto' | 'manual';\n parentField?: string;\n minHeight?: string | number;\n\n // Selection & Index\n showIndex?: boolean;\n allowSelection?: boolean;\n\n // Row Commands\n primaryCommands?: any[];\n secondaryCommands?: AXPListWidgetRowCommand[];\n\n // Loading State\n loading?: {\n enabled?: boolean;\n animation?: boolean;\n };\n}\n\n// Step Wizard Types\nexport interface AXPWizardActionDefinition {\n title?: string;\n icon?: string;\n color?: string;\n}\n\nexport interface AXPWizardActions {\n previous?: AXPWizardActionDefinition;\n next?: AXPWizardActionDefinition;\n submit?: AXPWizardActionDefinition;\n}\n\nexport interface AXPStepDefinition {\n id: string;\n title: string;\n description?: string;\n icon?: string;\n skippable?: boolean;\n content: AXPWidgetNode;\n actions?: AXPActionMenuItem[];\n}\n\nexport interface AXPStepWizardGuardPayload {\n step: AXPStepDefinition;\n index: number;\n total: number;\n isFirst: boolean;\n isLast: boolean;\n context: any;\n stepContext?: any;\n dialogContext?: any;\n}\n\nexport interface AXPStepWizardStatus {\n currentStep: AXPStepDefinition;\n index: number;\n total: number;\n isFirst: boolean;\n isLast: boolean;\n}\n\nexport interface AXPStepWizardDefinition {\n steps: AXPStepDefinition[];\n linear?: boolean;\n direction?: 'horizontal' | 'vertical';\n look?: string;\n showActions?: boolean;\n actions?: AXPWizardActions;\n guards?: {\n next?: (payload: AXPStepWizardGuardPayload) => boolean | Promise<boolean>;\n prev?: (payload: AXPStepWizardGuardPayload) => boolean | Promise<boolean>;\n };\n events?: {\n onStepChanged?: (status: AXPStepWizardStatus) => void;\n onComplete?: (status: AXPStepWizardStatus) => void;\n };\n}\n\nexport interface AXPStepWizardContainerOptions extends LayoutWidgetOptions {\n definition?: AXPStepWizardDefinition;\n}\n\n//#endregion\n\n//#region ---- Inheritance Context Types ----\n\n// Forward declaration for circular reference\nexport interface IDialogBuilder<T = AXPDialogRef> { }\n\n// Context for inheriting properties from parent nodes\nexport interface InheritanceContext {\n mode?: AXPWidgetRenderMode;\n disabled?: boolean | string;\n readonly?: boolean | string;\n direction?: 'rtl' | 'ltr';\n visible?: boolean | string;\n defaultValue?: any;\n}\n\n// Helper type for resolving inherited properties\nexport interface InheritedProperties {\n mode: AXPWidgetRenderMode;\n disabled: boolean | string | undefined;\n readonly: boolean | string | undefined;\n direction: 'rtl' | 'ltr' | undefined;\n visible: boolean | string | undefined;\n}\n\n//#endregion\n\n//#region ---- Builder State Types ----\n\n// Base widget configuration - no path management here\nexport interface AXPWidgetConfiguration {\n type: string;\n options?: AXPOptionsData;\n}\n\n// Builder state interfaces\nexport type LayoutBuilderState = AXPWidgetNode;\n\n// WidgetBuilderState mirrors AXPWidgetNode but intentionally excludes `children` for most widgets\nexport type WidgetBuilderState = AXPWidgetNode & { layout?: AXPGridLayoutOptions };\n\n// FormFieldBuilderState includes children since form fields can contain widgets\nexport type FormFieldBuilderState = AXPWidgetNode & { layout?: AXPGridLayoutOptions };\n\n// DialogBuilderState includes dialog-specific properties\nexport type DialogBuilderState = AXPWidgetNode & {\n layout?: AXPGridLayoutOptions;\n dialogOptions?: AXPDialogContainerOptions;\n actions?: {\n footer?: {\n prefix?: AXPActionMenuItem[];\n suffix?: AXPActionMenuItem[];\n };\n };\n};\n\nexport interface IActionBuilder {\n cancel(text?: string): IActionBuilder;\n submit(text?: string): IActionBuilder;\n custom(action: AXPActionMenuItem & { position?: 'prefix' | 'suffix' }): IActionBuilder;\n}\n\n//#endregion\n\n//#region ---- Core Builder Interfaces ----\n\n// Main layout builder interface - Single Responsibility: Layout orchestration\nexport interface ILayoutBuilder {\n // Predefined layout containers at root level - only these are allowed with specific types\n grid(delegate: (container: IGridContainerBuilder) => void): ILayoutBuilder;\n flex(delegate: (container: IFlexContainerBuilder) => void): ILayoutBuilder;\n panel(delegate: (container: IPanelContainerBuilder) => void): ILayoutBuilder;\n page(delegate: (container: IPageContainerBuilder) => void): ILayoutBuilder;\n tabset(delegate: (container: ITabsetContainerBuilder) => void): ILayoutBuilder;\n fieldset(delegate: (container: IFieldsetContainerBuilder) => void): ILayoutBuilder;\n dialog<T = AXPDialogRef>(delegate: (container: IDialogBuilder<T>) => void): IDialogBuilder<T>;\n stepWizard(delegate: (wizard: IStepWizardBuilder) => void): ILayoutBuilder;\n\n // Build and render\n build(): AXPWidgetNode;\n toJson(options?: { removeMeta?: boolean; removeFunctions?: boolean; pretty?: boolean }): string;\n}\n\n//#endregion\n\n//#region ---- Widget Builder Interfaces ----\n\n// Base widget builder interface - Single Responsibility: Widget configuration\nexport interface IWidgetBuilder {\n name(name: string): IWidgetBuilder;\n path(path: string): IWidgetBuilder;\n type(type: string): IWidgetBuilder;\n options(options: AXPOptionsData): IWidgetBuilder;\n\n // Layout\n layout(config: Partial<AXPGridLayoutOptions>): IWidgetBuilder;\n layout(colSpan: number): IWidgetBuilder;\n mode(mode: AXPWidgetRenderMode): IWidgetBuilder;\n\n // State (managed by higher-level systems like dynamic forms)\n visible(condition: boolean | string): IWidgetBuilder;\n disabled(condition: boolean | string): IWidgetBuilder;\n readonly(condition: boolean | string): IWidgetBuilder;\n defaultValue(defaultValue: any): IWidgetBuilder;\n direction(direction: 'rtl' | 'ltr'): IWidgetBuilder;\n\n // Inheritance context methods\n withInheritanceContext(context: InheritanceContext): IWidgetBuilder;\n getInheritanceContext(): InheritanceContext;\n\n // Build\n build(): AXPWidgetNode;\n}\n\n//#endregion\n\n//#region ---- Container Builder Interfaces ----\n\n// Base container builder interface - Interface Segregation: Common container operations\nexport interface IBaseContainerBuilder<TContainer = any> {\n name(name: string): TContainer;\n path(path: string): TContainer;\n mode(mode: AXPWidgetRenderMode): TContainer;\n visible(condition: boolean | AXPExpression): TContainer;\n disabled(condition: boolean | AXPExpression): TContainer;\n readonly(condition: boolean | AXPExpression): TContainer;\n direction(direction: 'rtl' | 'ltr'): TContainer;\n\n // Inheritance context methods\n withInheritanceContext(context: InheritanceContext): TContainer;\n getInheritanceContext(): InheritanceContext;\n\n build(): AXPWidgetNode;\n}\n\n// Layout-specific container operations\nexport interface ILayoutContainerBuilder<TContainer = any> {\n layout(config: Partial<AXPGridLayoutOptions>): TContainer;\n layout(colSpan: number): TContainer;\n}\n\n// Child container management\nexport interface IChildContainerBuilder<TContainer = any> {\n grid(delegate: (container: IGridContainerBuilder) => void): TContainer;\n flex(delegate: (container: IFlexContainerBuilder) => void): TContainer;\n panel(delegate: (container: IPanelContainerBuilder) => void): TContainer;\n page(delegate: (container: IPageContainerBuilder) => void): TContainer;\n tabset(delegate: (container: ITabsetContainerBuilder) => void): TContainer;\n fieldset(delegate: (container: IFieldsetContainerBuilder) => void): TContainer;\n formField(label: string, delegate?: (field: IFormFieldBuilder) => void): TContainer;\n stepWizard(delegate: (wizard: IStepWizardBuilder) => void): TContainer;\n dynamicForm(definition: AXPDynamicFormDefinition): TContainer;\n}\n\n// Widget creation operations\nexport interface IWidgetContainerBuilder<TContainer = any> {\n textBox(options?: TextBoxOptions): TContainer;\n largeTextBox(options?: LargeTextBoxOptions): TContainer;\n richText(options?: RichTextOptions): TContainer;\n passwordBox(options?: PasswordBoxOptions): TContainer;\n numberBox(options?: NumberBoxOptions): TContainer;\n selectBox(options: SelectBoxOptions): TContainer;\n lookupBox(options: LookupBoxOptions): TContainer;\n selectionList(options: SelectionListOptions): TContainer;\n dateTimeBox(options?: DateTimeBoxOptions): TContainer;\n toggleSwitch(options?: ToggleSwitchOptions): TContainer;\n colorBox(options?: ColorBoxOptions): TContainer;\n list(delegate: (container: IListWidgetBuilder) => void): TContainer;\n customWidget<T>(type: string, options?: T): TContainer;\n customWidget<T>(type: string, delegate: (widget: IWidgetBuilder) => void): TContainer;\n}\n\n// Flex container builder - Interface Segregation: Combines all container interfaces\nexport interface IFlexContainerBuilder\n extends IBaseContainerBuilder<IFlexContainerBuilder>,\n ILayoutContainerBuilder<IFlexContainerBuilder>,\n IChildContainerBuilder<IFlexContainerBuilder>,\n IWidgetContainerBuilder<IFlexContainerBuilder> {\n // Flex-specific options - both object and individual methods\n setOptions(options: AXPFlexContainerOptions): IFlexContainerBuilder;\n setDirection(direction: 'row' | 'column' | 'row-reverse' | 'column-reverse'): IFlexContainerBuilder;\n setWrap(wrap: 'nowrap' | 'wrap' | 'wrap-reverse'): IFlexContainerBuilder;\n setJustifyContent(\n justify: 'flex-start' | 'flex-end' | 'center' | 'space-between' | 'space-around' | 'space-evenly',\n ): IFlexContainerBuilder;\n setAlignItems(align: 'flex-start' | 'flex-end' | 'center' | 'baseline' | 'stretch'): IFlexContainerBuilder;\n setGap(gap: string): IFlexContainerBuilder;\n setBackgroundColor(color: string): IFlexContainerBuilder;\n setPadding(padding: string): IFlexContainerBuilder;\n setMargin(margin: string): IFlexContainerBuilder;\n}\n\n// Grid container builder - Interface Segregation: Combines all container interfaces\nexport interface IGridContainerBuilder\n extends IBaseContainerBuilder<IGridContainerBuilder>,\n ILayoutContainerBuilder<IGridContainerBuilder>,\n IChildContainerBuilder<IGridContainerBuilder>,\n IWidgetContainerBuilder<IGridContainerBuilder> {\n // Grid-specific options - both object and individual methods\n setOptions(options: AXPGridContainerOptions): IGridContainerBuilder;\n setColumns(columns: number): IGridContainerBuilder;\n setRows(rows: number): IGridContainerBuilder;\n setGap(gap: string): IGridContainerBuilder;\n setJustifyItems(justify: 'start' | 'end' | 'center' | 'stretch'): IGridContainerBuilder;\n setAlignItems(align: 'start' | 'end' | 'center' | 'stretch'): IGridContainerBuilder;\n setAutoFlow(flow: 'row' | 'column' | 'row dense' | 'column dense'): IGridContainerBuilder;\n setBackgroundColor(color: string): IGridContainerBuilder;\n setPadding(padding: string): IGridContainerBuilder;\n setMargin(margin: string): IGridContainerBuilder;\n /** Add a grid-item-layout child with optional placement; delegate builds the fieldset content. */\n item(\n layoutOptions: Partial<AXPGridLayoutOptions> | null | undefined,\n delegate: (container: IFieldsetContainerBuilder) => void,\n ): IGridContainerBuilder;\n}\n\n// Panel container builder - Interface Segregation: Combines all container interfaces\nexport interface IPanelContainerBuilder\n extends IBaseContainerBuilder<IPanelContainerBuilder>,\n ILayoutContainerBuilder<IPanelContainerBuilder>,\n IChildContainerBuilder<IPanelContainerBuilder>,\n IWidgetContainerBuilder<IPanelContainerBuilder> {\n // Panel-specific options\n setOptions(options: AXPPanelContainerOptions): IPanelContainerBuilder;\n setCaption(caption: string): IPanelContainerBuilder;\n setIcon(icon: string): IPanelContainerBuilder;\n setLook(look: 'solid' | 'fill' | 'outline' | 'flat' | 'none'): IPanelContainerBuilder;\n setShowHeader(show: boolean): IPanelContainerBuilder;\n setCollapsed(collapsed: boolean): IPanelContainerBuilder;\n}\n\n// Page container builder - Interface Segregation: Combines all container interfaces\nexport interface IPageContainerBuilder\n extends IBaseContainerBuilder<IPageContainerBuilder>,\n ILayoutContainerBuilder<IPageContainerBuilder>,\n IChildContainerBuilder<IPageContainerBuilder>,\n IWidgetContainerBuilder<IPageContainerBuilder> {\n // Page-specific options\n setOptions(options: AXPPageContainerOptions): IPageContainerBuilder;\n setBackgroundColor(color: string): IPageContainerBuilder;\n setTheme(theme: { id: string }): IPageContainerBuilder;\n setHasHeader(hasHeader: boolean): IPageContainerBuilder;\n setHasFooter(hasFooter: boolean): IPageContainerBuilder;\n setDirection(direction: 'rtl' | 'ltr'): IPageContainerBuilder;\n}\n\n// Tabset container builder - Interface Segregation: Combines all container interfaces\nexport interface ITabsetContainerBuilder\n extends IBaseContainerBuilder<ITabsetContainerBuilder>,\n ILayoutContainerBuilder<ITabsetContainerBuilder>,\n IChildContainerBuilder<ITabsetContainerBuilder>,\n IWidgetContainerBuilder<ITabsetContainerBuilder> {\n // Tabset-specific options\n setOptions(options: AXPTabsetContainerOptions): ITabsetContainerBuilder;\n setLook(look: 'with-line' | 'with-line-color' | 'pills' | 'pills-color'): ITabsetContainerBuilder;\n setOrientation(orientation: 'vertical' | 'horizontal'): ITabsetContainerBuilder;\n setActiveIndex(index: number): ITabsetContainerBuilder;\n}\n\n// Form field builder - Interface Segregation: Combines base and widget interfaces\n// Form fields can only contain ONE widget\nexport interface IFormFieldBuilder\n extends IBaseContainerBuilder<IFormFieldBuilder>,\n ILayoutContainerBuilder<IFormFieldBuilder> {\n // Form field specific options\n setOptions(options: AXPFormFieldOptions): IFormFieldBuilder;\n setLabel(label: string): IFormFieldBuilder;\n setShowLabel(showLabel: boolean): IFormFieldBuilder;\n defaultValue(value: any): IFormFieldBuilder;\n\n // Single widget methods (replaces IWidgetContainerBuilder)\n textBox(options?: Omit<TextBoxOptions, 'path'>): IFormFieldBuilder;\n largeTextBox(options?: Omit<LargeTextBoxOptions, 'path'>): IFormFieldBuilder;\n richText(options?: Omit<RichTextOptions, 'path'>): IFormFieldBuilder;\n passwordBox(options?: Omit<PasswordBoxOptions, 'path'>): IFormFieldBuilder;\n numberBox(options?: Omit<NumberBoxOptions, 'path'>): IFormFieldBuilder;\n selectBox(options: Omit<SelectBoxOptions, 'path'>): IFormFieldBuilder;\n lookupBox(options: Omit<LookupBoxOptions, 'path'>): IFormFieldBuilder;\n selectionList(options: Omit<SelectionListOptions, 'path'>): IFormFieldBuilder;\n dateTimeBox(options?: Omit<DateTimeBoxOptions, 'path'>): IFormFieldBuilder;\n toggleSwitch(options?: Omit<ToggleSwitchOptions, 'path'>): IFormFieldBuilder;\n colorBox(options?: Omit<ColorBoxOptions, 'path'>): IFormFieldBuilder;\n customWidget<T>(type: string, options?: Omit<T, 'path'>): IFormFieldBuilder;\n customWidget<T>(\n type: string,\n options?: Omit<T, 'path'> & Partial<AXPWidgetNodeExtendedProperties>,\n ): IFormFieldBuilder;\n}\n\n// Fieldset container builder - Interface Segregation: Specialized for form fields only\nexport interface IFieldsetContainerBuilder\n extends IBaseContainerBuilder<IFieldsetContainerBuilder>,\n ILayoutContainerBuilder<IFieldsetContainerBuilder> {\n // Fieldset-specific options\n setOptions(options: AXPFieldsetContainerOptions): IFieldsetContainerBuilder;\n setTitle(title: string): IFieldsetContainerBuilder;\n setDescription(description: string): IFieldsetContainerBuilder;\n setIcon(icon: string): IFieldsetContainerBuilder;\n setCollapsible(collapsible: boolean): IFieldsetContainerBuilder;\n setIsOpen(isOpen: boolean): IFieldsetContainerBuilder;\n setLook(look: 'fieldset' | 'card' | 'group' | 'container'): IFieldsetContainerBuilder;\n setShowHeader(showHeader: boolean): IFieldsetContainerBuilder;\n setCols(cols: number): IFieldsetContainerBuilder;\n\n // Only form fields are allowed in fieldset\n formField(label: string, delegate?: (field: IFormFieldBuilder) => void): IFieldsetContainerBuilder;\n}\n\n// Dialog container builder - Interface Segregation: Specialized for dialog functionality\nexport interface IDialogBuilder<T = AXPDialogRef> {\n // Dialog-specific options\n setOptions(options: AXPDialogContainerOptions): IDialogBuilder<T>;\n setTitle(title: string): IDialogBuilder<T>;\n setMessage(message?: string): IDialogBuilder<T>;\n setSize(size: AXPopupSizeType): IDialogBuilder<T>;\n setCloseButton(closeButton: boolean): IDialogBuilder<T>;\n setContext(context: any): IDialogBuilder<T>;\n\n // Content method - wraps layout builder methods\n content(delegate: (layoutBuilder: IFlexContainerBuilder) => void): IDialogBuilder<T>;\n\n // Actions method\n setActions(delegate?: (actions: IActionBuilder) => void): IDialogBuilder<T>;\n\n /**\n * Handler invoked when user clicks an action. Receives AXPDialogRef (context, action, setLoading, close).\n * If handler throws, dialog stays open for retry.\n * If handler returns, dialog closes and show() resolves with the return value.\n */\n onAction(handler: (dialogRef: AXPDialogRef) => T | Promise<T>): IDialogBuilder<T>;\n\n // Custom action management (for step wizard integration)\n addCustomAction(action: AXPActionMenuItem): IDialogBuilder<T>;\n\n // Dialog-specific methods\n build(): AXPWidgetNode;\n show(): Promise<T>;\n}\n\n// List Widget Builder - Interface Segregation: Combines all container interfaces\nexport interface IListWidgetBuilder\n extends IBaseContainerBuilder<IListWidgetBuilder>,\n ILayoutContainerBuilder<IListWidgetBuilder>,\n IChildContainerBuilder<IListWidgetBuilder>,\n IWidgetContainerBuilder<IListWidgetBuilder> {\n // List-specific options\n setOptions(options: AXPListWidgetOptions): IListWidgetBuilder;\n setDataSource(dataSource: any[] | AXDataSource): IListWidgetBuilder;\n setColumns(columns: AXPListWidgetColumn[]): IListWidgetBuilder;\n\n // Event handlers\n setOnRowClick(handler: (row: any) => void): IListWidgetBuilder;\n setOnRowDoubleClick(handler: (row: any) => void): IListWidgetBuilder;\n setOnSelectionChange(handler: (selectedRows: any[]) => void): IListWidgetBuilder;\n setOnRowCommand(handler: (command: any, selectedRows: any[]) => void): IListWidgetBuilder;\n\n // Table features\n setPaging(paging: boolean): IListWidgetBuilder;\n setShowHeader(show: boolean): IListWidgetBuilder;\n setShowFooter(show: boolean): IListWidgetBuilder;\n setFixHeader(fix: boolean): IListWidgetBuilder;\n setFixFooter(fix: boolean): IListWidgetBuilder;\n setFetchDataMode(mode: 'auto' | 'manual'): IListWidgetBuilder;\n setParentField(field: string): IListWidgetBuilder;\n setMinHeight(height: string | number): IListWidgetBuilder;\n\n // Selection & Index\n setShowIndex(show: boolean): IListWidgetBuilder;\n setAllowSelection(allow: boolean): IListWidgetBuilder;\n\n // Commands\n setPrimaryCommands(commands: any[]): IListWidgetBuilder;\n setSecondaryCommands(commands: AXPListWidgetRowCommand[]): IListWidgetBuilder;\n\n // Loading\n setLoading(loading: { enabled?: boolean; animation?: boolean }): IListWidgetBuilder;\n}\n\n// Step Builder - Interface for building individual steps\nexport interface IStepBuilder {\n setIcon(icon: string): IStepBuilder;\n setDescription(description: string): IStepBuilder;\n setSkippable(skippable: boolean): IStepBuilder;\n\n // Content using layout builder\n content(delegate: (layoutBuilder: ILayoutBuilder) => void): IStepBuilder;\n\n // Step-specific actions (future feature - skip for now)\n // addAction(action: AXPActionMenuItem): IStepBuilder;\n\n build(): AXPStepDefinition;\n}\n\n// Step Wizard Builder - Interface for building step wizard\nexport interface IStepWizardBuilder\n extends IBaseContainerBuilder<IStepWizardBuilder>,\n ILayoutContainerBuilder<IStepWizardBuilder> {\n // Configuration\n setLinear(linear: boolean): IStepWizardBuilder;\n setDirection(direction: 'horizontal' | 'vertical'): IStepWizardBuilder;\n setLook(look: AXStepWizardLook): IStepWizardBuilder;\n setShowActions(show: boolean): IStepWizardBuilder;\n\n // Actions\n setActions(actions: AXPWizardActions): IStepWizardBuilder;\n\n // Guards\n setGuards(guards: {\n next?: (payload: AXPStepWizardGuardPayload) => boolean | Promise<boolean>;\n prev?: (payload: AXPStepWizardGuardPayload) => boolean | Promise<boolean>;\n }): IStepWizardBuilder;\n\n // Events\n setEvents(events: {\n onStepChanged?: (status: AXPStepWizardStatus) => void;\n onComplete?: (status: AXPStepWizardStatus) => void;\n }): IStepWizardBuilder;\n\n // Add steps\n step(id: string, title: string, delegate: (step: IStepBuilder) => void): IStepWizardBuilder;\n}\n\n//#endregion\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPComponentSlotModule, AXPContextStore, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { AXPWidgetCoreElementAction, AXPWidgetCoreService, AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, effect, EventEmitter, inject, OnInit, Output, signal, viewChild } from '@angular/core';\nimport { AXPDialogRef } from './layout-builder.types';\nimport { AXPLayoutRendererComponent } from './layout-renderer.component';\n\nexport interface DialogRendererConfig {\n title: string;\n message?: string;\n context: any;\n definition: AXPWidgetNode;\n actions?: {\n footer?: {\n prefix?: any[];\n suffix?: any[];\n };\n };\n /**\n * When present, handler is called on action click with AXPDialogRef.\n * Throw = stay open for retry. Return = close and resolve show() with return value.\n */\n onAction?: (dialogRef: AXPDialogRef) => any | Promise<any>;\n}\n\nexport interface DialogRendererResult {\n context: any;\n action?: string;\n}\n\n@Component({\n selector: 'axp-dialog-renderer',\n standalone: true,\n imports: [\n CommonModule,\n AXPLayoutRendererComponent,\n AXButtonModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXTranslationModule,\n AXPComponentSlotModule,\n ],\n providers: [AXPContextStore],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <axp-component-slot name=\"dialog-header\" [context]=\"context()\"></axp-component-slot>\n <div class=\"ax-p-4\">\n <axp-layout-renderer\n [layout]=\"config.definition\"\n [context]=\"context()\"\n (contextChange)=\"handleContextChanged($event)\"\n (contextInitiated)=\"handleContextInitiated($event)\"\n >\n </axp-layout-renderer>\n </div>\n\n <!-- Custom footer slot: if it has content, default footer is hidden -->\n <axp-component-slot name=\"dialog-footer\" #footerSlot=\"slot\" [context]=\"context()\"></axp-component-slot>\n @if (footerSlot.isEmpty()) {\n <ax-footer>\n <ax-prefix>\n <axp-component-slot name=\"dialog-footer-prefix\" [context]=\"context()\"></axp-component-slot>\n @for (action of footerPrefixActions(); track $index) {\n <ax-button\n [disabled]=\"action.disabled || isFormLoading()\"\n [text]=\"(action.title | translate | async)!\"\n [look]=\"'outline'\"\n [color]=\"action.color\"\n (onClick)=\"executeAction(action)\"\n >\n <ax-prefix>\n <i class=\"{{ action.icon }}\"></i>\n </ax-prefix>\n </ax-button>\n }\n </ax-prefix>\n <ax-suffix>\n @for (action of footerSuffixActions(); track $index) {\n <ax-button\n [disabled]=\"action.disabled || isSubmitting()\"\n [text]=\"(action.title | translate | async)!\"\n [look]=\"'solid'\"\n [color]=\"action.color\"\n (onClick)=\"executeAction(action)\"\n >\n @if (isFormLoading()) {\n <ax-loading></ax-loading>\n }\n @if (action.icon) {\n <ax-prefix>\n <ax-icon icon=\"{{ action.icon }}\"></ax-icon>\n </ax-prefix>\n }\n </ax-button>\n }\n <axp-component-slot name=\"dialog-footer-suffix\" [context]=\"context()\"></axp-component-slot>\n </ax-suffix>\n </ax-footer>\n }\n `,\n})\nexport class AXPDialogRendererComponent extends AXBasePageComponent implements OnInit {\n config!: DialogRendererConfig;\n\n @Output() result = new EventEmitter<DialogRendererResult>();\n\n //#region ---- Services & Dependencies ----\n\n // ✅ Inject services\n private widgetCoreService: AXPWidgetCoreService;\n private expressionEvaluator = inject(AXPExpressionEvaluatorService);\n\n //#endregion\n\n //#region ---- State ----\n\n // Store dialog result for manual closing\n private dialogResult?: DialogRendererResult;\n\n context = signal<any>({});\n\n // This will be set by the popup service automatically - same as dynamic-dialog\n callBack: (dialogRef: AXPDialogRef) => void = () => { };\n data: any;\n\n private isDialogLoading = signal(false);\n\n // Aggregated actions for footer rendering\n footerPrefix = signal<AXPWidgetCoreElementAction[]>([]);\n footerSuffix = signal<AXPWidgetCoreElementAction[]>([]);\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n override ngOnInit(): void {\n this.context.set(this.config?.context || {});\n }\n\n //#endregion\n\n //#region ---- View Accessors ----\n\n // Access the internal layout renderer to reach the widgets container injector\n private layoutRenderer = viewChild(AXPLayoutRendererComponent);\n\n // Debounce timer for aggregating actions after widget count stabilizes\n private debounceTimer?: ReturnType<typeof setTimeout>;\n\n #eff = effect(() => {\n let count = 0;\n this.aggregateAndEvaluateActions();\n if (!this.widgetCoreService) {\n const renderer = this.layoutRenderer();\n const container = renderer?.getContainer();\n this.widgetCoreService = (container?.builderService as AXPWidgetCoreService) ?? null;\n count = this.widgetCoreService?.registeredWidgetsCount();\n } else {\n count = this.widgetCoreService?.registeredWidgetsCount();\n\n // Clear existing timer\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n }\n\n // Set new timer to call after 200ms of no count changes\n this.debounceTimer = setTimeout(() => {\n this.aggregateAndEvaluateActions();\n }, 200);\n }\n });\n\n //#endregion\n\n handleContextChanged(event: any) {\n this.context.set(event);\n this.aggregateAndEvaluateActions();\n }\n\n handleContextInitiated(event: any) {\n this.context.set(event);\n this.aggregateAndEvaluateActions();\n }\n\n footerPrefixActions() {\n return this.footerPrefix();\n }\n\n footerSuffixActions() {\n return this.footerSuffix();\n }\n\n isFormLoading() {\n return this.isDialogLoading();\n }\n\n isSubmitting() {\n return this.isDialogLoading();\n }\n\n async executeAction(action: AXPWidgetCoreElementAction) {\n const cmd = this.resolveActionCommandName(action.command);\n\n if (cmd !== 'cancel') {\n const isValid = await this.layoutRenderer()?.validate();\n if (!isValid?.result) {\n return;\n }\n }\n\n if (cmd?.startsWith('widget:')) {\n const parsed = this.parseWidgetCommand(cmd);\n if (parsed.widgetName && parsed.action) {\n await this.executeWidgetApi(parsed.widgetName, parsed.action);\n await this.aggregateAndEvaluateActions();\n return;\n }\n }\n\n const context = this.context();\n const onAction = this.config?.onAction;\n\n if (onAction) {\n const dialogRef: AXPDialogRef = {\n close: (res?: any) => this.close(res),\n context: () => this.context(),\n action: () => action.command ?? undefined,\n setLoading: (loading: boolean) => this.isDialogLoading.set(loading),\n };\n try {\n this.isDialogLoading.set(true);\n const result = await Promise.resolve(onAction(dialogRef));\n this.callBack(result);\n this.close(result);\n } catch {\n // Handler threw: stay open for retry, actions remain clickable\n } finally {\n this.isDialogLoading.set(false);\n }\n return;\n }\n\n // Fallback: treat as regular dialog action (cancel/confirm/custom)\n const result: DialogRendererResult = { context, action: cmd };\n this.dialogResult = result;\n if (this.data) {\n this.data.context = result.context;\n this.data.action = result.action;\n }\n this.callBack({\n close: (res?: any) => {\n this.close(res);\n },\n context: () => this.context(),\n action: () => result.action,\n setLoading: (loading: boolean) => {\n this.isDialogLoading.set(loading);\n },\n } as AXPDialogRef);\n // Without `onAction`, only the configured cancel action dismisses the dialog (not submit/custom).\n if (cmd === 'cancel') {\n await this.close(result);\n }\n }\n\n /** Resolves footer/widget action command to a string (e.g. `cancel`, `submit`, `widget:...`). */\n private resolveActionCommandName(\n command: AXPWidgetCoreElementAction['command'],\n ): string | undefined {\n if (typeof command === 'string') {\n return command;\n }\n if (command && typeof command === 'object' && 'name' in command) {\n return (command as { name: string }).name;\n }\n return undefined;\n }\n\n private parseWidgetCommand(cmd: string): { widgetName?: string; action?: string } {\n // Expected 'widget:<widgetName>.<action>'\n if (!cmd?.startsWith('widget:')) return {};\n const rest = cmd.slice('widget:'.length);\n const dot = rest.lastIndexOf('.');\n if (dot <= 0) return {};\n return { widgetName: rest.slice(0, dot), action: rest.slice(dot + 1) };\n }\n\n private async executeWidgetApi(widgetName: string, apiMethod: string): Promise<void> {\n if (!this.widgetCoreService) return;\n try {\n const widget = this.widgetCoreService.getWidget(widgetName) as any;\n const api = widget?.api?.();\n const fn = api?.[apiMethod];\n if (typeof fn === 'function') {\n await Promise.resolve(\n fn({\n close: (result?: any) => {\n this.close(result);\n },\n context: () => this.context(),\n setLoading: (loading: boolean) => {\n this.isDialogLoading.set(loading);\n },\n } as AXPDialogRef),\n );\n }\n } catch { }\n }\n\n override async close(result?: DialogRendererResult) {\n if (result) {\n const isValid = await this.layoutRenderer()?.validate();\n if (isValid?.result) {\n this.result.emit(result);\n }\n }\n\n super.close(result);\n }\n\n // --- Actions aggregation & evaluation ---\n private async aggregateAndEvaluateActions(): Promise<void> {\n const widgetActions = await this.collectWidgetActions();\n const dialogActions = this.collectDialogActionsFromConfig();\n const all = [...widgetActions, ...dialogActions];\n const evaluated = await this.evaluatePredicates(all);\n const visible = evaluated.filter((a) => a.hidden !== true);\n\n const prefix = visible.filter((a) => (a.zone ?? 'footer') === 'footer' && (a.placement ?? 'suffix') === 'prefix');\n const suffix = visible.filter((a) => (a.zone ?? 'footer') === 'footer' && (a.placement ?? 'suffix') === 'suffix');\n\n this.footerPrefix.set(prefix);\n this.footerSuffix.set(suffix);\n }\n\n private async collectWidgetActions(): Promise<AXPWidgetCoreElementAction[]> {\n if (!this.widgetCoreService) return [];\n const names = this.widgetCoreService.listRegisteredWidgetNames();\n const actions: AXPWidgetCoreElementAction[] = [];\n for (const name of names) {\n try {\n const widget = this.widgetCoreService.getWidget(name) as any;\n const widgetActs: AXPWidgetCoreElementAction[] = widget?.actions?.() ?? [];\n actions.push(...widgetActs);\n } catch { }\n }\n return actions;\n }\n\n private collectDialogActionsFromConfig(): AXPWidgetCoreElementAction[] {\n const footer = this.config?.actions?.footer;\n const mapOne = (a: any, placement: 'prefix' | 'suffix'): AXPWidgetCoreElementAction => ({\n title: a.title,\n command: typeof a.command === 'string' ? a.command : a.command?.name,\n icon: a.icon,\n color: a.color,\n disabled: a.disabled,\n hidden: a.hidden,\n zone: 'footer',\n placement,\n scope: a.scope,\n });\n const prefix = (footer?.prefix || []).map((a) => mapOne(a, 'prefix'));\n const suffix = (footer?.suffix || []).map((a) => mapOne(a, 'suffix'));\n return [...prefix, ...suffix];\n }\n\n private async evaluatePredicates(actions: AXPWidgetCoreElementAction[]): Promise<AXPWidgetCoreElementAction[]> {\n const out: AXPWidgetCoreElementAction[] = [];\n for (const a of actions) {\n const parsed = typeof a.command === 'string' ? this.parseWidgetCommand(a.command) : {};\n const api = parsed.widgetName ? await this.resolveApi(parsed.widgetName) : undefined;\n const scope = {\n api,\n widget: { name: parsed.widgetName },\n dialog: { context: this.context() },\n context: this.context(),\n } as any;\n const disabled = await this.evalBool(a.disabled, scope);\n const hidden = await this.evalBool(a.hidden, scope);\n out.push({ ...a, disabled, hidden });\n }\n return out;\n }\n\n private async evalBool(value: boolean | string | undefined, scope: any): Promise<boolean | undefined> {\n if (typeof value === 'boolean') return value;\n if (typeof value === 'string') {\n try {\n const result = await this.expressionEvaluator.evaluate(value, scope);\n return !!result;\n } catch {\n return false;\n }\n }\n return value;\n }\n\n private async resolveApi(widgetName: string): Promise<any> {\n try {\n await this.widgetCoreService?.waitForWidget(widgetName, 2000);\n const widget = this.widgetCoreService?.getWidget(widgetName) as any;\n return widget?.api?.();\n } catch {\n return undefined;\n }\n }\n}\n","//#region ---- Imports ----\n\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPExecuteCommandResult,\n AXPMultiLanguageStringResolverService,\n type AXPMultiLanguageString,\n} from '@acorex/platform/core';\nimport { AXP_ENTITY_DEFINITION_CRUD_SERVICE, type AXPEntityDefinitionCrudService } from '@acorex/platform/domain';\nimport { AXPWidgetNode, AXPWidgetRegistryService } from '@acorex/platform/layout/widget-core';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { Injectable, inject } from '@angular/core';\nimport { cloneDeep } from 'lodash-es';\nimport { AXPLayoutBuilderService } from './layout-builder.service';\nimport type { AXPDialogRef, IDialogBuilder, IFormFieldBuilder } from './layout-builder.types';\n\n//#endregion\n\n//#region ---- Command key & input ----\n\n/** See `AXP_PREVIEW_WIDGET_FIELD_COMMAND_KEY` in `preview-widget-field.command.key.ts`. */\n\nexport interface AXPPreviewWidgetFieldCommandInput {\n /** Widget node to render (same shape as `widget-field-configurator` model). */\n widget?: AXPWidgetNode;\n /**\n * Alternate property name for the widget node (matches metadata definition `interface` field).\n */\n interface?: AXPWidgetNode | string;\n fieldName?: string;\n fieldTitle?: AXPMultiLanguageString;\n name?: string;\n title?: AXPMultiLanguageString;\n}\n\ntype AXPPreviewWidgetFieldInvocation = AXPPreviewWidgetFieldCommandInput & {\n __context__?: { data?: Record<string, unknown>; options?: Record<string, unknown> };\n};\n\n/**\n * `customWidget` only forwards keys from its options bag into the built node via `addSingleWidget`.\n * Designer / configurator persist `defaultValue` (and other extended fields) on the widget node root;\n * spreading `options` alone drops them, so preview never applied defaults.\n */\n/**\n * Widget options are sometimes persisted with an extra nesting (`options.options`) when context\n * was merged incorrectly. Flatten so list/data-source resolution sees `dataSource` at the top level.\n */\nfunction optionsBagForPreview(node: AXPWidgetNode): Record<string, unknown> {\n const raw = (node.options ?? {}) as Record<string, unknown>;\n const inner = raw['options'];\n if (inner !== undefined && typeof inner === 'object' && !Array.isArray(inner)) {\n const { options: _nested, ...rest } = raw;\n return { ...rest, ...(inner as Record<string, unknown>) };\n }\n return { ...raw };\n}\n\nfunction extendedNodePropsForPreview(node: AXPWidgetNode): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n if (node.defaultValue !== undefined) {\n out['defaultValue'] = node.defaultValue;\n }\n if (node.triggers !== undefined) {\n out['triggers'] = node.triggers;\n }\n if (node.meta !== undefined) {\n out['meta'] = node.meta;\n }\n if (node.valueTransforms !== undefined) {\n out['valueTransforms'] = node.valueTransforms;\n }\n if (node.visible !== undefined) {\n out['visible'] = node.visible;\n }\n if (node.mode !== undefined) {\n out['mode'] = node.mode;\n }\n if (node.children !== undefined) {\n out['children'] = node.children;\n }\n return out;\n}\n\n//#endregion\n\n//#region ---- Command ----\n\n/**\n * Opens a dialog that previews a widget configuration (same behavior as the preview button on\n * `axp-widget-field-configurator`). Invoked from that component and from entity list actions.\n */\n@Injectable()\nexport class AXPPreviewWidgetFieldCommand implements AXPCommand<AXPPreviewWidgetFieldCommandInput, void> {\n private readonly formBuilderService = inject(AXPLayoutBuilderService);\n private readonly widgetRegistry = inject(AXPWidgetRegistryService);\n private readonly translationService = inject(AXTranslationService);\n private readonly mlResolver = inject(AXPMultiLanguageStringResolverService);\n private readonly crudService = inject(AXP_ENTITY_DEFINITION_CRUD_SERVICE, { optional: true });\n\n async execute(input: AXPPreviewWidgetFieldInvocation): Promise<AXPExecuteCommandResult<void>> {\n try {\n const merged = this.mergeInvocation(input);\n const currentWidget = this.normalizeWidget(merged['widget'] ?? merged['interface']);\n if (!currentWidget?.type) {\n return {\n success: false,\n message: { text: (await this.translationService.translateAsync('@general:messages.invalid-data')) || 'Invalid data' },\n };\n }\n\n const fieldName = String(merged['fieldName'] ?? merged['name'] ?? 'Field');\n const rawTitle = (merged['fieldTitle'] ?? merged['title']) as AXPMultiLanguageString | undefined;\n const fieldTitleLabel = this.resolveFieldTitleLabel(rawTitle, fieldName);\n\n const dialogTitle =\n (await this.resolveWidgetDisplayTitle(currentWidget.type)) ||\n currentWidget.type ||\n fieldTitleLabel;\n\n const previewWidgetOptions = {\n ...optionsBagForPreview(currentWidget),\n name: fieldName,\n ...extendedNodePropsForPreview(currentWidget),\n } as any;\n\n const dialogOutcome = await this.formBuilderService\n .create()\n .dialog((dialog: IDialogBuilder) => {\n dialog\n .setTitle(dialogTitle)\n .setSize('md')\n .setCloseButton(true)\n .setContext({})\n .content((layoutBuilder) => {\n layoutBuilder.formField(fieldTitleLabel, (formField: IFormFieldBuilder) => {\n formField.customWidget(currentWidget.type, previewWidgetOptions);\n });\n })\n .setActions((actions) => actions.cancel('@general:actions.close.title'));\n })\n .show();\n\n const cancelled = this.isCancelDialogOutcome(dialogOutcome);\n return {\n success: !cancelled,\n message: { text: '' },\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n return {\n success: false,\n message: { text: message },\n };\n }\n }\n\n private mergeInvocation(input: AXPPreviewWidgetFieldInvocation): Record<string, unknown> {\n const contextOptions = input.__context__?.options as Record<string, unknown> | undefined;\n const ctxData = input.__context__?.data as Record<string, unknown> | undefined;\n const { __context__: _ctx, ...rest } = input as unknown as Record<string, unknown>;\n return {\n ...(ctxData ?? {}),\n ...(contextOptions ?? {}),\n ...rest,\n };\n }\n\n private normalizeWidget(raw: unknown): AXPWidgetNode | null {\n if (raw == null) return null;\n if (typeof raw === 'string') {\n const t = raw.trim();\n return t ? { type: t, options: {} } : null;\n }\n if (typeof raw === 'object' && !Array.isArray(raw) && 'type' in raw) {\n const w = raw as AXPWidgetNode;\n return w.type ? cloneDeep(w) : null;\n }\n return null;\n }\n\n private resolveFieldTitleLabel(raw: AXPMultiLanguageString | undefined, fallback: string): string {\n let source: AXPMultiLanguageString = fallback;\n if (raw !== undefined && raw !== null) {\n if (typeof raw === 'string') {\n if (raw.trim() !== '') {\n source = raw;\n }\n } else if (typeof raw === 'object' && !Array.isArray(raw) && Object.keys(raw).length > 0) {\n source = raw;\n }\n }\n return this.mlResolver.resolve(source);\n }\n\n private isCancelDialogOutcome(outcome: unknown): boolean {\n if (outcome == null) {\n return false;\n }\n const ref = outcome as Partial<AXPDialogRef>;\n if (typeof ref.action !== 'function') {\n return false;\n }\n return ref.action() === 'cancel';\n }\n\n private async resolveWidgetDisplayTitle(widgetType: string): Promise<string | undefined> {\n const crud = this.crudService as AXPEntityDefinitionCrudService | null | undefined;\n if (crud) {\n const interfaces = await crud.listInterfaces();\n const iface = interfaces.find((d) => d.name === widgetType);\n return iface?.title ?? iface?.name;\n }\n const config = this.widgetRegistry.getOptional(widgetType);\n if (!config) {\n return undefined;\n }\n const resolved = this.mlResolver.resolve(config.title);\n return resolved || undefined;\n }\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-layout-builder.mjs","sources":["../../../../libs/platform/layout/builder/src/lib/layout-conversion.service.ts","../../../../libs/platform/layout/builder/src/lib/layout-builder.service.ts","../../../../libs/platform/layout/builder/src/lib/layout-renderer.component.ts","../../../../libs/platform/layout/builder/src/lib/preview-widget-field.command.key.ts","../../../../libs/platform/layout/builder/src/lib/layout-builder.module.ts","../../../../libs/platform/layout/builder/src/lib/layout-builder.types.ts","../../../../libs/platform/layout/builder/src/lib/dialog-renderer.component.ts","../../../../libs/platform/layout/builder/src/lib/preview-widget-field.command.ts","../../../../libs/platform/layout/builder/src/acorex-platform-layout-builder.ts"],"sourcesContent":["import { AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport {\n AXPDynamicFormDefinition,\n AXPDynamicFormFieldDefinition,\n AXPDynamicFormGroupDefinition,\n AXPDynamicFormMode,\n} from './layout-builder.types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPLayoutConversionService {\n //#region ---- Caching ----\n\n private widgetTreeCache = new Map<string, AXPWidgetNode>();\n private formDefinitionCache = new Map<string, AXPDynamicFormDefinition>();\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Convert AXPDynamicFormDefinition to AXPWidgetNode tree structure\n * Groups become Fieldset Layouts with Form Field widgets as children\n * Fields become Form Field widgets with Editor widgets as children\n */\n convertFormDefinition(formDefinition: AXPDynamicFormDefinition): AXPWidgetNode {\n // Create cache key based on form definition content\n const cacheKey = this.createFormDefinitionCacheKey(formDefinition);\n\n // Check cache first\n if (this.widgetTreeCache.has(cacheKey)) {\n return this.widgetTreeCache.get(cacheKey)!;\n }\n\n // Generate widget tree\n const widgetTree: AXPWidgetNode = {\n type: 'grid-layout',\n name: 'dynamic-form-container',\n mode: formDefinition.mode, // Preserve form-level mode\n options: {\n title: 'Dynamic Form',\n grid: {\n default: {\n columns: 1,\n gap: '1rem',\n },\n },\n },\n children: formDefinition.groups.map((group) => this.createGroupAsFieldsetWidget(group, formDefinition.mode)),\n };\n\n // Cache the result\n this.widgetTreeCache.set(cacheKey, widgetTree);\n\n return widgetTree;\n }\n\n /**\n * Convert AXPWidgetNode tree back to AXPDynamicFormDefinition\n * Parses Fieldset Layouts back to Groups\n * Parses Form Field widgets back to Fields\n */\n convertWidgetTreeToFormDefinition(widgetTree: AXPWidgetNode): AXPDynamicFormDefinition {\n // Create cache key based on widget tree content\n const cacheKey = this.createWidgetTreeCacheKey(widgetTree);\n\n // Check cache first\n if (this.formDefinitionCache.has(cacheKey)) {\n return this.formDefinitionCache.get(cacheKey)!;\n }\n\n // Parse widget tree\n const groups: AXPDynamicFormGroupDefinition[] = [];\n\n if (widgetTree.children) {\n widgetTree.children.forEach((child) => {\n if (child.type === 'fieldset-layout') {\n const group = this.extractGroupFromFieldset(child);\n groups.push(group);\n }\n });\n }\n\n const formDefinition = { groups };\n\n // Cache the result\n this.formDefinitionCache.set(cacheKey, formDefinition);\n\n return formDefinition;\n }\n\n /**\n * Validate that a widget tree represents a valid dynamic form structure\n */\n validateFormWidgetTree(widgetTree: AXPWidgetNode): boolean {\n if (!widgetTree || widgetTree.type !== 'grid-layout') {\n return false;\n }\n\n if (!widgetTree.children || widgetTree.children.length === 0) {\n return true; // Empty form is valid\n }\n\n // Check that all children are fieldset-layout widgets\n return widgetTree.children.every(\n (child) =>\n child.type === 'fieldset-layout' &&\n child.children &&\n child.children.every(\n (formField) => formField.type === 'form-field' && formField.children && formField.children.length > 0,\n ),\n );\n }\n\n /**\n * Clear all caches\n */\n clearCaches(): void {\n this.widgetTreeCache.clear();\n this.formDefinitionCache.clear();\n }\n\n /**\n * Get cache statistics\n */\n getCacheStats(): { widgetTreeCacheSize: number; formDefinitionCacheSize: number } {\n return {\n widgetTreeCacheSize: this.widgetTreeCache.size,\n formDefinitionCacheSize: this.formDefinitionCache.size,\n };\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n /**\n * Convert a single group to Fieldset widget structure\n */\n private createGroupAsFieldsetWidget(group: AXPDynamicFormGroupDefinition, formMode?: AXPDynamicFormMode): AXPWidgetNode {\n // Determine columns count from layout or default to 1\n const columnsCount = 1;\n // Use group mode if set, otherwise inherit from form mode\n const groupMode = group.mode || formMode;\n\n return {\n type: 'fieldset-layout',\n name: group.name,\n mode: groupMode,\n options: {\n title: group.title,\n description: group.description,\n cols: columnsCount,\n look: group.look || 'container', // Default to 'container' if not specified\n },\n children: this.createFieldWidgets(group.parameters, columnsCount, groupMode),\n };\n }\n\n /**\n * Convert fields to Form Field widgets\n */\n private createFieldWidgets(fields: AXPDynamicFormFieldDefinition[], columnsCount: number, groupMode?: AXPDynamicFormMode): AXPWidgetNode[] {\n return fields.map((field) => this.createFormFieldWidget(field, groupMode));\n }\n\n /**\n * Convert a single field to Form Field widget with editor as child\n */\n private createFormFieldWidget(field: AXPDynamicFormFieldDefinition, groupMode?: AXPDynamicFormMode): AXPWidgetNode {\n // Use field mode if set, otherwise inherit from group mode\n const fieldMode = field.mode || groupMode;\n\n // Ensure the editor widget also has the mode set\n const editorWidget = { ...field.widget };\n if (!editorWidget.mode) {\n editorWidget.mode = fieldMode;\n }\n\n return {\n type: 'form-field',\n name: field.path,\n mode: fieldMode,\n options: {\n label: field.title,\n badge: field.badge,\n description: field.description,\n showLabel: true,\n },\n children: [editorWidget], // The editor widget becomes a child of form-field\n };\n }\n\n /**\n * Extract group information from Fieldset Layout widget\n */\n private extractGroupFromFieldset(fieldsetNode: AXPWidgetNode): AXPDynamicFormGroupDefinition {\n const columnsCount = fieldsetNode.options?.['cols'] || 1;\n\n // Extract fields directly from fieldset children\n const fields: AXPDynamicFormFieldDefinition[] = [];\n\n if (fieldsetNode.children) {\n fieldsetNode.children.forEach((formField) => {\n if (formField.type === 'form-field' && formField.children && formField.children.length > 0) {\n const field = this.extractFieldFromFormWidget(formField);\n if (field) {\n fields.push(field);\n }\n }\n });\n }\n\n return {\n name: fieldsetNode.name || `group-${Date.now()}`,\n title: fieldsetNode.options?.['title'],\n description: fieldsetNode.options?.['description'],\n parameters: fields,\n mode: fieldsetNode.mode as AXPDynamicFormMode | undefined,\n look: fieldsetNode.options?.['look'] as 'fieldset' | 'card' | 'group' | 'container',\n };\n }\n\n /**\n * Extract field information from Form Field widget\n */\n private extractFieldFromFormWidget(formFieldNode: AXPWidgetNode): AXPDynamicFormFieldDefinition | null {\n if (!formFieldNode.children || formFieldNode.children.length === 0) {\n return null;\n }\n\n const editorWidget = formFieldNode.children[0];\n\n return {\n path: formFieldNode.name || editorWidget.name || `field-${Date.now()}`,\n title: formFieldNode.options?.['label'],\n badge: formFieldNode.options?.['badge'],\n description: formFieldNode.options?.['description'],\n widget: editorWidget,\n mode: formFieldNode.mode as AXPDynamicFormMode,\n };\n }\n\n /**\n * Create cache key for form definition\n */\n private createFormDefinitionCacheKey(formDefinition: AXPDynamicFormDefinition): string {\n // Create a hash-like key instead of full JSON string\n const keyParts: string[] = [];\n\n keyParts.push(`groups:${formDefinition.groups.length}`);\n\n formDefinition.groups.forEach((group, groupIndex) => {\n // Include group.mode so view vs edit (or mixed) layouts do not share a cached widget tree.\n const groupModePart = group.mode ?? '_';\n keyParts.push(`g${groupIndex}:${group.name}:${group.parameters.length}:${groupModePart}`);\n keyParts.push(`gL${groupIndex}:${JSON.stringify(group.title ?? null)}:${JSON.stringify(group.description ?? null)}`);\n\n group.parameters.forEach((param, paramIndex) => {\n // Field mode must be part of the key; otherwise metadata forms that only differ by\n // view/edit (same paths and widget types) incorrectly reuse the first cached tree.\n const fieldModePart = param.mode ?? '_';\n keyParts.push(`p${groupIndex}.${paramIndex}:${param.path}:${param.widget.type}:${fieldModePart}`);\n keyParts.push(\n `pL${groupIndex}.${paramIndex}:${JSON.stringify(param.title ?? null)}:${JSON.stringify(param.description ?? null)}:${JSON.stringify(param.badge ?? null)}`,\n );\n });\n });\n\n if (formDefinition.mode) {\n keyParts.push(`mode:${formDefinition.mode}`);\n }\n\n // Join with delimiter and create a shorter hash\n const keyString = keyParts.join('|');\n\n // If still too long, create a simple hash\n if (keyString.length > 100) {\n return this.createSimpleHash(keyString);\n }\n\n return keyString;\n }\n\n /**\n * Create cache key for widget tree\n */\n private createWidgetTreeCacheKey(widgetTree: AXPWidgetNode): string {\n // Create a hash-like key instead of full JSON string\n const keyParts: string[] = [];\n\n keyParts.push(`type:${widgetTree.type}`);\n\n if (widgetTree.name) {\n keyParts.push(`name:${widgetTree.name}`);\n }\n\n if (widgetTree.children) {\n keyParts.push(`children:${widgetTree.children.length}`);\n\n widgetTree.children.forEach((child, index) => {\n keyParts.push(`c${index}:${child.type}`);\n\n if (child.children) {\n keyParts.push(`cc${index}:${child.children.length}`);\n\n child.children.forEach((grandChild, gIndex) => {\n keyParts.push(`gc${index}.${gIndex}:${grandChild.type}`);\n\n if (grandChild.children) {\n keyParts.push(`gcc${index}.${gIndex}:${grandChild.children.length}`);\n }\n });\n }\n });\n }\n\n // Join with delimiter and create a shorter hash\n const keyString = keyParts.join('|');\n\n // If still too long, create a simple hash\n if (keyString.length > 100) {\n return this.createSimpleHash(keyString);\n }\n\n return keyString;\n }\n\n /**\n * Create a simple hash from a string\n */\n private createSimpleHash(str: string): string {\n let hash = 0;\n if (str.length === 0) return hash.toString();\n\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n\n return Math.abs(hash).toString(36); // Convert to base36 for shorter string\n }\n\n //#endregion\n}\n","import { AXPopupService } from '@acorex/components/popup';\nimport { AXPActionMenuItem, AXPGridLayoutOptions } from '@acorex/platform/core';\n\nimport { AXPWidgetNode, AXPWidgetRenderMode, AXPWidgetSerializationHelper } from '@acorex/platform/layout/widget-core';\nimport { Injectable, inject } from '@angular/core';\nimport { cloneDeep, isNil, set } from 'lodash-es';\nimport {\n AXPDialogContainerOptions,\n AXPDialogRef,\n AXPDynamicFormDefinition,\n AXPFieldsetContainerOptions,\n AXPFlexContainerOptions,\n AXPFormFieldOptions,\n // Container options\n AXPGridContainerOptions,\n AXPListWidgetOptions,\n AXPPageContainerOptions,\n AXPPanelContainerOptions,\n AXPStepDefinition,\n AXPStepWizardDefinition,\n AXPStepWizardGuardPayload,\n AXPStepWizardStatus,\n AXPTabsetContainerOptions,\n AXPWidgetNodeExtendedProperties,\n AXPWizardActions,\n ColorBoxOptions,\n DateTimeBoxOptions,\n DialogBuilderState,\n IActionBuilder,\n IDialogBuilder,\n IFieldsetContainerBuilder,\n IFlexContainerBuilder,\n IFormFieldBuilder,\n IGridContainerBuilder,\n ILayoutBuilder,\n IListWidgetBuilder,\n IPageContainerBuilder,\n IPanelContainerBuilder,\n IStepWizardBuilder,\n ITabsetContainerBuilder,\n IWidgetBuilder,\n // Inheritance context\n InheritanceContext,\n InheritedProperties,\n LargeTextBoxOptions,\n LayoutBuilderState,\n LookupBoxOptions,\n NumberBoxOptions,\n PasswordBoxOptions,\n RichTextOptions,\n SelectBoxOptions,\n SelectionListOptions,\n TextBoxOptions,\n ToggleSwitchOptions,\n WidgetBuilderState,\n} from './layout-builder.types';\nimport { AXPLayoutConversionService } from './layout-conversion.service';\n\n//#region ---- Inheritance Utilities ----\n\n/**\n * Resolves inherited properties from context and local values\n */\nfunction resolveInheritedProperties(\n context: InheritanceContext,\n localValues: Partial<InheritanceContext> = {},\n): InheritedProperties {\n return {\n mode: localValues.mode ?? context.mode ?? 'edit',\n disabled: localValues.disabled ?? context.disabled,\n readonly: localValues.readonly ?? context.readonly,\n direction: localValues.direction ?? context.direction,\n visible: localValues.visible ?? context.visible,\n };\n}\n\n/**\n * Merges inheritance context with local overrides\n */\nfunction mergeInheritanceContext(\n parentContext: InheritanceContext,\n localOverrides: Partial<InheritanceContext> = {},\n): InheritanceContext {\n return {\n ...parentContext,\n ...localOverrides,\n };\n}\n\n/**\n * Generates a random string for path/name generation\n */\nfunction generateRandomId(): string {\n return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n}\n\n/**\n * Converts label to a valid path/name\n */\nfunction labelToPath(label: string): string {\n return label\n .toLowerCase()\n .replace(/[^a-z0-9\\s]/g, '') // Remove special characters\n .replace(/\\s+/g, '_') // Replace spaces with underscores\n .substring(0, 50); // Limit length\n}\n\n/**\n * Generates path for value widgets based on hierarchy\n */\nfunction generateValueWidgetPath(widgetName?: string, formFieldName?: string, formFieldLabel?: string): string {\n // Priority: widget name -> form field name -> generated from label -> random\n if (widgetName) {\n return widgetName;\n }\n\n if (formFieldName) {\n return formFieldName;\n }\n\n if (formFieldLabel) {\n return labelToPath(formFieldLabel);\n }\n\n return generateRandomId();\n}\n\n/**\n * Collects default values from widget node tree and merges them into context\n * Only sets values for paths that don't already exist in the context\n * @param node - The widget node to process\n * @param context - The context object to modify in place (cloned at top level only)\n * @param isTopLevel - Internal flag to track if this is the top-level call\n */\nfunction collectDefaultValues(node: AXPWidgetNode, context: any = {}, isTopLevel: boolean = true): any {\n // Clone context only at the top level, then modify in place for recursive calls\n const result = isTopLevel ? cloneDeep(context) : context;\n\n // Check if this node has a defaultValue and a path\n // Note: We check for both node.defaultValue and also look in node.options.defaultValue as fallback\n const defaultValue = node.defaultValue !== undefined ? node.defaultValue : (node.options as any)?.defaultValue;\n\n if (defaultValue !== undefined && !isNil(defaultValue) && node.path) {\n // Check if path exists in context using lodash get equivalent check\n const currentValue = getNestedValue(result, node.path);\n if (currentValue === undefined) {\n // Clone the defaultValue to avoid reference issues (especially for Date objects)\n const clonedValue = defaultValue instanceof Date ? new Date(defaultValue.getTime()) : cloneDeep(defaultValue);\n set(result, node.path, clonedValue);\n }\n }\n\n // Recursively process children - pass result object to accumulate values in place\n if (node.children && Array.isArray(node.children)) {\n for (const child of node.children) {\n collectDefaultValues(child, result, false);\n }\n }\n\n return result;\n}\n\n/**\n * Gets a nested value from an object using dot notation path\n */\nfunction getNestedValue(obj: any, path: string): any {\n const keys = path.split('.');\n let current = obj;\n for (const key of keys) {\n if (current === undefined || current === null || typeof current !== 'object') {\n return undefined;\n }\n current = current[key];\n }\n return current;\n}\n\n//#endregion\n\n//#region ---- Service Implementation ----\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPLayoutBuilderService {\n private popupService = inject(AXPopupService);\n\n /**\n * Create a new layout builder\n */\n create(): ILayoutBuilder {\n return new LayoutBuilder(this.popupService);\n }\n}\n\n//#endregion\n\n//#region ---- Layout Builder Implementation ----\n\n/**\n * Main layout builder - Single Responsibility: Layout orchestration\n * Open/Closed: Extensible through container delegates\n */\nclass LayoutBuilder implements ILayoutBuilder {\n private root: AXPWidgetNode = {\n children: [],\n mode: 'edit',\n type: 'flex-layout',\n };\n\n private inheritanceContext: InheritanceContext = {\n mode: 'edit',\n };\n\n constructor(private popupService?: AXPopupService) { }\n\n // Predefined layout containers at root level - delegate pattern required\n grid(delegate: (container: IGridContainerBuilder) => void): ILayoutBuilder {\n const container = new GridContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n //this.state.children!.push(container.build());\n this.root = container.build();\n return this;\n }\n\n flex(delegate: (container: IFlexContainerBuilder) => void): ILayoutBuilder {\n const container = new FlexContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.root.children!.push(container.build());\n return this;\n }\n\n panel(delegate: (container: IPanelContainerBuilder) => void): ILayoutBuilder {\n const container = new PanelContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.root.children!.push(container.build());\n return this;\n }\n\n page(delegate: (container: IPageContainerBuilder) => void): ILayoutBuilder {\n const container = new PageContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.root.children!.push(container.build());\n return this;\n }\n\n tabset(delegate: (container: ITabsetContainerBuilder) => void): ILayoutBuilder {\n const container = new TabsetContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.root.children!.push(container.build());\n return this;\n }\n\n fieldset(delegate: (container: IFieldsetContainerBuilder) => void): ILayoutBuilder {\n const container = new FieldsetContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.root.children!.push(container.build());\n return this;\n }\n\n dialog<T = AXPDialogRef>(delegate: (container: IDialogBuilder<T>) => void): IDialogBuilder<T> {\n if (!this.popupService) {\n throw new Error(\n 'LayoutBuilder requires AXPopupService to create dialogs. Please inject it in the service constructor.',\n );\n }\n const container = new DialogContainerBuilder<T>(this.popupService);\n if (delegate) {\n delegate(container);\n }\n return container;\n }\n\n stepWizard(delegate: (wizard: IStepWizardBuilder) => void): ILayoutBuilder {\n const wizard = new StepWizardBuilder();\n wizard.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(wizard);\n }\n this.root.children!.push(wizard.build());\n return this;\n }\n\n formField(label: string, delegate?: (field: IFormFieldBuilder) => void): ILayoutBuilder {\n const field = new FormFieldBuilder(label);\n field.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(field);\n }\n this.root.children!.push(field.build());\n return this;\n }\n\n build(): AXPWidgetNode {\n return {\n type: this.root.type,\n children: this.root.children,\n mode: this.root.mode,\n };\n }\n\n /**\n * Converts the built widget node to JSON string\n * @param options - Serialization options\n * @returns JSON string representation of the widget node\n */\n toJson(options?: { removeMeta?: boolean; removeFunctions?: boolean; pretty?: boolean }): string {\n const node = this.build();\n return AXPWidgetSerializationHelper.toJson(node, options);\n }\n}\n\n//#endregion\n\n//#region ---- Container Builder Implementation ----\n\n/**\n * Abstract base container builder - Open/Closed Principle\n * Provides common functionality for all container types\n */\nabstract class BaseContainerBuilder {\n protected containerState: LayoutBuilderState = {\n mode: 'edit',\n type: 'flex-layout',\n children: [],\n };\n\n protected inheritanceContext: InheritanceContext = {};\n\n constructor(containerType: string) {\n this.containerState.type = containerType;\n }\n\n // Base methods shared by all containers\n protected ensureChildren(): void {\n this.containerState.children = this.containerState.children || [];\n }\n\n protected addWidget<T>(type: string, options?: T): this {\n const child = new WidgetBuilder();\n child.type(type);\n\n // For value widgets, ensure path is provided\n const widgetOptions = options ?? {};\n const path = (widgetOptions as any).path;\n const name = (widgetOptions as any).name;\n\n if (this.isValueWidget(type) && !path) {\n throw new Error(`Value widget '${type}' requires a 'path' property`);\n }\n\n // Set name and path in widget state, not options\n if (name) {\n child.name(name);\n }\n if (path) {\n child.path(path);\n }\n\n // Remove name and path from options\n const { name: _, path: __, ...cleanOptions } = widgetOptions as any;\n\n // IMPORTANT: Apply inheritance context BEFORE setting options\n // This ensures that inherited properties (readonly, disabled, etc.) are applied first\n // Then user-provided options will override them if explicitly set\n child.withInheritanceContext(this.inheritanceContext);\n child.options(cleanOptions);\n\n this.ensureChildren();\n this.containerState.children!.push(child.build());\n return this;\n }\n\n private isValueWidget(type: string): boolean {\n const valueWidgetTypes = [\n 'text-editor',\n 'large-text-editor',\n 'rich-text-editor',\n 'password-editor',\n 'number-editor',\n 'select-editor',\n 'lookup-editor',\n 'entity-definition-provider-editor',\n 'selection-list-editor',\n 'date-time-editor',\n 'toggle-editor',\n 'color-editor',\n ];\n return valueWidgetTypes.includes(type);\n }\n\n build(): AXPWidgetNode {\n const result: AXPWidgetNode = {\n type: this.containerState.type,\n children: this.containerState.children,\n options: this.containerState.options,\n mode: this.containerState.mode,\n visible: this.containerState.visible,\n };\n\n // Add name with _form_field suffix for form fields\n if (this.containerState.type === 'form-field') {\n if (this.containerState.name) {\n result.name = this.containerState.name;\n } else if (this.containerState.options?.['label']) {\n result.name = labelToPath(this.containerState.options['label']) + '_form_field';\n }\n // Form fields don't have path\n } else {\n // Other containers can have name and path\n if (this.containerState.name) {\n result.name = this.containerState.name;\n }\n if (this.containerState.path) {\n result.path = this.containerState.path;\n }\n if (this.containerState.defaultValue !== undefined) {\n result.defaultValue = this.containerState.defaultValue;\n }\n }\n\n return result;\n }\n}\n\n/**\n * Base container builder mixin - Interface Segregation Principle\n * Provides common container operations\n */\nabstract class BaseContainerMixin<TContainer> extends BaseContainerBuilder {\n name(name: string): TContainer {\n this.containerState.name = name;\n return this as unknown as TContainer;\n }\n path(path: string): TContainer {\n this.containerState.path = path;\n return this as unknown as TContainer;\n }\n\n mode(mode: AXPWidgetRenderMode): TContainer {\n this.containerState.mode = mode;\n this.inheritanceContext.mode = mode;\n return this as unknown as TContainer;\n }\n\n visible(condition: boolean | string): TContainer {\n if (!this.containerState.options) this.containerState.options = {};\n this.containerState.options['visible'] = condition;\n this.inheritanceContext.visible = condition;\n return this as unknown as TContainer;\n }\n\n disabled(condition: boolean | string): TContainer {\n if (!this.containerState.options) this.containerState.options = {};\n this.containerState.options['disabled'] = condition;\n this.inheritanceContext.disabled = condition;\n return this as unknown as TContainer;\n }\n\n readonly(condition: boolean | string): TContainer {\n if (!this.containerState.options) this.containerState.options = {};\n this.containerState.options['readonly'] = condition;\n this.inheritanceContext.readonly = condition;\n return this as unknown as TContainer;\n }\n\n direction(direction: 'rtl' | 'ltr'): TContainer {\n if (!this.containerState.options) this.containerState.options = {};\n this.containerState.options['direction'] = direction;\n this.inheritanceContext.direction = direction;\n return this as unknown as TContainer;\n }\n\n // Inheritance context methods\n withInheritanceContext(context: InheritanceContext): TContainer {\n this.inheritanceContext = mergeInheritanceContext(context);\n return this as unknown as TContainer;\n }\n\n getInheritanceContext(): InheritanceContext {\n return { ...this.inheritanceContext };\n }\n}\n\n/**\n * Layout container mixin - Interface Segregation Principle\n * Provides layout-specific operations\n */\nabstract class LayoutContainerMixin<TContainer> extends BaseContainerMixin<TContainer> {\n layout(value: Partial<AXPGridLayoutOptions> | number): TContainer {\n // Map layout intent to grid item sizing so containers like `form-field`\n // can span multiple columns/rows inside grid/fieldset layouts.\n if (!this.containerState.options) this.containerState.options = {};\n\n if (typeof value === 'number') {\n (this.containerState.options as any).colSpan = value;\n } else if (value) {\n const positions = (value as any).positions as any;\n if (positions) {\n const placement = positions?.lg ?? positions?.xl ?? positions?.xxl ?? positions?.md ?? positions?.sm;\n if (placement) {\n const opts = this.containerState.options as any;\n if (placement.colSpan != null) opts.colSpan = placement.colSpan;\n if (placement.colStart != null) opts.colStart = placement.colStart;\n if (placement.colEnd != null) opts.colEnd = placement.colEnd;\n if (placement.rowSpan != null) opts.rowSpan = placement.rowSpan;\n if (placement.rowStart != null) opts.rowStart = placement.rowStart;\n if (placement.rowEnd != null) opts.rowEnd = placement.rowEnd;\n }\n }\n }\n\n return this as unknown as TContainer;\n }\n}\n\n/**\n * Child container mixin - Interface Segregation Principle\n * Provides child container management\n */\nabstract class ChildContainerMixin<TContainer> extends LayoutContainerMixin<TContainer> {\n grid(delegate: (container: IGridContainerBuilder) => void): TContainer {\n const container = new GridContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.ensureChildren();\n this.containerState.children!.push(container.build());\n return this as unknown as TContainer;\n }\n\n flex(delegate: (container: IFlexContainerBuilder) => void): TContainer {\n const container = new FlexContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.ensureChildren();\n this.containerState.children!.push(container.build());\n return this as unknown as TContainer;\n }\n\n panel(delegate: (container: IPanelContainerBuilder) => void): TContainer {\n const container = new PanelContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.ensureChildren();\n this.containerState.children!.push(container.build());\n return this as unknown as TContainer;\n }\n\n page(delegate: (container: IPageContainerBuilder) => void): TContainer {\n const container = new PageContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.ensureChildren();\n this.containerState.children!.push(container.build());\n return this as unknown as TContainer;\n }\n\n tabset(delegate: (container: ITabsetContainerBuilder) => void): TContainer {\n const container = new TabsetContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.ensureChildren();\n this.containerState.children!.push(container.build());\n return this as unknown as TContainer;\n }\n\n fieldset(delegate: (container: IFieldsetContainerBuilder) => void): TContainer {\n const container = new FieldsetContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.ensureChildren();\n this.containerState.children!.push(container.build());\n return this as unknown as TContainer;\n }\n\n dialog<T = AXPDialogRef>(delegate: (container: IDialogBuilder<T>) => void): IDialogBuilder<T> {\n const container = new DialogContainerBuilder<T>(); // Will use inject() fallback\n if (delegate) {\n delegate(container);\n }\n return container;\n }\n\n stepWizard(delegate: (wizard: IStepWizardBuilder) => void): TContainer {\n const wizard = new StepWizardBuilder();\n wizard.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(wizard);\n }\n this.ensureChildren();\n this.containerState.children!.push(wizard.build());\n return this as unknown as TContainer;\n }\n\n formField(label: string, delegate?: (field: IFormFieldBuilder) => void): TContainer {\n const field = new FormFieldBuilder(label);\n field.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(field);\n }\n this.ensureChildren();\n this.containerState.children!.push(field.build());\n return this as unknown as TContainer;\n }\n\n dynamicForm(definition: AXPDynamicFormDefinition): TContainer {\n // Get conversion service using inject() - works in any context in Angular 14+\n let conversionService: AXPLayoutConversionService;\n try {\n conversionService = inject(AXPLayoutConversionService);\n } catch {\n // Fallback: create service instance if inject() fails (shouldn't happen in normal usage)\n conversionService = new AXPLayoutConversionService();\n }\n\n // Convert form definition to widget node\n const widgetNode = conversionService.convertFormDefinition(definition);\n\n // Add the widget node's children to this container\n // The converted widget node has a root grid-layout, we want its children (fieldsets)\n if (widgetNode.children && widgetNode.children.length > 0) {\n this.ensureChildren();\n this.containerState.children!.push(...widgetNode.children);\n }\n\n return this as unknown as TContainer;\n }\n}\n\n/**\n * Widget container mixin - Interface Segregation Principle\n * Provides widget creation operations\n */\nabstract class WidgetContainerMixin<TContainer> extends ChildContainerMixin<TContainer> {\n textBox(options?: TextBoxOptions): TContainer {\n this.addWidget('text-editor', options);\n return this as unknown as TContainer;\n }\n\n largeTextBox(options?: LargeTextBoxOptions): TContainer {\n this.addWidget('large-text-editor', options);\n return this as unknown as TContainer;\n }\n\n richText(options?: RichTextOptions): TContainer {\n this.addWidget('rich-text-editor', options);\n return this as unknown as TContainer;\n }\n\n passwordBox(options?: PasswordBoxOptions): TContainer {\n this.addWidget('password-editor', options);\n return this as unknown as TContainer;\n }\n\n numberBox(options?: NumberBoxOptions): TContainer {\n this.addWidget('number-editor', options);\n return this as unknown as TContainer;\n }\n\n selectBox(options: SelectBoxOptions): TContainer {\n this.addWidget('select-editor', options);\n return this as unknown as TContainer;\n }\n\n lookupBox(options: LookupBoxOptions): TContainer {\n this.addWidget('lookup-editor', options);\n return this as unknown as TContainer;\n }\n\n selectionList(options: SelectionListOptions): TContainer {\n this.addWidget('selection-list-editor', options);\n return this as unknown as TContainer;\n }\n\n dateTimeBox(options?: DateTimeBoxOptions): TContainer {\n this.addWidget('date-time-editor', options);\n return this as unknown as TContainer;\n }\n\n toggleSwitch(options?: ToggleSwitchOptions): TContainer {\n this.addWidget('toggle-editor', options);\n return this as unknown as TContainer;\n }\n\n colorBox(options?: ColorBoxOptions): TContainer {\n this.addWidget('color-editor', options);\n return this as unknown as TContainer;\n }\n\n list(delegate: (container: IListWidgetBuilder) => void): TContainer {\n const container = new ListWidgetBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.ensureChildren();\n this.containerState.children!.push(container.build());\n return this as unknown as TContainer;\n }\n\n customWidget<T>(type: string, options?: T): TContainer;\n customWidget<T>(type: string, delegate: (widget: IWidgetBuilder) => void): TContainer;\n customWidget<T>(\n type: string,\n optionsOrDelegate?: T | ((widget: IWidgetBuilder) => void),\n delegate?: (widget: IWidgetBuilder) => void,\n ): TContainer {\n const child = new WidgetBuilder();\n child.type(type);\n\n // Determine if second parameter is delegate or options\n const isDelegate = typeof optionsOrDelegate === 'function';\n const options = isDelegate ? undefined : (optionsOrDelegate as T | undefined);\n const actualDelegate = isDelegate ? (optionsOrDelegate as (widget: IWidgetBuilder) => void) : delegate;\n\n // Apply inheritance context BEFORE setting options or calling delegate\n child.withInheritanceContext(this.inheritanceContext);\n\n // If options are provided (non-delegate overload), handle them\n if (!isDelegate && options !== undefined) {\n const widgetOptions = options as any;\n const path = widgetOptions.path;\n const name = widgetOptions.name;\n\n // Set name and path in widget state, not options\n if (name) {\n child.name(name);\n }\n if (path) {\n child.path(path);\n }\n\n // Remove name and path from options\n const { name: _, path: __, ...cleanOptions } = widgetOptions;\n child.options(cleanOptions);\n }\n\n // If delegate is provided, call it to allow setting path, options, and other control methods\n if (actualDelegate) {\n actualDelegate(child);\n }\n\n // Build the widget to check if path is set (for value widgets)\n const builtWidget = child.build();\n\n // Check if value widget requires path\n const valueWidgetTypes = [\n 'text-editor',\n 'large-text-editor',\n 'rich-text-editor',\n 'password-editor',\n 'number-editor',\n 'select-editor',\n 'lookup-editor',\n 'entity-definition-provider-editor',\n 'selection-list-editor',\n 'date-time-editor',\n 'toggle-editor',\n 'color-editor',\n ];\n if (valueWidgetTypes.includes(type) && !builtWidget.path) {\n throw new Error(`Value widget '${type}' requires a 'path' property`);\n }\n\n this.ensureChildren();\n this.containerState.children!.push(builtWidget);\n return this as unknown as TContainer;\n }\n}\n\n/**\n * Flex Container Builder - Liskov Substitution Principle\n * Extends WidgetContainerMixin to inherit all common functionality\n */\nclass FlexContainerBuilder extends WidgetContainerMixin<IFlexContainerBuilder> implements IFlexContainerBuilder {\n constructor() {\n super('flex-layout');\n }\n\n setOptions(options: AXPFlexContainerOptions): IFlexContainerBuilder {\n this.containerState.options = { ...this.containerState.options, ...options };\n return this;\n }\n\n // Individual fluent methods for Flex\n setDirection(direction: 'row' | 'column' | 'row-reverse' | 'column-reverse'): IFlexContainerBuilder {\n return this.setOptions({ flexDirection: direction });\n }\n\n setWrap(wrap: 'nowrap' | 'wrap' | 'wrap-reverse'): IFlexContainerBuilder {\n return this.setOptions({ flexWrap: wrap });\n }\n\n setJustifyContent(\n justify: 'flex-start' | 'flex-end' | 'center' | 'space-between' | 'space-around' | 'space-evenly',\n ): IFlexContainerBuilder {\n return this.setOptions({ justifyContent: justify });\n }\n\n setAlignItems(align: 'flex-start' | 'flex-end' | 'center' | 'baseline' | 'stretch'): IFlexContainerBuilder {\n return this.setOptions({ alignItems: align });\n }\n\n setGap(gap: string): IFlexContainerBuilder {\n return this.setOptions({ gap });\n }\n\n setBackgroundColor(color: string): IFlexContainerBuilder {\n return this.setOptions({ backgroundColor: color });\n }\n\n setPadding(padding: string): IFlexContainerBuilder {\n return this.setOptions({ spacing: { padding } });\n }\n\n setMargin(margin: string): IFlexContainerBuilder {\n return this.setOptions({ spacing: { margin } });\n }\n}\n\n/**\n * Grid Container Builder - Liskov Substitution Principle\n * Extends WidgetContainerMixin to inherit all common functionality\n */\n/**\n * Extracts flat grid-item options from AXPGridLayoutOptions for grid-item-layout widget.\n * Uses first available breakpoint (lg, xl, md, sm).\n */\nfunction toGridItemOptions(layoutOptions: Partial<AXPGridLayoutOptions> | null | undefined): Record<string, number> {\n if (!layoutOptions?.positions) return { colSpan: 12 };\n const positions = layoutOptions.positions as Record<\n string,\n { colSpan?: number; colStart?: number; colEnd?: number; rowSpan?: number; rowStart?: number; rowEnd?: number }\n >;\n const placement = positions['lg'] ?? positions['xl'] ?? positions['xxl'] ?? positions['md'] ?? positions['sm'];\n if (!placement) return { colSpan: 12 };\n const opts: Record<string, number> = {};\n if (placement['colSpan'] != null) opts['colSpan'] = placement['colSpan'];\n if (placement['colStart'] != null) opts['colStart'] = placement['colStart'];\n if (placement['colEnd'] != null) opts['colEnd'] = placement['colEnd'];\n if (placement['rowSpan'] != null) opts['rowSpan'] = placement['rowSpan'];\n if (placement['rowStart'] != null) opts['rowStart'] = placement['rowStart'];\n if (placement['rowEnd'] != null) opts['rowEnd'] = placement['rowEnd'];\n if (Object.keys(opts).length === 0) opts['colSpan'] = 12;\n return opts;\n}\n\nclass GridContainerBuilder extends WidgetContainerMixin<IGridContainerBuilder> implements IGridContainerBuilder {\n constructor() {\n super('grid-layout');\n }\n\n setOptions(options: AXPGridContainerOptions): IGridContainerBuilder {\n this.containerState.options = { ...this.containerState.options, ...options };\n return this;\n }\n\n item(\n layoutOptions: Partial<AXPGridLayoutOptions> | null | undefined,\n delegate: (container: IFieldsetContainerBuilder) => void,\n ): IGridContainerBuilder {\n const fieldset = new FieldsetContainerBuilder();\n fieldset.withInheritanceContext(this.inheritanceContext);\n delegate(fieldset);\n const fieldsetNode = fieldset.build();\n const gridItemOptions = toGridItemOptions(layoutOptions);\n const gridItemNode: AXPWidgetNode = {\n type: 'grid-item-layout',\n options: gridItemOptions,\n children: [fieldsetNode],\n };\n this.ensureChildren();\n this.containerState.children!.push(gridItemNode);\n return this;\n }\n\n // Individual fluent methods for Grid\n setColumns(columns: number): IGridContainerBuilder {\n return this.setOptions({ grid: { default: { columns } } });\n }\n\n setRows(rows: number): IGridContainerBuilder {\n return this.setOptions({ grid: { default: { rows } } });\n }\n\n setGap(gap: string): IGridContainerBuilder {\n return this.setOptions({ grid: { default: { gap } } });\n }\n\n setJustifyItems(justify: 'start' | 'end' | 'center' | 'stretch'): IGridContainerBuilder {\n return this.setOptions({ grid: { default: { justifyItems: justify } } });\n }\n\n setAlignItems(align: 'start' | 'end' | 'center' | 'stretch'): IGridContainerBuilder {\n return this.setOptions({ grid: { default: { alignItems: align } } });\n }\n\n setAutoFlow(flow: 'row' | 'column' | 'row dense' | 'column dense'): IGridContainerBuilder {\n return this.setOptions({ grid: { default: { autoFlow: flow } } });\n }\n\n setBackgroundColor(color: string): IGridContainerBuilder {\n return this.setOptions({ backgroundColor: color });\n }\n\n setPadding(padding: string): IGridContainerBuilder {\n return this.setOptions({ spacing: { padding } });\n }\n\n setMargin(margin: string): IGridContainerBuilder {\n return this.setOptions({ spacing: { margin } });\n }\n}\n\n/**\n * Panel Container Builder - Liskov Substitution Principle\n * Extends WidgetContainerMixin to inherit all common functionality\n */\nclass PanelContainerBuilder extends WidgetContainerMixin<IPanelContainerBuilder> implements IPanelContainerBuilder {\n constructor() {\n super('panel-layout');\n }\n\n setOptions(options: AXPPanelContainerOptions): IPanelContainerBuilder {\n this.containerState.options = { ...this.containerState.options, ...options };\n return this;\n }\n\n // Individual fluent methods for Panel\n setCaption(caption: string): IPanelContainerBuilder {\n return this.setOptions({ caption });\n }\n\n setIcon(icon: string): IPanelContainerBuilder {\n return this.setOptions({ icon });\n }\n\n setLook(look: 'solid' | 'fill' | 'outline' | 'flat' | 'none'): IPanelContainerBuilder {\n return this.setOptions({ look });\n }\n\n setShowHeader(show: boolean): IPanelContainerBuilder {\n return this.setOptions({ showHeader: show });\n }\n\n setCollapsed(collapsed: boolean): IPanelContainerBuilder {\n return this.setOptions({ collapsed });\n }\n}\n\n/**\n * Page Container Builder - Liskov Substitution Principle\n * Extends WidgetContainerMixin to inherit all common functionality\n */\nclass PageContainerBuilder extends WidgetContainerMixin<IPageContainerBuilder> implements IPageContainerBuilder {\n constructor() {\n super('page-layout');\n }\n\n setOptions(options: AXPPageContainerOptions): IPageContainerBuilder {\n this.containerState.options = { ...this.containerState.options, ...options };\n return this;\n }\n\n // Individual fluent methods for Page\n setBackgroundColor(color: string): IPageContainerBuilder {\n return this.setOptions({ backgroundColor: color });\n }\n\n setTheme(theme: { id: string }): IPageContainerBuilder {\n return this.setOptions({ theme });\n }\n\n setHasHeader(hasHeader: boolean): IPageContainerBuilder {\n return this.setOptions({ hasHeader });\n }\n\n setHasFooter(hasFooter: boolean): IPageContainerBuilder {\n return this.setOptions({ hasFooter });\n }\n\n setDirection(direction: string): IPageContainerBuilder {\n return this.setOptions({ direction });\n }\n}\n\n/**\n * Tabset Container Builder - Liskov Substitution Principle\n * Extends WidgetContainerMixin to inherit all common functionality\n */\nclass TabsetContainerBuilder extends WidgetContainerMixin<ITabsetContainerBuilder> implements ITabsetContainerBuilder {\n constructor() {\n super('tabset-layout');\n }\n\n setOptions(options: AXPTabsetContainerOptions): ITabsetContainerBuilder {\n this.containerState.options = { ...this.containerState.options, ...options };\n return this;\n }\n\n // Individual fluent methods for Tabset\n setLook(look: 'with-line' | 'with-line-color' | 'pills' | 'pills-color'): ITabsetContainerBuilder {\n return this.setOptions({ look });\n }\n\n setOrientation(orientation: 'vertical' | 'horizontal'): ITabsetContainerBuilder {\n return this.setOptions({ orientation });\n }\n\n setActiveIndex(index: number): ITabsetContainerBuilder {\n return this.setOptions({ activeIndex: index });\n }\n}\n\n/**\n * Form Field Builder - Liskov Substitution Principle\n * Can only contain ONE widget with automatic path generation\n */\nclass FormFieldBuilder extends LayoutContainerMixin<IFormFieldBuilder> implements IFormFieldBuilder {\n private hasWidget = false;\n private childWidget?: WidgetBuilder; // Store the widget builder, not the built widget\n\n constructor(label: string) {\n super('form-field');\n this.containerState.options = { label, showLabel: true };\n }\n\n setOptions(options: AXPFormFieldOptions): IFormFieldBuilder {\n this.containerState.options = { ...this.containerState.options, ...options };\n return this;\n }\n\n setLabel(label: string): IFormFieldBuilder {\n return this.setOptions({ label });\n }\n\n setShowLabel(showLabel: boolean): IFormFieldBuilder {\n return this.setOptions({ showLabel });\n }\n\n defaultValue(value: any): IFormFieldBuilder {\n this.containerState.defaultValue = value;\n this.inheritanceContext.defaultValue = value;\n if (this.childWidget) {\n this.childWidget.withInheritanceContext(this.inheritanceContext);\n }\n return this;\n }\n\n // Single widget methods with automatic path generation\n private addSingleWidget<T>(\n type: string,\n options?: Omit<T, 'path'> | (Omit<T, 'path'> & Partial<AXPWidgetNodeExtendedProperties>),\n ): IFormFieldBuilder {\n if (this.hasWidget) {\n throw new Error('Form field can only contain one widget');\n }\n\n const formFieldName = this.containerState.name;\n const formFieldPath = this.containerState.path; // Get explicit path from form field\n const formFieldLabel = this.containerState.options?.['label'];\n const widgetName = (options as any)?.name;\n\n // Generate widget path: explicit path -> widget name -> form field name -> label -> random\n let widgetPath: string;\n if (formFieldPath) {\n widgetPath = formFieldPath; // Use explicit form field path first\n } else if (widgetName) {\n widgetPath = widgetName;\n } else if (formFieldName) {\n widgetPath = formFieldName; // Use form field name as default path\n } else if (formFieldLabel) {\n widgetPath = labelToPath(formFieldLabel);\n } else {\n widgetPath = generateRandomId();\n }\n\n const finalName = widgetName || formFieldName || widgetPath;\n\n const child = new WidgetBuilder();\n child.type(type);\n child.name(finalName);\n child.path(widgetPath);\n\n // Extract extended properties from options (triggers, meta, valueTransforms, mode, visible, defaultValue)\n const {\n name: _,\n triggers,\n meta,\n valueTransforms,\n mode: extendedMode,\n visible: extendedVisible,\n defaultValue: extendedDefaultValue,\n children: extendedChildren,\n ...cleanOptions\n } = (options || {}) as any;\n\n child.withInheritanceContext(this.inheritanceContext);\n child.options(cleanOptions);\n\n // Apply extended properties if provided\n if (extendedMode !== undefined) {\n child.mode(extendedMode);\n }\n if (extendedVisible !== undefined) {\n child.visible(extendedVisible);\n }\n if (extendedDefaultValue !== undefined) {\n child.defaultValue(extendedDefaultValue);\n }\n // Set triggers, meta, and valueTransforms directly on widgetState\n // These are part of AXPWidgetNode but not handled by WidgetBuilder methods\n if (triggers !== undefined) {\n (child as any).widgetState.triggers = triggers;\n }\n if (meta !== undefined) {\n (child as any).widgetState.meta = meta;\n }\n if (valueTransforms !== undefined) {\n (child as any).widgetState.valueTransforms = valueTransforms;\n }\n if (extendedChildren !== undefined) {\n (child as any).widgetState.children = extendedChildren;\n }\n\n // IMPORTANT: Store the widget builder, don't build it yet!\n // This allows properties set after this method (like disabled, readonly) to be applied\n this.childWidget = child;\n this.hasWidget = true;\n\n return this;\n }\n\n textBox(options?: Omit<TextBoxOptions, 'path'>): IFormFieldBuilder {\n return this.addSingleWidget<TextBoxOptions>('text-editor', options);\n }\n\n largeTextBox(options?: Omit<LargeTextBoxOptions, 'path'>): IFormFieldBuilder {\n return this.addSingleWidget<LargeTextBoxOptions>('large-text-editor', options);\n }\n\n richText(options?: Omit<RichTextOptions, 'path'>): IFormFieldBuilder {\n return this.addSingleWidget<RichTextOptions>('rich-text-editor', options);\n }\n\n passwordBox(options?: Omit<PasswordBoxOptions, 'path'>): IFormFieldBuilder {\n return this.addSingleWidget<PasswordBoxOptions>('password-editor', options);\n }\n\n numberBox(options?: Omit<NumberBoxOptions, 'path'>): IFormFieldBuilder {\n return this.addSingleWidget<NumberBoxOptions>('number-editor', options);\n }\n\n selectBox(options: Omit<SelectBoxOptions, 'path'>): IFormFieldBuilder {\n return this.addSingleWidget<SelectBoxOptions>('select-editor', options);\n }\n\n lookupBox(options: Omit<LookupBoxOptions, 'path'>): IFormFieldBuilder {\n return this.addSingleWidget<LookupBoxOptions>('lookup-editor', options);\n }\n\n selectionList(options: Omit<SelectionListOptions, 'path'>): IFormFieldBuilder {\n return this.addSingleWidget<SelectionListOptions>('selection-list-editor', options);\n }\n\n dateTimeBox(options?: Omit<DateTimeBoxOptions, 'path'>): IFormFieldBuilder {\n return this.addSingleWidget<DateTimeBoxOptions>('date-time-editor', options);\n }\n\n toggleSwitch(options?: Omit<ToggleSwitchOptions, 'path'>): IFormFieldBuilder {\n return this.addSingleWidget<ToggleSwitchOptions>('toggle-editor', options);\n }\n\n colorBox(options?: Omit<ColorBoxOptions, 'path'>): IFormFieldBuilder {\n return this.addSingleWidget<ColorBoxOptions>('color-editor', options);\n }\n\n customWidget<T>(type: string, options?: Omit<T, 'path'>): IFormFieldBuilder;\n customWidget<T>(\n type: string,\n options?: Omit<T, 'path'> & Partial<AXPWidgetNodeExtendedProperties>,\n ): IFormFieldBuilder;\n customWidget<T>(\n type: string,\n options?: Omit<T, 'path'> | (Omit<T, 'path'> & Partial<AXPWidgetNodeExtendedProperties>),\n ): IFormFieldBuilder {\n return this.addSingleWidget<T>(type, options);\n }\n\n // Override property setters to propagate changes to child widget\n override disabled(condition: boolean | string): IFormFieldBuilder {\n super.disabled(condition);\n if (this.childWidget) {\n this.childWidget.withInheritanceContext(this.inheritanceContext);\n }\n return this;\n }\n\n override readonly(condition: boolean | string): IFormFieldBuilder {\n super.readonly(condition);\n if (this.childWidget) {\n this.childWidget.withInheritanceContext(this.inheritanceContext);\n }\n return this;\n }\n\n override visible(condition: boolean | string): IFormFieldBuilder {\n super.visible(condition);\n if (this.childWidget) {\n this.childWidget.withInheritanceContext(this.inheritanceContext);\n }\n return this;\n }\n\n override direction(direction: 'rtl' | 'ltr'): IFormFieldBuilder {\n super.direction(direction);\n if (this.childWidget) {\n this.childWidget.withInheritanceContext(this.inheritanceContext);\n }\n return this;\n }\n\n override mode(mode: AXPWidgetRenderMode): IFormFieldBuilder {\n super.mode(mode);\n if (this.childWidget) {\n this.childWidget.withInheritanceContext(this.inheritanceContext);\n }\n return this;\n }\n\n // Override withInheritanceContext to pass it to the child widget if it exists\n override withInheritanceContext(context: InheritanceContext): IFormFieldBuilder {\n // Call parent implementation first\n super.withInheritanceContext(context);\n\n // If we have a child widget, update its inheritance context too\n if (this.childWidget) {\n this.childWidget.withInheritanceContext(this.inheritanceContext);\n }\n\n return this;\n }\n\n // Override build() to build the child widget at the last moment\n override build(): AXPWidgetNode {\n // Build the child widget and add it to children before building the form field\n if (this.childWidget) {\n this.ensureChildren();\n this.containerState.children!.push(this.childWidget.build());\n }\n\n // Call parent build\n return super.build();\n }\n}\n\n/**\n * Fieldset Container Builder - Liskov Substitution Principle\n * Extends LayoutContainerMixin to inherit layout functionality\n * Specialized for form fields only\n */\nclass FieldsetContainerBuilder\n extends LayoutContainerMixin<IFieldsetContainerBuilder>\n implements IFieldsetContainerBuilder {\n constructor() {\n super('fieldset-layout');\n this.containerState.options = {};\n }\n\n setOptions(options: AXPFieldsetContainerOptions): IFieldsetContainerBuilder {\n this.containerState.options = { ...this.containerState.options, ...options };\n return this;\n }\n\n // Individual fluent methods for Fieldset\n setTitle(title: string): IFieldsetContainerBuilder {\n return this.setOptions({ title });\n }\n\n setDescription(description: string): IFieldsetContainerBuilder {\n return this.setOptions({ description });\n }\n\n setIcon(icon: string): IFieldsetContainerBuilder {\n return this.setOptions({ icon });\n }\n\n setCollapsible(collapsible: boolean): IFieldsetContainerBuilder {\n return this.setOptions({ collapsible });\n }\n\n setIsOpen(isOpen: boolean): IFieldsetContainerBuilder {\n return this.setOptions({ isOpen });\n }\n\n setLook(look: 'fieldset' | 'card' | 'group' | 'container'): IFieldsetContainerBuilder {\n return this.setOptions({ look });\n }\n\n setShowHeader(showHeader: boolean): IFieldsetContainerBuilder {\n return this.setOptions({ showHeader });\n }\n\n setCols(cols: number): IFieldsetContainerBuilder {\n return this.setOptions({ cols });\n }\n\n // Only form fields are allowed in fieldset\n formField(label: string, delegate?: (field: IFormFieldBuilder) => void): IFieldsetContainerBuilder {\n const field = new FormFieldBuilder(label);\n field.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(field);\n }\n this.ensureChildren();\n this.containerState.children!.push(field.build());\n return this;\n }\n}\n\n/**\n * List Widget Builder - Liskov Substitution Principle\n * Extends WidgetContainerMixin to inherit all common functionality\n */\nclass ListWidgetBuilder extends WidgetContainerMixin<IListWidgetBuilder> implements IListWidgetBuilder {\n constructor() {\n super('data-list');\n }\n\n setOptions(options: AXPListWidgetOptions): IListWidgetBuilder {\n this.containerState.options = { ...this.containerState.options, ...options };\n return this;\n }\n\n // Individual fluent methods for List Widget\n setDataSource(dataSource: any[]): IListWidgetBuilder {\n return this.setOptions({ dataSource });\n }\n\n setColumns(columns: any[]): IListWidgetBuilder {\n return this.setOptions({ columns });\n }\n\n // Event handlers\n setOnRowClick(handler: (row: any) => void): IListWidgetBuilder {\n return this.setOptions({ onRowClick: handler });\n }\n\n setOnRowDoubleClick(handler: (row: any) => void): IListWidgetBuilder {\n return this.setOptions({ onRowDoubleClick: handler });\n }\n\n setOnSelectionChange(handler: (selectedRows: any[]) => void): IListWidgetBuilder {\n return this.setOptions({ onSelectionChange: handler });\n }\n\n setOnRowCommand(handler: (command: any, selectedRows: any[]) => void): IListWidgetBuilder {\n return this.setOptions({ onRowCommand: handler });\n }\n\n // Table features\n setPaging(paging: boolean): IListWidgetBuilder {\n return this.setOptions({ paging });\n }\n\n setShowHeader(show: boolean): IListWidgetBuilder {\n return this.setOptions({ showHeader: show });\n }\n\n setShowFooter(show: boolean): IListWidgetBuilder {\n return this.setOptions({ showFooter: show });\n }\n\n setFixHeader(fix: boolean): IListWidgetBuilder {\n return this.setOptions({ fixHeader: fix });\n }\n\n setFixFooter(fix: boolean): IListWidgetBuilder {\n return this.setOptions({ fixFooter: fix });\n }\n\n setFetchDataMode(mode: 'auto' | 'manual'): IListWidgetBuilder {\n return this.setOptions({ fetchDataMode: mode });\n }\n\n setParentField(field: string): IListWidgetBuilder {\n return this.setOptions({ parentField: field });\n }\n\n setMinHeight(height: string | number): IListWidgetBuilder {\n return this.setOptions({ minHeight: height });\n }\n\n // Selection & Index\n setShowIndex(show: boolean): IListWidgetBuilder {\n return this.setOptions({ showIndex: show });\n }\n\n setAllowSelection(allow: boolean): IListWidgetBuilder {\n return this.setOptions({ allowSelection: allow });\n }\n\n // Commands\n setPrimaryCommands(commands: any[]): IListWidgetBuilder {\n return this.setOptions({ primaryCommands: commands });\n }\n\n setSecondaryCommands(commands: any[]): IListWidgetBuilder {\n return this.setOptions({ secondaryCommands: commands });\n }\n\n // Loading\n setLoading(loading: { enabled?: boolean; animation?: boolean }): IListWidgetBuilder {\n return this.setOptions({ loading });\n }\n}\n\n/**\n * Dialog Container Builder - Specialized for dialog functionality\n * Uses composition instead of inheritance for cleaner separation\n */\nclass DialogContainerBuilder<T = AXPDialogRef> implements IDialogBuilder<T> {\n private dialogState: DialogBuilderState = {\n type: 'flex-layout', // This will be overridden when content layout exists\n children: [],\n mode: 'edit',\n dialogOptions: {\n title: '',\n size: 'md',\n closeButton: false,\n },\n actions: {\n footer: {\n prefix: [],\n suffix: [],\n },\n },\n };\n\n private popupService: AXPopupService;\n private contentLayout?: AXPWidgetNode;\n\n constructor(popupService?: AXPopupService) {\n if (popupService) {\n this.popupService = popupService;\n } else {\n this.popupService = inject(AXPopupService);\n }\n }\n\n setOptions(options: AXPDialogContainerOptions): IDialogBuilder<T> {\n this.dialogState.dialogOptions = { ...this.dialogState.dialogOptions, ...options };\n\n return this;\n }\n\n // Individual fluent methods for Dialog\n setTitle(title: string): IDialogBuilder<T> {\n return this.setOptions({ title });\n }\n\n setMessage(message?: string): IDialogBuilder<T> {\n return this.setOptions({ message });\n }\n\n setSize(size: any): IDialogBuilder<T> {\n return this.setOptions({ size });\n }\n\n setCloseButton(closeButton: boolean): IDialogBuilder<T> {\n return this.setOptions({ closeButton });\n }\n\n setContext(context: any): IDialogBuilder<T> {\n return this.setOptions({ context });\n }\n\n content(delegate: (layoutBuilder: IFlexContainerBuilder) => void): IDialogBuilder<T> {\n if (delegate) {\n // Create a flex container directly instead of through LayoutBuilder\n const flexContainer = new FlexContainerBuilder();\n flexContainer.setDirection('column');\n flexContainer.setGap('10px');\n\n delegate(flexContainer);\n this.contentLayout = flexContainer.build();\n }\n return this;\n }\n\n setActions(delegate?: (actions: IActionBuilder) => void): IDialogBuilder<T> {\n if (delegate) {\n const actionBuilder = new ActionBuilder(this);\n delegate(actionBuilder);\n }\n return this;\n }\n\n onAction(handler: (dialogRef: AXPDialogRef) => T | Promise<T>): IDialogBuilder<T> {\n (this.dialogState.dialogOptions ??= {} as any).onAction = handler;\n return this;\n }\n\n addCustomAction(action: AXPActionMenuItem): IDialogBuilder<T> {\n // Add to actions based on position\n const position = (action as any).position || 'suffix';\n\n if (position === 'prefix') {\n if (!this.dialogState.actions!.footer!.prefix) {\n this.dialogState.actions!.footer!.prefix = [];\n }\n this.dialogState.actions!.footer!.prefix!.push(action);\n } else {\n if (!this.dialogState.actions!.footer!.suffix) {\n this.dialogState.actions!.footer!.suffix = [];\n }\n this.dialogState.actions!.footer!.suffix!.push(action);\n }\n\n return this;\n }\n\n // Build method to create dialog node\n build(): AXPWidgetNode {\n // If we have content layout, use it directly to avoid extra wrapper\n if (this.contentLayout) {\n return {\n ...this.contentLayout,\n // Add dialog-specific properties\n options: {\n ...this.contentLayout.options,\n ...this.dialogState.dialogOptions,\n },\n };\n }\n\n // Fallback to dialog state structure if no content\n const result: AXPWidgetNode = {\n ...this.dialogState,\n children: [],\n };\n\n // Add dialog-specific properties\n if (this.dialogState.dialogOptions) {\n result.options = { ...result.options, ...this.dialogState.dialogOptions };\n }\n\n return result;\n }\n\n // Dialog-specific methods\n async show(): Promise<T> {\n const dialogNode = this.build();\n\n // Import the dialog renderer component dynamically\n const { AXPDialogRendererComponent } = await import('./dialog-renderer.component');\n\n // Collect default values from widget tree and merge into initial context\n const initialContext = this.dialogState.dialogOptions?.context || {};\n\n //TODO remove using collectDefaultValues and use initialContext directly for now:\n const contextWithDefaults = collectDefaultValues(dialogNode, initialContext);\n\n // Create dialog configuration\n const dialogConfig = {\n title: this.dialogState.dialogOptions?.title || '',\n message: this.dialogState.dialogOptions?.message,\n\n context: initialContext,\n definition: dialogNode,\n actions: this.dialogState.actions,\n onAction: (this.dialogState.dialogOptions as any)?.onAction,\n };\n\n // The Promise resolves when user clicks an action button\n return new Promise(async (resolve) => {\n this.popupService.open(AXPDialogRendererComponent, {\n title: dialogConfig.title,\n size: this.dialogState.dialogOptions?.size || 'md',\n closeButton: this.dialogState.dialogOptions?.closeButton || false,\n closeOnBackdropClick: false,\n draggable: false,\n data: {\n config: dialogConfig,\n callBack: (result: T | AXPDialogRef) => {\n resolve(result as T);\n },\n },\n });\n });\n }\n}\n\n//#endregion\n\n//#region ---- Widget Builder Implementation ----\n\n/**\n * Widget Builder - Single Responsibility Principle\n * Handles individual widget configuration and building\n */\nclass WidgetBuilder implements IWidgetBuilder {\n private widgetState: WidgetBuilderState = {\n type: 'widget' as const,\n options: {} as any,\n children: [],\n };\n\n private inheritanceContext: InheritanceContext = {};\n\n constructor(name?: string) {\n if (name) {\n this.widgetState.name = name;\n }\n }\n\n type(type: string): IWidgetBuilder {\n this.widgetState.type = type;\n return this;\n }\n\n name(name: string): IWidgetBuilder {\n this.widgetState.name = name;\n if (!this.widgetState.path) {\n this.widgetState.path = name;\n }\n return this;\n }\n\n path(path: string): IWidgetBuilder {\n this.widgetState.path = path;\n return this;\n }\n\n options(options: any): IWidgetBuilder {\n // Extract defaultValue from options - it's an exceptional parameter that updates context, not a widget option\n if (options && options.defaultValue !== undefined) {\n this.widgetState.defaultValue = options.defaultValue;\n // Remove defaultValue from options since it's stored on the node, not in options\n const { defaultValue: _, ...cleanOptions } = options;\n // Merge clean options instead of replacing to preserve inherited properties\n this.widgetState.options = { ...this.widgetState.options, ...cleanOptions };\n } else {\n // Merge options instead of replacing to preserve inherited properties\n this.widgetState.options = { ...this.widgetState.options, ...options };\n }\n return this;\n }\n\n layout(value: Partial<AXPGridLayoutOptions> | number): IWidgetBuilder {\n if (typeof value === 'number') {\n this.widgetState.layout = {\n positions: {\n sm: { colSpan: 12 },\n md: { colSpan: 12 },\n lg: { colSpan: value },\n xl: { colSpan: value },\n xxl: { colSpan: value },\n },\n };\n } else {\n this.widgetState.layout = value;\n }\n return this;\n }\n\n mode(mode: AXPWidgetRenderMode): IWidgetBuilder {\n this.widgetState.mode = mode;\n this.inheritanceContext.mode = mode;\n return this;\n }\n\n visible(condition: boolean | string): IWidgetBuilder {\n if (!this.widgetState.options) {\n this.widgetState.options = {};\n }\n this.widgetState.options['visible'] = condition;\n this.widgetState.visible = condition;\n this.inheritanceContext.visible = condition;\n return this;\n }\n\n disabled(condition: boolean | string): IWidgetBuilder {\n if (!this.widgetState.options) {\n this.widgetState.options = {};\n }\n this.widgetState.options['disabled'] = condition;\n this.inheritanceContext.disabled = condition;\n return this;\n }\n\n defaultValue(defaultValue: any): IWidgetBuilder {\n this.widgetState.defaultValue = defaultValue;\n return this;\n }\n\n readonly(condition: boolean | string): IWidgetBuilder {\n if (!this.widgetState.options) {\n this.widgetState.options = {};\n }\n this.widgetState.options['readonly'] = condition;\n this.inheritanceContext.readonly = condition;\n return this;\n }\n\n direction(direction: 'rtl' | 'ltr'): IWidgetBuilder {\n if (!this.widgetState.options) {\n this.widgetState.options = {};\n }\n this.widgetState.options['direction'] = direction;\n this.inheritanceContext.direction = direction;\n return this;\n }\n\n children(children: AXPWidgetNode[]): IWidgetBuilder {\n this.widgetState.children = children;\n return this;\n }\n\n // Inheritance context methods\n withInheritanceContext(context: InheritanceContext): IWidgetBuilder {\n this.inheritanceContext = mergeInheritanceContext(context);\n\n // Apply inherited properties to widget state\n const resolved = resolveInheritedProperties(context, this.inheritanceContext);\n\n // Always apply inherited properties (remove the conditions that check if already set)\n // This allows properties to be updated when inheritance context changes\n if (resolved.mode) {\n this.widgetState.mode = resolved.mode;\n }\n\n if (!this.widgetState.options) this.widgetState.options = {};\n\n if (resolved.disabled !== undefined) {\n this.widgetState.options['disabled'] = resolved.disabled;\n }\n\n if (resolved.readonly !== undefined) {\n this.widgetState.options['readonly'] = resolved.readonly;\n }\n\n if (resolved.direction !== undefined) {\n this.widgetState.options['direction'] = resolved.direction;\n }\n\n if (resolved.visible !== undefined) {\n this.widgetState.options['visible'] = resolved.visible;\n this.widgetState.visible = resolved.visible;\n }\n\n if (context.defaultValue !== undefined) {\n this.widgetState.defaultValue = context.defaultValue;\n }\n\n return this;\n }\n\n getInheritanceContext(): InheritanceContext {\n return { ...this.inheritanceContext };\n }\n\n build(): AXPWidgetNode {\n const node: AXPWidgetNode = {\n name: this.widgetState.name,\n type: this.widgetState.type,\n options: this.widgetState.options,\n mode: this.widgetState.mode,\n path: this.widgetState.path,\n defaultValue: this.widgetState.defaultValue,\n children: this.widgetState.children,\n };\n\n // Add extended properties if they exist\n if (this.widgetState.triggers !== undefined) {\n node.triggers = this.widgetState.triggers;\n }\n if (this.widgetState.meta !== undefined) {\n node.meta = this.widgetState.meta;\n }\n if (this.widgetState.valueTransforms !== undefined) {\n node.valueTransforms = this.widgetState.valueTransforms;\n }\n if (this.widgetState.visible !== undefined) {\n node.visible = this.widgetState.visible;\n }\n\n return node;\n }\n}\n\n//#region ---- Action Builder Implementation ----\n\nclass ActionBuilder implements IActionBuilder {\n constructor(private dialogBuilder: DialogContainerBuilder<any>) { }\n\n cancel(text?: string): IActionBuilder {\n if (!this.dialogBuilder['dialogState'].actions!.footer!.suffix) {\n this.dialogBuilder['dialogState'].actions!.footer!.suffix = [];\n }\n this.dialogBuilder['dialogState'].actions!.footer!.suffix!.push({\n title: text || '@general:actions.cancel.title',\n color: 'default',\n command: { name: 'cancel' },\n });\n return this;\n }\n\n submit(text?: string): IActionBuilder {\n if (!this.dialogBuilder['dialogState'].actions!.footer!.suffix) {\n this.dialogBuilder['dialogState'].actions!.footer!.suffix = [];\n }\n this.dialogBuilder['dialogState'].actions!.footer!.suffix!.push({\n title: text || '@general:actions.submit.title',\n color: 'primary',\n command: { name: 'submit', options: { validate: true } },\n });\n return this;\n }\n\n custom(action: AXPActionMenuItem & { position?: 'prefix' | 'suffix' }): IActionBuilder {\n const position = action.position ?? 'suffix';\n if (position === 'prefix') {\n if (!this.dialogBuilder['dialogState'].actions!.footer!.prefix) {\n this.dialogBuilder['dialogState'].actions!.footer!.prefix = [];\n }\n this.dialogBuilder['dialogState'].actions!.footer!.prefix!.push(action);\n } else {\n if (!this.dialogBuilder['dialogState'].actions!.footer!.suffix) {\n this.dialogBuilder['dialogState'].actions!.footer!.suffix = [];\n }\n this.dialogBuilder['dialogState'].actions!.footer!.suffix!.push(action);\n }\n return this;\n }\n}\n\n//#endregion\n\n//#region ---- Step Wizard Builder Implementation ----\n\n/**\n * Step Builder - Builds individual steps for step wizard\n */\nclass StepBuilder {\n private icon?: string;\n private description?: string;\n private skippable = false;\n private contentNode?: AXPWidgetNode;\n private inheritanceContext: InheritanceContext = {};\n\n constructor(\n private id: string,\n private title: string,\n ) { }\n\n setIcon(icon: string): StepBuilder {\n this.icon = icon;\n return this;\n }\n\n setDescription(description: string): StepBuilder {\n this.description = description;\n return this;\n }\n\n setSkippable(skippable: boolean): StepBuilder {\n this.skippable = skippable;\n return this;\n }\n\n content(delegate: (layoutBuilder: ILayoutBuilder) => void): StepBuilder {\n if (delegate) {\n // Create LayoutBuilder in injection context (will be called from component)\n const layoutBuilder = new LayoutBuilder();\n\n // ✅ IMPORTANT: Propagate inheritance context to content\n (layoutBuilder as any).inheritanceContext = { ...this.inheritanceContext };\n\n delegate(layoutBuilder);\n this.contentNode = layoutBuilder.build();\n }\n return this;\n }\n\n withInheritanceContext(context: InheritanceContext): StepBuilder {\n this.inheritanceContext = mergeInheritanceContext(context);\n return this;\n }\n\n build(): AXPStepDefinition {\n if (!this.contentNode) {\n throw new Error(`Step '${this.id}' must have content`);\n }\n\n return {\n id: this.id,\n title: this.title,\n icon: this.icon,\n description: this.description,\n skippable: this.skippable,\n content: this.contentNode,\n };\n }\n}\n\n/**\n * Step Wizard Builder - Builds step wizard widget\n */\nclass StepWizardBuilder extends LayoutContainerMixin<IStepWizardBuilder> implements IStepWizardBuilder {\n private steps: AXPStepDefinition[] = [];\n private linear = true;\n private wizardDirection: 'horizontal' | 'vertical' = 'horizontal';\n private look?: string;\n private showActions?: boolean; // undefined = auto-detect\n private wizardActions?: AXPWizardActions;\n private guards?: {\n next?: (payload: AXPStepWizardGuardPayload) => boolean | Promise<boolean>;\n prev?: (payload: AXPStepWizardGuardPayload) => boolean | Promise<boolean>;\n };\n private events?: {\n onStepChanged?: (status: AXPStepWizardStatus) => void;\n onComplete?: (status: AXPStepWizardStatus) => void;\n };\n\n constructor() {\n super('step-wizard');\n }\n\n setLinear(linear: boolean): IStepWizardBuilder {\n this.linear = linear;\n return this;\n }\n\n setDirection(direction: 'horizontal' | 'vertical'): IStepWizardBuilder {\n this.wizardDirection = direction;\n return this;\n }\n\n setLook(look: string): IStepWizardBuilder {\n this.look = look;\n return this;\n }\n\n setShowActions(show: boolean): IStepWizardBuilder {\n this.showActions = show;\n return this;\n }\n\n setActions(actions: AXPWizardActions): IStepWizardBuilder {\n this.wizardActions = actions;\n return this;\n }\n\n setGuards(guards: {\n next?: (payload: AXPStepWizardGuardPayload) => boolean | Promise<boolean>;\n prev?: (payload: AXPStepWizardGuardPayload) => boolean | Promise<boolean>;\n }): IStepWizardBuilder {\n this.guards = guards;\n return this;\n }\n\n setEvents(events: {\n onStepChanged?: (status: AXPStepWizardStatus) => void;\n onComplete?: (status: AXPStepWizardStatus) => void;\n }): IStepWizardBuilder {\n this.events = events;\n return this;\n }\n\n step(id: string, title: string, delegate: (step: StepBuilder) => void): IStepWizardBuilder {\n const stepBuilder = new StepBuilder(id, title);\n\n // ✅ IMPORTANT: Propagate inheritance context to step\n stepBuilder.withInheritanceContext(this.inheritanceContext);\n\n if (delegate) {\n delegate(stepBuilder);\n }\n\n this.steps.push(stepBuilder.build());\n return this;\n }\n\n override build(): AXPWidgetNode {\n // ✅ Validation\n if (this.steps.length === 0) {\n throw new Error('StepWizard must have at least one step');\n }\n\n // ✅ Check duplicate IDs\n const ids = this.steps.map((s) => s.id);\n const duplicates = ids.filter((id, index) => ids.indexOf(id) !== index);\n if (duplicates.length > 0) {\n throw new Error(`Duplicate step IDs found: ${duplicates.join(', ')}`);\n }\n\n const definition: AXPStepWizardDefinition = {\n steps: this.steps,\n linear: this.linear,\n direction: this.wizardDirection,\n look: this.look,\n // Do not auto-detect based on dialog context; keep explicit or undefined\n showActions: this.showActions,\n actions: this.wizardActions,\n guards: this.guards,\n events: this.events,\n };\n\n const node: AXPWidgetNode = {\n name: this.containerState.name,\n type: 'step-wizard',\n options: { definition },\n mode: this.containerState.mode,\n };\n\n return node;\n }\n}\n\n//#endregion\n","import { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXValidationSummary } from '@acorex/core/validation';\nimport {\n AXPPageStatus,\n AXPWidgetContainerComponent,\n AXPWidgetCoreModule,\n AXPWidgetNode,\n} from '@acorex/platform/layout/widget-core';\n\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n input,\n model,\n OnInit,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { cloneDeep, isEqual } from 'lodash-es';\nimport { debounceTime, distinctUntilChanged, startWith, Subject } from 'rxjs';\nimport { AXPDynamicFormDefinition, AXPDynamicFormLook, AXPDynamicFormMode } from './layout-builder.types';\nimport { AXPLayoutConversionService } from './layout-conversion.service';\nimport { AXPContextChangeEvent } from '@acorex/platform/core';\n\n@Component({\n selector: 'axp-layout-renderer',\n standalone: true,\n imports: [AXPWidgetCoreModule, AXFormModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <ax-form>\n <axp-widgets-container [context]=\"internalContext()\" (onContextChanged)=\"handleContextChanged($event)\">\n @if (widgetTree()) {\n <ng-container axp-widget-renderer [node]=\"widgetTree()!\" [mode]=\"mode()\"></ng-container>\n }\n </axp-widgets-container>\n </ax-form>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n `,\n ],\n})\nexport class AXPLayoutRendererComponent implements OnInit {\n private conversionService = inject(AXPLayoutConversionService);\n\n /**\n * RxJS subjects for context management\n */\n private contextUpdateSubject = new Subject<any>();\n private contextChangeSubject = new Subject<any>();\n\n //#region ---- Inputs ----\n\n /**\n * Form definition containing groups and fields OR widget tree\n */\n layout = input.required<AXPDynamicFormDefinition | AXPWidgetNode>();\n\n /**\n * Form context/model data\n */\n context = model<any>({});\n\n /**\n * Form appearance and density styling (normal, compact, spacious)\n */\n look = input<AXPDynamicFormLook>('fieldset');\n\n /**\n * Default form mode. Can be overridden by section/group and field.\n */\n mode = input<AXPDynamicFormMode>('edit');\n\n //#endregion\n\n //#region ---- Widget Tree Conversion ----\n\n protected widgetTree = signal<AXPWidgetNode | null>(null);\n\n /**\n * Convert layout data to widget tree when inputs change\n */\n conversionEffect = effect(() => {\n const inputData = this.layout();\n\n // Convert to widget tree\n let tree: AXPWidgetNode;\n\n if (this.isFormDefinition(inputData)) {\n // Convert form definition to widget tree\n tree = this.conversionService.convertFormDefinition(inputData);\n } else if (this.isWidgetNode(inputData)) {\n // Use widget tree directly\n tree = inputData;\n } else {\n console.warn(\n 'AXPLayoutRendererComponent: Invalid layout input. Expected AXPDynamicFormDefinition or AXPWidgetNode.',\n inputData,\n );\n return;\n }\n\n // Update widget tree only if changed (Angular effect already prevents unnecessary runs)\n const prev = this.widgetTree();\n if (!isEqual(prev, tree)) {\n this.widgetTree.set(tree);\n }\n });\n\n //#endregion\n\n //#region ---- Outputs ----\n\n /**\n * Emitted when context change is initiated\n */\n contextInitiated = output<any>();\n\n /**\n * Emitted when form becomes valid/invalid\n */\n validityChange = output<boolean>();\n\n //#endregion\n\n //#region ---- Properties ----\n\n private form = viewChild(AXFormComponent);\n private container = viewChild(AXPWidgetContainerComponent);\n\n /**\n * Internal context signal for reactivity\n */\n protected internalContext = signal<any>({});\n\n /**\n * Initial context for reset functionality\n */\n private initialContext: any = {};\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n ngOnInit(): void {\n // Initialize internal context with input context\n const ctx = this.context() ?? {};\n this.internalContext.set(ctx);\n\n // Store initial context for reset functionality\n this.initialContext = cloneDeep(ctx);\n\n // Setup RxJS streams for context management\n this.setupContextStreams();\n }\n\n //#endregion\n\n //#region ---- Effects ----\n\n /**\n * Effect to sync context changes from external to internal (optimized with RxJS)\n */\n #contextSyncEffect = effect(() => {\n const ctx = this.context() ?? {};\n this.contextUpdateSubject.next(ctx);\n });\n\n /**\n * Effect to handle widget tree status changes\n */\n #widgetStatusEffect = effect(() => {\n const widgetTree = this.widgetTree();\n if (widgetTree) {\n this.container()?.builderService.setStatus(AXPPageStatus.Rendered);\n }\n });\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n /**\n * Handle context change events from widget container (optimized with RxJS)\n */\n protected handleContextChanged(event: AXPContextChangeEvent): void {\n if (event.state === 'initiated') {\n this.contextInitiated.emit(event.data);\n } else {\n this.contextChangeSubject.next(event.data ?? {});\n }\n }\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Get the form component instance\n */\n public getForm(): AXFormComponent | undefined {\n return this.form();\n }\n\n /**\n * Get the widget container component instance\n */\n public getContainer(): AXPWidgetContainerComponent | undefined {\n return this.container();\n }\n\n /**\n * Get current form context\n */\n public getContext(): any {\n return this.internalContext();\n }\n\n /**\n * Update form context programmatically\n */\n public updateContext(context: any): void {\n this.internalContext.set(context);\n }\n\n /**\n * Get the current widget tree\n */\n public getWidgetTree(): AXPWidgetNode | null {\n return this.widgetTree();\n }\n\n /**\n * Validate the form\n */\n public async validate(): Promise<AXValidationSummary> {\n const form = this.form();\n if (form) {\n const isValid = await form.validate();\n this.validityChange.emit(isValid.result);\n return isValid;\n }\n return {\n result: false,\n messages: [],\n rules: [],\n } as AXValidationSummary;\n }\n\n /**\n * Clear the form context\n */\n public clear(): void {\n // Clear internal context\n this.internalContext.set({});\n\n // Update the model signal\n this.context.set({});\n }\n\n /**\n * Reset the form to its initial state\n */\n public reset(): void {\n // Reset to initial context\n const resetContext = cloneDeep(this.initialContext);\n this.internalContext.set(resetContext);\n\n // Update the model signal\n this.context.set(resetContext);\n }\n\n //#endregion\n\n //#region ---- RxJS Stream Setup ----\n\n /**\n * Setup RxJS streams for context management\n */\n private setupContextStreams(): void {\n // Debounced context updates from external source\n this.contextUpdateSubject\n .pipe(\n debounceTime(16), // ~60fps\n distinctUntilChanged((prev, curr) => isEqual(prev, curr)),\n startWith(this.context() ?? {}),\n )\n .subscribe((ctx) => {\n this.internalContext.set(ctx);\n });\n\n // Debounced context changes from widgets\n this.contextChangeSubject\n .pipe(\n debounceTime(16), // ~60fps\n distinctUntilChanged((prev, curr) => isEqual(prev, curr)),\n )\n .subscribe((ctx) => {\n this.internalContext.set(ctx);\n // Update the model signal directly - it will emit change events automatically\n this.context.set(this.internalContext());\n });\n }\n\n //#endregion\n\n //#region ---- Type Guards ----\n\n /**\n * Type guard to check if the input is a form definition\n */\n private isFormDefinition(data: any): data is AXPDynamicFormDefinition {\n return data && typeof data === 'object' && 'groups' in data && Array.isArray(data.groups);\n }\n\n /**\n * Type guard to check if the input is a widget node\n */\n private isWidgetNode(data: any): data is AXPWidgetNode {\n return data && typeof data === 'object' && 'type' in data && typeof data.type === 'string';\n }\n\n //#endregion\n}\n","/** Registration key for {@link AXPPreviewWidgetFieldCommand}; lives alone so `LayoutBuilderModule` can reference it without static-importing the command implementation. */\nexport const AXP_PREVIEW_WIDGET_FIELD_COMMAND_KEY = 'Widget:Preview';\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { provideCommandSetups } from '@acorex/platform/runtime';\nimport { AXPLayoutBuilderService } from './layout-builder.service';\nimport { AXPLayoutRendererComponent } from './layout-renderer.component';\nimport { AXP_PREVIEW_WIDGET_FIELD_COMMAND_KEY } from './preview-widget-field.command.key';\n\n@NgModule({\n imports: [CommonModule, AXPLayoutRendererComponent],\n providers: [\n AXPLayoutBuilderService,\n provideCommandSetups([\n {\n key: AXP_PREVIEW_WIDGET_FIELD_COMMAND_KEY,\n command: () => import('./preview-widget-field.command').then((c) => c.AXPPreviewWidgetFieldCommand),\n },\n ]),\n ],\n exports: [AXPLayoutRendererComponent],\n})\nexport class LayoutBuilderModule {}\n","import { AXDataSource } from '@acorex/cdk/common';\nimport { AXPopupSizeType } from '@acorex/components/popup';\nimport { AXStepWizardLook } from '@acorex/components/step-wizard';\nimport {\n AXPActionMenuItem,\n AXPExpression,\n AXPGridLayoutOptions,\n AXPOptionsData,\n AXPValidationRules,\n type AXPMultiLanguageString,\n} from '@acorex/platform/core';\nimport { AXPWidgetNode, AXPWidgetRenderMode } from '@acorex/platform/layout/widget-core';\n\n/**\n * Extended widget node properties (excluding type, path, name, options, children)\n * These properties can be passed as a third parameter to customWidget method\n */\nexport type AXPWidgetNodeExtendedProperties = Omit<AXPWidgetNode, 'type' | 'path' | 'name' | 'options'>;\n\n/**\n * Form appearance and density styling (using fieldset widget look)\n */\nexport type AXPDynamicFormLook = 'fieldset' | 'card' | 'group' | 'container';\n\n/**\n * Form rendering mode\n */\nexport type AXPDynamicFormMode = 'view' | 'edit';\n\n/**\n * Form layout direction and flow\n */\nexport type AXPDynamicFormDirection = 'vertical' | 'horizontal' | 'grid';\n\n\nexport interface AXPDynamicFormFieldDefinition {\n path: string;\n title?: AXPMultiLanguageString;\n badge?: string;\n description?: AXPMultiLanguageString;\n widget: AXPWidgetNode;\n /**\n * Optional per-field rendering mode. Takes precedence over section and form modes.\n */\n mode?: AXPDynamicFormMode;\n layout?: AXPGridLayoutOptions;\n}\n\nexport interface AXPDynamicFormGroupDefinition {\n name: string;\n title?: AXPMultiLanguageString;\n description?: AXPMultiLanguageString;\n parameters: AXPDynamicFormFieldDefinition[];\n /**\n * Optional per-section rendering mode. Takes precedence over form mode and is overridden by field mode.\n */\n mode?: AXPDynamicFormMode;\n /**\n * Visual appearance of the group (fieldset, card, group, container)\n */\n look?: 'fieldset' | 'card' | 'group' | 'container';\n}\n\nexport interface AXPDynamicFormDefinition {\n groups: AXPDynamicFormGroupDefinition[];\n /**\n * Optional form-level rendering mode\n */\n mode?: AXPDynamicFormMode;\n}\n\nexport interface AXPDialogRef {\n /**\n * Manually close the dialog (optional - dialog closes automatically after user interaction)\n */\n close(): void;\n /**\n * Get the form data from the dialog\n */\n context(): any;\n /**\n * Get the action that was clicked by the user\n */\n action(): string | undefined;\n /**\n * Set the loading state of the dialog\n */\n setLoading(loading: boolean): void;\n\n /**\n * Set the options for a field after the dialog is shown and rendered\n */\n //setFieldOptions(name: string, options: AXPFormFieldOptions): void;\n}\n\n//#region ---- Widget Options Interfaces ----\n\nexport interface LayoutWidgetOptions {\n name?: string;\n}\n\nexport interface ValueWidgetOptions extends LayoutWidgetOptions {\n path: string; // Required for all value widgets\n defaultValue?: any; // should update the value in the context;\n validations?: AXPValidationRules;\n}\n\n// Widget type options - only internal widget behavior, no styling/layout\nexport interface TextBoxOptions extends ValueWidgetOptions {\n placeholder?: AXPMultiLanguageString;\n maxLength?: number;\n minLength?: number;\n prefix?: string;\n suffix?: string;\n clearButton?: boolean;\n}\n\nexport interface NumberBoxOptions extends ValueWidgetOptions {\n min?: number;\n max?: number;\n step?: number;\n placeholder?: AXPMultiLanguageString;\n format?: string;\n}\n\nexport interface SelectBoxOptions extends ValueWidgetOptions {\n dataSource: any[] | (() => any[]) | (() => Promise<any[]>) | AXDataSource<any>;\n valueField?: string;\n textField?: string;\n placeholder?: AXPMultiLanguageString;\n multiple?: boolean;\n searchable?: boolean;\n clearButton?: boolean;\n allowSearch?: boolean;\n}\n\nexport interface DateTimeBoxOptions extends ValueWidgetOptions {\n type?: 'date' | 'time' | 'datetime';\n format?: string;\n min?: Date | string;\n max?: Date | string;\n placeholder?: AXPMultiLanguageString;\n clearButton?: boolean;\n}\n\nexport interface ToggleSwitchOptions extends ValueWidgetOptions {\n label?: string;\n trueText?: string;\n falseText?: string;\n}\n\nexport interface LargeTextBoxOptions extends ValueWidgetOptions {\n rows?: number;\n maxLength?: number;\n minLength?: number;\n placeholder?: AXPMultiLanguageString;\n resizable?: boolean;\n}\n\nexport interface ColorBoxOptions extends ValueWidgetOptions {\n format?: 'hex' | 'rgb' | 'hsl';\n showAlpha?: boolean;\n showPalette?: boolean;\n}\n\n// Container-specific options based on actual widget configs\nexport interface AXPFlexContainerOptions extends LayoutWidgetOptions {\n flexDirection?: 'row' | 'column' | 'row-reverse' | 'column-reverse';\n flexWrap?: 'nowrap' | 'wrap' | 'wrap-reverse';\n justifyContent?: 'flex-start' | 'flex-end' | 'center' | 'space-between' | 'space-around' | 'space-evenly';\n alignItems?: 'flex-start' | 'flex-end' | 'center' | 'baseline' | 'stretch';\n gap?: string;\n spacing?: {\n padding?: string;\n margin?: string;\n };\n border?: {\n radius?: string;\n width?: string;\n color?: string;\n style?: string;\n };\n backgroundColor?: string;\n direction?: string;\n overflow?: string;\n overflowX?: string;\n overflowY?: string;\n width?: string;\n minWidth?: string;\n maxWidth?: string;\n height?: string;\n minHeight?: string;\n maxHeight?: string;\n}\n\nexport interface AXPGridContainerOptions extends LayoutWidgetOptions {\n grid?: {\n default?: {\n columns?: number;\n rows?: number;\n gap?: string;\n justifyItems?: string;\n alignItems?: string;\n autoFlow?: string;\n };\n };\n spacing?: {\n padding?: string;\n margin?: string;\n };\n border?: {\n radius?: string;\n width?: string;\n color?: string;\n style?: string;\n };\n backgroundColor?: string;\n direction?: string;\n overflow?: string;\n overflowX?: string;\n overflowY?: string;\n width?: string;\n minWidth?: string;\n maxWidth?: string;\n height?: string;\n minHeight?: string;\n maxHeight?: string;\n}\n\nexport interface AXPPanelContainerOptions extends LayoutWidgetOptions {\n caption?: string;\n icon?: string;\n look?: 'solid' | 'fill' | 'outline' | 'flat' | 'none';\n disabled?: boolean;\n showHeader?: boolean;\n collapsed?: boolean;\n}\n\nexport interface AXPPageContainerOptions extends LayoutWidgetOptions {\n backgroundColor?: string;\n theme?: { id: string };\n hasHeader?: boolean;\n hasFooter?: boolean;\n direction?: string;\n}\n\nexport interface AXPTabsetContainerOptions extends LayoutWidgetOptions {\n look?: 'with-line' | 'with-line-color' | 'pills' | 'pills-color';\n orientation?: 'vertical' | 'horizontal';\n activeIndex?: number;\n}\n\nexport interface AXPFieldsetContainerOptions extends LayoutWidgetOptions {\n title?: string;\n description?: string;\n icon?: string;\n collapsible?: boolean;\n isOpen?: boolean;\n look?: 'fieldset' | 'card' | 'group' | 'container';\n disabled?: boolean;\n showHeader?: boolean;\n cols?: number;\n}\n\nexport interface AXPFormFieldOptions extends LayoutWidgetOptions {\n label?: string;\n showLabel?: boolean;\n}\n\nexport interface AXPDialogContainerOptions extends LayoutWidgetOptions {\n title?: string;\n message?: string;\n size?: AXPopupSizeType;\n closeButton?: boolean;\n context?: any;\n}\n\nexport interface RichTextOptions extends ValueWidgetOptions {\n placeholder?: AXPMultiLanguageString;\n toolbar?: string[];\n readonly?: boolean;\n}\n\nexport interface PasswordBoxOptions extends ValueWidgetOptions {\n placeholder?: AXPMultiLanguageString;\n revealToggle?: boolean;\n maxLength?: number;\n}\n\nexport interface LookupBoxOptions extends ValueWidgetOptions {\n dataSource?: any[] | (() => any[]) | (() => Promise<any[]>);\n valueField?: string;\n textField?: string;\n searchable?: boolean;\n entity?: string;\n look?: string;\n columns?: any[];\n expose?: any[];\n multiple?: boolean;\n allowClear?: boolean;\n}\n\nexport interface SelectionListOptions extends ValueWidgetOptions {\n dataSource: any[] | (() => any[]) | (() => Promise<any[]>) | AXDataSource<any>;\n valueField?: string;\n textField?: string;\n multiple?: boolean;\n searchable?: boolean;\n placeholder?: AXPMultiLanguageString;\n}\n\n// List Widget Types\nexport interface AXPListWidgetColumn {\n name: string;\n title?: string;\n visible?: boolean;\n width?: string;\n widget?: {\n type: string;\n path?: string;\n options?: any;\n };\n}\n\nexport interface AXPListWidgetRowCommand {\n title?: string;\n icon?: string;\n color?: string;\n disabled?: boolean | string;\n hidden?: boolean | string;\n command?: any;\n}\n\nexport interface AXPListWidgetOptions extends LayoutWidgetOptions {\n dataSource?: any[] | AXDataSource;\n columns?: AXPListWidgetColumn[];\n\n // Event Callbacks\n onRowClick?: (row: any) => void;\n onRowDoubleClick?: (row: any) => void;\n onSelectionChange?: (selectedRows: any[]) => void;\n onRowCommand?: (command: any, selectedRows: any[]) => void;\n\n // Table Features\n paging?: boolean;\n showHeader?: boolean;\n showFooter?: boolean;\n fixHeader?: boolean;\n fixFooter?: boolean;\n fetchDataMode?: 'auto' | 'manual';\n parentField?: string;\n minHeight?: string | number;\n\n // Selection & Index\n showIndex?: boolean;\n allowSelection?: boolean;\n\n // Row Commands\n primaryCommands?: any[];\n secondaryCommands?: AXPListWidgetRowCommand[];\n\n // Loading State\n loading?: {\n enabled?: boolean;\n animation?: boolean;\n };\n}\n\n// Step Wizard Types\nexport interface AXPWizardActionDefinition {\n title?: string;\n icon?: string;\n color?: string;\n}\n\nexport interface AXPWizardActions {\n previous?: AXPWizardActionDefinition;\n next?: AXPWizardActionDefinition;\n submit?: AXPWizardActionDefinition;\n}\n\nexport interface AXPStepDefinition {\n id: string;\n title: string;\n description?: string;\n icon?: string;\n skippable?: boolean;\n content: AXPWidgetNode;\n actions?: AXPActionMenuItem[];\n}\n\nexport interface AXPStepWizardGuardPayload {\n step: AXPStepDefinition;\n index: number;\n total: number;\n isFirst: boolean;\n isLast: boolean;\n context: any;\n stepContext?: any;\n dialogContext?: any;\n}\n\nexport interface AXPStepWizardStatus {\n currentStep: AXPStepDefinition;\n index: number;\n total: number;\n isFirst: boolean;\n isLast: boolean;\n}\n\nexport interface AXPStepWizardDefinition {\n steps: AXPStepDefinition[];\n linear?: boolean;\n direction?: 'horizontal' | 'vertical';\n look?: string;\n showActions?: boolean;\n actions?: AXPWizardActions;\n guards?: {\n next?: (payload: AXPStepWizardGuardPayload) => boolean | Promise<boolean>;\n prev?: (payload: AXPStepWizardGuardPayload) => boolean | Promise<boolean>;\n };\n events?: {\n onStepChanged?: (status: AXPStepWizardStatus) => void;\n onComplete?: (status: AXPStepWizardStatus) => void;\n };\n}\n\nexport interface AXPStepWizardContainerOptions extends LayoutWidgetOptions {\n definition?: AXPStepWizardDefinition;\n}\n\n//#endregion\n\n//#region ---- Inheritance Context Types ----\n\n// Forward declaration for circular reference\nexport interface IDialogBuilder<T = AXPDialogRef> { }\n\n// Context for inheriting properties from parent nodes\nexport interface InheritanceContext {\n mode?: AXPWidgetRenderMode;\n disabled?: boolean | string;\n readonly?: boolean | string;\n direction?: 'rtl' | 'ltr';\n visible?: boolean | string;\n defaultValue?: any;\n}\n\n// Helper type for resolving inherited properties\nexport interface InheritedProperties {\n mode: AXPWidgetRenderMode;\n disabled: boolean | string | undefined;\n readonly: boolean | string | undefined;\n direction: 'rtl' | 'ltr' | undefined;\n visible: boolean | string | undefined;\n}\n\n//#endregion\n\n//#region ---- Builder State Types ----\n\n// Base widget configuration - no path management here\nexport interface AXPWidgetConfiguration {\n type: string;\n options?: AXPOptionsData;\n}\n\n// Builder state interfaces\nexport type LayoutBuilderState = AXPWidgetNode;\n\n// WidgetBuilderState mirrors AXPWidgetNode but intentionally excludes `children` for most widgets\nexport type WidgetBuilderState = AXPWidgetNode & { layout?: AXPGridLayoutOptions };\n\n// FormFieldBuilderState includes children since form fields can contain widgets\nexport type FormFieldBuilderState = AXPWidgetNode & { layout?: AXPGridLayoutOptions };\n\n// DialogBuilderState includes dialog-specific properties\nexport type DialogBuilderState = AXPWidgetNode & {\n layout?: AXPGridLayoutOptions;\n dialogOptions?: AXPDialogContainerOptions;\n actions?: {\n footer?: {\n prefix?: AXPActionMenuItem[];\n suffix?: AXPActionMenuItem[];\n };\n };\n};\n\nexport interface IActionBuilder {\n cancel(text?: string): IActionBuilder;\n submit(text?: string): IActionBuilder;\n custom(action: AXPActionMenuItem & { position?: 'prefix' | 'suffix' }): IActionBuilder;\n}\n\n//#endregion\n\n//#region ---- Core Builder Interfaces ----\n\n// Main layout builder interface - Single Responsibility: Layout orchestration\nexport interface ILayoutBuilder {\n // Predefined layout containers at root level - only these are allowed with specific types\n grid(delegate: (container: IGridContainerBuilder) => void): ILayoutBuilder;\n flex(delegate: (container: IFlexContainerBuilder) => void): ILayoutBuilder;\n panel(delegate: (container: IPanelContainerBuilder) => void): ILayoutBuilder;\n page(delegate: (container: IPageContainerBuilder) => void): ILayoutBuilder;\n tabset(delegate: (container: ITabsetContainerBuilder) => void): ILayoutBuilder;\n fieldset(delegate: (container: IFieldsetContainerBuilder) => void): ILayoutBuilder;\n dialog<T = AXPDialogRef>(delegate: (container: IDialogBuilder<T>) => void): IDialogBuilder<T>;\n stepWizard(delegate: (wizard: IStepWizardBuilder) => void): ILayoutBuilder;\n\n // Build and render\n build(): AXPWidgetNode;\n toJson(options?: { removeMeta?: boolean; removeFunctions?: boolean; pretty?: boolean }): string;\n}\n\n//#endregion\n\n//#region ---- Widget Builder Interfaces ----\n\n// Base widget builder interface - Single Responsibility: Widget configuration\nexport interface IWidgetBuilder {\n name(name: string): IWidgetBuilder;\n path(path: string): IWidgetBuilder;\n type(type: string): IWidgetBuilder;\n options(options: AXPOptionsData): IWidgetBuilder;\n\n // Layout\n layout(config: Partial<AXPGridLayoutOptions>): IWidgetBuilder;\n layout(colSpan: number): IWidgetBuilder;\n mode(mode: AXPWidgetRenderMode): IWidgetBuilder;\n\n // State (managed by higher-level systems like dynamic forms)\n visible(condition: boolean | string): IWidgetBuilder;\n disabled(condition: boolean | string): IWidgetBuilder;\n readonly(condition: boolean | string): IWidgetBuilder;\n defaultValue(defaultValue: any): IWidgetBuilder;\n direction(direction: 'rtl' | 'ltr'): IWidgetBuilder;\n\n // Inheritance context methods\n withInheritanceContext(context: InheritanceContext): IWidgetBuilder;\n getInheritanceContext(): InheritanceContext;\n\n // Build\n build(): AXPWidgetNode;\n}\n\n//#endregion\n\n//#region ---- Container Builder Interfaces ----\n\n// Base container builder interface - Interface Segregation: Common container operations\nexport interface IBaseContainerBuilder<TContainer = any> {\n name(name: string): TContainer;\n path(path: string): TContainer;\n mode(mode: AXPWidgetRenderMode): TContainer;\n visible(condition: boolean | AXPExpression): TContainer;\n disabled(condition: boolean | AXPExpression): TContainer;\n readonly(condition: boolean | AXPExpression): TContainer;\n direction(direction: 'rtl' | 'ltr'): TContainer;\n\n // Inheritance context methods\n withInheritanceContext(context: InheritanceContext): TContainer;\n getInheritanceContext(): InheritanceContext;\n\n build(): AXPWidgetNode;\n}\n\n// Layout-specific container operations\nexport interface ILayoutContainerBuilder<TContainer = any> {\n layout(config: Partial<AXPGridLayoutOptions>): TContainer;\n layout(colSpan: number): TContainer;\n}\n\n// Child container management\nexport interface IChildContainerBuilder<TContainer = any> {\n grid(delegate: (container: IGridContainerBuilder) => void): TContainer;\n flex(delegate: (container: IFlexContainerBuilder) => void): TContainer;\n panel(delegate: (container: IPanelContainerBuilder) => void): TContainer;\n page(delegate: (container: IPageContainerBuilder) => void): TContainer;\n tabset(delegate: (container: ITabsetContainerBuilder) => void): TContainer;\n fieldset(delegate: (container: IFieldsetContainerBuilder) => void): TContainer;\n formField(label: string, delegate?: (field: IFormFieldBuilder) => void): TContainer;\n stepWizard(delegate: (wizard: IStepWizardBuilder) => void): TContainer;\n dynamicForm(definition: AXPDynamicFormDefinition): TContainer;\n}\n\n// Widget creation operations\nexport interface IWidgetContainerBuilder<TContainer = any> {\n textBox(options?: TextBoxOptions): TContainer;\n largeTextBox(options?: LargeTextBoxOptions): TContainer;\n richText(options?: RichTextOptions): TContainer;\n passwordBox(options?: PasswordBoxOptions): TContainer;\n numberBox(options?: NumberBoxOptions): TContainer;\n selectBox(options: SelectBoxOptions): TContainer;\n lookupBox(options: LookupBoxOptions): TContainer;\n selectionList(options: SelectionListOptions): TContainer;\n dateTimeBox(options?: DateTimeBoxOptions): TContainer;\n toggleSwitch(options?: ToggleSwitchOptions): TContainer;\n colorBox(options?: ColorBoxOptions): TContainer;\n list(delegate: (container: IListWidgetBuilder) => void): TContainer;\n customWidget<T>(type: string, options?: T): TContainer;\n customWidget<T>(type: string, delegate: (widget: IWidgetBuilder) => void): TContainer;\n}\n\n// Flex container builder - Interface Segregation: Combines all container interfaces\nexport interface IFlexContainerBuilder\n extends IBaseContainerBuilder<IFlexContainerBuilder>,\n ILayoutContainerBuilder<IFlexContainerBuilder>,\n IChildContainerBuilder<IFlexContainerBuilder>,\n IWidgetContainerBuilder<IFlexContainerBuilder> {\n // Flex-specific options - both object and individual methods\n setOptions(options: AXPFlexContainerOptions): IFlexContainerBuilder;\n setDirection(direction: 'row' | 'column' | 'row-reverse' | 'column-reverse'): IFlexContainerBuilder;\n setWrap(wrap: 'nowrap' | 'wrap' | 'wrap-reverse'): IFlexContainerBuilder;\n setJustifyContent(\n justify: 'flex-start' | 'flex-end' | 'center' | 'space-between' | 'space-around' | 'space-evenly',\n ): IFlexContainerBuilder;\n setAlignItems(align: 'flex-start' | 'flex-end' | 'center' | 'baseline' | 'stretch'): IFlexContainerBuilder;\n setGap(gap: string): IFlexContainerBuilder;\n setBackgroundColor(color: string): IFlexContainerBuilder;\n setPadding(padding: string): IFlexContainerBuilder;\n setMargin(margin: string): IFlexContainerBuilder;\n}\n\n// Grid container builder - Interface Segregation: Combines all container interfaces\nexport interface IGridContainerBuilder\n extends IBaseContainerBuilder<IGridContainerBuilder>,\n ILayoutContainerBuilder<IGridContainerBuilder>,\n IChildContainerBuilder<IGridContainerBuilder>,\n IWidgetContainerBuilder<IGridContainerBuilder> {\n // Grid-specific options - both object and individual methods\n setOptions(options: AXPGridContainerOptions): IGridContainerBuilder;\n setColumns(columns: number): IGridContainerBuilder;\n setRows(rows: number): IGridContainerBuilder;\n setGap(gap: string): IGridContainerBuilder;\n setJustifyItems(justify: 'start' | 'end' | 'center' | 'stretch'): IGridContainerBuilder;\n setAlignItems(align: 'start' | 'end' | 'center' | 'stretch'): IGridContainerBuilder;\n setAutoFlow(flow: 'row' | 'column' | 'row dense' | 'column dense'): IGridContainerBuilder;\n setBackgroundColor(color: string): IGridContainerBuilder;\n setPadding(padding: string): IGridContainerBuilder;\n setMargin(margin: string): IGridContainerBuilder;\n /** Add a grid-item-layout child with optional placement; delegate builds the fieldset content. */\n item(\n layoutOptions: Partial<AXPGridLayoutOptions> | null | undefined,\n delegate: (container: IFieldsetContainerBuilder) => void,\n ): IGridContainerBuilder;\n}\n\n// Panel container builder - Interface Segregation: Combines all container interfaces\nexport interface IPanelContainerBuilder\n extends IBaseContainerBuilder<IPanelContainerBuilder>,\n ILayoutContainerBuilder<IPanelContainerBuilder>,\n IChildContainerBuilder<IPanelContainerBuilder>,\n IWidgetContainerBuilder<IPanelContainerBuilder> {\n // Panel-specific options\n setOptions(options: AXPPanelContainerOptions): IPanelContainerBuilder;\n setCaption(caption: string): IPanelContainerBuilder;\n setIcon(icon: string): IPanelContainerBuilder;\n setLook(look: 'solid' | 'fill' | 'outline' | 'flat' | 'none'): IPanelContainerBuilder;\n setShowHeader(show: boolean): IPanelContainerBuilder;\n setCollapsed(collapsed: boolean): IPanelContainerBuilder;\n}\n\n// Page container builder - Interface Segregation: Combines all container interfaces\nexport interface IPageContainerBuilder\n extends IBaseContainerBuilder<IPageContainerBuilder>,\n ILayoutContainerBuilder<IPageContainerBuilder>,\n IChildContainerBuilder<IPageContainerBuilder>,\n IWidgetContainerBuilder<IPageContainerBuilder> {\n // Page-specific options\n setOptions(options: AXPPageContainerOptions): IPageContainerBuilder;\n setBackgroundColor(color: string): IPageContainerBuilder;\n setTheme(theme: { id: string }): IPageContainerBuilder;\n setHasHeader(hasHeader: boolean): IPageContainerBuilder;\n setHasFooter(hasFooter: boolean): IPageContainerBuilder;\n setDirection(direction: 'rtl' | 'ltr'): IPageContainerBuilder;\n}\n\n// Tabset container builder - Interface Segregation: Combines all container interfaces\nexport interface ITabsetContainerBuilder\n extends IBaseContainerBuilder<ITabsetContainerBuilder>,\n ILayoutContainerBuilder<ITabsetContainerBuilder>,\n IChildContainerBuilder<ITabsetContainerBuilder>,\n IWidgetContainerBuilder<ITabsetContainerBuilder> {\n // Tabset-specific options\n setOptions(options: AXPTabsetContainerOptions): ITabsetContainerBuilder;\n setLook(look: 'with-line' | 'with-line-color' | 'pills' | 'pills-color'): ITabsetContainerBuilder;\n setOrientation(orientation: 'vertical' | 'horizontal'): ITabsetContainerBuilder;\n setActiveIndex(index: number): ITabsetContainerBuilder;\n}\n\n// Form field builder - Interface Segregation: Combines base and widget interfaces\n// Form fields can only contain ONE widget\nexport interface IFormFieldBuilder\n extends IBaseContainerBuilder<IFormFieldBuilder>,\n ILayoutContainerBuilder<IFormFieldBuilder> {\n // Form field specific options\n setOptions(options: AXPFormFieldOptions): IFormFieldBuilder;\n setLabel(label: string): IFormFieldBuilder;\n setShowLabel(showLabel: boolean): IFormFieldBuilder;\n defaultValue(value: any): IFormFieldBuilder;\n\n // Single widget methods (replaces IWidgetContainerBuilder)\n textBox(options?: Omit<TextBoxOptions, 'path'>): IFormFieldBuilder;\n largeTextBox(options?: Omit<LargeTextBoxOptions, 'path'>): IFormFieldBuilder;\n richText(options?: Omit<RichTextOptions, 'path'>): IFormFieldBuilder;\n passwordBox(options?: Omit<PasswordBoxOptions, 'path'>): IFormFieldBuilder;\n numberBox(options?: Omit<NumberBoxOptions, 'path'>): IFormFieldBuilder;\n selectBox(options: Omit<SelectBoxOptions, 'path'>): IFormFieldBuilder;\n lookupBox(options: Omit<LookupBoxOptions, 'path'>): IFormFieldBuilder;\n selectionList(options: Omit<SelectionListOptions, 'path'>): IFormFieldBuilder;\n dateTimeBox(options?: Omit<DateTimeBoxOptions, 'path'>): IFormFieldBuilder;\n toggleSwitch(options?: Omit<ToggleSwitchOptions, 'path'>): IFormFieldBuilder;\n colorBox(options?: Omit<ColorBoxOptions, 'path'>): IFormFieldBuilder;\n customWidget<T>(type: string, options?: Omit<T, 'path'>): IFormFieldBuilder;\n customWidget<T>(\n type: string,\n options?: Omit<T, 'path'> & Partial<AXPWidgetNodeExtendedProperties>,\n ): IFormFieldBuilder;\n}\n\n// Fieldset container builder - Interface Segregation: Specialized for form fields only\nexport interface IFieldsetContainerBuilder\n extends IBaseContainerBuilder<IFieldsetContainerBuilder>,\n ILayoutContainerBuilder<IFieldsetContainerBuilder> {\n // Fieldset-specific options\n setOptions(options: AXPFieldsetContainerOptions): IFieldsetContainerBuilder;\n setTitle(title: string): IFieldsetContainerBuilder;\n setDescription(description: string): IFieldsetContainerBuilder;\n setIcon(icon: string): IFieldsetContainerBuilder;\n setCollapsible(collapsible: boolean): IFieldsetContainerBuilder;\n setIsOpen(isOpen: boolean): IFieldsetContainerBuilder;\n setLook(look: 'fieldset' | 'card' | 'group' | 'container'): IFieldsetContainerBuilder;\n setShowHeader(showHeader: boolean): IFieldsetContainerBuilder;\n setCols(cols: number): IFieldsetContainerBuilder;\n\n // Only form fields are allowed in fieldset\n formField(label: string, delegate?: (field: IFormFieldBuilder) => void): IFieldsetContainerBuilder;\n}\n\n// Dialog container builder - Interface Segregation: Specialized for dialog functionality\nexport interface IDialogBuilder<T = AXPDialogRef> {\n // Dialog-specific options\n setOptions(options: AXPDialogContainerOptions): IDialogBuilder<T>;\n setTitle(title: string): IDialogBuilder<T>;\n setMessage(message?: string): IDialogBuilder<T>;\n setSize(size: AXPopupSizeType): IDialogBuilder<T>;\n setCloseButton(closeButton: boolean): IDialogBuilder<T>;\n setContext(context: any): IDialogBuilder<T>;\n\n // Content method - wraps layout builder methods\n content(delegate: (layoutBuilder: IFlexContainerBuilder) => void): IDialogBuilder<T>;\n\n // Actions method\n setActions(delegate?: (actions: IActionBuilder) => void): IDialogBuilder<T>;\n\n /**\n * Handler invoked when user clicks an action. Receives AXPDialogRef (context, action, setLoading, close).\n * If handler throws, dialog stays open for retry.\n * If handler returns, dialog closes and show() resolves with the return value.\n */\n onAction(handler: (dialogRef: AXPDialogRef) => T | Promise<T>): IDialogBuilder<T>;\n\n // Custom action management (for step wizard integration)\n addCustomAction(action: AXPActionMenuItem): IDialogBuilder<T>;\n\n // Dialog-specific methods\n build(): AXPWidgetNode;\n show(): Promise<T>;\n}\n\n// List Widget Builder - Interface Segregation: Combines all container interfaces\nexport interface IListWidgetBuilder\n extends IBaseContainerBuilder<IListWidgetBuilder>,\n ILayoutContainerBuilder<IListWidgetBuilder>,\n IChildContainerBuilder<IListWidgetBuilder>,\n IWidgetContainerBuilder<IListWidgetBuilder> {\n // List-specific options\n setOptions(options: AXPListWidgetOptions): IListWidgetBuilder;\n setDataSource(dataSource: any[] | AXDataSource): IListWidgetBuilder;\n setColumns(columns: AXPListWidgetColumn[]): IListWidgetBuilder;\n\n // Event handlers\n setOnRowClick(handler: (row: any) => void): IListWidgetBuilder;\n setOnRowDoubleClick(handler: (row: any) => void): IListWidgetBuilder;\n setOnSelectionChange(handler: (selectedRows: any[]) => void): IListWidgetBuilder;\n setOnRowCommand(handler: (command: any, selectedRows: any[]) => void): IListWidgetBuilder;\n\n // Table features\n setPaging(paging: boolean): IListWidgetBuilder;\n setShowHeader(show: boolean): IListWidgetBuilder;\n setShowFooter(show: boolean): IListWidgetBuilder;\n setFixHeader(fix: boolean): IListWidgetBuilder;\n setFixFooter(fix: boolean): IListWidgetBuilder;\n setFetchDataMode(mode: 'auto' | 'manual'): IListWidgetBuilder;\n setParentField(field: string): IListWidgetBuilder;\n setMinHeight(height: string | number): IListWidgetBuilder;\n\n // Selection & Index\n setShowIndex(show: boolean): IListWidgetBuilder;\n setAllowSelection(allow: boolean): IListWidgetBuilder;\n\n // Commands\n setPrimaryCommands(commands: any[]): IListWidgetBuilder;\n setSecondaryCommands(commands: AXPListWidgetRowCommand[]): IListWidgetBuilder;\n\n // Loading\n setLoading(loading: { enabled?: boolean; animation?: boolean }): IListWidgetBuilder;\n}\n\n// Step Builder - Interface for building individual steps\nexport interface IStepBuilder {\n setIcon(icon: string): IStepBuilder;\n setDescription(description: string): IStepBuilder;\n setSkippable(skippable: boolean): IStepBuilder;\n\n // Content using layout builder\n content(delegate: (layoutBuilder: ILayoutBuilder) => void): IStepBuilder;\n\n // Step-specific actions (future feature - skip for now)\n // addAction(action: AXPActionMenuItem): IStepBuilder;\n\n build(): AXPStepDefinition;\n}\n\n// Step Wizard Builder - Interface for building step wizard\nexport interface IStepWizardBuilder\n extends IBaseContainerBuilder<IStepWizardBuilder>,\n ILayoutContainerBuilder<IStepWizardBuilder> {\n // Configuration\n setLinear(linear: boolean): IStepWizardBuilder;\n setDirection(direction: 'horizontal' | 'vertical'): IStepWizardBuilder;\n setLook(look: AXStepWizardLook): IStepWizardBuilder;\n setShowActions(show: boolean): IStepWizardBuilder;\n\n // Actions\n setActions(actions: AXPWizardActions): IStepWizardBuilder;\n\n // Guards\n setGuards(guards: {\n next?: (payload: AXPStepWizardGuardPayload) => boolean | Promise<boolean>;\n prev?: (payload: AXPStepWizardGuardPayload) => boolean | Promise<boolean>;\n }): IStepWizardBuilder;\n\n // Events\n setEvents(events: {\n onStepChanged?: (status: AXPStepWizardStatus) => void;\n onComplete?: (status: AXPStepWizardStatus) => void;\n }): IStepWizardBuilder;\n\n // Add steps\n step(id: string, title: string, delegate: (step: IStepBuilder) => void): IStepWizardBuilder;\n}\n\n//#endregion\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPComponentSlotModule, AXPContextStore, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { AXPWidgetCoreElementAction, AXPWidgetCoreService, AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, effect, EventEmitter, inject, OnInit, Output, signal, viewChild } from '@angular/core';\nimport { AXPDialogRef } from './layout-builder.types';\nimport { AXPLayoutRendererComponent } from './layout-renderer.component';\n\nexport interface DialogRendererConfig {\n title: string;\n message?: string;\n context: any;\n definition: AXPWidgetNode;\n actions?: {\n footer?: {\n prefix?: any[];\n suffix?: any[];\n };\n };\n /**\n * When present, handler is called on action click with AXPDialogRef.\n * Throw = stay open for retry. Return = close and resolve show() with return value.\n */\n onAction?: (dialogRef: AXPDialogRef) => any | Promise<any>;\n}\n\nexport interface DialogRendererResult {\n context: any;\n action?: string;\n}\n\n@Component({\n selector: 'axp-dialog-renderer',\n standalone: true,\n imports: [\n CommonModule,\n AXPLayoutRendererComponent,\n AXButtonModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXTranslationModule,\n AXPComponentSlotModule,\n ],\n providers: [AXPContextStore],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <axp-component-slot name=\"dialog-header\" [context]=\"context()\"></axp-component-slot>\n <div class=\"ax-p-4\">\n <axp-layout-renderer\n [layout]=\"config.definition\"\n [context]=\"context()\"\n (contextChange)=\"handleContextChanged($event)\"\n (contextInitiated)=\"handleContextInitiated($event)\"\n >\n </axp-layout-renderer>\n </div>\n\n <!-- Custom footer slot: if it has content, default footer is hidden -->\n <axp-component-slot name=\"dialog-footer\" #footerSlot=\"slot\" [context]=\"context()\"></axp-component-slot>\n @if (footerSlot.isEmpty()) {\n <ax-footer>\n <ax-prefix>\n <axp-component-slot name=\"dialog-footer-prefix\" [context]=\"context()\"></axp-component-slot>\n @for (action of footerPrefixActions(); track $index) {\n <ax-button\n [disabled]=\"action.disabled || isFormLoading()\"\n [text]=\"(action.title | translate | async)!\"\n [look]=\"'outline'\"\n [color]=\"action.color\"\n (onClick)=\"executeAction(action)\"\n >\n <ax-prefix>\n <i class=\"{{ action.icon }}\"></i>\n </ax-prefix>\n </ax-button>\n }\n </ax-prefix>\n <ax-suffix>\n @for (action of footerSuffixActions(); track $index) {\n <ax-button\n [disabled]=\"action.disabled || isSubmitting()\"\n [text]=\"(action.title | translate | async)!\"\n [look]=\"'solid'\"\n [color]=\"action.color\"\n (onClick)=\"executeAction(action)\"\n >\n @if (isFormLoading()) {\n <ax-loading></ax-loading>\n }\n @if (action.icon) {\n <ax-prefix>\n <ax-icon icon=\"{{ action.icon }}\"></ax-icon>\n </ax-prefix>\n }\n </ax-button>\n }\n <axp-component-slot name=\"dialog-footer-suffix\" [context]=\"context()\"></axp-component-slot>\n </ax-suffix>\n </ax-footer>\n }\n `,\n})\nexport class AXPDialogRendererComponent extends AXBasePageComponent implements OnInit {\n config!: DialogRendererConfig;\n\n @Output() result = new EventEmitter<DialogRendererResult>();\n\n //#region ---- Services & Dependencies ----\n\n // ✅ Inject services\n private widgetCoreService: AXPWidgetCoreService;\n private expressionEvaluator = inject(AXPExpressionEvaluatorService);\n\n //#endregion\n\n //#region ---- State ----\n\n // Store dialog result for manual closing\n private dialogResult?: DialogRendererResult;\n\n context = signal<any>({});\n\n // This will be set by the popup service automatically - same as dynamic-dialog\n callBack: (dialogRef: AXPDialogRef) => void = () => { };\n data: any;\n\n private isDialogLoading = signal(false);\n\n // Aggregated actions for footer rendering\n footerPrefix = signal<AXPWidgetCoreElementAction[]>([]);\n footerSuffix = signal<AXPWidgetCoreElementAction[]>([]);\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n override ngOnInit(): void {\n this.context.set(this.config?.context || {});\n }\n\n //#endregion\n\n //#region ---- View Accessors ----\n\n // Access the internal layout renderer to reach the widgets container injector\n private layoutRenderer = viewChild(AXPLayoutRendererComponent);\n\n // Debounce timer for aggregating actions after widget count stabilizes\n private debounceTimer?: ReturnType<typeof setTimeout>;\n\n #eff = effect(() => {\n let count = 0;\n this.aggregateAndEvaluateActions();\n if (!this.widgetCoreService) {\n const renderer = this.layoutRenderer();\n const container = renderer?.getContainer();\n this.widgetCoreService = (container?.builderService as AXPWidgetCoreService) ?? null;\n count = this.widgetCoreService?.registeredWidgetsCount();\n } else {\n count = this.widgetCoreService?.registeredWidgetsCount();\n\n // Clear existing timer\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n }\n\n // Set new timer to call after 200ms of no count changes\n this.debounceTimer = setTimeout(() => {\n this.aggregateAndEvaluateActions();\n }, 200);\n }\n });\n\n //#endregion\n\n handleContextChanged(event: any) {\n this.context.set(event);\n this.aggregateAndEvaluateActions();\n }\n\n handleContextInitiated(event: any) {\n this.context.set(event);\n this.aggregateAndEvaluateActions();\n }\n\n footerPrefixActions() {\n return this.footerPrefix();\n }\n\n footerSuffixActions() {\n return this.footerSuffix();\n }\n\n isFormLoading() {\n return this.isDialogLoading();\n }\n\n isSubmitting() {\n return this.isDialogLoading();\n }\n\n async executeAction(action: AXPWidgetCoreElementAction) {\n const cmd = this.resolveActionCommandName(action.command);\n\n if (cmd !== 'cancel') {\n const isValid = await this.layoutRenderer()?.validate();\n if (!isValid?.result) {\n return;\n }\n }\n\n if (cmd?.startsWith('widget:')) {\n const parsed = this.parseWidgetCommand(cmd);\n if (parsed.widgetName && parsed.action) {\n await this.executeWidgetApi(parsed.widgetName, parsed.action);\n await this.aggregateAndEvaluateActions();\n return;\n }\n }\n\n const context = this.context();\n const onAction = this.config?.onAction;\n\n if (onAction) {\n const dialogRef: AXPDialogRef = {\n close: (res?: any) => this.close(res),\n context: () => this.context(),\n action: () => action.command ?? undefined,\n setLoading: (loading: boolean) => this.isDialogLoading.set(loading),\n };\n try {\n this.isDialogLoading.set(true);\n const result = await Promise.resolve(onAction(dialogRef));\n this.callBack(result);\n this.close(result);\n } catch {\n // Handler threw: stay open for retry, actions remain clickable\n } finally {\n this.isDialogLoading.set(false);\n }\n return;\n }\n\n // Fallback: treat as regular dialog action (cancel/confirm/custom)\n const result: DialogRendererResult = { context, action: cmd };\n this.dialogResult = result;\n if (this.data) {\n this.data.context = result.context;\n this.data.action = result.action;\n }\n this.callBack({\n close: (res?: any) => {\n this.close(res);\n },\n context: () => this.context(),\n action: () => result.action,\n setLoading: (loading: boolean) => {\n this.isDialogLoading.set(loading);\n },\n } as AXPDialogRef);\n // Without `onAction`, only the configured cancel action dismisses the dialog (not submit/custom).\n if (cmd === 'cancel') {\n await this.close(result);\n }\n }\n\n /** Resolves footer/widget action command to a string (e.g. `cancel`, `submit`, `widget:...`). */\n private resolveActionCommandName(\n command: AXPWidgetCoreElementAction['command'],\n ): string | undefined {\n if (typeof command === 'string') {\n return command;\n }\n if (command && typeof command === 'object' && 'name' in command) {\n return (command as { name: string }).name;\n }\n return undefined;\n }\n\n private parseWidgetCommand(cmd: string): { widgetName?: string; action?: string } {\n // Expected 'widget:<widgetName>.<action>'\n if (!cmd?.startsWith('widget:')) return {};\n const rest = cmd.slice('widget:'.length);\n const dot = rest.lastIndexOf('.');\n if (dot <= 0) return {};\n return { widgetName: rest.slice(0, dot), action: rest.slice(dot + 1) };\n }\n\n private async executeWidgetApi(widgetName: string, apiMethod: string): Promise<void> {\n if (!this.widgetCoreService) return;\n try {\n const widget = this.widgetCoreService.getWidget(widgetName) as any;\n const api = widget?.api?.();\n const fn = api?.[apiMethod];\n if (typeof fn === 'function') {\n await Promise.resolve(\n fn({\n close: (result?: any) => {\n this.close(result);\n },\n context: () => this.context(),\n setLoading: (loading: boolean) => {\n this.isDialogLoading.set(loading);\n },\n } as AXPDialogRef),\n );\n }\n } catch { }\n }\n\n override async close(result?: DialogRendererResult) {\n if (result) {\n const isValid = await this.layoutRenderer()?.validate();\n if (isValid?.result) {\n this.result.emit(result);\n }\n }\n\n super.close(result);\n }\n\n // --- Actions aggregation & evaluation ---\n private async aggregateAndEvaluateActions(): Promise<void> {\n const widgetActions = await this.collectWidgetActions();\n const dialogActions = this.collectDialogActionsFromConfig();\n const all = [...widgetActions, ...dialogActions];\n const evaluated = await this.evaluatePredicates(all);\n const visible = evaluated.filter((a) => a.hidden !== true);\n\n const prefix = visible.filter((a) => (a.zone ?? 'footer') === 'footer' && (a.placement ?? 'suffix') === 'prefix');\n const suffix = visible.filter((a) => (a.zone ?? 'footer') === 'footer' && (a.placement ?? 'suffix') === 'suffix');\n\n this.footerPrefix.set(prefix);\n this.footerSuffix.set(suffix);\n }\n\n private async collectWidgetActions(): Promise<AXPWidgetCoreElementAction[]> {\n if (!this.widgetCoreService) return [];\n const names = this.widgetCoreService.listRegisteredWidgetNames();\n const actions: AXPWidgetCoreElementAction[] = [];\n for (const name of names) {\n try {\n const widget = this.widgetCoreService.getWidget(name) as any;\n const widgetActs: AXPWidgetCoreElementAction[] = widget?.actions?.() ?? [];\n actions.push(...widgetActs);\n } catch { }\n }\n return actions;\n }\n\n private collectDialogActionsFromConfig(): AXPWidgetCoreElementAction[] {\n const footer = this.config?.actions?.footer;\n const mapOne = (a: any, placement: 'prefix' | 'suffix'): AXPWidgetCoreElementAction => ({\n title: a.title,\n command: typeof a.command === 'string' ? a.command : a.command?.name,\n icon: a.icon,\n color: a.color,\n disabled: a.disabled,\n hidden: a.hidden,\n zone: 'footer',\n placement,\n scope: a.scope,\n });\n const prefix = (footer?.prefix || []).map((a) => mapOne(a, 'prefix'));\n const suffix = (footer?.suffix || []).map((a) => mapOne(a, 'suffix'));\n return [...prefix, ...suffix];\n }\n\n private async evaluatePredicates(actions: AXPWidgetCoreElementAction[]): Promise<AXPWidgetCoreElementAction[]> {\n const out: AXPWidgetCoreElementAction[] = [];\n for (const a of actions) {\n const parsed = typeof a.command === 'string' ? this.parseWidgetCommand(a.command) : {};\n const api = parsed.widgetName ? await this.resolveApi(parsed.widgetName) : undefined;\n const scope = {\n api,\n widget: { name: parsed.widgetName },\n dialog: { context: this.context() },\n context: this.context(),\n } as any;\n const disabled = await this.evalBool(a.disabled, scope);\n const hidden = await this.evalBool(a.hidden, scope);\n out.push({ ...a, disabled, hidden });\n }\n return out;\n }\n\n private async evalBool(value: boolean | string | undefined, scope: any): Promise<boolean | undefined> {\n if (typeof value === 'boolean') return value;\n if (typeof value === 'string') {\n try {\n const result = await this.expressionEvaluator.evaluate(value, scope);\n return !!result;\n } catch {\n return false;\n }\n }\n return value;\n }\n\n private async resolveApi(widgetName: string): Promise<any> {\n try {\n await this.widgetCoreService?.waitForWidget(widgetName, 2000);\n const widget = this.widgetCoreService?.getWidget(widgetName) as any;\n return widget?.api?.();\n } catch {\n return undefined;\n }\n }\n}\n","//#region ---- Imports ----\n\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPExecuteCommandResult, type AXPMultiLanguageString } from '@acorex/platform/core';\nimport { AXP_ENTITY_DEFINITION_CRUD_SERVICE, type AXPEntityDefinitionCrudService } from '@acorex/platform/domain';\nimport { AXPWidgetNode, AXPWidgetRegistryService } from '@acorex/platform/layout/widget-core';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { Injectable, inject } from '@angular/core';\nimport { cloneDeep } from 'lodash-es';\nimport { AXPLayoutBuilderService } from './layout-builder.service';\nimport type { AXPDialogRef, IDialogBuilder, IFormFieldBuilder } from './layout-builder.types';\n\n//#endregion\n\n//#region ---- Command key & input ----\n\n/** See `AXP_PREVIEW_WIDGET_FIELD_COMMAND_KEY` in `preview-widget-field.command.key.ts`. */\n\nexport interface AXPPreviewWidgetFieldCommandInput {\n /** Widget node to render (same shape as `widget-field-configurator` model). */\n widget?: AXPWidgetNode;\n /**\n * Alternate property name for the widget node (matches metadata definition `interface` field).\n */\n interface?: AXPWidgetNode | string;\n fieldName?: string;\n fieldTitle?: AXPMultiLanguageString;\n name?: string;\n title?: AXPMultiLanguageString;\n}\n\ntype AXPPreviewWidgetFieldInvocation = AXPPreviewWidgetFieldCommandInput & {\n __context__?: { data?: Record<string, unknown>; options?: Record<string, unknown> };\n};\n\n/**\n * `customWidget` only forwards keys from its options bag into the built node via `addSingleWidget`.\n * Designer / configurator persist `defaultValue` (and other extended fields) on the widget node root;\n * spreading `options` alone drops them, so preview never applied defaults.\n */\n/**\n * Widget options are sometimes persisted with an extra nesting (`options.options`) when context\n * was merged incorrectly. Flatten so list/data-source resolution sees `dataSource` at the top level.\n */\nfunction optionsBagForPreview(node: AXPWidgetNode): Record<string, unknown> {\n const raw = (node.options ?? {}) as Record<string, unknown>;\n const inner = raw['options'];\n if (inner !== undefined && typeof inner === 'object' && !Array.isArray(inner)) {\n const { options: _nested, ...rest } = raw;\n return { ...rest, ...(inner as Record<string, unknown>) };\n }\n return { ...raw };\n}\n\nfunction extendedNodePropsForPreview(node: AXPWidgetNode): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n if (node.defaultValue !== undefined) {\n out['defaultValue'] = node.defaultValue;\n }\n if (node.triggers !== undefined) {\n out['triggers'] = node.triggers;\n }\n if (node.meta !== undefined) {\n out['meta'] = node.meta;\n }\n if (node.valueTransforms !== undefined) {\n out['valueTransforms'] = node.valueTransforms;\n }\n if (node.visible !== undefined) {\n out['visible'] = node.visible;\n }\n if (node.mode !== undefined) {\n out['mode'] = node.mode;\n }\n if (node.children !== undefined) {\n out['children'] = node.children;\n }\n return out;\n}\n\n//#endregion\n\n//#region ---- Command ----\n\n/**\n * Opens a dialog that previews a widget configuration (same behavior as the preview button on\n * `axp-widget-field-configurator`). Invoked from that component and from entity list actions.\n */\n@Injectable()\nexport class AXPPreviewWidgetFieldCommand implements AXPCommand<AXPPreviewWidgetFieldCommandInput, void> {\n private readonly formBuilderService = inject(AXPLayoutBuilderService);\n private readonly widgetRegistry = inject(AXPWidgetRegistryService);\n private readonly translationService = inject(AXTranslationService);\n private readonly crudService = inject(AXP_ENTITY_DEFINITION_CRUD_SERVICE, { optional: true });\n\n async execute(input: AXPPreviewWidgetFieldInvocation): Promise<AXPExecuteCommandResult<void>> {\n try {\n const merged = this.mergeInvocation(input);\n const currentWidget = this.normalizeWidget(merged['widget'] ?? merged['interface']);\n if (!currentWidget?.type) {\n return {\n success: false,\n message: {\n text: (await this.translationService.translateAsync('@general:messages.invalid-data')) || 'Invalid data',\n },\n };\n }\n\n const fieldName = String(merged['fieldName'] ?? merged['name'] ?? 'Field');\n const rawTitle = (merged['fieldTitle'] ?? merged['title']) as AXPMultiLanguageString | undefined;\n const fieldTitleLabel = this.resolveFieldTitleLabel(rawTitle, fieldName);\n\n const dialogTitle =\n (await this.resolveWidgetDisplayTitle(currentWidget.type)) || currentWidget.type || fieldTitleLabel;\n\n const previewWidgetOptions = {\n ...optionsBagForPreview(currentWidget),\n name: fieldName,\n ...extendedNodePropsForPreview(currentWidget),\n } as any;\n\n const dialogOutcome = await this.formBuilderService\n .create()\n .dialog((dialog: IDialogBuilder) => {\n dialog\n .setTitle(dialogTitle)\n .setSize('md')\n .setCloseButton(true)\n .setContext({})\n .content((layoutBuilder) => {\n layoutBuilder.formField(fieldTitleLabel, (formField: IFormFieldBuilder) => {\n formField.customWidget(currentWidget.type, previewWidgetOptions);\n });\n })\n .setActions((actions) => actions.cancel('@general:actions.close.title'));\n })\n .show();\n\n const cancelled = this.isCancelDialogOutcome(dialogOutcome);\n return {\n success: !cancelled,\n message: { text: '' },\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n return {\n success: false,\n message: { text: message },\n };\n }\n }\n\n private mergeInvocation(input: AXPPreviewWidgetFieldInvocation): Record<string, unknown> {\n const contextOptions = input.__context__?.options as Record<string, unknown> | undefined;\n const ctxData = input.__context__?.data as Record<string, unknown> | undefined;\n const { __context__: _ctx, ...rest } = input as unknown as Record<string, unknown>;\n return {\n ...(ctxData ?? {}),\n ...(contextOptions ?? {}),\n ...rest,\n };\n }\n\n private normalizeWidget(raw: unknown): AXPWidgetNode | null {\n if (raw == null) return null;\n if (typeof raw === 'string') {\n const t = raw.trim();\n return t ? { type: t, options: {} } : null;\n }\n if (typeof raw === 'object' && !Array.isArray(raw) && 'type' in raw) {\n const w = raw as AXPWidgetNode;\n return w.type ? cloneDeep(w) : null;\n }\n return null;\n }\n\n private resolveFieldTitleLabel(raw: AXPMultiLanguageString | undefined, fallback: string): string {\n let source: AXPMultiLanguageString = fallback;\n if (raw !== undefined && raw !== null) {\n if (typeof raw === 'string') {\n if (raw.trim() !== '') {\n source = raw;\n }\n } else if (typeof raw === 'object' && !Array.isArray(raw) && Object.keys(raw).length > 0) {\n source = raw;\n }\n }\n return this.translationService.resolve(source);\n }\n\n private isCancelDialogOutcome(outcome: unknown): boolean {\n if (outcome == null) {\n return false;\n }\n const ref = outcome as Partial<AXPDialogRef>;\n if (typeof ref.action !== 'function') {\n return false;\n }\n return ref.action() === 'cancel';\n }\n\n private async resolveWidgetDisplayTitle(widgetType: string): Promise<string | undefined> {\n const crud = this.crudService as AXPEntityDefinitionCrudService | null | undefined;\n if (crud) {\n const interfaces = await crud.listInterfaces();\n const iface = interfaces.find((d) => d.name === widgetType);\n return iface?.title ?? iface?.name;\n }\n const config = this.widgetRegistry.getOptional(widgetType);\n if (!config) {\n return undefined;\n }\n const resolved = this.translationService.resolve(config.title);\n return resolved || undefined;\n }\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
|