@acorex/platform 21.0.0-next.37 → 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-widget-core.mjs","sources":["../../../../libs/platform/layout/widget-core/src/lib/widget-status.types.ts","../../../../libs/platform/layout/widget-core/src/lib/widget-core.service.ts","../../../../libs/platform/layout/widget-core/src/lib/widget-catalog.ts","../../../../libs/platform/layout/widget-core/src/lib/widget.types.ts","../../../../libs/platform/layout/widget-core/src/lib/widget-base.component.ts","../../../../libs/platform/layout/widget-core/src/lib/base-widget/box-model-widget.component.ts","../../../../libs/platform/layout/widget-core/src/lib/base-widget/block-base-widget.component.ts","../../../../libs/platform/layout/widget-core/src/lib/base-widget/flex-base-widget.component.ts","../../../../libs/platform/layout/widget-core/src/lib/base-widget/inline-base-widget.component.ts","../../../../libs/platform/layout/widget-core/src/lib/base-widget/flex-item-base-widget.component.ts","../../../../libs/platform/layout/widget-core/src/lib/base-widget/grid-base-widget.component.ts","../../../../libs/platform/layout/widget-core/src/lib/base-widget/grid-item-base-widget.component.ts","../../../../libs/platform/layout/widget-core/src/lib/base-widget/table-base-widget.component.ts","../../../../libs/platform/layout/widget-core/src/lib/base-widget/table-item-ops-base-widget.component.ts","../../../../libs/platform/layout/widget-core/src/lib/base-widget/table-item-base-widget.component.ts","../../../../libs/platform/layout/widget-core/src/lib/widget-definition.provider.ts","../../../../libs/platform/layout/widget-core/src/lib/widget-registery.service.ts","../../../../libs/platform/layout/widget-core/src/lib/widget-column-renderer.ts","../../../../libs/platform/layout/widget-core/src/lib/widget-container.component.ts","../../../../libs/platform/layout/widget-core/src/lib/widget-placeholder.component.ts","../../../../libs/platform/layout/widget-core/src/lib/widget-renderer.directive.ts","../../../../libs/platform/layout/widget-core/src/lib/widget-core.module.ts","../../../../libs/platform/layout/widget-core/src/lib/helper/property-editor.helper.ts","../../../../libs/platform/layout/widget-core/src/lib/helper/widget-serialization.helper.ts","../../../../libs/platform/layout/widget-core/src/lib/widget-categories.ts","../../../../libs/platform/layout/widget-core/src/lib/widget-group.types.ts","../../../../libs/platform/layout/widget-core/src/lib/widget-ai-catalog.filter.ts","../../../../libs/platform/layout/widget-core/src/acorex-platform-layout-widget-core.ts"],"sourcesContent":["export enum AXPPageStatus {\n // Idle statuses\n Idle = 'idle', // The page is idle.\n\n // Rendering statuses\n Rendering = 'rendering', // The page is being rendered.\n Rendered = 'rendered', // The rendering process is complete. should be renamed to idle\n\n // Processing statuses\n Processing = 'processing', // The page is performing a task or interaction.\n\n // Submission statuses\n Submitting = 'submitting', // The form is being submitted.\n Submitted = 'submitted', // Submission is completed.\n\n // Validation statuses\n Validating = 'validating', // The form is being validated.\n Validated = 'validated', // Validation is completed. \n\n // Error handling\n Error = 'error',\n}\n\nexport enum AXPWidgetStatus {\n // Rendering statuses\n Rendering = 'rendering', // The widget is being rendered.\n Rendered = 'rendered', // The rendering process is complete.\n\n // Processing statuses\n Processing = 'processing', // The widget is performing a task or interaction.\n\n // Error handling\n Error = 'error', // An error occurred during any phase.\n}\n","import { computed, Injectable, Signal, signal } from '@angular/core';\nimport { set } from 'lodash-es';\nimport { Subject } from 'rxjs';\nimport { AXPPageStatus, AXPWidgetStatus } from './widget-status.types';\n\nexport type AXPWidgetCoreElementAPI = { [name: string]: Subject<any> | Function };\n\nexport type AXPWidgetCoreElementAction = {\n title: string;\n command: string;\n icon?: string;\n color?: string;\n // Can be boolean or an expression string like '{{api.getStatus().isFirst}}'\n disabled?: boolean | string;\n hidden?: boolean | string;\n zone?: 'header' | 'footer';\n // Placement inside the zone for dialog rendering\n placement?: 'prefix' | 'suffix';\n scope?: 'primary' | 'secondary';\n};\nexport abstract class AXPWidgetCoreElement {\n abstract get id(): string | null;\n abstract get status(): Signal<AXPWidgetStatus>;\n\n api(): AXPWidgetCoreElementAPI {\n return {};\n }\n actions(): AXPWidgetCoreElementAction[] {\n return [];\n }\n}\n\n@Injectable()\nexport class AXPWidgetCoreService {\n private readonly variables$ = signal<any>({});\n private readonly functions$ = signal<{ [key: string]: Function }>({});\n\n public readonly onRefresh: Subject<void> = new Subject<void>();\n\n private widgets = new Map<string, AXPWidgetCoreElement>();\n private readonly onWidgetRegistered = new Subject<{ id: string; widget: AXPWidgetCoreElement }>();\n\n private readonly status$ = signal<AXPPageStatus>(AXPPageStatus.Rendering);\n public readonly status = this.status$.asReadonly();\n\n public readonly isBusy = computed(() => {\n return [AXPPageStatus.Processing, AXPPageStatus.Submitting, AXPPageStatus.Rendering].includes(this.status());\n });\n\n public registeredWidgetsCount = signal<number>(0);\n\n get variables() {\n return this.variables$();\n }\n\n get functions(): { [key: string]: Function } {\n return this.functions$();\n }\n\n public updateStatus() {\n this.status$.update(() => this.detectStatus());\n this.registeredWidgetsCount.set(this.widgets.size);\n }\n\n private detectStatus(): AXPPageStatus {\n const statuses = Array.from(this.widgets.values()).map((c) => c.status());\n\n // Rendering statuses\n if (statuses.some((status) => status === AXPWidgetStatus.Rendering)) {\n return AXPPageStatus.Rendering;\n }\n if (statuses.every((status) => status === AXPWidgetStatus.Rendered)) {\n return AXPPageStatus.Rendered;\n }\n\n // Processing statuses\n if (statuses.some((status) => status === AXPWidgetStatus.Processing)) {\n return AXPPageStatus.Processing;\n }\n\n // Error handling\n if (statuses.some((status) => status === AXPWidgetStatus.Error)) {\n return AXPPageStatus.Error;\n }\n\n return AXPPageStatus.Rendered; // Default to Loaded when all widgets are in a completed state\n }\n\n refresh() {\n setTimeout(() => {\n this.onRefresh.next();\n }, 0);\n }\n\n setStatus(status: AXPPageStatus) {\n this.status$.set(status);\n }\n\n setVariables(keysValues: any): void;\n setVariables(key: string, value: any): void;\n setVariables(...args: any[]): void {\n if (args.length == 0) return;\n else if (args.length == 1) this.variables$.set(args[0]);\n else if (args.length == 2) {\n this.variables$.update((v) => set(v, args[0], args[1]));\n }\n }\n\n setFunctions(keysValues: any): void;\n setFunctions(key: string, value: any): void;\n setFunctions(...args: any[]): void {\n if (args.length == 0) return;\n else if (args.length == 1) this.functions$.set(args[0]);\n else if (args.length == 2) {\n this.functions$.update((v) => set(v, args[0], args[1]));\n }\n }\n\n registerWidget(id: string, widget: AXPWidgetCoreElement) {\n this.widgets.set(id, widget);\n this.onWidgetRegistered.next({ id, widget });\n }\n\n getWidget(id: string): AXPWidgetCoreElement | undefined {\n return this.widgets.get(id);\n }\n\n /**\n * Waits until a widget with the given id is registered, then resolves with it.\n * If the widget is already registered, resolves immediately.\n * Optionally accepts a timeout (in ms) after which it resolves with undefined.\n */\n async waitForWidget(id: string, timeoutMs?: number): Promise<AXPWidgetCoreElement | undefined> {\n const existing = this.widgets.get(id);\n if (existing) {\n return existing;\n }\n\n return new Promise<AXPWidgetCoreElement | undefined>((resolve) => {\n let resolved = false;\n let timer: any = null;\n const sub = this.onWidgetRegistered.subscribe(({ id: registeredId, widget }) => {\n if (registeredId === id && !resolved) {\n resolved = true;\n sub.unsubscribe();\n if (timer) {\n clearTimeout(timer);\n }\n resolve(widget);\n }\n });\n\n if (timeoutMs != null && timeoutMs > 0) {\n timer = setTimeout(() => {\n if (!resolved) {\n resolved = true;\n sub.unsubscribe();\n resolve(undefined);\n }\n }, timeoutMs);\n }\n });\n }\n\n /**\n * Returns a list of registered widget ids (names).\n */\n listRegisteredWidgetNames(): string[] {\n return Array.from(this.widgets.keys());\n }\n\n ngOnDestroy(): void {}\n}\n","import { AXPWidgetTypesMap } from './widget-map';\n\n//\n// @deprecated\n// use AXPWidgetsList instead\nconst AXPWidgetsCatalog: AXPWidgetTypesMap = {\n timeDuration: 'time-duration',\n timeDurationFilter: 'time-duration-filter',\n checkbox: 'checkbox-editor',\n color: 'color-editor',\n connectedLists: 'connected-lists-editor',\n list: 'list-editor',\n contact: 'contact-editor',\n dateTime: 'date-time-editor',\n largeText: 'large-text-editor',\n number: 'number-editor',\n numberUnit: 'number-unit-editor',\n password: 'password-editor',\n richText: 'rich-text-editor',\n select: 'select-editor',\n selectionList: 'selection-list-editor',\n text: 'text-editor',\n table: 'table-editor',\n toggle: 'toggle-editor',\n blockLayout: 'block-layout',\n pageLayout: 'page-layout',\n repeaterLayout: 'repeater-layout',\n textBlockLayout: 'text-block-layout',\n alertBoxLayout: 'alert-box-layout',\n fileUploader: 'file-uploader',\n fileTypeExtension: 'file-type-extension',\n map: 'map',\n imageMarker: 'image-marker',\n image: 'image',\n gallery: 'gallery',\n signature: 'signature',\n buttonAction: 'button-action',\n document: 'document-layout',\n lookup: 'lookup-editor',\n formField: 'form-field',\n qrcode: 'qrcode',\n schedulerPicker: 'scheduler-picker',\n advancedGrid: 'advanced-grid-layout',\n advancedGridItem: 'advanced-grid-item-layout',\n grid: 'grid-layout',\n gridItem: 'grid-item-layout',\n template: 'template',\n templateDesigner: 'template-designer',\n cronJob: 'cron-job',\n spacing: 'spacing',\n direction: 'direction',\n border: 'border',\n flexLayout: 'flex-layout',\n flexItem: 'flex-item-layout',\n tableLayout: 'table-layout',\n tableItem: 'table-item-layout',\n avatar: 'avatar',\n themePaletteChooser: 'theme-palette-chooser',\n themeModeChooser: 'theme-mode-chooser',\n menuOrientationChooser: 'menu-orientation-chooser',\n fontStyleChooser: 'font-style-chooser',\n fontSizeChooser: 'font-size-chooser',\n iconChooser: 'icon-chooser',\n icon: 'icon',\n themeColorChooser: 'theme-color-chooser',\n gridOptions: 'grid-options',\n gridItemOptions: 'grid-item-options',\n advancedGridOptions: 'advanced-grid-options',\n stringFilter: 'string-filter',\n numberFilter: 'number-filter',\n dateTimeFilter: 'datetime-filter',\n booleanFilter: 'boolean-filter',\n lookupFilter: 'lookup-filter',\n flexOptions: 'flex-options',\n flexItemOptions: 'flex-item-options',\n selectFilter: 'select-filter',\n requiredValidation: 'required-validation',\n regularExpressionValidation: 'regular-expression-validation',\n minLengthValidation: 'min-length-validation',\n maxLengthValidation: 'max-length-validation',\n lessThanValidation: 'less-than-validation',\n greaterThanValidation: 'greater-than-validation',\n betweenValidation: 'between-validation',\n equalValidation: 'equal-validation',\n callbackValidation: 'callback-validation',\n donutChart: 'donut-chart',\n lineChart: 'line-chart',\n barChart: 'bar-chart',\n gaugeChart: 'gauge-chart',\n stickyNote: 'sticky-note',\n clockCalendar: 'clock-calendar',\n analogClock: 'analog-clock',\n weather: 'weather',\n minimalWeather: 'minimal-weather',\n advancedWeather: 'advanced-weather',\n metaData: 'meta-data-editor',\n templateEditor: 'template-box-editor',\n templateContentEditor: 'template-content-editor',\n panel: 'panel',\n notification: 'notification',\n taskBoard: 'task-board',\n comment: 'comment',\n dataList: 'data-list',\n listToolbar: 'list-toolbar',\n entityList: 'entity-list',\n editorJs: 'editor-js-editor',\n documentUploader: 'document-uploader',\n stepWizard: 'step-wizard',\n progressBar: 'progress-bar-editor',\n rate: 'rate-picker-editor',\n documentFileTypeFilter: 'document-file-type-filter',\n entityDefinitionProvider: 'entity-definition-provider-editor',\n};\n\nexport { AXPWidgetsCatalog };\n","import {\n AXPDataType,\n AXPExpression,\n AXPMetaData,\n AXPMultiLanguageString,\n AXPOptionsData,\n AXPPartialNested,\n AXPValidationRules,\n AXPValueTransformerFunctions,\n AXPWidgetTriggers,\n} from '@acorex/platform/core';\nimport { InjectionToken } from '@angular/core';\nimport { cloneDeep, isNil, merge } from 'lodash-es';\nimport { AXPWidgetsCatalog } from './widget-catalog';\nimport { AXPWidgetCategory } from './widget-categories';\nimport { AXPWidgetGroup } from './widget-group.types';\nimport { AXPWidgetTypesMap } from './widget-map';\nimport { AXPPageStatus } from './widget-status.types';\n\n/** Inclusion mode for AI widget catalog queries (Widgets:GetForAI). */\nexport type AXPWidgetAiCatalogMode = 'include' | 'exclude' | 'inherit';\n\nexport interface AXPWidgetPropertyGroup {\n name: string;\n title: string;\n order: number;\n}\n\nexport interface AXPWidgetProperty {\n name: string;\n title: string;\n description?: string;\n group: AXPWidgetPropertyGroup;\n order?: number;\n /**\n * Controls whether the property title label is shown in the property viewer panel.\n * Defaults to true when omitted.\n */\n showLabel?: boolean;\n schema: {\n dataType: AXPDataType;\n nullable?: boolean;\n defaultValue?: any | string | ((context: any | null) => any);\n interface: Required<Pick<AXPWidgetNode, 'path'>> & Omit<AXPWidgetNode, 'path'>;\n };\n //options?: AXPOptionsData;\n validations?: AXPValidationRules;\n visible: boolean | AXPExpression;\n binding?: {\n enabled: boolean;\n /** When set, the expression is edited at path + '.' + optionKey (e.g. options.visibility). */\n optionKey?: string;\n };\n}\n\nexport function cloneProperty(\n property: AXPWidgetProperty,\n values: AXPPartialNested<AXPWidgetProperty>,\n): AXPWidgetProperty {\n return merge(cloneDeep(property), values);\n}\n\nexport function createStringProperty(ctor: {\n defaultValue?: string;\n name: string;\n title: string;\n path?: string;\n group: AXPWidgetPropertyGroup;\n visible?: boolean | AXPExpression;\n}): AXPWidgetProperty {\n return {\n name: ctor.name,\n title: ctor.title,\n group: ctor.group,\n schema: {\n dataType: 'string',\n defaultValue: ctor.defaultValue,\n interface: {\n name: ctor.name,\n path: ctor.path ?? ctor.name,\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: !isNil(ctor.visible) ? ctor.visible : true,\n };\n}\n\nexport function createNumberProperty(ctor: {\n defaultValue?: number;\n name: string;\n title: string;\n path?: string;\n group: AXPWidgetPropertyGroup;\n visible?: boolean | AXPExpression;\n options?: {\n minValue?: number;\n maxValue?: number;\n decimals?: number;\n };\n}): AXPWidgetProperty {\n return {\n name: ctor.name,\n title: ctor.title,\n group: ctor.group,\n schema: {\n dataType: 'number',\n defaultValue: ctor.defaultValue,\n interface: {\n name: ctor.name,\n path: ctor.path ?? ctor.name,\n type: AXPWidgetsCatalog.number,\n options: ctor.options,\n },\n },\n visible: !isNil(ctor.visible) ? ctor.visible : true,\n };\n}\n\nexport function createBooleanProperty(ctor: {\n defaultValue?: boolean;\n name: string;\n title: string;\n path?: string;\n group: AXPWidgetPropertyGroup;\n visible?: boolean | AXPExpression;\n}): AXPWidgetProperty {\n return {\n name: ctor.name,\n title: ctor.title,\n group: ctor.group,\n schema: {\n dataType: 'boolean',\n defaultValue: ctor.defaultValue ?? false,\n interface: {\n name: ctor.name,\n path: ctor.path ?? ctor.name,\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: !isNil(ctor.visible) ? ctor.visible : true,\n binding: {\n enabled: true,\n },\n };\n}\n\nexport function createSelectProperty<T = string | { id: string; title: string }>(ctor: {\n defaultValue: T | T[] | any;\n dataSource: T[];\n name: string;\n title: string;\n path?: string;\n group: AXPWidgetPropertyGroup;\n visible?: boolean | AXPExpression;\n}): AXPWidgetProperty {\n return {\n name: ctor.name,\n title: ctor.title,\n group: ctor.group,\n schema: {\n dataType: 'string',\n defaultValue: Array.isArray(ctor.defaultValue)\n ? ctor.defaultValue.map((item) => (typeof item === 'string' ? { id: item } : item))\n : typeof ctor.defaultValue === 'string'\n ? { id: ctor.defaultValue, title: ctor.defaultValue }\n : ctor.defaultValue,\n interface: {\n name: ctor.name,\n path: ctor.path ?? ctor.name,\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: ctor.dataSource.map((item) => (typeof item === 'string' ? { id: item, title: item } : item)),\n },\n },\n },\n visible: !isNil(ctor.visible) ? ctor.visible : true,\n };\n}\n\nexport interface AXPWidgetNode {\n type: AXPWidgetTypesMap[keyof AXPWidgetTypesMap] | keyof AXPWidgetTypesMap | string;\n mode?: AXPWidgetRenderMode;\n path?: string;\n name?: string;\n visible?: boolean | AXPExpression;\n defaultValue?: any;\n children?: AXPWidgetNode[];\n options?: AXPOptionsData;\n triggers?: AXPWidgetTriggers;\n meta?: AXPMetaData;\n valueTransforms?: AXPValueTransformerFunctions;\n}\n\nexport interface AXPWidgetNodeToken<TOptions extends AXPOptionsData = AXPOptionsData> {\n defaultValue?: any;\n config: AXPWidgetConfig;\n node: AXPWidgetNode;\n options?: TOptions;\n}\n\nexport interface AXPWidgetColumnNode {\n type: string;\n path: string;\n options?: AXPOptionsData;\n}\n\nexport interface AXPWidgetColumnNodeToken extends AXPWidgetColumnNode {\n config: AXPWidgetConfig;\n}\n\nexport const AXP_WIDGET_TOKEN = new InjectionToken<AXPWidgetNodeToken>('AXP_WIDGET_TOKEN');\nexport const AXP_WIDGET_COLUMN_TOKEN = new InjectionToken<AXPWidgetColumnNodeToken>('AXP_WIDGET_COLUMN_TOKEN');\n\nexport interface AXPWidgetComponentConfig {\n component: () => Promise<any>;\n properties?: AXPWidgetProperty[];\n}\n\nexport interface AXPWidgetConfigComponents {\n designer?: AXPWidgetComponentConfig;\n view?: AXPWidgetComponentConfig;\n edit?: AXPWidgetComponentConfig;\n print?: AXPWidgetComponentConfig;\n column?: AXPWidgetComponentConfig;\n filter?: AXPWidgetComponentConfig;\n}\n\nexport type AXPWidgetViewType = 'container' | 'editor' | 'action' | 'view' | 'filter' | 'validation' | 'dashboard';\n\nexport type AXPWidgetDesignerOptionsMap = {\n container: { canInsert: boolean };\n editor: {\n needLabel: boolean;\n };\n action: {};\n view: {};\n};\n\nexport type AXPExtractWidgetConfig<T> = {\n type: AXPWidgetViewType;\n designer: T extends { type: infer V }\n ? V extends keyof AXPWidgetDesignerOptionsMap\n ? AXPWidgetDesignerOptionsMap[V]\n : any\n : any;\n};\n\nexport interface AXPWidgetConfig<T = any> {\n name: AXPWidgetTypesMap[keyof AXPWidgetTypesMap] | keyof AXPWidgetTypesMap | string;\n alias?: string | string[];\n title: AXPMultiLanguageString;\n icon?: string;\n description?: AXPMultiLanguageString;\n /**\n * Optional guidance for AI assistants (Widgets:GetForAI). Explains when and how to use this widget\n * for structured output; unrelated to end-user UI copy.\n */\n aiDescription?: string | null;\n categories?: AXPWidgetCategory | AXPWidgetCategory[];\n groups?: AXPWidgetGroup[];\n properties?: AXPWidgetProperty[];\n components: AXPWidgetConfigComponents;\n meta?: AXPMetaData;\n type: AXPExtractWidgetConfig<T>['type'];\n designer?: AXPExtractWidgetConfig<T>['designer'];\n options?: Record<string, any>;\n defaultFilterWidgetName?:\n | 'string-filter'\n | 'number-filter'\n | 'datetime-filter'\n | 'boolean-filter'\n | 'select-filter'\n | 'lookup-filter'\n | 'time-duration-filter'\n | string;\n /**\n * Optional layout for Change History. When set, this AXPWidgetNode is rendered for\n * changes of this widget type instead of the default fieldKey/actionKey text.\n * Context passed to renderer: the AXPActivityLogChange object.\n * If omitted, the default display is used.\n */\n historyLayout?: AXPWidgetNode;\n /**\n * Controls inclusion in AI-facing widget catalog queries (e.g. Widgets:GetForAI).\n * `inherit` (default): include only when `categories` contains the AI category (`AXP_WIDGETS_AI_CATEGORY`).\n * `include` / `exclude`: force include or exclude regardless of categories.\n */\n aiCatalog?: AXPWidgetAiCatalogMode;\n}\nexport interface AXPExtendedWidget {\n widget: AXPWidgetConfig;\n parentName: string;\n}\n\nexport type AXPWidgetRenderMode = keyof AXPWidgetConfigComponents;\n\nexport interface AXPLayoutBuilderStatusChangedEvent {\n status: AXPPageStatus;\n}\n","import { AXDataSource, AXValueChangedEvent, convertArrayToDataSource } from '@acorex/cdk/common';\nimport {\n AXPDataSourceDefinitionProviderService,\n AXPOptionsData,\n AXPValidationRule,\n AXPValidationRules,\n extractValue,\n} from '@acorex/platform/core';\nimport {\n ComponentRef,\n computed,\n effect,\n ElementRef,\n inject,\n Injectable,\n OnInit,\n signal,\n untracked,\n} from '@angular/core';\nimport { cloneDeep, get, isEqual, isNil, isObjectLike, isUndefined } from 'lodash-es';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { AXPContextStore } from '@acorex/platform/core';\nimport { AXPWidgetCoreElement, AXPWidgetCoreService } from './widget-core.service';\nimport { AXPWidgetStatus } from './widget-status.types';\nimport {\n AXP_WIDGET_COLUMN_TOKEN,\n AXP_WIDGET_TOKEN,\n AXPWidgetNode,\n AXPWidgetNodeToken,\n AXPWidgetRenderMode,\n} from './widget.types';\n\nexport type AXPClassMap = Readonly<Record<string, boolean>>;\nexport type AXPStyleMap = Readonly<Record<string, string | number>>;\n\n@Injectable()\nexport abstract class AXPBaseWidgetComponent<\n TOptions extends Record<string, unknown> = AXPOptionsData,\n> extends AXPWidgetCoreElement {\n protected readonly token: AXPWidgetNodeToken<TOptions> = inject(AXP_WIDGET_TOKEN) as AXPWidgetNodeToken<TOptions>;\n public readonly host = inject(ElementRef).nativeElement as HTMLDivElement;\n\n protected readonly layoutService = inject(AXPWidgetCoreService);\n protected readonly contextService = inject(AXPContextStore);\n\n public readonly config = this.token.config;\n public readonly node = this.token.node;\n\n protected readonly name = this.token.node.name;\n\n protected component = this;\n\n protected _id: string | null;\n public get id(): string | null {\n return this._id;\n }\n\n protected _options = signal<TOptions>(this.token.options ?? ({} as TOptions));\n public options = this._options.asReadonly();\n\n public onOptionsChanged = new Subject<{ sender: AXPBaseWidgetComponent }>();\n\n private _status = signal<AXPWidgetStatus>(AXPWidgetStatus.Rendering);\n public status = this._status.asReadonly();\n\n public readonly onStatusChanged = new BehaviorSubject<AXPWidgetStatus>(this._status());\n\n #statusEffect = effect(() => {\n this.onStatusChanged.next(this.status());\n });\n\n public isBusy = computed(() => [AXPWidgetStatus.Rendering, AXPWidgetStatus.Processing].includes(this.status()));\n\n parent: AXPLayoutBaseWidgetComponent<any> | null | undefined;\n parentComponent: ComponentRef<any> | null | undefined;\n\n parentElement: HTMLElement | null | undefined;\n index: number | null | undefined;\n mode: AXPWidgetRenderMode;\n locked: boolean;\n\n protected outputs(): (string | { [name: string]: unknown })[] {\n return [];\n }\n\n ngOnInit(): void {\n if (get(this.node, '__meta__.added')) {\n this.onAdded();\n }\n this.setStatus(AXPWidgetStatus.Rendered);\n }\n\n public setStatus(status: AXPWidgetStatus) {\n this._status.set(status);\n this.layoutService.updateStatus();\n }\n\n public setOptions(values: Partial<TOptions>): void {\n const oldValue = this.options();\n const value = cloneDeep(values);\n this._options.set({ ...oldValue, ...value } as TOptions);\n this.onOptionsChanged.next({ sender: this });\n }\n\n output<T = any>(name: string): T {\n const outputs = this.outputs().map((c) => (typeof c == 'string' ? { name: c, value: c } : c)) as {\n name: string;\n value: unknown;\n }[];\n\n if (outputs.some((c) => c.name == name)) {\n const opt = get(this, name);\n if (typeof opt == 'function') {\n return opt();\n }\n return opt;\n }\n return null as T;\n }\n\n call(name: string, ...args: any[]): void {\n const fn = get(this, name) as Function;\n if (fn && typeof fn == 'function') {\n fn.bind(this)(...args);\n }\n }\n\n protected readonly _children = signal(this.token.node.children ?? []);\n protected children = this._children.asReadonly();\n\n setChildren(children: AXPWidgetNode[]) {\n this._children.set([...children]);\n }\n\n onAdded() { }\n\n hostClass?(): AXPClassMap;\n hostStyle?(): AXPStyleMap;\n}\n\n@Injectable()\nexport abstract class AXPLayoutBaseWidgetComponent<\n TOptions extends AXPOptionsData = AXPOptionsData,\n> extends AXPBaseWidgetComponent<TOptions> {\n //TODO change this approach\n override ngOnInit(): void {\n if (this.name && !(this instanceof AXPValueWidgetComponent)) {\n this.layoutService.registerWidget(this.name, this);\n }\n\n super.ngOnInit();\n }\n}\n\n@Injectable()\nexport abstract class AXPValueWidgetComponent<T = any | null, TOptions extends AXPOptionsData = AXPOptionsData>\n extends AXPLayoutBaseWidgetComponent<TOptions>\n implements OnInit {\n protected readonly path = this.token.node.path;\n protected readonly defaultValue = this.token.defaultValue ?? this.token.node.defaultValue;\n\n private _isValueWidget = false;\n private isValueWidget = () => this._isValueWidget;\n\n public onValueChanged = new Subject<{ sender: AXPBaseWidgetComponent }>();\n\n public fullPath = signal<string | null>(null);\n public parentPath = signal<string | null>(null);\n\n override ngOnInit() {\n this._isValueWidget = this.config.properties?.some((c) => c.name == 'path') ?? false;\n if (this.isValueWidget()) {\n this.detectFullPath();\n // Set defaultValue if it exists and the path doesn't exist in context\n if (!isNil(this.defaultValue) && this.fullPath() && !this.contextService.hasValue(this.fullPath()!)) {\n this.setValue(this.defaultValue);\n }\n }\n //\n super.ngOnInit();\n }\n\n public getValue = computed<T>(\n () => {\n return this.fullPath() ? this.extractValue(this.fullPath()!) : null;\n },\n { equal: isEqual },\n );\n\n protected validationRules = computed<AXPValidationRules>(() => {\n const validationsRaw = this.options()['validations'];\n if (validationsRaw == null) {\n return [];\n }\n return Object.values(this.options()['validations'])\n .filter((c) => c != null)\n .map(\n (c: any) =>\n ({\n rule: c.rule,\n message: c.message,\n options: c.options,\n }) as AXPValidationRule,\n );\n });\n\n protected extractValue(path: string): any {\n const rawValue = this.contextService.getValue(path);\n if (this.node.valueTransforms?.getter) {\n return this.node.valueTransforms?.getter(rawValue);\n }\n return rawValue;\n }\n\n setValue(value: T | null | undefined) {\n if (this.node.valueTransforms?.setter) {\n value = this.node.valueTransforms?.setter(value);\n }\n const oldValue = this.getValue();\n value = isUndefined(value) ? null : value;\n if (isNil(value) && isNil(oldValue)) {\n return;\n }\n\n // Reordered arrays must persist even when items are deep-equal (e.g. empty row objects).\n const isArrayReorder =\n Array.isArray(oldValue) &&\n Array.isArray(value) &&\n oldValue.length === value.length &&\n oldValue.some((v, i) => v !== value[i]);\n\n if (!isArrayReorder && isEqual(oldValue, value)) {\n return;\n }\n if (this.fullPath()) {\n this.contextService.update(this.fullPath()!, value);\n this.onValueChanged.next({ sender: this });\n }\n }\n\n protected detectFullPath() {\n const sections = [];\n const ids = [];\n //\n let parent: AXPLayoutBaseWidgetComponent<any> | null | undefined = this as AXPLayoutBaseWidgetComponent<any>;\n //\n while (parent) {\n const isValueWidget = parent instanceof AXPValueWidgetComponent && parent.isValueWidget();\n const valueParent = parent as AXPValueWidgetComponent<any, any>;\n const path = valueParent.path ?? (isValueWidget ? valueParent.name : null);\n const id = valueParent.name;\n //\n if (path) {\n sections.push(path);\n }\n if (parent.index != null && isValueWidget) {\n sections.push(`[${parent.index}]`);\n }\n if (id) {\n ids.push(id);\n if (parent.index != null) {\n ids.push(`${parent.index}`);\n }\n }\n parent = parent.parent;\n }\n //\n this.fullPath.set(sections.reverse().join('.'));\n this.parentPath.set(sections.slice(0, sections.length - 1).join('.'));\n this._id = this.name || this.parent ? ids.reverse().join('_') : null;\n if (this._id) {\n this.layoutService.registerWidget(this._id, this);\n }\n }\n\n protected handleValueChanged(e: AXValueChangedEvent<T>) {\n if (e.isUserInteraction) {\n this.setValue(e.value);\n }\n }\n}\n\n@Injectable()\nexport abstract class AXPDataListWidgetComponent extends AXPValueWidgetComponent<any> {\n private dataService = inject(AXPDataSourceDefinitionProviderService);\n\n protected textField = computed<string>(() => this.options()['textField'] ?? 'title');\n protected valueField = computed<string>(() => (this.options()['valueField'] as string) ?? 'id');\n protected textTemplate = computed<string | undefined>(() =>\n isNil(this.options()['textTemplate'])\n ? undefined\n : (this.options()['textTemplate'] as string).replace(/{/g, '{{').replace(/}/g, '}}'),\n );\n\n protected dataSource = signal<AXDataSource<any>>(convertArrayToDataSource<any>([]));\n\n public selectedItems = signal<any[]>([]);\n\n //#region ---- DataSource Loading Effect ----\n\n /**\n * Track the last loaded string dataSource reference to prevent infinite loops\n * Only used for string-based datasources (not arrays or AXDataSource instances)\n */\n private lastStringDataSourceRef: string | null = null;\n\n private rf = effect(async () => {\n const rawValue = this.options()['dataSource'];\n\n // For string datasources: prevent infinite loop by checking reference\n if (typeof rawValue === 'string') {\n if (rawValue === this.lastStringDataSourceRef) {\n return;\n }\n this.lastStringDataSourceRef = rawValue;\n } else {\n // Reset string reference when dataSource changes to non-string\n this.lastStringDataSourceRef = null;\n }\n\n // Process dataSource creation in untracked context\n await untracked(async () => {\n if (rawValue instanceof AXDataSource) {\n // For AXDataSource instances, check if config changed\n if (!isEqual(rawValue.config, this.dataSource().config)) {\n this.dataSource.set(rawValue);\n }\n }\n // static array datasource - always recreate when options change\n else if (Array.isArray(rawValue)) {\n const ds = new AXDataSource({\n key: this.valueField(),\n pageSize: 10,\n load: async (e: any) => {\n const raw = this.options()['dataSource'];\n const skip = e.skip ?? 0;\n const take = e.take ?? raw.length;\n return {\n items: raw.slice(skip, skip + take),\n total: raw.length,\n };\n },\n byKey: (key: unknown) => {\n const raw = this.options()['dataSource'];\n const item = raw.filter((c: any) => c[this.valueField()] == key);\n return Promise.resolve(item[0]) as any;\n },\n });\n this.dataSource.set(ds);\n }\n // resolve data source by name (string or object with id)\n else if (rawValue && (typeof rawValue == 'string' || typeof rawValue == 'object')) {\n const id = typeof rawValue == 'object' ? rawValue['id'] : rawValue;\n const c = await this.dataService.get(id);\n if (this.mode == 'designer' && c?.samples?.length) {\n this.dataSource.set(\n convertArrayToDataSource(c.samples, {\n key: this.valueField(),\n pageSize: 500,\n }),\n );\n } else {\n const ds = c?.source();\n if (ds && ds instanceof Promise) {\n const d = await ds;\n this.dataSource.set(d);\n } else if (ds) {\n this.dataSource.set(ds);\n }\n // empty datasource\n else {\n this.dataSource.set(convertArrayToDataSource<any>([]));\n }\n }\n }\n // empty datasource\n else {\n this.dataSource.set(convertArrayToDataSource<any>([]));\n }\n });\n });\n\n //#endregion\n\n protected async extractItem(item: unknown): Promise<any> {\n if (isNil(item)) {\n return null;\n }\n if (isObjectLike(item) && get(item, this.textField()) != null) {\n return item;\n }\n const key = extractValue(item, this.valueField());\n const ds = this.dataSource();\n if (ds.config?.byKey) {\n const found = await ds.config?.byKey(key);\n if (found) {\n return found;\n }\n }\n return isObjectLike(item)\n ? item\n : {\n [this.valueField()]: item,\n [this.textField()]: item,\n };\n }\n\n private effect2 = effect(async () => {\n const value = this.getValue();\n const items: any[] = [];\n if (Array.isArray(value)) {\n items.push(...(await Promise.all(value.map((item: any) => this.extractItem(item)))));\n } else {\n items.push(await this.extractItem(value));\n }\n this.selectedItems.set(items.filter((c) => c != null));\n });\n}\n\n@Injectable()\nexport abstract class AXPColumnWidgetComponent<T = any | null | void> {\n private readonly token = inject(AXP_WIDGET_COLUMN_TOKEN);\n\n protected readonly path = this.token.path;\n protected readonly options = this.token.options ?? {};\n protected readonly rawValue: T = null as T;\n protected readonly rowData: any;\n protected readonly nullText: any = this.options['nullText'] as string;\n protected readonly nullValue: T = this.options['nullValue'] as T;\n\n protected value = () => {\n if (isNil(this.rawValue) && !isNil(this.nullValue)) {\n return this.nullValue;\n }\n return this.rawValue;\n };\n}\n","import { computed, Injectable } from '@angular/core';\nimport { AXPBorderBoxString, AXPSpacingBoxString } from '../helper';\nimport { AXPClassMap, AXPLayoutBaseWidgetComponent, AXPStyleMap } from '../widget-base.component';\n\n@Injectable()\nexport abstract class AXPBoxModelLayoutWidgetComponent extends AXPLayoutBaseWidgetComponent {\n public hostBoxStyle = computed<AXPStyleMap>(() => {\n const options = this.options();\n\n const style: Record<string, string | number> = {};\n\n const spacing = options?.['spacing'] as AXPSpacingBoxString | undefined;\n const border = options?.['border'] as AXPBorderBoxString | undefined;\n\n const backgroundColor = options?.['backgroundColor'] as string | undefined;\n const direction = options?.['direction'] as string | undefined;\n\n const overflow = options?.['overflow'] as string | undefined;\n const overflowX = options?.['overflowX'] as string | undefined;\n const overflowY = options?.['overflowY'] as string | undefined;\n\n style['background-color'] = backgroundColor ?? '';\n style['padding'] = spacing?.padding ?? '';\n style['margin'] = spacing?.margin ?? '';\n\n style['border-radius'] = border?.radius ?? '';\n style['border-width'] = border?.width ?? '';\n style['border-color'] = border?.color ?? '';\n style['border-style'] = border?.style ?? '';\n\n style['overflow'] = overflow ?? '';\n style['overflow-x'] = overflowX ?? '';\n style['overflow-y'] = overflowY ?? '';\n\n style['direction'] = direction ?? '';\n\n return style;\n });\n\n protected blockStyle = computed<AXPStyleMap>(() => {\n const options = this.options();\n\n const style: Record<string, string | number> = { ...this.hostBoxStyle() };\n\n const width = options?.['width'] as string | undefined;\n const minWidth = options?.['minWidth'] as string | undefined;\n const maxWidth = options?.['maxWidth'] as string | undefined;\n\n const height = options?.['height'] as string | undefined;\n const minHeight = options?.['minHeight'] as string | undefined;\n const maxHeight = options?.['maxHeight'] as string | undefined;\n\n style['min-width'] = minWidth ?? '';\n style['width'] = width ?? '';\n style['max-width'] = maxWidth ?? '';\n\n style['min-height'] = minHeight ?? '';\n style['height'] = height ?? '';\n style['max-height'] = maxHeight ?? '';\n\n return style;\n });\n\n protected inlineStyle = computed<AXPStyleMap>(() => {\n return { ...this.hostBoxStyle() };\n });\n\n protected blockClass = computed<AXPClassMap>(() => {\n return {\n 'ax-block': true,\n 'ax-w-full': true,\n // 'ax-widget-outline': true,\n };\n });\n\n protected inlineClass = computed<AXPClassMap>(() => {\n return {\n 'ax-inline-block': true,\n };\n });\n}\n","import { Injectable, computed } from '@angular/core';\nimport { AXPBoxModelLayoutWidgetComponent } from './box-model-widget.component';\n\n@Injectable()\nexport abstract class AXPBlockBaseLayoutWidgetComponent extends AXPBoxModelLayoutWidgetComponent {\n public override hostClass = computed(() => this.blockClass());\n public override hostStyle = computed(() => this.blockStyle());\n}\n","import { Injectable, computed } from '@angular/core';\nimport { isNil } from 'lodash-es';\nimport { AXPFlexBoxString } from '../helper';\nimport { AXPBlockBaseLayoutWidgetComponent } from './block-base-widget.component';\n\n@Injectable()\nexport abstract class AXPFlexBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent {\n protected flex = computed(() => this.options() as AXPFlexBoxString | undefined);\n\n public hostFlexStyle = computed(() => {\n const blockStyle = this.blockStyle();\n const style: Record<string, string | number> = { ...blockStyle };\n const flex = this.flex();\n if (isNil(flex?.flexDirection)) {\n style['flex-direction'] = '';\n } else {\n style['flex-direction'] = flex.flexDirection;\n }\n if (isNil(flex?.flexWrap)) {\n style['flex-wrap'] = '';\n } else {\n style['flex-wrap'] = flex.flexWrap;\n }\n //TODO NEED TO FIX LATER\n style['overflow'] = flex?.flexWrap === 'nowrap' ? 'auto' : '';\n //END\n if (isNil(flex?.justifyContent)) {\n style['justify-content'] = '';\n } else {\n style['justify-content'] = flex.justifyContent;\n }\n if (isNil(flex?.alignItems)) {\n style['align-items'] = '';\n } else {\n style['align-items'] = flex.alignItems;\n }\n if (isNil(flex?.gap)) {\n style['gap'] = '';\n } else {\n style['gap'] = flex.gap;\n }\n return style;\n });\n\n public hostFlexClass = computed<Record<string, boolean>>(() => {\n return {\n ...this.blockClass(),\n 'ax-flex': true,\n 'ax-h-full': true,\n };\n });\n\n public override hostClass = computed(() => {\n return this.hostFlexClass();\n });\n\n public override hostStyle = computed(() => {\n return this.hostFlexStyle();\n });\n}\n","import { computed, Injectable } from '@angular/core';\nimport { AXPBoxModelLayoutWidgetComponent } from './box-model-widget.component';\n\n@Injectable()\nexport abstract class AXPInlineBaseLayoutWidgetComponent extends AXPBoxModelLayoutWidgetComponent {\n public override hostClass = computed(() => this.inlineClass());\n public override hostStyle = computed(() => this.inlineStyle());\n}\n","import { Injectable, computed } from '@angular/core';\nimport { isNil } from 'lodash-es';\nimport { AXPFlexItemBoxString } from '../helper';\nimport { AXPInlineBaseLayoutWidgetComponent } from './inline-base-widget.component';\n\n@Injectable()\nexport abstract class AXPFlexItemBaseLayoutWidgetComponent extends AXPInlineBaseLayoutWidgetComponent {\n protected flexItem = computed(() => this.options() as AXPFlexItemBoxString | undefined);\n\n public hostFlexItemStyle = computed(() => {\n const inlineStyle = this.blockStyle();\n const style: Record<string, string | number> = { ...inlineStyle };\n const fi = this.flexItem();\n if (isNil(fi?.order)) {\n style['order'] = '';\n } else {\n style['order'] = fi.order;\n }\n if (isNil(fi?.grow)) {\n style['flex-grow'] = '';\n } else {\n style['flex-grow'] = fi.grow;\n }\n if (isNil(fi?.shrink)) {\n style['flex-shrink'] = '';\n } else {\n style['flex-shrink'] = fi.shrink;\n }\n if (isNil(fi?.basis)) {\n style['flex-basis'] = '';\n } else {\n style['flex-basis'] = fi.basis;\n }\n if (isNil(fi?.alignSelf)) {\n style['align-self'] = '';\n } else {\n style['align-self'] = fi.alignSelf;\n }\n return style;\n });\n\n public hostFlexItemClass = computed(() => {\n return {\n ...this.blockClass(),\n };\n });\n\n public override hostClass = computed(() => {\n return this.hostFlexItemClass();\n });\n\n public override hostStyle = computed(() => {\n return this.hostFlexItemStyle();\n });\n}\n","import { Injectable, computed } from '@angular/core';\nimport { AXPGridBreakpointValues } from '../helper';\nimport { AXPBlockBaseLayoutWidgetComponent } from './block-base-widget.component';\n\n@Injectable()\nexport abstract class AXPGridBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent {\n private grid = computed(() => this.options()?.['grid'] as AXPGridBreakpointValues | undefined);\n\n public hostGridStyle = computed(() => {\n const style: Record<string, string | number> = { ...this.inlineStyle() };\n const g = this.grid()?.default;\n\n if (g?.gap) style['gap'] = g.gap;\n\n return style;\n });\n\n public hostGridClass = computed(() => {\n const cls: Record<string, boolean> = {\n ...this.inlineClass(),\n 'ax-grid': true,\n };\n\n const g = this.grid()?.default;\n\n if (g?.columns) cls[`lg:ax-grid-cols-${g.columns}`] = true;\n // if (g?.rows) cls[`lg:ax-grid-rows-${g.rows}`] = true;\n if (g?.justifyItems) cls[`lg:ax-justify-items-${g.justifyItems}`] = true;\n if (g?.alignItems) cls[`lg:ax-align-items-${g.alignItems}`] = true;\n if (g?.autoFlow) cls[`lg:ax-grid-flow-${g.autoFlow}`] = true;\n\n return cls;\n });\n\n public override hostClass = computed(() => this.hostGridClass());\n public override hostStyle = computed(() => this.hostGridStyle());\n}\n","import { Injectable, computed } from '@angular/core';\nimport { AXPGridItemBoxString } from '../helper/property-editor.type';\nimport { AXPFlexBaseLayoutWidgetComponent } from './flex-base-widget.component';\n\n@Injectable()\nexport abstract class AXPGridItemBaseLayoutWidgetComponent extends AXPFlexBaseLayoutWidgetComponent {\n private gridItem = computed(() => this.options() as AXPGridItemBoxString | undefined);\n\n public hostGridItemStyle = computed(() => {\n const style: Record<string, string | number> = { ...this.hostFlexStyle() };\n const g = this.gridItem();\n\n if (g?.alignSelf) style['align-self'] = g.alignSelf;\n if (g?.justifySelf) style['justify-self'] = g.justifySelf;\n\n return style;\n });\n\n public hostGridItemClass = computed(() => {\n const cls: Record<string, boolean> = { ...this.hostFlexClass() };\n const g = this.gridItem();\n\n // Mobile-first: full width on small screens so items stack vertically and don't overflow\n cls['ax-col-span-12'] = true;\n // Large screens: apply defined placement so multi-column layout works on desktop\n if (g?.colSpan) cls[`lg:ax-col-span-${g.colSpan}`] = true;\n if (g?.colStart) cls[`lg:ax-col-start-${g.colStart}`] = true;\n if (g?.colEnd) cls[`lg:ax-col-end-${g.colEnd}`] = true;\n\n if (g?.rowSpan) cls[`lg:ax-row-span-${g.rowSpan}`] = true;\n if (g?.rowStart) cls[`lg:ax-row-start-${g.rowStart}`] = true;\n if (g?.rowEnd) cls[`lg:ax-row-end-${g.rowEnd}`] = true;\n\n return cls;\n });\n\n public override hostClass = computed(() => this.hostGridItemClass());\n public override hostStyle = computed(() => this.hostGridItemStyle());\n}\n","import { Injectable, computed } from '@angular/core';\nimport { AXPBlockBaseLayoutWidgetComponent } from './block-base-widget.component';\n\n@Injectable()\nexport abstract class AXPTableBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent {\n public hostTableClass = computed(() => ({\n ...this.blockClass(),\n }));\n\n public hostTableStyle = computed(() => {\n const style: Record<string, string | number> = { ...this.blockStyle() };\n style['overflow-x'] = 'auto';\n return style;\n });\n\n public override hostClass = computed(() => this.hostTableClass());\n public override hostStyle = computed(() => this.hostTableStyle());\n}\n","import { Injectable } from '@angular/core';\nimport { AXPBlockBaseLayoutWidgetComponent } from './block-base-widget.component';\n\n@Injectable()\nexport abstract class AXPTableItemOpsBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent {\n // Columns (relative to current cell)\n abstract insertColumnLeft(): void;\n abstract insertColumnRight(): void;\n\n // Rows relative to current cell\n abstract insertRowAbove(): void;\n abstract insertRowBelow(): void;\n\n // Cell-level insert operations (relative to current cell)\n abstract insertCellShiftRight(): void; // insert to the left of target, shift right, increase columns\n abstract insertCellShiftDown(): void; // insert above target row, shift down, increase rows\n}\n","import { Injectable, computed } from '@angular/core';\nimport { AXPTableItemOpsBaseLayoutWidgetComponent } from './table-item-ops-base-widget.component';\n\n@Injectable()\nexport abstract class AXPTableItemBaseLayoutWidgetComponent extends AXPTableItemOpsBaseLayoutWidgetComponent {\n protected colSpan = computed<number>(() => {\n const v = (this.options() as any)?.colSpan as number | undefined;\n return v ? Math.max(1, v) : 1;\n });\n protected rowSpan = computed<number>(() => {\n const v = (this.options() as any)?.rowSpan as number | undefined;\n return v ? Math.max(1, v) : 1;\n });\n\n public override hostClass = computed(() => this.blockClass());\n public override hostStyle = computed(() => this.blockStyle());\n}\n","//#region ---- Imports ----\n\nimport { InjectionToken } from '@angular/core';\nimport type { AXPWidgetConfig, AXPExtendedWidget } from './widget.types';\n\n//#endregion\n\n//#region ---- Token & Interface ----\n\n/**\n * Provider interface for widget definitions.\n * Implement this interface and register via AXP_WIDGET_DEFINITION_PROVIDER to contribute widgets.\n */\nexport interface AXPWidgetDefinitionProvider {\n getWidgets(): AXPWidgetConfig[];\n getExtendedWidgets?(): AXPExtendedWidget[];\n}\n\n/**\n * Injection token for widget definition providers.\n * Modules register their widget providers using this token (multi: true).\n */\nexport const AXP_WIDGET_DEFINITION_PROVIDER = new InjectionToken<AXPWidgetDefinitionProvider[]>(\n 'AXP_WIDGET_DEFINITION_PROVIDER',\n {\n factory: () => [],\n }\n);\n\n//#endregion\n","import { inject, Injectable } from '@angular/core';\nimport { merge } from 'lodash-es';\nimport type { AXPWidgetConfig, AXPExtendedWidget } from './widget.types';\nimport type { AXPWidgetDefinitionProvider } from './widget-definition.provider';\nimport { AXP_WIDGET_DEFINITION_PROVIDER } from './widget-definition.provider';\n\n//#region ---- Build widget map (shared with tooling / snapshot scripts) ----\n\n\n//TODO RECHECK THIS FUNCTION s.hosseini\n\n/**\n * Merges core + extended widgets the same way as AXPWidgetRegistryService.ensureBuilt().\n * Use with concrete providers (e.g. AXPCoreWidgetsProvider, AXPEntityWidgetsProvider) in Node scripts without DI.\n */\nexport function buildWidgetRegistryMapFromProviders(\n providers: AXPWidgetDefinitionProvider[]\n): Map<string, AXPWidgetConfig> {\n const types = new Map<string, AXPWidgetConfig>();\n const AXPExtendedWidgets: AXPExtendedWidget[] = [];\n\n for (const provider of providers) {\n const widgets = provider.getWidgets?.() ?? [];\n for (const w of widgets) {\n types.set(w.name, w);\n }\n const extended = provider.getExtendedWidgets?.() ?? [];\n AXPExtendedWidgets.push(...extended);\n }\n\n for (const { parentName, widget } of AXPExtendedWidgets) {\n const parent = types.get(parentName);\n if (parent) {\n const merged = merge({}, parent, widget);\n merged.name = widget.name;\n types.set(merged.name, merged);\n }\n }\n\n return types;\n}\n\n//#endregion\n\n//#region ---- Widget Registry Service (Token-Based) ----\n\n/**\n * Aggregates widgets from all AXP_WIDGET_DEFINITION_PROVIDER instances.\n * Token-based like AXP_MENU_PROVIDER / AXP_PERMISSION_DEFINITION_PROVIDER / AXP_SETTING_DEFINITION_PROVIDER.\n * No separate registry - widgets come solely from providers.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPWidgetRegistryService {\n private readonly _providers = inject(AXP_WIDGET_DEFINITION_PROVIDER, { optional: true }) ?? [];\n private _types: Map<string, AXPWidgetConfig> | null = null;\n\n /**\n * Lazy-build widget map from all providers.\n */\n private ensureBuilt(): Map<string, AXPWidgetConfig> {\n if (this._types) return this._types;\n\n this._types = buildWidgetRegistryMapFromProviders(this._providers);\n return this._types;\n }\n\n resolve(name: string): AXPWidgetConfig {\n const widget = this.ensureBuilt().get(name);\n if (!widget) {\n throw new Error(`Widget with name \"${name}\" does not exist.`);\n }\n return widget;\n }\n\n /**\n * Registered widget config when present; otherwise `undefined`. Does not throw — use when\n * {@link resolve}'s value may be a non-widget id (e.g. data-source row id in dynamic field configurator).\n */\n getOptional(name: string): AXPWidgetConfig | undefined {\n return this.ensureBuilt().get(name);\n }\n\n all(): AXPWidgetConfig[] {\n return Array.from(this.ensureBuilt().values());\n }\n}\n\n//#endregion\n","import { AXBaseDataTable, AXDataTableColumnComponent } from '@acorex/components/data-table';\nimport { AXPExpressionEvaluatorService, AXPExpressionEvaluatorScope, getSmart } from '@acorex/platform/core';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Injector,\n Input,\n TemplateRef,\n ViewChild,\n inject,\n signal,\n} from '@angular/core';\nimport { merge, get } from 'lodash-es';\nimport { AXPWidgetCoreService } from './widget-core.service';\nimport { AXPWidgetRegistryService } from './widget-registery.service';\nimport { AXPWidgetColumnNode, AXP_WIDGET_COLUMN_TOKEN } from './widget.types';\n\n@Component({\n selector: 'axp-widget-column-renderer',\n template: `\n <ng-template #header>{{ caption | translate | async }}</ng-template>\n <ng-template #cell let-row>\n <div [class]=\"expandHandler ? 'ax-flex ax-gap-2 ax-items-center' : ''\">\n @if (expandHandler) {\n <div\n (click)=\"handleExpandRow(row)\"\n class=\"ax-expand-handler\"\n [class.ax-invisible]=\"!hasExpandableRow(row)\"\n id=\"ax-expand-handler-container\"\n [style.padding-inline-start.rem]=\"row.data?.__meta__?.level * 2\"\n >\n @if (loadingRow() === row) {\n <i class=\"fas fa-spinner-third ax-animate-twSpin ax-animate-infinite\"></i>\n } @else {\n @if (row.data?.__meta__?.expanded) {\n <i [class]=\"customCollapseIcon || 'far fa-minus-square ax-text-md ax-opacity-75'\"></i>\n } @else {\n <i [class]=\"customExpandIcon || 'far fa-plus-square ax-text-md ax-opacity-75'\"></i>\n }\n }\n </div>\n }\n @if (component && row?.data) {\n <ng-container\n *ngComponentOutlet=\"component; injector: getRowInjector(row.data); inputs: getInputs(row.data)\"\n ></ng-container>\n }\n </div>\n </ng-template>\n <ng-template #footer></ng-template>\n `,\n providers: [\n AXPWidgetCoreService,\n { provide: AXDataTableColumnComponent, useExisting: AXPWidgetColumnRendererComponent },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n inputs: ['caption'],\n standalone: false,\n})\nexport class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {\n protected widgetRegistery = inject(AXPWidgetRegistryService);\n private grid = inject(AXBaseDataTable);\n private expressionEvaluator = inject(AXPExpressionEvaluatorService);\n\n @Input() customExpandIcon: string;\n @Input() customCollapseIcon: string;\n\n @Input() customWidth: string;\n\n private _node: AXPWidgetColumnNode;\n @Input({ required: true })\n public get node(): AXPWidgetColumnNode {\n return this._node;\n }\n public set node(v: AXPWidgetColumnNode) {\n this._node = v;\n }\n\n private mergedOptions = signal<any>({});\n protected loadingRow = signal(null);\n private rowInjectorsCache = new Map<string, Injector>();\n private hasExpressions = false;\n private pendingEvaluations = new Set<string>();\n private changeDetectionScheduled = false;\n private readonly MAX_CACHE_SIZE = 1000; // Limit cache size to prevent memory leaks\n\n @Input()\n public footerTemplate: TemplateRef<unknown>;\n\n @ViewChild('footer')\n private _contentFooterTemplate: TemplateRef<unknown>;\n\n get renderFooterTemplate(): TemplateRef<unknown> {\n return this.footerTemplate ?? this._contentFooterTemplate;\n }\n\n @Input()\n public expandHandler: boolean;\n\n @Input()\n public cellTemplate: TemplateRef<unknown>;\n\n @ViewChild('cell')\n private _contentCellTemplate: TemplateRef<unknown>;\n\n get renderCellTemplate(): TemplateRef<unknown> {\n return this.cellTemplate ?? this._contentCellTemplate;\n }\n\n @Input()\n public headerTemplate: TemplateRef<unknown>;\n\n @ViewChild('header')\n private _contentHeaderTemplate: TemplateRef<unknown>;\n\n /**\n * True when the row should show the expand icon: either hasChild is true (from server/initial load)\n * or the row has loaded children (e.g. after refreshItemChildren when children go from 0 to 1).\n */\n protected hasExpandableRow(row: { data?: Record<string, unknown> }): boolean {\n const data = row?.data;\n if (!data) return false;\n if (data['hasChild'] === true) return true;\n const children = (data['__meta__'] as Record<string, unknown> | undefined)?.['children'];\n return Array.isArray(children) && children.length > 0;\n }\n\n protected async handleExpandRow(row: any) {\n this.loadingRow.set(row);\n await this.grid.expandRow(row);\n this.loadingRow.set(null);\n // if (row.data?.__meta__?.expanded === undefined) {\n // this.width = `${parseInt(this.width as string) + 24}px`;\n // }\n }\n\n get renderHeaderTemplate(): TemplateRef<unknown> {\n return this.headerTemplate ?? this._contentHeaderTemplate;\n }\n\n get loadingEnabled(): boolean {\n return true;\n }\n\n get name(): string {\n return `col-${this.node.path}`;\n }\n\n private injector = inject(Injector);\n private cdr = inject(ChangeDetectorRef);\n protected widgetInjector!: Injector;\n protected component!: any;\n\n async ngOnInit() {\n const widget = this.widgetRegistery.resolve(this.node.type);\n const mode = 'column';\n this.component = await widget?.components[mode]?.component();\n //\n const props = widget?.components[mode]?.properties\n ?.filter((c) => c.schema.defaultValue)\n .map((c) => ({ [c.name]: c.schema.defaultValue }))\n .reduce((acc, curr) => {\n return { ...acc, ...curr };\n }, {});\n //\n this.mergedOptions.set(merge(props, this.node.options) || {});\n\n // Check if options contain expressions (performance optimization)\n this.hasExpressions = this.checkForExpressions(this.mergedOptions());\n\n const tokenValue = {\n path: this.node.path,\n options: this.mergedOptions(),\n };\n this.widgetInjector = Injector.create({\n parent: this.injector,\n providers: [\n {\n provide: AXP_WIDGET_COLUMN_TOKEN,\n useValue: tokenValue,\n },\n ],\n });\n this.width = this.mergedOptions().width === 'auto' ? 'auto' : this.customWidth ? this.customWidth : (this.mergedOptions().width ?? '200px');\n this.allowResizing = this.mergedOptions().allowResizing || true;\n this.cdr.detectChanges();\n }\n\n //#region ---- Performance Optimization Methods ----\n\n /**\n * Check if options contain any expressions that need evaluation\n */\n private checkForExpressions(obj: any): boolean {\n if (typeof obj === 'string') {\n return this.expressionEvaluator.isExpression(obj);\n }\n if (Array.isArray(obj)) {\n return obj.some((item) => this.checkForExpressions(item));\n }\n if (obj && typeof obj === 'object') {\n return Object.values(obj).some((value) => this.checkForExpressions(value));\n }\n return false;\n }\n\n /**\n * Get cache key for row data - optimized to avoid JSON.stringify when possible\n */\n private getCacheKey(data: any): string {\n if (data?.id) {\n return `row-${data.id}`;\n }\n // Use a hash of key properties instead of full JSON.stringify\n // This is much faster for large objects\n const keyProps = ['id', 'code', 'name', 'title'];\n const keyValues = keyProps.map((prop) => data?.[prop]).filter((v) => v != null);\n if (keyValues.length > 0) {\n return `row-${keyValues.join('-')}`;\n }\n // Fallback to JSON.stringify only if no key properties exist\n // But limit the stringified size to prevent performance issues\n try {\n const str = JSON.stringify(data);\n return str.length > 1000 ? `row-${str.substring(0, 1000)}` : `row-${str}`;\n } catch {\n // If JSON.stringify fails, use a simple hash\n return `row-${Object.keys(data || {}).length}`;\n }\n }\n\n /**\n * Schedule change detection (debounced to batch multiple updates)\n */\n private scheduleChangeDetection(): void {\n if (this.changeDetectionScheduled) {\n return;\n }\n this.changeDetectionScheduled = true;\n // Use requestAnimationFrame for better performance\n requestAnimationFrame(() => {\n this.cdr.detectChanges();\n this.changeDetectionScheduled = false;\n });\n }\n\n /**\n * Limit cache size using simple FIFO eviction\n */\n private evictCacheIfNeeded(): void {\n if (this.rowInjectorsCache.size >= this.MAX_CACHE_SIZE) {\n // Remove oldest entries (first 25% of cache)\n const entriesToRemove = Math.floor(this.MAX_CACHE_SIZE * 0.25);\n const keysToRemove = Array.from(this.rowInjectorsCache.keys()).slice(0, entriesToRemove);\n keysToRemove.forEach((key) => this.rowInjectorsCache.delete(key));\n }\n }\n\n //#endregion\n\n getInputs(data: any): any {\n return {\n rawValue: get(data, this.node.path!),\n rowData: data,\n };\n }\n\n getRowInjector(data: any): Injector {\n // Optimized cache key generation\n const cacheKey = this.getCacheKey(data);\n\n // Check if we have a cached injector for this row\n let rowInjector = this.rowInjectorsCache.get(cacheKey);\n\n if (!rowInjector) {\n // If no expressions in options, use original options directly (performance optimization)\n if (!this.hasExpressions) {\n const tokenValue = {\n path: this.node.path,\n options: this.mergedOptions(),\n };\n\n rowInjector = Injector.create({\n parent: this.injector,\n providers: [\n {\n provide: AXP_WIDGET_COLUMN_TOKEN,\n useValue: tokenValue,\n },\n ],\n });\n\n this.evictCacheIfNeeded();\n this.rowInjectorsCache.set(cacheKey, rowInjector);\n return rowInjector;\n }\n\n // Check if evaluation is already pending for this row\n if (!this.pendingEvaluations.has(cacheKey)) {\n this.pendingEvaluations.add(cacheKey);\n\n // Evaluate expressions in options based on row data\n const scope: AXPExpressionEvaluatorScope = {\n ...(data ?? {}),\n context: {\n eval: (path: string) => {\n return getSmart(data, path);\n },\n },\n };\n\n // Start async evaluation - will update injector when complete\n this.expressionEvaluator.evaluate(this.mergedOptions(), scope).then((evaluatedOptions) => {\n // Create injector with evaluated options\n const tokenValue = {\n path: this.node.path,\n options: evaluatedOptions,\n };\n\n const newInjector = Injector.create({\n parent: this.injector,\n providers: [\n {\n provide: AXP_WIDGET_COLUMN_TOKEN,\n useValue: tokenValue,\n },\n ],\n });\n\n // Replace cached injector to force component recreation on next render\n this.rowInjectorsCache.delete(cacheKey);\n this.evictCacheIfNeeded();\n this.rowInjectorsCache.set(cacheKey, newInjector);\n this.pendingEvaluations.delete(cacheKey);\n\n // Schedule batched change detection (performance optimization)\n this.scheduleChangeDetection();\n }).catch(() => {\n // If evaluation fails, keep using the fallback injector\n this.pendingEvaluations.delete(cacheKey);\n });\n }\n\n // Create injector with original options as fallback (will be updated when evaluation completes)\n const tokenValue = {\n path: this.node.path,\n options: this.mergedOptions(),\n };\n\n rowInjector = Injector.create({\n parent: this.injector,\n providers: [\n {\n provide: AXP_WIDGET_COLUMN_TOKEN,\n useValue: tokenValue,\n },\n ],\n });\n\n // Cache the initial injector\n this.evictCacheIfNeeded();\n this.rowInjectorsCache.set(cacheKey, rowInjector);\n }\n\n return rowInjector;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n computed,\n effect,\n inject,\n} from '@angular/core';\nimport { AXPContextChangeEvent, AXPContextStore } from '@acorex/platform/core';\nimport { AXPWidgetCoreService } from './widget-core.service';\n\n@Component({\n selector: 'axp-widgets-container',\n template: `<ng-content></ng-content>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { style: 'display: contents;' },\n providers: [AXPWidgetCoreService, AXPContextStore],\n standalone: false,\n})\nexport class AXPWidgetContainerComponent {\n public readonly contextService = inject(AXPContextStore);\n public readonly builderService = inject(AXPWidgetCoreService);\n\n @Output()\n public readonly onContextChanged = new EventEmitter<AXPContextChangeEvent>();\n\n @Input()\n set context(value: any) {\n this.contextService.set(value);\n }\n\n @Input()\n public set functions(v: any) {\n this.builderService.setFunctions(v);\n }\n\n constructor() {\n effect(() => {\n if (this.contextService.isChanged()) {\n this.onContextChanged.emit(this.contextService.changeEvent());\n }\n });\n }\n\n public status = computed(() => {\n return this.builderService.status();\n });\n\n public isBusy = computed(() => {\n return this.builderService.isBusy();\n });\n\n\n public refresh() {\n this.builderService.refresh();\n }\n\n public find(name: string) {\n return this.builderService.waitForWidget(name);\n }\n}\n","import { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'axp-widget-placeholder',\n template: `<div>\n <ax-skeleton class=\"ax-w-full ax-h-10 ax-rounded-md\"></ax-skeleton>\n </div>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXSkeletonModule],\n standalone: true,\n})\nexport class AXPWidgetPlaceholderComponent {}\n","import { AXTranslateOptions, AXTranslationService } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport { AXPExpressionEvaluatorScope, AXPExpressionEvaluatorService, AXPMetaData, getSmart } from '@acorex/platform/core';\nimport {\n ComponentRef,\n Directive,\n Injector,\n SimpleChanges,\n ViewContainerRef,\n WritableSignal,\n effect,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { cloneDeep, get, isEmpty, isEqual, isString, merge, set, sum } from 'lodash-es';\nimport { Observable, Subject, filter } from 'rxjs';\nimport { AXPBaseWidgetComponent, AXPLayoutBaseWidgetComponent, AXPValueWidgetComponent } from './widget-base.component';\nimport { AXPContextStore } from '@acorex/platform/core';\nimport { AXPWidgetCoreService } from './widget-core.service';\nimport { AXPWidgetPlaceholderComponent } from './widget-placeholder.component';\nimport { AXPWidgetRegistryService } from './widget-registery.service';\nimport { AXPWidgetStatus } from './widget-status.types';\nimport {\n AXPWidgetConfig,\n AXPWidgetNode,\n AXPWidgetNodeToken,\n AXPWidgetRenderMode,\n AXP_WIDGET_TOKEN,\n} from './widget.types';\n\nexport type AXPWidgetRendererDirectiveOptions = AXPMetaData;\n\n@Directive({\n selector: '[axp-widget-renderer]',\n exportAs: 'widgetRenderer',\n providers: [\n {\n provide: AXUnsubscriber,\n },\n ],\n standalone: false,\n})\nexport class AXPWidgetRendererDirective {\n parentNode = input<AXPLayoutBaseWidgetComponent | null>();\n\n index = input<number | null>();\n\n mode = input.required<AXPWidgetRenderMode>();\n node = input.required<AXPWidgetNode>();\n\n private _options = signal<AXPWidgetRendererDirectiveOptions>({});\n public options = this._options.asReadonly();\n\n public onOptionsChanged = output<{ sender: AXPWidgetRendererDirective; widget: AXPBaseWidgetComponent }>();\n public onValueChanged = output<{ sender: AXPWidgetRendererDirective; widget: AXPValueWidgetComponent }>();\n public onLoad = output<{ sender: AXPWidgetRendererDirective; widget: AXPBaseWidgetComponent }>();\n\n //#region ---- Public API ----\n\n /**\n * Signal that emits the component reference when it's ready\n */\n private _componentRefSignal = signal<ComponentRef<any> | null>(null);\n public componentRefSignal = this._componentRefSignal.asReadonly();\n\n //#endregion\n\n //#region ---- Properties ----\n\n protected mergedOptions: WritableSignal<any> = signal<any>({});\n\n private injector = inject(Injector);\n protected builderService = inject(AXPWidgetCoreService);\n protected contextService = inject(AXPContextStore);\n protected widgetRegistery = inject(AXPWidgetRegistryService);\n protected unsubscriber = inject(AXUnsubscriber);\n protected translateService = inject(AXTranslationService);\n protected widgetService = inject(AXPWidgetRegistryService);\n protected expressionEvaluator = inject(AXPExpressionEvaluatorService);\n private viewContainerRef = inject(ViewContainerRef);\n\n protected isLoading = signal(false);\n protected isVisible = signal(true);\n //TODO check if instance cannot be public change it:\n public instance!: AXPValueWidgetComponent;\n private expressionEvaluators: Map<string, () => Promise<any>> = new Map();\n private componentRef: ComponentRef<any>;\n private renderTimeoutId: any = null;\n private hasInitialRender = false;\n\n private onContextChanged = new Subject<{ path: string }>();\n private onLoadEvent = new Subject<{ sender: AXPWidgetRendererDirective; widget: AXPBaseWidgetComponent }>();\n\n //#region ---- Performance Optimization Properties ----\n\n private contextUpdateQueue = new Set<string>();\n private contextUpdateTimeout: any = null;\n private readonly CONTEXT_UPDATE_DEBOUNCE_MS = 4; // ~250fps for large forms\n\n // Removed visibility detection - not needed for current implementation\n\n // Expression result caching\n private expressionCache = new Map<string, { value: any; timestamp: number }>();\n private readonly EXPRESSION_CACHE_TTL = 500; // Cache for 500ms (increased for better hit rate)\n\n // Options change tracking\n private lastAppliedOptions: any = null;\n\n // Expression result tracking\n private lastExpressionResults = new Map<string, any>();\n\n // Buffer for context changes that happen before initial render completes\n private preRenderContextQueue = new Set<string>();\n\n //#endregion\n\n //#endregion\n\n constructor() {\n effect(async () => {\n const changed = this.contextService.changeEvent();\n\n // Don't trigger re-render during initial setup\n if (!this.hasInitialRender) {\n // Handle initial context set (state: 'initiated' with empty path means full context update)\n if (changed.state === 'initiated' && (!changed.path || changed.path === '')) {\n // Mark that we need to re-evaluate all expressions when initial render completes\n // This handles the case where context is set before/during widget initialization\n this.preRenderContextQueue.add('*'); // Use '*' as a marker for full context initialization\n // console.log(`📝 [${this.node().type}] Buffered initial context set`);\n } else if (changed.path) {\n this.preRenderContextQueue.add(changed.path);\n // console.log(`📝 [${this.node().type}] Buffered pre-render context change: ${changed.path}`);\n }\n return;\n }\n\n // CRITICAL PERFORMANCE FIX: Only respond to relevant context changes\n // Handle initial context set (full context update)\n if (changed.state === 'initiated' && (!changed.path || changed.path === '')) {\n // Full context initialization - trigger re-evaluation of all expressions\n // console.log(`🎯 [${this.node().type}] Initial context set detected - triggering full re-evaluation`);\n this.clearExpressionCache();\n if (this.expressionEvaluators.size > 0) {\n await this.updateOptionsBasedOnContext();\n this.applyOptions();\n }\n } else if (changed.path && this.isRelevantContextChange(changed.path)) {\n // console.log(`🎯 [${this.node().type}] Context change detected: ${changed.path}`);\n this.queueContextUpdate(changed.path);\n }\n await this.updateVisibility();\n });\n\n this.builderService.onRefresh.pipe(this.unsubscriber.takeUntilDestroy).subscribe(async () => {\n await this.processBatchedUpdates();\n });\n }\n\n //#region ---- Expression Caching Methods ----\n\n private getCachedExpressionResult(expressionKey: string): any | null {\n const cached = this.expressionCache.get(expressionKey);\n if (cached && performance.now() - cached.timestamp < this.EXPRESSION_CACHE_TTL) {\n // console.log(`💾 [${this.node().type}] Using cached expression result for '${expressionKey}'`);\n return cached.value;\n }\n return null;\n }\n\n private setCachedExpressionResult(expressionKey: string, value: any): void {\n this.expressionCache.set(expressionKey, {\n value,\n timestamp: performance.now(),\n });\n }\n\n private clearExpressionCache(): void {\n this.expressionCache.clear();\n }\n\n private isPathAffectingExpressions(changedPath: string): boolean {\n // console.log(\n // `🔍 [${this.node().type}] Checking if path '${changedPath}' affects expressions. Expression count: ${this.expressionEvaluators.size}`,\n // );\n\n // If widget has no expressions, no need to clear cache\n if (this.expressionEvaluators.size === 0) {\n // console.log(`🔍 [${this.node().type}] Path '${changedPath}' - no expressions, keeping cache`);\n return false;\n }\n\n // Use the same logic as hasExpressionDependency to check for actual dependencies\n if (this.hasExpressionDependency(changedPath)) {\n // console.log(`🔍 [${this.node().type}] Path '${changedPath}' affects expressions - clearing cache`);\n return true;\n }\n\n // console.log(`🔍 [${this.node().type}] Path '${changedPath}' does not affect expressions - keeping cache`);\n return false;\n }\n\n //#endregion\n\n //#region ---- Context Batching Methods ----\n\n private queueContextUpdate(path: string) {\n if (path) {\n // console.log(`🔄 [${this.node().type}] Queueing context update for path: ${path}`);\n this.contextUpdateQueue.add(path);\n\n // Clear existing timeout\n if (this.contextUpdateTimeout) {\n clearTimeout(this.contextUpdateTimeout);\n }\n\n // Debounce updates\n this.contextUpdateTimeout = setTimeout(() => {\n // console.log(`⚡ [${this.node().type}] Processing batched updates for ${this.contextUpdateQueue.size} paths`);\n this.processBatchedUpdates();\n }, this.CONTEXT_UPDATE_DEBOUNCE_MS);\n }\n }\n\n private async processBatchedUpdates() {\n if (this.contextUpdateQueue.size === 0) return;\n\n const startTime = performance.now();\n const paths = Array.from(this.contextUpdateQueue);\n this.contextUpdateQueue.clear();\n\n // console.log(`📊 [${this.node().type}] Processing ${paths.length} paths:`, paths);\n\n // Clear expression cache only if changed paths affect this widget's expressions\n const shouldClearCache = paths.some((path) => this.isPathAffectingExpressions(path));\n if (shouldClearCache) {\n // console.log(`🗑️ [${this.node().type}] Clearing expression cache due to expression-affecting path change`);\n this.clearExpressionCache();\n }\n\n // Process updates in batches\n const optionsStartTime = performance.now();\n const hasOptionsUpdate = await this.updateOptionsBasedOnContext();\n const optionsTime = performance.now() - optionsStartTime;\n\n if (typeof hasOptionsUpdate === 'number' && hasOptionsUpdate > 0) {\n // console.log(`🔧 [${this.node().type}] Options updated (${optionsTime.toFixed(2)}ms)`);\n this.applyOptions();\n }\n\n // Check visibility for any of the changed paths\n const visibilityStartTime = performance.now();\n const visibilityNeedsUpdate = paths.some((path) => this.hasVisibilityDependency(path));\n\n if (visibilityNeedsUpdate) {\n // console.log(`👁️ [${this.node().type}] Visibility needs update`);\n await this.updateVisibility();\n }\n const visibilityTime = performance.now() - visibilityStartTime;\n\n // Emit context changes\n paths.forEach((path) => {\n this.onContextChanged.next({ path });\n });\n\n const totalTime = performance.now() - startTime;\n // console.log(\n // `✅ [${this.node().type}] Batch processing completed in ${totalTime.toFixed(2)}ms (options: ${optionsTime.toFixed(2)}ms, visibility: ${visibilityTime.toFixed(2)}ms)`,\n // );\n }\n\n //#endregion\n\n //#region ---- Context Relevance Filtering ----\n\n private isRelevantContextChange(changedPath: string): boolean {\n const node = this.node();\n\n // 1. Direct path match - widget's own field\n if (node.path === changedPath) {\n return true;\n }\n\n // 2. Parent path match - widget is inside the changed container\n if (node.path && changedPath.startsWith(node.path + '.')) {\n return true;\n }\n\n // 3. Child path match - changed field is inside this widget's container\n if (node.path && node.path.startsWith(changedPath + '.')) {\n return true;\n }\n\n // 4. Expression dependency check - if widget has expressions that depend on this path\n if (this.hasExpressionDependency(changedPath)) {\n return true;\n }\n\n // 5. Trigger dependency check - if widget has triggers that depend on this path\n if (this.hasTriggerDependency(changedPath)) {\n return true;\n }\n\n // 7. Visibility dependency check - if widget's visibility depends on this path\n if (this.hasVisibilityDependency(changedPath)) {\n return true;\n }\n\n return false;\n }\n\n /**\n * True when a context store path used in an expression (`context.eval`, `context.options`) is\n * affected by `changedPath`.\n */\n private contextStorePathDependsOnChangedPath(evalPath: string, changedPath: string): boolean {\n const normalizePath = (p: string): string => {\n if (!p) return p;\n const parts = p.split('.');\n const last = parts[parts.length - 1];\n if (last && last.endsWith('Id')) {\n parts.splice(parts.length - 1, 1, last.slice(0, -2), 'id');\n }\n return parts.join('.');\n };\n\n const isSegmentSuffix = (a: string, b: string): boolean => {\n if (!a || !b) return false;\n const pa = a.split('.');\n const pb = b.split('.');\n if (pb.length > pa.length) return false;\n for (let i = 1; i <= pb.length; i++) {\n if (pa[pa.length - i] !== pb[pb.length - i]) return false;\n }\n return true;\n };\n\n const evalNorm = normalizePath(evalPath);\n const changedNorm = normalizePath(changedPath);\n\n const rawMatch =\n evalPath === changedPath ||\n evalPath.startsWith(changedPath + '.') ||\n changedPath.startsWith(evalPath + '.') ||\n isSegmentSuffix(evalPath, changedPath) ||\n isSegmentSuffix(changedPath, evalPath);\n\n const normMatch =\n evalNorm === changedNorm ||\n evalNorm.startsWith(changedNorm + '.') ||\n changedNorm.startsWith(evalNorm + '.') ||\n isSegmentSuffix(evalNorm, changedNorm) ||\n isSegmentSuffix(changedNorm, evalNorm);\n\n if (rawMatch || normMatch) {\n return true;\n }\n\n return this.isPathAlias(evalPath, changedPath);\n }\n\n /**\n * Whether an expression template string reads context store paths affected by `changedPath`.\n */\n private expressionTextDependsOnContextPath(expressionValue: string, changedPath: string): boolean {\n const contextEvalRegex = /context\\.eval\\(['\"]([^'\\\"]+)['\"]\\)/g;\n let match;\n while ((match = contextEvalRegex.exec(expressionValue)) !== null) {\n if (this.contextStorePathDependsOnChangedPath(match[1], changedPath)) {\n return true;\n }\n }\n const contextOptionsQuoted = /context\\.options\\(\\s*['\"]([^'\"]*)['\"]\\s*\\)/g;\n while ((match = contextOptionsQuoted.exec(expressionValue)) !== null) {\n const sub = match[1];\n const evalPath = sub === '' ? 'options' : `options.${sub}`;\n if (this.contextStorePathDependsOnChangedPath(evalPath, changedPath)) {\n return true;\n }\n }\n const contextOptionsEmpty = /context\\.options\\(\\s*\\)/g;\n while ((match = contextOptionsEmpty.exec(expressionValue)) !== null) {\n if (this.contextStorePathDependsOnChangedPath('options', changedPath)) {\n return true;\n }\n }\n return false;\n }\n\n private hasExpressionDependency(changedPath: string): boolean {\n for (const [path, evaluator] of this.expressionEvaluators) {\n if (path.includes(changedPath)) {\n return true;\n }\n const node = this.node();\n const expressionValue = this.getExpressionValueFromNode(node, path);\n if (expressionValue && typeof expressionValue === 'string') {\n if (this.expressionTextDependsOnContextPath(expressionValue, changedPath)) {\n return true;\n }\n }\n }\n return false;\n }\n\n private isPathAlias(evalPath: string, changedPath: string): boolean {\n // Dynamic path alias detection based on 'Id' suffix pattern\n // Examples: typeId.id <-> type.id, categoryId.name <-> category.name\n\n // Check if evalPath ends with 'Id' and has a property\n if (evalPath.endsWith('Id') && evalPath.includes('.')) {\n const basePath = evalPath.substring(0, evalPath.lastIndexOf('Id'));\n const property = evalPath.substring(evalPath.lastIndexOf('.') + 1);\n const mappedPath = `${basePath}.${property}`;\n\n if (changedPath === mappedPath) {\n // console.log(`🔍 [${this.node().type}] Path alias detected: '${evalPath}' <-> '${changedPath}'`);\n return true;\n }\n }\n\n // Check if changedPath ends with 'Id' and has a property\n if (changedPath.endsWith('Id') && changedPath.includes('.')) {\n const basePath = changedPath.substring(0, changedPath.lastIndexOf('Id'));\n const property = changedPath.substring(changedPath.lastIndexOf('.') + 1);\n const mappedPath = `${basePath}.${property}`;\n\n if (evalPath === mappedPath) {\n // console.log(`🔍 [${this.node().type}] Path alias detected: '${evalPath}' <-> '${changedPath}'`);\n return true;\n }\n }\n\n // Check for direct 'Id' suffix mapping (e.g., typeId <-> type.id)\n if (evalPath.endsWith('Id') && !evalPath.includes('.')) {\n const basePath = evalPath.substring(0, evalPath.lastIndexOf('Id'));\n const mappedPath = `${basePath}.id`;\n\n if (changedPath === mappedPath) {\n // console.log(`🔍 [${this.node().type}] Path alias detected: '${evalPath}' <-> '${changedPath}'`);\n return true;\n }\n }\n\n if (changedPath.endsWith('Id') && !changedPath.includes('.')) {\n const basePath = changedPath.substring(0, changedPath.lastIndexOf('Id'));\n const mappedPath = `${basePath}.id`;\n\n if (evalPath === mappedPath) {\n // console.log(`🔍 [${this.node().type}] Path alias detected: '${evalPath}' <-> '${changedPath}'`);\n return true;\n }\n }\n\n return false;\n }\n\n private getExpressionValueFromNode(node: AXPWidgetNode, path: string): string | null {\n try {\n // Navigate through the node structure to find the expression value\n const pathParts = path.split('.');\n let current: any = node.options || {};\n\n // Navigate through the path parts\n for (const part of pathParts) {\n if (current && typeof current === 'object' && part in current) {\n current = current[part];\n } else {\n return null;\n }\n }\n\n return typeof current === 'string' ? current : null;\n } catch (error) {\n // console.error('Error extracting expression value from node:', error);\n return null;\n }\n }\n\n private hasTriggerDependency(changedPath: string): boolean {\n const node = this.node();\n const triggers = node.triggers || node.options?.['triggers'] || this.mergedOptions()?.triggers;\n\n if (!triggers) return false;\n\n // Check if any trigger event depends on the changed path\n for (const trigger of triggers) {\n if (trigger.event && trigger.event.includes(changedPath)) {\n return true;\n }\n }\n return false;\n }\n\n private hasVisibilityDependency(changedPath: string): boolean {\n const node = this.node();\n const visibility = node.options?.['visible'] || this.mergedOptions()?.visible;\n\n if (!visibility || typeof visibility !== 'string') return false;\n\n if (this.expressionEvaluator.isExpression(visibility)) {\n return this.expressionTextDependsOnContextPath(visibility, changedPath);\n }\n\n return false;\n }\n\n //#endregion\n\n // Removed visibility detection methods - not needed for current implementation\n\n // Detect input changes\n ngOnChanges(changes: SimpleChanges) {\n if (changes['mode'] || changes['node']) {\n // Check if either 'mode' or 'node' has changed\n this.rerenderComponent();\n }\n }\n\n private rerenderComponent() {\n // Clear any pending render operation to prevent double rendering\n if (this.renderTimeoutId) {\n clearTimeout(this.renderTimeoutId);\n this.renderTimeoutId = null;\n }\n\n // Reset loading state to allow re-rendering\n this.isLoading.set(false);\n\n // Schedule the component loading\n this.renderTimeoutId = setTimeout(async () => {\n await this.loadComponent();\n this.renderTimeoutId = null;\n });\n }\n\n ngOnDestroy() {\n if (this.renderTimeoutId) {\n clearTimeout(this.renderTimeoutId);\n }\n if (this.contextUpdateTimeout) {\n clearTimeout(this.contextUpdateTimeout);\n }\n if (this.componentRef) {\n this.componentRef.destroy();\n }\n this.onLoadEvent.complete();\n }\n\n private async loadComponent() {\n if (this.isLoading()) {\n return;\n }\n this.isLoading.set(true);\n\n try {\n // Destroy the existing component if it exists\n if (this.componentRef) {\n this.componentRef.destroy();\n }\n this.viewContainerRef.clear();\n\n // Reset the component ref signal\n this._componentRefSignal.set(null);\n //\n const widget = this.widgetRegistery.resolve(this.node().type);\n //\n const propertiesToProcess = [\n ...(widget?.properties ?? []),\n ...(widget?.components[this.mode()]?.properties ?? []),\n ]?.filter((c) => c.schema.defaultValue != null);\n\n // Process default values (evaluate expressions if needed)\n const props: { [key: string]: any } = {};\n for (const property of propertiesToProcess) {\n const defaultValue = property.schema.defaultValue;\n if (typeof defaultValue === 'string' && this.expressionEvaluator.isExpression(defaultValue)) {\n // Evaluate expression for default value\n try {\n const evaluatedValue = await this.evaluateExpression(defaultValue);\n props[property.name] = evaluatedValue;\n } catch (error) {\n // console.error(`Error evaluating default value expression for property ${property.name}:`, error);\n props[property.name] = cloneDeep(defaultValue); // Fallback to original value\n }\n } else {\n // Use static default value\n props[property.name] = cloneDeep(defaultValue);\n }\n }\n //\n this.mergedOptions.set(merge(props, widget?.options, this.node().options) || {});\n\n this.expressionEvaluators.clear();\n // Register expressions from widget defaults and node options to cover related-entity cases\n this.preprocessAndInitialOptions(cloneDeep(widget?.options));\n this.preprocessAndInitialOptions(cloneDeep(this.node().options));\n\n // Check if context is available before evaluating expressions\n // If context is empty, expressions will be re-evaluated after initial render\n const contextData = this.contextService.data();\n const hasContextData = contextData && Object.keys(contextData).length > 0;\n\n if (hasContextData) {\n await this.updateOptionsBasedOnContext();\n } else {\n // Context not yet available - expressions will be evaluated after initial render\n // when context is set (handled by the effect and preRenderContextQueue)\n }\n //\n this._options.update((val) => ({ ...val, ...this.mergedOptions() }));\n // Evaluate default value\n let defaultValue = this.node().defaultValue;\n if (defaultValue && this.expressionEvaluator.isExpression(defaultValue)) {\n defaultValue = await this.evaluateExpression(defaultValue);\n }\n //\n const tokenValue = {\n node: this.node(),\n defaultValue: defaultValue,\n options: this.mergedOptions(),\n config: widget,\n } as AXPWidgetNodeToken;\n const token = Injector.create({\n parent: this.injector,\n providers: [\n {\n provide: AXP_WIDGET_TOKEN,\n useValue: tokenValue,\n },\n ],\n });\n //\n const loadingRef = this.viewContainerRef.createComponent(AXPWidgetPlaceholderComponent);\n //\n const com = await widget?.components[this.mode()]?.component();\n if (!com) {\n // console.error(`${this.node().type} widget component not found with mode: ${this.mode()}`);\n return;\n }\n this.componentRef = this.viewContainerRef.createComponent<AXPValueWidgetComponent<any>>(com, { injector: token });\n this.instance = this.componentRef.instance;\n this.instance.setStatus(AXPWidgetStatus.Rendering);\n this.instance.parent = this.parentNode();\n this.instance.index = this.index();\n this.instance.mode = this.mode();\n this.instance.setStatus(AXPWidgetStatus.Rendered);\n\n // Update the component ref signal for reactive access\n this._componentRefSignal.set(this.componentRef);\n this.instance?.onOptionsChanged?.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {\n this.onOptionsChanged.emit({ sender: this, widget: c.sender });\n });\n this.instance?.onValueChanged?.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {\n this.onValueChanged.emit({ sender: this, widget: c.sender as AXPValueWidgetComponent });\n });\n await this.updateVisibility();\n await this.assignTriggers();\n //\n loadingRef.destroy();\n\n // Mark that initial render is complete\n this.hasInitialRender = true;\n\n // Re-evaluate expressions after initial render to catch late-arriving related context\n if (this.expressionEvaluators.size > 0) {\n // console.log(`🔄 [${this.node().type}] Re-evaluating expressions after initial render`);\n await this.updateOptionsBasedOnContext();\n this.applyOptions();\n }\n\n // Re-evaluate visibility after initial render\n await this.updateVisibility();\n\n // Process any buffered pre-render context changes now that the component is ready\n if (this.preRenderContextQueue.size > 0) {\n // Check if we have a full context initialization marker\n const hasFullContextInit = this.preRenderContextQueue.has('*');\n\n if (hasFullContextInit) {\n // Full context was initialized - clear cache and re-evaluate all expressions\n // console.log(`🚀 [${this.node().type}] Processing initial context set - full re-evaluation`);\n this.clearExpressionCache();\n this.preRenderContextQueue.clear();\n // Re-evaluate all expressions since context is now available\n if (this.expressionEvaluators.size > 0) {\n await this.updateOptionsBasedOnContext();\n this.applyOptions();\n }\n await this.updateVisibility();\n } else {\n // console.log(\n // `🚀 [${this.node().type}] Processing ${this.preRenderContextQueue.size} buffered pre-render changes`,\n // );\n this.preRenderContextQueue.forEach((p) => this.contextUpdateQueue.add(p));\n this.preRenderContextQueue.clear();\n await this.processBatchedUpdates();\n }\n }\n\n // Emit load event after widget is fully loaded\n const loadEvent = { sender: this, widget: this.instance };\n this.onLoadEvent.next(loadEvent);\n this.onLoad.emit(loadEvent);\n } catch (error) {\n // console.error('Error loading component:', error);\n } finally {\n this.isLoading.set(false);\n }\n }\n\n private applyOptions() {\n if (!this.instance) return;\n\n const currentOptions = this.mergedOptions();\n\n // Check if options have actually changed\n if (this.hasOptionsChanged(currentOptions)) {\n // console.log('applyOptions', this.node().path, '- options changed');\n this._options.update((val) => ({ ...val, ...currentOptions }));\n this.instance.setOptions(currentOptions);\n this.lastAppliedOptions = cloneDeep(currentOptions); // Deep clone using Lodash\n } else {\n // console.log('applyOptions', this.node().path, '- no changes, skipping');\n }\n }\n\n private hasOptionsChanged(newOptions: any): boolean {\n if (!this.lastAppliedOptions) {\n return true; // First time, always apply\n }\n\n // Deep comparison of options using Lodash isEqual\n return !isEqual(newOptions, this.lastAppliedOptions);\n }\n\n // Removed deepCloneValue method - now using Lodash cloneDeep\n\n preprocessAndInitialOptions(obj: any, pathPrefix: string = ''): void {\n if (!obj) {\n return;\n }\n Object.entries(obj).forEach(([key, value]) => {\n const currentPath = pathPrefix ? `${pathPrefix}.${key}` : key;\n\n // CRITICAL FIX: Skip trigger actions during options processing\n //\n // PROBLEM: Trigger actions were being evaluated immediately during widget setup/options processing,\n // causing them to execute before the actual trigger event occurred. This meant triggers would fire\n // during initialization instead of when the specified context path actually changed.\n //\n // ROOT CAUSE: The expression evaluator was processing trigger action expressions (like console.log\n // or widget.setValue calls) as part of the normal options preprocessing, treating them as dynamic\n // expressions that needed immediate evaluation.\n //\n // SOLUTION: Detect when we're processing trigger actions and store them as static values without\n // expression evaluation. This ensures trigger actions are only evaluated when the trigger's\n // subscription callback actually fires (when the event condition is met).\n //\n // RESULT: Triggers now only execute when their event filters pass (e.g., when the specified\n // context path changes), not during widget initialization.\n if (currentPath.includes('triggers') && (key === 'action' || currentPath.endsWith('.action'))) {\n // Apply static values directly without expression evaluation\n this.mergedOptions.update((currentOptions) => {\n return set(currentOptions, currentPath, value);\n });\n return;\n }\n\n if (typeof value === 'string' && this.expressionEvaluator.isExpression(value)) {\n // Cache dynamic expression for later evaluation\n this.expressionEvaluators.set(currentPath, () => this.evaluateExpression(value));\n } else if (\n typeof value === 'object' &&\n value !== null &&\n (value.constructor === Object || Array.isArray(value))\n ) {\n // Recursively handle nested objects\n this.preprocessAndInitialOptions(value, currentPath);\n } else {\n // Apply static values directly\n this.mergedOptions.update((currentOptions) => {\n return set(currentOptions, currentPath, value);\n });\n }\n });\n }\n\n async updateOptionsBasedOnContext() {\n // Early return if no expressions to evaluate\n if (this.expressionEvaluators.size === 0) {\n return 0;\n }\n\n // console.log(`🔍 [${this.node().type}] Evaluating ${this.expressionEvaluators.size} expressions`);\n\n const updatePromises = Array.from(this.expressionEvaluators).map(async ([path, evaluator]) => {\n // Check cache first\n const cachedValue = this.getCachedExpressionResult(path);\n if (cachedValue !== null) {\n // console.log(`💾 [${this.node().type}] Using cached expression result for '${path}'`);\n return { path, newValue: cachedValue, fromCache: true };\n }\n\n // Evaluate expression if not cached\n const evalStartTime = performance.now();\n const newValue = await evaluator();\n const evalTime = performance.now() - evalStartTime;\n\n // Check if result has actually changed using Lodash isEqual\n // Important: We must check if the key exists in the map, not just compare values\n // This handles the case where the expression evaluates to `undefined` for the first time\n // Without this check, `undefined` would be incorrectly treated as \"no change\"\n // because Map.get() returns `undefined` for non-existent keys\n const hasLastValue = this.lastExpressionResults.has(path);\n const lastValue = this.lastExpressionResults.get(path);\n const hasChanged = !hasLastValue || !isEqual(newValue, lastValue);\n\n if (hasChanged) {\n // console.log(\n // `📝 [${this.node().type}] Expression '${path}' evaluated in ${evalTime.toFixed(2)}ms - value changed`,\n // );\n // Cache the result and track it\n this.setCachedExpressionResult(path, newValue);\n this.lastExpressionResults.set(path, cloneDeep(newValue));\n return { path, newValue, fromCache: false, hasChanged: true };\n } else {\n // console.log(\n // `📝 [${this.node().type}] Expression '${path}' evaluated in ${evalTime.toFixed(2)}ms - value unchanged, skipping update`,\n // );\n // Cache the result but don't update\n this.setCachedExpressionResult(path, newValue);\n this.lastExpressionResults.set(path, cloneDeep(newValue));\n return { path, newValue, fromCache: false, hasChanged: false };\n }\n });\n\n // Wait for all evaluators to complete\n const updates = await Promise.all(updatePromises);\n\n // Filter updates to only include those that have actually changed\n const changedUpdates = updates.filter((update) => update.hasChanged !== false);\n\n // Apply updates to mergedOptions only for changed values\n if (changedUpdates.length > 0) {\n this.mergedOptions.update((o) => {\n const updatedOptions = { ...o };\n changedUpdates.forEach(({ path, newValue }) => {\n set(updatedOptions, path, newValue);\n });\n return updatedOptions;\n });\n }\n\n const cacheHits = updates.filter((update) => update.fromCache).length;\n const skippedUpdates = updates.length - changedUpdates.length;\n\n // console.log(\n // `📋 [${this.node().type}] Applied ${changedUpdates.length} expression updates (${cacheHits} cache hits, ${skippedUpdates} skipped)`,\n // );\n return changedUpdates.length;\n }\n\n async updateVisibility() {\n const node = this.node();\n const visibility = node.options?.['visible'] || this.mergedOptions()?.visible;\n\n if (visibility === undefined || visibility === null) {\n // Default to visible if no visibility option is set\n this.show();\n return;\n }\n\n let shouldBeVisible: boolean;\n\n if (typeof visibility === 'boolean') {\n shouldBeVisible = visibility;\n } else if (typeof visibility === 'string' && this.expressionEvaluator.isExpression(visibility)) {\n // Evaluate expression for visibility\n try {\n const result = await this.evaluateExpression(visibility);\n shouldBeVisible = Boolean(result);\n } catch (error) {\n // console.error('Error evaluating visibility expression:', error);\n shouldBeVisible = true; // Default to visible on error\n }\n } else {\n // Treat other values as truthy/falsy\n shouldBeVisible = Boolean(visibility);\n }\n\n if (shouldBeVisible) {\n this.show();\n } else {\n this.hide();\n }\n }\n\n private show() {\n if (!this.isVisible()) {\n this.isVisible.set(true);\n if (this.componentRef && this.componentRef.location) {\n this.loadComponent();\n // this.componentRef.location.nativeElement.style.display = '';\n }\n }\n }\n\n private hide() {\n if (this.isVisible()) {\n this.isVisible.set(false);\n if (this.componentRef && this.componentRef.location) {\n this.componentRef.destroy();\n // this.componentRef.location.nativeElement.style.display = 'none';\n }\n }\n }\n\n private async evaluateExpression(templateExpression: string): Promise<any> {\n try {\n const scope = this.buildExpressionScope();\n return await this.expressionEvaluator.evaluate(templateExpression, scope);\n } catch (error) {\n // console.error('Error evaluating expression:', error);\n return false;\n }\n }\n\n private buildExpressionScope(): AXPExpressionEvaluatorScope {\n return {\n context: this.getContextScope(),\n events: this.getEventScope(),\n widget: this.getWidgetScope(),\n methods: this.getFunctionScope(),\n vars: this.getVariablesScope(),\n };\n }\n\n private getContextScope(): { [name: string]: Function } {\n return {\n eval: (path: string) => {\n //TODO: Handle array index\n const fullPath = path.startsWith('>') ? `${this.instance?.parentPath()}.${path.substring(1)}` : path;\n const value = this.contextService.getValue(fullPath);\n return value;\n },\n set: (path: string, value: any) => {\n this.contextService.update(path, value);\n },\n data: () => {\n return this.contextService.data();\n },\n isDirty: () => {\n return this.contextService.isDirty();\n },\n /**\n * Host/widget-under-edit `options` from the shared context store (same values as\n * `context.eval('options' + (path ? '.' + path : ''))`), not `widget.options` on the nested\n * property field instance. Uses one `getValue` so smart-path behavior matches `context.eval`.\n */\n options: (path?: string) => {\n if (path == null || path === '') {\n return this.contextService.getValue('options');\n }\n return this.contextService.getValue(`options.${path}`);\n },\n };\n }\n\n private getEventScope(): { [name: string]: Function } {\n return {\n context: (path?: string) => {\n return this.onContextChanged.pipe(\n filter((c) => {\n // If no path filter specified, pass all events\n if (path == null || path === '') {\n return true;\n }\n // Ensure c.path exists\n if (!c.path) {\n return false;\n }\n // Pattern: \"prefix*\" - matches paths that start with prefix\n if (path.endsWith('*')) {\n const prefix = path.substring(0, path.length - 1);\n return c.path.startsWith(prefix);\n }\n // Pattern: \"*suffix\" - matches paths that end with suffix\n else if (path.startsWith('*')) {\n const suffix = path.substring(1);\n return c.path.endsWith(suffix);\n }\n // Exact match\n else {\n return c.path === path;\n }\n }),\n );\n },\n from: (event: string) => get(this.instance.api(), event),\n load: () => {\n return this.onLoadEvent.asObservable();\n },\n };\n }\n\n private getWidgetScope(): { [name: string]: Function } {\n return {\n /** Resolved options for this renderer's widget instance (not the host / property-viewer target). */\n options: (path?: string) => {\n const opts =\n this.instance && typeof this.instance.options === 'function'\n ? this.instance.options()\n : this.mergedOptions();\n if (path == null || path === '') {\n return opts;\n }\n return getSmart(opts, path);\n },\n call: (name: string, ...args: any[]) => {\n this.instance.call(name, ...args);\n },\n setValue: (value: any) => {\n this.instance.setValue(value);\n },\n clear: () => {\n this.instance.setValue(undefined);\n },\n refresh: () => {\n const refresh = (this.instance as any)?.['refresh'];\n if (refresh && typeof refresh === 'function') {\n refresh.bind(this.instance)();\n } else {\n this.updateOptionsBasedOnContext();\n this.applyOptions();\n }\n },\n output: (name: any) => {\n this.instance.output(name);\n },\n find: (id: string) => {\n return this.builderService.getWidget(id);\n },\n };\n }\n\n private getFunctionScope(): { [name: string]: Function } {\n const scope: { [name: string]: Function } = {\n sum: (values: any) => {\n return sum(values);\n },\n translate: (text: string, options?: AXTranslateOptions) => {\n return this.translateService.translateAsync(text, options);\n },\n widgetInfo: (name: string): AXPWidgetConfig | undefined => {\n return this.widgetService.resolve(name);\n },\n };\n\n // Add custom functions from builder service\n Object.entries(this.builderService.functions).forEach(([key, fn]) => {\n scope[key] = (...args: any[]) => {\n return fn(...args);\n };\n });\n\n return scope;\n }\n\n private getVariablesScope(): { [name: string]: Function } {\n return {\n eval: (path: string) => get(this.builderService.variables, path),\n };\n }\n\n private async assignTriggers() {\n const node = this.node();\n // Check multiple possible locations for triggers\n const triggers = node.triggers || node.options?.['triggers'] || this.mergedOptions()?.triggers;\n\n if (!triggers) {\n return;\n }\n\n for (const trigger of triggers) {\n try {\n const event = await this.evaluateTrigger(trigger.event);\n if (event) {\n event.pipe(this.unsubscriber.takeUntilDestroy).subscribe(() => {\n const exec = async (action: string) => {\n if (!isEmpty(action) && isString(action)) {\n await this.evaluateAction(action);\n }\n };\n const actions = Array.isArray(trigger.action) ? trigger.action : [trigger.action];\n actions.forEach(async (a: string) => await exec(a));\n });\n }\n } catch (error) {\n // console.error('Error assigning trigger:', error);\n }\n }\n }\n\n private async evaluateTrigger(templateExpression: string): Promise<Observable<any> | null> {\n try {\n const scope = this.buildExpressionScope();\n const result = await this.expressionEvaluator.evaluate(templateExpression, scope);\n\n // Check if result is an Observable\n if (result && typeof result.subscribe === 'function') {\n return result;\n } else {\n return null;\n }\n } catch (error) {\n // console.error('Error evaluating trigger expression:', error);\n return null;\n }\n }\n\n private async evaluateAction(templateExpression: string) {\n try {\n const scope = this.buildExpressionScope();\n await this.expressionEvaluator.evaluate(templateExpression, scope);\n } catch (error) {\n // console.error('Error evaluating action expression:', templateExpression, error);\n }\n }\n}\n","import { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AXPWidgetColumnRendererComponent } from './widget-column-renderer';\nimport { AXPWidgetContainerComponent } from './widget-container.component';\nimport { AXPWidgetRendererDirective } from './widget-renderer.directive';\nimport type { AXPWidgetConfig, AXPExtendedWidget } from './widget.types';\n\nexport interface AXPWidgetCoreModuleConfigs {\n widgets?: AXPWidgetConfig[];\n AXPExtendedWidgets?: AXPExtendedWidget[];\n}\n\nconst COMPONENTS = [AXPWidgetContainerComponent, AXPWidgetColumnRendererComponent, AXPWidgetRendererDirective];\n\n@NgModule({\n imports: [CommonModule, PortalModule, AXSkeletonModule, AXTranslationModule],\n exports: [...COMPONENTS],\n declarations: [...COMPONENTS],\n providers: [],\n})\nexport class AXPWidgetCoreModule { }\n","import {\n AXPBorderBox,\n AXPBorderBoxString,\n AXPBreakpoints,\n AXPBreakpointValues,\n AXPPropertyCorners,\n AXPPropertySides,\n AXPSpacingBox,\n AXPSpacingBoxString,\n} from './property-editor.type';\n\nexport class AXPPropertyEditorHelper {\n private static expandShorthand<T extends string>(values: T[]): T[] {\n switch (values.length) {\n case 1:\n return [values[0], values[0], values[0], values[0]];\n case 2:\n return [values[0], values[1], values[0], values[1]];\n case 3:\n return [values[0], values[1], values[2], values[1]];\n case 4:\n return values;\n default:\n throw new Error(`Invalid shorthand value count. Input: ${values}`);\n }\n }\n\n private static condenseShorthand<T>(values: T[]): string {\n if (values.length !== 4) {\n throw new Error('Expected 4 values for condensation.');\n }\n\n if (values[0] === values[1] && values[1] === values[2] && values[2] === values[3]) {\n return `${values[0]}`;\n } else if (values[0] === values[2] && values[1] === values[3]) {\n return `${values[0]} ${values[1]}`;\n } else if (values[1] === values[3]) {\n return `${values[0]} ${values[1]} ${values[2]}`;\n } else {\n return `${values[0]} ${values[1]} ${values[2]} ${values[3]}`;\n }\n }\n\n private static parseSides(input: string): AXPPropertySides {\n const values = this.expandShorthand(input.match(/(?:rgb\\([^)]+\\)|[^ ]+)/g)?.map((value) => value.trim()) || []);\n return { top: values[0], right: values[1], bottom: values[2], left: values[3] };\n }\n\n private static parseSidesWithUnits(input: string): AXPPropertySides<number> {\n const values = this.expandShorthand(input.match(/(?:rgb\\([^)]+\\)|[^ ]+)/g)?.map((value) => value.trim()) || []);\n return {\n top: AXPPropertyEditorHelper.getValueWithUnit(values[0]).value,\n right: AXPPropertyEditorHelper.getValueWithUnit(values[1]).value,\n bottom: AXPPropertyEditorHelper.getValueWithUnit(values[2]).value,\n left: AXPPropertyEditorHelper.getValueWithUnit(values[3]).value,\n };\n }\n\n private static parseCorners(input: string): AXPPropertyCorners<number> {\n const values = this.expandShorthand(input.split(' ').map((value) => value.trim()));\n return {\n 'top-left': AXPPropertyEditorHelper.getValueWithUnit(values[0]).value,\n 'top-right': AXPPropertyEditorHelper.getValueWithUnit(values[1]).value,\n 'bottom-left': AXPPropertyEditorHelper.getValueWithUnit(values[2]).value,\n 'bottom-right': AXPPropertyEditorHelper.getValueWithUnit(values[3]).value,\n };\n }\n\n public static parseSpacingBox(input: AXPSpacingBoxString): AXPSpacingBox<number> {\n return {\n margin: this.parseSidesWithUnits(input.margin),\n padding: this.parseSidesWithUnits(input.padding),\n };\n }\n\n public static parseBorderBox(input: AXPBorderBoxString): AXPBorderBox<number | string> {\n return {\n width: this.parseSidesWithUnits(input.width),\n radius: this.parseCorners(input.radius),\n color: this.parseSides(input.color),\n style: this.parseSides(input.style),\n };\n }\n\n public static parseSpacingBoxReverse(\n input: AXPSpacingBox<number>,\n units: AXPSpacingBox<string>,\n ): AXPSpacingBoxString {\n const format = (value: number, unit: string) => `${value}${unit}`;\n return {\n margin: AXPPropertyEditorHelper.condenseShorthand([\n format(input.margin.top, units.margin.top),\n format(input.margin.right, units.margin.right),\n format(input.margin.bottom, units.margin.bottom),\n format(input.margin.left, units.margin.left),\n ]),\n padding: AXPPropertyEditorHelper.condenseShorthand([\n format(input.padding.top, units.padding.top),\n format(input.padding.right, units.padding.right),\n format(input.padding.bottom, units.padding.bottom),\n format(input.padding.left, units.padding.left),\n ]),\n };\n }\n\n public static parseBorderBoxReverse(\n input: AXPBorderBox<number | string>,\n units: AXPBorderBox<string>,\n ): AXPBorderBoxString {\n const format = (value: number | string, unit: string) => `${value}${unit}`;\n\n return {\n width: AXPPropertyEditorHelper.condenseShorthand([\n format(input.width.top, units.width.top),\n format(input.width.right, units.width.right),\n format(input.width.bottom, units.width.bottom),\n format(input.width.left, units.width.left),\n ]),\n radius: AXPPropertyEditorHelper.condenseShorthand([\n format(input.radius['top-left'], units.radius['top-left']),\n format(input.radius['top-right'], units.radius['top-right']),\n format(input.radius['bottom-right'], units.radius['bottom-right']),\n format(input.radius['bottom-left'], units.radius['bottom-left']),\n ]),\n color: AXPPropertyEditorHelper.condenseShorthand([\n `${input.color.top}${units.color.top}`,\n `${input.color.right}${units.color.right}`,\n `${input.color.bottom}${units.color.bottom}`,\n `${input.color.left}${units.color.left}`,\n ]),\n style: AXPPropertyEditorHelper.condenseShorthand([\n `${input.style.top}${units.style.top}`,\n `${input.style.right}${units.style.right}`,\n `${input.style.bottom}${units.style.bottom}`,\n `${input.style.left}${units.style.left}`,\n ]),\n };\n }\n\n public static getValueWithUnit(input: string | number): { value: number; unit: string } {\n if (typeof input === 'number') return { value: input, unit: 'px' };\n if (input === 'auto') return { value: 0, unit: 'px' };\n\n const match = input.match(/^([0-9.]+)([a-z%]*)$/i);\n if (!match) throw new Error(`Invalid unit format: ${input}`);\n\n return { value: parseFloat(match[1]), unit: match[2] || '' };\n }\n\n public static getValueFromUnit(value: number, unit: string): string {\n return unit ? `${value}${unit}` : `${value}`;\n }\n\n public static parseGap(gap: string): { values: Record<'x' | 'y', number>; unit: string } {\n const parts = gap.split(/\\s+/);\n const match = parts[0].match(/^(\\d+\\.?\\d*)([a-z%]+)$/);\n if (!match) {\n throw new Error('Invalid gap format');\n }\n\n const [, xValue, unit] = match;\n let yValue = parseFloat(xValue);\n if (parts.length === 2) {\n const secondMatch = parts[1].match(/^(\\d+\\.?\\d*)[a-z%]+$/);\n if (!secondMatch) {\n throw new Error('Invalid gap format');\n }\n yValue = parseFloat(secondMatch[1]);\n }\n\n return {\n values: {\n x: parseFloat(xValue),\n y: yValue,\n },\n unit,\n };\n }\n\n public static parseGridTemplate(gridTemplate: string): number {\n const match = gridTemplate.match(/^repeat\\((\\d+),\\s*(?:1fr|auto|minmax\\([^)]*\\))\\)$/);\n if (!match) {\n throw new Error(\"Invalid grid template format. Expected 'repeat(N, 1fr|auto|minmax(...))'.\");\n }\n return parseInt(match[1], 10);\n }\n\n public static createGridTemplate(repetitionCount: number): string {\n if (repetitionCount <= 0) {\n throw new Error('Repetition count must be a positive integer.');\n }\n return `repeat(${repetitionCount}, 1fr)`;\n }\n}\n\nexport function findNonEmptyBreakpoints<T>(values: AXPBreakpointValues<T>): AXPBreakpoints[] {\n const breakpoints: AXPBreakpoints[] = ['default', 'sm', 'md', 'lg', 'xl', '2xl', '3xl'];\n const nonEmptyBreakpoints: AXPBreakpoints[] = [];\n\n for (const breakpoint of breakpoints) {\n if (values[breakpoint] !== undefined) {\n nonEmptyBreakpoints.push(breakpoint);\n }\n }\n\n return nonEmptyBreakpoints;\n}\n","//#region ---- Imports ----\n\nimport { AXPWidgetNode } from '../widget.types';\nimport { cloneDeep } from 'lodash-es';\n\n//#endregion\n\n//#region ---- Helper Class ----\n\n/**\n * Helper class for serializing and deserializing AXPWidgetNode to/from JSON\n */\nexport class AXPWidgetSerializationHelper {\n /**\n * Removes non-serializable properties from widget node\n * @param node - The widget node to clean\n * @param options - Serialization options\n * @returns Cleaned widget node ready for JSON serialization\n */\n private static cleanNode(\n node: AXPWidgetNode,\n options: { removeMeta?: boolean; removeFunctions?: boolean } = {},\n ): AXPWidgetNode {\n const { removeMeta = true, removeFunctions = true } = options;\n\n // Deep clone to avoid mutating original\n const cleaned = cloneDeep(node);\n\n // Remove meta property if requested\n if (removeMeta && 'meta' in cleaned) {\n delete (cleaned as any).meta;\n }\n\n // Remove functions from options, triggers, and valueTransforms\n if (removeFunctions) {\n this.removeFunctions(cleaned);\n }\n\n // Recursively clean children\n if (cleaned.children && Array.isArray(cleaned.children)) {\n cleaned.children = cleaned.children.map((child) => this.cleanNode(child, options));\n }\n\n return cleaned;\n }\n\n /**\n * Recursively removes functions from object properties\n */\n private static removeFunctions(obj: any): void {\n if (obj === null || obj === undefined) {\n return;\n }\n\n if (Array.isArray(obj)) {\n obj.forEach((item) => this.removeFunctions(item));\n return;\n }\n\n if (typeof obj === 'object') {\n for (const key in obj) {\n if (typeof obj[key] === 'function') {\n delete obj[key];\n } else if (typeof obj[key] === 'object') {\n this.removeFunctions(obj[key]);\n }\n }\n }\n }\n\n /**\n * Converts AXPWidgetNode to JSON string\n * @param node - The widget node to serialize\n * @param options - Serialization options\n * @returns JSON string representation of the widget node\n */\n public static toJson(\n node: AXPWidgetNode,\n options: {\n removeMeta?: boolean;\n removeFunctions?: boolean;\n pretty?: boolean;\n } = {},\n ): string {\n const { pretty = false, ...cleanOptions } = options;\n const cleaned = this.cleanNode(node, cleanOptions);\n\n if (pretty) {\n return JSON.stringify(cleaned, null, 2);\n }\n\n return JSON.stringify(cleaned);\n }\n\n /**\n * Converts JSON string to AXPWidgetNode\n * @param json - JSON string to deserialize\n * @returns Parsed AXPWidgetNode object\n * @throws Error if JSON is invalid or doesn't match AXPWidgetNode structure\n */\n public static fromJson(json: string): AXPWidgetNode {\n try {\n const parsed = JSON.parse(json);\n\n // Basic validation - ensure it has at least a type property\n if (!parsed || typeof parsed !== 'object') {\n throw new Error('Invalid JSON: Expected an object');\n }\n\n if (!parsed.type) {\n throw new Error('Invalid AXPWidgetNode: Missing required property \"type\"');\n }\n\n // Recursively validate and parse children if they exist\n if (parsed.children && Array.isArray(parsed.children)) {\n parsed.children = parsed.children.map((child: any) => this.fromJson(JSON.stringify(child)));\n }\n\n return parsed as AXPWidgetNode;\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new Error(`Invalid JSON string: ${error.message}`);\n }\n throw error;\n }\n }\n\n /**\n * Removes meta property from widget node (similar to designer service)\n * @param node - The widget node to process\n * @returns Widget node without meta property\n */\n public static removeMeta(node: AXPWidgetNode): AXPWidgetNode {\n return this.cleanNode(node, { removeMeta: true, removeFunctions: false });\n }\n}\n\n//#endregion\n\n","import type { AXPMultiLanguageString } from '@acorex/platform/core';\n\nexport interface AXPWidgetCategory {\n name: string;\n title: AXPMultiLanguageString;\n order: number;\n}\n\n/** Normalizes widget categories to an array for iteration and serialization. */\nexport function normalizeWidgetCategories(\n categories?: AXPWidgetCategory | AXPWidgetCategory[],\n): AXPWidgetCategory[] {\n if (categories == null) {\n return [];\n }\n return Array.isArray(categories) ? categories : [categories];\n}\n\nexport const AXP_WIDGETS_LAYOUT_CATEGORY: AXPWidgetCategory = {\n name: 'layout',\n order: 1,\n title: 'Layout',\n};\n\nexport const AXP_WIDGETS_EDITOR_CATEGORY: AXPWidgetCategory = {\n name: 'editor',\n order: 2,\n title: 'Editors',\n};\n\nexport const AXP_WIDGETS_ACTION_CATEGORY: AXPWidgetCategory = {\n name: 'action',\n order: 3,\n title: 'Action',\n};\n\nexport const AXP_WIDGETS_ADVANCE_CATEGORY: AXPWidgetCategory = {\n name: 'advance',\n order: 4,\n title: 'Advance',\n};\n\n/** Widgets exposed to AI assistants for structured rendering (see Widgets:GetForAI). */\nexport const AXP_WIDGETS_AI_CATEGORY: AXPWidgetCategory = {\n name: 'ai',\n order: 5,\n title: 'AI',\n};\n\nexport const AXP_WIDGETS_CATEGORIES: AXPWidgetCategory[] = [\n AXP_WIDGETS_LAYOUT_CATEGORY,\n AXP_WIDGETS_EDITOR_CATEGORY,\n AXP_WIDGETS_ACTION_CATEGORY,\n AXP_WIDGETS_ADVANCE_CATEGORY,\n AXP_WIDGETS_AI_CATEGORY,\n];\n","export type AXPWidgetGroup =\n 'form-element' |\n 'dashboard-widget' |\n 'form-template' |\n 'property-editor' |\n 'meta-data' |\n 'setting-widget' |\n 'entity-widget' |\n 'utility-widget';\n\n\nexport enum AXPWidgetGroupEnum {\n FormElement = 'form-element',\n DashboardWidget = 'dashboard-widget',\n FormTemplate = 'form-template',\n PropertyEditor = 'property-editor',\n MetaData = 'meta-data',\n SettingWidget = 'setting-widget',\n EntityWidget = 'entity-widget',\n UtilityWidget = 'utility-widget',\n}","import { AXP_WIDGETS_AI_CATEGORY, normalizeWidgetCategories } from './widget-categories';\nimport type { AXPWidgetConfig } from './widget.types';\n\n//#region ---- Helpers ----\n\n/**\n * True when the widget declares the AI category (see {@link AXP_WIDGETS_AI_CATEGORY}).\n */\nexport function hasAiWidgetCategory(config: AXPWidgetConfig): boolean {\n return normalizeWidgetCategories(config.categories).some((c) => c.name === AXP_WIDGETS_AI_CATEGORY.name);\n}\n\n//#endregion\n\n//#region ---- Public API ----\n\n/**\n * Resolves AI catalog visibility using {@link AXPWidgetConfig.aiCatalog} and the AI widget category.\n * - `exclude`: never listed.\n * - `include`: always listed (override when the widget cannot declare the AI category yet).\n * - `inherit` / omitted: listed only if {@link hasAiWidgetCategory} is true.\n */\nexport function isWidgetAiCatalogIncluded(config: AXPWidgetConfig): boolean {\n const mode = config.aiCatalog ?? 'inherit';\n\n if (mode === 'exclude') {\n return false;\n }\n if (mode === 'include') {\n return true;\n }\n return hasAiWidgetCategory(config);\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-layout-widget-core.mjs","sources":["../../../../libs/platform/layout/widget-core/src/lib/widget-status.types.ts","../../../../libs/platform/layout/widget-core/src/lib/widget-core.service.ts","../../../../libs/platform/layout/widget-core/src/lib/widget-catalog.ts","../../../../libs/platform/layout/widget-core/src/lib/widget.types.ts","../../../../libs/platform/layout/widget-core/src/lib/widget-base.component.ts","../../../../libs/platform/layout/widget-core/src/lib/base-widget/box-model-widget.component.ts","../../../../libs/platform/layout/widget-core/src/lib/base-widget/block-base-widget.component.ts","../../../../libs/platform/layout/widget-core/src/lib/base-widget/flex-base-widget.component.ts","../../../../libs/platform/layout/widget-core/src/lib/base-widget/inline-base-widget.component.ts","../../../../libs/platform/layout/widget-core/src/lib/base-widget/flex-item-base-widget.component.ts","../../../../libs/platform/layout/widget-core/src/lib/base-widget/grid-base-widget.component.ts","../../../../libs/platform/layout/widget-core/src/lib/base-widget/grid-item-base-widget.component.ts","../../../../libs/platform/layout/widget-core/src/lib/base-widget/table-base-widget.component.ts","../../../../libs/platform/layout/widget-core/src/lib/base-widget/table-item-ops-base-widget.component.ts","../../../../libs/platform/layout/widget-core/src/lib/base-widget/table-item-base-widget.component.ts","../../../../libs/platform/layout/widget-core/src/lib/widget-definition.provider.ts","../../../../libs/platform/layout/widget-core/src/lib/widget-registery.service.ts","../../../../libs/platform/layout/widget-core/src/lib/widget-column-renderer.ts","../../../../libs/platform/layout/widget-core/src/lib/widget-container.component.ts","../../../../libs/platform/layout/widget-core/src/lib/widget-placeholder.component.ts","../../../../libs/platform/layout/widget-core/src/lib/widget-renderer.directive.ts","../../../../libs/platform/layout/widget-core/src/lib/widget-core.module.ts","../../../../libs/platform/layout/widget-core/src/lib/helper/property-editor.helper.ts","../../../../libs/platform/layout/widget-core/src/lib/helper/widget-serialization.helper.ts","../../../../libs/platform/layout/widget-core/src/lib/widget-categories.ts","../../../../libs/platform/layout/widget-core/src/lib/widget-group.types.ts","../../../../libs/platform/layout/widget-core/src/lib/map-axp-property-to-widget-property.ts","../../../../libs/platform/layout/widget-core/src/lib/widget-ai-catalog.filter.ts","../../../../libs/platform/layout/widget-core/src/acorex-platform-layout-widget-core.ts"],"sourcesContent":["export enum AXPPageStatus {\n // Idle statuses\n Idle = 'idle', // The page is idle.\n\n // Rendering statuses\n Rendering = 'rendering', // The page is being rendered.\n Rendered = 'rendered', // The rendering process is complete. should be renamed to idle\n\n // Processing statuses\n Processing = 'processing', // The page is performing a task or interaction.\n\n // Submission statuses\n Submitting = 'submitting', // The form is being submitted.\n Submitted = 'submitted', // Submission is completed.\n\n // Validation statuses\n Validating = 'validating', // The form is being validated.\n Validated = 'validated', // Validation is completed. \n\n // Error handling\n Error = 'error',\n}\n\nexport enum AXPWidgetStatus {\n // Rendering statuses\n Rendering = 'rendering', // The widget is being rendered.\n Rendered = 'rendered', // The rendering process is complete.\n\n // Processing statuses\n Processing = 'processing', // The widget is performing a task or interaction.\n\n // Error handling\n Error = 'error', // An error occurred during any phase.\n}\n","import { computed, Injectable, Signal, signal } from '@angular/core';\nimport { set } from 'lodash-es';\nimport { Subject } from 'rxjs';\nimport { AXPPageStatus, AXPWidgetStatus } from './widget-status.types';\n\nexport type AXPWidgetCoreElementAPI = { [name: string]: Subject<any> | Function };\n\nexport type AXPWidgetCoreElementAction = {\n title: string;\n command: string;\n icon?: string;\n color?: string;\n // Can be boolean or an expression string like '{{api.getStatus().isFirst}}'\n disabled?: boolean | string;\n hidden?: boolean | string;\n zone?: 'header' | 'footer';\n // Placement inside the zone for dialog rendering\n placement?: 'prefix' | 'suffix';\n scope?: 'primary' | 'secondary';\n};\nexport abstract class AXPWidgetCoreElement {\n abstract get id(): string | null;\n abstract get status(): Signal<AXPWidgetStatus>;\n\n api(): AXPWidgetCoreElementAPI {\n return {};\n }\n actions(): AXPWidgetCoreElementAction[] {\n return [];\n }\n}\n\n@Injectable()\nexport class AXPWidgetCoreService {\n private readonly variables$ = signal<any>({});\n private readonly functions$ = signal<{ [key: string]: Function }>({});\n\n public readonly onRefresh: Subject<void> = new Subject<void>();\n\n private widgets = new Map<string, AXPWidgetCoreElement>();\n private readonly onWidgetRegistered = new Subject<{ id: string; widget: AXPWidgetCoreElement }>();\n\n private readonly status$ = signal<AXPPageStatus>(AXPPageStatus.Rendering);\n public readonly status = this.status$.asReadonly();\n\n public readonly isBusy = computed(() => {\n return [AXPPageStatus.Processing, AXPPageStatus.Submitting, AXPPageStatus.Rendering].includes(this.status());\n });\n\n public registeredWidgetsCount = signal<number>(0);\n\n get variables() {\n return this.variables$();\n }\n\n get functions(): { [key: string]: Function } {\n return this.functions$();\n }\n\n public updateStatus() {\n this.status$.update(() => this.detectStatus());\n this.registeredWidgetsCount.set(this.widgets.size);\n }\n\n private detectStatus(): AXPPageStatus {\n const statuses = Array.from(this.widgets.values()).map((c) => c.status());\n\n // Rendering statuses\n if (statuses.some((status) => status === AXPWidgetStatus.Rendering)) {\n return AXPPageStatus.Rendering;\n }\n if (statuses.every((status) => status === AXPWidgetStatus.Rendered)) {\n return AXPPageStatus.Rendered;\n }\n\n // Processing statuses\n if (statuses.some((status) => status === AXPWidgetStatus.Processing)) {\n return AXPPageStatus.Processing;\n }\n\n // Error handling\n if (statuses.some((status) => status === AXPWidgetStatus.Error)) {\n return AXPPageStatus.Error;\n }\n\n return AXPPageStatus.Rendered; // Default to Loaded when all widgets are in a completed state\n }\n\n refresh() {\n setTimeout(() => {\n this.onRefresh.next();\n }, 0);\n }\n\n setStatus(status: AXPPageStatus) {\n this.status$.set(status);\n }\n\n setVariables(keysValues: any): void;\n setVariables(key: string, value: any): void;\n setVariables(...args: any[]): void {\n if (args.length == 0) return;\n else if (args.length == 1) this.variables$.set(args[0]);\n else if (args.length == 2) {\n this.variables$.update((v) => set(v, args[0], args[1]));\n }\n }\n\n setFunctions(keysValues: any): void;\n setFunctions(key: string, value: any): void;\n setFunctions(...args: any[]): void {\n if (args.length == 0) return;\n else if (args.length == 1) this.functions$.set(args[0]);\n else if (args.length == 2) {\n this.functions$.update((v) => set(v, args[0], args[1]));\n }\n }\n\n registerWidget(id: string, widget: AXPWidgetCoreElement) {\n this.widgets.set(id, widget);\n this.onWidgetRegistered.next({ id, widget });\n }\n\n getWidget(id: string): AXPWidgetCoreElement | undefined {\n return this.widgets.get(id);\n }\n\n /**\n * Waits until a widget with the given id is registered, then resolves with it.\n * If the widget is already registered, resolves immediately.\n * Optionally accepts a timeout (in ms) after which it resolves with undefined.\n */\n async waitForWidget(id: string, timeoutMs?: number): Promise<AXPWidgetCoreElement | undefined> {\n const existing = this.widgets.get(id);\n if (existing) {\n return existing;\n }\n\n return new Promise<AXPWidgetCoreElement | undefined>((resolve) => {\n let resolved = false;\n let timer: any = null;\n const sub = this.onWidgetRegistered.subscribe(({ id: registeredId, widget }) => {\n if (registeredId === id && !resolved) {\n resolved = true;\n sub.unsubscribe();\n if (timer) {\n clearTimeout(timer);\n }\n resolve(widget);\n }\n });\n\n if (timeoutMs != null && timeoutMs > 0) {\n timer = setTimeout(() => {\n if (!resolved) {\n resolved = true;\n sub.unsubscribe();\n resolve(undefined);\n }\n }, timeoutMs);\n }\n });\n }\n\n /**\n * Returns a list of registered widget ids (names).\n */\n listRegisteredWidgetNames(): string[] {\n return Array.from(this.widgets.keys());\n }\n\n ngOnDestroy(): void {}\n}\n","import { AXPWidgetTypesMap } from './widget-map';\n\n//\n// @deprecated\n// Prefer AXPWidgetsList from @acorex/modules/common; dashboard widget type ids live in dashboard-management RootConfig.widgets.\nconst AXPWidgetsCatalog: AXPWidgetTypesMap = {\n timeDuration: 'time-duration',\n timeDurationFilter: 'time-duration-filter',\n checkbox: 'checkbox-editor',\n color: 'color-editor',\n connectedLists: 'connected-lists-editor',\n list: 'list-editor',\n contact: 'contact-editor',\n dateTime: 'date-time-editor',\n largeText: 'large-text-editor',\n number: 'number-editor',\n numberUnit: 'number-unit-editor',\n password: 'password-editor',\n richText: 'rich-text-editor',\n select: 'select-editor',\n selectionList: 'selection-list-editor',\n text: 'text-editor',\n table: 'table-editor',\n toggle: 'toggle-editor',\n blockLayout: 'block-layout',\n pageLayout: 'page-layout',\n repeaterLayout: 'repeater-layout',\n textBlockLayout: 'text-block-layout',\n alertBoxLayout: 'alert-box-layout',\n fileUploader: 'file-uploader',\n fileTypeExtension: 'file-type-extension',\n map: 'map',\n imageMarker: 'image-marker',\n image: 'image',\n gallery: 'gallery',\n signature: 'signature',\n buttonAction: 'button-action',\n document: 'document-layout',\n lookup: 'lookup-editor',\n formField: 'form-field',\n qrcode: 'qrcode',\n schedulerPicker: 'scheduler-picker',\n advancedGrid: 'advanced-grid-layout',\n advancedGridItem: 'advanced-grid-item-layout',\n grid: 'grid-layout',\n gridItem: 'grid-item-layout',\n template: 'template',\n templateDesigner: 'template-designer',\n cronJob: 'cron-job',\n spacing: 'spacing',\n direction: 'direction',\n border: 'border',\n flexLayout: 'flex-layout',\n flexItem: 'flex-item-layout',\n tableLayout: 'table-layout',\n tableItem: 'table-item-layout',\n avatar: 'avatar',\n themePaletteChooser: 'theme-palette-chooser',\n themeModeChooser: 'theme-mode-chooser',\n menuOrientationChooser: 'menu-orientation-chooser',\n fontStyleChooser: 'font-style-chooser',\n fontSizeChooser: 'font-size-chooser',\n iconChooser: 'icon-chooser',\n icon: 'icon',\n themeColorChooser: 'theme-color-chooser',\n gridOptions: 'grid-options',\n gridItemOptions: 'grid-item-options',\n advancedGridOptions: 'advanced-grid-options',\n stringFilter: 'string-filter',\n numberFilter: 'number-filter',\n dateTimeFilter: 'datetime-filter',\n booleanFilter: 'boolean-filter',\n lookupFilter: 'lookup-filter',\n flexOptions: 'flex-options',\n flexItemOptions: 'flex-item-options',\n selectFilter: 'select-filter',\n requiredValidation: 'required-validation',\n regularExpressionValidation: 'regular-expression-validation',\n minLengthValidation: 'min-length-validation',\n maxLengthValidation: 'max-length-validation',\n lessThanValidation: 'less-than-validation',\n greaterThanValidation: 'greater-than-validation',\n betweenValidation: 'between-validation',\n equalValidation: 'equal-validation',\n callbackValidation: 'callback-validation',\n metaData: 'meta-data-editor',\n templateEditor: 'template-box-editor',\n templateContentEditor: 'template-content-editor',\n panel: 'panel',\n notification: 'notification',\n comment: 'comment',\n dataList: 'data-list',\n listToolbar: 'list-toolbar',\n entityList: 'entity-list',\n editorJs: 'editor-js-editor',\n documentUploader: 'document-uploader',\n stepWizard: 'step-wizard',\n progressBar: 'progress-bar-editor',\n rate: 'rate-picker-editor',\n documentFileTypeFilter: 'document-file-type-filter',\n entityDefinitionProvider: 'entity-definition-provider-editor',\n};\n\nexport { AXPWidgetsCatalog };\n","import {\n AXPDataType,\n AXPExpression,\n AXPMetaData,\n AXPMultiLanguageString,\n AXPOptionsData,\n AXPPartialNested,\n AXPValidationRules,\n AXPValueTransformerFunctions,\n AXPWidgetTriggers,\n} from '@acorex/platform/core';\nimport { InjectionToken } from '@angular/core';\nimport { cloneDeep, isNil, merge } from 'lodash-es';\nimport { AXPWidgetsCatalog } from './widget-catalog';\nimport { AXPWidgetCategory } from './widget-categories';\nimport { AXPWidgetGroup } from './widget-group.types';\nimport { AXPWidgetTypesMap } from './widget-map';\nimport { AXPPageStatus } from './widget-status.types';\n\n/** Inclusion mode for AI widget catalog queries (Widgets:GetForAI). */\nexport type AXPWidgetAiCatalogMode = 'include' | 'exclude' | 'inherit';\n\nexport interface AXPWidgetPropertyGroup {\n name: string;\n title: string;\n order: number;\n}\n\nexport interface AXPWidgetProperty {\n name: string;\n title: string;\n description?: string;\n group: AXPWidgetPropertyGroup;\n order?: number;\n /**\n * Controls whether the property title label is shown in the property viewer panel.\n * Defaults to true when omitted.\n */\n showLabel?: boolean;\n schema: {\n dataType: AXPDataType;\n nullable?: boolean;\n defaultValue?: any | string | ((context: any | null) => any);\n interface: Required<Pick<AXPWidgetNode, 'path'>> & Omit<AXPWidgetNode, 'path'>;\n };\n //options?: AXPOptionsData;\n validations?: AXPValidationRules;\n visible: boolean | AXPExpression;\n binding?: {\n enabled: boolean;\n /** When set, the expression is edited at path + '.' + optionKey (e.g. options.visibility). */\n optionKey?: string;\n };\n}\n\nexport function cloneProperty(\n property: AXPWidgetProperty,\n values: AXPPartialNested<AXPWidgetProperty>,\n): AXPWidgetProperty {\n return merge(cloneDeep(property), values);\n}\n\nexport function createStringProperty(ctor: {\n defaultValue?: string;\n name: string;\n title: string;\n path?: string;\n group: AXPWidgetPropertyGroup;\n visible?: boolean | AXPExpression;\n}): AXPWidgetProperty {\n return {\n name: ctor.name,\n title: ctor.title,\n group: ctor.group,\n schema: {\n dataType: 'string',\n defaultValue: ctor.defaultValue,\n interface: {\n name: ctor.name,\n path: ctor.path ?? ctor.name,\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: !isNil(ctor.visible) ? ctor.visible : true,\n };\n}\n\nexport function createNumberProperty(ctor: {\n defaultValue?: number;\n name: string;\n title: string;\n path?: string;\n group: AXPWidgetPropertyGroup;\n visible?: boolean | AXPExpression;\n options?: {\n minValue?: number;\n maxValue?: number;\n decimals?: number;\n };\n}): AXPWidgetProperty {\n return {\n name: ctor.name,\n title: ctor.title,\n group: ctor.group,\n schema: {\n dataType: 'number',\n defaultValue: ctor.defaultValue,\n interface: {\n name: ctor.name,\n path: ctor.path ?? ctor.name,\n type: AXPWidgetsCatalog.number,\n options: ctor.options,\n },\n },\n visible: !isNil(ctor.visible) ? ctor.visible : true,\n };\n}\n\nexport function createBooleanProperty(ctor: {\n defaultValue?: boolean;\n name: string;\n title: string;\n path?: string;\n group: AXPWidgetPropertyGroup;\n visible?: boolean | AXPExpression;\n}): AXPWidgetProperty {\n return {\n name: ctor.name,\n title: ctor.title,\n group: ctor.group,\n schema: {\n dataType: 'boolean',\n defaultValue: ctor.defaultValue ?? false,\n interface: {\n name: ctor.name,\n path: ctor.path ?? ctor.name,\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: !isNil(ctor.visible) ? ctor.visible : true,\n binding: {\n enabled: true,\n },\n };\n}\n\nexport function createSelectProperty<T = string | { id: string; title: string }>(ctor: {\n defaultValue: T | T[] | any;\n dataSource: T[];\n name: string;\n title: string;\n path?: string;\n group: AXPWidgetPropertyGroup;\n visible?: boolean | AXPExpression;\n}): AXPWidgetProperty {\n return {\n name: ctor.name,\n title: ctor.title,\n group: ctor.group,\n schema: {\n dataType: 'string',\n defaultValue: Array.isArray(ctor.defaultValue)\n ? ctor.defaultValue.map((item) => (typeof item === 'string' ? { id: item } : item))\n : typeof ctor.defaultValue === 'string'\n ? { id: ctor.defaultValue, title: ctor.defaultValue }\n : ctor.defaultValue,\n interface: {\n name: ctor.name,\n path: ctor.path ?? ctor.name,\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: ctor.dataSource.map((item) => (typeof item === 'string' ? { id: item, title: item } : item)),\n },\n },\n },\n visible: !isNil(ctor.visible) ? ctor.visible : true,\n };\n}\n\nexport interface AXPWidgetNode {\n type: AXPWidgetTypesMap[keyof AXPWidgetTypesMap] | keyof AXPWidgetTypesMap | string;\n mode?: AXPWidgetRenderMode;\n path?: string;\n name?: string;\n visible?: boolean | AXPExpression;\n defaultValue?: any;\n children?: AXPWidgetNode[];\n options?: AXPOptionsData;\n triggers?: AXPWidgetTriggers;\n meta?: AXPMetaData;\n valueTransforms?: AXPValueTransformerFunctions;\n}\n\nexport interface AXPWidgetNodeToken<TOptions extends AXPOptionsData = AXPOptionsData> {\n defaultValue?: any;\n config: AXPWidgetConfig;\n node: AXPWidgetNode;\n options?: TOptions;\n}\n\nexport interface AXPWidgetColumnNode {\n type: string;\n path: string;\n options?: AXPOptionsData;\n}\n\nexport interface AXPWidgetColumnNodeToken extends AXPWidgetColumnNode {\n config: AXPWidgetConfig;\n}\n\nexport const AXP_WIDGET_TOKEN = new InjectionToken<AXPWidgetNodeToken>('AXP_WIDGET_TOKEN');\nexport const AXP_WIDGET_COLUMN_TOKEN = new InjectionToken<AXPWidgetColumnNodeToken>('AXP_WIDGET_COLUMN_TOKEN');\n\nexport interface AXPWidgetComponentConfig {\n component: () => Promise<any>;\n properties?: AXPWidgetProperty[];\n}\n\nexport interface AXPWidgetConfigComponents {\n designer?: AXPWidgetComponentConfig;\n view?: AXPWidgetComponentConfig;\n edit?: AXPWidgetComponentConfig;\n print?: AXPWidgetComponentConfig;\n column?: AXPWidgetComponentConfig;\n filter?: AXPWidgetComponentConfig;\n}\n\nexport type AXPWidgetViewType = 'container' | 'editor' | 'action' | 'view' | 'filter' | 'validation' | 'dashboard';\n\nexport type AXPWidgetDesignerOptionsMap = {\n container: { canInsert: boolean };\n editor: {\n needLabel: boolean;\n };\n action: {};\n view: {};\n};\n\nexport type AXPExtractWidgetConfig<T> = {\n type: AXPWidgetViewType;\n designer: T extends { type: infer V }\n ? V extends keyof AXPWidgetDesignerOptionsMap\n ? AXPWidgetDesignerOptionsMap[V]\n : any\n : any;\n};\n\nexport interface AXPWidgetConfig<T = any> {\n name: AXPWidgetTypesMap[keyof AXPWidgetTypesMap] | keyof AXPWidgetTypesMap | string;\n alias?: string | string[];\n title: AXPMultiLanguageString;\n icon?: string;\n description?: AXPMultiLanguageString;\n /**\n * Optional guidance for AI assistants (Widgets:GetForAI). Explains when and how to use this widget\n * for structured output; unrelated to end-user UI copy.\n */\n aiDescription?: string | null;\n categories?: AXPWidgetCategory | AXPWidgetCategory[];\n groups?: AXPWidgetGroup[];\n properties?: AXPWidgetProperty[];\n components: AXPWidgetConfigComponents;\n meta?: AXPMetaData;\n type: AXPExtractWidgetConfig<T>['type'];\n designer?: AXPExtractWidgetConfig<T>['designer'];\n options?: Record<string, any>;\n defaultFilterWidgetName?:\n | 'string-filter'\n | 'number-filter'\n | 'datetime-filter'\n | 'boolean-filter'\n | 'select-filter'\n | 'lookup-filter'\n | 'time-duration-filter'\n | string;\n /**\n * Optional layout for Change History. When set, this AXPWidgetNode is rendered for\n * changes of this widget type instead of the default fieldKey/actionKey text.\n * Context passed to renderer: the AXPActivityLogChange object.\n * If omitted, the default display is used.\n */\n historyLayout?: AXPWidgetNode;\n /**\n * Controls inclusion in AI-facing widget catalog queries (e.g. Widgets:GetForAI).\n * `inherit` (default): include only when `categories` contains the AI category (`AXP_WIDGETS_AI_CATEGORY`).\n * `include` / `exclude`: force include or exclude regardless of categories.\n */\n aiCatalog?: AXPWidgetAiCatalogMode;\n}\nexport interface AXPExtendedWidget {\n widget: AXPWidgetConfig;\n parentName: string;\n}\n\nexport type AXPWidgetRenderMode = keyof AXPWidgetConfigComponents;\n\nexport interface AXPLayoutBuilderStatusChangedEvent {\n status: AXPPageStatus;\n}\n","import { AXDataSource, AXValueChangedEvent, convertArrayToDataSource } from '@acorex/cdk/common';\nimport {\n AXPDataSourceDefinitionProviderService,\n AXPOptionsData,\n AXPValidationRule,\n AXPValidationRules,\n extractValue,\n} from '@acorex/platform/core';\nimport {\n ComponentRef,\n computed,\n effect,\n ElementRef,\n inject,\n Injectable,\n OnInit,\n signal,\n untracked,\n} from '@angular/core';\nimport { cloneDeep, get, isEqual, isNil, isObjectLike, isUndefined } from 'lodash-es';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { AXPContextStore } from '@acorex/platform/core';\nimport { AXPWidgetCoreElement, AXPWidgetCoreService } from './widget-core.service';\nimport { AXPWidgetStatus } from './widget-status.types';\nimport {\n AXP_WIDGET_COLUMN_TOKEN,\n AXP_WIDGET_TOKEN,\n AXPWidgetNode,\n AXPWidgetNodeToken,\n AXPWidgetRenderMode,\n} from './widget.types';\n\nexport type AXPClassMap = Readonly<Record<string, boolean>>;\nexport type AXPStyleMap = Readonly<Record<string, string | number>>;\n\n@Injectable()\nexport abstract class AXPBaseWidgetComponent<\n TOptions extends Record<string, unknown> = AXPOptionsData,\n> extends AXPWidgetCoreElement {\n protected readonly token: AXPWidgetNodeToken<TOptions> = inject(AXP_WIDGET_TOKEN) as AXPWidgetNodeToken<TOptions>;\n public readonly host = inject(ElementRef).nativeElement as HTMLDivElement;\n\n protected readonly layoutService = inject(AXPWidgetCoreService);\n protected readonly contextService = inject(AXPContextStore);\n\n public readonly config = this.token.config;\n public readonly node = this.token.node;\n\n protected readonly name = this.token.node.name;\n\n protected component = this;\n\n protected _id: string | null;\n public get id(): string | null {\n return this._id;\n }\n\n protected _options = signal<TOptions>(this.token.options ?? ({} as TOptions));\n public options = this._options.asReadonly();\n\n public onOptionsChanged = new Subject<{ sender: AXPBaseWidgetComponent }>();\n\n private _status = signal<AXPWidgetStatus>(AXPWidgetStatus.Rendering);\n public status = this._status.asReadonly();\n\n public readonly onStatusChanged = new BehaviorSubject<AXPWidgetStatus>(this._status());\n\n #statusEffect = effect(() => {\n this.onStatusChanged.next(this.status());\n });\n\n public isBusy = computed(() => [AXPWidgetStatus.Rendering, AXPWidgetStatus.Processing].includes(this.status()));\n\n parent: AXPLayoutBaseWidgetComponent<any> | null | undefined;\n parentComponent: ComponentRef<any> | null | undefined;\n\n parentElement: HTMLElement | null | undefined;\n index: number | null | undefined;\n mode: AXPWidgetRenderMode;\n locked: boolean;\n\n protected outputs(): (string | { [name: string]: unknown })[] {\n return [];\n }\n\n ngOnInit(): void {\n if (get(this.node, '__meta__.added')) {\n this.onAdded();\n }\n this.setStatus(AXPWidgetStatus.Rendered);\n }\n\n public setStatus(status: AXPWidgetStatus) {\n this._status.set(status);\n this.layoutService.updateStatus();\n }\n\n public setOptions(values: Partial<TOptions>): void {\n const oldValue = this.options();\n const value = cloneDeep(values);\n this._options.set({ ...oldValue, ...value } as TOptions);\n this.onOptionsChanged.next({ sender: this });\n }\n\n output<T = any>(name: string): T {\n const outputs = this.outputs().map((c) => (typeof c == 'string' ? { name: c, value: c } : c)) as {\n name: string;\n value: unknown;\n }[];\n\n if (outputs.some((c) => c.name == name)) {\n const opt = get(this, name);\n if (typeof opt == 'function') {\n return opt();\n }\n return opt;\n }\n return null as T;\n }\n\n call(name: string, ...args: any[]): void {\n const fn = get(this, name) as Function;\n if (fn && typeof fn == 'function') {\n fn.bind(this)(...args);\n }\n }\n\n protected readonly _children = signal(this.token.node.children ?? []);\n protected children = this._children.asReadonly();\n\n setChildren(children: AXPWidgetNode[]) {\n this._children.set([...children]);\n }\n\n onAdded() { }\n\n hostClass?(): AXPClassMap;\n hostStyle?(): AXPStyleMap;\n}\n\n@Injectable()\nexport abstract class AXPLayoutBaseWidgetComponent<\n TOptions extends AXPOptionsData = AXPOptionsData,\n> extends AXPBaseWidgetComponent<TOptions> {\n //TODO change this approach\n override ngOnInit(): void {\n if (this.name && !(this instanceof AXPValueWidgetComponent)) {\n this.layoutService.registerWidget(this.name, this);\n }\n\n super.ngOnInit();\n }\n}\n\n@Injectable()\nexport abstract class AXPValueWidgetComponent<T = any | null, TOptions extends AXPOptionsData = AXPOptionsData>\n extends AXPLayoutBaseWidgetComponent<TOptions>\n implements OnInit {\n protected readonly path = this.token.node.path;\n protected readonly defaultValue = this.token.defaultValue ?? this.token.node.defaultValue;\n\n private _isValueWidget = false;\n private isValueWidget = () => this._isValueWidget;\n\n public onValueChanged = new Subject<{ sender: AXPBaseWidgetComponent }>();\n\n public fullPath = signal<string | null>(null);\n public parentPath = signal<string | null>(null);\n\n override ngOnInit() {\n this._isValueWidget = this.config.properties?.some((c) => c.name == 'path') ?? false;\n if (this.isValueWidget()) {\n this.detectFullPath();\n // Set defaultValue if it exists and the path doesn't exist in context\n if (!isNil(this.defaultValue) && this.fullPath() && !this.contextService.hasValue(this.fullPath()!)) {\n this.setValue(this.defaultValue);\n }\n }\n //\n super.ngOnInit();\n }\n\n public getValue = computed<T>(\n () => {\n return this.fullPath() ? this.extractValue(this.fullPath()!) : null;\n },\n { equal: isEqual },\n );\n\n protected validationRules = computed<AXPValidationRules>(() => {\n const validationsRaw = this.options()['validations'];\n if (validationsRaw == null) {\n return [];\n }\n return Object.values(this.options()['validations'])\n .filter((c) => c != null)\n .map(\n (c: any) =>\n ({\n rule: c.rule,\n message: c.message,\n options: c.options,\n }) as AXPValidationRule,\n );\n });\n\n protected extractValue(path: string): any {\n const rawValue = this.contextService.getValue(path);\n if (this.node.valueTransforms?.getter) {\n return this.node.valueTransforms?.getter(rawValue);\n }\n return rawValue;\n }\n\n setValue(value: T | null | undefined) {\n if (this.node.valueTransforms?.setter) {\n value = this.node.valueTransforms?.setter(value);\n }\n const oldValue = this.getValue();\n value = isUndefined(value) ? null : value;\n if (isNil(value) && isNil(oldValue)) {\n return;\n }\n\n // Reordered arrays must persist even when items are deep-equal (e.g. empty row objects).\n const isArrayReorder =\n Array.isArray(oldValue) &&\n Array.isArray(value) &&\n oldValue.length === value.length &&\n oldValue.some((v, i) => v !== value[i]);\n\n if (!isArrayReorder && isEqual(oldValue, value)) {\n return;\n }\n if (this.fullPath()) {\n this.contextService.update(this.fullPath()!, value);\n this.onValueChanged.next({ sender: this });\n }\n }\n\n protected detectFullPath() {\n const sections = [];\n const ids = [];\n //\n let parent: AXPLayoutBaseWidgetComponent<any> | null | undefined = this as AXPLayoutBaseWidgetComponent<any>;\n //\n while (parent) {\n const isValueWidget = parent instanceof AXPValueWidgetComponent && parent.isValueWidget();\n const valueParent = parent as AXPValueWidgetComponent<any, any>;\n const path = valueParent.path ?? (isValueWidget ? valueParent.name : null);\n const id = valueParent.name;\n //\n if (path) {\n sections.push(path);\n }\n if (parent.index != null && isValueWidget) {\n sections.push(`[${parent.index}]`);\n }\n if (id) {\n ids.push(id);\n if (parent.index != null) {\n ids.push(`${parent.index}`);\n }\n }\n parent = parent.parent;\n }\n //\n this.fullPath.set(sections.reverse().join('.'));\n this.parentPath.set(sections.slice(0, sections.length - 1).join('.'));\n this._id = this.name || this.parent ? ids.reverse().join('_') : null;\n if (this._id) {\n this.layoutService.registerWidget(this._id, this);\n }\n }\n\n protected handleValueChanged(e: AXValueChangedEvent<T>) {\n if (e.isUserInteraction) {\n this.setValue(e.value);\n }\n }\n}\n\n@Injectable()\nexport abstract class AXPDataListWidgetComponent extends AXPValueWidgetComponent<any> {\n private dataService = inject(AXPDataSourceDefinitionProviderService);\n\n protected textField = computed<string>(() => this.options()['textField'] ?? 'title');\n protected valueField = computed<string>(() => (this.options()['valueField'] as string) ?? 'id');\n protected textTemplate = computed<string | undefined>(() =>\n isNil(this.options()['textTemplate'])\n ? undefined\n : (this.options()['textTemplate'] as string).replace(/{/g, '{{').replace(/}/g, '}}'),\n );\n\n protected dataSource = signal<AXDataSource<any>>(convertArrayToDataSource<any>([]));\n\n public selectedItems = signal<any[]>([]);\n\n //#region ---- DataSource Loading Effect ----\n\n /**\n * Track the last loaded string dataSource reference to prevent infinite loops\n * Only used for string-based datasources (not arrays or AXDataSource instances)\n */\n private lastStringDataSourceRef: string | null = null;\n\n private rf = effect(async () => {\n const rawValue = this.options()['dataSource'];\n\n // For string datasources: prevent infinite loop by checking reference\n if (typeof rawValue === 'string') {\n if (rawValue === this.lastStringDataSourceRef) {\n return;\n }\n this.lastStringDataSourceRef = rawValue;\n } else {\n // Reset string reference when dataSource changes to non-string\n this.lastStringDataSourceRef = null;\n }\n\n // Process dataSource creation in untracked context\n await untracked(async () => {\n if (rawValue instanceof AXDataSource) {\n // For AXDataSource instances, check if config changed\n if (!isEqual(rawValue.config, this.dataSource().config)) {\n this.dataSource.set(rawValue);\n }\n }\n // static array datasource - always recreate when options change\n else if (Array.isArray(rawValue)) {\n const ds = new AXDataSource({\n key: this.valueField(),\n pageSize: 10,\n load: async (e: any) => {\n const raw = this.options()['dataSource'];\n const skip = e.skip ?? 0;\n const take = e.take ?? raw.length;\n return {\n items: raw.slice(skip, skip + take),\n total: raw.length,\n };\n },\n byKey: (key: unknown) => {\n const raw = this.options()['dataSource'];\n const item = raw.filter((c: any) => c[this.valueField()] == key);\n return Promise.resolve(item[0]) as any;\n },\n });\n this.dataSource.set(ds);\n }\n // resolve data source by name (string or object with id)\n else if (rawValue && (typeof rawValue == 'string' || typeof rawValue == 'object')) {\n const id = typeof rawValue == 'object' ? rawValue['id'] : rawValue;\n const c = await this.dataService.get(id);\n if (this.mode == 'designer' && c?.samples?.length) {\n this.dataSource.set(\n convertArrayToDataSource(c.samples, {\n key: this.valueField(),\n pageSize: 500,\n }),\n );\n } else {\n const ds = c?.source();\n if (ds && ds instanceof Promise) {\n const d = await ds;\n this.dataSource.set(d);\n } else if (ds) {\n this.dataSource.set(ds);\n }\n // empty datasource\n else {\n this.dataSource.set(convertArrayToDataSource<any>([]));\n }\n }\n }\n // empty datasource\n else {\n this.dataSource.set(convertArrayToDataSource<any>([]));\n }\n });\n });\n\n //#endregion\n\n protected async extractItem(item: unknown): Promise<any> {\n if (isNil(item)) {\n return null;\n }\n if (isObjectLike(item) && get(item, this.textField()) != null) {\n return item;\n }\n const key = extractValue(item, this.valueField());\n const ds = this.dataSource();\n if (ds.config?.byKey) {\n const found = await ds.config?.byKey(key);\n if (found) {\n return found;\n }\n }\n return isObjectLike(item)\n ? item\n : {\n [this.valueField()]: item,\n [this.textField()]: item,\n };\n }\n\n private effect2 = effect(async () => {\n const value = this.getValue();\n const items: any[] = [];\n if (Array.isArray(value)) {\n items.push(...(await Promise.all(value.map((item: any) => this.extractItem(item)))));\n } else {\n items.push(await this.extractItem(value));\n }\n this.selectedItems.set(items.filter((c) => c != null));\n });\n}\n\n@Injectable()\nexport abstract class AXPColumnWidgetComponent<T = any | null | void> {\n private readonly token = inject(AXP_WIDGET_COLUMN_TOKEN);\n\n protected readonly path = this.token.path;\n protected readonly options = this.token.options ?? {};\n protected readonly rawValue: T = null as T;\n protected readonly rowData: any;\n protected readonly nullText: any = this.options['nullText'] as string;\n protected readonly nullValue: T = this.options['nullValue'] as T;\n\n protected value = () => {\n if (isNil(this.rawValue) && !isNil(this.nullValue)) {\n return this.nullValue;\n }\n return this.rawValue;\n };\n}\n","import { computed, Injectable } from '@angular/core';\nimport { AXPBorderBoxString, AXPSpacingBoxString } from '../helper';\nimport { AXPClassMap, AXPLayoutBaseWidgetComponent, AXPStyleMap } from '../widget-base.component';\n\n@Injectable()\nexport abstract class AXPBoxModelLayoutWidgetComponent extends AXPLayoutBaseWidgetComponent {\n public hostBoxStyle = computed<AXPStyleMap>(() => {\n const options = this.options();\n\n const style: Record<string, string | number> = {};\n\n const spacing = options?.['spacing'] as AXPSpacingBoxString | undefined;\n const border = options?.['border'] as AXPBorderBoxString | undefined;\n\n const backgroundColor = options?.['backgroundColor'] as string | undefined;\n const direction = options?.['direction'] as string | undefined;\n\n const overflow = options?.['overflow'] as string | undefined;\n const overflowX = options?.['overflowX'] as string | undefined;\n const overflowY = options?.['overflowY'] as string | undefined;\n\n style['background-color'] = backgroundColor ?? '';\n style['padding'] = spacing?.padding ?? '';\n style['margin'] = spacing?.margin ?? '';\n\n style['border-radius'] = border?.radius ?? '';\n style['border-width'] = border?.width ?? '';\n style['border-color'] = border?.color ?? '';\n style['border-style'] = border?.style ?? '';\n\n style['overflow'] = overflow ?? '';\n style['overflow-x'] = overflowX ?? '';\n style['overflow-y'] = overflowY ?? '';\n\n style['direction'] = direction ?? '';\n\n return style;\n });\n\n protected blockStyle = computed<AXPStyleMap>(() => {\n const options = this.options();\n\n const style: Record<string, string | number> = { ...this.hostBoxStyle() };\n\n const width = options?.['width'] as string | undefined;\n const minWidth = options?.['minWidth'] as string | undefined;\n const maxWidth = options?.['maxWidth'] as string | undefined;\n\n const height = options?.['height'] as string | undefined;\n const minHeight = options?.['minHeight'] as string | undefined;\n const maxHeight = options?.['maxHeight'] as string | undefined;\n\n style['min-width'] = minWidth ?? '';\n style['width'] = width ?? '';\n style['max-width'] = maxWidth ?? '';\n\n style['min-height'] = minHeight ?? '';\n style['height'] = height ?? '';\n style['max-height'] = maxHeight ?? '';\n\n return style;\n });\n\n protected inlineStyle = computed<AXPStyleMap>(() => {\n return { ...this.hostBoxStyle() };\n });\n\n protected blockClass = computed<AXPClassMap>(() => {\n return {\n 'ax-block': true,\n 'ax-w-full': true,\n // 'ax-widget-outline': true,\n };\n });\n\n protected inlineClass = computed<AXPClassMap>(() => {\n return {\n 'ax-inline-block': true,\n };\n });\n}\n","import { Injectable, computed } from '@angular/core';\nimport { AXPBoxModelLayoutWidgetComponent } from './box-model-widget.component';\n\n@Injectable()\nexport abstract class AXPBlockBaseLayoutWidgetComponent extends AXPBoxModelLayoutWidgetComponent {\n public override hostClass = computed(() => this.blockClass());\n public override hostStyle = computed(() => this.blockStyle());\n}\n","import { Injectable, computed } from '@angular/core';\nimport { isNil } from 'lodash-es';\nimport { AXPFlexBoxString } from '../helper';\nimport { AXPBlockBaseLayoutWidgetComponent } from './block-base-widget.component';\n\n@Injectable()\nexport abstract class AXPFlexBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent {\n protected flex = computed(() => this.options() as AXPFlexBoxString | undefined);\n\n public hostFlexStyle = computed(() => {\n const blockStyle = this.blockStyle();\n const style: Record<string, string | number> = { ...blockStyle };\n const flex = this.flex();\n if (isNil(flex?.flexDirection)) {\n style['flex-direction'] = '';\n } else {\n style['flex-direction'] = flex.flexDirection;\n }\n if (isNil(flex?.flexWrap)) {\n style['flex-wrap'] = '';\n } else {\n style['flex-wrap'] = flex.flexWrap;\n }\n //TODO NEED TO FIX LATER\n style['overflow'] = flex?.flexWrap === 'nowrap' ? 'auto' : '';\n //END\n if (isNil(flex?.justifyContent)) {\n style['justify-content'] = '';\n } else {\n style['justify-content'] = flex.justifyContent;\n }\n if (isNil(flex?.alignItems)) {\n style['align-items'] = '';\n } else {\n style['align-items'] = flex.alignItems;\n }\n if (isNil(flex?.gap)) {\n style['gap'] = '';\n } else {\n style['gap'] = flex.gap;\n }\n return style;\n });\n\n public hostFlexClass = computed<Record<string, boolean>>(() => {\n return {\n ...this.blockClass(),\n 'ax-flex': true,\n 'ax-h-full': true,\n };\n });\n\n public override hostClass = computed(() => {\n return this.hostFlexClass();\n });\n\n public override hostStyle = computed(() => {\n return this.hostFlexStyle();\n });\n}\n","import { computed, Injectable } from '@angular/core';\nimport { AXPBoxModelLayoutWidgetComponent } from './box-model-widget.component';\n\n@Injectable()\nexport abstract class AXPInlineBaseLayoutWidgetComponent extends AXPBoxModelLayoutWidgetComponent {\n public override hostClass = computed(() => this.inlineClass());\n public override hostStyle = computed(() => this.inlineStyle());\n}\n","import { Injectable, computed } from '@angular/core';\nimport { isNil } from 'lodash-es';\nimport { AXPFlexItemBoxString } from '../helper';\nimport { AXPInlineBaseLayoutWidgetComponent } from './inline-base-widget.component';\n\n@Injectable()\nexport abstract class AXPFlexItemBaseLayoutWidgetComponent extends AXPInlineBaseLayoutWidgetComponent {\n protected flexItem = computed(() => this.options() as AXPFlexItemBoxString | undefined);\n\n public hostFlexItemStyle = computed(() => {\n const inlineStyle = this.blockStyle();\n const style: Record<string, string | number> = { ...inlineStyle };\n const fi = this.flexItem();\n if (isNil(fi?.order)) {\n style['order'] = '';\n } else {\n style['order'] = fi.order;\n }\n if (isNil(fi?.grow)) {\n style['flex-grow'] = '';\n } else {\n style['flex-grow'] = fi.grow;\n }\n if (isNil(fi?.shrink)) {\n style['flex-shrink'] = '';\n } else {\n style['flex-shrink'] = fi.shrink;\n }\n if (isNil(fi?.basis)) {\n style['flex-basis'] = '';\n } else {\n style['flex-basis'] = fi.basis;\n }\n if (isNil(fi?.alignSelf)) {\n style['align-self'] = '';\n } else {\n style['align-self'] = fi.alignSelf;\n }\n return style;\n });\n\n public hostFlexItemClass = computed(() => {\n return {\n ...this.blockClass(),\n };\n });\n\n public override hostClass = computed(() => {\n return this.hostFlexItemClass();\n });\n\n public override hostStyle = computed(() => {\n return this.hostFlexItemStyle();\n });\n}\n","import { Injectable, computed } from '@angular/core';\nimport { AXPGridBreakpointValues } from '../helper';\nimport { AXPBlockBaseLayoutWidgetComponent } from './block-base-widget.component';\n\n@Injectable()\nexport abstract class AXPGridBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent {\n private grid = computed(() => this.options()?.['grid'] as AXPGridBreakpointValues | undefined);\n\n public hostGridStyle = computed(() => {\n const style: Record<string, string | number> = { ...this.inlineStyle() };\n const g = this.grid()?.default;\n\n if (g?.gap) style['gap'] = g.gap;\n\n return style;\n });\n\n public hostGridClass = computed(() => {\n const cls: Record<string, boolean> = {\n ...this.inlineClass(),\n 'ax-grid': true,\n };\n\n const g = this.grid()?.default;\n\n if (g?.columns) cls[`lg:ax-grid-cols-${g.columns}`] = true;\n // if (g?.rows) cls[`lg:ax-grid-rows-${g.rows}`] = true;\n if (g?.justifyItems) cls[`lg:ax-justify-items-${g.justifyItems}`] = true;\n if (g?.alignItems) cls[`lg:ax-align-items-${g.alignItems}`] = true;\n if (g?.autoFlow) cls[`lg:ax-grid-flow-${g.autoFlow}`] = true;\n\n return cls;\n });\n\n public override hostClass = computed(() => this.hostGridClass());\n public override hostStyle = computed(() => this.hostGridStyle());\n}\n","import { Injectable, computed } from '@angular/core';\nimport { AXPGridItemBoxString } from '../helper/property-editor.type';\nimport { AXPFlexBaseLayoutWidgetComponent } from './flex-base-widget.component';\n\n@Injectable()\nexport abstract class AXPGridItemBaseLayoutWidgetComponent extends AXPFlexBaseLayoutWidgetComponent {\n private gridItem = computed(() => this.options() as AXPGridItemBoxString | undefined);\n\n public hostGridItemStyle = computed(() => {\n const style: Record<string, string | number> = { ...this.hostFlexStyle() };\n const g = this.gridItem();\n\n if (g?.alignSelf) style['align-self'] = g.alignSelf;\n if (g?.justifySelf) style['justify-self'] = g.justifySelf;\n\n return style;\n });\n\n public hostGridItemClass = computed(() => {\n const cls: Record<string, boolean> = { ...this.hostFlexClass() };\n const g = this.gridItem();\n\n // Mobile-first: full width on small screens so items stack vertically and don't overflow\n cls['ax-col-span-12'] = true;\n // Large screens: apply defined placement so multi-column layout works on desktop\n if (g?.colSpan) cls[`lg:ax-col-span-${g.colSpan}`] = true;\n if (g?.colStart) cls[`lg:ax-col-start-${g.colStart}`] = true;\n if (g?.colEnd) cls[`lg:ax-col-end-${g.colEnd}`] = true;\n\n if (g?.rowSpan) cls[`lg:ax-row-span-${g.rowSpan}`] = true;\n if (g?.rowStart) cls[`lg:ax-row-start-${g.rowStart}`] = true;\n if (g?.rowEnd) cls[`lg:ax-row-end-${g.rowEnd}`] = true;\n\n return cls;\n });\n\n public override hostClass = computed(() => this.hostGridItemClass());\n public override hostStyle = computed(() => this.hostGridItemStyle());\n}\n","import { Injectable, computed } from '@angular/core';\nimport { AXPBlockBaseLayoutWidgetComponent } from './block-base-widget.component';\n\n@Injectable()\nexport abstract class AXPTableBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent {\n public hostTableClass = computed(() => ({\n ...this.blockClass(),\n }));\n\n public hostTableStyle = computed(() => {\n const style: Record<string, string | number> = { ...this.blockStyle() };\n style['overflow-x'] = 'auto';\n return style;\n });\n\n public override hostClass = computed(() => this.hostTableClass());\n public override hostStyle = computed(() => this.hostTableStyle());\n}\n","import { Injectable } from '@angular/core';\nimport { AXPBlockBaseLayoutWidgetComponent } from './block-base-widget.component';\n\n@Injectable()\nexport abstract class AXPTableItemOpsBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent {\n // Columns (relative to current cell)\n abstract insertColumnLeft(): void;\n abstract insertColumnRight(): void;\n\n // Rows relative to current cell\n abstract insertRowAbove(): void;\n abstract insertRowBelow(): void;\n\n // Cell-level insert operations (relative to current cell)\n abstract insertCellShiftRight(): void; // insert to the left of target, shift right, increase columns\n abstract insertCellShiftDown(): void; // insert above target row, shift down, increase rows\n}\n","import { Injectable, computed } from '@angular/core';\nimport { AXPTableItemOpsBaseLayoutWidgetComponent } from './table-item-ops-base-widget.component';\n\n@Injectable()\nexport abstract class AXPTableItemBaseLayoutWidgetComponent extends AXPTableItemOpsBaseLayoutWidgetComponent {\n protected colSpan = computed<number>(() => {\n const v = (this.options() as any)?.colSpan as number | undefined;\n return v ? Math.max(1, v) : 1;\n });\n protected rowSpan = computed<number>(() => {\n const v = (this.options() as any)?.rowSpan as number | undefined;\n return v ? Math.max(1, v) : 1;\n });\n\n public override hostClass = computed(() => this.blockClass());\n public override hostStyle = computed(() => this.blockStyle());\n}\n","//#region ---- Imports ----\n\nimport { InjectionToken } from '@angular/core';\nimport type { AXPWidgetConfig, AXPExtendedWidget } from './widget.types';\n\n//#endregion\n\n//#region ---- Token & Interface ----\n\n/**\n * Provider interface for widget definitions.\n * Implement this interface and register via AXP_WIDGET_DEFINITION_PROVIDER to contribute widgets.\n */\nexport interface AXPWidgetDefinitionProvider {\n getWidgets(): AXPWidgetConfig[];\n getExtendedWidgets?(): AXPExtendedWidget[];\n}\n\n/**\n * Injection token for widget definition providers.\n * Modules register their widget providers using this token (multi: true).\n */\nexport const AXP_WIDGET_DEFINITION_PROVIDER = new InjectionToken<AXPWidgetDefinitionProvider[]>(\n 'AXP_WIDGET_DEFINITION_PROVIDER',\n {\n factory: () => [],\n }\n);\n\n//#endregion\n","import { inject, Injectable } from '@angular/core';\nimport { merge } from 'lodash-es';\nimport type { AXPWidgetConfig, AXPExtendedWidget } from './widget.types';\nimport type { AXPWidgetDefinitionProvider } from './widget-definition.provider';\nimport { AXP_WIDGET_DEFINITION_PROVIDER } from './widget-definition.provider';\n\n//#region ---- Build widget map (shared with tooling / snapshot scripts) ----\n\n\n//TODO RECHECK THIS FUNCTION s.hosseini\n\n/**\n * Merges core + extended widgets the same way as AXPWidgetRegistryService.ensureBuilt().\n * Use with concrete providers (e.g. AXPCoreWidgetsProvider, AXPEntityWidgetsProvider) in Node scripts without DI.\n */\nexport function buildWidgetRegistryMapFromProviders(\n providers: AXPWidgetDefinitionProvider[]\n): Map<string, AXPWidgetConfig> {\n const types = new Map<string, AXPWidgetConfig>();\n const AXPExtendedWidgets: AXPExtendedWidget[] = [];\n\n for (const provider of providers) {\n const widgets = provider.getWidgets?.() ?? [];\n for (const w of widgets) {\n types.set(w.name, w);\n }\n const extended = provider.getExtendedWidgets?.() ?? [];\n AXPExtendedWidgets.push(...extended);\n }\n\n for (const { parentName, widget } of AXPExtendedWidgets) {\n const parent = types.get(parentName);\n if (parent) {\n const merged = merge({}, parent, widget);\n merged.name = widget.name;\n types.set(merged.name, merged);\n }\n }\n\n return types;\n}\n\n//#endregion\n\n//#region ---- Widget Registry Service (Token-Based) ----\n\n/**\n * Aggregates widgets from all AXP_WIDGET_DEFINITION_PROVIDER instances.\n * Token-based like AXP_MENU_PROVIDER / AXP_PERMISSION_DEFINITION_PROVIDER / AXP_SETTING_DEFINITION_PROVIDER.\n * No separate registry - widgets come solely from providers.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPWidgetRegistryService {\n private readonly _providers = inject(AXP_WIDGET_DEFINITION_PROVIDER, { optional: true }) ?? [];\n private _types: Map<string, AXPWidgetConfig> | null = null;\n\n /**\n * Lazy-build widget map from all providers.\n */\n private ensureBuilt(): Map<string, AXPWidgetConfig> {\n if (this._types) return this._types;\n\n this._types = buildWidgetRegistryMapFromProviders(this._providers);\n return this._types;\n }\n\n resolve(name: string): AXPWidgetConfig {\n const widget = this.ensureBuilt().get(name);\n if (!widget) {\n throw new Error(`Widget with name \"${name}\" does not exist.`);\n }\n return widget;\n }\n\n /**\n * Registered widget config when present; otherwise `undefined`. Does not throw — use when\n * {@link resolve}'s value may be a non-widget id (e.g. data-source row id in dynamic field configurator).\n */\n getOptional(name: string): AXPWidgetConfig | undefined {\n return this.ensureBuilt().get(name);\n }\n\n all(): AXPWidgetConfig[] {\n return Array.from(this.ensureBuilt().values());\n }\n}\n\n//#endregion\n","import { AXBaseDataTable, AXDataTableColumnComponent } from '@acorex/components/data-table';\nimport { AXPExpressionEvaluatorService, AXPExpressionEvaluatorScope, getSmart } from '@acorex/platform/core';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Injector,\n Input,\n TemplateRef,\n ViewChild,\n inject,\n signal,\n} from '@angular/core';\nimport { merge, get } from 'lodash-es';\nimport { AXPWidgetCoreService } from './widget-core.service';\nimport { AXPWidgetRegistryService } from './widget-registery.service';\nimport { AXPWidgetColumnNode, AXP_WIDGET_COLUMN_TOKEN } from './widget.types';\n\n@Component({\n selector: 'axp-widget-column-renderer',\n template: `\n <ng-template #header>{{ caption | translate | async }}</ng-template>\n <ng-template #cell let-row>\n <div [class]=\"expandHandler ? 'ax-flex ax-gap-2 ax-items-center' : ''\">\n @if (expandHandler) {\n <div\n (click)=\"handleExpandRow(row)\"\n class=\"ax-expand-handler\"\n [class.ax-invisible]=\"!hasExpandableRow(row)\"\n id=\"ax-expand-handler-container\"\n [style.padding-inline-start.rem]=\"row.data?.__meta__?.level * 2\"\n >\n @if (loadingRow() === row) {\n <i class=\"fas fa-spinner-third ax-animate-twSpin ax-animate-infinite\"></i>\n } @else {\n @if (row.data?.__meta__?.expanded) {\n <i [class]=\"customCollapseIcon || 'far fa-minus-square ax-text-md ax-opacity-75'\"></i>\n } @else {\n <i [class]=\"customExpandIcon || 'far fa-plus-square ax-text-md ax-opacity-75'\"></i>\n }\n }\n </div>\n }\n @if (component && row?.data) {\n <ng-container\n *ngComponentOutlet=\"component; injector: getRowInjector(row.data); inputs: getInputs(row.data)\"\n ></ng-container>\n }\n </div>\n </ng-template>\n <ng-template #footer></ng-template>\n `,\n providers: [\n AXPWidgetCoreService,\n { provide: AXDataTableColumnComponent, useExisting: AXPWidgetColumnRendererComponent },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n inputs: ['caption'],\n standalone: false,\n})\nexport class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {\n protected widgetRegistery = inject(AXPWidgetRegistryService);\n private grid = inject(AXBaseDataTable);\n private expressionEvaluator = inject(AXPExpressionEvaluatorService);\n\n @Input() customExpandIcon: string;\n @Input() customCollapseIcon: string;\n\n @Input() customWidth: string;\n\n private _node: AXPWidgetColumnNode;\n @Input({ required: true })\n public get node(): AXPWidgetColumnNode {\n return this._node;\n }\n public set node(v: AXPWidgetColumnNode) {\n this._node = v;\n }\n\n private mergedOptions = signal<any>({});\n protected loadingRow = signal(null);\n private rowInjectorsCache = new Map<string, Injector>();\n private hasExpressions = false;\n private pendingEvaluations = new Set<string>();\n private changeDetectionScheduled = false;\n private readonly MAX_CACHE_SIZE = 1000; // Limit cache size to prevent memory leaks\n\n @Input()\n public footerTemplate: TemplateRef<unknown>;\n\n @ViewChild('footer')\n private _contentFooterTemplate: TemplateRef<unknown>;\n\n get renderFooterTemplate(): TemplateRef<unknown> {\n return this.footerTemplate ?? this._contentFooterTemplate;\n }\n\n @Input()\n public expandHandler: boolean;\n\n @Input()\n public cellTemplate: TemplateRef<unknown>;\n\n @ViewChild('cell')\n private _contentCellTemplate: TemplateRef<unknown>;\n\n get renderCellTemplate(): TemplateRef<unknown> {\n return this.cellTemplate ?? this._contentCellTemplate;\n }\n\n @Input()\n public headerTemplate: TemplateRef<unknown>;\n\n @ViewChild('header')\n private _contentHeaderTemplate: TemplateRef<unknown>;\n\n /**\n * True when the row should show the expand icon: either hasChild is true (from server/initial load)\n * or the row has loaded children (e.g. after refreshItemChildren when children go from 0 to 1).\n */\n protected hasExpandableRow(row: { data?: Record<string, unknown> }): boolean {\n const data = row?.data;\n if (!data) return false;\n if (data['hasChild'] === true) return true;\n const children = (data['__meta__'] as Record<string, unknown> | undefined)?.['children'];\n return Array.isArray(children) && children.length > 0;\n }\n\n protected async handleExpandRow(row: any) {\n this.loadingRow.set(row);\n await this.grid.expandRow(row);\n this.loadingRow.set(null);\n // if (row.data?.__meta__?.expanded === undefined) {\n // this.width = `${parseInt(this.width as string) + 24}px`;\n // }\n }\n\n get renderHeaderTemplate(): TemplateRef<unknown> {\n return this.headerTemplate ?? this._contentHeaderTemplate;\n }\n\n get loadingEnabled(): boolean {\n return true;\n }\n\n get name(): string {\n return `col-${this.node.path}`;\n }\n\n private injector = inject(Injector);\n private cdr = inject(ChangeDetectorRef);\n protected widgetInjector!: Injector;\n protected component!: any;\n\n async ngOnInit() {\n const widget = this.widgetRegistery.resolve(this.node.type);\n const mode = 'column';\n this.component = await widget?.components[mode]?.component();\n //\n const props = widget?.components[mode]?.properties\n ?.filter((c) => c.schema.defaultValue)\n .map((c) => ({ [c.name]: c.schema.defaultValue }))\n .reduce((acc, curr) => {\n return { ...acc, ...curr };\n }, {});\n //\n this.mergedOptions.set(merge(props, this.node.options) || {});\n\n // Check if options contain expressions (performance optimization)\n this.hasExpressions = this.checkForExpressions(this.mergedOptions());\n\n const tokenValue = {\n path: this.node.path,\n options: this.mergedOptions(),\n };\n this.widgetInjector = Injector.create({\n parent: this.injector,\n providers: [\n {\n provide: AXP_WIDGET_COLUMN_TOKEN,\n useValue: tokenValue,\n },\n ],\n });\n this.width = this.mergedOptions().width === 'auto' ? 'auto' : this.customWidth ? this.customWidth : (this.mergedOptions().width ?? '200px');\n this.allowResizing = this.mergedOptions().allowResizing || true;\n this.cdr.detectChanges();\n }\n\n //#region ---- Performance Optimization Methods ----\n\n /**\n * Check if options contain any expressions that need evaluation\n */\n private checkForExpressions(obj: any): boolean {\n if (typeof obj === 'string') {\n return this.expressionEvaluator.isExpression(obj);\n }\n if (Array.isArray(obj)) {\n return obj.some((item) => this.checkForExpressions(item));\n }\n if (obj && typeof obj === 'object') {\n return Object.values(obj).some((value) => this.checkForExpressions(value));\n }\n return false;\n }\n\n /**\n * Get cache key for row data - optimized to avoid JSON.stringify when possible\n */\n private getCacheKey(data: any): string {\n if (data?.id) {\n return `row-${data.id}`;\n }\n // Use a hash of key properties instead of full JSON.stringify\n // This is much faster for large objects\n const keyProps = ['id', 'code', 'name', 'title'];\n const keyValues = keyProps.map((prop) => data?.[prop]).filter((v) => v != null);\n if (keyValues.length > 0) {\n return `row-${keyValues.join('-')}`;\n }\n // Fallback to JSON.stringify only if no key properties exist\n // But limit the stringified size to prevent performance issues\n try {\n const str = JSON.stringify(data);\n return str.length > 1000 ? `row-${str.substring(0, 1000)}` : `row-${str}`;\n } catch {\n // If JSON.stringify fails, use a simple hash\n return `row-${Object.keys(data || {}).length}`;\n }\n }\n\n /**\n * Schedule change detection (debounced to batch multiple updates)\n */\n private scheduleChangeDetection(): void {\n if (this.changeDetectionScheduled) {\n return;\n }\n this.changeDetectionScheduled = true;\n // Use requestAnimationFrame for better performance\n requestAnimationFrame(() => {\n this.cdr.detectChanges();\n this.changeDetectionScheduled = false;\n });\n }\n\n /**\n * Limit cache size using simple FIFO eviction\n */\n private evictCacheIfNeeded(): void {\n if (this.rowInjectorsCache.size >= this.MAX_CACHE_SIZE) {\n // Remove oldest entries (first 25% of cache)\n const entriesToRemove = Math.floor(this.MAX_CACHE_SIZE * 0.25);\n const keysToRemove = Array.from(this.rowInjectorsCache.keys()).slice(0, entriesToRemove);\n keysToRemove.forEach((key) => this.rowInjectorsCache.delete(key));\n }\n }\n\n //#endregion\n\n getInputs(data: any): any {\n return {\n rawValue: get(data, this.node.path!),\n rowData: data,\n };\n }\n\n getRowInjector(data: any): Injector {\n // Optimized cache key generation\n const cacheKey = this.getCacheKey(data);\n\n // Check if we have a cached injector for this row\n let rowInjector = this.rowInjectorsCache.get(cacheKey);\n\n if (!rowInjector) {\n // If no expressions in options, use original options directly (performance optimization)\n if (!this.hasExpressions) {\n const tokenValue = {\n path: this.node.path,\n options: this.mergedOptions(),\n };\n\n rowInjector = Injector.create({\n parent: this.injector,\n providers: [\n {\n provide: AXP_WIDGET_COLUMN_TOKEN,\n useValue: tokenValue,\n },\n ],\n });\n\n this.evictCacheIfNeeded();\n this.rowInjectorsCache.set(cacheKey, rowInjector);\n return rowInjector;\n }\n\n // Check if evaluation is already pending for this row\n if (!this.pendingEvaluations.has(cacheKey)) {\n this.pendingEvaluations.add(cacheKey);\n\n // Evaluate expressions in options based on row data\n const scope: AXPExpressionEvaluatorScope = {\n ...(data ?? {}),\n context: {\n eval: (path: string) => {\n return getSmart(data, path);\n },\n },\n };\n\n // Start async evaluation - will update injector when complete\n this.expressionEvaluator.evaluate(this.mergedOptions(), scope).then((evaluatedOptions) => {\n // Create injector with evaluated options\n const tokenValue = {\n path: this.node.path,\n options: evaluatedOptions,\n };\n\n const newInjector = Injector.create({\n parent: this.injector,\n providers: [\n {\n provide: AXP_WIDGET_COLUMN_TOKEN,\n useValue: tokenValue,\n },\n ],\n });\n\n // Replace cached injector to force component recreation on next render\n this.rowInjectorsCache.delete(cacheKey);\n this.evictCacheIfNeeded();\n this.rowInjectorsCache.set(cacheKey, newInjector);\n this.pendingEvaluations.delete(cacheKey);\n\n // Schedule batched change detection (performance optimization)\n this.scheduleChangeDetection();\n }).catch(() => {\n // If evaluation fails, keep using the fallback injector\n this.pendingEvaluations.delete(cacheKey);\n });\n }\n\n // Create injector with original options as fallback (will be updated when evaluation completes)\n const tokenValue = {\n path: this.node.path,\n options: this.mergedOptions(),\n };\n\n rowInjector = Injector.create({\n parent: this.injector,\n providers: [\n {\n provide: AXP_WIDGET_COLUMN_TOKEN,\n useValue: tokenValue,\n },\n ],\n });\n\n // Cache the initial injector\n this.evictCacheIfNeeded();\n this.rowInjectorsCache.set(cacheKey, rowInjector);\n }\n\n return rowInjector;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n computed,\n effect,\n inject,\n} from '@angular/core';\nimport { AXPContextChangeEvent, AXPContextStore } from '@acorex/platform/core';\nimport { AXPWidgetCoreService } from './widget-core.service';\n\n@Component({\n selector: 'axp-widgets-container',\n template: `<ng-content></ng-content>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { style: 'display: contents;' },\n providers: [AXPWidgetCoreService, AXPContextStore],\n standalone: false,\n})\nexport class AXPWidgetContainerComponent {\n public readonly contextService = inject(AXPContextStore);\n public readonly builderService = inject(AXPWidgetCoreService);\n\n @Output()\n public readonly onContextChanged = new EventEmitter<AXPContextChangeEvent>();\n\n @Input()\n set context(value: any) {\n this.contextService.set(value);\n }\n\n @Input()\n public set functions(v: any) {\n this.builderService.setFunctions(v);\n }\n\n constructor() {\n effect(() => {\n if (this.contextService.isChanged()) {\n this.onContextChanged.emit(this.contextService.changeEvent());\n }\n });\n }\n\n public status = computed(() => {\n return this.builderService.status();\n });\n\n public isBusy = computed(() => {\n return this.builderService.isBusy();\n });\n\n\n public refresh() {\n this.builderService.refresh();\n }\n\n public find(name: string) {\n return this.builderService.waitForWidget(name);\n }\n}\n","import { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'axp-widget-placeholder',\n template: `<div>\n <ax-skeleton class=\"ax-w-full ax-h-10 ax-rounded-md\"></ax-skeleton>\n </div>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXSkeletonModule],\n standalone: true,\n})\nexport class AXPWidgetPlaceholderComponent {}\n","import { AXTranslateOptions, AXTranslationService } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport { AXPExpressionEvaluatorScope, AXPExpressionEvaluatorService, AXPMetaData, getSmart } from '@acorex/platform/core';\nimport {\n ComponentRef,\n Directive,\n Injector,\n SimpleChanges,\n ViewContainerRef,\n WritableSignal,\n effect,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { cloneDeep, get, isEmpty, isEqual, isString, merge, set, sum } from 'lodash-es';\nimport { Observable, Subject, filter } from 'rxjs';\nimport { AXPBaseWidgetComponent, AXPLayoutBaseWidgetComponent, AXPValueWidgetComponent } from './widget-base.component';\nimport { AXPContextStore } from '@acorex/platform/core';\nimport { AXPWidgetCoreService } from './widget-core.service';\nimport { AXPWidgetPlaceholderComponent } from './widget-placeholder.component';\nimport { AXPWidgetRegistryService } from './widget-registery.service';\nimport { AXPWidgetStatus } from './widget-status.types';\nimport {\n AXPWidgetConfig,\n AXPWidgetNode,\n AXPWidgetNodeToken,\n AXPWidgetRenderMode,\n AXP_WIDGET_TOKEN,\n} from './widget.types';\n\nexport type AXPWidgetRendererDirectiveOptions = AXPMetaData;\n\n@Directive({\n selector: '[axp-widget-renderer]',\n exportAs: 'widgetRenderer',\n providers: [\n {\n provide: AXUnsubscriber,\n },\n ],\n standalone: false,\n})\nexport class AXPWidgetRendererDirective {\n parentNode = input<AXPLayoutBaseWidgetComponent | null>();\n\n index = input<number | null>();\n\n mode = input.required<AXPWidgetRenderMode>();\n node = input.required<AXPWidgetNode>();\n\n private _options = signal<AXPWidgetRendererDirectiveOptions>({});\n public options = this._options.asReadonly();\n\n public onOptionsChanged = output<{ sender: AXPWidgetRendererDirective; widget: AXPBaseWidgetComponent }>();\n public onValueChanged = output<{ sender: AXPWidgetRendererDirective; widget: AXPValueWidgetComponent }>();\n public onLoad = output<{ sender: AXPWidgetRendererDirective; widget: AXPBaseWidgetComponent }>();\n\n //#region ---- Public API ----\n\n /**\n * Signal that emits the component reference when it's ready\n */\n private _componentRefSignal = signal<ComponentRef<any> | null>(null);\n public componentRefSignal = this._componentRefSignal.asReadonly();\n\n //#endregion\n\n //#region ---- Properties ----\n\n protected mergedOptions: WritableSignal<any> = signal<any>({});\n\n private injector = inject(Injector);\n protected builderService = inject(AXPWidgetCoreService);\n protected contextService = inject(AXPContextStore);\n protected widgetRegistery = inject(AXPWidgetRegistryService);\n protected unsubscriber = inject(AXUnsubscriber);\n protected translateService = inject(AXTranslationService);\n protected widgetService = inject(AXPWidgetRegistryService);\n protected expressionEvaluator = inject(AXPExpressionEvaluatorService);\n private viewContainerRef = inject(ViewContainerRef);\n\n protected isLoading = signal(false);\n protected isVisible = signal(true);\n //TODO check if instance cannot be public change it:\n public instance!: AXPValueWidgetComponent;\n private expressionEvaluators: Map<string, () => Promise<any>> = new Map();\n private componentRef: ComponentRef<any>;\n private renderTimeoutId: any = null;\n private hasInitialRender = false;\n\n private onContextChanged = new Subject<{ path: string }>();\n private onLoadEvent = new Subject<{ sender: AXPWidgetRendererDirective; widget: AXPBaseWidgetComponent }>();\n\n //#region ---- Performance Optimization Properties ----\n\n private contextUpdateQueue = new Set<string>();\n private contextUpdateTimeout: any = null;\n private readonly CONTEXT_UPDATE_DEBOUNCE_MS = 4; // ~250fps for large forms\n\n // Removed visibility detection - not needed for current implementation\n\n // Expression result caching\n private expressionCache = new Map<string, { value: any; timestamp: number }>();\n private readonly EXPRESSION_CACHE_TTL = 500; // Cache for 500ms (increased for better hit rate)\n\n // Options change tracking\n private lastAppliedOptions: any = null;\n\n // Expression result tracking\n private lastExpressionResults = new Map<string, any>();\n\n // Buffer for context changes that happen before initial render completes\n private preRenderContextQueue = new Set<string>();\n\n //#endregion\n\n //#endregion\n\n constructor() {\n effect(async () => {\n const changed = this.contextService.changeEvent();\n\n // Don't trigger re-render during initial setup\n if (!this.hasInitialRender) {\n // Handle initial context set (state: 'initiated' with empty path means full context update)\n if (changed.state === 'initiated' && (!changed.path || changed.path === '')) {\n // Mark that we need to re-evaluate all expressions when initial render completes\n // This handles the case where context is set before/during widget initialization\n this.preRenderContextQueue.add('*'); // Use '*' as a marker for full context initialization\n // console.log(`📝 [${this.node().type}] Buffered initial context set`);\n } else if (changed.path) {\n this.preRenderContextQueue.add(changed.path);\n // console.log(`📝 [${this.node().type}] Buffered pre-render context change: ${changed.path}`);\n }\n return;\n }\n\n // CRITICAL PERFORMANCE FIX: Only respond to relevant context changes\n // Handle initial context set (full context update)\n if (changed.state === 'initiated' && (!changed.path || changed.path === '')) {\n // Full context initialization - trigger re-evaluation of all expressions\n // console.log(`🎯 [${this.node().type}] Initial context set detected - triggering full re-evaluation`);\n this.clearExpressionCache();\n if (this.expressionEvaluators.size > 0) {\n await this.updateOptionsBasedOnContext();\n this.applyOptions();\n }\n } else if (changed.path && this.isRelevantContextChange(changed.path)) {\n // console.log(`🎯 [${this.node().type}] Context change detected: ${changed.path}`);\n this.queueContextUpdate(changed.path);\n }\n await this.updateVisibility();\n });\n\n this.builderService.onRefresh.pipe(this.unsubscriber.takeUntilDestroy).subscribe(async () => {\n await this.processBatchedUpdates();\n });\n }\n\n //#region ---- Expression Caching Methods ----\n\n private getCachedExpressionResult(expressionKey: string): any | null {\n const cached = this.expressionCache.get(expressionKey);\n if (cached && performance.now() - cached.timestamp < this.EXPRESSION_CACHE_TTL) {\n // console.log(`💾 [${this.node().type}] Using cached expression result for '${expressionKey}'`);\n return cached.value;\n }\n return null;\n }\n\n private setCachedExpressionResult(expressionKey: string, value: any): void {\n this.expressionCache.set(expressionKey, {\n value,\n timestamp: performance.now(),\n });\n }\n\n private clearExpressionCache(): void {\n this.expressionCache.clear();\n }\n\n private isPathAffectingExpressions(changedPath: string): boolean {\n // console.log(\n // `🔍 [${this.node().type}] Checking if path '${changedPath}' affects expressions. Expression count: ${this.expressionEvaluators.size}`,\n // );\n\n // If widget has no expressions, no need to clear cache\n if (this.expressionEvaluators.size === 0) {\n // console.log(`🔍 [${this.node().type}] Path '${changedPath}' - no expressions, keeping cache`);\n return false;\n }\n\n // Use the same logic as hasExpressionDependency to check for actual dependencies\n if (this.hasExpressionDependency(changedPath)) {\n // console.log(`🔍 [${this.node().type}] Path '${changedPath}' affects expressions - clearing cache`);\n return true;\n }\n\n // console.log(`🔍 [${this.node().type}] Path '${changedPath}' does not affect expressions - keeping cache`);\n return false;\n }\n\n //#endregion\n\n //#region ---- Context Batching Methods ----\n\n private queueContextUpdate(path: string) {\n if (path) {\n // console.log(`🔄 [${this.node().type}] Queueing context update for path: ${path}`);\n this.contextUpdateQueue.add(path);\n\n // Clear existing timeout\n if (this.contextUpdateTimeout) {\n clearTimeout(this.contextUpdateTimeout);\n }\n\n // Debounce updates\n this.contextUpdateTimeout = setTimeout(() => {\n // console.log(`⚡ [${this.node().type}] Processing batched updates for ${this.contextUpdateQueue.size} paths`);\n this.processBatchedUpdates();\n }, this.CONTEXT_UPDATE_DEBOUNCE_MS);\n }\n }\n\n private async processBatchedUpdates() {\n if (this.contextUpdateQueue.size === 0) return;\n\n const startTime = performance.now();\n const paths = Array.from(this.contextUpdateQueue);\n this.contextUpdateQueue.clear();\n\n // console.log(`📊 [${this.node().type}] Processing ${paths.length} paths:`, paths);\n\n // Clear expression cache only if changed paths affect this widget's expressions\n const shouldClearCache = paths.some((path) => this.isPathAffectingExpressions(path));\n if (shouldClearCache) {\n // console.log(`🗑️ [${this.node().type}] Clearing expression cache due to expression-affecting path change`);\n this.clearExpressionCache();\n }\n\n // Process updates in batches\n const optionsStartTime = performance.now();\n const hasOptionsUpdate = await this.updateOptionsBasedOnContext();\n const optionsTime = performance.now() - optionsStartTime;\n\n if (typeof hasOptionsUpdate === 'number' && hasOptionsUpdate > 0) {\n // console.log(`🔧 [${this.node().type}] Options updated (${optionsTime.toFixed(2)}ms)`);\n this.applyOptions();\n }\n\n // Check visibility for any of the changed paths\n const visibilityStartTime = performance.now();\n const visibilityNeedsUpdate = paths.some((path) => this.hasVisibilityDependency(path));\n\n if (visibilityNeedsUpdate) {\n // console.log(`👁️ [${this.node().type}] Visibility needs update`);\n await this.updateVisibility();\n }\n const visibilityTime = performance.now() - visibilityStartTime;\n\n // Emit context changes\n paths.forEach((path) => {\n this.onContextChanged.next({ path });\n });\n\n const totalTime = performance.now() - startTime;\n // console.log(\n // `✅ [${this.node().type}] Batch processing completed in ${totalTime.toFixed(2)}ms (options: ${optionsTime.toFixed(2)}ms, visibility: ${visibilityTime.toFixed(2)}ms)`,\n // );\n }\n\n //#endregion\n\n //#region ---- Context Relevance Filtering ----\n\n private isRelevantContextChange(changedPath: string): boolean {\n const node = this.node();\n\n // 1. Direct path match - widget's own field\n if (node.path === changedPath) {\n return true;\n }\n\n // 2. Parent path match - widget is inside the changed container\n if (node.path && changedPath.startsWith(node.path + '.')) {\n return true;\n }\n\n // 3. Child path match - changed field is inside this widget's container\n if (node.path && node.path.startsWith(changedPath + '.')) {\n return true;\n }\n\n // 4. Expression dependency check - if widget has expressions that depend on this path\n if (this.hasExpressionDependency(changedPath)) {\n return true;\n }\n\n // 5. Trigger dependency check - if widget has triggers that depend on this path\n if (this.hasTriggerDependency(changedPath)) {\n return true;\n }\n\n // 7. Visibility dependency check - if widget's visibility depends on this path\n if (this.hasVisibilityDependency(changedPath)) {\n return true;\n }\n\n return false;\n }\n\n /**\n * True when a context store path used in an expression (`context.eval`, `context.options`) is\n * affected by `changedPath`.\n */\n private contextStorePathDependsOnChangedPath(evalPath: string, changedPath: string): boolean {\n const normalizePath = (p: string): string => {\n if (!p) return p;\n const parts = p.split('.');\n const last = parts[parts.length - 1];\n if (last && last.endsWith('Id')) {\n parts.splice(parts.length - 1, 1, last.slice(0, -2), 'id');\n }\n return parts.join('.');\n };\n\n const isSegmentSuffix = (a: string, b: string): boolean => {\n if (!a || !b) return false;\n const pa = a.split('.');\n const pb = b.split('.');\n if (pb.length > pa.length) return false;\n for (let i = 1; i <= pb.length; i++) {\n if (pa[pa.length - i] !== pb[pb.length - i]) return false;\n }\n return true;\n };\n\n const evalNorm = normalizePath(evalPath);\n const changedNorm = normalizePath(changedPath);\n\n const rawMatch =\n evalPath === changedPath ||\n evalPath.startsWith(changedPath + '.') ||\n changedPath.startsWith(evalPath + '.') ||\n isSegmentSuffix(evalPath, changedPath) ||\n isSegmentSuffix(changedPath, evalPath);\n\n const normMatch =\n evalNorm === changedNorm ||\n evalNorm.startsWith(changedNorm + '.') ||\n changedNorm.startsWith(evalNorm + '.') ||\n isSegmentSuffix(evalNorm, changedNorm) ||\n isSegmentSuffix(changedNorm, evalNorm);\n\n if (rawMatch || normMatch) {\n return true;\n }\n\n return this.isPathAlias(evalPath, changedPath);\n }\n\n /**\n * Whether an expression template string reads context store paths affected by `changedPath`.\n */\n private expressionTextDependsOnContextPath(expressionValue: string, changedPath: string): boolean {\n const contextEvalRegex = /context\\.eval\\(['\"]([^'\\\"]+)['\"]\\)/g;\n let match;\n while ((match = contextEvalRegex.exec(expressionValue)) !== null) {\n if (this.contextStorePathDependsOnChangedPath(match[1], changedPath)) {\n return true;\n }\n }\n const contextOptionsQuoted = /context\\.options\\(\\s*['\"]([^'\"]*)['\"]\\s*\\)/g;\n while ((match = contextOptionsQuoted.exec(expressionValue)) !== null) {\n const sub = match[1];\n const evalPath = sub === '' ? 'options' : `options.${sub}`;\n if (this.contextStorePathDependsOnChangedPath(evalPath, changedPath)) {\n return true;\n }\n }\n const contextOptionsEmpty = /context\\.options\\(\\s*\\)/g;\n while ((match = contextOptionsEmpty.exec(expressionValue)) !== null) {\n if (this.contextStorePathDependsOnChangedPath('options', changedPath)) {\n return true;\n }\n }\n return false;\n }\n\n private hasExpressionDependency(changedPath: string): boolean {\n for (const [path, evaluator] of this.expressionEvaluators) {\n if (path.includes(changedPath)) {\n return true;\n }\n const node = this.node();\n const expressionValue = this.getExpressionValueFromNode(node, path);\n if (expressionValue && typeof expressionValue === 'string') {\n if (this.expressionTextDependsOnContextPath(expressionValue, changedPath)) {\n return true;\n }\n }\n }\n return false;\n }\n\n private isPathAlias(evalPath: string, changedPath: string): boolean {\n // Dynamic path alias detection based on 'Id' suffix pattern\n // Examples: typeId.id <-> type.id, categoryId.name <-> category.name\n\n // Check if evalPath ends with 'Id' and has a property\n if (evalPath.endsWith('Id') && evalPath.includes('.')) {\n const basePath = evalPath.substring(0, evalPath.lastIndexOf('Id'));\n const property = evalPath.substring(evalPath.lastIndexOf('.') + 1);\n const mappedPath = `${basePath}.${property}`;\n\n if (changedPath === mappedPath) {\n // console.log(`🔍 [${this.node().type}] Path alias detected: '${evalPath}' <-> '${changedPath}'`);\n return true;\n }\n }\n\n // Check if changedPath ends with 'Id' and has a property\n if (changedPath.endsWith('Id') && changedPath.includes('.')) {\n const basePath = changedPath.substring(0, changedPath.lastIndexOf('Id'));\n const property = changedPath.substring(changedPath.lastIndexOf('.') + 1);\n const mappedPath = `${basePath}.${property}`;\n\n if (evalPath === mappedPath) {\n // console.log(`🔍 [${this.node().type}] Path alias detected: '${evalPath}' <-> '${changedPath}'`);\n return true;\n }\n }\n\n // Check for direct 'Id' suffix mapping (e.g., typeId <-> type.id)\n if (evalPath.endsWith('Id') && !evalPath.includes('.')) {\n const basePath = evalPath.substring(0, evalPath.lastIndexOf('Id'));\n const mappedPath = `${basePath}.id`;\n\n if (changedPath === mappedPath) {\n // console.log(`🔍 [${this.node().type}] Path alias detected: '${evalPath}' <-> '${changedPath}'`);\n return true;\n }\n }\n\n if (changedPath.endsWith('Id') && !changedPath.includes('.')) {\n const basePath = changedPath.substring(0, changedPath.lastIndexOf('Id'));\n const mappedPath = `${basePath}.id`;\n\n if (evalPath === mappedPath) {\n // console.log(`🔍 [${this.node().type}] Path alias detected: '${evalPath}' <-> '${changedPath}'`);\n return true;\n }\n }\n\n return false;\n }\n\n private getExpressionValueFromNode(node: AXPWidgetNode, path: string): string | null {\n try {\n // Navigate through the node structure to find the expression value\n const pathParts = path.split('.');\n let current: any = node.options || {};\n\n // Navigate through the path parts\n for (const part of pathParts) {\n if (current && typeof current === 'object' && part in current) {\n current = current[part];\n } else {\n return null;\n }\n }\n\n return typeof current === 'string' ? current : null;\n } catch (error) {\n // console.error('Error extracting expression value from node:', error);\n return null;\n }\n }\n\n private hasTriggerDependency(changedPath: string): boolean {\n const node = this.node();\n const triggers = node.triggers || node.options?.['triggers'] || this.mergedOptions()?.triggers;\n\n if (!triggers) return false;\n\n // Check if any trigger event depends on the changed path\n for (const trigger of triggers) {\n if (trigger.event && trigger.event.includes(changedPath)) {\n return true;\n }\n }\n return false;\n }\n\n private hasVisibilityDependency(changedPath: string): boolean {\n const node = this.node();\n const visibility = node.options?.['visible'] || this.mergedOptions()?.visible;\n\n if (!visibility || typeof visibility !== 'string') return false;\n\n if (this.expressionEvaluator.isExpression(visibility)) {\n return this.expressionTextDependsOnContextPath(visibility, changedPath);\n }\n\n return false;\n }\n\n //#endregion\n\n // Removed visibility detection methods - not needed for current implementation\n\n // Detect input changes\n ngOnChanges(changes: SimpleChanges) {\n if (changes['mode'] || changes['node']) {\n // Check if either 'mode' or 'node' has changed\n this.rerenderComponent();\n }\n }\n\n private rerenderComponent() {\n // Clear any pending render operation to prevent double rendering\n if (this.renderTimeoutId) {\n clearTimeout(this.renderTimeoutId);\n this.renderTimeoutId = null;\n }\n\n // Reset loading state to allow re-rendering\n this.isLoading.set(false);\n\n // Schedule the component loading\n this.renderTimeoutId = setTimeout(async () => {\n await this.loadComponent();\n this.renderTimeoutId = null;\n });\n }\n\n ngOnDestroy() {\n if (this.renderTimeoutId) {\n clearTimeout(this.renderTimeoutId);\n }\n if (this.contextUpdateTimeout) {\n clearTimeout(this.contextUpdateTimeout);\n }\n if (this.componentRef) {\n this.componentRef.destroy();\n }\n this.onLoadEvent.complete();\n }\n\n private async loadComponent() {\n if (this.isLoading()) {\n return;\n }\n this.isLoading.set(true);\n\n try {\n // Destroy the existing component if it exists\n if (this.componentRef) {\n this.componentRef.destroy();\n }\n this.viewContainerRef.clear();\n\n // Reset the component ref signal\n this._componentRefSignal.set(null);\n //\n const widget = this.widgetRegistery.resolve(this.node().type);\n //\n const propertiesToProcess = [\n ...(widget?.properties ?? []),\n ...(widget?.components[this.mode()]?.properties ?? []),\n ]?.filter((c) => c.schema.defaultValue != null);\n\n // Process default values (evaluate expressions if needed)\n const props: { [key: string]: any } = {};\n for (const property of propertiesToProcess) {\n const defaultValue = property.schema.defaultValue;\n if (typeof defaultValue === 'string' && this.expressionEvaluator.isExpression(defaultValue)) {\n // Evaluate expression for default value\n try {\n const evaluatedValue = await this.evaluateExpression(defaultValue);\n props[property.name] = evaluatedValue;\n } catch (error) {\n // console.error(`Error evaluating default value expression for property ${property.name}:`, error);\n props[property.name] = cloneDeep(defaultValue); // Fallback to original value\n }\n } else {\n // Use static default value\n props[property.name] = cloneDeep(defaultValue);\n }\n }\n //\n this.mergedOptions.set(merge(props, widget?.options, this.node().options) || {});\n\n this.expressionEvaluators.clear();\n // Register expressions from widget defaults and node options to cover related-entity cases\n this.preprocessAndInitialOptions(cloneDeep(widget?.options));\n this.preprocessAndInitialOptions(cloneDeep(this.node().options));\n\n // Check if context is available before evaluating expressions\n // If context is empty, expressions will be re-evaluated after initial render\n const contextData = this.contextService.data();\n const hasContextData = contextData && Object.keys(contextData).length > 0;\n\n if (hasContextData) {\n await this.updateOptionsBasedOnContext();\n } else {\n // Context not yet available - expressions will be evaluated after initial render\n // when context is set (handled by the effect and preRenderContextQueue)\n }\n //\n this._options.update((val) => ({ ...val, ...this.mergedOptions() }));\n // Evaluate default value\n let defaultValue = this.node().defaultValue;\n if (defaultValue && this.expressionEvaluator.isExpression(defaultValue)) {\n defaultValue = await this.evaluateExpression(defaultValue);\n }\n //\n const tokenValue = {\n node: this.node(),\n defaultValue: defaultValue,\n options: this.mergedOptions(),\n config: widget,\n } as AXPWidgetNodeToken;\n const token = Injector.create({\n parent: this.injector,\n providers: [\n {\n provide: AXP_WIDGET_TOKEN,\n useValue: tokenValue,\n },\n ],\n });\n //\n const loadingRef = this.viewContainerRef.createComponent(AXPWidgetPlaceholderComponent);\n //\n const com = await widget?.components[this.mode()]?.component();\n if (!com) {\n // console.error(`${this.node().type} widget component not found with mode: ${this.mode()}`);\n return;\n }\n this.componentRef = this.viewContainerRef.createComponent<AXPValueWidgetComponent<any>>(com, { injector: token });\n this.instance = this.componentRef.instance;\n this.instance.setStatus(AXPWidgetStatus.Rendering);\n this.instance.parent = this.parentNode();\n this.instance.index = this.index();\n this.instance.mode = this.mode();\n this.instance.setStatus(AXPWidgetStatus.Rendered);\n\n // Update the component ref signal for reactive access\n this._componentRefSignal.set(this.componentRef);\n this.instance?.onOptionsChanged?.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {\n this.onOptionsChanged.emit({ sender: this, widget: c.sender });\n });\n this.instance?.onValueChanged?.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {\n this.onValueChanged.emit({ sender: this, widget: c.sender as AXPValueWidgetComponent });\n });\n await this.updateVisibility();\n await this.assignTriggers();\n //\n loadingRef.destroy();\n\n // Mark that initial render is complete\n this.hasInitialRender = true;\n\n // Re-evaluate expressions after initial render to catch late-arriving related context\n if (this.expressionEvaluators.size > 0) {\n // console.log(`🔄 [${this.node().type}] Re-evaluating expressions after initial render`);\n await this.updateOptionsBasedOnContext();\n this.applyOptions();\n }\n\n // Re-evaluate visibility after initial render\n await this.updateVisibility();\n\n // Process any buffered pre-render context changes now that the component is ready\n if (this.preRenderContextQueue.size > 0) {\n // Check if we have a full context initialization marker\n const hasFullContextInit = this.preRenderContextQueue.has('*');\n\n if (hasFullContextInit) {\n // Full context was initialized - clear cache and re-evaluate all expressions\n // console.log(`🚀 [${this.node().type}] Processing initial context set - full re-evaluation`);\n this.clearExpressionCache();\n this.preRenderContextQueue.clear();\n // Re-evaluate all expressions since context is now available\n if (this.expressionEvaluators.size > 0) {\n await this.updateOptionsBasedOnContext();\n this.applyOptions();\n }\n await this.updateVisibility();\n } else {\n // console.log(\n // `🚀 [${this.node().type}] Processing ${this.preRenderContextQueue.size} buffered pre-render changes`,\n // );\n this.preRenderContextQueue.forEach((p) => this.contextUpdateQueue.add(p));\n this.preRenderContextQueue.clear();\n await this.processBatchedUpdates();\n }\n }\n\n // Emit load event after widget is fully loaded\n const loadEvent = { sender: this, widget: this.instance };\n this.onLoadEvent.next(loadEvent);\n this.onLoad.emit(loadEvent);\n } catch (error) {\n // console.error('Error loading component:', error);\n } finally {\n this.isLoading.set(false);\n }\n }\n\n private applyOptions() {\n if (!this.instance) return;\n\n const currentOptions = this.mergedOptions();\n\n // Check if options have actually changed\n if (this.hasOptionsChanged(currentOptions)) {\n // console.log('applyOptions', this.node().path, '- options changed');\n this._options.update((val) => ({ ...val, ...currentOptions }));\n this.instance.setOptions(currentOptions);\n this.lastAppliedOptions = cloneDeep(currentOptions); // Deep clone using Lodash\n } else {\n // console.log('applyOptions', this.node().path, '- no changes, skipping');\n }\n }\n\n private hasOptionsChanged(newOptions: any): boolean {\n if (!this.lastAppliedOptions) {\n return true; // First time, always apply\n }\n\n // Deep comparison of options using Lodash isEqual\n return !isEqual(newOptions, this.lastAppliedOptions);\n }\n\n // Removed deepCloneValue method - now using Lodash cloneDeep\n\n preprocessAndInitialOptions(obj: any, pathPrefix: string = ''): void {\n if (!obj) {\n return;\n }\n Object.entries(obj).forEach(([key, value]) => {\n const currentPath = pathPrefix ? `${pathPrefix}.${key}` : key;\n\n // CRITICAL FIX: Skip trigger actions during options processing\n //\n // PROBLEM: Trigger actions were being evaluated immediately during widget setup/options processing,\n // causing them to execute before the actual trigger event occurred. This meant triggers would fire\n // during initialization instead of when the specified context path actually changed.\n //\n // ROOT CAUSE: The expression evaluator was processing trigger action expressions (like console.log\n // or widget.setValue calls) as part of the normal options preprocessing, treating them as dynamic\n // expressions that needed immediate evaluation.\n //\n // SOLUTION: Detect when we're processing trigger actions and store them as static values without\n // expression evaluation. This ensures trigger actions are only evaluated when the trigger's\n // subscription callback actually fires (when the event condition is met).\n //\n // RESULT: Triggers now only execute when their event filters pass (e.g., when the specified\n // context path changes), not during widget initialization.\n if (currentPath.includes('triggers') && (key === 'action' || currentPath.endsWith('.action'))) {\n // Apply static values directly without expression evaluation\n this.mergedOptions.update((currentOptions) => {\n return set(currentOptions, currentPath, value);\n });\n return;\n }\n\n if (typeof value === 'string' && this.expressionEvaluator.isExpression(value)) {\n // Cache dynamic expression for later evaluation\n this.expressionEvaluators.set(currentPath, () => this.evaluateExpression(value));\n } else if (\n typeof value === 'object' &&\n value !== null &&\n (value.constructor === Object || Array.isArray(value))\n ) {\n // Recursively handle nested objects\n this.preprocessAndInitialOptions(value, currentPath);\n } else {\n // Apply static values directly\n this.mergedOptions.update((currentOptions) => {\n return set(currentOptions, currentPath, value);\n });\n }\n });\n }\n\n async updateOptionsBasedOnContext() {\n // Early return if no expressions to evaluate\n if (this.expressionEvaluators.size === 0) {\n return 0;\n }\n\n // console.log(`🔍 [${this.node().type}] Evaluating ${this.expressionEvaluators.size} expressions`);\n\n const updatePromises = Array.from(this.expressionEvaluators).map(async ([path, evaluator]) => {\n // Check cache first\n const cachedValue = this.getCachedExpressionResult(path);\n if (cachedValue !== null) {\n // console.log(`💾 [${this.node().type}] Using cached expression result for '${path}'`);\n return { path, newValue: cachedValue, fromCache: true };\n }\n\n // Evaluate expression if not cached\n const evalStartTime = performance.now();\n const newValue = await evaluator();\n const evalTime = performance.now() - evalStartTime;\n\n // Check if result has actually changed using Lodash isEqual\n // Important: We must check if the key exists in the map, not just compare values\n // This handles the case where the expression evaluates to `undefined` for the first time\n // Without this check, `undefined` would be incorrectly treated as \"no change\"\n // because Map.get() returns `undefined` for non-existent keys\n const hasLastValue = this.lastExpressionResults.has(path);\n const lastValue = this.lastExpressionResults.get(path);\n const hasChanged = !hasLastValue || !isEqual(newValue, lastValue);\n\n if (hasChanged) {\n // console.log(\n // `📝 [${this.node().type}] Expression '${path}' evaluated in ${evalTime.toFixed(2)}ms - value changed`,\n // );\n // Cache the result and track it\n this.setCachedExpressionResult(path, newValue);\n this.lastExpressionResults.set(path, cloneDeep(newValue));\n return { path, newValue, fromCache: false, hasChanged: true };\n } else {\n // console.log(\n // `📝 [${this.node().type}] Expression '${path}' evaluated in ${evalTime.toFixed(2)}ms - value unchanged, skipping update`,\n // );\n // Cache the result but don't update\n this.setCachedExpressionResult(path, newValue);\n this.lastExpressionResults.set(path, cloneDeep(newValue));\n return { path, newValue, fromCache: false, hasChanged: false };\n }\n });\n\n // Wait for all evaluators to complete\n const updates = await Promise.all(updatePromises);\n\n // Filter updates to only include those that have actually changed\n const changedUpdates = updates.filter((update) => update.hasChanged !== false);\n\n // Apply updates to mergedOptions only for changed values\n if (changedUpdates.length > 0) {\n this.mergedOptions.update((o) => {\n const updatedOptions = { ...o };\n changedUpdates.forEach(({ path, newValue }) => {\n set(updatedOptions, path, newValue);\n });\n return updatedOptions;\n });\n }\n\n const cacheHits = updates.filter((update) => update.fromCache).length;\n const skippedUpdates = updates.length - changedUpdates.length;\n\n // console.log(\n // `📋 [${this.node().type}] Applied ${changedUpdates.length} expression updates (${cacheHits} cache hits, ${skippedUpdates} skipped)`,\n // );\n return changedUpdates.length;\n }\n\n async updateVisibility() {\n const node = this.node();\n const visibility = node.options?.['visible'] || this.mergedOptions()?.visible;\n\n if (visibility === undefined || visibility === null) {\n // Default to visible if no visibility option is set\n this.show();\n return;\n }\n\n let shouldBeVisible: boolean;\n\n if (typeof visibility === 'boolean') {\n shouldBeVisible = visibility;\n } else if (typeof visibility === 'string' && this.expressionEvaluator.isExpression(visibility)) {\n // Evaluate expression for visibility\n try {\n const result = await this.evaluateExpression(visibility);\n shouldBeVisible = Boolean(result);\n } catch (error) {\n // console.error('Error evaluating visibility expression:', error);\n shouldBeVisible = true; // Default to visible on error\n }\n } else {\n // Treat other values as truthy/falsy\n shouldBeVisible = Boolean(visibility);\n }\n\n if (shouldBeVisible) {\n this.show();\n } else {\n this.hide();\n }\n }\n\n private show() {\n if (!this.isVisible()) {\n this.isVisible.set(true);\n if (this.componentRef && this.componentRef.location) {\n this.loadComponent();\n // this.componentRef.location.nativeElement.style.display = '';\n }\n }\n }\n\n private hide() {\n if (this.isVisible()) {\n this.isVisible.set(false);\n if (this.componentRef && this.componentRef.location) {\n this.componentRef.destroy();\n // this.componentRef.location.nativeElement.style.display = 'none';\n }\n }\n }\n\n private async evaluateExpression(templateExpression: string): Promise<any> {\n try {\n const scope = this.buildExpressionScope();\n return await this.expressionEvaluator.evaluate(templateExpression, scope);\n } catch (error) {\n // console.error('Error evaluating expression:', error);\n return false;\n }\n }\n\n private buildExpressionScope(): AXPExpressionEvaluatorScope {\n return {\n context: this.getContextScope(),\n events: this.getEventScope(),\n widget: this.getWidgetScope(),\n methods: this.getFunctionScope(),\n vars: this.getVariablesScope(),\n };\n }\n\n private getContextScope(): { [name: string]: Function } {\n return {\n eval: (path: string) => {\n //TODO: Handle array index\n const fullPath = path.startsWith('>') ? `${this.instance?.parentPath()}.${path.substring(1)}` : path;\n const value = this.contextService.getValue(fullPath);\n return value;\n },\n set: (path: string, value: any) => {\n this.contextService.update(path, value);\n },\n data: () => {\n return this.contextService.data();\n },\n isDirty: () => {\n return this.contextService.isDirty();\n },\n /**\n * Host/widget-under-edit `options` from the shared context store (same values as\n * `context.eval('options' + (path ? '.' + path : ''))`), not `widget.options` on the nested\n * property field instance. Uses one `getValue` so smart-path behavior matches `context.eval`.\n */\n options: (path?: string) => {\n if (path == null || path === '') {\n return this.contextService.getValue('options');\n }\n return this.contextService.getValue(`options.${path}`);\n },\n };\n }\n\n private getEventScope(): { [name: string]: Function } {\n return {\n context: (path?: string) => {\n return this.onContextChanged.pipe(\n filter((c) => {\n // If no path filter specified, pass all events\n if (path == null || path === '') {\n return true;\n }\n // Ensure c.path exists\n if (!c.path) {\n return false;\n }\n // Pattern: \"prefix*\" - matches paths that start with prefix\n if (path.endsWith('*')) {\n const prefix = path.substring(0, path.length - 1);\n return c.path.startsWith(prefix);\n }\n // Pattern: \"*suffix\" - matches paths that end with suffix\n else if (path.startsWith('*')) {\n const suffix = path.substring(1);\n return c.path.endsWith(suffix);\n }\n // Exact match\n else {\n return c.path === path;\n }\n }),\n );\n },\n from: (event: string) => get(this.instance.api(), event),\n load: () => {\n return this.onLoadEvent.asObservable();\n },\n };\n }\n\n private getWidgetScope(): { [name: string]: Function } {\n return {\n /** Resolved options for this renderer's widget instance (not the host / property-viewer target). */\n options: (path?: string) => {\n const opts =\n this.instance && typeof this.instance.options === 'function'\n ? this.instance.options()\n : this.mergedOptions();\n if (path == null || path === '') {\n return opts;\n }\n return getSmart(opts, path);\n },\n call: (name: string, ...args: any[]) => {\n this.instance.call(name, ...args);\n },\n setValue: (value: any) => {\n this.instance.setValue(value);\n },\n clear: () => {\n this.instance.setValue(undefined);\n },\n refresh: () => {\n const refresh = (this.instance as any)?.['refresh'];\n if (refresh && typeof refresh === 'function') {\n refresh.bind(this.instance)();\n } else {\n this.updateOptionsBasedOnContext();\n this.applyOptions();\n }\n },\n output: (name: any) => {\n this.instance.output(name);\n },\n find: (id: string) => {\n return this.builderService.getWidget(id);\n },\n };\n }\n\n private getFunctionScope(): { [name: string]: Function } {\n const scope: { [name: string]: Function } = {\n sum: (values: any) => {\n return sum(values);\n },\n translate: (text: string, options?: AXTranslateOptions) => {\n return this.translateService.translateAsync(text, options);\n },\n widgetInfo: (name: string): AXPWidgetConfig | undefined => {\n return this.widgetService.resolve(name);\n },\n };\n\n // Add custom functions from builder service\n Object.entries(this.builderService.functions).forEach(([key, fn]) => {\n scope[key] = (...args: any[]) => {\n return fn(...args);\n };\n });\n\n return scope;\n }\n\n private getVariablesScope(): { [name: string]: Function } {\n return {\n eval: (path: string) => get(this.builderService.variables, path),\n };\n }\n\n private async assignTriggers() {\n const node = this.node();\n // Check multiple possible locations for triggers\n const triggers = node.triggers || node.options?.['triggers'] || this.mergedOptions()?.triggers;\n\n if (!triggers) {\n return;\n }\n\n for (const trigger of triggers) {\n try {\n const event = await this.evaluateTrigger(trigger.event);\n if (event) {\n event.pipe(this.unsubscriber.takeUntilDestroy).subscribe(() => {\n const exec = async (action: string) => {\n if (!isEmpty(action) && isString(action)) {\n await this.evaluateAction(action);\n }\n };\n const actions = Array.isArray(trigger.action) ? trigger.action : [trigger.action];\n actions.forEach(async (a: string) => await exec(a));\n });\n }\n } catch (error) {\n // console.error('Error assigning trigger:', error);\n }\n }\n }\n\n private async evaluateTrigger(templateExpression: string): Promise<Observable<any> | null> {\n try {\n const scope = this.buildExpressionScope();\n const result = await this.expressionEvaluator.evaluate(templateExpression, scope);\n\n // Check if result is an Observable\n if (result && typeof result.subscribe === 'function') {\n return result;\n } else {\n return null;\n }\n } catch (error) {\n // console.error('Error evaluating trigger expression:', error);\n return null;\n }\n }\n\n private async evaluateAction(templateExpression: string) {\n try {\n const scope = this.buildExpressionScope();\n await this.expressionEvaluator.evaluate(templateExpression, scope);\n } catch (error) {\n // console.error('Error evaluating action expression:', templateExpression, error);\n }\n }\n}\n","import { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AXPWidgetColumnRendererComponent } from './widget-column-renderer';\nimport { AXPWidgetContainerComponent } from './widget-container.component';\nimport { AXPWidgetRendererDirective } from './widget-renderer.directive';\nimport type { AXPWidgetConfig, AXPExtendedWidget } from './widget.types';\n\nexport interface AXPWidgetCoreModuleConfigs {\n widgets?: AXPWidgetConfig[];\n AXPExtendedWidgets?: AXPExtendedWidget[];\n}\n\nconst COMPONENTS = [AXPWidgetContainerComponent, AXPWidgetColumnRendererComponent, AXPWidgetRendererDirective];\n\n@NgModule({\n imports: [CommonModule, PortalModule, AXSkeletonModule, AXTranslationModule],\n exports: [...COMPONENTS],\n declarations: [...COMPONENTS],\n providers: [],\n})\nexport class AXPWidgetCoreModule { }\n","import {\n AXPBorderBox,\n AXPBorderBoxString,\n AXPBreakpoints,\n AXPBreakpointValues,\n AXPPropertyCorners,\n AXPPropertySides,\n AXPSpacingBox,\n AXPSpacingBoxString,\n} from './property-editor.type';\n\nexport class AXPPropertyEditorHelper {\n private static expandShorthand<T extends string>(values: T[]): T[] {\n switch (values.length) {\n case 1:\n return [values[0], values[0], values[0], values[0]];\n case 2:\n return [values[0], values[1], values[0], values[1]];\n case 3:\n return [values[0], values[1], values[2], values[1]];\n case 4:\n return values;\n default:\n throw new Error(`Invalid shorthand value count. Input: ${values}`);\n }\n }\n\n private static condenseShorthand<T>(values: T[]): string {\n if (values.length !== 4) {\n throw new Error('Expected 4 values for condensation.');\n }\n\n if (values[0] === values[1] && values[1] === values[2] && values[2] === values[3]) {\n return `${values[0]}`;\n } else if (values[0] === values[2] && values[1] === values[3]) {\n return `${values[0]} ${values[1]}`;\n } else if (values[1] === values[3]) {\n return `${values[0]} ${values[1]} ${values[2]}`;\n } else {\n return `${values[0]} ${values[1]} ${values[2]} ${values[3]}`;\n }\n }\n\n private static parseSides(input: string): AXPPropertySides {\n const values = this.expandShorthand(input.match(/(?:rgb\\([^)]+\\)|[^ ]+)/g)?.map((value) => value.trim()) || []);\n return { top: values[0], right: values[1], bottom: values[2], left: values[3] };\n }\n\n private static parseSidesWithUnits(input: string): AXPPropertySides<number> {\n const values = this.expandShorthand(input.match(/(?:rgb\\([^)]+\\)|[^ ]+)/g)?.map((value) => value.trim()) || []);\n return {\n top: AXPPropertyEditorHelper.getValueWithUnit(values[0]).value,\n right: AXPPropertyEditorHelper.getValueWithUnit(values[1]).value,\n bottom: AXPPropertyEditorHelper.getValueWithUnit(values[2]).value,\n left: AXPPropertyEditorHelper.getValueWithUnit(values[3]).value,\n };\n }\n\n private static parseCorners(input: string): AXPPropertyCorners<number> {\n const values = this.expandShorthand(input.split(' ').map((value) => value.trim()));\n return {\n 'top-left': AXPPropertyEditorHelper.getValueWithUnit(values[0]).value,\n 'top-right': AXPPropertyEditorHelper.getValueWithUnit(values[1]).value,\n 'bottom-left': AXPPropertyEditorHelper.getValueWithUnit(values[2]).value,\n 'bottom-right': AXPPropertyEditorHelper.getValueWithUnit(values[3]).value,\n };\n }\n\n public static parseSpacingBox(input: AXPSpacingBoxString): AXPSpacingBox<number> {\n return {\n margin: this.parseSidesWithUnits(input.margin),\n padding: this.parseSidesWithUnits(input.padding),\n };\n }\n\n public static parseBorderBox(input: AXPBorderBoxString): AXPBorderBox<number | string> {\n return {\n width: this.parseSidesWithUnits(input.width),\n radius: this.parseCorners(input.radius),\n color: this.parseSides(input.color),\n style: this.parseSides(input.style),\n };\n }\n\n public static parseSpacingBoxReverse(\n input: AXPSpacingBox<number>,\n units: AXPSpacingBox<string>,\n ): AXPSpacingBoxString {\n const format = (value: number, unit: string) => `${value}${unit}`;\n return {\n margin: AXPPropertyEditorHelper.condenseShorthand([\n format(input.margin.top, units.margin.top),\n format(input.margin.right, units.margin.right),\n format(input.margin.bottom, units.margin.bottom),\n format(input.margin.left, units.margin.left),\n ]),\n padding: AXPPropertyEditorHelper.condenseShorthand([\n format(input.padding.top, units.padding.top),\n format(input.padding.right, units.padding.right),\n format(input.padding.bottom, units.padding.bottom),\n format(input.padding.left, units.padding.left),\n ]),\n };\n }\n\n public static parseBorderBoxReverse(\n input: AXPBorderBox<number | string>,\n units: AXPBorderBox<string>,\n ): AXPBorderBoxString {\n const format = (value: number | string, unit: string) => `${value}${unit}`;\n\n return {\n width: AXPPropertyEditorHelper.condenseShorthand([\n format(input.width.top, units.width.top),\n format(input.width.right, units.width.right),\n format(input.width.bottom, units.width.bottom),\n format(input.width.left, units.width.left),\n ]),\n radius: AXPPropertyEditorHelper.condenseShorthand([\n format(input.radius['top-left'], units.radius['top-left']),\n format(input.radius['top-right'], units.radius['top-right']),\n format(input.radius['bottom-right'], units.radius['bottom-right']),\n format(input.radius['bottom-left'], units.radius['bottom-left']),\n ]),\n color: AXPPropertyEditorHelper.condenseShorthand([\n `${input.color.top}${units.color.top}`,\n `${input.color.right}${units.color.right}`,\n `${input.color.bottom}${units.color.bottom}`,\n `${input.color.left}${units.color.left}`,\n ]),\n style: AXPPropertyEditorHelper.condenseShorthand([\n `${input.style.top}${units.style.top}`,\n `${input.style.right}${units.style.right}`,\n `${input.style.bottom}${units.style.bottom}`,\n `${input.style.left}${units.style.left}`,\n ]),\n };\n }\n\n public static getValueWithUnit(input: string | number): { value: number; unit: string } {\n if (typeof input === 'number') return { value: input, unit: 'px' };\n if (input === 'auto') return { value: 0, unit: 'px' };\n\n const match = input.match(/^([0-9.]+)([a-z%]*)$/i);\n if (!match) throw new Error(`Invalid unit format: ${input}`);\n\n return { value: parseFloat(match[1]), unit: match[2] || '' };\n }\n\n public static getValueFromUnit(value: number, unit: string): string {\n return unit ? `${value}${unit}` : `${value}`;\n }\n\n public static parseGap(gap: string): { values: Record<'x' | 'y', number>; unit: string } {\n const parts = gap.split(/\\s+/);\n const match = parts[0].match(/^(\\d+\\.?\\d*)([a-z%]+)$/);\n if (!match) {\n throw new Error('Invalid gap format');\n }\n\n const [, xValue, unit] = match;\n let yValue = parseFloat(xValue);\n if (parts.length === 2) {\n const secondMatch = parts[1].match(/^(\\d+\\.?\\d*)[a-z%]+$/);\n if (!secondMatch) {\n throw new Error('Invalid gap format');\n }\n yValue = parseFloat(secondMatch[1]);\n }\n\n return {\n values: {\n x: parseFloat(xValue),\n y: yValue,\n },\n unit,\n };\n }\n\n public static parseGridTemplate(gridTemplate: string): number {\n const match = gridTemplate.match(/^repeat\\((\\d+),\\s*(?:1fr|auto|minmax\\([^)]*\\))\\)$/);\n if (!match) {\n throw new Error(\"Invalid grid template format. Expected 'repeat(N, 1fr|auto|minmax(...))'.\");\n }\n return parseInt(match[1], 10);\n }\n\n public static createGridTemplate(repetitionCount: number): string {\n if (repetitionCount <= 0) {\n throw new Error('Repetition count must be a positive integer.');\n }\n return `repeat(${repetitionCount}, 1fr)`;\n }\n}\n\nexport function findNonEmptyBreakpoints<T>(values: AXPBreakpointValues<T>): AXPBreakpoints[] {\n const breakpoints: AXPBreakpoints[] = ['default', 'sm', 'md', 'lg', 'xl', '2xl', '3xl'];\n const nonEmptyBreakpoints: AXPBreakpoints[] = [];\n\n for (const breakpoint of breakpoints) {\n if (values[breakpoint] !== undefined) {\n nonEmptyBreakpoints.push(breakpoint);\n }\n }\n\n return nonEmptyBreakpoints;\n}\n","//#region ---- Imports ----\n\nimport { AXPWidgetNode } from '../widget.types';\nimport { cloneDeep } from 'lodash-es';\n\n//#endregion\n\n//#region ---- Helper Class ----\n\n/**\n * Helper class for serializing and deserializing AXPWidgetNode to/from JSON\n */\nexport class AXPWidgetSerializationHelper {\n /**\n * Removes non-serializable properties from widget node\n * @param node - The widget node to clean\n * @param options - Serialization options\n * @returns Cleaned widget node ready for JSON serialization\n */\n private static cleanNode(\n node: AXPWidgetNode,\n options: { removeMeta?: boolean; removeFunctions?: boolean } = {},\n ): AXPWidgetNode {\n const { removeMeta = true, removeFunctions = true } = options;\n\n // Deep clone to avoid mutating original\n const cleaned = cloneDeep(node);\n\n // Remove meta property if requested\n if (removeMeta && 'meta' in cleaned) {\n delete (cleaned as any).meta;\n }\n\n // Remove functions from options, triggers, and valueTransforms\n if (removeFunctions) {\n this.removeFunctions(cleaned);\n }\n\n // Recursively clean children\n if (cleaned.children && Array.isArray(cleaned.children)) {\n cleaned.children = cleaned.children.map((child) => this.cleanNode(child, options));\n }\n\n return cleaned;\n }\n\n /**\n * Recursively removes functions from object properties\n */\n private static removeFunctions(obj: any): void {\n if (obj === null || obj === undefined) {\n return;\n }\n\n if (Array.isArray(obj)) {\n obj.forEach((item) => this.removeFunctions(item));\n return;\n }\n\n if (typeof obj === 'object') {\n for (const key in obj) {\n if (typeof obj[key] === 'function') {\n delete obj[key];\n } else if (typeof obj[key] === 'object') {\n this.removeFunctions(obj[key]);\n }\n }\n }\n }\n\n /**\n * Converts AXPWidgetNode to JSON string\n * @param node - The widget node to serialize\n * @param options - Serialization options\n * @returns JSON string representation of the widget node\n */\n public static toJson(\n node: AXPWidgetNode,\n options: {\n removeMeta?: boolean;\n removeFunctions?: boolean;\n pretty?: boolean;\n } = {},\n ): string {\n const { pretty = false, ...cleanOptions } = options;\n const cleaned = this.cleanNode(node, cleanOptions);\n\n if (pretty) {\n return JSON.stringify(cleaned, null, 2);\n }\n\n return JSON.stringify(cleaned);\n }\n\n /**\n * Converts JSON string to AXPWidgetNode\n * @param json - JSON string to deserialize\n * @returns Parsed AXPWidgetNode object\n * @throws Error if JSON is invalid or doesn't match AXPWidgetNode structure\n */\n public static fromJson(json: string): AXPWidgetNode {\n try {\n const parsed = JSON.parse(json);\n\n // Basic validation - ensure it has at least a type property\n if (!parsed || typeof parsed !== 'object') {\n throw new Error('Invalid JSON: Expected an object');\n }\n\n if (!parsed.type) {\n throw new Error('Invalid AXPWidgetNode: Missing required property \"type\"');\n }\n\n // Recursively validate and parse children if they exist\n if (parsed.children && Array.isArray(parsed.children)) {\n parsed.children = parsed.children.map((child: any) => this.fromJson(JSON.stringify(child)));\n }\n\n return parsed as AXPWidgetNode;\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new Error(`Invalid JSON string: ${error.message}`);\n }\n throw error;\n }\n }\n\n /**\n * Removes meta property from widget node (similar to designer service)\n * @param node - The widget node to process\n * @returns Widget node without meta property\n */\n public static removeMeta(node: AXPWidgetNode): AXPWidgetNode {\n return this.cleanNode(node, { removeMeta: true, removeFunctions: false });\n }\n}\n\n//#endregion\n\n","import type { AXPMultiLanguageString } from '@acorex/platform/core';\n\nexport interface AXPWidgetCategory {\n name: string;\n title: AXPMultiLanguageString;\n order: number;\n}\n\n/** Normalizes widget categories to an array for iteration and serialization. */\nexport function normalizeWidgetCategories(\n categories?: AXPWidgetCategory | AXPWidgetCategory[],\n): AXPWidgetCategory[] {\n if (categories == null) {\n return [];\n }\n return Array.isArray(categories) ? categories : [categories];\n}\n\nexport const AXP_WIDGETS_LAYOUT_CATEGORY: AXPWidgetCategory = {\n name: 'layout',\n order: 1,\n title: 'Layout',\n};\n\nexport const AXP_WIDGETS_EDITOR_CATEGORY: AXPWidgetCategory = {\n name: 'editor',\n order: 2,\n title: 'Editors',\n};\n\nexport const AXP_WIDGETS_ACTION_CATEGORY: AXPWidgetCategory = {\n name: 'action',\n order: 3,\n title: 'Action',\n};\n\nexport const AXP_WIDGETS_ADVANCE_CATEGORY: AXPWidgetCategory = {\n name: 'advance',\n order: 4,\n title: 'Advance',\n};\n\n/** Widgets exposed to AI assistants for structured rendering (see Widgets:GetForAI). */\nexport const AXP_WIDGETS_AI_CATEGORY: AXPWidgetCategory = {\n name: 'ai',\n order: 5,\n title: 'AI',\n};\n\nexport const AXP_WIDGETS_CATEGORIES: AXPWidgetCategory[] = [\n AXP_WIDGETS_LAYOUT_CATEGORY,\n AXP_WIDGETS_EDITOR_CATEGORY,\n AXP_WIDGETS_ACTION_CATEGORY,\n AXP_WIDGETS_ADVANCE_CATEGORY,\n AXP_WIDGETS_AI_CATEGORY,\n];\n","export type AXPWidgetGroup =\n 'form-element' |\n 'dashboard-widget' |\n 'form-template' |\n 'property-editor' |\n 'meta-data' |\n 'setting-widget' |\n 'entity-widget' |\n 'utility-widget';\n\n\nexport enum AXPWidgetGroupEnum {\n FormElement = 'form-element',\n DashboardWidget = 'dashboard-widget',\n FormTemplate = 'form-template',\n PropertyEditor = 'property-editor',\n MetaData = 'meta-data',\n SettingWidget = 'setting-widget',\n EntityWidget = 'entity-widget',\n UtilityWidget = 'utility-widget',\n}","import { AXPProperty } from '@acorex/platform/core';\n\nimport { AXPWidgetProperty, AXPWidgetPropertyGroup } from './widget.types';\n\n//#region ---- Types ----\n\n/**\n * Maps a platform {@link AXPProperty} to a property viewer row model ({@link AXPWidgetProperty}).\n * Kept in widget-core (not platform/core) to avoid a dependency cycle: widget-core already depends on platform/core.\n */\nexport interface MapAXPPropertyToWidgetPropertyOptions {\n group: AXPWidgetPropertyGroup;\n order: number;\n /**\n * Dot path prefix for {@link AXPWidgetProperty.schema.interface.path}.\n * Example: `input` → `input.requestId`; `properties` → `properties.message`.\n */\n valuePathPrefix: string;\n /**\n * Resolves a display title (supports multi-language strings on the source property).\n */\n resolveTitle: (property: AXPProperty) => string;\n /**\n * Optional description line for the viewer row.\n */\n resolveDescription?: (property: AXPProperty) => string | undefined;\n}\n\n//#endregion\n\n//#region ---- Mapping ----\n\n/**\n * Converts a domain {@link AXPProperty} into a {@link AXPWidgetProperty} row for\n * the layout property viewer (`AXPPropertyViewerService` and `buildPropertyViewerTabsFromProperties`).\n */\nexport function mapAXPPropertyToWidgetProperty(\n property: AXPProperty,\n options: MapAXPPropertyToWidgetPropertyOptions,\n): AXPWidgetProperty {\n const { group, order, valuePathPrefix, resolveTitle, resolveDescription } = options;\n const path = valuePathPrefix ? `${valuePathPrefix}.${property.name}` : property.name;\n const iface = property.interface;\n const widgetType = iface?.type ?? 'text-editor';\n const description = resolveDescription?.(property);\n\n return {\n name: property.name,\n title: resolveTitle(property),\n ...(description !== undefined && description !== '' ? { description } : {}),\n group,\n order,\n schema: {\n dataType: property.dataType,\n interface: {\n path,\n name: property.name,\n type: widgetType,\n options: iface?.options ?? {},\n ...(iface?.triggers ? { triggers: iface.triggers } : {}),\n },\n },\n validations: property.validations,\n visible: true,\n };\n}\n\n//#endregion\n","import { AXP_WIDGETS_AI_CATEGORY, normalizeWidgetCategories } from './widget-categories';\nimport type { AXPWidgetConfig } from './widget.types';\n\n//#region ---- Helpers ----\n\n/**\n * True when the widget declares the AI category (see {@link AXP_WIDGETS_AI_CATEGORY}).\n */\nexport function hasAiWidgetCategory(config: AXPWidgetConfig): boolean {\n return normalizeWidgetCategories(config.categories).some((c) => c.name === AXP_WIDGETS_AI_CATEGORY.name);\n}\n\n//#endregion\n\n//#region ---- Public API ----\n\n/**\n * Resolves AI catalog visibility using {@link AXPWidgetConfig.aiCatalog} and the AI widget category.\n * - `exclude`: never listed.\n * - `include`: always listed (override when the widget cannot declare the AI category yet).\n * - `inherit` / omitted: listed only if {@link hasAiWidgetCategory} is true.\n */\nexport function isWidgetAiCatalogIncluded(config: AXPWidgetConfig): boolean {\n const mode = config.aiCatalog ?? 'inherit';\n\n if (mode === 'exclude') {\n return false;\n }\n if (mode === 'include') {\n return true;\n }\n return hasAiWidgetCategory(config);\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|