{"version":3,"file":"acorex-platform-layout-entity.mjs","sources":["../../../../libs/platform/layout/entity/src/lib/plugins/shared.ts","../../../../libs/platform/layout/entity/src/lib/plugins/types.ts","../../../../libs/platform/layout/entity/src/lib/entity-middleware/entity-modifier.context.ts","../../../../libs/platform/layout/entity/src/lib/entity-middleware/entity-provider.ts","../../../../libs/platform/layout/entity/src/lib/entity-middleware/entity-middleware.ts","../../../../libs/platform/layout/entity/src/lib/entity.config.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/related-column-metadata.resolver.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/related-column-enrichment.service.ts","../../../../libs/platform/layout/entity/src/lib/entity-registery.service.ts","../../../../libs/platform/layout/entity/src/lib/utils/hint-form-field-options.util.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/related-entity-converters/related-entity-include-columns.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-forms/entity-form-builder.service.ts","../../../../libs/platform/layout/entity/src/lib/commands/open-entity-details.command.ts","../../../../libs/platform/layout/entity/src/lib/commands/create-entity.command.ts","../../../../libs/platform/layout/entity/src/lib/commands/create-entity.command.definition.ts","../../../../libs/platform/layout/entity/src/lib/commands/update-entity.command.ts","../../../../libs/platform/layout/entity/src/lib/commands/view-entity-details.command.ts","../../../../libs/platform/layout/entity/src/lib/widgets/lookup-widget/lookup-display.util.ts","../../../../libs/platform/layout/entity/src/lib/components/entity-detail-popover.component.ts","../../../../libs/platform/layout/entity/src/lib/components/entity-detail-popover.component.html","../../../../libs/platform/layout/entity/src/lib/components/entity-detail-popover.service.ts","../../../../libs/platform/layout/entity/src/lib/entity-storage-service.ts","../../../../libs/platform/layout/entity/src/lib/storage-middleware/storage-middleware.types.ts","../../../../libs/platform/layout/entity/src/lib/entity.service.ts","../../../../libs/platform/layout/entity/src/lib/components/entity-preload-filters-container.component.ts","../../../../libs/platform/layout/entity/src/lib/entities-list.datasource.ts","../../../../libs/platform/layout/entity/src/lib/entity-component-page-order.util.ts","../../../../libs/platform/layout/entity/src/lib/entity-data-seeder.ts","../../../../libs/platform/layout/entity/src/lib/entity-definition-crud.token.ts","../../../../libs/platform/layout/entity/src/lib/entity-list-paging.util.ts","../../../../libs/platform/layout/entity/src/lib/entity.viewmodel.ts","../../../../libs/platform/layout/entity/src/lib/entity-detail-list.viewmodel.ts","../../../../libs/platform/layout/entity/src/lib/entity-events/entity-event-dispatcher.service.ts","../../../../libs/platform/layout/entity/src/lib/entity-interface-property-order.util.ts","../../../../libs/platform/layout/entity/src/lib/entity-list-expanded-rows.util.ts","../../../../libs/platform/layout/entity/src/lib/entity-list-persistence.util.ts","../../../../libs/platform/layout/entity/src/lib/entity-master-create.viewmodel.ts","../../../../libs/platform/layout/entity/src/lib/entity-master-list.viewmodel.ts","../../../../libs/platform/layout/entity/src/lib/workflows/delete-entity.workflow.ts","../../../../libs/platform/layout/entity/src/lib/entity-master-update.viewmodel.ts","../../../../libs/platform/layout/entity/src/lib/workflows/modify-section.workflow.ts","../../../../libs/platform/layout/entity/src/lib/entity-master-single.viewmodel.ts","../../../../libs/platform/layout/entity/src/lib/entity-preload-filters.viewmodel.ts","../../../../libs/platform/layout/entity/src/lib/entity-storage-aggregate.util.ts","../../../../libs/platform/layout/entity/src/lib/entity-storage-query-pipeline.ts","../../../../libs/platform/layout/entity/src/lib/features/attachments-plugin/attachments.plugin.ts","../../../../libs/platform/layout/entity/src/lib/features/attachments-plugin/attachments-page/attachments-page-component.provider.ts","../../../../libs/platform/layout/entity/src/lib/features/attachments-plugin/attachments-plugin.module.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-category/category-tree.service.ts","../../../../libs/platform/layout/entity/src/lib/widgets/entity-category-widget/entity-category-tree-selector.component.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-category/entity-category-batch-resolver.service.ts","../../../../libs/platform/layout/entity/src/lib/widgets/entity-category-widget/entity-category-widget-column.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/entity-category-widget/truncated-breadcrumb.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/entity-category-widget/entity-category-widget-edit.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/entity-category-widget/entity-category-widget-view.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/entity-category-widget/entity-category-widget.config.ts","../../../../libs/platform/layout/entity/src/lib/widgets/entity-definition-provider-widget/entity-definition-provider-widget.config.ts","../../../../libs/platform/layout/entity/src/lib/widgets/entity-definition-provider-widget/entity-definition-provider-widget-edit.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/entity-definition-provider-widget/entity-definition-provider-widget-edit.component.html","../../../../libs/platform/layout/entity/src/lib/widgets/entity-list/entity-list.mappers.ts","../../../../libs/platform/layout/entity/src/lib/widgets/entity-list/entity-list-table.service.ts","../../../../libs/platform/layout/entity/src/lib/widgets/entity-list/entity-list-toolbar.service.ts","../../../../libs/platform/layout/entity/src/lib/widgets/entity-list/entity-list-widget-view.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/entity-list/entity-list-widget.config.ts","../../../../libs/platform/layout/entity/src/lib/widgets/page-component/page-component-widget-view.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/page-component/page-component-widget.config.ts","../../../../libs/platform/layout/entity/src/lib/widgets/lookup-widget/lookup-widget-view.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/lookup-widget/lookup-create-context.util.ts","../../../../libs/platform/layout/entity/src/lib/widgets/lookup-widget/entity-data-selector-row-actions.service.ts","../../../../libs/platform/layout/entity/src/lib/widgets/lookup-widget/entity-data-selector.service.ts","../../../../libs/platform/layout/entity/src/lib/widgets/lookup-widget/looks/lookup-widget-look-base.interface.ts","../../../../libs/platform/layout/entity/src/lib/widgets/lookup-widget/looks/lookup-widget-select.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/lookup-widget/looks/lookup-widget-tagbox.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/lookup-widget/lookup-widget-edit.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/lookup-widget/lookup-widget-column.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/lookup-widget/lookup-widget-column.component.html","../../../../libs/platform/layout/entity/src/lib/widgets/lookup-widget/lookup-widget.config.ts","../../../../libs/platform/layout/entity/src/lib/widgets/lookup-widget/lookup-filter-options/lookup-filter-options-widget.config.ts","../../../../libs/platform/layout/entity/src/lib/widgets/lookup-widget/lookup-filter-options/lookup-filter-options-widget-editor.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/lookup-widget/lookup-filter-options/lookup-filter-options-widget-editor.component.html","../../../../libs/platform/layout/entity/src/lib/widgets/multi-source-selector-widget/multi-source-selector-widget.types.ts","../../../../libs/platform/layout/entity/src/lib/widgets/multi-source-selector-widget/multi-source-definition.provider.ts","../../../../libs/platform/layout/entity/src/lib/widgets/multi-source-selector-widget/multi-source-selector-widget.config.ts","../../../../libs/platform/layout/entity/src/lib/widgets/multi-source-selector-widget/multi-source-federated-search.service.ts","../../../../libs/platform/layout/entity/src/lib/widgets/multi-source-selector-widget/multi-source-selector.service.ts","../../../../libs/platform/layout/entity/src/lib/widgets/multi-source-selector-widget/multi-source-selector.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/multi-source-selector-widget/multi-source-selector-widget-edit.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/multi-source-selector-widget/multi-source-selector-widget-view.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/multi-source-selector-widget/multi-source-selector-widget-column.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/file-uploader-widget/webhook.key.ts","../../../../libs/platform/layout/entity/src/lib/widgets/file-uploader-widget/file-list/commands/edit-file-uploader.command.ts","../../../../libs/platform/layout/entity/src/lib/widgets/file-uploader-widget/file-list/file-list.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/file-uploader-widget/file-list/file-list.component.html","../../../../libs/platform/layout/entity/src/lib/widgets/file-uploader-widget/file-uploader-dirty.util.ts","../../../../libs/platform/layout/entity/src/lib/widgets/file-uploader-widget/file-uploader-entity-files.util.ts","../../../../libs/platform/layout/entity/src/lib/widgets/file-uploader-widget/file-uploader-trace.constants.ts","../../../../libs/platform/layout/entity/src/lib/widgets/file-uploader-widget/file-uploader-lazy-hydrate.util.ts","../../../../libs/platform/layout/entity/src/lib/widgets/file-uploader-widget/file-uploader-load-files.query.ts","../../../../libs/platform/layout/entity/src/lib/widgets/file-uploader-widget/file-uploader-save-files.command.ts","../../../../libs/platform/layout/entity/src/lib/widgets/file-uploader-widget/file-uploader-widget.types.ts","../../../../libs/platform/layout/entity/src/lib/widgets/file-uploader-widget/file-uploader-widget-column.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/file-uploader-widget/file-uploader-widget-column.component.html","../../../../libs/platform/layout/entity/src/lib/widgets/file-uploader-widget/file-uploader-widget-edit.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/file-uploader-widget/file-uploader-widget-view.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/file-uploader-widget/file-uploader-widget.config.ts","../../../../libs/platform/layout/entity/src/lib/widgets/file-uploader-widget/file-uploader-widget.service.ts","../../../../libs/platform/layout/entity/src/lib/widgets/selector-structure-widget/selector-structure-widget-column.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/selector-structure-widget/selector-structure-widget-edit.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/selector-structure-widget/selector-structure-widget-view.component.ts","../../../../libs/platform/layout/entity/src/lib/widgets/selector-structure-widget/selector-structure-widget.config.ts","../../../../libs/platform/layout/entity/src/lib/widget-definition.provider.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/details-view-badge-status.service.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/layout-adapter-builder.service.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/related-entity-converters/base-related-entity-converter.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/related-entity-converters/page-component-converter.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/related-entity-converters/page-details-converter.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/related-entity-converters/page-list-converter.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/related-entity-converters/tab-details-converter.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/related-entity-converters/tab-list-converter.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/related-entity-converter-factory.service.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/main-entity-content-builder.service.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-details/layout-adapter-factory.service.ts","../../../../libs/platform/layout/entity/src/lib/entity-details-view.adapter-loader.service.ts","../../../../libs/platform/layout/entity/src/lib/guards/entity-preload-filter.guard.ts","../../../../libs/platform/layout/entity/src/lib/middlewares/event-dispatch.middleware.ts","../../../../libs/platform/layout/entity/src/lib/middlewares/column-width.middleware.ts","../../../../libs/platform/layout/entity/src/lib/middlewares/layout-ordering-config.service.ts","../../../../libs/platform/layout/entity/src/lib/middlewares/column-ordering.middleware.ts","../../../../libs/platform/layout/entity/src/lib/middlewares/layout-ordering.middleware.ts","../../../../libs/platform/layout/entity/src/lib/middlewares/search-result-description.middleware.ts","../../../../libs/platform/layout/entity/src/lib/middlewares/default-multi-language.middleware.ts","../../../../libs/platform/layout/entity/src/lib/middlewares/default-card-layout.middleware.ts","../../../../libs/platform/layout/entity/src/lib/middlewares/crud.middleware.ts","../../../../libs/platform/layout/entity/src/lib/search-definition-command.provider.ts","../../../../libs/platform/layout/entity/src/lib/entity-search-definition-lazy-resolver.service.ts","../../../../libs/platform/layout/entity/src/lib/search-definition.provider.ts","../../../../libs/platform/layout/entity/src/lib/storage-middleware/storage-middleware.tokens.ts","../../../../libs/platform/layout/entity/src/lib/storage-middleware/storage-middleware.wrapper.ts","../../../../libs/platform/layout/entity/src/lib/workflows/create-entity.workflow.ts","../../../../libs/platform/layout/entity/src/lib/workflows/modify-entity.workflow.ts","../../../../libs/platform/layout/entity/src/lib/workflows/show-details.workflow.ts","../../../../libs/platform/layout/entity/src/lib/services/entity-list-return-url-capture.service.ts","../../../../libs/platform/layout/entity/src/lib/workflows/show-file-uploader-popup.workflow.ts","../../../../libs/platform/layout/entity/src/lib/workflows/show-list.workflow.ts","../../../../libs/platform/layout/entity/src/lib/entity.module.ts","../../../../libs/platform/layout/entity/src/lib/provide-entity.ts","../../../../libs/platform/layout/entity/src/lib/queries/get-entity-details.query.ts","../../../../libs/platform/layout/entity/src/lib/utils.ts","../../../../libs/platform/layout/entity/src/acorex-platform-layout-entity.ts"],"sourcesContent":["import { AXPEntityModifierContext } from '../entity-middleware/entity-modifier.types';\n\nexport function ensureListActions(ctx: AXPEntityModifierContext) {\n  ctx.interfaces.update((i) => {\n    const next: any = i ?? {};\n    next.master = next.master ?? {};\n    next.master.list = next.master.list ?? { actions: [], views: [] };\n    next.master.list.actions = next.master.list.actions ?? [];\n    return next;\n  });\n}\n\nexport function actionExists(actions: any[] | undefined, commandName: string, name?: string): boolean {\n  if (!actions) return false;\n  return actions.some((a) => {\n    const cmd = typeof a.command === 'object' ? a.command?.name : a.command;\n    if (name && a.name) {\n      return a.name === name;\n    }\n    return cmd === commandName;\n  });\n}\n\n//#region ----   Layout Helpers (Safe / Shared)   ----\n\nexport interface AXPEntityLayoutSectionLike {\n  id: string;\n}\n\nexport interface AXPEntityLayoutPropertyLike {\n  name: string;\n}\n\nexport interface AXPEntityLayoutLike<\n  TSection extends AXPEntityLayoutSectionLike = AXPEntityLayoutSectionLike,\n  TProperty extends AXPEntityLayoutPropertyLike = AXPEntityLayoutPropertyLike,\n> {\n  sections: TSection[];\n  properties?: TProperty[];\n}\n\n/** Layout order for the shared appearance section (after entity-defined groups). */\nexport const AXP_APPEARANCE_SECTION_ORDER = 900;\n\n/** Layout order for the shared classification section (after appearance). */\nexport const AXP_CLASSIFICATION_SECTION_ORDER = 910;\n\n/**\n * Clones `sections` and `properties` arrays to prevent accidental cross-interface mutations.\n * Many entity definitions reuse the same array instances across create/update/single interfaces.\n */\nexport function cloneLayoutArrays<TLayout extends AXPEntityLayoutLike>(\n  layout: TLayout,\n): TLayout & { properties: NonNullable<TLayout['properties']> } {\n  return {\n    ...layout,\n    sections: [...layout.sections] as TLayout['sections'],\n    properties: [...(layout.properties ?? [])] as NonNullable<TLayout['properties']>,\n  };\n}\n\nexport function ensureLayoutSection<TLayout extends AXPEntityLayoutLike>(\n  layout: TLayout,\n  section: TLayout['sections'][number],\n): void {\n  const existingIndex = layout.sections.findIndex((s) => s.id === section.id);\n  if (existingIndex === -1) {\n    layout.sections = [...layout.sections, section] as TLayout['sections'];\n    return;\n  }\n\n  const incomingOrder = (section as { order?: number }).order;\n  if (incomingOrder == null) {\n    return;\n  }\n\n  const existing = layout.sections[existingIndex] as { order?: number };\n  const mergedOrder = Math.max(existing.order ?? 0, incomingOrder);\n  layout.sections = [...layout.sections] as TLayout['sections'];\n  layout.sections[existingIndex] = { ...existing, ...section, order: mergedOrder } as TLayout['sections'][number];\n}\n\nexport function ensureLayoutPropertyView<TLayout extends AXPEntityLayoutLike>(\n  layout: TLayout & { properties: NonNullable<TLayout['properties']> },\n  prop: NonNullable<TLayout['properties']>[number],\n): void {\n  if (!layout.properties.some((p) => p.name === prop.name)) {\n    layout.properties = [...layout.properties, prop];\n  }\n}\n\n//#endregion\n","import { InjectionToken } from '@angular/core';\nimport { AXPEntityModifierContext } from '../entity-middleware/entity-modifier.types';\n\nexport interface AXPEntityActionPlugin {\n    name: string;\n    order?: number;\n    apply: (ctx: AXPEntityModifierContext, options?: any) => Promise<void> | void;\n}\n\nexport const AXP_ENTITY_ACTION_PLUGIN = new InjectionToken<AXPEntityActionPlugin[]>(\n    'AXP_ENTITY_ACTION_PLUGIN'\n);\n\n\n","\nimport { AXPEntity, AXPEntityMasterListView } from '@acorex/platform/layout/entity-contracts';\nimport { AXPEntityModifierContext } from './entity-modifier.types';\n\nfunction ensureMasterListView(entity: AXPEntity): AXPEntityMasterListView {\n  entity.interfaces ??= {};\n  entity.interfaces.master ??= {};\n  if (!entity.interfaces.master.list) {\n    entity.interfaces.master.list = { views: [] };\n  }\n  return entity.interfaces.master.list;\n}\n\nfunction ensureMasterListLayouts(list: AXPEntityMasterListView): NonNullable<AXPEntityMasterListView['layouts']> {\n  list.layouts ??= {};\n  return list.layouts;\n}\n\nexport function createModifierContext(entity: AXPEntity): AXPEntityModifierContext {\n  const ctx: AXPEntityModifierContext = {\n    entity,\n\n    plugins: {\n      list: () => entity.plugins ?? [],\n      add: (...items) => {\n        entity.plugins ??= [];\n        entity.plugins.push(...items);\n        return ctx;\n      },\n      remove: (predicate) => {\n        if (entity.plugins) entity.plugins = entity.plugins.filter((p) => !predicate(p));\n        return ctx;\n      },\n      find: (name) => ({\n        get: () => entity.plugins?.find((p) => p.name === name),\n        update: (updater) => {\n          const index = entity.plugins?.findIndex((p) => p.name === name);\n          if (index !== undefined && index !== -1 && entity.plugins)\n            entity.plugins[index] = updater(entity.plugins[index]);\n          return ctx;\n        },\n      }),\n    },\n\n    title: {\n      get: () => entity.title,\n      set: (newTitle) => {\n        entity.title = newTitle;\n        return ctx;\n      },\n    },\n\n    module: {\n      get: () => entity.module,\n      set: (newValue) => {\n        entity.module = newValue;\n        return ctx;\n      },\n    },\n\n    name: {\n      get: () => entity.name,\n      set: (newValue) => {\n        entity.name = newValue;\n        return ctx;\n      },\n    },\n\n    parentKey: {\n      get: () => entity.parentKey,\n      set: (newValue) => {\n        entity.parentKey = newValue;\n        return ctx;\n      },\n    },\n\n    category: {\n      get: () => entity.category,\n      update: (updater) => {\n        entity.category = updater(entity.category);\n        return ctx;\n      },\n    },\n\n    properties: {\n      list: () => entity.properties,\n      add: (...props) => {\n        entity.properties.push(...props);\n        return ctx;\n      },\n      remove: (predicate) => {\n        entity.properties = entity.properties.filter((p) => !predicate(p));\n        return ctx;\n      },\n      find: (name) => ({\n        get: () => entity.properties.find((p) => p.name === name),\n        update: (updater) => {\n          const index = entity.properties.findIndex((p) => p.name === name);\n          if (index !== -1) entity.properties[index] = updater(entity.properties[index]);\n          return ctx;\n        },\n      }),\n    },\n\n    columns: {\n      list: () => entity.columns,\n      add: (...cols) => {\n        entity.columns ??= [];\n        entity.columns.push(...cols);\n        return ctx;\n      },\n      remove: (predicate) => {\n        if (entity.columns) entity.columns = entity.columns.filter((c) => !predicate(c));\n        return ctx;\n      },\n      find: (name) => ({\n        get: () => entity.columns?.find((c) => c.name === name),\n        update: (updater) => {\n          const index = entity.columns?.findIndex((c) => c.name === name);\n          if (index !== undefined && index !== -1 && entity.columns)\n            entity.columns[index] = updater(entity.columns[index]);\n          return ctx;\n        },\n      }),\n    },\n\n    formats: {\n      get: () => entity.formats,\n      update: (updater) => {\n        entity.formats = updater(entity.formats);\n        return ctx;\n      },\n    },\n\n    relatedEntities: {\n      list: () => entity.relatedEntities,\n      add: (...items) => {\n        entity.relatedEntities ??= [];\n        entity.relatedEntities.push(...items);\n        return ctx;\n      },\n      remove: (predicate) => {\n        if (entity.relatedEntities) entity.relatedEntities = entity.relatedEntities.filter((r) => !predicate(r));\n        return ctx;\n      },\n    },\n\n    groups: {\n      list: () => entity.groups,\n      add: (...items) => {\n        entity.groups ??= [];\n        entity.groups.push(...items);\n        return ctx;\n      },\n      remove: (predicate) => {\n        if (entity.groups) entity.groups = entity.groups.filter((g) => !predicate(g));\n        return ctx;\n      },\n    },\n\n    commands: {\n      get: () => entity.commands,\n      update: (updater) => {\n        entity.commands = updater(entity.commands);\n        return ctx;\n      },\n    },\n\n    queries: {\n      get: () => entity.queries,\n      update: (updater) => {\n        entity.queries = updater(entity.queries);\n        return ctx;\n      },\n    },\n\n    validations: {\n      get: () => entity.validations,\n      update: (updater) => {\n        entity.validations = updater(entity.validations);\n        return ctx;\n      },\n    },\n\n    interfaces: {\n      get: () => entity.interfaces,\n      update: (updater) => {\n        entity.interfaces = updater(entity.interfaces);\n        return ctx;\n      },\n\n      master: {\n        get: () => entity.interfaces?.master,\n        update: (updater) => {\n          entity.interfaces ??= {};\n          entity.interfaces.master = updater(entity.interfaces.master);\n          return ctx;\n        },\n\n        list: {\n          get: () => entity.interfaces?.master?.list,\n          update: (updater) => {\n            entity.interfaces ??= {};\n            entity.interfaces.master ??= {};\n            entity.interfaces.master.list = updater(entity.interfaces.master.list);\n            return ctx;\n          },\n\n          card: {\n            get: () => entity.interfaces?.master?.list?.layouts?.card,\n            set: (layout) => {\n              const list = ensureMasterListView(entity);\n              ensureMasterListLayouts(list).card = layout;\n              return ctx;\n            },\n            update: (updater) => {\n              const list = ensureMasterListView(entity);\n              const layouts = ensureMasterListLayouts(list);\n              layouts.card = updater(layouts.card);\n              return ctx;\n            },\n            remove: () => {\n              const layouts = entity.interfaces?.master?.list?.layouts;\n              if (layouts?.card) {\n                delete layouts.card;\n              }\n              return ctx;\n            },\n          },\n        },\n\n        create: {\n          get: () => entity.interfaces?.master?.create,\n          update: (updater) => {\n            entity.interfaces ??= {};\n            entity.interfaces.master ??= {};\n            entity.interfaces.master.create = updater(entity.interfaces.master.create);\n            return ctx;\n          },\n        },\n        modify: {\n          get: () => entity.interfaces?.master?.update,\n          update: (updater) => {\n            entity.interfaces ??= {};\n            entity.interfaces.master ??= {};\n            entity.interfaces.master.update = updater(entity.interfaces.master.update);\n            return ctx;\n          },\n        },\n        single: {\n          get: () => entity.interfaces?.master?.single,\n          update: (updater) => {\n            entity.interfaces ??= {};\n            entity.interfaces.master ??= {};\n            entity.interfaces.master.single = updater(entity.interfaces.master.single);\n            return ctx;\n          },\n        },\n      },\n\n      detail: {\n        get: () => entity.interfaces?.detail,\n        update: (updater) => {\n          entity.interfaces ??= {};\n          entity.interfaces.detail = updater(entity.interfaces.detail);\n          return ctx;\n        },\n\n        list: {\n          get: () => entity.interfaces?.detail?.list,\n          update: (updater) => {\n            entity.interfaces ??= {};\n            entity.interfaces.detail ??= {};\n            entity.interfaces.detail.list = updater(entity.interfaces.detail.list);\n            return ctx;\n          },\n        },\n      },\n    },\n\n    toEntity: () => entity,\n  };\n\n  return ctx;\n}\n","import { InjectionToken } from '@angular/core';\nimport { AXPEntityModifierProvider } from './entity-modifier.types';\n\nexport const AXP_ENTITY_MODIFIER = new InjectionToken<AXPEntityModifierProvider[]>('AXP_ENTITY_MODIFIER');\n","\nimport { AXPEntity } from '@acorex/platform/layout/entity-contracts';\nimport { inject, Injectable, Injector, runInInjectionContext } from '@angular/core';\n\nimport { AXP_ENTITY_ACTION_PLUGIN, AXPEntityActionPlugin } from '../plugins';\nimport { createModifierContext } from './entity-modifier.context';\nimport { AXPEntityModifier, AXPEntityModifierProvider } from './entity-modifier.types';\nimport { AXP_ENTITY_MODIFIER } from './entity-provider';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPEntityMiddleware {\n  //#region ----   Fields   ----\n\n  private exactModifiers = new Map<string, { modifier: AXPEntityModifier; order: number }>();\n  private patternModifiers: Array<{ pattern: RegExp; modifier: AXPEntityModifier; order: number }> = [];\n  protected providedModifiers: AXPEntityModifierProvider[] = inject(AXP_ENTITY_MODIFIER, { optional: true }) || [];\n  protected providedActionPlugins: AXPEntityActionPlugin[] = inject(AXP_ENTITY_ACTION_PLUGIN, { optional: true }) || [];\n  protected injector: Injector = inject(Injector);\n\n  //#endregion\n\n  //#region ----   Constructor   ----\n\n  constructor() {\n    for (const { entityName, modifier, order } of this.providedModifiers) {\n      this.register(entityName, modifier, order);\n    }\n  }\n\n  //#endregion\n\n  //#region ----   Registration Methods   ----\n\n  register(entityName: string | RegExp, modifier: AXPEntityModifier, order?: number): void {\n    const resolvedOrder = order ?? 0;\n\n    if (entityName instanceof RegExp) {\n      this.patternModifiers.push({ pattern: this.normalizeRegExp(entityName), modifier, order: resolvedOrder });\n      return;\n    }\n\n    if (entityName.includes('*')) {\n      const pattern = this.wildcardToRegExp(entityName);\n      this.patternModifiers.push({ pattern, modifier, order: resolvedOrder });\n      return;\n    }\n\n    this.exactModifiers.set(entityName, { modifier, order: resolvedOrder });\n  }\n\n  //#endregion\n\n  //#region ----   Processing   ----\n\n  async process(entity: AXPEntity): Promise<AXPEntity> {\n    const context = createModifierContext(entity);\n    const steps: Array<{ order: number; run: () => void | Promise<void> }> = [];\n\n    const exact = this.exactModifiers.get(entity.name);\n    if (exact) {\n      steps.push(this.createModifierStep(exact, context));\n    }\n\n    for (const entry of this.patternModifiers) {\n      if (entry.pattern.test(entity.name)) {\n        steps.push(this.createModifierStep(entry, context));\n      }\n    }\n\n    const entityPlugins = entity.plugins ?? [];\n    for (const pluginRef of entityPlugins) {\n      const contrib = this.providedActionPlugins.find((x) => x.name === pluginRef.name);\n      if (contrib) {\n        steps.push(this.createPluginStep(contrib, pluginRef.name, context));\n      }\n    }\n\n    const sorted = steps.sort((a, b) => a.order - b.order);\n    for (const step of sorted) {\n      try {\n        await runInInjectionContext(this.injector, step.run);\n      } catch (err) {\n        console.error('[AXPEntityMiddleware] entity processing step failed:', err);\n      }\n    }\n\n    return context.toEntity();\n  }\n\n  //#endregion\n\n  //#region ----   Step Factories   ----\n\n  private createModifierStep(\n    entry: { modifier: AXPEntityModifier; order: number },\n    context: ReturnType<typeof createModifierContext>,\n  ): { order: number; run: () => void } {\n    return {\n      order: entry.order,\n      run: () => entry.modifier(context),\n    };\n  }\n\n  private createPluginStep(\n    contrib: AXPEntityActionPlugin,\n    pluginName: string,\n    context: ReturnType<typeof createModifierContext>,\n  ): { order: number; run: () => Promise<void> } {\n    return {\n      order: contrib.order ?? 0,\n      run: async () => {\n        const pluginRef = context.plugins.find(pluginName).get();\n        if (!pluginRef) {\n          return;\n        }\n        await contrib.apply(context, pluginRef.options);\n      },\n    };\n  }\n\n  //#endregion\n\n  //#region ----   Helpers   ----\n\n  private wildcardToRegExp(pattern: string): RegExp {\n    const escaped = pattern.replace(/[.+?^${}()|\\[\\]\\\\]/g, '\\\\$&');\n    const regexStr = `^${escaped.replace(/\\*/g, '.*')}$`;\n    return new RegExp(regexStr);\n  }\n\n  private normalizeRegExp(rx: RegExp): RegExp {\n    const flags = rx.flags.replace('g', '');\n    return new RegExp(rx.source, flags);\n  }\n\n  //#endregion\n}\n","\nimport { AXPEntity } from '@acorex/platform/layout/entity-contracts';\nimport { inject, Injectable, InjectionToken, Type } from '@angular/core';\n\nexport interface AXPEntityConfigs {\n  viewers: {\n    root: () => Type<any> | Promise<Type<any>>;\n    detail: {\n      list: () => Type<any> | Promise<Type<any>>;\n    };\n    master: {\n      single: () => Type<any> | Promise<Type<any>>;\n      details: () => Type<any> | Promise<Type<any>>;\n      create: () => Type<any> | Promise<Type<any>>;\n      modify: () => Type<any> | Promise<Type<any>>;\n      list: () => Type<any> | Promise<Type<any>>;\n    };\n  };\n}\n\nexport const AXP_ENTITY_CONFIG_TOKEN = new InjectionToken<AXPEntityConfigs>('AXP_ENTITY_CONFIG_TOKEN');\n\n/** Raw input from entity loaders' list(). */\nexport type AXPEntityListInput = { name: string; module: string };\n\n/** Output from listAll(); fullName is populated by the resolver. */\nexport type AXPEntityListEntry = { name: string; module: string; fullName: string };\n\nexport interface AXPEntityDefinitionLoader {\n  get(moduleName: string, entityName: string): Promise<AXPEntity | null>;\n  list(): Promise<AXPEntityListInput[]>;\n}\n\nexport const AXP_ENTITY_DEFINITION_LOADER = new InjectionToken<AXPEntityDefinitionLoader>(\n  'AXP_ENTITY_DEFINITION_PROVIDER',\n);\n\n@Injectable({ providedIn: 'root' })\nexport class AXPEntityResolver {\n  private providers = inject(AXP_ENTITY_DEFINITION_LOADER);\n\n  /** Aggregates list() from all entity loaders (including lazy). Populates fullName. */\n  async listAll(): Promise<AXPEntityListEntry[]> {\n    const loaders = await this.resolveLoaders();\n    const results: AXPEntityListEntry[] = [];\n    for (const loader of loaders) {\n      const items = await loader.list();\n      for (const it of items) {\n        results.push({\n          name: it.name,\n          module: it.module,\n          fullName: `${it.module}.${it.name}`,\n        });\n      }\n    }\n    return results;\n  }\n\n  async get(moduleName: string, entityName: string): Promise<AXPEntity | null> {\n    const loaders = await this.resolveLoaders();\n    for (const loader of loaders) {\n      const entity = await loader.get(moduleName, entityName);\n      if (entity) return entity;\n    }\n    return null;\n  }\n\n  private async resolveLoaders(): Promise<AXPEntityDefinitionLoader[]> {\n    const raw = this.providers;\n    if (!raw) return [];\n    const arr = Array.isArray(raw) ? raw : [raw];\n    const loaders: AXPEntityDefinitionLoader[] = [];\n    for (const p of arr) {\n      const loader = p instanceof Promise ? await p : p;\n      loaders.push(loader);\n    }\n    return loaders;\n  }\n}\n","\nimport { AXPEntity, AXPEntityTableColumn } from '@acorex/platform/layout/entity-contracts';\nimport { Injectable, inject } from '@angular/core';\nimport { AXPEntityResolver } from '../../entity.config';\n\n//#region ----   Types   ----\n\nexport interface AXPRelatedColumnMetadata {\n  title?: string;\n  showAs?: AXPEntityTableColumn['showAs'];\n}\n\n//#endregion\n\nconst LOOKUP_WIDGET_TYPE = 'lookup-editor';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPRelatedColumnMetadataResolver {\n  private readonly entityLoader = inject(AXPEntityResolver);\n\n  /**\n   * Resolves title and showAs for a column that references a related entity property via dotted path.\n   * Uses relatedEntities when available; falls back to lookup expose when not.\n   */\n  async resolve(entity: AXPEntity, columnName: string): Promise<AXPRelatedColumnMetadata | null> {\n    if (!columnName.includes('.')) {\n      return null;\n    }\n\n    const parts = columnName.split(/\\.(.+)/);\n    if (parts.length < 2) {\n      return null;\n    }\n\n    const [dataPath, propName] = parts;\n\n    // Try relatedEntities first\n    const relatedEntities = entity.relatedEntities ?? [];\n    let related = relatedEntities.find((r) => r.persistence?.dataPath === dataPath);\n\n    // Fallback: find lookup property whose expose target matches this path\n    if (!related) {\n      const lookupEntity = this.findLookupEntityByExposeTarget(entity, dataPath, propName);\n      if (!lookupEntity) {\n        return null;\n      }\n      related = { entity: lookupEntity, persistence: { dataPath } };\n    }\n\n    const [moduleName, entityName] = related.entity.split('.');\n    const sourceEntity = await this.entityLoader.get(moduleName, entityName);\n\n    if (!sourceEntity) {\n      return null;\n    }\n\n    const sourceProp = sourceEntity.properties?.find((p) => p.name === propName);\n    if (!sourceProp) {\n      return null;\n    }\n\n    const title = sourceProp.title;\n    const showAs = this.deriveShowAs(sourceProp);\n\n    return { title, showAs };\n  }\n\n  /**\n   * Finds a lookup property whose expose target matches the dotted path.\n   * Returns the lookup's entity string (e.g. 'PersonCore.Person') or null.\n   */\n  private findLookupEntityByExposeTarget(\n    entity: AXPEntity,\n    dataPath: string,\n    propName: string\n  ): string | null {\n    const targetPath = `${dataPath}.${propName}`;\n\n    for (const prop of entity.properties ?? []) {\n      const iface = prop.schema?.interface;\n      if (iface?.type !== LOOKUP_WIDGET_TYPE) {\n        continue;\n      }\n\n      const expose = iface.options?.['expose'] as Array<{ source: string; target: string }> | undefined;\n      const match = expose?.find((e) => e.target === targetPath);\n\n      if (match) {\n        return (iface.options?.['entity'] as string) ?? null;\n      }\n    }\n\n    return null;\n  }\n\n  /**\n   * Derives showAs from source property schema.\n   * Passes through the full interface (type, options, children) for column display.\n   */\n  private deriveShowAs(prop: { schema?: { interface?: any } }): AXPRelatedColumnMetadata['showAs'] {\n    const iface = prop.schema?.interface;\n    if (!iface?.type) {\n      return undefined;\n    }\n\n    return {\n      type: iface.type,\n      options: {\n        ...(iface.options ?? {}),\n        ...(iface.children?.length && { children: iface.children }),\n      },\n    };\n  }\n}\n","\nimport { AXPEntity, AXPEntityTableColumn } from '@acorex/platform/layout/entity-contracts';\nimport { Injectable, inject } from '@angular/core';\nimport { AXPRelatedColumnMetadataResolver } from './related-column-metadata.resolver';\n\nconst LOOKUP_WIDGET_TYPE = 'lookup-editor';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPRelatedColumnEnrichmentService {\n  private readonly metadataResolver = inject(AXPRelatedColumnMetadataResolver);\n\n  /**\n   * Enriches entity columns with:\n   * 1. dataPath for FK columns (e.g. fromPersonId) derived from lookup property schema\n   * 2. title and showAs from related entity properties for dotted paths (e.g. person.firstName)\n   */\n  async enrich(entity: AXPEntity): Promise<AXPEntity> {\n    const columns = entity.columns;\n    if (!columns?.length) {\n      return entity;\n    }\n\n    const enrichedColumns: AXPEntityTableColumn[] = [];\n\n    for (const column of columns) {\n      let enriched = { ...column };\n\n      // Derive dataPath for FK columns when missing\n      if (!enriched.options?.dataPath) {\n        const derivedDataPath = this.deriveDataPathForFkColumn(entity, column);\n        if (derivedDataPath) {\n          enriched = {\n            ...enriched,\n            options: { ...enriched.options, dataPath: derivedDataPath },\n          };\n        }\n      }\n\n      // Enrich title/showAs for dotted path columns\n      const needsMetadataEnrichment =\n        column.name.includes('.') && (!enriched.title || !enriched.showAs);\n\n      if (needsMetadataEnrichment) {\n        const metadata = await this.metadataResolver.resolve(entity, column.name);\n        if (metadata) {\n          enriched = {\n            ...enriched,\n            title: enriched.title ?? metadata.title,\n            showAs: enriched.showAs ?? metadata.showAs,\n          };\n        }\n      }\n\n      enrichedColumns.push(enriched);\n    }\n\n    return {\n      ...entity,\n      columns: enrichedColumns,\n    };\n  }\n\n  /**\n   * Derives dataPath for FK columns from lookup property schema.\n   * Uses expose.target where source matches textField (default 'title').\n   */\n  private deriveDataPathForFkColumn(\n    entity: AXPEntity,\n    column: AXPEntityTableColumn\n  ): string | null {\n    const prop = entity.properties?.find((p) => p.name === column.name);\n    if (!prop?.schema?.interface) {\n      return null;\n    }\n\n    const iface = prop.schema.interface;\n    if (iface.type !== LOOKUP_WIDGET_TYPE) {\n      return null;\n    }\n\n    const expose = iface.options?.['expose'] as Array<{ source: string; target: string }> | undefined;\n    const textField = (iface.options?.['textField'] as string) ?? 'title';\n\n    if (!expose?.length) {\n      return null;\n    }\n\n    const match = expose.find((e) => e.source === textField);\n    if (match) {\n      return match.target;\n    }\n\n    // Fallback: use first non-id expose\n    const fallback = expose.find((e) => e.source !== 'id');\n    return fallback?.target ?? null;\n  }\n}\n","import { AXPEntity } from '@acorex/platform/layout/entity-contracts';\nimport { AXPNotFoundError } from '@acorex/platform/common';\nimport { AXPModuleManifestRegistry } from '@acorex/platform/core';\nimport { inject, Injectable } from '@angular/core';\n// import { AXPEntityMiddleware } from './entity-middleware';\nimport { Subject } from 'rxjs';\nimport { AXPEntityMiddleware } from './entity-middleware/entity-middleware';\nimport { AXPEntityResolver } from './entity.config';\nimport { AXPRelatedColumnEnrichmentService } from './services/entity-details/related-column-enrichment.service';\n\nexport interface AXPEntityPreloadEntity {\n  module: string;\n  entity: string;\n}\n\nexport interface AXPEntityDefinitionPreloader {\n  preload(): AXPEntityPreloadEntity[];\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPEntityDefinitionRegistryService {\n  private middleware = inject(AXPEntityMiddleware);\n  private columnEnrichment = inject(AXPRelatedColumnEnrichmentService);\n  private onChanged = new Subject<{ name: string }>();\n\n  get onChanged$() {\n    return this.onChanged.asObservable();\n  }\n\n  // Stores AXPEntityConfig objects, keyed by a combination of module and entity name.\n  private entities = new Map<string, AXPEntity>();\n\n  // Entity resolver service for dynamically loading entity configurations.\n  private entityResolver = inject(AXPEntityResolver); // Assuming AXPEntityLoader is the correct type\n\n  //#region ----   Refresh APIs   ----\n\n  /**\n   * Force re-load and re-process entity definitions, then re-register them.\n   * Overloads:\n   *  - refresh(): refresh all registered entities\n   *  - refresh(fullName: string): refresh by fully-qualified name `<module>.<entity>`\n   *  - refresh(moduleName: string, entityName: string): refresh by parts\n   */\n  async refresh(): Promise<void>;\n  async refresh(fullName: string): Promise<void>;\n  async refresh(moduleName: string, entityName: string): Promise<void>;\n  async refresh(arg1?: string, arg2?: string): Promise<void> {\n    // No parameters: refresh all currently registered entities\n    if (typeof arg1 === 'undefined' && typeof arg2 === 'undefined') {\n      const keys = Array.from(this.entities.keys());\n      for (const key of keys) {\n        const [m, e] = key.split('.');\n        if (m && e) {\n          await this.refreshOne(m, e);\n        }\n      }\n      return;\n    }\n\n    // One parameter: treat as fully-qualified name\n    if (typeof arg1 === 'string' && typeof arg2 === 'undefined') {\n      const [moduleName, entityName] = arg1.split('.');\n      if (!moduleName || !entityName) {\n        throw new Error(`Invalid entity full name: ${arg1}`);\n      }\n      await this.refreshOne(moduleName, entityName);\n      return;\n    }\n\n    // Two parameters: module + entity\n    if (typeof arg1 === 'string' && typeof arg2 === 'string') {\n      await this.refreshOne(arg1, arg2);\n      return;\n    }\n  }\n\n  /** Executes the actual refresh for a single entity */\n  private async refreshOne(moduleName: string, entityName: string): Promise<void> {\n    const config = await this.entityResolver.get(moduleName, entityName);\n    if (!config) {\n      throw new Error(`Invalid entity name: ${moduleName}.${entityName}`);\n    }\n    const processedConfig = await this.middleware.process(config);\n    const enrichedConfig = await this.columnEnrichment.enrich(processedConfig);\n    this.register(enrichedConfig);\n  }\n\n  //#endregion\n\n  /**\n   * Registers a new entity configuration. Entities are identified uniquely by a combination\n   * of their module and name.\n   *\n   * @param config The configuration object of the entity to be registered.\n   */\n  register(config: AXPEntity): void {\n    const key = this.createEntityKey(config.module, config.name);\n    this.entities.set(key, config);\n    this.onChanged.next({ name: key });\n  }\n\n  /**\n   * Returns an array of all registered entity configurations.\n   *\n   * @returns An array of AXPEntity objects.\n   */\n  getAll(): AXPEntity[] {\n    return Array.from(this.entities.values());\n  }\n\n  /**\n   * Clear all registered entity configurations.\n   * Should be called when modules are cleared to prevent stale entity data.\n   * @param preserveModules Optional list of module names whose entities should be preserved\n   */\n  clear(preserveModules?: string[]): void {\n    if (preserveModules && preserveModules.length > 0) {\n      const preserveSet = new Set(preserveModules);\n      // Remove only entities from non-preserved modules\n      for (const [key, entity] of this.entities.entries()) {\n        if (!preserveSet.has(entity.module)) {\n          this.entities.delete(key);\n        }\n      }\n    } else {\n      this.entities.clear();\n    }\n    this.onChanged.next({ name: '' });\n  }\n\n  /**\n   * Resolves an entity configuration based on module and entity name. If the configuration\n   * is not already registered, attempts to load it dynamically. Throws an error if the\n   * entity cannot be found or loaded.\n   *\n   * @param moduleName The module name of the entity.\n   * @param entityName The name of the entity.\n   * @returns A promise resolving to the entity configuration.\n   * @throws Error if the entity configuration cannot be resolved.\n   */\n  async resolve(moduleName: string, entityName: string): Promise<AXPEntity> {\n    const key = this.createEntityKey(moduleName, entityName);\n    let config = this.entities.get(key) ?? null;\n\n    if (!config) {\n\n      try {\n        config = await this.entityResolver.get(moduleName, entityName);\n        if (config) {\n          const processedConfig = await this.middleware.process(config);\n          const enrichedConfig = await this.columnEnrichment.enrich(processedConfig);\n          this.register(enrichedConfig);\n          return enrichedConfig;\n        }\n      } catch (error) {\n        throw error; // Rethrow to allow error handling by caller\n      }\n\n      if (!config) {\n        throw new AXPNotFoundError(`Invalid entity name: ${key}`);\n      }\n    }\n    return config;\n  }\n\n  async exists(moduleName: string, entityName: string): Promise<boolean> {\n    const key = this.createEntityKey(moduleName, entityName);\n    return this.entities.has(key);\n  }\n\n  /**\n   * Creates a unique key for an entity based on its module and name.\n   *\n   * @param moduleName The module name of the entity.\n   * @param entityName The name of the entity.\n   * @returns The unique key for the entity.\n   */\n  private createEntityKey(moduleName: string, entityName: string): string {\n    return `${moduleName}.${entityName}`;\n  }\n}\n","import type { AXPMultiLanguageString } from '@acorex/platform/contracts';\n\n//#region ---- Hint form-field options ----\n\nexport interface HintFormFieldOptions {\n  hint: AXPMultiLanguageString;\n  hintDisplayMode: 'note' | 'icon';\n}\n\n/**\n * Maps entity property `description` (or any i18n key / multi-language payload) to `form-field`\n * widget options. Returns `undefined` when there is nothing to show.\n */\nexport function hintFormFieldOptionsFromDescription(\n  description: AXPMultiLanguageString | undefined | null,\n): HintFormFieldOptions | undefined {\n  if (description == null) {\n    return undefined;\n  }\n  if (typeof description === 'string' && description.trim() === '') {\n    return undefined;\n  }\n  return { hint: description, hintDisplayMode: 'icon' };\n}\n\n//#endregion\n","\nimport { AXPEntityTableColumn } from '@acorex/platform/layout/entity-contracts';\nimport { AXPExpressionEvaluatorScope, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { cloneDeep } from 'lodash-es';\n\n//#region ---- Types ----\n\nexport interface ResolvedRelatedEntityColumns {\n  /** When `columns` was `string[]`, or derived names when using table column defs */\n  includeColumns?: string[];\n  /** Evaluated `AXPEntityTableColumn[]` (`options.visible` string → boolean); drives list + toolbar when set */\n  relatedTableColumns?: AXPEntityTableColumn[];\n}\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction isRelatedEntityStringColumns(columns: string[] | AXPEntityTableColumn[]): columns is string[] {\n  return columns.length === 0 || typeof columns[0] === 'string';\n}\n\n/**\n * Property names from `AXPRelatedEntity.columns` (no expression evaluation).\n * Empty array means caller can treat as “no name filter” (show all allowed by entity).\n */\nexport function getRelatedEntityColumnNames(columns: string[] | AXPEntityTableColumn[] | undefined): string[] {\n  if (!columns?.length) {\n    return [];\n  }\n  if (isRelatedEntityStringColumns(columns)) {\n    return [...columns];\n  }\n  return (columns as AXPEntityTableColumn[]).map((c) => c.name);\n}\n\nfunction isTruthyVisible(value: unknown): boolean {\n  if (value === true) {\n    return true;\n  }\n  if (value === false || value === null || value === undefined) {\n    return false;\n  }\n  if (typeof value === 'string') {\n    const t = value.trim().toLowerCase();\n    return t !== '' && t !== 'false' && t !== '0';\n  }\n  if (typeof value === 'number') {\n    return value !== 0 && !Number.isNaN(value);\n  }\n  return Boolean(value);\n}\n\n//#endregion\n\n//#region ---- Public API ----\n\n/**\n * Resolves `AXPRelatedEntity.columns` for `entity-list`:\n * - `string[]` → `includeColumns` only (legacy).\n * - `AXPEntityTableColumn[]` → evaluates `options.visible` when it is a string (parent detail context),\n *   drops invisible columns, and returns `relatedTableColumns` + matching `includeColumns`.\n */\nexport async function resolveRelatedEntityColumns(\n  columns: string[] | AXPEntityTableColumn[] | undefined,\n  expressionEvaluator: AXPExpressionEvaluatorService,\n  scope: AXPExpressionEvaluatorScope,\n): Promise<ResolvedRelatedEntityColumns> {\n  if (!columns?.length) {\n    return {};\n  }\n\n  if (isRelatedEntityStringColumns(columns)) {\n    return { includeColumns: getRelatedEntityColumnNames(columns) };\n  }\n\n  const relatedTableColumns: AXPEntityTableColumn[] = [];\n\n  for (const raw of columns) {\n    const col = cloneDeep(raw);\n\n    let visible: boolean | string | undefined = col.options?.visible;\n    if (visible === undefined) {\n      visible = true;\n    } else if (typeof visible === 'string') {\n      const evaluated = await expressionEvaluator.evaluate(visible, scope);\n      visible = isTruthyVisible(evaluated);\n    }\n\n    if (visible === false) {\n      continue;\n    }\n\n    col.options = { ...col.options, visible: true };\n    relatedTableColumns.push(col);\n  }\n\n  return {\n    relatedTableColumns,\n    includeColumns: relatedTableColumns.map((c) => c.name),\n  };\n}\n\n//#endregion\n","import { AXPGridLayoutOptions, type AXPWidgetNode, AXPWidgetsCatalog } from '@acorex/platform/contracts';\nimport { AXPEntity, AXPEntityAction, AXPEntityCommandScope, AXPEntityPage, AXPEntityProperty, AXPEntityPropertyView, AXPEntitySectionView, AXPRelatedEntity, collectNestedCreateHiddenProperties, mergeForeignKeyFieldIntoCreateActions } from '@acorex/platform/layout/entity-contracts';\nimport { AXPopupSizeType } from '@acorex/components/popup';\n\nimport {\n  AXPDialogRef,\n  AXPFieldsetContainerOptions,\n  AXPLayoutBuilderService,\n  AXPWidgetNodeExtendedProperties,\n  IActionBuilder,\n  IFormFieldBuilder,\n  IGridContainerBuilder,\n  IStepWizardBuilder,\n  IWidgetBuilder,\n} from '@acorex/platform/layout/builder';\n\nimport { AXPDeviceService, AXPExpressionEvaluatorScope, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { inject, Injectable } from '@angular/core';\nimport { cloneDeep, get, merge } from 'lodash-es';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\n\nimport { hintFormFieldOptionsFromDescription } from '../../utils/hint-form-field-options.util';\nimport { resolveRelatedEntityColumns } from '../entity-details/related-entity-converters/related-entity-include-columns';\n\n/** Registered widget name for entity create/update step wizard (dialog footer uses `widget:${name}.next`). */\nconst ENTITY_FORM_STEP_WIZARD_NAME = 'entityFormStepWizard';\n\n/** Footer command: validate, persist main entity, merge context, advance wizard. */\nexport const ENTITY_FORM_ACTION_FIRST_STEP_CONTINUE = 'entity-form-first-step-continue';\n\n/** Footer command: close dialog (data already saved per step). */\nconst ENTITY_FORM_ACTION_DONE = 'entity-form-done';\n\n/** Footer command: sync page widgets then advance wizard. */\nconst ENTITY_FORM_ACTION_NEXT_STEP = 'entity-form-next-step';\n\n//#region ----   Fluent Builder Types   ----\n\ntype EntityInterfaceKind = 'create' | 'update' | 'single';\n\ninterface IEntitySelectorStage {\n  /** Select target entity using \"module.entity\" format */\n  entity(fullName: string): IInterfaceSelectorStage;\n}\n\ninterface IInterfaceSelectorStage {\n  /** Use master.create interface */\n  create(initialData?: any): IPropertyFilterStage;\n  /** Use master.update interface. Accepts id (string) or full record data (object). */\n  update(data: string | Record<string, any>): IPropertyFilterStage;\n  /** Use master.single interface (read-only view). Accepts id (string) or full record data (object). */\n  single(data: string | Record<string, any>): IPropertyFilterStage;\n}\n\ninterface IPropertyFilterStage {\n  /** Only include provided property names (by AXPEntityProperty.name). Mutually exclusive with exclude(). */\n  include(...propertyNames: string[]): IPropertyFilterStage;\n  /** Exclude provided property names (by AXPEntityProperty.name). Ignored if include() was already set. */\n  exclude(...propertyNames: string[]): IPropertyFilterStage;\n  /** Mark provided property names as readonly. Overrides property schema for display. */\n  readonlyProperties(...propertyNames: string[]): IPropertyFilterStage;\n  /** Optionally override dialog title */\n  title(text: string): IPropertyFilterStage;\n  /** Provide initial dialog context/model data */\n  context(context: any): IPropertyFilterStage;\n  /** Override dialog size (e.g., 'sm' | 'md' | 'lg' | 'xl' | 'full') */\n  size(size: AXPopupSizeType): IPropertyFilterStage;\n  /** Configure footer actions (cancel/submit/custom). If not called, defaults to cancel+submit. */\n  actions(delegate: (a: IActionBuilder) => void): IPropertyFilterStage;\n  /**\n   * Handler invoked when user clicks an action. Receives AXPDialogRef.\n   * If handler throws, dialog stays open for retry.\n   * If handler returns, dialog closes and show() resolves with the return value.\n   */\n  onAction<T = any>(\n    handler: (dialogRef: AXPDialogRef) => T | Promise<T>,\n  ): IPropertyFilterStage & { show(): Promise<T> };\n  /** Add an extra field into a specific group, using the original field builder API */\n  field(groupId: string, path: string, delegate?: (field: CompatFormFieldBuilder) => void): IPropertyFilterStage;\n  /** Build and return the widget node without showing dialog */\n  build(): Promise<AXPWidgetNode>;\n  /** Show dialog */\n  show(): Promise<AXPDialogRef>;\n\n  mode(mode: 'edit' | 'view'): IPropertyFilterStage;\n}\n\n//#endregion\n\n@Injectable({ providedIn: 'root' })\nexport class AXPEntityFormBuilderService implements IEntitySelectorStage {\n  //#region ----   Services & Dependencies   ----\n\n  private readonly entityRegistry = inject(AXPEntityDefinitionRegistryService);\n  private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n  private readonly deviceService = inject(AXPDeviceService);\n  private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n\n  //#endregion\n\n  //#region ----   Public API   ----\n\n  entity(fullName: string): IInterfaceSelectorStage {\n    return new InterfaceSelector(\n      this.entityRegistry,\n      this.layoutBuilder,\n      this.deviceService,\n      this.expressionEvaluator,\n      fullName,\n      this,\n    );\n  }\n\n  /**\n   * Fetches a record by ID for the specified entity.\n   * @param fullName - Entity full name in \"module.entity\" format\n   * @param id - Record ID to fetch\n   * @returns Promise resolving to the record data, or empty object if not found\n   */\n  async getRecordById(fullName: string, id: string): Promise<Record<string, any>> {\n    if (!id) {\n      throw new Error('Record id is required.');\n    }\n\n    const { moduleName, entityName } = parseEntityFullName(fullName);\n    const entity = await this.entityRegistry.resolve(moduleName, entityName);\n\n    try {\n      const byKeyFn = entity?.queries?.byKey?.execute as unknown as (id: string) => Promise<any>;\n      if (typeof byKeyFn === 'function') {\n        return (await byKeyFn(id)) ?? {};\n      }\n    } catch {\n      // Return empty object if fetch fails\n    }\n\n    return {};\n  }\n\n  //#endregion\n}\n\n//#region ----   Builders   ----\n\nclass InterfaceSelector implements IInterfaceSelectorStage {\n  constructor(\n    private readonly entityRegistry: AXPEntityDefinitionRegistryService,\n    private readonly layoutBuilder: AXPLayoutBuilderService,\n    private readonly deviceService: AXPDeviceService,\n    private readonly expressionEvaluator: AXPExpressionEvaluatorService,\n    private readonly fullName: string,\n    private readonly formBuilderService: AXPEntityFormBuilderService,\n  ) { }\n\n  create(initialData?: any): IPropertyFilterStage {\n    const filter = new PropertyFilter(\n      this.entityRegistry,\n      this.layoutBuilder,\n      this.deviceService,\n      this.expressionEvaluator,\n      this.fullName,\n      'create',\n      undefined,\n      this.formBuilderService,\n    );\n    if (initialData) {\n      filter.context(initialData);\n    }\n    return filter;\n  }\n\n  update(data: string | Record<string, any>): IPropertyFilterStage {\n    let recordId: string | undefined;\n    let initialData: any = {};\n\n    if (typeof data === 'string') {\n      recordId = data;\n    } else if (data && typeof data === 'object') {\n      initialData = data;\n      recordId = data['id'] || data['_id'];\n    }\n\n    const filter = new PropertyFilter(\n      this.entityRegistry,\n      this.layoutBuilder,\n      this.deviceService,\n      this.expressionEvaluator,\n      this.fullName,\n      'update',\n      recordId,\n      this.formBuilderService,\n    );\n\n    if (Object.keys(initialData).length > 0) {\n      filter.context(initialData);\n    }\n\n    return filter;\n  }\n\n  single(data: string | Record<string, any>): IPropertyFilterStage {\n    let recordId: string | undefined;\n    let initialData: any = {};\n\n    if (typeof data === 'string') {\n      recordId = data;\n    } else if (data && typeof data === 'object') {\n      initialData = data;\n      recordId = data['id'] || data['_id'];\n    }\n\n    const filter = new PropertyFilter(\n      this.entityRegistry,\n      this.layoutBuilder,\n      this.deviceService,\n      this.expressionEvaluator,\n      this.fullName,\n      'single',\n      recordId,\n      this.formBuilderService,\n    );\n\n    if (Object.keys(initialData).length > 0) {\n      filter.context(initialData);\n    }\n\n    return filter;\n  }\n}\n\nclass PropertyFilter implements IPropertyFilterStage {\n  private includeList: Set<string> | null = null;\n  private excludeList: Set<string> | null = null;\n  private readonlyList: Set<string> | null = null;\n  private overrideTitle?: string;\n  private initialContext: any = {};\n  private recordId?: string;\n  private externalActionsDelegate?: (a: IActionBuilder) => void;\n  private onActionHandler?: (dialogRef: AXPDialogRef) => any | Promise<any>;\n  private extraFieldsByGroup = new Map<\n    string,\n    Array<{ path: string; delegate?: (field: CompatFormFieldBuilder) => void }>\n  >();\n  private externalSize?: AXPopupSizeType;\n  private externalMode?: 'edit' | 'view';\n  constructor(\n    private readonly entityRegistry: AXPEntityDefinitionRegistryService,\n    private readonly layoutBuilder: AXPLayoutBuilderService,\n    private readonly deviceService: AXPDeviceService,\n    private readonly expressionEvaluator: AXPExpressionEvaluatorService,\n    private readonly fullName: string,\n    private readonly kind: EntityInterfaceKind,\n    recordId?: string,\n    private readonly formBuilderService?: AXPEntityFormBuilderService,\n  ) {\n    this.recordId = recordId;\n  }\n\n  include(...propertyNames: string[]): IPropertyFilterStage {\n    this.includeList = new Set(propertyNames.filter(Boolean));\n    return this;\n  }\n\n  exclude(...propertyNames: string[]): IPropertyFilterStage {\n    // Ignored when include list is present\n    if (!this.includeList) {\n      this.excludeList = new Set(propertyNames.filter(Boolean));\n    }\n    return this;\n  }\n\n  readonlyProperties(...propertyNames: string[]): IPropertyFilterStage {\n    this.readonlyList = new Set(propertyNames.filter(Boolean));\n    return this;\n  }\n\n  title(text: string): IPropertyFilterStage {\n    this.overrideTitle = text;\n    return this;\n  }\n\n  context(context: any): IPropertyFilterStage {\n    this.initialContext = context ?? {};\n    return this;\n  }\n\n  size(size: AXPopupSizeType): IPropertyFilterStage {\n    this.externalSize = size;\n    return this;\n  }\n\n  actions(delegate: (a: IActionBuilder) => void): IPropertyFilterStage {\n    this.externalActionsDelegate = delegate;\n    return this;\n  }\n\n  onAction<T = any>(\n    handler: (dialogRef: AXPDialogRef) => T | Promise<T>,\n  ): IPropertyFilterStage & { show(): Promise<T> } {\n    this.onActionHandler = handler as (dialogRef: AXPDialogRef) => any | Promise<any>;\n    return this;\n  }\n\n  field(groupId: string, path: string, delegate?: (field: CompatFormFieldBuilder) => void): IPropertyFilterStage {\n    const list = this.extraFieldsByGroup.get(groupId) ?? [];\n    list.push({ path, delegate });\n\n    this.extraFieldsByGroup.set(groupId, list);\n    return this;\n  }\n\n  mode(mode: 'edit' | 'view'): IPropertyFilterStage {\n    this.externalMode = mode;\n    return this;\n  }\n\n  async build(): Promise<AXPWidgetNode> {\n    const dialog = await this.buildDialog({});\n    return dialog.build();\n  }\n\n  async show(): Promise<AXPDialogRef | any> {\n    // Context: always load by key when we have a record id (authoritative full row), then merge any\n    // caller/list row context. Skipping fetch when initialContext was non-empty left dialogs without\n    // fields not present on the passed row (e.g. Entity:View single() with partial list payload).\n    let baseContext: any = {};\n\n    if ((this.kind === 'update' || this.kind === 'single') && this.recordId) {\n      const id = this.recordId;\n\n      if (this.formBuilderService) {\n        baseContext = await this.formBuilderService.getRecordById(this.fullName, id);\n      } else {\n        const { moduleName, entityName } = parseEntityFullName(this.fullName);\n        const entity = await this.entityRegistry.resolve(moduleName, entityName);\n\n        try {\n          const byKeyFn = entity?.queries?.byKey?.execute as unknown as (id: string) => Promise<any>;\n          if (typeof byKeyFn === 'function') {\n            baseContext = (await byKeyFn(id)) ?? {};\n          }\n        } catch {\n          baseContext = {};\n        }\n      }\n    }\n\n    const effectiveContext = merge({}, this.initialContext, baseContext);\n    const dialog = await this.buildDialog(effectiveContext);\n    dialog.setContext(effectiveContext);\n\n    return await dialog.show();\n  }\n\n  /**\n   * Builds the dialog node structure without showing it.\n   * This method is shared by both build() and show() methods.\n   *\n   * @param modelForRelatedEval Merged root model used to evaluate related list filters (show() passes full row).\n   */\n  private async buildDialog(modelForRelatedEval: Record<string, unknown>) {\n    const { moduleName, entityName } = parseEntityFullName(this.fullName);\n    const entity = await this.entityRegistry.resolve(moduleName, entityName);\n\n    // Select the appropriate interface based on kind\n    const iface = getEntityInterface(entity, this.kind);\n\n    if (!iface) {\n      throw new Error(`Entity interface not found: ${entity.module}.${entity.name}.interfaces.master.${this.kind}`);\n    }\n\n    // Title and size\n    const title = this.overrideTitle || entity.formats?.individual || entity.title || `${entity.module}.${entity.name}`;\n\n    // Build content using LayoutBuilder\n    const mainSections = (iface.sections ?? []).slice();\n    const mainProps = (entity.properties ?? []).slice();\n    const mainViewLayoutMap = buildViewLayoutMap(iface.properties ?? []);\n    const allowedNames = this.computeAllowedNames(mainProps.map((p) => p.name));\n\n    // Collect all groups for title lookup (main + merged)\n    const allGroups = [...(entity.groups ?? [])];\n\n    // Process merge-detail related entities\n    const mergeDetailEntities = (entity.relatedEntities ?? []).filter(\n      (re) =>\n        !re.hidden &&\n        re.layout?.type === 'merge-detail' &&\n        isRelatedEntityIncludedOnMasterForm(re, this.kind, 'merge-detail'),\n    );\n\n    // Build merged properties map by section\n    const mergedPropsBySection = new Map<string, MergedEntityProperty[]>();\n\n    // Initialize with main entity properties\n    for (const prop of mainProps) {\n      if (!allowedNames.has(prop.name) || !mainViewLayoutMap.has(prop.name)) continue;\n      const groupId = prop.groupId ?? 'default';\n      if (!mergedPropsBySection.has(groupId)) {\n        mergedPropsBySection.set(groupId, []);\n      }\n      const viewLayout = mainViewLayoutMap.get(prop.name);\n      const mergedProp: MergedEntityProperty = {\n        ...prop,\n        __layout: viewLayout?.layout ? cloneDeep(viewLayout.layout) : undefined,\n        __order: viewLayout?.layout?.order,\n      };\n      if (this.readonlyList?.has(prop.name)) {\n        mergedProp.schema = { ...(mergedProp.schema ?? {}), readonly: true };\n      }\n      mergedPropsBySection.get(groupId)!.push(mergedProp);\n    }\n\n    // Track extra sections from related entities\n    const extraSections: MergedSection[] = [];\n    const mainSectionIds = new Set(mainSections.map((s) => s.id));\n\n    // Group related entities by position for ordered processing\n    const beforeEntities = mergeDetailEntities\n      .filter((re) => re.layout?.position === 'before')\n      .sort((a, b) => (a.layout?.order ?? Infinity) - (b.layout?.order ?? Infinity));\n    const middleEntities = mergeDetailEntities.filter((re) => !re.layout?.position || re.layout?.position === 'middle');\n    const afterEntities = mergeDetailEntities\n      .filter((re) => re.layout?.position === 'after')\n      .sort((a, b) => (a.layout?.order ?? Infinity) - (b.layout?.order ?? Infinity));\n\n    // Process related entities in order: before, middle, after\n    const processRelatedEntity = async (relatedEntity: {\n      entity: string;\n      layout?: { type?: string; order?: number; position?: 'before' | 'middle' | 'after' };\n      persistence?: { dataPath?: string };\n      excludeProperties?: string[];\n    }) => {\n      try {\n        const [relModuleName, relEntityName] = relatedEntity.entity.split('.');\n        const relEntityDef = await this.entityRegistry.resolve(relModuleName, relEntityName);\n        if (!relEntityDef) return;\n\n        // Get the matching interface for the related entity\n        const relIface = getEntityInterface(relEntityDef, this.kind);\n        if (!relIface) return;\n\n        // Merge related groups into allGroups (avoid duplicates)\n        for (const rg of relEntityDef.groups ?? []) {\n          if (!allGroups.some((g) => g.id === rg.id)) {\n            allGroups.push(rg);\n          }\n        }\n\n        // Compute dataPath for field prefixing\n        const dataPath = relatedEntity.persistence?.dataPath || relEntityName;\n        const position = relatedEntity.layout?.position ?? 'middle';\n        const entityOrder = relatedEntity.layout?.order ?? Infinity;\n\n        // Build view layout map for related entity\n        const relViewLayoutMap = buildViewLayoutMap(relIface.properties ?? []);\n\n        // Process each section in related interface\n        for (const relSection of relIface.sections ?? []) {\n          const sectionId = relSection.id;\n          const sectionHasMainEquivalent = mainSectionIds.has(sectionId);\n\n          // Get properties for this section\n          const excludeProperties =\n            relatedEntity?.excludeProperties && relatedEntity.excludeProperties.length > 0\n              ? new Set(relatedEntity.excludeProperties)\n              : undefined;\n          const sectionProps: MergedEntityProperty[] = [];\n          for (const prop of relEntityDef.properties ?? []) {\n            if (prop.groupId !== sectionId) continue;\n            if (excludeProperties?.has(prop.name)) continue;\n            if (!relViewLayoutMap.has(prop.name)) continue;\n\n            const viewLayout = relViewLayoutMap.get(prop.name);\n\n            // Clone property and add merge-detail metadata\n            const mergedProp: MergedEntityProperty = {\n              ...prop,\n              __dataPath: dataPath,\n              __layout: viewLayout?.layout ? cloneDeep(viewLayout.layout) : undefined,\n              __order: viewLayout?.layout?.order,\n            };\n\n            // Apply generic propertyOverrides extension (e.g. for identifier defaultValue on nested paths)\n            const override = (entity as any)?.extensions?.propertyOverrides?.[`${dataPath}.${prop.name}`];\n            if (override?.schema) {\n              mergedProp.schema = { ...(mergedProp.schema ?? {}), ...override.schema };\n            }\n\n            // Prefix expressions in schema options\n            if (mergedProp.schema?.interface?.options) {\n              mergedProp.schema = {\n                ...mergedProp.schema,\n                interface: {\n                  ...mergedProp.schema.interface,\n                  options: prefixExpressions(mergedProp.schema.interface.options, dataPath),\n                },\n              };\n            }\n\n            // Prefix expressions in visible/readonly if they are strings\n            if (typeof mergedProp.schema?.visible === 'string') {\n              mergedProp.schema = {\n                ...mergedProp.schema,\n                visible: prefixExpressions(mergedProp.schema.visible, dataPath),\n              };\n            }\n            if (typeof mergedProp.schema?.readonly === 'string') {\n              mergedProp.schema = {\n                ...mergedProp.schema,\n                readonly: prefixExpressions(mergedProp.schema.readonly, dataPath),\n              };\n            }\n\n            sectionProps.push(mergedProp);\n          }\n\n          if (sectionProps.length === 0) continue;\n\n          if (sectionHasMainEquivalent) {\n            // Merge into existing section\n            const existing = mergedPropsBySection.get(sectionId) ?? [];\n            if (position === 'before') {\n              mergedPropsBySection.set(sectionId, [...sectionProps, ...existing]);\n            } else {\n              mergedPropsBySection.set(sectionId, [...existing, ...sectionProps]);\n            }\n          } else {\n            // Create new section entry\n            if (!mergedPropsBySection.has(sectionId)) {\n              mergedPropsBySection.set(sectionId, []);\n            }\n            const existing = mergedPropsBySection.get(sectionId) ?? [];\n            if (position === 'before') {\n              mergedPropsBySection.set(sectionId, [...sectionProps, ...existing]);\n            } else {\n              mergedPropsBySection.set(sectionId, [...existing, ...sectionProps]);\n            }\n\n            // Track as extra section if not already tracked\n            if (!extraSections.some((s) => s.id === sectionId)) {\n              extraSections.push({\n                ...relSection,\n                __entityOrder: entityOrder,\n                __position: position,\n              });\n            }\n          }\n        }\n      } catch {\n        // Silently ignore failures to resolve or merge\n      }\n    };\n\n    // Process in order\n    for (const re of beforeEntities) await processRelatedEntity(re);\n    for (const re of middleEntities) await processRelatedEntity(re);\n    for (const re of afterEntities) await processRelatedEntity(re);\n\n    // Build final sorted sections list\n    const finalSections = sortMergedSections(mainSections, extraSections, mainSectionIds);\n\n    // Calculate recommended dialog size based on form complexity (using merged data)\n    const allMergedProps = Array.from(mergedPropsBySection.values()).flat();\n    const mergedViewLayoutMap = new Map<string, AXPEntityPropertyView>();\n    for (const prop of allMergedProps) {\n      if ((prop as MergedEntityProperty).__layout) {\n        mergedViewLayoutMap.set(prop.name, { name: prop.name, layout: (prop as MergedEntityProperty).__layout });\n      }\n    }\n    const calculatedSize = this.calculateRecommendedDialogSize(\n      finalSections,\n      allMergedProps,\n      mergedViewLayoutMap,\n      new Set(allMergedProps.map((p) => p.name)),\n    );\n\n    const renderedSections = finalSections.filter((section) => {\n      const sectionProps = mergedPropsBySection.get(section.id) ?? [];\n      const extraFields = this.extraFieldsByGroup.get(section.id) ?? [];\n      return sectionProps.length > 0 || extraFields.length > 0;\n    });\n    const sectionScaleFactors = normalizeLayoutFillRowGaps(\n      renderedSections,\n      (s) => s.layout,\n      (s) => s.id,\n    );\n\n    const filterEvalRoot = merge({}, this.initialContext, modelForRelatedEval) as Record<string, unknown>;\n    const listRelatedEntities = collectListRelatedEntitiesForFormWizard(entity, this.kind);\n    const pageWizardPages = collectPagesForFormWizard(entity, this.kind);\n    const useFormWizard =\n      (listRelatedEntities.length > 0 || pageWizardPages.length > 0) &&\n      (this.kind === 'create' || this.kind === 'update');\n\n    type EntityFormWizardExtraStep =\n      | { kind: 'related-list'; order: number; stepId: string; title: string; rel: AXPRelatedEntity }\n      | { kind: 'page'; order: number; stepId: string; title: string; page: AXPEntityPage; componentKey: string };\n\n    const wizardExtraSteps: EntityFormWizardExtraStep[] = [];\n\n    for (const re of listRelatedEntities) {\n      const [rm, en] = re.entity.split('.');\n      const relDef = await this.entityRegistry.resolve(rm, en);\n      wizardExtraSteps.push({\n        kind: 'related-list',\n        order: re.layout?.order ?? 0,\n        stepId: buildEntityFormRelatedStepId(re),\n        title: (re.title ?? relDef?.title ?? re.entity) as string,\n        rel: re,\n      });\n    }\n\n    for (const page of pageWizardPages) {\n      wizardExtraSteps.push({\n        kind: 'page',\n        order: page.layout?.order ?? 0,\n        stepId: buildEntityFormPageStepId(page),\n        title: (page.title ?? page.componentKey) as string,\n        page,\n        componentKey: page.componentKey,\n      });\n    }\n\n    wizardExtraSteps.sort((a, b) => a.order - b.order);\n\n    const prebuiltRelatedListConfigs = useFormWizard\n      ? await Promise.all(\n        wizardExtraSteps\n          .filter((s): s is EntityFormWizardExtraStep & { kind: 'related-list' } => s.kind === 'related-list')\n          .map((s) => this.buildRelatedEntityListWidgetOptions(s.rel, filterEvalRoot)),\n      )\n      : [];\n\n    let relatedListConfigIndex = 0;\n\n    const mainFormGridArgs = {\n      entity,\n      finalSections,\n      mergedPropsBySection,\n      allGroups,\n      extraFieldsByGroup: this.extraFieldsByGroup,\n      sectionScaleFactors,\n    };\n\n    const dialog = this.layoutBuilder.create().dialog((d) => {\n      d.setTitle(title);\n      d.setSize(this.externalSize ?? (useFormWizard ? 'lg' : calculatedSize));\n      d.setCloseButton(true);\n      d.confirmCloseWhenDirty();\n      d.content((layout) => {\n        const defaultMode: 'edit' | 'view' = this.kind === 'single' ? 'view' : 'edit';\n        layout.mode(this.externalMode ?? defaultMode);\n\n        if (useFormWizard) {\n          layout.stepWizard((w: IStepWizardBuilder) => {\n            w.name(ENTITY_FORM_STEP_WIZARD_NAME);\n            w.setLook('rectangular-arrow-minimal');\n            w.setShowActions(false);\n            const mainStepTitle = (entity.formats?.individual ||\n              entity.title ||\n              `${entity.module}.${entity.name}`) as string;\n            w.step('main', mainStepTitle, (step) => {\n              step.content((inner) => {\n                inner.grid((grid) => this.fillMainEntityFormGrid(grid, mainFormGridArgs));\n              });\n            });\n            for (const wizardStep of wizardExtraSteps) {\n              if (wizardStep.kind === 'related-list') {\n                const built = prebuiltRelatedListConfigs[relatedListConfigIndex++];\n                w.step(wizardStep.stepId, wizardStep.title, (st) => {\n                  st.content((inner) => {\n                    inner.flex((flex) => {\n                      flex.setDirection('column');\n                      flex.setAlignItems('stretch');\n                      flex.customWidget(AXPWidgetsCatalog.entityList, (iw: IWidgetBuilder) => {\n                        iw.name(built.name);\n                        if (built.defaultValue) {\n                          iw.defaultValue(built.defaultValue);\n                        }\n                        iw.options(built.options);\n                      });\n                    });\n                  });\n                });\n              } else {\n                w.step(wizardStep.stepId, wizardStep.title, (st) => {\n                  st.content((inner) => {\n                    inner.flex((flex) => {\n                      flex.setDirection('column');\n                      flex.setAlignItems('stretch');\n                      flex.customWidget(AXPWidgetsCatalog.pageComponent, (iw: IWidgetBuilder) => {\n                        iw.name(buildPageComponentWidgetName(wizardStep.page));\n                        iw.options({\n                          componentKey: wizardStep.page.componentKey,\n                          field: wizardStep.page.field,\n                          pageOptions: wizardStep.page.options ?? {},\n                          showPageActions: true,\n                        });\n                      });\n                    });\n                  });\n                });\n              }\n            }\n          });\n        } else {\n          layout.grid((grid) => this.fillMainEntityFormGrid(grid, mainFormGridArgs));\n        }\n      });\n\n      if (this.externalActionsDelegate && !useFormWizard) {\n        d.setActions(this.externalActionsDelegate);\n      } else if (useFormWizard) {\n        d.setActions((ab) =>\n          configureEntityFormWizardFooterActions(\n            ab,\n            ENTITY_FORM_STEP_WIZARD_NAME,\n            this.kind === 'create'\n              ? '{{ ((typeof context.id === \"string\" && context.id.length > 0) || (typeof context.id === \"number\" && !isNaN(context.id)) || (typeof context._id === \"string\" && context._id.length > 0) || (typeof context._id === \"number\" && !isNaN(context._id))) ? \"@general:entity-form.update-and-continue.title\" : \"@general:entity-form.create-and-continue.title\" }}'\n              : '@general:entity-form.save-and-continue.title',\n          ),\n        );\n      } else if (this.kind === 'single') {\n        d.setActions((a) => a.submit('@general:actions.close.title'));\n      } else {\n        d.setActions((a) =>\n          a\n            .cancel('@general:actions.cancel.title')\n            .submit(this.kind === 'create' ? '@general:actions.create.title' : '@general:actions.apply.title'),\n        );\n      }\n\n      if (useFormWizard && this.onActionHandler) {\n        d.onAction(this.createWizardOnActionWrapper(this.onActionHandler) as any);\n      } else if (this.onActionHandler) {\n        d.onAction(this.onActionHandler);\n      } else if (this.kind === 'single') {\n        d.onAction(async () => ({ success: true, skipValidate: true }) as any);\n      }\n    });\n\n    return dialog;\n  }\n\n  /**\n   * Renders main entity fieldsets and fields into a grid container (step 1 or non-wizard form).\n   */\n  private fillMainEntityFormGrid(\n    grid: IGridContainerBuilder,\n    args: {\n      entity: AXPEntity;\n      finalSections: AXPEntitySectionView[];\n      mergedPropsBySection: Map<string, MergedEntityProperty[]>;\n      allGroups: { id: string; title?: string }[];\n      extraFieldsByGroup: Map<string, Array<{ path: string; delegate?: (field: CompatFormFieldBuilder) => void }>>;\n      sectionScaleFactors: Map<string, Record<string, number>>;\n    },\n  ): void {\n    grid.setColumns(12);\n    grid.setGap('1rem');\n\n    for (const section of args.finalSections) {\n      const groupId = section.id;\n      const sectionProps = args.mergedPropsBySection.get(groupId) ?? [];\n      const extraFields = args.extraFieldsByGroup.get(groupId) ?? [];\n\n      if (sectionProps.length === 0 && extraFields.length === 0) {\n        continue;\n      }\n\n      const sectionLayout = section.layout ?? undefined;\n      grid.item(sectionLayout, (fs) => {\n        const sectionVisible = section.layout?.visible;\n        if (sectionVisible !== undefined && sectionVisible !== null) {\n          fs.visible(sectionVisible as boolean | string);\n        }\n        fs.setLook('fieldset');\n        fs.setTitle((getGroupTitleFromList(args.allGroups, groupId) || groupId) as string);\n        fs.setCols(12);\n\n        const sectionLabelVisible =\n          section.layout?.label?.visible ??\n          args.entity.interfaces?.master?.single?.sections?.find((s) => s?.id === groupId)?.layout?.label?.visible;\n\n        if (sectionLabelVisible === false) {\n          const legendHidden: AXPFieldsetContainerOptions = { showTitle: false, showHeader: false };\n          fs.setOptions(legendHidden);\n        }\n\n        const orderedProps = [...sectionProps].sort((a, b) => {\n          const aOrder = (a as MergedEntityProperty).__order ?? Infinity;\n          const bOrder = (b as MergedEntityProperty).__order ?? Infinity;\n          return aOrder - bOrder;\n        });\n        applySectionScaleToProperties(orderedProps as MergedEntityProperty[], args.sectionScaleFactors.get(groupId));\n        normalizeLayoutFillRowGaps(orderedProps, (p) => (p as MergedEntityProperty).__layout);\n\n        for (const prop of orderedProps) {\n          const mergedProp = prop as MergedEntityProperty;\n          const dataPath = mergedProp.__dataPath;\n          const fieldPath = dataPath ? `${dataPath}.${prop.name}` : prop.name;\n\n          fs.formField(prop.title as string, (field) => {\n            field.path(fieldPath);\n\n            if (prop.schema?.visible !== undefined) {\n              field.visible(prop.schema?.visible);\n            }\n            if (prop.schema?.readonly !== undefined) {\n              field.readonly(prop.schema.readonly);\n            }\n            if (prop.schema?.defaultValue !== undefined) {\n              field.defaultValue(prop.schema.defaultValue);\n            }\n\n            const fieldLayout = toFieldLayout(mergedProp.__layout);\n            if (fieldLayout) {\n              field.layout(fieldLayout);\n            }\n\n            if ((fieldLayout as any)?.label?.visible === false) {\n              field.setShowLabel(false);\n            }\n\n            const hintOpts = hintFormFieldOptionsFromDescription(prop.description);\n            if (hintOpts) {\n              field.setOptions(hintOpts);\n            }\n\n            const widgetType = prop.schema?.interface?.type || '';\n            const widgetOptions = buildWidgetOptions(prop);\n            const extendedProperties = buildWidgetExtendedProperties(prop);\n\n            const finalExtendedProps = dataPath ? prefixExpressions(extendedProperties, dataPath) : extendedProperties;\n\n            field.customWidget(widgetType, { ...widgetOptions, ...finalExtendedProps });\n          });\n        }\n\n        for (const extra of extraFields) {\n          const label = extra.path?.split('.').slice(-1)[0] || extra.path;\n          fs.formField(label, (f) => {\n            const legacy = toCompatFormFieldBuilder(f);\n            legacy.path(extra.path);\n            extra.delegate?.(legacy);\n          });\n        }\n      });\n    }\n  }\n\n  private async buildRelatedEntityListWidgetOptions(\n    relatedEntity: AXPRelatedEntity,\n    filterEvalRoot: Record<string, unknown>,\n  ): Promise<{\n    name: string;\n    options: Record<string, unknown>;\n    defaultValue?: { toolbar: { filters: unknown[] } };\n  }> {\n    const evaluateExpressions = async (actionData: unknown) => {\n      const scope: AXPExpressionEvaluatorScope = {\n        context: {\n          eval: (path: string) => get(filterEvalRoot, path),\n        },\n      };\n      return await this.expressionEvaluator.evaluate(actionData, scope);\n    };\n\n    const syncRelatedFromRoot = this.kind === 'create';\n    const foreignKeyField = relatedEntity.persistence?.foreignKeyField;\n    const filters = syncRelatedFromRoot\n      ? []\n      : await Promise.all(\n        relatedEntity.conditions?.map(async (c) => {\n          const value = await evaluateExpressions(c.value);\n          return {\n            field: c.name,\n            operator: c.operator,\n            value,\n            hidden: true,\n          };\n        }) ?? [],\n      );\n\n    const rawOrEvaluatedActions = syncRelatedFromRoot\n      ? (relatedEntity.actions ?? [])\n      : await this.evaluateRelatedEntityActionsForFormWizard(relatedEntity.actions, filterEvalRoot);\n    const evaluatedActions = mergeForeignKeyFieldIntoCreateActions(foreignKeyField, rawOrEvaluatedActions);\n\n    const columnScope: AXPExpressionEvaluatorScope = {\n      context: {\n        eval: (path: string) => get(filterEvalRoot, path),\n      },\n    };\n    const { includeColumns, relatedTableColumns } = await resolveRelatedEntityColumns(\n      relatedEntity.columns,\n      this.expressionEvaluator,\n      columnScope,\n    );\n\n    const nestedCreateHiddenProperties = collectNestedCreateHiddenProperties(relatedEntity);\n\n    return {\n      name: `${relatedEntity.entity}-entity-form-step`,\n      defaultValue: {\n        toolbar: {\n          filters,\n        },\n      },\n      options: {\n        entity: relatedEntity.entity,\n        showEntityActions: true,\n        showToolbar: false,\n        actions: evaluatedActions,\n        maxHeight: '400px',\n        includeColumns,\n        relatedTableColumns,\n        customFilterDefinitions: relatedEntity.customFilterDefinitions,\n        ...(foreignKeyField ? { foreignKeyField } : {}),\n        ...(nestedCreateHiddenProperties?.length ? { nestedCreateHiddenProperties } : {}),\n        ...(relatedEntity.conditions?.length\n          ? {\n              relatedFilterConditionSpecs: cloneDeep(relatedEntity.conditions),\n              ...(syncRelatedFromRoot ? { syncRelatedListFiltersFromDialogContext: true } : {}),\n            }\n          : {}),\n      },\n    };\n  }\n\n  private async evaluateRelatedEntityActionsForFormWizard(\n    actions: AXPEntityAction[] | undefined,\n    filterEvalRoot: Record<string, unknown>,\n  ): Promise<AXPEntityAction[]> {\n    const list = actions ?? [];\n    const scope: AXPExpressionEvaluatorScope = {\n      context: {\n        eval: (path: string) => get(filterEvalRoot, path),\n      },\n    };\n    return Promise.all(\n      list.map(async (action) => {\n        if (action.scope === AXPEntityCommandScope.Individual) {\n          return action;\n        }\n        return (await this.expressionEvaluator.evaluate(action, scope)) as AXPEntityAction;\n      }),\n    );\n  }\n\n  private createWizardOnActionWrapper(\n    userHandler: (ref: AXPDialogRef) => unknown | Promise<unknown>,\n  ): (ref: AXPDialogRef) => unknown | Promise<unknown> {\n    return async (ref: AXPDialogRef) => {\n      const action = ref.action();\n      if (action === ENTITY_FORM_ACTION_DONE) {\n        const pageContinue = await continueActiveEntityFormPageStep(ref);\n        if (!pageContinue.success) {\n          return { keepDialogOpen: true };\n        }\n        if (hasPersistedRootId(ref.context())) {\n          const out = (await userHandler(ref)) as { success?: boolean; data?: unknown };\n          if (out?.success === false) {\n            return out;\n          }\n          return { success: true, data: (out as { data?: unknown })?.data ?? ref.context(), skipValidate: true };\n        }\n        return { success: true, data: ref.context(), skipValidate: true };\n      }\n      if (action === ENTITY_FORM_ACTION_NEXT_STEP) {\n        const pageContinue = await continueActiveEntityFormPageStep(ref);\n        if (!pageContinue.success) {\n          return { keepDialogOpen: true };\n        }\n        await ref.invokeWidget?.(ENTITY_FORM_STEP_WIZARD_NAME, 'next', { setLoading: ref.setLoading });\n        return { keepDialogOpen: true };\n      }\n      if (action === ENTITY_FORM_ACTION_FIRST_STEP_CONTINUE) {\n        const out = (await userHandler(ref)) as { success?: boolean; data?: unknown; keepDialogOpen?: boolean };\n        if (out?.success === false) {\n          return out;\n        }\n        const item = normalizeWizardPersistedRecordPatch(\n          (out as { data?: { item?: unknown } })?.data?.item ?? (out as { data?: unknown })?.data ?? {},\n        );\n        ref.patchContext?.(merge({}, ref.context(), item));\n        await ref.invokeWidget?.(ENTITY_FORM_STEP_WIZARD_NAME, 'next', { setLoading: ref.setLoading });\n        return merge({}, out as object, { keepDialogOpen: true });\n      }\n      return await userHandler(ref);\n    };\n  }\n\n  private computeAllowedNames(allNames: string[]): Set<string> {\n    if (this.includeList && this.includeList.size > 0) {\n      return new Set(allNames.filter((n) => this.includeList!.has(n)));\n    }\n    if (this.excludeList && this.excludeList.size > 0) {\n      return new Set(allNames.filter((n) => !this.excludeList!.has(n)));\n    }\n    return new Set(allNames);\n  }\n\n  /**\n   * Calculates the recommended dialog size based on form complexity.\n   * Considers number of sections, properties, and average field width.\n   *\n   * @param sections - Interface sections to display\n   * @param entityProps - All entity properties\n   * @param nameToViewLayout - Map of property names to their view layout configurations\n   * @param allowedNames - Set of property names that should be displayed (after filtering)\n   * @returns Recommended dialog size ('full' | 'lg' | 'md')\n   */\n  private calculateRecommendedDialogSize(\n    sections: any[],\n    entityProps: AXPEntityProperty[],\n    nameToViewLayout: Map<string, AXPEntityPropertyView>,\n    allowedNames: Set<string>,\n  ): AXPopupSizeType {\n    // Mobile devices always use full screen\n    if (this.deviceService.isMobileDevice()) {\n      return 'full';\n    }\n\n    // Calculate number of visible properties\n    const visibleProperties = entityProps.filter((p) => allowedNames.has(p.name) && nameToViewLayout.has(p.name));\n    const visiblePropertyCount = visibleProperties.length;\n\n    // Calculate average colSpan to determine field width\n    // colSpan determines how many columns a field occupies in a 12-column grid\n    // Examples:\n    // - colSpan = 12 → 1 field per row (full width)\n    // - colSpan = 6  → 2 fields per row (half width each)\n    // - colSpan = 4  → 3 fields per row (one-third width each)\n    // - colSpan = 3  → 4 fields per row (one-quarter width each)\n    let totalColSpan = 0;\n    let propertiesWithLayout = 0;\n    let hasColSpan3 = false; // Track if any field has colSpan = 3\n\n    for (const prop of visibleProperties) {\n      const viewLayout = nameToViewLayout.get(prop.name);\n      const positions = viewLayout?.layout?.positions;\n\n      if (positions) {\n        // Get colSpan from the largest available breakpoint\n        const colSpan =\n          positions.lg?.colSpan ?? positions.xl?.colSpan ?? positions.md?.colSpan ?? positions.sm?.colSpan ?? 12; // default: full width\n\n        totalColSpan += colSpan;\n        propertiesWithLayout++;\n\n        // Check if this field has colSpan = 3\n        if (colSpan <= 3) {\n          hasColSpan3 = true;\n        }\n      } else {\n        // If no layout defined, assume full width (12 columns)\n        totalColSpan += 12;\n        propertiesWithLayout++;\n      }\n    }\n\n    // Average colSpan: lower value = more fields per row, higher value = fewer fields per row\n    const avgColSpan = propertiesWithLayout > 0 ? totalColSpan / propertiesWithLayout : 12;\n\n    // Decision logic:\n    // - 10+ properties → complex form → needs 'lg'\n    // - avgColSpan <= 4 → 3+ fields per row → needs 'lg' (more horizontal space needed)\n    // - hasColSpan3 && avgColSpan <= 6 → row can sum to 12 with colSpan=3 (e.g., 9+3, 5+4+3, etc.) → needs 'lg'\n    // - Otherwise → 'md' is sufficient\n\n    if (visiblePropertyCount >= 10) {\n      return 'lg';\n    }\n\n    // If average colSpan <= 4, it means we can fit 3+ fields per row (12/4 = 3)\n    // This requires more horizontal space, so use 'lg'\n    if (avgColSpan <= 4) {\n      return 'lg';\n    }\n\n    // If there's a field with colSpan = 3 and avgColSpan <= 6,\n    // it means rows can sum to 12 with multiple fields including the colSpan=3 field\n    // (e.g., 9+3=12, 5+4+3=12, 4+3+3+2=12, etc.)\n    // This needs 'lg' for better horizontal space to accommodate the layout\n    if (hasColSpan3 && avgColSpan <= 6) {\n      return 'lg';\n    }\n\n    // For other cases (including full-width fields), 'md' is sufficient\n    return 'md';\n  }\n}\n\n//#endregion\n\n//#region ----   Helpers   ----\n\nconst LAYOUT_BREAKPOINTS = ['sm', 'md', 'lg', 'xl', 'xxl', 'xxxl'] as const;\nconst GRID_COLUMNS = 12;\n\ntype LayoutWithPositions = { positions?: Record<string, { colSpan?: number; colStart?: number }> } | null | undefined;\n\nfunction getColSpanAt(layout: LayoutWithPositions, breakpoint: string): number {\n  return layout?.positions?.[breakpoint]?.colSpan ?? GRID_COLUMNS;\n}\n\nfunction getColStartAt(layout: LayoutWithPositions, breakpoint: string): number | undefined {\n  return layout?.positions?.[breakpoint]?.colStart;\n}\n\nfunction setColSpanAt(layout: LayoutWithPositions, breakpoint: string, colSpan: number): void {\n  if (!layout) return;\n  const positions = layout['positions'] ?? {};\n  if (!layout['positions']) (layout as Record<string, unknown>)['positions'] = positions;\n  const placement = positions[breakpoint] ?? {};\n  if (!positions[breakpoint]) (positions as Record<string, unknown>)[breakpoint] = placement;\n  (placement as { colSpan?: number }).colSpan = colSpan;\n}\n\n/** Scale factors per breakpoint for sections that were expanded to fill row gaps */\ntype SectionScaleFactors = Map<string, Record<string, number>>;\n\n/**\n * Ensures each row in a 12-column grid is filled: if the last item in a row has\n * colSpan < 12 and there is remaining space, its colSpan is increased to fill the row.\n * Applied per breakpoint so that property/section layouts stay consistent.\n * Use after include/exclude so that hidden items do not leave empty row gaps.\n * When getItemId is provided (e.g. for sections), returns scale factors (newColSpan/oldColSpan)\n * per breakpoint for each expanded item so that child properties can be scaled proportionally.\n */\nfunction normalizeLayoutFillRowGaps<T>(\n  items: T[],\n  getLayout: (item: T) => LayoutWithPositions,\n  getItemId?: (item: T) => string | undefined,\n): SectionScaleFactors {\n  const scaleFactors: SectionScaleFactors = new Map();\n  if (items.length === 0) return scaleFactors;\n\n  for (const breakpoint of LAYOUT_BREAKPOINTS) {\n    let i = 0;\n    while (i < items.length) {\n      const rowStart = i;\n      let rowHasExplicitColStart = false;\n      let sequentialRowSum = 0;\n      let explicitRowEnd = 0;\n\n      while (i < items.length) {\n        const layout = getLayout(items[i]);\n        const colStart = getColStartAt(layout, breakpoint);\n        const colSpan = getColSpanAt(layout, breakpoint);\n\n        // colStart: 1 begins a new row (except for the first item in the current row)\n        if (colStart === 1 && i > rowStart) {\n          break;\n        }\n\n        if (colStart != null) {\n          rowHasExplicitColStart = true;\n          const end = colStart + colSpan;\n          if (end - 1 > GRID_COLUMNS) {\n            i++;\n            break;\n          }\n          explicitRowEnd = Math.max(explicitRowEnd, end);\n          i++;\n          if (explicitRowEnd >= GRID_COLUMNS) {\n            break;\n          }\n          continue;\n        }\n\n        if (sequentialRowSum + colSpan > GRID_COLUMNS && i > rowStart) {\n          break;\n        }\n        if (sequentialRowSum + colSpan > GRID_COLUMNS && i === rowStart) {\n          sequentialRowSum = colSpan;\n          i++;\n          break;\n        }\n\n        sequentialRowSum += colSpan;\n        i++;\n        if (sequentialRowSum >= GRID_COLUMNS) {\n          break;\n        }\n      }\n\n      // Rows with explicit colStart (e.g. 4+4+4 at columns 1/5/9) keep intentional gaps\n      if (rowHasExplicitColStart) {\n        continue;\n      }\n\n      if (sequentialRowSum < GRID_COLUMNS && sequentialRowSum > 0 && i > rowStart) {\n        const lastIdx = i - 1;\n        const oldColSpan = getColSpanAt(getLayout(items[lastIdx]), breakpoint);\n        const fill = GRID_COLUMNS - sequentialRowSum;\n        const newColSpan = Math.min(GRID_COLUMNS, oldColSpan + fill);\n        const layout = getLayout(items[lastIdx]);\n        if (layout) {\n          setColSpanAt(layout, breakpoint, newColSpan);\n        }\n        if (getItemId && oldColSpan > 0) {\n          const id = getItemId(items[lastIdx]);\n          if (id) {\n            const factors = scaleFactors.get(id) ?? {};\n            factors[breakpoint] = newColSpan / oldColSpan;\n            scaleFactors.set(id, factors);\n          }\n        }\n      }\n    }\n  }\n  return scaleFactors;\n}\n\n/**\n * Scales every property's colSpan inside a section by the section's scale factors\n * (e.g. when the section was expanded to fill a row). Each breakpoint is scaled\n * and capped at GRID_COLUMNS.\n */\nfunction applySectionScaleToProperties(\n  properties: MergedEntityProperty[],\n  sectionScaleFactors: Record<string, number> | undefined,\n): void {\n  if (!sectionScaleFactors || Object.keys(sectionScaleFactors).length === 0) return;\n\n  for (const prop of properties) {\n    const layout = prop.__layout;\n    if (!layout?.['positions']) continue;\n    const positions = layout['positions'] as Record<string, { colSpan?: number }>;\n    for (const breakpoint of LAYOUT_BREAKPOINTS) {\n      const factor = sectionScaleFactors[breakpoint];\n      if (factor == null) continue;\n      const placement = positions[breakpoint];\n      if (!placement || placement.colSpan == null) continue;\n      const scaled = Math.min(GRID_COLUMNS, Math.round(placement.colSpan * factor));\n      placement.colSpan = scaled;\n    }\n  }\n}\n\n// No extra action builders to keep API identical to dynamic-form-builder\n\nfunction parseEntityFullName(fullName: string): { moduleName: string; entityName: string } {\n  const [moduleName, entityName] = (fullName || '').split('.');\n  if (!moduleName || !entityName) {\n    throw new Error(`Invalid entity full name: \"${fullName}\"`);\n  }\n  return { moduleName, entityName };\n}\n\nfunction buildViewLayoutMap(views: AXPEntityPropertyView[]): Map<string, AXPEntityPropertyView> {\n  const map = new Map<string, AXPEntityPropertyView>();\n  for (const v of views || []) {\n    if (v?.name) {\n      map.set(v.name, v);\n    }\n  }\n  return map;\n}\n\nfunction orderProperties(props: AXPEntityProperty[], viewProps: AXPEntityPropertyView[]): AXPEntityProperty[] {\n  if (!viewProps || viewProps.length === 0) {\n    return props;\n  }\n\n  // Build a map of property name to its order value\n  // Use layout.order if present, otherwise use array index\n  const orderIndex = new Map<string, number>();\n  viewProps.forEach((vp, idx) => {\n    const order = vp.layout?.order ?? idx;\n    orderIndex.set(vp.name, order);\n  });\n  const x = [...props].sort((a, b) => {\n    const ai = orderIndex.has(a.name) ? (orderIndex.get(a.name) as number) : Number.MAX_SAFE_INTEGER;\n    const bi = orderIndex.has(b.name) ? (orderIndex.get(b.name) as number) : Number.MAX_SAFE_INTEGER;\n    if (ai !== bi) return ai - bi;\n    return 0;\n  });\n\n  return x;\n}\n\nfunction buildFieldPath(prop: AXPEntityProperty, viewProps: AXPEntityPropertyView[]): string {\n  const vp = (viewProps || []).find((x) => x.name === prop.name);\n  const prefix = vp?.dataPath ? `${vp.dataPath}.` : '';\n  return `${prefix}${prop.name}`;\n}\n\nfunction toFieldLayout(layout?: AXPEntityPropertyView['layout']): Partial<AXPGridLayoutOptions> | undefined {\n  const positions = layout?.positions;\n  if (!positions) return undefined;\n\n  // Check if any position is defined\n  const hasPositions = positions.sm || positions.md || positions.lg || positions.xl || positions.xxl || positions.xxxl;\n  if (!hasPositions) return undefined;\n\n  // Return the layout in the correct AXPGridLayoutOptions format\n  return {\n    ...layout,\n    positions: {\n      sm: positions.sm,\n      md: positions.md,\n      lg: positions.lg,\n      xl: positions.xl,\n      xxl: positions.xxl,\n      xxxl: positions.xxxl,\n    },\n  };\n}\n\nfunction buildWidgetOptions(prop: AXPEntityProperty): Record<string, any> {\n  const base = prop.schema?.interface?.options || {};\n  const validations = (prop.validations || []).map((c: any) => ({\n    rule: c.rule,\n    message: c.message,\n    options: c.options,\n  }));\n  return {\n    ...base,\n    validations,\n  };\n}\n\n/**\n * Extracts extended widget node properties from entity property schema\n * These properties include triggers, meta, valueTransforms, and other AXPWidgetNode properties\n * that are not part of the standard widget options\n * Note: mode is not included here as it's handled separately in the field builder\n */\nfunction buildWidgetExtendedProperties(prop: AXPEntityProperty): AXPWidgetNodeExtendedProperties | undefined {\n  const widget = prop.schema?.interface;\n  if (!widget) {\n    return undefined;\n  }\n\n  const extended: AXPWidgetNodeExtendedProperties = {};\n\n  // Extract children if present\n  extended.children = prop.schema.interface?.children;\n\n  // Extract triggers if present\n  if (widget.triggers !== undefined) {\n    extended.triggers = widget.triggers as any;\n  }\n\n  // Extract valueTransforms if present\n  if (widget.valueTransforms !== undefined) {\n    extended.valueTransforms = widget.valueTransforms;\n  }\n\n  // Extract meta if present (may be in options or directly in widget)\n  if ((widget as any).meta !== undefined) {\n    extended.meta = (widget as any).meta;\n  }\n\n  // Return undefined if no extended properties were found\n  if (Object.keys(extended).length === 0) {\n    return undefined;\n  }\n\n  return extended;\n}\n\n/** Merge-detail forms default to showing related blocks; list wizard steps default to hidden unless opted in. */\ntype RelatedEntityFormAppearPlacementKind = 'merge-detail' | 'list';\n\nfunction isRelatedEntityIncludedOnMasterForm(\n  related: AXPRelatedEntity,\n  kind: EntityInterfaceKind,\n  placementKind: RelatedEntityFormAppearPlacementKind,\n): boolean {\n  if (kind !== 'create' && kind !== 'update') {\n    return true;\n  }\n\n  const defaultInclusive = placementKind === 'merge-detail';\n\n  if (kind === 'create') {\n    const flag = related.appearOn?.create;\n    return defaultInclusive ? flag !== false : flag === true;\n  }\n\n  const flag = related.appearOn?.update;\n  return defaultInclusive ? flag !== false : flag === true;\n}\n\nfunction collectListRelatedEntitiesForFormWizard(entity: AXPEntity, kind: EntityInterfaceKind): AXPRelatedEntity[] {\n  return (entity.relatedEntities ?? [])\n    .filter(\n      (re) =>\n        !re.hidden &&\n        (re.layout?.type === 'tab-list' || re.layout?.type === 'page-list') &&\n        isRelatedEntityIncludedOnMasterForm(re, kind, 'list'),\n    )\n    .sort((a, b) => (a.layout?.order ?? 0) - (b.layout?.order ?? 0));\n}\n\nfunction isEntityPageIncludedOnMasterForm(page: AXPEntityPage, kind: EntityInterfaceKind): boolean {\n  if (kind !== 'create' && kind !== 'update') {\n    return true;\n  }\n  if (kind === 'create') {\n    return page.appearOn?.create === true;\n  }\n  return page.appearOn?.update === true;\n}\n\nfunction collectPagesForFormWizard(entity: AXPEntity, kind: EntityInterfaceKind): AXPEntityPage[] {\n  return (entity.pages ?? [])\n    .filter((page) => !page.hidden && isEntityPageIncludedOnMasterForm(page, kind))\n    .sort((a, b) => (a.layout?.order ?? 0) - (b.layout?.order ?? 0));\n}\n\nfunction buildEntityFormPageStepId(page: AXPEntityPage): string {\n  const safeKey = page.componentKey.replace(/[^a-zA-Z0-9._-]/g, '_');\n  const fieldSuffix = page.field ? `-${page.field.replace(/[^a-zA-Z0-9._-]/g, '_')}` : '';\n  return `page-${safeKey}${fieldSuffix}`;\n}\n\nfunction buildPageComponentWidgetName(page: AXPEntityPage): string {\n  return `pageComponent_${buildEntityFormPageStepId(page)}`;\n}\n\nfunction hasPersistedRootId(context: { id?: unknown; _id?: unknown } | null | undefined): boolean {\n  const raw = context?.id ?? context?._id;\n  return (typeof raw === 'string' && raw.length > 0) || (typeof raw === 'number' && !Number.isNaN(raw));\n}\n\nfunction normalizeWizardPersistedRecordPatch(data: unknown): Record<string, unknown> {\n  if (!data || typeof data !== 'object' || Array.isArray(data)) {\n    return {};\n  }\n  const record = { ...(data as Record<string, unknown>) };\n  const rawId = record['id'] ?? record['_id'];\n  if (rawId != null && record['id'] == null) {\n    record['id'] = rawId;\n  }\n  return record;\n}\n\nasync function continueActiveEntityFormPageStep(ref: AXPDialogRef): Promise<{ success: boolean }> {\n  const status = (await ref.invokeWidget?.(ENTITY_FORM_STEP_WIZARD_NAME, 'getStatus', {})) as\n    | { currentStep?: { id?: string } }\n    | undefined;\n  const stepId = status?.currentStep?.id;\n  if (!stepId?.startsWith('page-')) {\n    return { success: true };\n  }\n\n  const result = (await ref.invokeWidget?.(`pageComponent_${stepId}`, 'continueWizardStep', {\n    setLoading: ref.setLoading,\n  })) as { success?: boolean } | undefined;\n\n  return { success: result?.success !== false };\n}\n\nfunction buildEntityFormRelatedStepId(re: AXPRelatedEntity): string {\n  const safe = re.entity.replace(/[^a-zA-Z0-9._-]/g, '_');\n  return `related-${safe}-${re.layout?.order ?? 0}`;\n}\n\nfunction configureEntityFormWizardFooterActions(\n  ab: IActionBuilder,\n  wizardName: string,\n  firstStepContinueTitleKey: string,\n): void {\n  ab.custom({\n    title: '@general:actions.previous.title',\n    command: `widget:${wizardName}.previous`,\n    icon: 'fa-regular fa-arrow-left',\n    color: 'primary',\n    position: 'suffix',\n    disabled: '{{api.getStatus().isFirst}}',\n  } as any);\n  ab.custom({\n    title: firstStepContinueTitleKey,\n    command: { name: ENTITY_FORM_ACTION_FIRST_STEP_CONTINUE },\n    color: 'primary',\n    position: 'suffix',\n\n    hidden: '{{!api.getStatus().isFirst}}',\n    predicateApiWidgetName: wizardName,\n  } as any);\n  ab.custom({\n    title: '@general:actions.next.title',\n    command: { name: ENTITY_FORM_ACTION_NEXT_STEP },\n    color: 'primary',\n    position: 'suffix',\n    predicateApiWidgetName: wizardName,\n    hidden: '{{api.getStatus().isFirst || api.getStatus().isLast}}',\n  } as any);\n  ab.custom({\n    title: '@general:entity-form.done.title',\n    command: { name: ENTITY_FORM_ACTION_DONE },\n    color: 'primary',\n    position: 'suffix',\n    hidden: '{{!api.getStatus().isLast}}',\n    predicateApiWidgetName: wizardName,\n  } as any);\n}\n\nfunction getGroupTitle(entity: AXPEntity, groupId: string): string | undefined {\n  const g = (entity.groups || []).find((x) => x.id === groupId);\n  return g?.title;\n}\n\nfunction getGroupTitleFromList(groups: { id: string; title?: string }[], groupId: string): string | undefined {\n  const g = groups.find((x) => x.id === groupId);\n  return g?.title;\n}\n\n/**\n * Gets the appropriate interface from an entity based on the kind\n */\nfunction getEntityInterface(entity: AXPEntity, kind: EntityInterfaceKind) {\n  if (kind === 'create') {\n    return entity?.interfaces?.master?.create;\n  } else if (kind === 'update') {\n    return entity?.interfaces?.master?.update;\n  } else {\n    return entity?.interfaces?.master?.single;\n  }\n}\n\n// Backward compatibility adapter for external callers providing the old dynamic-form field builder delegate\ntype CompatFormFieldBuilder = {\n  path(path: string): any;\n  layout(config: any): any;\n  visible(condition: boolean | string): any;\n  readonly(condition: boolean | string): any;\n  customWidget(type: string, options?: any): any;\n} & Partial<IFormFieldBuilder>;\n\nfunction toCompatFormFieldBuilder(field: IFormFieldBuilder): CompatFormFieldBuilder {\n  return {\n    ...field,\n    path: (p: string) => field.path(p),\n    layout: (c: any) => field.layout(c as any),\n    visible: (cond: boolean | string) => field.visible(cond as any),\n    readonly: (cond: boolean | string) => field.readonly(cond as any),\n    customWidget: (type: string, options?: any) => field.customWidget(type, options),\n    mode: (mode: 'edit' | 'view') => field.mode(mode as any),\n  } as CompatFormFieldBuilder;\n}\n\n/**\n * Prefixes context.eval() expressions and expose targets with a dataPath.\n * - Transforms `context.eval(\"field\")` to `context.eval(\"dataPath.field\")`\n * - Transforms expose `target: \"field\"` to `target: \"dataPath.field\"`\n * Recursively processes objects and arrays.\n */\nfunction prefixExpressions<T>(value: T, dataPath: string, parentKey?: string): T {\n  if (!dataPath) return value;\n\n  if (typeof value === 'string') {\n    // Special handling for 'target' key in expose arrays - prefix the path directly\n    if (parentKey === 'target') {\n      // Don't prefix if already prefixed or if it starts with $ (absolute path)\n      if (value.startsWith(dataPath + '.') || value.startsWith('$')) {\n        return value as T;\n      }\n      return `${dataPath}.${value}` as T;\n    }\n\n    // Match context.eval(\"...\") or context.eval('...')\n    return value.replace(/context\\.eval\\([\"']([^\"']+)[\"']\\)/g, (match, path) => {\n      // Don't prefix if already prefixed or if it's an absolute path\n      if (path.startsWith(dataPath + '.') || path.startsWith('$')) {\n        return match;\n      }\n      return `context.eval(\"${dataPath}.${path}\")`;\n    }) as T;\n  }\n\n  if (Array.isArray(value)) {\n    return value.map((item) => prefixExpressions(item, dataPath, parentKey)) as T;\n  }\n\n  if (value !== null && typeof value === 'object') {\n    const result: Record<string, unknown> = {};\n    for (const key of Object.keys(value)) {\n      result[key] = prefixExpressions((value as Record<string, unknown>)[key], dataPath, key);\n    }\n    return result as T;\n  }\n\n  return value;\n}\n\n/**\n * Extended property type with merge-detail metadata\n */\ninterface MergedEntityProperty extends AXPEntityProperty {\n  __dataPath?: string;\n  __layout?: AXPEntityPropertyView['layout'];\n  __order?: number;\n}\n\n/**\n * Section with ordering metadata for merge-detail\n */\ninterface MergedSection extends AXPEntitySectionView {\n  __entityOrder?: number;\n  __position?: 'before' | 'middle' | 'after';\n}\n\n/**\n * Groups properties by their groupId (section)\n */\nfunction groupPropertiesBySection(properties: AXPEntityProperty[]): Map<string, AXPEntityProperty[]> {\n  const map = new Map<string, AXPEntityProperty[]>();\n  for (const prop of properties) {\n    const groupId = prop.groupId ?? 'default';\n    if (!map.has(groupId)) {\n      map.set(groupId, []);\n    }\n    map.get(groupId)!.push(prop);\n  }\n  return map;\n}\n\n/**\n * Sorts sections by position and order:\n * 1. Before sections (sorted by entityOrder, then section order)\n * 2. Middle sections (main + middle-only, sorted by effective order while preserving original index for stable sort)\n * 3. After sections (sorted by entityOrder, then section order)\n */\nfunction sortMergedSections(\n  mainSections: AXPEntitySectionView[],\n  extraSections: MergedSection[],\n  mainSectionIds: Set<string>,\n): AXPEntitySectionView[] {\n  const beforeSections = extraSections\n    .filter((s) => s.__position === 'before' && !mainSectionIds.has(s.id))\n    .sort((a, b) => {\n      const entityOrderDiff = (a.__entityOrder ?? Infinity) - (b.__entityOrder ?? Infinity);\n      if (entityOrderDiff !== 0) return entityOrderDiff;\n      return (a.order ?? 0) - (b.order ?? 0);\n    });\n\n  const middleSections = extraSections.filter((s) => s.__position === 'middle' && !mainSectionIds.has(s.id));\n\n  const afterSections = extraSections\n    .filter((s) => s.__position === 'after' && !mainSectionIds.has(s.id))\n    .sort((a, b) => {\n      const entityOrderDiff = (a.__entityOrder ?? Infinity) - (b.__entityOrder ?? Infinity);\n      if (entityOrderDiff !== 0) return entityOrderDiff;\n      return (a.order ?? 0) - (b.order ?? 0);\n    });\n\n  // Middle block: main sections + middle-only sections\n  // Sort by order (undefined order is treated as 0)\n  const middleBlock = [...mainSections, ...middleSections];\n  const sortedMiddleBlock = middleBlock.sort((a, b) => {\n    // Treat undefined order as 0 for sorting\n    const aOrder = a.order ?? 0;\n    const bOrder = b.order ?? 0;\n    return aOrder - bOrder;\n  });\n\n  return [...beforeSections, ...sortedMiddleBlock, ...afterSections];\n}\n\n//#endregion\n","import { AXPCommand } from '@acorex/platform/runtime-contracts';\nimport { axpNavigateAppPath } from '@acorex/platform/common';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\n\nimport { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\n\n//#region ----   Types   ----\n\nexport interface AXPOpenEntityDetailsCommandInput {\n  entity: string;\n  data: { id: string };\n}\n\n//#endregion\n\n//#region ----   Entity Open Details Command   ----\n\n/**\n * Generic command to open entity details view\n * Can be used by any entity to navigate to its detail page\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPOpenEntityDetailsCommand\n  implements AXPCommand<AXPOpenEntityDetailsCommandInput, AXPExecuteCommandResult>\n{\n  //#endregion\n\n  //#region ----   Services & Dependencies   ----\n\n  private readonly router = inject(Router);\n  private readonly sessionService = inject(AXPSessionService);\n\n  //#endregion\n\n  //#region ----   Command Execution   ----\n\n  /**\n   * Execute the command to navigate to entity details\n   * @param input - Command input containing entity and data information\n   */\n  async execute(input: AXPOpenEntityDetailsCommandInput): Promise<AXPExecuteCommandResult> {\n    const { entity, data } = input;\n\n    if (!entity) {\n      return {\n        success: false,\n        message: {\n          text: 'Entity name is required for opening details view',\n        },\n      };\n    }\n\n    if (!data?.id) {\n      return {\n        success: false,\n        message: {\n          text: 'Entity ID is required for opening details view',\n        },\n      };\n    }\n\n    const [module, entityName] = entity.split('.');\n\n    if (!module || !entityName) {\n      return {\n        success: false,\n        message: {\n          text: 'Entity must be in format \"ModuleName.EntityName\"',\n        },\n      };\n    }\n\n    const url = `/${this.sessionService.application?.name}/m/${module}/e/${entityName}/${data.id}/view`;\n\n    await axpNavigateAppPath(this.router, url);\n\n    return {\n      success: true,\n    };\n  }\n\n  //#endregion\n}\n\n//#endregion\n","import { AXPCommand } from '@acorex/platform/runtime-contracts';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n  AXPCommonSettings,\n  AXPRefreshEvent,\n  AXPSettingsService,\n  resolveEntityCreateListBehavior,\n} from '@acorex/platform/common';\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPEntity } from '@acorex/platform/layout/entity-contracts';\n\nimport { AXPWorkflowEventService } from '@acorex/platform/workflow';\nimport { inject, Injectable } from '@angular/core';\nimport { get, merge } from 'lodash-es';\nimport { AXPEntityDefinitionRegistryService } from '../entity-registery.service';\nimport {\n  AXPEntityFormBuilderService,\n  ENTITY_FORM_ACTION_FIRST_STEP_CONTINUE,\n} from '../services/entity-forms/entity-form-builder.service';\nimport { AXPOpenEntityDetailsCommand } from './open-entity-details.command';\n\n/** Footer dropdown item: persist then reopen the create dialog with the same seed data. */\nconst CREATE_AND_NEW_ACTION = 'create-and-new';\n\n/** Matches persisted PK checks used for choose update vs create (strict types only). */\nfunction hasPersistedRootId(context: { id?: unknown; _id?: unknown } | null | undefined): boolean {\n  const raw = context?.id ?? context?._id;\n  return (typeof raw === 'string' && raw.length > 0) || (typeof raw === 'number' && !Number.isNaN(raw));\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPCreateEntityCommand implements AXPCommand<any, any> {\n  private entityForm = inject(AXPEntityFormBuilderService);\n  private entityService = inject(AXPEntityDefinitionRegistryService);\n  private toastService = inject(AXToastService);\n  private translationService = inject(AXTranslationService);\n  private settingsService = inject(AXPSettingsService);\n  private openEntityDetailsCommand = inject(AXPOpenEntityDetailsCommand);\n  private workflowEventService = inject(AXPWorkflowEventService);\n\n  protected context = {};\n\n  async execute(input: any): Promise<AXPExecuteCommandResult<any>> {\n    const enableOperationToasts = await this.settingsService.get<boolean>(AXPCommonSettings.EnableOperationToasts);\n    const dialogSize = input['dialogSize'];\n    const { entity, entityInfo, data, options } = input.__context__ as {\n      entity: string;\n      entityInfo: {\n        name: string;\n        module: string;\n        title: string;\n        parentKey: string;\n      };\n      data: any;\n      options: any;\n      metadata: any;\n    };\n\n    const excludeProperties = options?.excludeProperties;\n    const includeProperties = options?.includeProperties;\n\n    // Extract decoration and layout from options (similar to workflow)\n    const decoration = options?.['decoration'];\n    const layout = options?.['layout'];\n    const headerTitle = decoration?.header?.title;\n    const layoutSize = layout?.size;\n\n    const [moduleName, entityName] = (entity || '').split('.');\n    if (!moduleName || !entityName) {\n      return {\n        success: false,\n        message: {\n          text: await this.translationService.translateAsync('@general:messages.entity.invalid-identifier'),\n        },\n      };\n    }\n    const entityRef = await this.entityService.resolve(moduleName, entityName);\n\n    const canCreateNewOne = get(options, 'process.canCreateNewOne') === true;\n\n    let chain = this.entityForm.entity(`${moduleName}.${entityName}`).create(data);\n    chain.actions((actions) => {\n      actions.cancel('@general:actions.cancel.title');\n      if (canCreateNewOne) {\n        actions.custom(\n          {\n            title: '@general:actions.create.title',\n            color: 'primary',\n            command: { name: 'submit', options: { validate: true } },\n            items: [\n              {\n                title: '@general:actions.save-and-new.title',\n                command: { name: CREATE_AND_NEW_ACTION, options: { validate: true } },\n              },\n            ],\n          },\n          { shortcuts: ['Enter', 'ctrl+s'] },\n        );\n      } else {\n        actions.submit('@general:actions.create.title', { shortcuts: ['Enter', 'ctrl+s'] });\n      }\n    });\n    if (excludeProperties && excludeProperties.length > 0) {\n      chain = chain.exclude(...excludeProperties);\n    }\n    if (includeProperties && includeProperties.length > 0) {\n      chain = chain.include(...includeProperties);\n    }\n\n    // Set dialog title: use decoration.header.title if available, otherwise use entityInfo.title\n    if (headerTitle) {\n      chain = chain.title(headerTitle);\n    } else if (entityInfo?.title) {\n      const createText = await this.translationService.translateAsync('@general:actions.create.title');\n      const translatedTitle = await this.translationService.translateAsync(entityInfo.title);\n      chain = chain.title(`${createText} ${translatedTitle}`);\n    }\n\n    // Set dialog size: prioritize layout.size, then dialogSize from input\n    const finalSize = layoutSize || dialogSize;\n    if (finalSize) {\n      chain.size(finalSize);\n    }\n\n    const entityFullName = `${moduleName}.${entityName}`;\n    const redirectOption = options?.process?.redirect;\n    const { shouldRedirect, shouldHighlight } = await resolveEntityCreateListBehavior(this.settingsService, {\n      redirect: redirectOption,\n    });\n\n    let isCreateAndNew = false;\n\n    const result = await chain\n      .onAction<AXPExecuteCommandResult<any>>(async (dialogRef) => {\n        if (dialogRef.action() === 'cancel') {\n          return { success: false };\n        }\n\n        isCreateAndNew = dialogRef.action() === CREATE_AND_NEW_ACTION;\n\n        const createFn = entityRef.commands?.create?.execute as\n          | ((payload: any) => Promise<AXPExecuteCommandResult<any>>)\n          | undefined;\n        const updateFn = entityRef.commands?.update?.execute as\n          | ((payload: any) => Promise<AXPExecuteCommandResult<any>>)\n          | undefined;\n\n        const context = merge({}, data, dialogRef.context());\n        const hasPersistedId = hasPersistedRootId(context);\n\n        const persistFn = hasPersistedId ? updateFn : createFn;\n        const missingPersistHandlerMsg = hasPersistedId\n          ? await this.translationService.translateAsync('@general:messages.entity.update-command-unavailable')\n          : await this.translationService.translateAsync('@general:messages.entity.create-command-unavailable');\n        const failedMsgKey = hasPersistedId\n          ? '@general:messages.entity.update-failed'\n          : '@general:messages.entity.create-failed';\n\n        if (!persistFn) {\n          if (enableOperationToasts) {\n            this.toastService.show({\n              color: 'danger',\n              title: await this.translationService.translateAsync('@general:messages.generic.error.title'),\n              content: missingPersistHandlerMsg,\n            });\n          }\n          throw new Error(missingPersistHandlerMsg);\n        }\n\n        dialogRef.setLoading(true);\n        try {\n          const result = await persistFn(context);\n          if (result) {\n            const commandResult: AXPExecuteCommandResult<any> = {\n              success: true,\n              data: result.data ?? result,\n              message: {\n                text: await this.translationService.translateAsync('@general:messages.generic.success.description'),\n              },\n              metadata: {\n                createAndNew: isCreateAndNew,\n              },\n            };\n\n            if (dialogRef.action() === ENTITY_FORM_ACTION_FIRST_STEP_CONTINUE) {\n              this.dispatchCreateListRefresh(entityFullName, entityRef, commandResult.data, shouldHighlight);\n            }\n\n            return commandResult;\n          } else {\n            return {\n              success: false,\n              message: {\n                text: await this.translationService.translateAsync(failedMsgKey),\n              },\n            };\n          }\n        } catch (e: any) {\n          const errorMsg = e.message ?? (await this.translationService.translateAsync(failedMsgKey));\n\n          if (enableOperationToasts) {\n            this.toastService.show({\n              color: 'danger',\n              title: await this.translationService.translateAsync('@general:messages.generic.error.title'),\n              content: errorMsg,\n            });\n          }\n          throw e;\n        } finally {\n          dialogRef.setLoading(false);\n        }\n      })\n      .show();\n\n    const commandResult = result as unknown as AXPExecuteCommandResult<any>;\n\n    if (commandResult.success && commandResult.data) {\n      const createdItem = commandResult.data?.item ?? commandResult.data;\n      const createdId = createdItem?.id ?? createdItem?._id;\n\n      this.dispatchCreateListRefresh(entityFullName, entityRef, commandResult.data, shouldHighlight);\n\n      // Create & New always wins over Redirect to Details After Create.\n      if (isCreateAndNew) {\n        return this.execute(input);\n      }\n\n      if (shouldRedirect && createdId != null) {\n        await this.openEntityDetailsCommand.execute({\n          entity: entityFullName,\n          data: { id: String(createdId) },\n        });\n      }\n    }\n    return commandResult;\n  }\n\n  private dispatchCreateListRefresh(\n    entityFullName: string,\n    entityRef: AXPEntity,\n    resultData: unknown,\n    shouldHighlight: boolean,\n  ): void {\n    const createdItem = (resultData as { item?: Record<string, unknown> })?.item ?? resultData;\n    const createdRecord = createdItem as Record<string, unknown> | null | undefined;\n    const createdId = createdRecord?.['id'] ?? createdRecord?.['_id'];\n    const refreshMeta: Record<string, unknown> = { resetPagination: true };\n\n    if (createdId != null && shouldHighlight) {\n      refreshMeta['highlightRowId'] = createdId;\n    }\n    if (entityRef.parentKey && createdRecord?.[entityRef.parentKey]) {\n      refreshMeta['refreshTargetId'] = createdRecord[entityRef.parentKey];\n    }\n\n    this.workflowEventService.dispatch(\n      AXPRefreshEvent({\n        entity: entityFullName,\n        meta: refreshMeta,\n      }),\n    );\n  }\n}\n","/**\n * Build-time only. Do not import from Angular modules.\n */\n\nimport { AXP_COMMAND_DEFINITION_CATEGORY_ENTITY, defineCommand } from '@acorex/platform/runtime-contracts';\n/**\n * Merged into AI/tool payloads for `Entity:Create` so post-create navigation does not run from agent flows.\n * Applied in the AI module when normalizing tool arguments (not in the generic command executor).\n */\nexport const axpCreateEntityAiToolInputDefaults = {\n  __context__: {\n    options: {\n      process: {\n        redirect: false,\n      },\n    },\n  },\n} as const satisfies Record<string, unknown>;\n\nexport const axpCreateEntityCommandDefinition = defineCommand({\n  key: 'Entity:Create',\n  title: 'Create entity (dialog)',\n  description:\n    'AXPCreateEntityCommand reads __context__ (entity, entityInfo, data, options, metadata) and optional root dialogSize; builds AXPEntityFormBuilderService create chain with exclude/include, decoration header title, layout size; submits insert via entity form flow.',\n  executionMode: 'frontend',\n  inputs: [\n    {\n      name: 'dialogSize',\n      title: 'Dialog size',\n      description: 'Optional root dialogSize; layout.size from options can override.',\n      interface: { name: 'text-editor' },\n    },\n    {\n      name: '__context__',\n      title: 'Command context',\n      description:\n        'Required nested object: entity (Module.Entity), entityInfo { name, module, title, parentKey }, data seed, options { excludeProperties, includeProperties, decoration, layout, process { redirect, canCreateNewOne } }. canCreateNewOne defaults to false; when true the Create button is a split dropdown with Save and Create New (reopens the dialog with the same process.data). For AI/tool calls, defaults include options.process.redirect = false (see toolInputDefaults) to avoid navigating away after create.',\n      interface: { name: 'json' },\n      validations: [{ rule: 'required' }],\n    },\n  ],\n  outcomes: {\n    mode: 'dynamic',\n    summary: 'Dialog submit persists entity; navigation/toast behavior per entity form builder and settings.',\n    derivesFrom: 'AXPExecuteCommandResult<any> from entity form chain and AXPOpenEntityDetailsCommand',\n  },\n  capabilities: ['ai'],\n  ai: {\n    shortDescription:\n      'Opens create dialog with pre-filled data; execution waits until the user submits or cancels, then returns—use for human-confirmed inserts into mock storage.',\n    usage: {\n      whenToUse: [\n        'Adding a row when the user should review or edit values before save; same entity create pipeline as the UI (storage middlewares apply on submit).',\n      ],\n      avoidWhen: [\n        'Non-interactive headless insert—ConnectivityMock:EntityStorage:Insert is disabled; there is no silent insert tool in this catalog.',\n      ],\n      followUpTools: ['PlatformManagement:ListRegisteredEntities', 'ConnectivityMock:EntityStorage:Query'],\n    },\n    tags: ['entity', 'create', 'form', 'dialog', 'human-in-the-loop', 'mock', 'entity-storage', 'wait-user'],\n    toolInputDefaults: { ...axpCreateEntityAiToolInputDefaults },\n  },\n  categories: [AXP_COMMAND_DEFINITION_CATEGORY_ENTITY],\n});\n","import { AXPCommand } from '@acorex/platform/runtime-contracts';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPCommonSettings, AXPSettingsService, resolveEntityModifyPopupTitle } from '@acorex/platform/common';\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPBroadcastEventService, AXPContextEvalFactory, AXPExpressionEvaluatorService } from '@acorex/platform/core';\n\nimport { inject, Injectable } from '@angular/core';\nimport { AXPEntityDefinitionRegistryService } from '../entity-registery.service';\nimport { AXPEntityFormBuilderService } from '../services/entity-forms/entity-form-builder.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPUpdateEntityCommand implements AXPCommand<any, any> {\n  //#region ----   Services & Dependencies   ----\n\n  private readonly entityForm = inject(AXPEntityFormBuilderService);\n  private readonly settingsService = inject(AXPSettingsService);\n  private readonly entityService = inject(AXPEntityDefinitionRegistryService);\n  private readonly toastService = inject(AXToastService);\n  private readonly translationService = inject(AXTranslationService);\n  private readonly formatService = inject(AXFormatService);\n  private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n  private readonly contextEvalFactory = inject(AXPContextEvalFactory);\n  private readonly eventService = inject(AXPBroadcastEventService);\n\n  //#endregion\n\n  //#region ----   Command Execution   ----\n\n  async execute(input: any): Promise<AXPExecuteCommandResult<any>> {\n    const enableOperationToasts = await this.settingsService.get<boolean>(AXPCommonSettings.EnableOperationToasts);\n    const dialogSize = input['dialogSize'];\n    const { entity, data, options } = input.__context__ as {\n      entity: string;\n      entityInfo?: {\n        name: string;\n        module: string;\n        title: string;\n        parentKey: string;\n      };\n      data: string | any;\n      options: any;\n      metadata: any;\n    };\n\n    const excludeProperties = options?.excludeProperties;\n    const includeProperties = options?.includeProperties;\n\n    const decoration = options?.['decoration'];\n    const layout = options?.['layout'];\n    const headerTitle = decoration?.header?.title;\n    const layoutSize = layout?.size;\n\n    const [moduleName, entityName] = (entity || '').split('.');\n    if (!moduleName || !entityName) {\n      return {\n        success: false,\n        message: {\n          text: await this.translationService.translateAsync('@general:messages.entity.invalid-identifier'),\n        },\n      };\n    }\n\n    const entityRef = await this.entityService.resolve(moduleName, entityName);\n\n    try {\n      if (!data || (typeof data !== 'string' && typeof data !== 'object')) {\n        return {\n          success: false,\n          message: {\n            text: await this.translationService.translateAsync('@general:messages.entity.invalid-data'),\n          },\n        };\n      }\n\n      let chain = this.entityForm.entity(`${moduleName}.${entityName}`).update(data);\n\n      chain.actions((actions) => {\n        actions.cancel('@general:actions.cancel.title').submit('@general:actions.apply.title');\n      });\n\n      if (excludeProperties && excludeProperties.length > 0) {\n        chain = chain.exclude(...excludeProperties);\n      }\n\n      if (includeProperties && includeProperties.length > 0) {\n        chain = chain.include(...includeProperties);\n      }\n\n      if (headerTitle) {\n        chain = chain.title(headerTitle);\n      } else {\n        let recordData: unknown = {};\n        const recordId = typeof data === 'string' ? data : (data?.id ?? data?._id);\n        if (recordId) {\n          recordData = await this.entityForm.getRecordById(`${moduleName}.${entityName}`, String(recordId));\n        } else if (typeof data === 'object' && data != null) {\n          recordData = data;\n        }\n\n        const title = await resolveEntityModifyPopupTitle(\n          entityRef,\n          recordData,\n          this.translationService,\n          this.formatService,\n          this.expressionEvaluator,\n          this.contextEvalFactory,\n          '@general:actions.edit.title',\n        );\n        chain = chain.title(title);\n      }\n\n      const finalSize = layoutSize || dialogSize;\n      if (finalSize) {\n        chain.size(finalSize);\n      }\n\n      return (await chain\n        .onAction<AXPExecuteCommandResult<any>>(async (dialogRef) => {\n          if (dialogRef.action() === 'cancel') {\n            return { success: false };\n          }\n\n          const updateFn = entityRef.commands?.update?.execute as\n            | ((payload: any) => Promise<AXPExecuteCommandResult<any>>)\n            | undefined;\n\n          if (!updateFn) {\n            const msg = await this.translationService.translateAsync(\n              '@general:messages.entity.update-command-unavailable',\n            );\n            if (enableOperationToasts) {\n              this.toastService.show({\n                color: 'danger',\n                title: await this.translationService.translateAsync('@general:messages.generic.error.title'),\n                content: msg,\n              });\n            }\n            throw new Error(msg);\n          }\n\n          dialogRef.setLoading(true);\n          try {\n            const context = dialogRef.context();\n            const result = await updateFn(context);\n            if (result) {\n              return {\n                success: true,\n                data: result.data ?? result,\n                message: {\n                  text: await this.translationService.translateAsync('@general:messages.generic.success.description'),\n                },\n              };\n            }\n            return {\n              success: false,\n              message: {\n                text: await this.translationService.translateAsync('@general:messages.entity.command-no-result'),\n              },\n            };\n          } catch (e: any) {\n            const errorMsg =\n              e.message ?? (await this.translationService.translateAsync('@general:messages.entity.update-failed'));\n            if (enableOperationToasts) {\n              this.toastService.show({\n                color: 'danger',\n                title: await this.translationService.translateAsync('@general:messages.generic.error.title'),\n                content: errorMsg,\n              });\n            }\n            throw e;\n          } finally {\n            dialogRef.setLoading(false);\n          }\n        })\n        .show()) as unknown as AXPExecuteCommandResult<any>;\n    } catch (error) {\n      const text =\n        error instanceof Error\n          ? error.message\n          : await this.translationService.translateAsync('@general:messages.entity.update-failed');\n      if (enableOperationToasts) {\n        this.toastService.show({\n          color: 'danger',\n          title: await this.translationService.translateAsync('@general:messages.generic.error.title'),\n          content: text,\n        });\n      }\n      return {\n        success: false,\n        message: { text },\n      };\n    }\n  }\n\n  //#endregion\n}\n","import { AXPCommand } from '@acorex/platform/runtime-contracts';\nimport { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPContextEvalFactory, AXPExpressionEvaluatorScope, AXPExpressionEvaluatorService } from '@acorex/platform/core';\n\nimport { get } from 'lodash-es';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPEntityDefinitionRegistryService } from '../entity-registery.service';\nimport { AXPEntityFormBuilderService } from '../services/entity-forms/entity-form-builder.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPViewEntityDetailsCommand implements AXPCommand<any, any> {\n  //#region ---- Services & Dependencies ----\n\n  private readonly entityForm = inject(AXPEntityFormBuilderService);\n  private readonly entityService = inject(AXPEntityDefinitionRegistryService);\n  private readonly translationService = inject(AXTranslationService);\n  private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n  private readonly contextEvalFactory = inject(AXPContextEvalFactory);\n\n  //#endregion\n\n  //#region ---- Command Execution ----\n\n  async execute(input: any): Promise<AXPExecuteCommandResult<any>> {\n    const excludeProperties =\n      input['excludeProperties'] ??\n      input?.options?.excludeProperties ??\n      input?.__context__?.options?.excludeProperties;\n\n    const { entity, entityInfo, data } = input.__context__ as {\n      entity: string;\n      entityInfo: {\n        name: string;\n        module: string;\n        title: string;\n        parentKey: string;\n      };\n      data: string | Record<string, unknown>;\n      options: Record<string, unknown>;\n      metadata: unknown;\n    };\n\n    const [moduleName, entityName] = (entity || '').split('.');\n    if (!moduleName || !entityName) {\n      return {\n        success: false,\n        message: {\n          text: await this.translationService.translateAsync('@general:messages.entity.invalid-identifier'),\n        },\n      };\n    }\n\n    const entityDef = await this.entityService.resolve(moduleName, entityName);\n\n    let dialogRef: unknown;\n\n    try {\n      if (!data || (typeof data !== 'string' && typeof data !== 'object')) {\n        return {\n          success: false,\n          message: {\n            text: await this.translationService.translateAsync('@general:messages.entity.invalid-data'),\n          },\n        };\n      }\n\n      let chain = this.entityForm.entity(`${moduleName}.${entityName}`).single(data);\n\n      if (excludeProperties && excludeProperties.length > 0) {\n        chain = chain.exclude(...excludeProperties);\n      }\n\n      const dialogTitle = await this.resolveDialogTitle(entityDef, data);\n      if (dialogTitle) {\n        chain = chain.title(dialogTitle);\n      }\n\n      chain = chain.actions((actions) => {\n        actions.submit('@general:actions.ok.title');\n      });\n\n      dialogRef = await chain.show();\n\n      (dialogRef as { close: () => void }).close();\n      return {\n        success: true,\n        metadata: {\n          refresh: false,\n        },\n      };\n    } catch (error) {\n      return {\n        success: false,\n        message: {\n          text:\n            error instanceof Error\n              ? error.message\n              : await this.translationService.translateAsync('@general:messages.entity.view-failed'),\n        },\n      };\n    } finally {\n      if (dialogRef && typeof dialogRef === 'object' && dialogRef !== null && 'setLoading' in dialogRef) {\n        (dialogRef as { setLoading: (value: boolean) => void }).setLoading(false);\n      }\n    }\n  }\n\n  //#endregion\n\n  //#region ---- Title resolution ----\n\n  private async resolveDialogTitle(\n    entityDef: Awaited<ReturnType<AXPEntityDefinitionRegistryService['resolve']>>,\n    data: string | Record<string, unknown>,\n  ): Promise<string> {\n    const titleTemplate =\n      entityDef.interfaces?.master?.single?.title ??\n      entityDef.formats?.searchResult?.title ??\n      entityDef.formats?.individual;\n\n    if (!titleTemplate || typeof titleTemplate !== 'string') {\n      return this.translationService.translateAsync('@general:actions.detail.title');\n    }\n\n    if (!titleTemplate.includes('{{')) {\n      const translated = await this.translationService.translateAsync(titleTemplate);\n      return resolveMultiLanguageString(translated as never, this.translationService.getActiveLang()).trim() || translated;\n    }\n\n    const recordContext = await this.loadRecordContext(`${entityDef.module}.${entityDef.name}`, data);\n    const scope: AXPExpressionEvaluatorScope = {\n      context: this.contextEvalFactory.createScope(recordContext),\n    };\n\n    const evaluated = await this.expressionEvaluator.evaluate(titleTemplate, scope);\n    const locale = this.translationService.getActiveLang();\n    const text = resolveMultiLanguageString(evaluated as never, locale).trim() || String(evaluated ?? '').trim();\n\n    if (text) {\n      return text;\n    }\n\n    return this.translationService.translateAsync('@general:actions.detail.title');\n  }\n\n  private async loadRecordContext(\n    entityFullName: string,\n    data: string | Record<string, unknown>,\n  ): Promise<Record<string, unknown>> {\n    if (typeof data === 'object' && data !== null && !Array.isArray(data)) {\n      const hasNestedFields =\n        get(data, 'subject.title') != null ||\n        get(data, 'recordType.title') != null ||\n        get(data, 'occurredDate') != null;\n      if (hasNestedFields) {\n        return data as Record<string, unknown>;\n      }\n    }\n\n    const recordId = typeof data === 'string' ? data : String(get(data, 'id') ?? '');\n    if (!recordId) {\n      return typeof data === 'object' && data !== null ? (data as Record<string, unknown>) : {};\n    }\n\n    try {\n      const [moduleName, entityName] = entityFullName.split('.');\n      const entity = await this.entityService.resolve(moduleName, entityName);\n      const byKeyFn = entity?.queries?.byKey?.execute as unknown as (id: string) => Promise<Record<string, unknown>>;\n      if (typeof byKeyFn === 'function') {\n        return (await byKeyFn(recordId)) ?? {};\n      }\n    } catch {\n      // Fall back to list row payload below.\n    }\n\n    return typeof data === 'object' && data !== null ? (data as Record<string, unknown>) : {};\n  }\n\n  //#endregion\n}\n","import { type AXPEntity, isUnresolvedEntityDisplayTemplate, normalizeEntityDisplayTemplate, sanitizeResolvedEntityDisplayTitle } from '@acorex/platform/layout/entity-contracts';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\n\nimport { evaluateEntityDisplayTemplate, resolveSearchableText } from '@acorex/platform/common';\n\nimport { AXPMultiLanguageString } from '@acorex/platform/contracts';\nimport { AXPContextEvalFactory, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { get } from 'lodash-es';\n\nimport type { AXPLookupDisplayOptions } from '@acorex/platform/layout/entity-contracts';\n\n/** Common keys on denormalized expose stubs (e.g. `{ id, displayName }` from lookup expose). */\nconst LOOKUP_EXPOSE_STUB_DISPLAY_FIELDS = ['displayName', 'title', 'name', 'fullName', 'code'] as const;\n\nfunction resolveLookupItemFieldValue(item: object, field: string): unknown {\n  const direct = get(item, field);\n  if (direct != null && direct !== '') {\n    return direct;\n  }\n\n  if (!field.includes('.')) {\n    return direct;\n  }\n\n  for (const fallback of LOOKUP_EXPOSE_STUB_DISPLAY_FIELDS) {\n    const candidate = get(item, fallback);\n    if (candidate != null && candidate !== '') {\n      return candidate;\n    }\n  }\n\n  return direct;\n}\n\nfunction formatLookupFieldValue(\n  raw: unknown,\n  locale: string,\n  translationService: AXTranslationService,\n  resolveMultiLanguage?: (value: AXPMultiLanguageString) => string,\n): string {\n  if (raw == null || raw === '') {\n    return '';\n  }\n\n  if (typeof raw === 'string' || typeof raw === 'number' || typeof raw === 'boolean') {\n    return String(raw);\n  }\n\n  if (typeof raw === 'object' && !Array.isArray(raw)) {\n    if (resolveMultiLanguage) {\n      return resolveMultiLanguage(raw as AXPMultiLanguageString);\n    }\n    return resolveSearchableText(raw, locale, translationService);\n  }\n\n  return String(raw);\n}\n\n//#region ---- Template resolution ----\n\n/**\n * Resolves the display template for a lookup item.\n * Priority: explicit `displayFormat` → entity `formats.lookup` (template) → entity `formats.searchResult.title`.\n * Returns undefined when `textField` is set or no template applies (use {@link resolveLookupDisplayField} instead).\n */\nexport function resolveLookupDisplayTemplate(\n  entity: AXPEntity | null | undefined,\n  options: AXPLookupDisplayOptions,\n): string | undefined {\n  const explicit = options.displayFormat?.trim();\n  if (explicit) {\n    return normalizeEntityDisplayTemplate(explicit);\n  }\n\n  if (options.textField?.trim()) {\n    return undefined;\n  }\n\n  const lookupFormat = entity?.formats?.lookup?.trim();\n  if (lookupFormat && (lookupFormat.includes('{{') || lookupFormat.includes('{'))) {\n    return normalizeEntityDisplayTemplate(lookupFormat);\n  }\n\n  const searchTitle = entity?.formats?.searchResult?.title?.trim();\n  if (searchTitle) {\n    return normalizeEntityDisplayTemplate(searchTitle);\n  }\n\n  return undefined;\n}\n\n/**\n * Resolves the property path used for lookup display when no template applies.\n * Priority: explicit `textField` → entity `formats.lookup` (simple path) → common property names.\n */\nexport function resolveLookupDisplayField(\n  entity: AXPEntity | null | undefined,\n  options: AXPLookupDisplayOptions,\n): string {\n  if (options.textField?.trim()) {\n    return options.textField.trim();\n  }\n\n  const lookupFormat = entity?.formats?.lookup?.trim();\n  if (lookupFormat && !lookupFormat.includes('{') && !lookupFormat.includes('{{')) {\n    return lookupFormat;\n  }\n\n  const defaults = ['title', 'name', 'code', 'description'];\n  const found = defaults.find((name) => entity?.properties?.some((p) => p.name === name));\n  return found ?? 'title';\n}\n\nexport interface AXPLookupDisplayEvalDeps {\n  expressionEvaluator: AXPExpressionEvaluatorService;\n  contextEvalFactory: AXPContextEvalFactory;\n  translationService: AXTranslationService;\n  locale: string;\n}\n\n/**\n * Formats a lookup row for display using template and/or field resolution (display tier).\n */\nexport async function formatLookupItemDisplayAsync(\n  item: unknown,\n  entity: AXPEntity | null | undefined,\n  options: AXPLookupDisplayOptions,\n  formatService: AXFormatService,\n  displayDeps: AXPLookupDisplayEvalDeps,\n  resolveMultiLanguage?: (value: AXPMultiLanguageString) => string,\n): Promise<string> {\n  if (item == null) {\n    return '';\n  }\n\n  if (typeof item === 'string' || typeof item === 'number' || typeof item === 'boolean') {\n    return String(item);\n  }\n\n  if (typeof item !== 'object') {\n    return '';\n  }\n\n  if (options.isMultiLanguage?.(item) && resolveMultiLanguage) {\n    return resolveMultiLanguage(item as AXPMultiLanguageString);\n  }\n\n  const template = resolveLookupDisplayTemplate(entity, options);\n  if (template) {\n    if (template.includes('{{') || template.includes('context.eval')) {\n      const evaluated = await evaluateEntityDisplayTemplate(\n        template,\n        item,\n        displayDeps.expressionEvaluator,\n        displayDeps.locale,\n        displayDeps.translationService,\n        displayDeps.contextEvalFactory,\n      );\n      const text = sanitizeResolvedEntityDisplayTitle(\n        resolveSearchableText(evaluated, displayDeps.locale, displayDeps.translationService),\n      );\n      if (text && !isUnresolvedEntityDisplayTemplate(text)) {\n        return text;\n      }\n    } else {\n      const formatted = formatService.format(template, 'string', item);\n      if (formatted) {\n        const text = String(formatted);\n        if (!isUnresolvedEntityDisplayTemplate(text)) {\n          return text;\n        }\n      }\n    }\n  }\n\n  const field = resolveLookupDisplayField(entity, options);\n  const raw = typeof item === 'object' && item != null ? resolveLookupItemFieldValue(item, field) : undefined;\n  return formatLookupFieldValue(\n    raw,\n    displayDeps.locale,\n    displayDeps.translationService,\n    resolveMultiLanguage,\n  );\n}\n\n/**\n * @deprecated Prefer {@link formatLookupItemDisplayAsync} for expression templates with `context.eval`.\n */\nexport function formatLookupItemDisplay(\n  item: unknown,\n  entity: AXPEntity | null | undefined,\n  options: AXPLookupDisplayOptions,\n  formatService: AXFormatService,\n  resolveMultiLanguage?: (value: AXPMultiLanguageString) => string,\n): string | AXPMultiLanguageString {\n  if (item == null) {\n    return '';\n  }\n\n  if (typeof item === 'string' || typeof item === 'number' || typeof item === 'boolean') {\n    return String(item);\n  }\n\n  if (typeof item !== 'object') {\n    return '';\n  }\n\n  if (options.isMultiLanguage?.(item) && resolveMultiLanguage) {\n    return resolveMultiLanguage(item as AXPMultiLanguageString);\n  }\n\n  const template = resolveLookupDisplayTemplate(entity, options);\n  if (template && !template.includes('context.eval') && !template.includes('{{')) {\n    const formatted = formatService.format(template, 'string', item);\n    if (formatted) {\n      const text = String(formatted);\n      if (!isUnresolvedEntityDisplayTemplate(text)) {\n        return text;\n      }\n    }\n  }\n\n  const field = resolveLookupDisplayField(entity, options);\n  const raw =\n    typeof item === 'object' && item != null ? resolveLookupItemFieldValue(item as object, field) : undefined;\n  if (raw == null || raw === '') {\n    return '';\n  }\n\n  if (typeof raw === 'string' || typeof raw === 'number' || typeof raw === 'boolean') {\n    return String(raw);\n  }\n\n  if (typeof raw === 'object' && !Array.isArray(raw)) {\n    if (resolveMultiLanguage) {\n      return resolveMultiLanguage(raw as AXPMultiLanguageString);\n    }\n    return raw as AXPMultiLanguageString;\n  }\n\n  return String(raw);\n}\n\n//#endregion\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\n\nimport { AXPMetaData, type AXPWidgetNode, AXPWidgetsCatalog } from '@acorex/platform/contracts';\nimport { AXPContextEvalFactory, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { AXPEntity, isUnresolvedEntityDisplayTemplate } from '@acorex/platform/layout/entity-contracts';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXPCommandService, AXPQueryService } from '@acorex/platform/runtime';\nimport { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  computed,\n  effect,\n  inject,\n  input,\n  signal,\n} from '@angular/core';\nimport { get } from 'lodash-es';\nimport { formatLookupItemDisplayAsync } from '../widgets/lookup-widget/lookup-display.util';\n\n@Component({\n  selector: 'axp-entity-detail-popover',\n  templateUrl: './entity-detail-popover.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [CommonModule, AXButtonModule, AXPWidgetCoreModule, AXTranslationModule, AXSkeletonModule],\n})\nexport class AXPEntityDetailPopoverComponent {\n  //#region ----   Dependencies   ----\n\n  private readonly commandService = inject(AXPCommandService);\n  private readonly queryService = inject(AXPQueryService);\n  private readonly formatService = inject(AXFormatService);\n  private readonly translation = inject(AXTranslationService);\n  private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n  private readonly contextEvalFactory = inject(AXPContextEvalFactory);\n  private readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n  //#endregion\n\n  //#region ----   Inputs   ----\n\n  entity = input.required<string>();\n  entityId = input.required<string | number>();\n  textField = input<string>('title');\n  valueField = input<string>('id');\n  displayTitle = input<string>('');\n  item = input<AXPMetaData>();\n  breadcrumb = input<string | null>(null);\n  requestClose = input<(() => void) | undefined>();\n\n  //#endregion\n\n  //#region ----   Signals   ----\n\n  protected entityDetails = signal<any>(null);\n  protected isLoadingDetails = signal(false);\n  private headerTitleVersion = 0;\n\n  /** Placeholder rows for the loading skeleton (matches typical property count). */\n  protected readonly loadingSkeletonRows = [1, 2, 3, 4, 5] as const;\n\n  protected readonly headerTitle = signal('');\n\n  constructor() {\n    effect(() => {\n      void this.translation.getActiveLang();\n      const details = this.entityDetails();\n      const preset = this.displayTitle();\n      const fallbackItem = this.item();\n      const version = ++this.headerTitleVersion;\n\n      void this.resolveHeaderTitle(\n        details?.entityDefinition as AXPEntity | undefined,\n        details?.entityData,\n        preset,\n        fallbackItem,\n      ).then((title) => {\n        if (version === this.headerTitleVersion) {\n          this.headerTitle.set(title);\n        }\n      });\n    });\n  }\n\n  /**\n   * Stable list of property widgets for the template. Must be a signal (computed), not a method:\n   * calling a method from the template rebuilds nodes every CD cycle and can make the widget renderer loop.\n   */\n  protected readonly entityPropertiesWithWidgets = computed(() => {\n    const details = this.entityDetails();\n    const data = details?.entityData;\n    const entityDefinition = details?.entityDefinition as AXPEntity | undefined;\n    if (!data || !entityDefinition?.properties) return [];\n    return this.buildEntityPropertiesWithWidgets(data, entityDefinition, this.textField(), this.valueField());\n  });\n\n  //#endregion\n\n  //#region ----   Public Methods   ----\n\n  /** Loads entity details after the overlay panel is created. */\n  async loadDetails(): Promise<void> {\n    this.isLoadingDetails.set(true);\n    this.entityDetails.set(null);\n    this.changeDetectorRef.detectChanges();\n\n    try {\n      const result = await this.queryService.fetch('Entity:GetDetails', {\n        entity: this.entity(),\n        id: this.entityId(),\n      });\n\n      if (result?.success) {\n        this.entityDetails.set(result);\n      }\n    } catch (error) {\n      console.error('Failed to fetch entity details:', error);\n    } finally {\n      this.isLoadingDetails.set(false);\n      this.changeDetectorRef.detectChanges();\n    }\n  }\n\n  protected async navigateToDetails(): Promise<void> {\n    if (this.entityId()) {\n      await this.commandService.execute('Entity:OpenDetails', {\n        entity: this.entity(),\n        data: { id: this.entityId() },\n      });\n      this.requestClose()?.();\n    }\n  }\n\n  //#endregion\n\n  //#region ----   Helper Methods   ----\n\n  private async resolveHeaderTitle(\n    entityDefinition: AXPEntity | null | undefined,\n    data: unknown,\n    preset: string | undefined,\n    fallbackItem: AXPMetaData | undefined,\n  ): Promise<string> {\n    if (data && entityDefinition) {\n      const fromDetails = await this.resolveLookupDisplayLabelAsync(data, entityDefinition);\n      if (fromDetails) {\n        return fromDetails;\n      }\n    }\n\n    const presetTrimmed = preset?.trim();\n    if (presetTrimmed && !isUnresolvedEntityDisplayTemplate(presetTrimmed)) {\n      return presetTrimmed;\n    }\n\n    if (fallbackItem) {\n      const fromItem = await this.resolveLookupDisplayLabelAsync(fallbackItem, entityDefinition);\n      if (fromItem) {\n        return fromItem;\n      }\n    }\n\n    return presetTrimmed ?? '';\n  }\n\n  private async resolveLookupDisplayLabelAsync(\n    item: unknown,\n    entityDefinition: AXPEntity | null | undefined,\n  ): Promise<string> {\n    const locale = this.translation.getActiveLang() ?? 'en-US';\n    const label = await formatLookupItemDisplayAsync(\n      item,\n      entityDefinition ?? null,\n      { textField: this.textField() },\n      this.formatService,\n      {\n        expressionEvaluator: this.expressionEvaluator,\n        contextEvalFactory: this.contextEvalFactory,\n        translationService: this.translation,\n        locale,\n      },\n      (value) => this.translation.resolve(value),\n    );\n    return label && !isUnresolvedEntityDisplayTemplate(label) ? label : '';\n  }\n\n  /**\n   * Returns true if a value is meaningful for display (non-empty/non-null).\n   */\n  private hasMeaningfulValue(value: unknown): boolean {\n    if (value === null || value === undefined) return false;\n    if (typeof value === 'string') return value.trim().length > 0;\n    if (Array.isArray(value)) return value.length > 0;\n    if (typeof value === 'object') return Object.keys(value as object).length > 0;\n    return true;\n  }\n\n  /**\n   * Calculates an importance score for a property based on its widget type,\n   * whether it currently has a meaningful value, and metadata like title.\n   */\n  private getPropertyImportanceScore(prop: any, data: any): number {\n    const schema = prop.showAs?.type ?? prop.schema;\n\n    const importanceMap: Record<string, number> = {\n      [AXPWidgetsCatalog.text]: 100,\n      [AXPWidgetsCatalog.select]: 95,\n      [AXPWidgetsCatalog.number]: 90,\n      [AXPWidgetsCatalog.dateTime]: 85,\n      [AXPWidgetsCatalog.richText]: 80,\n      [AXPWidgetsCatalog.largeText]: 75,\n      [AXPWidgetsCatalog.contact]: 74,\n      [AXPWidgetsCatalog.toggle]: 65,\n      [AXPWidgetsCatalog.checkbox]: 60,\n      [AXPWidgetsCatalog.color]: 40,\n    };\n\n    let score = importanceMap[schema as string] ?? 50;\n\n    // Prefer fields that actually have a value for the current entity\n    const valuePath = prop.path ?? prop.name;\n    if (this.hasMeaningfulValue(get(data, valuePath))) {\n      score += 20;\n    }\n\n    // Slight preference for human-friendly titled fields\n    const hasTitle = prop.title && prop.title !== prop.name;\n    if (hasTitle) {\n      score += 5;\n    }\n\n    return score;\n  }\n\n  /**\n   * Calculates a name-based importance score to prioritize common key fields\n   * like title, description, status, and important dates.\n   * Name priority MUST come before widget-type priority.\n   */\n  private getNameImportanceScore(prop: any): number {\n    const rawName = (prop.options?.dataPath ?? prop.name ?? '').toString();\n    const normalized = rawName.toLowerCase();\n    const collapsed = normalized.replace(/[^a-z0-9]/g, '');\n\n    const priorities: Array<{ keys: string[]; score: number }> = [\n      { keys: ['title', 'name', 'subject', 'code'], score: 120 },\n      { keys: ['description', 'details', 'summary', 'remark', 'remarks'], score: 110 },\n      { keys: ['status', 'state', 'phase', 'stage'], score: 105 },\n      { keys: ['priority', 'severity', 'rank'], score: 100 },\n      { keys: ['expirydate', 'expirationdate', 'expiredate', 'duedate', 'deadline', 'enddate'], score: 98 },\n      { keys: ['startdate', 'createdat', 'createdon', 'updatedat', 'updatedon'], score: 95 },\n      { keys: ['owner', 'assignee', 'assignedto'], score: 92 },\n      { keys: ['email', 'phone', 'mobile', 'contact'], score: 90 },\n      { keys: ['category', 'type', 'label', 'tag', 'note', 'notes'], score: 85 },\n      { keys: ['primary', 'active', 'active', 'enabled', 'archived', 'deleted', 'locked', 'disabled'], score: -2 }, // send to bottom,\n    ];\n\n    for (const group of priorities) {\n      for (const key of group.keys) {\n        if (collapsed === key || collapsed.endsWith(key)) {\n          return group.score;\n        }\n      }\n    }\n    // Pattern-based priorities (generic forms like validFrom/validTo, start*/end*)\n    if (collapsed.endsWith('from') || collapsed.endsWith('to')) {\n      return 97;\n    }\n    if (collapsed.startsWith('start') || collapsed.startsWith('end')) {\n      return 96;\n    }\n    return 0;\n  }\n\n  private buildEntityPropertiesWithWidgets(\n    data: any,\n    entityDefinition: AXPEntity,\n    textFieldValue: string,\n    valueFieldValue: string,\n  ): Array<{ name: string; title: string; node: AXPWidgetNode }> {\n    // Use properties (not columns) for correct titles and schema; columns may have dataPath that doesn't match\n    return entityDefinition.properties\n      .filter((prop) => {\n        // Exclude technical fields\n        if (prop.name === 'id' || prop.name === textFieldValue || prop.name === valueFieldValue) {\n          return false;\n        }\n\n        // Only include properties that have a meaningful value (using get for dotted paths)\n        const path = this.resolveDataPath(prop, data);\n        const value = get(data, path);\n        if (!this.hasMeaningfulValue(value)) {\n          return false;\n        }\n\n        const schema = prop.schema?.interface?.type;\n        const importantWidgets = [\n          AXPWidgetsCatalog.text,\n          AXPWidgetsCatalog.largeText,\n          AXPWidgetsCatalog.richText,\n          AXPWidgetsCatalog.lookup,\n          AXPWidgetsCatalog.number,\n          AXPWidgetsCatalog.toggle,\n          AXPWidgetsCatalog.checkbox,\n          AXPWidgetsCatalog.dateTime,\n          AXPWidgetsCatalog.color,\n          AXPWidgetsCatalog.contact,\n        ] as string[];\n\n        return importantWidgets.includes(schema!);\n      })\n      .map((prop) => {\n        const path = this.resolveDataPath(prop, data);\n        const schema = prop.schema?.interface?.type;\n        const options = prop.schema?.interface?.options ?? {};\n        return {\n          ...prop,\n          schema,\n          path,\n          options,\n        };\n      })\n      .sort((a, b) => {\n        const nameScoreA = this.getNameImportanceScore(a);\n        const nameScoreB = this.getNameImportanceScore(b);\n        if (nameScoreA !== nameScoreB) return nameScoreB - nameScoreA;\n\n        const widgetScoreA = this.getPropertyImportanceScore(a, data);\n        const widgetScoreB = this.getPropertyImportanceScore(b, data);\n        if (widgetScoreA !== widgetScoreB) return widgetScoreB - widgetScoreA;\n\n        const aHasValue = this.hasMeaningfulValue(get(data, a.path));\n        const bHasValue = this.hasMeaningfulValue(get(data, b.path));\n        if (aHasValue !== bHasValue) return aHasValue ? -1 : 1;\n\n        const aHasTitle = a.title && a.title !== a.name;\n        const bHasTitle = b.title && b.title !== b.name;\n        if (aHasTitle !== bHasTitle) return aHasTitle ? -1 : 1;\n\n        return a.name.localeCompare(b.name);\n      })\n      .slice(0, 7)\n      .map((prop) => {\n        const widgetNode: AXPWidgetNode = {\n          type: prop.schema || AXPWidgetsCatalog.text,\n          path: prop.path,\n          options: { ...prop.options },\n          mode: 'view',\n        };\n\n        return {\n          name: prop.name,\n          title: prop.title || prop.name,\n          node: widgetNode,\n        };\n      });\n  }\n\n  /**\n   * Resolves the data path for a property. For lookups with expose, returns the expanded path\n   * when data has it (e.g. personTitle). Otherwise returns property name (e.g. personTitleId).\n   */\n  private resolveDataPath(\n    prop: { name: string; schema?: { interface?: { options?: Record<string, unknown> } } },\n    data: any,\n  ): string {\n    const iface = prop.schema?.interface;\n    const expose = iface?.options?.['expose'] as Array<{ source: string; target: string }> | undefined;\n    const textField = (iface?.options?.['textField'] as string | undefined)?.trim();\n\n    if (expose?.length) {\n      const textTarget = expose.find((e) => e.source !== 'id');\n      if (textTarget) {\n        const expandedPath = textTarget.target.split('.')[0];\n        const expandedValue = get(data, expandedPath);\n        if (expandedValue != null && typeof expandedValue === 'object') {\n          if (textField) {\n            if (this.hasMeaningfulValue(get(expandedValue, textField))) {\n              return expandedPath;\n            }\n          } else {\n            const leaf = textTarget.target.split('.').pop();\n            if (leaf && this.hasMeaningfulValue(get(expandedValue, leaf))) {\n              return expandedPath;\n            }\n          }\n        }\n      }\n    }\n\n    return prop.name;\n  }\n\n  //#endregion\n}\n","<div\n  class=\"ax-lightest-surface dark:ax-dark-surface ax-p-4 ax-w-[min(600px,calc(100vw-2rem))] ax-rounded-lg ax-shadow-lg\"\n>\n  <div class=\"ax-mb-4 ax-border-b ax-pb-2\">\n    <h3 class=\"ax-text-base ax-font-semibold ax-text-on-lightest-surface\">\n      {{ headerTitle() }}\n    </h3>\n    @if (breadcrumb()) {\n      <div class=\"ax-text-xs ax-text-neutral-500 ax-mt-1\">{{ breadcrumb() }}</div>\n    }\n  </div>\n  @if (isLoadingDetails()) {\n    <div class=\"ax-space-y-2 ax-mb-4\">\n      @for (row of loadingSkeletonRows; track row) {\n        <div class=\"ax-grid ax-grid-cols-[minmax(7rem,35%)_1fr] ax-gap-x-4 ax-items-start\">\n          <ax-skeleton [animated]=\"true\" class=\"ax-h-4 ax-w-2/3 ax-rounded\"></ax-skeleton>\n          @if (row === 2) {\n            <ax-skeleton [animated]=\"true\" class=\"ax-h-16 ax-w-full ax-rounded\"></ax-skeleton>\n          } @else {\n            <ax-skeleton [animated]=\"true\" class=\"ax-h-4 ax-w-full ax-rounded\"></ax-skeleton>\n          }\n        </div>\n      }\n    </div>\n    <div class=\"ax-flex ax-justify-end\">\n      <ax-skeleton [animated]=\"true\" class=\"ax-h-9 ax-w-28 ax-rounded\"></ax-skeleton>\n    </div>\n  } @else if (entityDetails()) {\n    <div class=\"ax-space-y-3 ax-mb-4\">\n      @if (entityDetails()?.entityData) {\n        <axp-widgets-container [context]=\"entityDetails()?.entityData\">\n          <div class=\"ax-space-y-2\">\n            @for (item of entityPropertiesWithWidgets(); track item.name) {\n              <div class=\"ax-grid ax-grid-cols-[minmax(7rem,35%)_1fr] ax-gap-x-4 ax-gap-y-1 ax-items-start\">\n                <span class=\"ax-text-sm ax-font-medium ax-shrink-0\">{{ item.title | translate | async }}:</span>\n                <div class=\"ax-min-w-0 ax-text-sm\">\n                  <ng-container axp-widget-renderer [node]=\"item.node\" [mode]=\"'view'\"></ng-container>\n                </div>\n              </div>\n            }\n          </div>\n        </axp-widgets-container>\n      }\n    </div>\n    <div class=\"ax-flex ax-gap-2 ax-justify-end ax-sm\">\n      <ax-button\n        [color]=\"'primary'\"\n        [look]=\"'solid'\"\n        [text]=\"'@general:actions.open-details.title' | translate | async\"\n        (click)=\"navigateToDetails()\"\n      >\n      </ax-button>\n    </div>\n  }\n</div>\n","import { AXPlacement } from '@acorex/cdk/common';\nimport { AXOverlayRef, AXOverlayService } from '@acorex/cdk/overlay';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { AXPMetaData } from '@acorex/platform/contracts';\nimport { DOCUMENT } from '@angular/common';\nimport { ComponentRef, ElementRef, inject, Injectable } from '@angular/core';\nimport { NavigationStart, Router } from '@angular/router';\nimport { filter, Subscription } from 'rxjs';\nimport { AXPEntityDetailPopoverComponent } from './entity-detail-popover.component';\n\nexport interface AXPEntityDetailPopoverOptions {\n  entity: string;\n  id: string | number;\n  item: AXPMetaData;\n  textField?: string;\n  valueField?: string;\n  displayTitle?: string;\n  breadcrumb?: string;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPEntityDetailPopoverService {\n  //#region ----   Services & Dependencies   ----\n\n  private readonly overlayService = inject(AXOverlayService);\n  private readonly platform = inject(AXPlatform);\n  private readonly localeService = inject(AXLocaleService);\n  private readonly document = inject(DOCUMENT);\n  private readonly router = inject(Router);\n\n  //#endregion\n\n  //#region ----   Private Properties   ----\n\n  private overlayRef: AXOverlayRef<AXPEntityDetailPopoverComponent> | null = null;\n  private componentRef: ComponentRef<AXPEntityDetailPopoverComponent> | null = null;\n  private anchorElement: HTMLElement | null = null;\n  private outsideClickHandler: ((event: MouseEvent) => void) | null = null;\n  private keydownHandler: ((event: KeyboardEvent) => void) | null = null;\n  private routerSubscription: Subscription | null = null;\n\n  //#endregion\n\n  //#region ----   Public Methods   ----\n\n  /**\n   * Show entity detail popover anchored to the target element.\n   */\n  async show(target: ElementRef | HTMLElement, options: AXPEntityDetailPopoverOptions): Promise<void> {\n    const anchorElement = this.resolveAnchorElement(target);\n    if (!anchorElement) {\n      return;\n    }\n\n    this.hide();\n\n    const panelClasses = ['ax-animate-fadeIn', 'ax-animate-faster', 'axp-entity-detail-popover-overlay'];\n    if (this.platform.isDark()) {\n      panelClasses.push('ax-dark');\n    }\n\n    const requestClose = (): void => {\n      this.hide();\n    };\n\n    try {\n      const ref = await this.overlayService.create(AXPEntityDetailPopoverComponent, {\n        centered: false,\n        width: 'fit-content',\n        actionSheetStyle: true,\n        panelClass: panelClasses,\n        backdrop: {\n          enabled: false,\n          background: false,\n          closeOnClick: false,\n        },\n        anchorOptions: {\n          anchor: anchorElement,\n          placement: this.resolveOverlayPlacement(anchorElement),\n          offsetX: this.resolveOverlayOffsetX(anchorElement),\n          offsetY: 8,\n          autoFlip: true,\n        },\n        inputs: {\n          entity: options.entity,\n          entityId: options.id,\n          textField: options.textField || 'title',\n          valueField: options.valueField || 'id',\n          displayTitle: options.displayTitle ?? '',\n          breadcrumb: options.breadcrumb ?? null,\n          item: options.item,\n          requestClose,\n        },\n        onDispose: () => {\n          this.handleOverlayDisposed();\n        },\n      });\n\n      this.overlayRef = ref;\n      this.componentRef = ref.instance as ComponentRef<AXPEntityDetailPopoverComponent>;\n      this.anchorElement = anchorElement;\n\n      setTimeout(() => {\n        ref.updatePosition();\n        this.bindDismissHandlers(ref.overlayElement, anchorElement);\n      }, 0);\n\n      await this.componentRef.instance.loadDetails();\n    } catch (error) {\n      console.error('[EntityDetailPopover] Failed to open overlay:', error);\n      this.handleOverlayDisposed();\n    }\n  }\n\n  /** Hide the active popover */\n  hide(): void {\n    this.removeDismissHandlers();\n    if (this.overlayRef) {\n      this.overlayRef.dispose();\n    }\n  }\n\n  /** Whether a popover is currently active */\n  get isActive(): boolean {\n    return this.overlayRef !== null;\n  }\n\n  //#endregion\n\n  //#region ----   Utility Methods   ----\n\n  private resolveAnchorElement(target: ElementRef | HTMLElement): HTMLElement | null {\n    if (target instanceof ElementRef) {\n      return target.nativeElement;\n    }\n\n    if (target instanceof HTMLElement) {\n      return target;\n    }\n\n    const hostCandidate = target as Element & { getHostElement?: () => HTMLElement };\n    if (typeof hostCandidate.getHostElement === 'function') {\n      return hostCandidate.getHostElement();\n    }\n\n    return null;\n  }\n\n  /** Mirror popover placement for RTL so the panel aligns with the anchor's inline-start edge. */\n  private resolveOverlayPlacement(anchor: HTMLElement): AXPlacement {\n    return this.isRtlContext(anchor) ? 'bottom-end' : 'bottom-start';\n  }\n\n  private resolveOverlayOffsetX(anchor: HTMLElement): number {\n    return this.isRtlContext(anchor) ? -8 : 8;\n  }\n\n  private isRtlContext(anchor: HTMLElement): boolean {\n    if (this.localeService.activeProfile()?.i18nMeta?.rtl === true) {\n      return true;\n    }\n\n    const dir = getComputedStyle(anchor).direction || this.document.documentElement.getAttribute('dir');\n    return dir === 'rtl';\n  }\n\n  private bindDismissHandlers(overlayElement: HTMLElement | null, anchor: HTMLElement): void {\n    this.removeDismissHandlers();\n\n    this.keydownHandler = (event: KeyboardEvent) => {\n      if (event.key === 'Escape') {\n        this.hide();\n      }\n    };\n    this.document.addEventListener('keydown', this.keydownHandler);\n\n    this.outsideClickHandler = (event: MouseEvent) => {\n      const target = event.target as Element | null;\n      if (!target || !overlayElement) {\n        return;\n      }\n      if (this.isInsideInteractiveSurface(target, overlayElement, anchor)) {\n        return;\n      }\n      this.hide();\n    };\n    this.document.addEventListener('mousedown', this.outsideClickHandler);\n\n    this.routerSubscription = this.router.events\n      .pipe(filter((event): event is NavigationStart => event instanceof NavigationStart))\n      .subscribe(() => {\n        this.hide();\n      });\n  }\n\n  /** Ignore clicks on the anchor, overlay panel, or nested dropdown menus. */\n  private isInsideInteractiveSurface(target: Element, overlayElement: HTMLElement, anchor: HTMLElement): boolean {\n    if (anchor.contains(target) || overlayElement.contains(target)) {\n      return true;\n    }\n\n    return Boolean(\n      target.closest('ax-dropdown-panel, ax-button-item-list, ax-button-item, ax-dropdown-button, .ax-dropdown-panel'),\n    );\n  }\n\n  private removeDismissHandlers(): void {\n    if (this.keydownHandler) {\n      this.document.removeEventListener('keydown', this.keydownHandler);\n      this.keydownHandler = null;\n    }\n\n    if (this.outsideClickHandler) {\n      this.document.removeEventListener('mousedown', this.outsideClickHandler);\n      this.outsideClickHandler = null;\n    }\n\n    if (this.routerSubscription) {\n      this.routerSubscription.unsubscribe();\n      this.routerSubscription = null;\n    }\n  }\n\n  private handleOverlayDisposed(): void {\n    this.removeDismissHandlers();\n    this.overlayRef = null;\n    this.componentRef = null;\n    this.anchorElement = null;\n  }\n\n  //#endregion\n}\n","import { type AXPCategoryEntity, AXPPagedListResult, AXPQueryRequest } from '@acorex/platform/contracts';\nimport { AXDataSourceFilterOption } from '@acorex/cdk/common';\n\nimport { inject } from '@angular/core';\nimport { AXPEntityDefinitionRegistryService } from './entity-registery.service';\nimport { AXPEntityAggregateOptions, AXPEntityAggregateRequest, AXPEntityAggregateResult, AXPEntityCreateDto, AXPEntityDetailDto, AXPEntityListItemDto, AXPEntityModel, AXPEntityQueryAllOptions, AXPEntityQueryAllResult, AXPEntityUpdateDto } from '@acorex/platform/layout/entity-contracts';\n\nexport abstract class AXPEntityStorageService<\n  TKey,\n  TDetailDto extends AXPEntityDetailDto<TKey> = AXPEntityModel<TKey>,\n  TListItemDto extends AXPEntityListItemDto<TKey> = TDetailDto,\n  TCreateDto extends AXPEntityCreateDto = TDetailDto,\n  TUpdateDto extends AXPEntityUpdateDto<TKey> = TDetailDto,\n> {\n  abstract get dbName(): string;\n\n  abstract initial(entityName: string, collection: TCreateDto[]): Promise<TCreateDto[]>;\n\n  abstract getOne(entityName: string, id: TKey): Promise<TDetailDto>;\n\n  abstract updateOne(entityName: string, id: TKey, keyValues: Omit<Partial<TUpdateDto>, 'id'>): Promise<TDetailDto>;\n\n  abstract deleteOne(entityName: string, id: TKey): Promise<void>;\n\n  abstract insertOne(entityName: string, entity: TCreateDto): Promise<TKey>;\n\n  abstract getAll(entityName: string): Promise<TListItemDto[]>;\n\n  abstract query(entityName: string, request: AXPQueryRequest): Promise<AXPPagedListResult<TListItemDto>>;\n\n  abstract count(entityName: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>): Promise<number>;\n\n  abstract queryAll(\n    entityName: string,\n    request: Pick<AXPQueryRequest, 'filter' | 'sort'>,\n    options?: AXPEntityQueryAllOptions,\n  ): Promise<AXPEntityQueryAllResult<TListItemDto>>;\n\n  abstract getMany(entityName: string, ids: TKey[]): Promise<(TListItemDto | null)[]>;\n\n  abstract exists(entityName: string, id: TKey): Promise<boolean>;\n\n  abstract upsertOne(\n    entityName: string,\n    entity: TCreateDto,\n    options?: { merge?: boolean },\n  ): Promise<TKey>;\n\n  abstract aggregate(\n    entityName: string,\n    request: AXPEntityAggregateRequest,\n    options?: AXPEntityAggregateOptions,\n  ): Promise<AXPEntityAggregateResult>;\n}\n\nexport abstract class AXPEntityDataProvider<\n  TKey,\n  TDetailDto extends AXPEntityDetailDto<TKey> = AXPEntityModel<TKey>,\n  TListItemDto extends AXPEntityListItemDto<TKey> = TDetailDto,\n  TCreateDto extends AXPEntityCreateDto = TDetailDto,\n  TUpdateDto extends AXPEntityUpdateDto<TKey> = TDetailDto,\n> {\n  abstract get entityName(): string;\n\n  abstract initial(collection: TCreateDto[]): Promise<void>;\n\n  abstract getOne(id: TKey): Promise<TDetailDto>;\n\n  abstract getAll(): Promise<TListItemDto[]>;\n\n  abstract updateOne(id: TKey, keyValues: Omit<Partial<TUpdateDto>, 'id'>): Promise<TDetailDto>;\n\n  abstract deleteOne(id: TKey): Promise<void>;\n\n  abstract insertOne(entity: TCreateDto): Promise<TKey>;\n\n  abstract query(request: AXPQueryRequest): Promise<AXPPagedListResult<TListItemDto>>;\n\n  abstract count(request: Pick<AXPQueryRequest, 'filter' | 'sort'>): Promise<number>;\n\n  abstract queryAll(\n    request: Pick<AXPQueryRequest, 'filter' | 'sort'>,\n    options?: AXPEntityQueryAllOptions,\n  ): Promise<AXPEntityQueryAllResult<TListItemDto>>;\n\n  abstract getMany(ids: TKey[]): Promise<(TListItemDto | null)[]>;\n\n  abstract exists(id: TKey): Promise<boolean>;\n\n  abstract upsertOne(entity: TCreateDto, options?: { merge?: boolean }): Promise<TKey>;\n\n  abstract aggregate(\n    request: AXPEntityAggregateRequest,\n    options?: AXPEntityAggregateOptions,\n  ): Promise<AXPEntityAggregateResult>;\n}\n\nexport class AXPEntityDataProviderImpl<\n  TKey,\n  TDetailDto extends AXPEntityDetailDto<TKey> = AXPEntityModel<TKey>,\n  TListItemDto extends AXPEntityListItemDto<TKey> = TDetailDto,\n  TCreateDto extends AXPEntityCreateDto = TDetailDto,\n  TUpdateDto extends AXPEntityUpdateDto<TKey> = TDetailDto,\n> implements AXPEntityDataProvider<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto>\n{\n  constructor(\n    private storageService: AXPEntityStorageService<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto>,\n    public entityName: string,\n  ) {}\n\n  async initial(collection: TCreateDto[]): Promise<void> {\n    await this.storageService.initial(this.entityName, collection);\n  }\n\n  getOne(id: TKey): Promise<TDetailDto> {\n    return this.storageService.getOne(this.entityName, id);\n  }\n\n  getAll(): Promise<TListItemDto[]> {\n    return this.storageService.getAll(this.entityName);\n  }\n\n  query(request: AXPQueryRequest): Promise<AXPPagedListResult<TListItemDto>> {\n    return this.storageService.query(this.entityName, request);\n  }\n\n  updateOne(id: TKey, keyValues: Omit<Partial<TUpdateDto>, 'id'>): Promise<TDetailDto> {\n    return this.storageService.updateOne(this.entityName, id, keyValues);\n  }\n\n  deleteOne(id: TKey): Promise<void> {\n    return this.storageService.deleteOne(this.entityName, id);\n  }\n\n  insertOne(entity: TCreateDto): Promise<TKey> {\n    return this.storageService.insertOne(this.entityName, entity);\n  }\n\n  count(request: Pick<AXPQueryRequest, 'filter' | 'sort'>): Promise<number> {\n    return this.storageService.count(this.entityName, request);\n  }\n\n  queryAll(\n    request: Pick<AXPQueryRequest, 'filter' | 'sort'>,\n    options?: AXPEntityQueryAllOptions,\n  ): Promise<AXPEntityQueryAllResult<TListItemDto>> {\n    return this.storageService.queryAll(this.entityName, request, options);\n  }\n\n  getMany(ids: TKey[]): Promise<(TListItemDto | null)[]> {\n    return this.storageService.getMany(this.entityName, ids);\n  }\n\n  exists(id: TKey): Promise<boolean> {\n    return this.storageService.exists(this.entityName, id);\n  }\n\n  upsertOne(entity: TCreateDto, options?: { merge?: boolean }): Promise<TKey> {\n    return this.storageService.upsertOne(this.entityName, entity, options);\n  }\n\n  aggregate(\n    request: AXPEntityAggregateRequest,\n    options?: AXPEntityAggregateOptions,\n  ): Promise<AXPEntityAggregateResult> {\n    return this.storageService.aggregate(this.entityName, request, options);\n  }\n}\n\nexport abstract class AXMEntityCrudService<\n  TKey,\n  TDetailDto extends AXPEntityDetailDto<TKey> = AXPEntityModel<TKey>,\n  TListItemDto extends AXPEntityListItemDto<TKey> = TDetailDto,\n  TCreateDto extends AXPEntityCreateDto = TDetailDto,\n  TUpdateDto extends AXPEntityUpdateDto<TKey> = TDetailDto,\n> {\n  abstract insertOne(request: TCreateDto): Promise<TKey>;\n\n  abstract getOne(id: TKey): Promise<TDetailDto>;\n\n  abstract deleteOne(id: TKey): Promise<void>;\n\n  abstract updateOne(id: TKey, values: Omit<Partial<TUpdateDto>, 'id'>): Promise<TDetailDto>;\n\n  abstract query(request: AXPQueryRequest): Promise<AXPPagedListResult<TListItemDto>>;\n}\n\nexport class AXMEntityCrudServiceImpl<\n  TKey,\n  TDetailDto extends AXPEntityDetailDto<TKey> = AXPEntityModel<TKey>,\n  TListItemDto extends AXPEntityListItemDto<TKey> = TDetailDto,\n  TCreateDto extends AXPEntityCreateDto = Omit<TDetailDto, 'id'>,\n  TUpdateDto extends AXPEntityUpdateDto<TKey> = TDetailDto,\n> {\n  private _storageService = inject(AXPEntityStorageService);\n  private entityRegistery = inject(AXPEntityDefinitionRegistryService);\n  private _entityDataProvider = new AXPEntityDataProviderImpl<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto>(\n    this._storageService,\n    this.entityName,\n  );\n\n  private _entityCategoryDataProvider = new AXPEntityDataProviderImpl<TKey, AXPCategoryEntity<TKey>>(\n    this._storageService,\n    `${this.entityName}Category`,\n  );\n\n  constructor(private entityName: string) {}\n\n  async insertOne(request: TCreateDto): Promise<TKey> {\n    return this._entityDataProvider.insertOne(request);\n  }\n\n  async getOne(id: TKey): Promise<TDetailDto> {\n    return this._entityDataProvider.getOne(id);\n  }\n\n  //DELETE\n  async deleteOne(id: TKey): Promise<void> {\n    return this._entityDataProvider.deleteOne(id);\n  }\n\n  async updateOne(id: TKey, values: Omit<Partial<TUpdateDto>, 'id'>): Promise<TDetailDto> {\n    return this._entityDataProvider.updateOne(id, values);\n  }\n\n  async query(request: AXPQueryRequest = { skip: 0, take: 100 }): Promise<AXPPagedListResult<TListItemDto>> {\n    const [moduleName, entityName] = this._entityDataProvider.entityName.split('.');\n    try {\n      const entityRef = await this.entityRegistery.resolve(moduleName, entityName);\n      if (entityRef.parentKey) {\n        if (!request.filter?.filters?.length && request.filter?.field !== entityRef.parentKey) {\n          request.filter = {\n            value: true,\n            field: entityRef.parentKey,\n            operator: {\n              type: 'isEmpty',\n            },\n          };\n        }\n      }\n    } catch (error) {\n      console.error(error);\n    }\n    return this._entityDataProvider.query(request);\n  }\n\n  async findOne(filter: AXDataSourceFilterOption): Promise<TListItemDto> {\n    const result = await this._entityDataProvider.query({ filter, skip: 0, take: 1 });\n    return result.items[0];\n  }\n\n  async getRoots(request: {}): Promise<AXPPagedListResult<TListItemDto>> {\n    const queryRequest: AXPQueryRequest = {\n      skip: 0,\n      take: 1000,\n      filter: {\n        value: true,\n        field: 'parentId',\n        operator: {\n          type: 'isEmpty',\n        },\n      },\n    };\n    const result = await this._entityDataProvider.query(queryRequest);\n    return result;\n  }\n\n  async getChildren(request: { parentId: TKey; parentKey?: string }): Promise<AXPPagedListResult<TListItemDto>> {\n    const parentKey = request.parentKey ?? 'parentId';\n    const queryRequest: AXPQueryRequest = {\n      skip: 0,\n      take: 1000,\n      filter: {\n        value: request.parentId,\n        field: parentKey,\n        operator: {\n          type: 'equal',\n        },\n      },\n    };\n    const result = await this._entityDataProvider.query(queryRequest);\n    return result;\n  }\n\n  async getByCategory(request: { categoryId: TKey; categoryKey?: string }): Promise<AXPPagedListResult<TListItemDto>> {\n    const queryRequest: AXPQueryRequest = {\n      skip: 0,\n      take: 1000,\n      filter: {\n        value: request.categoryId,\n        field: request.categoryKey ?? 'categoryIds',\n        operator: {\n          type: 'contains',\n        },\n      },\n    };\n    const result = await this._entityDataProvider.query(queryRequest);\n    return result;\n  }\n\n  async getCategoriesList(\n    request: AXPQueryRequest = { skip: 0, take: 1000 },\n  ): Promise<AXPPagedListResult<AXPCategoryEntity<TKey>>> {\n    return this._entityCategoryDataProvider.query(request);\n  }\n\n  get storageService() {\n    return this._storageService;\n  }\n\n  async count(request: Pick<AXPQueryRequest, 'filter' | 'sort'>): Promise<number> {\n    return this._entityDataProvider.count(request);\n  }\n\n  async queryAll(\n    request: Pick<AXPQueryRequest, 'filter' | 'sort'>,\n    options?: AXPEntityQueryAllOptions,\n  ): Promise<AXPEntityQueryAllResult<TListItemDto>> {\n    return this._entityDataProvider.queryAll(request, options);\n  }\n\n  async getMany(ids: TKey[]): Promise<(TListItemDto | null)[]> {\n    return this._entityDataProvider.getMany(ids);\n  }\n\n  async exists(id: TKey): Promise<boolean> {\n    return this._entityDataProvider.exists(id);\n  }\n\n  async upsertOne(entity: TCreateDto, options?: { merge?: boolean }): Promise<TKey> {\n    return this._entityDataProvider.upsertOne(entity, options);\n  }\n\n  async aggregate(\n    request: AXPEntityAggregateRequest,\n    options?: AXPEntityAggregateOptions,\n  ): Promise<AXPEntityAggregateResult> {\n    return this._entityDataProvider.aggregate(request, options);\n  }\n\n  async custom<Req, Res>(request: Req) {}\n}\n","import { AXPEntityOp, AXPMiddlewareErrorResponse, AXPPagedListResult, AXPQueryRequest } from '@acorex/platform/contracts';\n\nimport { AXPEntityAggregateOptions, AXPEntityAggregateRequest, AXPEntityAggregateResult, AXPEntityCreateDto, AXPEntityDetailDto, AXPEntityListItemDto, AXPEntityQueryAllOptions, AXPEntityQueryAllResult, AXPEntityUpdateDto } from '@acorex/platform/layout/entity-contracts';\n\nexport interface AXPEntityStorageContext<\n    TKey = any,\n    TDetailDto extends AXPEntityDetailDto<TKey> = any,\n    TListItemDto extends AXPEntityListItemDto<TKey> = any,\n    TCreateDto extends AXPEntityCreateDto = any,\n    TUpdateDto extends AXPEntityUpdateDto<TKey> = any,\n> {\n    op: AXPEntityOp;\n    entityName: string;\n    id?: TKey;\n    data?: TCreateDto | Omit<Partial<TUpdateDto>, 'id'>;\n    request?: AXPQueryRequest;\n    previous?: TDetailDto;\n    result?: any;\n    locals: Map<string, unknown>;\n    backend: {\n        getOne: (entityName: string, id: TKey) => Promise<TDetailDto>;\n        insertOne: (entityName: string, entity: TCreateDto) => Promise<TKey>;\n        query: (entityName: string, request: AXPQueryRequest) => Promise<AXPPagedListResult<TListItemDto>>;\n        updateOne: (entityName: string, id: TKey, data: Partial<TUpdateDto>) => Promise<TDetailDto>;\n        deleteOne: (entityName: string, id: TKey) => Promise<void>;\n        count: (entityName: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>) => Promise<number>;\n        queryAll: (\n            entityName: string,\n            request: Pick<AXPQueryRequest, 'filter' | 'sort'>,\n            options?: AXPEntityQueryAllOptions,\n        ) => Promise<AXPEntityQueryAllResult<TListItemDto>>;\n        getMany: (entityName: string, ids: TKey[]) => Promise<(TListItemDto | null)[]>;\n        exists: (entityName: string, id: TKey) => Promise<boolean>;\n        upsertOne: (entityName: string, entity: TCreateDto, options?: { merge?: boolean }) => Promise<TKey>;\n        aggregate: (\n            entityName: string,\n            request: AXPEntityAggregateRequest,\n            options?: AXPEntityAggregateOptions,\n        ) => Promise<AXPEntityAggregateResult>;\n    };\n}\nexport interface AXPEntityStorageMiddleware<\n    TKey = any,\n    TDetailDto extends AXPEntityDetailDto<TKey> = any,\n    TListItemDto extends AXPEntityListItemDto<TKey> = any,\n    TCreateDto extends AXPEntityCreateDto = any,\n    TUpdateDto extends AXPEntityUpdateDto<TKey> = any,\n> {\n    target?: {\n        ops?: AXPEntityOp[];\n        entity?: string | RegExp;\n        predicate?: (\n            ctx: AXPEntityStorageContext<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto>,\n        ) => boolean;\n        order?: number;\n    };\n    execute: (\n        ctx: AXPEntityStorageContext<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto>,\n        next: () => Promise<void>,\n    ) => Promise<void>;\n}\n\n/**\n * Error type that can be thrown by middlewares to abort the chain with a structured payload.\n */\nexport class AXPMiddlewareAbortError extends Error {\n    constructor(\n        override readonly message: string,\n        public readonly options: { code?: string; status?: number; details?: any } = {},\n    ) {\n        super(message);\n        this.name = 'AXPMiddlewareAbortError';\n    }\n    toResponse(): AXPMiddlewareErrorResponse {\n        return {\n            success: false,\n            error: {\n                code: this.options.code,\n                message: this.message,\n                status: this.options.status,\n                details: this.options.details,\n            },\n        };\n    }\n}\n\n/** Type guard for AXPMiddlewareAbortError */\nexport function isAXPMiddlewareAbortError(error: unknown): error is AXPMiddlewareAbortError {\n    return error instanceof AXPMiddlewareAbortError;\n}\n\n//#endregion\n\n","import { type AXPCategoryEntity, AXPExecuteCommandResult, AXPMultiLanguageString, AXPPagedListResult, AXPQueryRequest } from '@acorex/platform/contracts';\nimport { AXPSessionService } from '@acorex/platform/auth';\n\nimport { AXPCommandService, AXPQueryExecutor } from '@acorex/platform/runtime';\nimport { inject, Injector, Injectable, runInInjectionContext } from '@angular/core';\nimport { AXMEntityCrudServiceImpl } from './entity-storage-service';\nimport { AXPEntityDefinitionRegistryService } from './entity-registery.service';\nimport { isAXPMiddlewareAbortError } from './storage-middleware/storage-middleware.types';\nimport { AXPEntity, AXPEntityCreateDto, AXPEntityDetailDto, AXPEntityListItemDto, AXPEntityModel, AXPEntityUpdateDto } from '@acorex/platform/layout/entity-contracts';\n\n/**\n * Maps storage middleware failures to a command result the details view can surface.\n */\nexport function mapEntityStorageErrorToCommandResult(\n  error: unknown,\n  fallback = 'Failed to update entity',\n): AXPExecuteCommandResult {\n  if (isAXPMiddlewareAbortError(error)) {\n    return {\n      success: false,\n      message: {\n        type: 'error',\n        code: error.options.code,\n        text: error.message,\n        details: error.options.details,\n      },\n    };\n  }\n\n  const text =\n    error instanceof Error ? error.message : typeof error === 'string' ? error : fallback;\n\n  return {\n    success: false,\n    message: {\n      type: 'error',\n      text,\n    },\n  };\n}\n\n/**\n * Best-effort plain string for thrown {@link Error} messages from command results (no i18n lookup).\n */\nexport function commandMessageTextForError(value: AXPMultiLanguageString | undefined | null): string {\n  if (value == null) {\n    return '';\n  }\n  if (typeof value === 'string') {\n    return value;\n  }\n  if (typeof value === 'object' && !Array.isArray(value)) {\n    const values = Object.values(value as Record<string, string>);\n    const first = values.find((v) => typeof v === 'string' && v.length > 0);\n    return first ?? '';\n  }\n  return String(value);\n}\n\n//#region ----   EntityDataAccessor   ----\n\n/**\n * Data accessor for entity operations.\n * Provides methods to query and execute commands with smart resolution:\n * 1. Checks entity definition queries/commands first\n * 2. Falls back to CRUD service if not defined\n */\nexport class EntityDataAccessor<\n  TKey = any,\n  TDetailDto extends AXPEntityDetailDto<TKey> = AXPEntityModel<TKey>,\n  TListItemDto extends AXPEntityListItemDto<TKey> = TDetailDto,\n  TCreateDto extends AXPEntityCreateDto = Omit<TDetailDto, 'id'>,\n  TUpdateDto extends AXPEntityUpdateDto<TKey> = TDetailDto\n> {\n  private crudService: AXMEntityCrudServiceImpl<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto> | null = null;\n  private entityDef: AXPEntity | null = null;\n  private entityDefPromise: Promise<AXPEntity> | null = null;\n\n  constructor(\n    private module: string,\n    private entity: string,\n    private entityRegistry: AXPEntityDefinitionRegistryService,\n    private queryExecutor: AXPQueryExecutor,\n    private commandService: AXPCommandService,\n    private injector: Injector,\n  ) { }\n\n  /**\n   * Lazily creates the CRUD fallback inside an injection context so {@link AXMEntityCrudServiceImpl}\n   * can resolve {@link AXPEntityStorageService} via `inject()`.\n   */\n  private ensureCrudService(): AXMEntityCrudServiceImpl<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto> {\n    if (!this.crudService) {\n      this.crudService = runInInjectionContext(this.injector, () =>\n        new AXMEntityCrudServiceImpl<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto>(\n          `${this.module}.${this.entity}`,\n        ),\n      );\n    }\n    return this.crudService;\n  }\n\n  /**\n   * Resolves the entity definition lazily and caches it.\n   * @returns The resolved entity definition\n   */\n  private async resolveEntityDef(): Promise<AXPEntity> {\n    if (this.entityDef) {\n      return this.entityDef;\n    }\n\n    if (!this.entityDefPromise) {\n      this.entityDefPromise = this.entityRegistry.resolve(this.module, this.entity);\n    }\n\n    this.entityDef = await this.entityDefPromise;\n    if (!this.entityDef) {\n      throw new Error(`Entity \"${this.module}.${this.entity}\" could not be resolved`);\n    }\n\n    return this.entityDef;\n  }\n\n  /**\n   * Gets a single entity by key.\n   * @param key - The entity key\n   * @returns The entity detail or null if not found\n   */\n  async byKey(key: TKey): Promise<TDetailDto | null> {\n    const entityDef = await this.resolveEntityDef();\n    const execute = entityDef.queries?.byKey?.execute;\n    if (typeof execute === 'function') {\n      return await execute(key);\n    } else if (typeof execute === 'string') {\n      return await this.queryExecutor.fetch<TKey, TDetailDto>(execute, key);\n    }\n\n    // Fallback to CRUD service\n    return await this.ensureCrudService().getOne(key);\n  }\n\n  /**\n   * Queries a list of entities.\n   * @param request - The query request (optional)\n   * @returns The paged list result\n   */\n  async query(request?: AXPQueryRequest): Promise<AXPPagedListResult<TListItemDto>> {\n    const entityDef = await this.resolveEntityDef();\n    const defaultRequest: AXPQueryRequest = { skip: 0, take: 10 };\n    const queryRequest = request || defaultRequest;\n\n    const execute = entityDef.queries?.list?.execute;\n    if (typeof execute === 'function') {\n      return await execute(queryRequest);\n    } else if (typeof execute === 'string') {\n      const result = await this.queryExecutor.fetch<AXPQueryRequest, AXPPagedListResult<TListItemDto>>(\n        execute,\n        queryRequest\n      );\n      if (!result) {\n        throw new Error(`Query \"${execute}\" returned null`);\n      }\n      return result;\n    }\n\n    // Fallback to CRUD service\n    return await this.ensureCrudService().query(queryRequest);\n  }\n\n  /**\n   * Queries category entities linked to this entity (`{module}.{entity}Category`).\n   * Falls back to CRUD category storage (same as {@link AXMEntityCrudServiceImpl.getCategoriesList}).\n   */\n  async getCategoriesList(\n    request: AXPQueryRequest = { skip: 0, take: 1000 },\n  ): Promise<AXPPagedListResult<AXPCategoryEntity<TKey>>> {\n    return await this.ensureCrudService().getCategoriesList(request);\n  }\n\n  /**\n   * Creates a new entity.\n   * @param data - The entity data to create\n   * @returns The created entity key\n   */\n  async create(data: TCreateDto): Promise<TKey> {\n    const entityDef = await this.resolveEntityDef();\n    const execute = entityDef.commands?.create?.execute;\n    if (typeof execute === 'function') {\n      const result = await execute(data);\n      return (result as any)?.id || result;\n    } else if (typeof execute === 'string') {\n      const result = await this.commandService.execute<TCreateDto, { id: TKey }>(execute, data);\n      if (!result?.success) {\n        throw new Error(commandMessageTextForError(result?.message?.text) || 'Failed to create entity');\n      }\n      return result.data?.id || (result.data as any);\n    }\n\n    // Fallback to CRUD service\n    return await this.ensureCrudService().insertOne(data);\n  }\n\n  /**\n   * Updates an existing entity.\n   * @param id - The entity key\n   * @param data - The entity data to update\n   * @returns The updated entity\n   */\n  async update(id: TKey, data: Omit<Partial<TUpdateDto>, 'id'>): Promise<TDetailDto> {\n    const entityDef = await this.resolveEntityDef();\n    const execute = entityDef.commands?.update?.execute;\n    const updateData = { id, ...data } as Partial<TUpdateDto> & { id: TKey };\n\n    if (typeof execute === 'function') {\n      return await execute(updateData);\n    } else if (typeof execute === 'string') {\n      const result = await this.commandService.execute<Partial<TUpdateDto> & { id: TKey }, TDetailDto>(\n        execute,\n        updateData\n      );\n      if (!result?.success) {\n        throw new Error(commandMessageTextForError(result?.message?.text) || 'Failed to update entity');\n      }\n      return result.data as TDetailDto;\n    }\n\n    // Fallback to CRUD service\n    return await this.ensureCrudService().updateOne(id, data);\n  }\n\n  /**\n   * Deletes an entity.\n   * @param id - The entity key\n   */\n  async delete(id: TKey): Promise<void> {\n    const entityDef = await this.resolveEntityDef();\n    const execute = entityDef.commands?.delete?.execute;\n    if (typeof execute === 'function') {\n      await execute(id);\n      return;\n    } else if (typeof execute === 'string') {\n      const result = await this.commandService.execute<TKey, void>(execute, id);\n      if (!result?.success) {\n        throw new Error(commandMessageTextForError(result?.message?.text) || 'Failed to delete entity');\n      }\n      return;\n    }\n\n    // Fallback to CRUD service\n    return await this.ensureCrudService().deleteOne(id);\n  }\n}\n\n//#endregion\n\n//#region ----   EntityBuilder   ----\n\n/**\n * Builder class for entity operations.\n * Provides methods to create paths and access entity data.\n */\nexport class EntityBuilder {\n  readonly module: string;\n  readonly entity: string;\n\n  constructor(\n    module: string,\n    entity: string,\n    private sessionService: AXPSessionService,\n    private entityRegistry: AXPEntityDefinitionRegistryService,\n    private queryExecutor: AXPQueryExecutor,\n    private commandService: AXPCommandService,\n    private injector: Injector,\n  ) {\n    this.module = module;\n    this.entity = entity;\n  }\n\n  /**\n   * Creates a path for the entity.\n   * @param path - The path segment (defaults to 'list')\n   * @returns The full path string\n   */\n  createPath(path: string = 'list'): string {\n    return `/${this.sessionService.application?.name}/m/${this.module}/e/${this.entity}/${path}`;\n  }\n\n  /**\n   * Gets the data accessor for the entity with generic type support.\n   * Entity definition is resolved lazily on first method call.\n   * @returns An EntityDataAccessor instance\n   */\n  data<\n    TKey = any,\n    TDetailDto extends AXPEntityDetailDto<TKey> = AXPEntityModel<TKey>,\n    TListItemDto extends AXPEntityListItemDto<TKey> = TDetailDto,\n    TCreateDto extends AXPEntityCreateDto = Omit<TDetailDto, 'id'>,\n    TUpdateDto extends AXPEntityUpdateDto<TKey> = TDetailDto\n  >(): EntityDataAccessor<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto> {\n    return new EntityDataAccessor<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto>(\n      this.module,\n      this.entity,\n      this.entityRegistry,\n      this.queryExecutor,\n      this.commandService,\n      this.injector,\n    );\n  }\n}\n\n//#endregion\n\n@Injectable({ providedIn: 'root' })\nexport class AXPEntityService {\n  private sessionService = inject(AXPSessionService);\n  private entityRegistry = inject(AXPEntityDefinitionRegistryService);\n  private queryExecutor = inject(AXPQueryExecutor);\n  private commandService = inject(AXPCommandService);\n  private injector = inject(Injector);\n\n  /**\n   * @deprecated Use `withEntity(module, entity).createPath(path)` instead.\n   * This method will be removed in a future version.\n   */\n  createPath(module: string, entity: string, path: string = 'list'): string {\n    return `/${this.sessionService.application?.name}/m/${module}/e/${entity}/${path}`;\n  }\n\n  /**\n   * Creates a builder for entity operations.\n   * Entity definition is resolved lazily when data accessor methods are called.\n   * @param module - The module name\n   * @param entity - The entity name\n   * @returns An EntityBuilder instance\n   */\n  withEntity(module: string, entity: string): EntityBuilder;\n\n  /**\n   * Creates a builder for entity operations using dot notation.\n   * Entity definition is resolved lazily when data accessor methods are called.\n   * @param entityKey - The entity key in format \"module.entity\"\n   * @returns An EntityBuilder instance\n   * @throws Error if the entity key format is invalid\n   */\n  withEntity(entityKey: string): EntityBuilder;\n\n  withEntity(moduleOrEntityKey: string, entity?: string): EntityBuilder {\n    let module: string;\n    let entityName: string;\n\n    if (entity !== undefined) {\n      // Two parameters: module and entity\n      module = moduleOrEntityKey;\n      entityName = entity;\n    } else {\n      // Single parameter: \"module.entity\" format\n      const dotIndex = moduleOrEntityKey.indexOf('.');\n      if (dotIndex === -1) {\n        throw new Error(\n          `Invalid entity key format: \"${moduleOrEntityKey}\". Expected format: \"module.entity\"`\n        );\n      }\n      module = moduleOrEntityKey.substring(0, dotIndex);\n      entityName = moduleOrEntityKey.substring(dotIndex + 1);\n    }\n\n    return new EntityBuilder(\n      module,\n      entityName,\n      this.sessionService,\n      this.entityRegistry,\n      this.queryExecutor,\n      this.commandService,\n      this.injector,\n    );\n  }\n}\n","import type { AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { AXPFilterOperatorMiddlewareService } from '@acorex/platform/common';\nimport {\n  type AXDataSourceOperator,\n  type AXDataSourceOperatorType,\n  AXPFilterQuery,\n} from '@acorex/platform/contracts';\nimport {\n  AXPPreloadFiltersApplyEvent,\n  AXPPreloadFiltersComponent,\n  AXPThemeLayoutBlockComponent,\n} from '@acorex/platform/layout/components';\nimport {\n  type AXPEntityListFilterDefinition,\n  resolveEntityListFilterContextField,\n  resolveEntityListFilterQueryField,\n} from '@acorex/platform/layout/entity-contracts';\nimport { AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\n\nimport { ChangeDetectionStrategy, Component, computed, inject, signal } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { isPlainObject, isString } from 'lodash-es';\n// import { AXPEntityMasterListViewComponent } from 'libs/platform/themes/default/src/lib/layouts/entity-layouts/entity-master-list-view/entity-master-list-view.component';\nimport { AXPEntityPreloadFiltersViewModel } from '../entity-preload-filters.viewmodel';\nimport { AXPEntityService } from '../entity.service';\n\n//#region ---- Filter operator helpers ----\n\nconst PRELOAD_FILTER_OPERATOR_TYPES = new Set<AXDataSourceOperatorType>([\n  'endsWith',\n  'startsWith',\n  'in',\n  'equal',\n  'isNull',\n  'isEmpty',\n  'lt',\n  'lte',\n  'gt',\n  'gte',\n  'contains',\n]);\n\nfunction coercePreloadFilterOperator(type: unknown): AXDataSourceOperator | undefined {\n  if (!isString(type) || !PRELOAD_FILTER_OPERATOR_TYPES.has(type as AXDataSourceOperatorType)) {\n    return undefined;\n  }\n  return { type: type as AXDataSourceOperatorType };\n}\n\n//#endregion\n\n@Component({\n  selector: 'axp-entity-preload-filters-container',\n  template: `\n    <axp-page-layout>\n      <axp-page-content>\n        <div class=\"ax-flex ax-flex-col ax-justify-center ax-h-full ax-items-center\">\n          <axp-preload-filters\n            [filterDefinitions]=\"preloadFiltersDef()\"\n            [showAllButton]=\"hasNoRequiredFilters()\"\n            (apply)=\"onApply($event)\"\n            (showAll)=\"onShowAll()\"\n          ></axp-preload-filters>\n          @if (noMatchText()) {\n            <div role=\"alert\" class=\"ax-mt-4 ax-text-center ax-text-danger ax-text-sm ax-max-w-md ax-px-4\">\n              {{ noMatchText() }}\n            </div>\n          }\n        </div>\n      </axp-page-content>\n    </axp-page-layout>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AXPPageLayoutComponent, AXPThemeLayoutBlockComponent, AXPPreloadFiltersComponent],\n  providers: [\n    // {\n    //   provide: AXPPageLayoutBase,\n    //   useExisting: AXPEntityMasterListViewComponent,\n    // },\n  ],\n})\nexport class AXPEntityPreloadFiltersContainerComponent extends AXPPageLayoutBaseComponent {\n  //#region ----   Services & Dependencies   ----\n\n  private readonly route = inject(ActivatedRoute);\n  private readonly entityService = inject(AXPEntityService);\n  private readonly filterOperatorMiddleware = inject(AXPFilterOperatorMiddlewareService);\n\n  //#endregion\n\n  //#region ----   State   ----\n\n  protected readonly noMatchText = signal<string | null>(null);\n\n  //#endregion\n\n  //#region ----   Computed Properties   ----\n\n  private vm = computed<AXPEntityPreloadFiltersViewModel>(() => {\n    return this.route.snapshot.data['vm'] as AXPEntityPreloadFiltersViewModel;\n  });\n\n  preloadFiltersDef = computed(() => {\n    return this.vm()?.preloadFiltersDef() ?? [];\n  });\n\n  hasNoRequiredFilters = computed(() => {\n    return this.vm()?.requiredFiltersDef().length === 0;\n  });\n\n  //#endregion\n\n  //#region ----   Page Layout Overrides   ----\n\n  protected override getPageTitle(): string {\n    return this.vm()?.title() ?? '';\n  }\n\n  protected override getPageDescription(): string | null {\n    return this.vm()?.description() ?? null;\n  }\n\n  //#endregion\n\n  //#region ----   Event Handlers   ----\n\n  async onApply(event: AXPPreloadFiltersApplyEvent): Promise<void> {\n    const vm = this.vm();\n    if (!vm) {\n      console.error('[AXPEntityPreloadFiltersContainerComponent] ViewModel not found');\n      return;\n    }\n\n    this.noMatchText.set(null);\n\n    const filterQueries = this.buildPreloadFilterQueries(event.filterValues as Record<string, unknown>);\n    const app = this.route.snapshot.parent?.parent?.paramMap.get('app');\n    const module = this.route.snapshot.parent?.paramMap.get('module');\n    const entity = this.route.snapshot.paramMap.get('entity');\n\n    if (!app || !module || !entity) {\n      console.error('[AXPEntityPreloadFiltersContainerComponent] Missing route params');\n      return;\n    }\n\n    if (filterQueries.length === 0) {\n      await this.router.navigate([app, 'm', module, 'e', entity, 'list']);\n      return;\n    }\n\n    const listFilter = this.buildListQueryFilter(filterQueries);\n\n    try {\n      const result = await this.entityService.withEntity(module, entity).data().query({\n        skip: 0,\n        take: 1,\n        filter: listFilter,\n      });\n\n      const total = result.total ?? 0;\n\n      if (total === 0) {\n        this.noMatchText.set(await this.translateService.translateAsync('@general:messages.preload-filters.no-match'));\n        return;\n      }\n\n      if (total > 1) {\n        await this.router.navigate([app, 'm', module, 'e', entity, 'list'], {\n          queryParams: {\n            filters: JSON.stringify(filterQueries),\n          },\n        });\n        return;\n      }\n\n      const first = result.items[0];\n      const id =\n        first && typeof first === 'object' && first !== null && 'id' in first\n          ? (first as { id: unknown }).id\n          : undefined;\n      if (id === undefined || id === null) {\n        console.error('[AXPEntityPreloadFiltersContainerComponent] List item has no id');\n        this.noMatchText.set(await this.translateService.translateAsync('@general:messages.preload-filters.no-match'));\n        return;\n      }\n\n      await this.router.navigate([app, 'm', module, 'e', entity, String(id), 'view']);\n    } catch (err) {\n      console.error('[AXPEntityPreloadFiltersContainerComponent] List query failed', err);\n      this.noMatchText.set(await this.translateService.translateAsync('@general:messages.preload-filters.no-match'));\n    }\n  }\n\n  async onShowAll(): Promise<void> {\n    this.noMatchText.set(null);\n    const app = this.route.snapshot.parent?.parent?.paramMap.get('app');\n    const module = this.route.snapshot.parent?.paramMap.get('module');\n    const entity = this.route.snapshot.paramMap.get('entity');\n\n    if (!app || !module || !entity) {\n      return;\n    }\n\n    // `AXPEntityPreloadFilterGuard` only allows the list when `filters` exists on the query string.\n    // Empty array = no filter constraints (same UX as \"show all\") but satisfies the guard.\n    await this.router.navigate([app, 'm', module, 'e', entity, 'list'], {\n      queryParams: { filters: JSON.stringify([]) },\n    });\n  }\n\n  //#endregion\n\n  //#region ----   Utility Methods   ----\n\n  private buildPreloadFilterQueries(context: Record<string, unknown>): AXPFilterQuery[] {\n    const filters: AXPFilterQuery[] = [];\n    const filterDefs = this.preloadFiltersDef() as AXPEntityListFilterDefinition[];\n\n    for (const filterDef of filterDefs) {\n      const contextField = resolveEntityListFilterContextField(filterDef);\n      if (!contextField) {\n        continue;\n      }\n\n      const raw = context[contextField];\n      if (raw === undefined || raw === null || raw === '') {\n        continue;\n      }\n\n      const entry = this.unwrapFilterWidgetEntry(raw);\n      if (entry.value === undefined || entry.value === null || entry.value === '') {\n        continue;\n      }\n\n      const operator =\n        entry.operator ??\n        coercePreloadFilterOperator(filterDef.operator?.type) ??\n        ({ type: 'equal' } satisfies AXDataSourceOperator);\n      const field = resolveEntityListFilterQueryField(filterDef, operator);\n      if (!field) {\n        continue;\n      }\n\n      const filterQuery: AXPFilterQuery = {\n        field,\n        operator,\n        value: entry.value,\n      };\n      if (isString(entry.displayText)) {\n        filterQuery.displayText = entry.displayText;\n      }\n      filters.push(filterQuery);\n    }\n\n    return filters;\n  }\n\n  /**\n   * Filter widgets store `{ value, operation, displayText? }`; plain values are treated as equal filters.\n   */\n  private unwrapFilterWidgetEntry(raw: unknown): {\n    value: unknown;\n    operator?: AXDataSourceOperator;\n    displayText?: string;\n  } {\n    if (!isPlainObject(raw)) {\n      return { value: raw };\n    }\n\n    const entry = raw as {\n      value?: unknown;\n      operation?: { type?: string };\n      displayText?: unknown;\n    };\n    const hasFilterShape = 'value' in entry || 'operation' in entry;\n    if (!hasFilterShape) {\n      return { value: raw };\n    }\n\n    return {\n      value: entry.value,\n      operator: coercePreloadFilterOperator(entry.operation?.type),\n      displayText: isString(entry.displayText) ? entry.displayText : undefined,\n    };\n  }\n\n  private buildListQueryFilter(filterQueries: AXPFilterQuery[]): AXDataSourceFilterOption {\n    return this.filterOperatorMiddleware.transformFilter({\n      field: null as any,\n      logic: 'and',\n      operator: null as any,\n      filters: filterQueries as AXDataSourceFilterOption[],\n    });\n  }\n\n  //#endregion\n}\n","import { AXPFilterDefinition, AXPWidgetsCatalog } from '@acorex/platform/contracts';\nimport { AXDataSource } from '@acorex/cdk/common';\n\nimport { applyFilterArray, applySortArray, AXPDataSourceDefinition, AXPDataSourceDefinitionProvider } from '@acorex/platform/core';\n\nimport { inject } from '@angular/core';\nimport { AXPEntityResolver } from './entity.config';\nimport { AXPEntityDataSourceKeys } from '@acorex/platform/layout/entity-contracts';\n\n/**\n * Data source definition provider that returns all entity names\n * from entity loaders' list() (const.ts in each module).\n */\nexport class AXPEntitiesListDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n  //#region ---- Services & Dependencies ----\n\n  private readonly entityResolver = inject(AXPEntityResolver);\n\n  //#endregion\n\n  //#region ---- Public Methods ----\n\n  items(): Promise<AXPDataSourceDefinition[]> {\n    return Promise.resolve([\n      {\n        name: AXPEntityDataSourceKeys.Entities,\n        title: 'Entities',\n        columns: [\n          {\n            name: 'entity',\n            title: 'Entity',\n            datatype: 'string',\n            type: AXPWidgetsCatalog.text,\n          },\n          {\n            name: 'module',\n            title: 'Module',\n            datatype: 'string',\n            type: AXPWidgetsCatalog.text,\n          },\n          {\n            name: 'title',\n            title: 'Title',\n            datatype: 'string',\n            type: AXPWidgetsCatalog.text,\n          },\n        ],\n        filters: [\n          {\n            field: 'entity',\n            title: 'Entity',\n            operator: { type: 'equal' },\n            widget: { type: AXPWidgetsCatalog.text },\n            filterType: { advance: true, inline: true },\n          } as AXPFilterDefinition,\n          {\n            field: 'module',\n            title: 'Module',\n            operator: { type: 'equal' },\n            widget: { type: AXPWidgetsCatalog.text },\n            filterType: { advance: true, inline: true },\n          } as AXPFilterDefinition,\n        ],\n        textField: { name: 'title', title: 'Title' },\n        valueField: { name: 'title', title: 'Title' },\n        source: () => {\n          return new AXDataSource({\n            key: 'title',\n            load: async (query) => {\n              const entries = await this.entityResolver.listAll();\n              let items = entries.map((e) => ({\n                title: e.fullName,\n                entity: e.name,\n                module: e.module,\n              }));\n              if (query.filter) {\n                items = applyFilterArray(items, [query.filter]);\n              }\n              const rawSort = Array.isArray(query.sort) ? query.sort : query.sort ? [query.sort] : [];\n              const sortOpt =\n                rawSort.length > 0 ? rawSort : [{ field: 'title' as const, dir: 'asc' as const }];\n              items = applySortArray(items, sortOpt);\n              return { items, total: items.length };\n            },\n            byKey: async (key: unknown) => {\n              const k = String(key);\n              const entries = await this.entityResolver.listAll();\n              const e = entries.find((x) => x.fullName === k);\n              if (!e) throw new Error(`Entity not found: ${k}`);\n              return { title: e.fullName, entity: e.name, module: e.module };\n            },\n            pageSize: 1000,\n          });\n        },\n      },\n    ]);\n  }\n\n  //#endregion\n}\n","import { AXPEntityPage, AXPRelatedEntity } from '@acorex/platform/layout/entity-contracts';\n//#region ---- Imports ----\n\n//#endregion\n\n//#region ---- Types ----\n\n/**\n * Built-in entity detail tabs from plugins. Sidebar order (after related page-list / page-detail\n * tabs): meta-data-builder → attachments → documents → comments → dashboard → history.\n */\nexport type EntityDetailPluginPageSlot =\n  | 'meta-data-builder'\n  | 'attachments'\n  | 'documents'\n  | 'comments'\n  | 'dashboard'\n  | 'history';\n\n/** Identifies an `entity.pages` entry when skipping its order during recomputation. */\nexport interface SkipEntityComponentPageRef {\n  componentKey: string;\n  /** When set, only the page with this `field` is skipped (e.g. attachments / meta-data per field). */\n  field?: string;\n}\n\nexport interface ResolveEntityPluginDetailPageOrderOptions {\n  /** Component key of the page being added or updated (used to count sibling tabs in the same slot). */\n  componentKey: string;\n  /**\n   * Ignore this page when counting siblings / recomputing (the page currently being updated).\n   */\n  skipPage?: SkipEntityComponentPageRef;\n  /**\n   * Field name for multi-page slots (`attachments`, `meta-data-builder`). Omit for single-tab slots.\n   */\n  field?: string;\n  /** Gap between auto-assigned related tab orders. Default: 10. */\n  relatedOrderStep?: number;\n  /** Minimum start of the plugin zone (after related tabs). Default: 100_000. */\n  pluginZoneFloor?: number;\n}\n\n//#endregion\n\n//#region ---- Constants ----\n\nconst DEFAULT_RELATED_ORDER_STEP = 10;\nconst DEFAULT_PLUGIN_ZONE_FLOOR = 100_000;\n/** Space per plugin slot so multiple fields in one slot do not cross into the next. */\nconst PLUGIN_SLOT_SPAN = 10_000;\nconst SUB_ORDER_STEP = 10;\n\nconst PLUGIN_SLOT_INDEX: Record<EntityDetailPluginPageSlot, number> = {\n  'meta-data-builder': 0,\n  attachments: 1,\n  documents: 2,\n  comments: 3,\n  dashboard: 4,\n  history: 5,\n};\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction shouldSkipPageForMax(\n  page: AXPEntityPage & { field?: string },\n  skip?: SkipEntityComponentPageRef,\n): boolean {\n  if (!skip) {\n    return false;\n  }\n  if (page.componentKey !== skip.componentKey) {\n    return false;\n  }\n  if (skip.field !== undefined) {\n    return page.field === skip.field;\n  }\n  return true;\n}\n\nfunction normalizeRelatedPageListDetailOrders(\n  relatedEntities: AXPRelatedEntity[] | undefined,\n  step: number,\n): number {\n  const pageTabRelated = (relatedEntities ?? []).filter(\n    (re) => re.layout?.type === 'page-list' || re.layout?.type === 'page-detail',\n  );\n\n  let maxExplicit = 0;\n  for (const re of pageTabRelated) {\n    const o = re.layout?.order;\n    if (typeof o === 'number' && Number.isFinite(o)) {\n      maxExplicit = Math.max(maxExplicit, o);\n    }\n  }\n\n  let cursor = maxExplicit;\n  for (const re of pageTabRelated) {\n    const layout = re.layout;\n    if (!layout || layout.order != null) {\n      continue;\n    }\n    cursor += step;\n    re.layout = { ...layout, order: cursor };\n  }\n\n  let afterMax = 0;\n  for (const re of pageTabRelated) {\n    const o = re.layout?.order;\n    if (typeof o === 'number' && Number.isFinite(o)) {\n      afterMax = Math.max(afterMax, o);\n    }\n  }\n  return afterMax;\n}\n\n/**\n * Ordinal within a slot for multi-field pages (attachments, meta-data-builder), stable by field name.\n */\nfunction subOrderWithinComponentSlot(\n  pages: Array<AXPEntityPage & { field?: string }> | undefined,\n  componentKey: string,\n  skip: SkipEntityComponentPageRef | undefined,\n  currentField: string | undefined,\n): number {\n  const peerFieldKeys = (pages ?? [])\n    .filter((p) => p.componentKey === componentKey && !shouldSkipPageForMax(p, skip))\n    .map((p) => p.field ?? '');\n  const keySet = new Set(peerFieldKeys);\n  keySet.add(currentField ?? '');\n  const sorted = [...keySet].sort((a, b) => a.localeCompare(b));\n  const index = sorted.indexOf(currentField ?? '');\n  return Math.max(0, index) * SUB_ORDER_STEP;\n}\n\n//#endregion\n\n//#region ---- Public API ----\n\n/**\n * Resolves `layout.order` for a built-in plugin detail tab (`entity.pages`).\n *\n * 1. Assigns finite `layout.order` values to related `page-list` / `page-detail` rows that omit\n *    `order` (the composer otherwise treats them as +Infinity).\n * 2. Places plugin tabs in a fixed relative order: meta-data-builder → attachments → documents →\n *    comments → history, after all related tabs.\n */\nexport function resolveEntityPluginDetailPageOrder(\n  input: {\n    relatedEntities?: AXPRelatedEntity[];\n    pages?: Array<AXPEntityPage & { field?: string }>;\n  },\n  slot: EntityDetailPluginPageSlot,\n  options: ResolveEntityPluginDetailPageOrderOptions,\n): number {\n  const relatedStep = options.relatedOrderStep ?? DEFAULT_RELATED_ORDER_STEP;\n  const zoneFloor = options.pluginZoneFloor ?? DEFAULT_PLUGIN_ZONE_FLOOR;\n  const { componentKey, skipPage, field } = options;\n\n  const afterRelatedMax = normalizeRelatedPageListDetailOrders(input.relatedEntities, relatedStep);\n  const pluginZoneStart = Math.max(afterRelatedMax + relatedStep, zoneFloor);\n\n  const slotIndex = PLUGIN_SLOT_INDEX[slot];\n  const subOrder = subOrderWithinComponentSlot(input.pages, componentKey, skipPage, field);\n\n  return pluginZoneStart + slotIndex * PLUGIN_SLOT_SPAN + subOrder;\n}\n\n//#endregion\n","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { castArray } from 'lodash-es';\n\nexport interface AXPDataSeeder {\n  seed(): Promise<void>;\n}\n\nexport const AXP_DATA_SEEDER_TOKEN = new InjectionToken<AXPDataSeeder[]>('AXP_DATA_SEEDER_TOKEN');\n\n@Injectable({ providedIn: 'root' })\nexport class AXPDataSeederService {\n  private loaders = inject(AXP_DATA_SEEDER_TOKEN, { optional: true });\n\n  async seed(): Promise<void> {\n    for (const loader of castArray(this.loaders)) {\n      if (!loader) continue;\n\n      const seederName = loader.constructor?.name || 'UnknownSeeder';\n      const startTime = performance.now();\n\n      try {\n        await loader.seed();\n      } catch (err) {\n        const message = err instanceof Error ? err.message : String(err);\n        console.error(`[AXPDataSeeder] Seeder \"${seederName}\" failed (continuing with next):`, message);\n        if (err instanceof Error && err.stack) {\n          console.error(err.stack);\n        }\n        // Optionally log to your system-log / app-log entity here if you have one (inject a writer and persist).\n        continue;\n      }\n\n      const duration = performance.now() - startTime;\n      if (duration > 3000) {\n        console.warn(`[AXPDataSeeder] Seeder \"${seederName}\" took ${duration.toFixed(2)}ms (>3000ms threshold)`);\n      }\n    }\n  }\n}\n","/**\n * Re-export from domain to avoid circular dependency: layout/components must not depend on layout/entity.\n * Consumers that only need the token/interface can import from @acorex/platform/domain.\n */\nexport {\n  AXP_ENTITY_DEFINITION_CRUD_SERVICE,\n  type AXPEntityDefinitionCrudService,\n} from '@acorex/platform/domain';\n","import { AXDataSource, AXDataSourceFilterOption } from '@acorex/cdk/common';\n\nexport interface AXPEntityListPagingState {\n  take: number;\n  skip: number;\n}\n\n/** Default take used when loading hierarchical children via data-table expand. */\nexport const TREE_CHILDREN_QUERY_TAKE = 1000;\n\n/**\n * AXDataSource.getItemsByFilter reuses the current grid page skip/take.\n * When data-table expands a hierarchical row it sends a direct parentKey=equal filter;\n * reset paging so children are not clipped by the parent grid page.\n */\nexport function resetPagingForTreeChildrenLoad(\n  request: { skip?: number; take?: number; filter?: AXDataSourceFilterOption | null },\n  parentKey: string | undefined | null,\n  take: number = TREE_CHILDREN_QUERY_TAKE,\n): void {\n  if (!parentKey || !request.filter) {\n    return;\n  }\n\n  const filter = request.filter;\n  const hasNestedFilters = Array.isArray(filter.filters) && filter.filters.length > 0;\n  const isDirectParentEqual =\n    !hasNestedFilters && filter.field === parentKey && filter.operator?.type === 'equal';\n\n  if (isDirectParentEqual) {\n    request.skip = 0;\n    request.take = take;\n  }\n}\n\n/**\n * Returns true when the filter tree already constrains `parentKey`\n * (root `isEmpty`, children `equal`, or nested equivalents).\n */\nexport function filterTouchesParentKey(\n  filter: AXDataSourceFilterOption,\n  parentKey: string,\n): boolean {\n  if (filter.field === parentKey) {\n    return true;\n  }\n\n  return (filter.filters ?? []).some((child) =>\n    filterTouchesParentKey(child as AXDataSourceFilterOption, parentKey),\n  );\n}\n\n/**\n * Ensures hierarchical root loads keep `parentKey isEmpty` while preserving custom filters.\n * Call this in lookup/list loaders before query so storage does not replace custom filters.\n * Skips when the request already targets `parentKey` (e.g. children expand).\n */\nexport function ensureHierarchicalRootFilter(\n  filter: AXDataSourceFilterOption | null | undefined,\n  parentKey: string | undefined | null,\n): AXDataSourceFilterOption | undefined {\n  if (!parentKey) {\n    return filter ?? undefined;\n  }\n\n  const rootFilter: AXDataSourceFilterOption = {\n    value: true,\n    field: parentKey,\n    operator: {\n      type: 'isEmpty',\n    },\n  };\n\n  if (!filter) {\n    return rootFilter;\n  }\n\n  if (filterTouchesParentKey(filter, parentKey)) {\n    return filter;\n  }\n\n  return {\n    field: null as unknown as string,\n    logic: 'and',\n    operator: null as unknown as AXDataSourceFilterOption['operator'],\n    filters: [filter, rootFilter],\n  };\n}\n\ninterface AXPDataSourcePagingInternals {\n  config: { pageSize: number };\n  _page?: number;\n  _query?: { skip: number; take: number };\n}\n\n/**\n * Applies take/skip to the data source without triggering {@link AXDataSource.load}.\n */\nexport function applyDataSourcePagingWithoutLoad(dataSource: AXDataSource, paging: AXPEntityListPagingState): void {\n  const take = Math.max(1, paging.take);\n  const skip = Math.max(0, paging.skip);\n  const page = Math.floor(skip / take);\n  const ds = dataSource as unknown as AXPDataSourcePagingInternals;\n\n  dataSource.config.pageSize = take;\n  if (ds._query) {\n    ds._query.take = take;\n    ds._query.skip = skip;\n  }\n  ds._page = page;\n}\n\nexport function getDataSourcePageIndex(dataSource: AXDataSource): number {\n  const ds = dataSource as unknown as AXPDataSourcePagingInternals;\n  return ds._page ?? 0;\n}\n\nexport function normalizeListPaging(\n  paging: Partial<AXPEntityListPagingState> | undefined,\n  defaultTake: number,\n): AXPEntityListPagingState {\n  const take = typeof paging?.take === 'number' && paging.take > 0 ? paging.take : defaultTake;\n  const skip = typeof paging?.skip === 'number' && paging.skip >= 0 ? paging.skip : 0;\n  return { take, skip };\n}\n","import { AXPMetaData, resolveActionLook } from '@acorex/platform/contracts';\nimport { AXPWidgetColumnNode } from '@acorex/platform/layout/widget-core-contracts';\nimport { AXPCardField, AXPEntity, AXPEntityAction, AXPEntityCommandScope, AXPEntityProperty, AXPEntityTableColumn, isCardFieldBadgeDisplay, resolveCardFieldBadgeColor } from '@acorex/platform/layout/entity-contracts';\nimport { AXStyleColorType } from '@acorex/cdk/common';\n\nimport { computed } from '@angular/core';\n\nexport class AXPEntityCommandTriggerViewModel {\n  priority: 'primary' | 'secondary' | 'none';\n  order: number;\n  color: AXStyleColorType;\n  icon: string;\n  title: string;\n  name: string;\n  key?: string;\n  separated: boolean;\n  scope: AXPEntityCommandScope;\n  disabled: boolean | string;\n  hidden: boolean | string;\n  options: any;\n  metadata?: AXPMetaData;\n  default?: boolean;\n  shortcuts?: string[];\n  permissions?: string[];\n  items?: AXPEntityCommandTriggerViewModel[];\n  isChild?: boolean;\n\n  constructor(entity: AXPEntity, action: AXPEntityAction, isChild = false) {\n    this.name = AXPEntityCommandTriggerViewModel.buildTriggerName(action);\n    this.options = typeof action.command === 'object' ? action.command.options : undefined;\n    this.metadata = typeof action.command === 'object' ? action.command.metadata : undefined;\n    const resolvedLook = resolveActionLook(action.type);\n    this.priority = action.priority;\n    this.title = action.title;\n    this.separated = action.separated ?? false;\n    this.color = (action.color ?? resolvedLook.color) as AXStyleColorType;\n    this.icon = action.icon ?? resolvedLook.icon;\n    this.hidden = action.hidden ?? false;\n    this.disabled = action.disabled ?? false;\n    this.default = action.default ?? false;\n    this.shortcuts = action.shortcuts;\n    this.permissions = action.permissions;\n    this.scope = action.scope;\n    this.order = action.order ?? 0;\n    this.isChild = isChild;\n    this.items = action.items?.map((child) => new AXPEntityCommandTriggerViewModel(entity, child, true));\n  }\n\n  /** Stable trigger id for command lookup and list tracking when {@link AXPEntityAction.name} is omitted. */\n  private static buildTriggerName(action: AXPEntityAction): string {\n    const commandName = typeof action.command === 'string' ? action.command : action.command.name;\n    if (action.name) {\n      return `${commandName}&${action.name}`;\n    }\n    const suffix = [action.scope, action.priority, String(action.order ?? 0), action.type].join(':');\n    return `${commandName}&${suffix}`;\n  }\n}\n\nexport class AXPEntityListViewColumnViewModel {\n  constructor(\n    public readonly property: AXPEntityProperty,\n    public readonly column: AXPEntityTableColumn,\n  ) {}\n\n  name = this.property.name;\n  title = this.column.title ?? this.property.title;\n  visible = this.column?.options?.visible ?? true;\n  sortEnabled = this.property.options?.sort?.enabled;\n  width = this.column?.options?.width;\n\n  node = computed<AXPWidgetColumnNode>(() => {\n    const widget = this.property.schema.interface!;\n    // Column `visible` is resolved by the list viewmodel; do not forward expressions into widget options.\n    const { visible: _columnVisible, ...columnOptions } = this.column?.options ?? {};\n    return {\n      path: this.column.options?.dataPath ?? this.name,\n      type: widget.type,\n      options: {\n        ...widget?.options,\n        ...columnOptions,\n        columnName: this.name,\n        // Include children from widget interface so column components can access them\n        ...(widget.children ? { children: widget.children } : {}),\n      },\n    } as AXPWidgetColumnNode;\n  });\n}\n\nexport class AXPEntityListViewCardFieldViewModel {\n  constructor(\n    public readonly property: AXPEntityProperty,\n    public readonly field: AXPCardField,\n  ) {}\n\n  name = this.property.name;\n  title = this.field.title ?? this.property.title;\n  visible = this.field?.options?.visible ?? true;\n  layout = this.field.layout;\n  display = isCardFieldBadgeDisplay(this.field.display) ? 'badge' : 'simple';\n  isBadgeDisplay = isCardFieldBadgeDisplay(this.field.display);\n  badgeColor = resolveCardFieldBadgeColor(this.field);\n\n  isStatusWidget = this.property.schema?.interface?.type === 'status-widget';\n\n  node = computed<AXPWidgetColumnNode>(() => {\n    const widget = this.property.schema.interface!;\n    return {\n      path: this.field.options?.dataPath ?? this.name,\n      type: widget.type,\n      options: {\n        ...widget?.options,\n        ...this.field?.options,\n        columnName: this.name,\n        ...(widget.children ? { children: widget.children } : {}),\n      },\n    } as AXPWidgetColumnNode;\n  });\n\n  /** Readonly column node for status fields shown as header badges. */\n  headerBadgeNode = computed<AXPWidgetColumnNode>(() => {\n    const base = this.node();\n    if (!this.isStatusWidget) {\n      return base;\n    }\n    return {\n      ...base,\n      options: {\n        ...base.options,\n        readonly: true,\n      },\n    };\n  });\n}\n","import { AXPEntity, AXPEntityCommandScope, AXPRelatedEntity, getEntityInfo, isEntityActionPermitted } from '@acorex/platform/layout/entity-contracts';\nimport { AXDataSource, AXDataSourceFilterOption, AXDataSourceOperator } from '@acorex/cdk/common';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPCommonSettings, AXPFilterOperatorMiddlewareService, AXPSettingsService } from '@acorex/platform/common';\nimport { AXPExpressionEvaluatorScope, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { AXPQueryExecutor } from '@acorex/platform/runtime';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { Injector, computed, signal } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { Subject, takeUntil } from 'rxjs';\nimport { resetPagingForTreeChildrenLoad } from './entity-list-paging.util';\nimport { AXPEntityDefinitionRegistryService } from './entity-registery.service';\nimport { AXPEntityCommandTriggerViewModel, AXPEntityListViewColumnViewModel } from './entity.viewmodel';\nimport { getRelatedEntityColumnNames } from './services/entity-details/related-entity-converters/related-entity-include-columns';\n\nexport class AXPEntityDetailListViewModel {\n  private detailEntity = signal<AXPEntity | null>(null);\n  private formatService = this.injector.get(AXFormatService);\n  private workflow = this.injector.get(AXPWorkflowService);\n  private filterOperatorMiddleware = this.injector.get(AXPFilterOperatorMiddlewareService);\n  private expressionEvaluator = this.injector.get(AXPExpressionEvaluatorService);\n  private queryExecutor = this.injector.get(AXPQueryExecutor);\n  private readonly settingsService = this.injector.get(AXPSettingsService);\n  private readonly session = this.injector.get(AXPSessionService);\n  private readonly destroyed = new Subject<void>();\n  private readonly showRowIndexColumnEnabled = signal<boolean>(false);\n  private lastAppliedFilterKey: string | null = null;\n\n  /** Whether the row index column is shown (user setting). */\n  readonly showIndexColumn = computed(() => this.showRowIndexColumnEnabled());\n\n  dataSource = new AXDataSource({\n    byKey: async (key) => {\n      const execute = this.detailEntity()?.queries?.byKey?.execute;\n      if (typeof execute === 'function') {\n        return await execute(key);\n      } else if (typeof execute === 'string') {\n        return await this.queryExecutor.fetch(execute, key);\n      }\n      return null;\n    },\n    load: async (e) => {\n      resetPagingForTreeChildrenLoad(e, this.detailEntity()?.parentKey);\n      const execute = this.detailEntity()?.queries?.list?.execute;\n      if (typeof execute === 'function') {\n        return await execute(e);\n      } else if (typeof execute === 'string') {\n        return await this.queryExecutor.fetch(execute, e);\n      }\n      return null;\n    },\n    pageSize: 5,\n    key: 'id',\n  });\n\n  public parentKey = computed(() => {\n    return this.detailEntity()?.parentKey;\n  });\n\n  constructor(\n    private injector: Injector,\n    private detailEntityConfig: AXPRelatedEntity,\n    private parent: { entity: AXPEntity; data: any },\n  ) {\n    void this.syncShowRowIndexColumnSetting();\n    this.settingsService.onLoaded.pipe(takeUntil(this.destroyed)).subscribe(() => {\n      void this.syncShowRowIndexColumnSetting();\n    });\n    this.settingsService.onChanged.pipe(takeUntil(this.destroyed)).subscribe(() => {\n      void this.syncShowRowIndexColumnSetting();\n    });\n    this.initialize();\n  }\n\n  private async syncShowRowIndexColumnSetting(): Promise<void> {\n    try {\n      const value = await this.settingsService.get<boolean>(AXPCommonSettings.ShowRowIndexColumn);\n      this.showRowIndexColumnEnabled.set(value ?? false);\n    } catch {\n      this.showRowIndexColumnEnabled.set(false);\n    }\n  }\n\n  destroy(): void {\n    this.destroyed.next();\n    this.destroyed.complete();\n  }\n\n  async initialize() {\n    const entityResolver = this.injector.get(AXPEntityDefinitionRegistryService);\n    const [moduleName, entityName] = this.detailEntityConfig.entity.split('.');\n    const entity = await entityResolver.resolve(moduleName, entityName);\n    if (!entity) {\n      throw Error(`Invalid enitity name: ${this.detailEntityConfig.entity}`);\n    }\n    this.detailEntity.set(entity);\n    this.applyFilterAndSort();\n  }\n\n  public selectedItems = signal<any[]>([]);\n\n  public hasSelectedItems = computed<boolean>(() => {\n    return this.selectedItems().length > 0;\n  });\n\n  public clearSelection(): void {\n    this.selectedItems.set([]);\n  }\n\n  //****************** Title ******************//\n  public title = computed<string>(() => {\n    return (\n      this.detailEntityConfig.title ??\n      this.detailEntity()?.interfaces?.detail?.list?.title! ??\n      this.detailEntity()?.formats.plural!\n    );\n  });\n\n  //****************** Visibility ******************//\n  public hidden = computed<Promise<boolean>>(async () => {\n    if (typeof this.detailEntityConfig.hidden == 'string') {\n      const scope: AXPExpressionEvaluatorScope = {\n        context: {\n          eval: (path: string) => {\n            return get(this.parent.data, path);\n          },\n        },\n      };\n      return await this.expressionEvaluator.evaluate(this.detailEntityConfig.hidden, scope);\n    } else {\n      return this.detailEntityConfig.hidden ?? false;\n    }\n  });\n\n  //****************** Inline filter ******************//\n  public inlineFiltersPlaceholders = computed<string[]>(() => {\n    //return this.entityDef.properties.filter(p => p.options?.filter?.inline?.enabled).map(c => c.title);\n    return [];\n  });\n\n  public hasInlineFilters = computed<boolean>(() => {\n    return this.inlineFiltersPlaceholders().length > 0;\n  });\n\n  //****************** Actions ******************//\n  private allActions = computed<AXPEntityCommandTriggerViewModel[]>(() => {\n    const originalList = this.detailEntity()?.interfaces?.master?.list?.actions ?? [];\n    const detailEntityActionList = this.detailEntityConfig.actions ?? [];\n\n    // Create a map to track which actions from detailEntityActionList have been used\n    const usedOverrideActions = new Set<string>();\n\n    // Start with original actions, applying overrides where they exist\n    const mergedActions = originalList.map((originalAction) => {\n      const originalCommandName =\n        typeof originalAction.command === 'string' ? originalAction.command : originalAction.command.name;\n\n      const overrideAction = detailEntityActionList.find((action) => {\n        const actionCommandName = typeof action.command === 'string' ? action.command : action.command.name;\n        return actionCommandName === originalCommandName && action.name === originalAction.name;\n      });\n\n      if (overrideAction) {\n        // Mark this override action as used\n        const overrideKey = `${typeof overrideAction.command === 'string' ? overrideAction.command : overrideAction.command.name}_${overrideAction.name}`;\n        usedOverrideActions.add(overrideKey);\n        return new AXPEntityCommandTriggerViewModel(this.detailEntity()!, overrideAction);\n      }\n\n      return new AXPEntityCommandTriggerViewModel(this.detailEntity()!, originalAction);\n    });\n\n    // Add any remaining actions from detailEntityActionList that weren't used as overrides\n    const additionalActions = detailEntityActionList\n      .filter((action) => {\n        const actionKey = `${typeof action.command === 'string' ? action.command : action.command.name}_${action.name}`;\n        return !usedOverrideActions.has(actionKey);\n      })\n      .map((action) => new AXPEntityCommandTriggerViewModel(this.detailEntity()!, action));\n\n    // Do not filter by hidden here; hidden/disabled may be expressions that must be evaluated dynamically\n    return [...additionalActions, ...mergedActions];\n  });\n\n  public selectedScopeActionsCount = computed<number>(() => {\n    return this.allActions().filter(\n      (a) =>\n        a.scope == AXPEntityCommandScope.Selected &&\n        isEntityActionPermitted(a, (...keys) => this.session.authorize(...keys)),\n    ).length;\n  });\n\n  public primaryActions = computed<AXPEntityCommandTriggerViewModel[]>(() => {\n    return this.allActions().filter(\n      (a) =>\n        a.priority == 'primary' &&\n        isEntityActionPermitted(a, (...keys) => this.session.authorize(...keys)) &&\n        ((a.scope == AXPEntityCommandScope.Selected && this.hasSelectedItems()) ||\n          (a.scope == AXPEntityCommandScope.TypeLevel && !this.hasSelectedItems())),\n    );\n  });\n\n  public secondaryActions = computed<AXPEntityCommandTriggerViewModel[]>(() => {\n    return this.allActions().filter(\n      (a) =>\n        a.priority == 'secondary' &&\n        isEntityActionPermitted(a, (...keys) => this.session.authorize(...keys)) &&\n        ((a.scope == AXPEntityCommandScope.Selected && this.hasSelectedItems()) ||\n          (a.scope == AXPEntityCommandScope.TypeLevel && !this.hasSelectedItems())),\n    );\n  });\n  public primaryRowActions = computed<AXPEntityCommandTriggerViewModel[]>(() =>\n    this.allActions().filter(\n      (a) =>\n        a.scope == AXPEntityCommandScope.Individual &&\n        a.priority === 'primary' &&\n        isEntityActionPermitted(a, (...keys) => this.session.authorize(...keys)),\n    ),\n  );\n\n  public secondaryRowActions = computed<AXPEntityCommandTriggerViewModel[]>(() =>\n    this.allActions().filter(\n      (a) =>\n        a.scope == AXPEntityCommandScope.Individual &&\n        a.priority === 'secondary' &&\n        isEntityActionPermitted(a, (...keys) => this.session.authorize(...keys)),\n    ),\n  );\n\n  //****************** Filter ******************//\n\n  private inlineFilters: AXDataSourceFilterOption = {\n    field: null as any,\n    logic: 'or',\n    operator: null as any,\n    filters: [],\n  };\n\n  applyInlineFilter(value: string) {\n    // const props = this.entityDef.properties.filter(c => c.options?.filter?.inline?.enabled);\n    // this.inlineFilters.filters = [];\n    // if (value) {\n    //     props.forEach(p => {\n    //         this.inlineFilters.filters?.push({\n    //             field: p.name,\n    //             operator: {\n    //                 type: 'contains'\n    //             },\n    //             value\n    //         })\n    //     })\n    // }\n    this.applyFilterAndSort();\n  }\n\n  async applyFilterAndSort() {\n    const parentFilters: AXDataSourceFilterOption[] =\n      (await Promise.all(\n        this.detailEntityConfig.conditions?.map(async (c) => {\n          return {\n            field: c.name,\n            operator: c.operator as unknown as AXDataSourceOperator,\n            // value: this.parent.data?.id,\n            value: await this.evaluateExpressions(c.value),\n          } as AXDataSourceFilterOption;\n        }) ?? [],\n      )) ?? [];\n    const parentFilterWrapper: AXDataSourceFilterOption = {\n      field: null as any,\n      logic: 'and',\n      operator: null as any,\n      filters: parentFilters,\n    };\n    //\n    const inline = this.inlineFilters.filters?.length ?? 0;\n    const parent = parentFilterWrapper.filters?.length ?? 0;\n\n    let effectiveFilter: AXDataSourceFilterOption | undefined;\n    if (inline && parent) {\n      effectiveFilter = this.filterOperatorMiddleware.transformFilter({\n        field: null as any,\n        logic: 'and',\n        operator: null as any,\n        filters: [this.inlineFilters, parentFilterWrapper],\n      });\n    } else if (inline) {\n      effectiveFilter = this.filterOperatorMiddleware.transformFilter(this.inlineFilters);\n    } else if (parent) {\n      effectiveFilter = this.filterOperatorMiddleware.transformFilter(parentFilterWrapper);\n    }\n\n    const filterKey = JSON.stringify(effectiveFilter ?? null);\n    if (filterKey === this.lastAppliedFilterKey) {\n      return;\n    }\n    this.lastAppliedFilterKey = filterKey;\n\n    this.dataSource.clearFilter();\n    if (effectiveFilter) {\n      this.dataSource.filter(effectiveFilter);\n    }\n    this.dataSource.refresh();\n  }\n\n  //****************** Columns ******************//\n\n  columns = computed(() => {\n    if (this.detailEntity()) {\n      const detailColumnNames = getRelatedEntityColumnNames(this.detailEntityConfig.columns);\n      const columns = this.detailEntity()?.columns?.map((c) => c.name) ?? [];\n      const props =\n        this.detailEntity()?.properties.filter(\n          (p) =>\n            p.schema.visible !== false &&\n            (detailColumnNames.length === 0 || detailColumnNames.includes(p.name)),\n        ) ?? [];\n      const displayColumns = props.filter((p) => columns.some((c) => c == p.name));\n      return displayColumns.map((p) => {\n        return new AXPEntityListViewColumnViewModel(p, this.detailEntity()?.columns?.find((c) => c.name == p.name)!);\n      });\n    }\n    return [];\n  });\n\n  //******************  Commands ******************//\n  public async executeCommand(commandName: string, data: any = null) {\n    const action = this.allActions().find((c) => {\n      const isSelectedScope = this.selectedItems().length\n        ? c.scope == AXPEntityCommandScope.Selected\n        : c.scope == AXPEntityCommandScope.Individual;\n      return c.name == commandName && (isSelectedScope || c.scope == AXPEntityCommandScope.TypeLevel);\n    });\n\n    if (!action) return;\n\n    const actionData = action.options?.process?.data;\n    const initialData = actionData ? { ...data, ...(await this.evaluateExpressions(actionData)) } : data;\n    const options = await this.evaluateExpressions(action?.options);\n    await this.workflow.execute(commandName.split('&')[0], {\n      entity: getEntityInfo(this.detailEntity()!).source,\n      data: action.scope == AXPEntityCommandScope.Selected ? this.selectedItems() : initialData,\n      entityInfo: {\n        name: this.detailEntity()?.name,\n        module: this.detailEntity()?.module,\n        title: this.detailEntity()?.title,\n        parentKey: this.detailEntity()?.parentKey,\n        source: `${this.detailEntity()?.module}.${this.detailEntity()?.name}`,\n      },\n      options,\n    });\n  }\n\n  public evaluateExpressions = async (actionData: { [key: string]: string } | string) => {\n    const parentData = this.parent.data;\n    const scope: AXPExpressionEvaluatorScope = {\n      context: {\n        eval: (path: string) => {\n          return get(parentData, path);\n        },\n      },\n    };\n\n    return await this.expressionEvaluator.evaluate(actionData, scope);\n  };\n\n  //#region ----   Evaluated Actions (Primary/Secondary)   ----\n\n  /**\n   * Evaluate hidden/disabled expressions for primary actions and return the visible list.\n   */\n  public async getPrimaryActions(): Promise<AXPEntityCommandTriggerViewModel[]> {\n    const scope: AXPExpressionEvaluatorScope = {};\n    const actions = await Promise.all(\n      this.allActions()\n        .filter(\n          (a) =>\n            a.priority == 'primary' &&\n            ((a.scope == AXPEntityCommandScope.Selected && this.hasSelectedItems()) ||\n              (a.scope == AXPEntityCommandScope.TypeLevel && !this.hasSelectedItems())),\n        )\n        .map(async (a) => {\n          if (!isEntityActionPermitted(a, (...keys) => this.session.authorize(...keys))) {\n            return null;\n          }\n          const isHidden = await this.evaluateExpressions(a.hidden as string);\n          if (isHidden) return null;\n          const disabled = await this.evaluateExpressions(a.disabled as string);\n          return { ...a, disabled } as AXPEntityCommandTriggerViewModel;\n        }),\n    );\n    return actions.filter(Boolean) as AXPEntityCommandTriggerViewModel[];\n  }\n\n  /**\n   * Evaluate hidden/disabled expressions for secondary actions and return the visible list.\n   */\n  public async getSecondaryActions(): Promise<AXPEntityCommandTriggerViewModel[]> {\n    const scope: AXPExpressionEvaluatorScope = {};\n    const actions = await Promise.all(\n      this.allActions()\n        .filter(\n          (a) =>\n            a.priority == 'secondary' &&\n            ((a.scope == AXPEntityCommandScope.Selected && this.hasSelectedItems()) ||\n              (a.scope == AXPEntityCommandScope.TypeLevel && !this.hasSelectedItems())),\n        )\n        .map(async (a) => {\n          if (!isEntityActionPermitted(a, (...keys) => this.session.authorize(...keys))) {\n            return null;\n          }\n          const isHidden = await this.evaluateExpressions(a.hidden as string);\n          if (isHidden) return null;\n          const disabled = await this.evaluateExpressions(a.disabled as string);\n          return { ...a, disabled } as AXPEntityCommandTriggerViewModel;\n        }),\n    );\n    return actions.filter(Boolean) as AXPEntityCommandTriggerViewModel[];\n  }\n\n  //#endregion\n}\n","import { Injectable, inject } from '@angular/core';\nimport { AXPDistributedEventListenerService } from '@acorex/platform/core';\n\n/**\n * Entity Event Dispatcher - A wrapper for entity-specific events\n * Handles pattern-based dispatching for entity operations with wildcard support\n */\n@Injectable({\n    providedIn: 'root',\n})\nexport class AXPEntityEventDispatcherService {\n    private readonly eventService = inject(AXPDistributedEventListenerService);\n\n    async dispatchEntityEvent(\n        operation: 'inserted' | 'updated' | 'deleted',\n        entityName: string,\n        data: any,\n    ): Promise<void> {\n        const enhancedData = {\n            ...data,\n            entityName,\n            operation,\n            timestamp: new Date(),\n            source: 'entity-dispatcher',\n        };\n\n        const eventKeysToDispatch = await this.getAllMatchingEventKeys(operation, entityName);\n        const dispatchPromises = eventKeysToDispatch.map((key) => this.eventService.dispatch(key, enhancedData));\n        await Promise.all(dispatchPromises);\n    }\n\n    private async getAllMatchingEventKeys(operation: string, entityName: string): Promise<string[]> {\n        const eventKeys = new Set<string>();\n        const exactKeys = this.generateEventKeys(operation, entityName);\n        exactKeys.forEach((key) => eventKeys.add(key));\n        const wildcardKeys = await this.findMatchingWildcardKeys(operation, entityName);\n        wildcardKeys.forEach((key) => eventKeys.add(key));\n        return Array.from(eventKeys);\n    }\n\n    private async findMatchingWildcardKeys(operation: string, entityName: string): Promise<string[]> {\n        const matchingKeys: string[] = [];\n        const allListenerKeys = await this.eventService.getRegisteredKeys();\n        const actualEventKey = `entity.${operation}.${entityName}`;\n        for (const listenerKey of allListenerKeys) {\n            if (listenerKey.includes('*') && this.matchesEntityPattern(actualEventKey, listenerKey)) {\n                matchingKeys.push(listenerKey);\n            }\n        }\n        return matchingKeys;\n    }\n\n    private matchesEntityPattern(eventKey: string, pattern: string): boolean {\n        if (!pattern.startsWith('entity.') || !pattern.includes('*')) {\n            return false;\n        }\n        const regexPattern = pattern.replace(/\\./g, '\\\\.').replace(/\\*/g, '.*');\n        const regex = new RegExp(`^${regexPattern}$`);\n        return regex.test(eventKey);\n    }\n\n    private generateEventKeys(operation: string, entityName: string): string[] {\n        const keys: string[] = [];\n        keys.push(`entity.${operation}`);\n        keys.push(`entity.${operation}.${entityName}`);\n        const entityParts = entityName.split('.');\n        if (entityParts.length > 1) {\n            const moduleName = entityParts[0];\n            keys.push(`entity.${operation}.${moduleName}`);\n        }\n        return keys;\n    }\n\n    async dispatchInserted(entityName: string, data: any): Promise<void> {\n        await this.dispatchEntityEvent('inserted', entityName, data);\n    }\n\n    async dispatchUpdated(entityName: string, data: any): Promise<void> {\n        await this.dispatchEntityEvent('updated', entityName, data);\n    }\n\n    async dispatchDeleted(entityName: string, data: any): Promise<void> {\n        await this.dispatchEntityEvent('deleted', entityName, data);\n    }\n}\n\n\n","import type { AXPEntityPropertyLayoutConfig } from '@acorex/platform/layout/entity-contracts';\n//#region ---- Imports ----\n\n//#endregion\n\n//#region ---- Master interface property sort order ----\n\n/**\n * Sort key for entries in `interfaces.master.{create|update|single}.properties`.\n * Uses `layout.order` when set and finite; otherwise the property index in that list.\n */\nexport function getMasterInterfacePropertySortKey(\n  interfaceRow: { layout?: AXPEntityPropertyLayoutConfig | undefined } | undefined,\n  indexInMasterInterfaceList: number,\n): number {\n  const layout = interfaceRow?.layout;\n  if (!layout) {\n    return indexInMasterInterfaceList;\n  }\n\n  const o = layout.order;\n  if (o !== undefined && o !== null) {\n    const n = Number(o);\n    if (Number.isFinite(n)) {\n      return n;\n    }\n  }\n\n  return indexInMasterInterfaceList;\n}\n\n//#endregion\n","export interface AXPEntityListExpandRowRef {\n  data: Record<string, unknown>;\n}\n\n/**\n * Resolves a stable row id from entity list row data.\n */\nexport function getEntityListRowId(data: Record<string, unknown>, key = 'id'): string {\n  const value = data[key];\n  if (value != null && value !== '') {\n    return String(value);\n  }\n  return '';\n}\n\n/**\n * Finds row data in a hierarchical grid tree (root rows and nested children).\n */\nexport function findEntityListRowDataInTree(\n  items: unknown[],\n  id: string,\n  key: string,\n): Record<string, unknown> | null {\n  for (const item of items) {\n    if (item && typeof item === 'object' && String((item as Record<string, unknown>)[key]) === id) {\n      return item as Record<string, unknown>;\n    }\n    const rec = item as Record<string, unknown>;\n    const metaChildren = (rec?.['__meta__'] as Record<string, unknown> | undefined)?.['children'];\n    const directChildren = rec?.['children'];\n    const childArr = Array.isArray(metaChildren)\n      ? (metaChildren as unknown[])\n      : Array.isArray(directChildren)\n        ? (directChildren as unknown[])\n        : null;\n    if (childArr?.length) {\n      const found = findEntityListRowDataInTree(childArr, id, key);\n      if (found) {\n        return found;\n      }\n    }\n  }\n  return null;\n}\n\n/**\n * Restores expanded rows after data load (parents before children).\n */\nexport async function restoreEntityListExpandedRows(options: {\n  expandedRowIds: string[];\n  rowKey: string;\n  getDisplayedRows: () => unknown[];\n  expandRow: (row: AXPEntityListExpandRowRef) => Promise<void>;\n}): Promise<void> {\n  const pending = [...new Set(options.expandedRowIds.filter(Boolean))];\n  if (!pending.length) {\n    return;\n  }\n\n  let safety = 0;\n  const maxPasses = Math.max(pending.length * 3, 10);\n\n  while (pending.length > 0 && safety++ < maxPasses) {\n    const rows = options.getDisplayedRows();\n    let progressed = false;\n\n    for (let i = pending.length - 1; i >= 0; i--) {\n      const id = pending[i];\n      const item = findEntityListRowDataInTree(rows, id, options.rowKey);\n      if (!item) {\n        continue;\n      }\n\n      const meta = item['__meta__'] as Record<string, unknown> | undefined;\n      if (meta?.['expanded'] !== true) {\n        await options.expandRow({ data: item });\n      }\n\n      pending.splice(i, 1);\n      progressed = true;\n    }\n\n    if (!progressed) {\n      break;\n    }\n  }\n}\n","/** How entity list UI state (columns, filters, paging, etc.) is persisted for the user. */\nexport type AXPEntityListPersistenceMode = 'none' | 'persistent' | 'route';\n\nexport const AXPEntityListPersistenceModeDefault: AXPEntityListPersistenceMode = 'persistent';\n\nexport function normalizeEntityListPersistenceMode(value: unknown): AXPEntityListPersistenceMode {\n  if (value === 'none' || value === 'persistent' || value === 'route') {\n    return value;\n  }\n  return AXPEntityListPersistenceModeDefault;\n}\n\nexport function canPersistEntityListState(mode: AXPEntityListPersistenceMode): boolean {\n  return mode !== 'none';\n}\n\n/** `none` never reads list state from user settings. */\nexport function shouldLoadEntityListStateFromStorage(mode: AXPEntityListPersistenceMode): boolean {\n  return mode !== 'none';\n}\n\n/** `route` clears stored list state when the route entity (module + name) changes. */\nexport function shouldResetEntityListStateOnRouteEntry(mode: AXPEntityListPersistenceMode): boolean {\n  return mode === 'route';\n}\n\nexport const ENTITY_LIST_ROUTE_CONTEXT_SESSION_KEY = 'axp-entity-list-route-context';\n","\nimport { AXPPageStatus } from '@acorex/platform/layout/widget-core-contracts';\nimport { AXPEntity, AXPEntityProperty, AXPEntityPropertyCreateView, AXPEntityPropertyLayoutConfig, AXPEntitySectionView, getEntityInfo } from '@acorex/platform/layout/entity-contracts';\nimport { AXPGridLayoutOptions, type AXPWidgetNode } from '@acorex/platform/contracts';\nimport { AXPExpressionEvaluatorScope, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { AXPWidgetCoreService } from '@acorex/platform/layout/widget-core';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { Injectable, Injector, computed, inject, signal } from '@angular/core';\nimport { cloneDeep, get, merge, set } from 'lodash-es';\nimport { getMasterInterfacePropertySortKey } from './entity-interface-property-order.util';\nimport { AXPEntityDefinitionRegistryService } from './entity-registery.service';\n\nexport class AXPEntityCreateViewSectionViewModel {\n  constructor(\n    private entity: AXPEntity,\n    private section: AXPEntitySectionView,\n  ) {}\n\n  group = this.entity.groups?.find((c) => c.id == this.section.id)!;\n  name = signal(this.group.id);\n\n  title = computed<string>(() => {\n    return this.group.title ?? this.group.id;\n  });\n\n  description = computed<string | null | undefined>(() => {\n    return this.group.description;\n  });\n\n  layout = computed<AXPGridLayoutOptions>(() => {\n    const source = cloneDeep(\n      this.section.layout ?? {\n        positions: {\n          lg: {\n            colSpan: 12,\n          },\n        },\n      },\n    ) as object;\n    set(source, 'positions.default.colSpan', 12);\n    return source as AXPGridLayoutOptions;\n  });\n\n  elements = computed(() => {\n    const { interfaces, properties } = this.entity;\n    const createProps = interfaces?.master?.create?.properties ?? [];\n    const propsByName = new Map(properties.map((p) => [p.name, p]));\n\n    const ordered = createProps\n      .map((cp, index) => ({ cp, index }))\n      .filter(({ cp }) => {\n        const p = propsByName.get(cp.name);\n        return p !== undefined && p.groupId === this.group.id;\n      })\n      .sort(\n        (a, b) => getMasterInterfacePropertySortKey(a.cp, a.index) - getMasterInterfacePropertySortKey(b.cp, b.index),\n      );\n\n    return ordered.map(({ cp }) => {\n      const property = propsByName.get(cp.name)!;\n      return new AXPEntityCreateViewElementViewModel(this.entity, this, property, cp);\n    });\n  });\n}\n\nexport class AXPEntityCreateViewElementViewModel {\n  constructor(\n    private entity: AXPEntity,\n    private section: AXPEntityCreateViewSectionViewModel,\n    private property: AXPEntityProperty,\n    private createProp: AXPEntityPropertyCreateView,\n  ) {}\n\n  name = signal(this.property.name);\n  title = signal(this.property.title);\n  description = signal(this.property.description);\n\n  editable = computed<boolean>(() => {\n    return !(this.property.schema.readonly ?? false);\n  });\n\n  isVisible = computed<boolean | string>(() => {\n    return this.property.schema.visible ?? true;\n  });\n\n  isRequired = computed<boolean>(() => {\n    return this.property.validations?.some((c) => c.rule == 'required') || false;\n  });\n\n  layout = computed<AXPEntityPropertyLayoutConfig>(() => {\n    const source = cloneDeep(this.createProp.layout ?? {}) as object;\n    set(source, 'positions.default.colSpan', 12);\n    return source as AXPEntityPropertyLayoutConfig;\n  });\n\n  node = computed<AXPWidgetNode>(() => {\n    const schema = this.property.schema!;\n    const widget = schema.interface!;\n    return {\n      type: widget.type,\n      mode: this.editable() ? 'edit' : 'view',\n      path: this.name(),\n      name: this.name(),\n      children: widget.children,\n      triggers: widget.triggers,\n      defaultValue: schema.defaultValue,\n      valueTransforms: widget.valueTransforms,\n      options: merge({}, schema.interface?.options, {\n        validations: this.property.validations?.map((c) => ({ rule: c.rule, message: c.message, options: c.options })),\n      }),\n    } as AXPWidgetNode;\n  });\n}\n\nexport class AXPEntityMasterCreateViewModel {\n  private entityDef = cloneDeep(this.config)!;\n\n  private workflow = this.injector.get(AXPWorkflowService);\n  private expressionEvaluator = this.injector.get(AXPExpressionEvaluatorService);\n\n  public builder: AXPWidgetCoreService;\n\n  constructor(\n    private readonly injector: Injector,\n    private readonly config: AXPEntity,\n    private readonly initialData: any = {},\n    private readonly commandOptions: any,\n  ) {\n    if (!initialData) initialData = {};\n\n    const scope: AXPExpressionEvaluatorScope = {\n      context: {\n        eval: (path: string) => {\n          return new Promise((resolve) => {\n            setTimeout(() => {\n              resolve(get(initialData, path));\n            });\n          });\n        },\n      },\n    };\n\n    this.context.set(initialData);\n    this.options.set(commandOptions);\n    //\n    const { redirect = true, canCreateNewOne = true } = commandOptions?.['process'] ?? {};\n    this.canCreateNewOne.set(canCreateNewOne);\n    this.redirect.set(redirect);\n  }\n\n  public context = signal<any>(this.initialData ?? {});\n  public options = signal<any>(this.commandOptions ?? {});\n\n  public isInProgress = signal<boolean>(false);\n  public canCreateNewOne = signal<boolean>(true);\n  public redirect = signal<boolean>(true);\n\n  public sections = computed<AXPEntityCreateViewSectionViewModel[]>(() => {\n    const { interfaces, properties } = this.entityDef;\n    const createProps = interfaces?.master?.create?.properties?.map(({ name }) => name) ?? [];\n\n    const visibleProperties = properties.filter(({ groupId, schema, name }) => groupId && createProps.includes(name));\n\n    const sections =\n      interfaces?.master?.create?.sections?.filter(({ id }) =>\n        visibleProperties.some(({ groupId }) => groupId === id),\n      ) ?? [];\n    return sections.map((section) => new AXPEntityCreateViewSectionViewModel(this.entityDef, section));\n  });\n\n  public async save(): Promise<any | void> {\n    try {\n      this.isInProgress.set(true);\n      this.builder.setStatus(AXPPageStatus.Submitting);\n      const exec = this.entityDef.commands?.create?.execute as Function;\n      const result = await exec(this.context());\n      this.context.update((c) => ({ ...c, ...result }));\n      return new Promise((resolve) => {\n        setTimeout(() => {\n          this.builder.setStatus(AXPPageStatus.Submitted);\n          resolve(result);\n        });\n      });\n    } catch (error: any) {\n      this.builder.setStatus(AXPPageStatus.Error);\n      return Promise.reject(error);\n    } finally {\n      this.isInProgress.set(false);\n    }\n  }\n\n  public async createNewOne() {\n    await this.workflow.execute('create-entity', {\n      entity: getEntityInfo(this.entityDef).source,\n      options: this.options(),\n      data: this.initialData,\n      // entityInfo\n    });\n  }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXPEntityCreateViewModelFactory {\n  private entityService = inject(AXPEntityDefinitionRegistryService);\n  private layout = inject(AXPLayoutThemeService);\n  private injector = inject(Injector);\n\n  public async create(\n    moduleName: string,\n    entityName: string,\n    initialData: any = null,\n    options: { canCreateNewOne: boolean; redirect: boolean } = { canCreateNewOne: true, redirect: true },\n  ): Promise<AXPEntityMasterCreateViewModel> {\n    this.layout.setNavigationLoading(true);\n    const config = await this.entityService.resolve(moduleName, entityName);\n    this.layout.setNavigationLoading(false);\n    return new AXPEntityMasterCreateViewModel(this.injector, config, initialData, options);\n  }\n}\n","import { AXPWidgetTypesMap } from '@acorex/platform/layout/widget-core-contracts';\nimport { AXPCardBadgeColor, AXPCardField, AXPEntity, AXPEntityCommandScope, AXPEntityDisplayField, AXPEntityEventsKeys, type AXPEntityListFilterDefinition, type AXPEntityListSortableField, AXPEntityMasterListDisplayMode, AXPEntityMasterListLayoutOption, AXPEntityMasterListLayoutType, AXPEntityProperty, AXPEntityTableColumn, AXPQueryView, collectEntityListFilterDefinitions, collectEntityListSortableFields, getEntityInfo, isEntityActionPermitted, parseDottedFieldPath, resolveDefaultMasterListLayout, resolveEnabledMasterListLayouts } from '@acorex/platform/layout/entity-contracts';\nimport { AXDataSource, AXDataSourceFilterOption, AXDataSourceSortOption, AXStyleColorType } from '@acorex/cdk/common';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport {\n  AXPCommonSettings,\n  AXPFilterOperatorMiddlewareService,\n  AXPNotFoundError,\n  AXPRefreshEvent,\n  AXPReloadEvent,\n  AXPSettingsService,\n  axpRedirectToNotFound,\n} from '@acorex/platform/common';\n\nimport { AXPBreadcrumbItem, AXPExecuteCommand, AXPExpression, AXPFilterQuery, AXPMultiLanguageString, AXPPlatformScope } from '@acorex/platform/contracts';\nimport {\n  AXPBroadcastEventService,\n  AXPContextEvalFactory,\n  AXPExpressionEvaluatorScope,\n  AXPExpressionEvaluatorService,\n} from '@acorex/platform/core';\n\nimport { AXPWidgetRegistryService } from '@acorex/platform/layout/widget-core';\nimport { AXPCommandService, AXPQueryExecutor } from '@acorex/platform/runtime';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { AXPWorkflowService, ofType } from '@acorex/platform/workflow';\nimport { moveItemInArray } from '@angular/cdk/drag-drop';\nimport { Injectable, Injector, computed, inject, signal } from '@angular/core';\nimport { ActivatedRouteSnapshot, ParamMap, RedirectCommand, ResolveFn, Router, RouterStateSnapshot } from '@angular/router';\nimport { cloneDeep, defaultTo, get, orderBy, set } from 'lodash-es';\nimport { Subject, takeUntil } from 'rxjs';\nimport { getEntityListRowId } from './entity-list-expanded-rows.util';\nimport {\n  applyDataSourcePagingWithoutLoad,\n  normalizeListPaging,\n  resetPagingForTreeChildrenLoad,\n  type AXPEntityListPagingState,\n} from './entity-list-paging.util';\nimport {\n  ENTITY_LIST_ROUTE_CONTEXT_SESSION_KEY,\n  canPersistEntityListState,\n  normalizeEntityListPersistenceMode,\n  shouldLoadEntityListStateFromStorage,\n  shouldResetEntityListStateOnRouteEntry,\n  type AXPEntityListPersistenceMode,\n} from './entity-list-persistence.util';\nimport { AXPEntityDefinitionRegistryService } from './entity-registery.service';\nimport {\n  AXPEntityCommandTriggerViewModel,\n  AXPEntityListViewCardFieldViewModel,\n  AXPEntityListViewColumnViewModel,\n} from './entity.viewmodel';\n\nexport interface AXPEntityMasterListViewSortPropViewModel {\n  name: string;\n  title: string;\n  dir?: string;\n}\n\n/** Built-in card list row action that toggles multi-select mode via {@link AXPEntityMasterListViewModel.selectedItems}. */\nexport const AXPEntityMasterListCardSelectActionName = 'axp-entity-card:select';\n\nexport interface AXPEntityMasterListCardSecondaryActionItem {\n  name: string;\n  title: string;\n  icon?: string;\n  color?: string;\n  disabled?: boolean | string;\n  divided?: boolean;\n  isCardSelect?: boolean;\n}\n\nexport class AXPEntityMasterListViewQueryViewModel {\n  constructor(\n    private entity: AXPEntity,\n    private section: AXPEntityMasterListViewModel,\n    private view: AXPQueryView,\n  ) {}\n\n  name = this.view.name;\n  title = this.view.title;\n  sorts = this.view.sorts;\n  columns = this.view.columns;\n  conditions = this.view.conditions;\n  indexCol = this.view.indexCol;\n  pageSize = this.view.pageSize;\n  visible = this.view.visible;\n}\n\nexport class AXPEntityMasterListViewModel {\n  readonly entityDef = cloneDeep(this.config)!;\n  private readonly _viewDef = cloneDeep(this.entityDef.interfaces?.master?.list)!;\n  private readonly formatService = this.injector.get(AXFormatService);\n  private readonly session = this.injector.get(AXPSessionService);\n  private readonly workflow = this.injector.get(AXPWorkflowService);\n  private readonly settings = this.injector.get(AXPSettingsService);\n  private readonly widgetResolver = this.injector.get(AXPWidgetRegistryService);\n  private readonly expressionEvaluator = this.injector.get(AXPExpressionEvaluatorService);\n  private readonly contextEvalFactory = this.injector.get(AXPContextEvalFactory);\n  private readonly translation = this.injector.get(AXTranslationService);\n  private readonly commandService = this.injector.get(AXPCommandService);\n  private readonly eventService = this.injector.get(AXPBroadcastEventService);\n  private readonly queryExecutor = this.injector.get(AXPQueryExecutor);\n\n  private readonly filterOperatorMiddleware = this.injector.get(AXPFilterOperatorMiddlewareService);\n  private readonly entityDefinitionRegistry = this.injector.get(AXPEntityDefinitionRegistryService);\n\n  private settingEntityKey = `${this.config.module}:${this.config.name}`;\n  private readonly destroyed = new Subject<void>();\n  private lastAppliedSortKey: string | null = null;\n  private lastAppliedFilterKey: string | null = null;\n  private hasQueryParamsFilters = false; // Flag to prevent overriding queryParams filters\n  private routeQueryContextKey: string | null = null;\n\n  /** Persisted expanded row ids for hierarchical lists (per view). */\n  private readonly expandedRowIds = signal<string[]>([]);\n\n  /** When true, row expand/collapse is not written to user settings (restore in progress). */\n  skipExpandedRowPersistence = false;\n\n  /** Resolved take/skip for the current view (null until loaded from settings). */\n  private readonly resolvedListPaging = signal<AXPEntityListPagingState | null>(null);\n\n  /** When true, pager changes are not persisted (programmatic UI sync). */\n  skipListPagingPersistence = false;\n\n  private listPersistenceMode: AXPEntityListPersistenceMode | null = null;\n\n  /** Serializes user-setting updates for this entity list to avoid lost merges (e.g. filters vs paging). */\n  private settingsUpdateChain: Promise<void> = Promise.resolve();\n\n  public events$: Subject<{ action: string; meta?: any }> = new Subject();\n\n  //****************** Views ******************//\n\n  private readonly allViews = computed(() => {\n    const views = this.entityDef.interfaces?.master?.list?.views ?? [];\n\n    return views.map((v) => {\n      return new AXPEntityMasterListViewQueryViewModel(this.entityDef, this, v);\n    });\n  });\n\n  private readonly visibleViews = signal<AXPEntityMasterListViewQueryViewModel[]>([]);\n\n  views = computed(() => {\n    const visible = this.visibleViews();\n    return visible.length > 0 ? visible : this.allViews();\n  });\n\n  view = signal<AXPEntityMasterListViewQueryViewModel>(this.allViews()[0]!);\n\n  private readonly showRowIndexColumnEnabled = signal<boolean>(false);\n\n  /**\n   * Row index column: if the list view defines `indexCol` (true/false), that overrides the user setting;\n   * if `indexCol` is omitted, visibility follows {@link AXPCommonSettings.ShowRowIndexColumn}.\n   */\n  showIndexColumn = computed(() => {\n    const indexCol = this.view().indexCol;\n    if (indexCol !== undefined) {\n      return indexCol;\n    }\n    return this.showRowIndexColumnEnabled();\n  });\n\n  //#region ---- List Layouts (table / card) ----\n\n  /** Layouts enabled via `interfaces.master.list.layouts.*.enabled`. */\n  enabledListLayouts = computed(() => resolveEnabledMasterListLayouts(this._viewDef?.layouts));\n\n  /** True when the user can switch between multiple enabled layouts. */\n  canSwitchListLayout = computed(() => this.enabledListLayouts().length > 1);\n\n  /** Active list layout for the current view. */\n  activeListLayout = signal<AXPEntityMasterListLayoutType>(resolveDefaultMasterListLayout(this._viewDef?.layouts));\n\n  tableLayout = computed(() => this._viewDef?.layouts?.table);\n\n  cardLayout = computed(() => this._viewDef?.layouts?.card);\n\n  /** Global expanded state for all card bodies in card layout. */\n  cardContentExpanded = signal(true);\n\n  /** Current presentation mode (table, compact cards, or expanded cards). */\n  listDisplayMode = computed((): AXPEntityMasterListDisplayMode => {\n    if (this.activeListLayout() === 'table') {\n      return 'table';\n    }\n    return this.cardContentExpanded() ? 'card-expanded' : 'card-compact';\n  });\n\n  /**\n   * Sets global card body visibility for card layout.\n   */\n  setCardContentExpanded(expanded: boolean): void {\n    if (this.activeListLayout() !== 'card' || this.cardContentExpanded() === expanded) {\n      return;\n    }\n    this.cardContentExpanded.set(expanded);\n    void this.saveSettings('cardContentExpanded', expanded);\n  }\n\n  /**\n   * Switches table vs compact/expanded card presentation.\n   */\n  setListDisplayMode(mode: AXPEntityMasterListDisplayMode): void {\n    if (mode === 'table') {\n      if (this.enabledListLayouts().includes('table')) {\n        this.setListLayout('table');\n      }\n      return;\n    }\n\n    if (!this.enabledListLayouts().includes('card')) {\n      return;\n    }\n\n    const expanded = mode === 'card-expanded';\n    if (this.activeListLayout() !== 'card') {\n      this.setListLayout('card');\n    }\n    if (this.cardContentExpanded() !== expanded) {\n      this.cardContentExpanded.set(expanded);\n      void this.saveSettings('cardContentExpanded', expanded);\n    }\n  }\n\n  /** Enabled layouts with display metadata for the title layout switcher. */\n  availableListLayouts = computed((): AXPEntityMasterListLayoutOption[] =>\n    this.enabledListLayouts().map((id) => ({\n      id,\n      title: AXPEntityMasterListViewModel.LAYOUT_META[id].title,\n      icon: AXPEntityMasterListViewModel.LAYOUT_META[id].icon,\n    })),\n  );\n\n  /** Active layout option (for title icon and switcher selection state). */\n  currentListLayout = computed(\n    () => this.availableListLayouts().find((layout) => layout.id === this.activeListLayout()) ?? null,\n  );\n\n  private static readonly LAYOUT_META: Record<AXPEntityMasterListLayoutType, { title: string; icon: string }> = {\n    table: { title: '@general:terms.interface.table-view', icon: 'fa-table' },\n    card: { title: '@general:terms.interface.card-view', icon: 'fa-grid-2' },\n  };\n\n  /**\n   * Switches to the given layout when it is enabled.\n   * Persists the choice at entity list level (shared across all views).\n   */\n  setListLayout(layout: AXPEntityMasterListLayoutType): void {\n    if (!this.enabledListLayouts().includes(layout) || this.activeListLayout() === layout) {\n      return;\n    }\n    this.activeListLayout.set(layout);\n    void this.saveSettings('listLayout', layout);\n  }\n\n  /**\n   * Cycles to the next enabled layout (table → card → table …).\n   * No-op when only one layout is enabled.\n   */\n  switchListLayout(): AXPEntityMasterListLayoutType {\n    const enabled = this.enabledListLayouts();\n    if (enabled.length <= 1) {\n      return this.activeListLayout();\n    }\n\n    const currentIndex = enabled.indexOf(this.activeListLayout());\n    const nextIndex = currentIndex < 0 ? 0 : (currentIndex + 1) % enabled.length;\n    const next = enabled[nextIndex];\n    this.setListLayout(next);\n    return next;\n  }\n\n  private resolveActiveListLayout(preferred?: AXPEntityMasterListLayoutType): void {\n    const enabled = this.enabledListLayouts();\n    const layout = preferred && enabled.includes(preferred) ? preferred : enabled[0];\n    this.activeListLayout.set(layout);\n  }\n\n  private applyListLayoutFromSettings(entitySetting: {\n    list?: { layout?: AXPEntityMasterListLayoutType; cardContentExpanded?: boolean };\n  }): void {\n    const savedLayout = entitySetting.list?.layout;\n    if (savedLayout) {\n      this.resolveActiveListLayout(savedLayout);\n    }\n    if (typeof entitySetting.list?.cardContentExpanded === 'boolean') {\n      this.cardContentExpanded.set(entitySetting.list.cardContentExpanded);\n    }\n  }\n\n  //#endregion\n\n  private createLogicExpressionScope(data: unknown): AXPExpressionEvaluatorScope {\n    return {\n      context: {\n        eval: (path: string) => get(data as any, path),\n      },\n      list: {\n        view: () => this.view().name,\n        views: () => this.views().map((v) => ({ name: v.name, title: v.title })),\n      },\n    };\n  }\n\n  private createDisplayExpressionScope(data: unknown): AXPExpressionEvaluatorScope {\n    return {\n      context: this.contextEvalFactory.createScope((data ?? {}) as Record<string, unknown>),\n      list: {\n        view: () => this.view().name,\n        views: () => this.views().map((v) => ({ name: v.name, title: v.title })),\n      },\n    };\n  }\n\n  /**\n   * Evaluates each view's `visible` expression and updates the filtered view list.\n   */\n  async refreshVisibleViews(): Promise<void> {\n    const scope = this.createLogicExpressionScope(null);\n    const evaluated = await Promise.all(\n      this.allViews().map(async (viewModel) => {\n        const visible = viewModel.visible;\n        if (visible === undefined || visible === null || visible === '') {\n          return viewModel;\n        }\n\n        if (typeof visible === 'boolean') {\n          return visible ? viewModel : null;\n        }\n\n        const isVisible = await this.expressionEvaluator.evaluate(visible, scope);\n        return isVisible !== false ? viewModel : null;\n      }),\n    );\n\n    this.visibleViews.set(evaluated.filter((viewModel): viewModel is AXPEntityMasterListViewQueryViewModel => viewModel != null));\n  }\n\n  private async resolveCommandNameExpression(commandName: string, data: unknown): Promise<string> {\n    if (!commandName || !commandName.includes('{{')) {\n      return commandName;\n    }\n\n    const scope = this.createLogicExpressionScope(data);\n    const result = await this.expressionEvaluator.evaluate({ value: commandName } as any, scope);\n    const resolved = (result as { value?: unknown } | null | undefined)?.value;\n    return typeof resolved === 'string' && resolved.trim() !== '' ? resolved : commandName;\n  }\n\n  private async resolveTitleExpression(title: string, data: unknown): Promise<string> {\n    if (!title || !title.includes('{{')) {\n      return title;\n    }\n\n    const scope = this.createDisplayExpressionScope(data);\n    const result = await this.expressionEvaluator.evaluate({ value: title } as any, scope);\n    const resolved = (result as { value?: unknown } | null | undefined)?.value;\n    return typeof resolved === 'string' && resolved.trim() !== '' ? resolved : title;\n  }\n\n  /**\n   * Resolves a card header value (title, description, icon) from a property path, expression, or literal.\n   * Supports multiple `{{ ... }}` segments in one string (e.g. `{{context.eval(\"a\")}} - {{context.eval(\"b\")}}`).\n   * Multi-language maps (e.g. `{ \"en-US\": \"...\", \"fa-IR\": \"...\" }`) are returned as-is for the translate pipe.\n   */\n  async resolveCardHeaderValue(value: string | undefined, rowData: unknown): Promise<AXPMultiLanguageString> {\n    if (!value) {\n      return '';\n    }\n\n    if (value.includes('{{')) {\n      const scope = this.createDisplayExpressionScope(rowData);\n      const result = await this.expressionEvaluator.evaluate(value, scope);\n      if (result === false) {\n        return '';\n      }\n      return this.normalizeCardHeaderDisplayValue(result);\n    }\n\n    const resolved = get(rowData as Record<string, unknown>, value);\n    return this.normalizeCardHeaderDisplayValue(resolved);\n  }\n\n  /**\n   * Keeps i18n payloads intact for `translate`; coerces only plain scalars to string.\n   */\n  private normalizeCardHeaderDisplayValue(value: unknown): AXPMultiLanguageString {\n    if (value == null || value === false) {\n      return '';\n    }\n    if (typeof value === 'string') {\n      return value;\n    }\n    if (typeof value === 'number' || typeof value === 'boolean') {\n      return String(value);\n    }\n    if (typeof value === 'object' && !Array.isArray(value) && this.translation.isValidMultiLanguageObject(value)) {\n      return value as AXPMultiLanguageString;\n    }\n    return '';\n  }\n\n  /**\n   * Resolves badge color for a card header field (semantic token or expression per row).\n   */\n  async resolveCardBadgeColor(field: AXPEntityListViewCardFieldViewModel, rowData: unknown): Promise<AXStyleColorType> {\n    return this.resolveCardBadgeColorValue(field.badgeColor, rowData);\n  }\n\n  private async resolveCardBadgeColorValue(\n    color: AXPCardBadgeColor | undefined,\n    rowData: unknown,\n  ): Promise<AXStyleColorType> {\n    if (color == null || color === '') {\n      return 'default';\n    }\n\n    const scope = this.createLogicExpressionScope(rowData);\n    const result = await this.expressionEvaluator.evaluate(color, scope);\n    if (result === false || result == null) {\n      return 'default';\n    }\n\n    const resolved = String(result).trim();\n    return resolved !== '' ? (resolved as AXStyleColorType) : 'default';\n  }\n\n  /**\n   * Resolves table row CSS classes from `layouts.table.cssClass.row` for the given row.\n   */\n  async resolveTableRowCssClass(rowData: unknown): Promise<string | undefined> {\n    return this.resolveTableCssClassValue(this.tableLayout()?.cssClass?.row, rowData);\n  }\n\n  /**\n   * Resolves table cell CSS classes from `layouts.table.cssClass.cell` for the given row and column.\n   */\n  async resolveTableCellCssClass(rowData: unknown, columnName: string): Promise<string | undefined> {\n    return this.resolveTableCssClassValue(this.tableLayout()?.cssClass?.cell, rowData, columnName);\n  }\n\n  private createTableCssClassExpressionScope(data: unknown, columnName?: string): AXPExpressionEvaluatorScope {\n    const scope = this.createLogicExpressionScope(data);\n\n    if (!columnName) {\n      return scope;\n    }\n\n    const columnContext: Record<string, unknown> = { name: columnName };\n\n    return {\n      ...scope,\n      table: {\n        getColumn: (field: string) => {\n          return get(columnContext, field);\n        },\n      },\n    };\n  }\n\n  private async resolveTableCssClassValue(\n    expression: AXPExpression | undefined,\n    rowData: unknown,\n    columnName?: string,\n  ): Promise<string | undefined> {\n    if (!expression) {\n      return undefined;\n    }\n\n    const scope = this.createTableCssClassExpressionScope(rowData, columnName);\n    const result = await this.expressionEvaluator.evaluate(expression, scope);\n    return this.normalizeTableCssClassValue(result);\n  }\n\n  private normalizeTableCssClassValue(value: unknown): string | undefined {\n    if (value === false || value == null) {\n      return undefined;\n    }\n\n    const resolved = String(value).trim();\n    return resolved !== '' ? resolved : undefined;\n  }\n\n  private async resolveTriggerName(triggerName: string, data: unknown): Promise<string> {\n    if (!triggerName) {\n      return triggerName;\n    }\n\n    const ampIndex = triggerName.indexOf('&');\n    if (ampIndex < 0) {\n      return await this.resolveCommandNameExpression(triggerName, data);\n    }\n\n    const commandPart = triggerName.slice(0, ampIndex);\n    const suffix = triggerName.slice(ampIndex); // includes '&'\n    const resolvedCommand = await this.resolveCommandNameExpression(commandPart, data);\n    return `${resolvedCommand}${suffix}`;\n  }\n\n  async setView(viewName: string | null = null) {\n    await this.refreshVisibleViews();\n\n    const availableViews = this.views();\n    if (!availableViews.length) {\n      return;\n    }\n\n    let selectedViewName: string | undefined;\n    if (await this.shouldLoadPersistedListState()) {\n      const entitySetting = await this.settings.get(this.settingEntityKey);\n      selectedViewName = entitySetting?.list?.currentView;\n    }\n\n    // URL `view` wins; fall back to persisted currentView when the query param is absent.\n    const resolvedViewName = viewName ?? selectedViewName;\n    const currentViewName = this.view().name;\n    const currentViewUnavailable = !availableViews.some((v) => v.name === currentViewName);\n    const nextView =\n      availableViews.find((c) => c.name == resolvedViewName) ??\n      (currentViewUnavailable ? availableViews[0] : this.view());\n\n    // Columns start empty; bootstrap them on first setView even when the view name is unchanged\n    // (e.g. URL already has ?view=all matching the default view).\n    const needsColumnBootstrap = this.columns().length === 0;\n    const shouldApplyViewState =\n      nextView.name !== currentViewName || currentViewUnavailable || needsColumnBootstrap;\n\n    if (shouldApplyViewState) {\n      this.view.set(nextView);\n      this.applyViewSorts();\n      await this.applyViewColumns();\n      this.applyCardFields();\n      this.applyViewFilters();\n      this.resolvedListPaging.set(null);\n      await this.applySettings();\n    }\n  }\n\n  dataSource = new AXDataSource({\n    byKey: async (key) => {\n      const execute = this.entityDef.queries?.byKey?.execute;\n      if (typeof execute === 'function') {\n        return await execute(key);\n      } else if (typeof execute === 'string') {\n        return await this.queryExecutor.fetch(execute, key);\n      }\n      return null;\n    },\n    load: async (e) => {\n      resetPagingForTreeChildrenLoad(e, this.entityDef.parentKey);\n      const execute = this.entityDef.queries?.list?.execute;\n      if (typeof execute === 'function') {\n        return await execute(e);\n      } else if (typeof execute === 'string') {\n        return await this.queryExecutor.fetch(execute, e);\n      }\n      return null;\n    },\n    pageSize: this.view().pageSize || 10,\n    key: 'id',\n  });\n\n  constructor(\n    private injector: Injector,\n    private config: AXPEntity,\n  ) {\n    this.workflow.events$\n      .pipe(ofType(AXPRefreshEvent, AXPReloadEvent))\n      .pipe(takeUntil(this.destroyed))\n      .subscribe((event) => {\n        if (event.payload.entity == getEntityInfo(this.entityDef).source) {\n          this.selectedItems.set([]);\n          this.events$.next({ action: 'refresh', meta: event.payload.meta });\n        }\n      });\n    this.eventService\n      .listen(AXPEntityEventsKeys.REFRESH_LAYOUT)\n      .pipe(takeUntil(this.destroyed))\n      .subscribe((e) => {\n        if ((e.data as any).name == getEntityInfo(this.entityDef).source) {\n          this.selectedItems.set([]);\n          this.events$.next({ action: 'refresh' });\n        }\n      });\n    this.sortedFields.set([]);\n\n    void this.syncShowRowIndexColumnSetting();\n    this.settings.onLoaded.pipe(takeUntil(this.destroyed)).subscribe(() => {\n      void this.syncShowRowIndexColumnSetting();\n    });\n    this.settings.onChanged.pipe(takeUntil(this.destroyed)).subscribe(() => {\n      void this.syncShowRowIndexColumnSetting();\n    });\n  }\n\n  private async syncShowRowIndexColumnSetting(): Promise<void> {\n    try {\n      const value = await this.settings.get<boolean>(AXPCommonSettings.ShowRowIndexColumn);\n      this.showRowIndexColumnEnabled.set(value ?? false);\n    } catch {\n      console.log('catch');\n      this.showRowIndexColumnEnabled.set(false);\n    }\n  }\n\n  /**\n   * Applies {@link AXPCommonSettings.EntityListPersistenceMode} for this list instance.\n   * Call once when the list view model is created (before loading list UI state).\n   */\n  async initializeListPersistence(): Promise<void> {\n    const mode = await this.getListPersistenceMode();\n    if (!shouldResetEntityListStateOnRouteEntry(mode)) {\n      return;\n    }\n\n    const routeKey = this.settingEntityKey;\n    let previousRouteKey: string | null = null;\n    try {\n      previousRouteKey = sessionStorage.getItem(ENTITY_LIST_ROUTE_CONTEXT_SESSION_KEY);\n    } catch {\n      previousRouteKey = null;\n    }\n    if (previousRouteKey !== routeKey) {\n      await this.clearEntityListSettings();\n      try {\n        sessionStorage.setItem(ENTITY_LIST_ROUTE_CONTEXT_SESSION_KEY, routeKey);\n      } catch {\n        // sessionStorage may be unavailable\n      }\n    }\n  }\n\n  async getListPersistenceMode(): Promise<AXPEntityListPersistenceMode> {\n    if (this.listPersistenceMode != null) {\n      return this.listPersistenceMode;\n    }\n    const value = await this.settings.get(AXPCommonSettings.EntityListPersistenceMode);\n    const resolved =\n      value != null && typeof value === 'object' && 'value' in value\n        ? (value as { value: unknown }).value\n        : value;\n    this.listPersistenceMode = normalizeEntityListPersistenceMode(resolved);\n    return this.listPersistenceMode;\n  }\n\n  async shouldLoadPersistedListState(): Promise<boolean> {\n    return shouldLoadEntityListStateFromStorage(await this.getListPersistenceMode());\n  }\n\n  async shouldPersistListState(): Promise<boolean> {\n    return canPersistEntityListState(await this.getListPersistenceMode());\n  }\n\n  private async clearEntityListSettings(): Promise<void> {\n    await this.settings.scope(AXPPlatformScope.User).update(this.settingEntityKey, (prev) => {\n      if (!prev || typeof prev !== 'object') {\n        return {};\n      }\n      const next = { ...(prev as Record<string, unknown>) };\n      delete next['list'];\n      return next;\n    });\n  }\n\n  public async applySettings() {\n    if (await this.shouldPersistListState()) {\n      this.saveSettings('view');\n    }\n\n    if (!(await this.shouldLoadPersistedListState())) {\n      const entitySetting = await this.settings.get(this.settingEntityKey);\n      if (entitySetting) {\n        this.applyListLayoutFromSettings(entitySetting);\n      }\n      this.loadListPagingFromViewSettings(null);\n      this.expandedRowIds.set([]);\n      return;\n    }\n\n    const listViewSetting = await this.settings.get(this.settingEntityKey);\n    if (listViewSetting) {\n      this.applyListLayoutFromSettings(listViewSetting);\n\n      const columns = listViewSetting.list?.views?.[this.view().name]?.columns;\n      const sorts = listViewSetting.list?.views?.[this.view().name]?.sorts as any[] | undefined;\n      const filters = listViewSetting.list?.views?.[this.view().name]?.filters as AXPFilterQuery[] | undefined;\n      let columnVisibilityMap: Map<string, any> | undefined;\n      let columnWidthsMap: Map<string, any> | undefined;\n      if (columns) {\n        columnVisibilityMap = new Map(columns.map((col: any) => [col.name, col.visible]));\n        columnWidthsMap = new Map(columns.map((col: any) => [col.name, col.width]));\n      }\n\n      this.loadListPagingFromViewSettings(listViewSetting);\n\n      if (columns && columnVisibilityMap && columnWidthsMap) {\n        this.columns.update((prev) => {\n          const next = [...prev].sort(\n            (a, b) =>\n              columns.findIndex((col: any) => col.name === (a.column?.options?.dataPath ?? a.name)) -\n              columns.findIndex((col: any) => col.name === (b.column?.options?.dataPath ?? b.name)),\n          );\n\n          for (const column of next) {\n            const columnKey = column.column?.options?.dataPath ?? column.name;\n            column.width = defaultTo(columnWidthsMap!.get(columnKey), column.column?.options?.width);\n            // Definition visibility (view.columns whitelist + options.visible) always wins for \"hide\".\n            // Persisted settings may only further hide an already-allowed column.\n            const definitionVisible = column.visible === true;\n            const persistedVisible = columnVisibilityMap!.get(columnKey);\n            column.visible =\n              definitionVisible && (persistedVisible === undefined ? true : persistedVisible !== false);\n          }\n\n          return next;\n        });\n      }\n\n      if (Array.isArray(sorts) && sorts.length) {\n        this.setActiveSortsFromQueries(sorts as Array<{ name: string; dir: 'asc' | 'desc' }>);\n      }\n\n      // Don't override filters if they came from queryParams\n      if (Array.isArray(filters) && !this.hasQueryParamsFilters) {\n        this.filterQueries.set(filters);\n      }\n\n      const expandedRowIds = listViewSetting.list?.views?.[this.view().name]?.expandedRowIds;\n      if (Array.isArray(expandedRowIds)) {\n        this.expandedRowIds.set(expandedRowIds.map((id) => String(id)).filter(Boolean));\n      } else {\n        this.expandedRowIds.set([]);\n      }\n    } else {\n      this.loadListPagingFromViewSettings(null);\n    }\n  }\n\n  async ensureListPagingResolved(): Promise<void> {\n    if (this.resolvedListPaging() != null) {\n      return;\n    }\n    if (!(await this.shouldLoadPersistedListState())) {\n      this.loadListPagingFromViewSettings(null);\n      return;\n    }\n    const entitySetting = await this.settings.get(this.settingEntityKey);\n    this.loadListPagingFromViewSettings(entitySetting);\n  }\n\n  getResolvedListPaging(): AXPEntityListPagingState {\n    return (\n      this.resolvedListPaging() ??\n      normalizeListPaging(undefined, this.view().pageSize || this.dataSource.config.pageSize || 10)\n    );\n  }\n\n  applyPagingToDataSourceWithoutLoad(): void {\n    applyDataSourcePagingWithoutLoad(this.dataSource, this.getResolvedListPaging());\n  }\n\n  saveListPaging(take: number, skip: number): void {\n    const paging = normalizeListPaging({ take, skip }, this.view().pageSize || 10);\n    this.resolvedListPaging.set(paging);\n    this.saveSettings('listPaging', paging);\n  }\n\n  resetListPagingSkip(): void {\n    const paging = normalizeListPaging(\n      { take: this.getResolvedListPaging().take, skip: 0 },\n      this.view().pageSize || 10,\n    );\n    this.resolvedListPaging.set(paging);\n    this.saveSettings('listPaging', paging);\n  }\n\n  private loadListPagingFromViewSettings(entitySetting: unknown): void {\n    const viewSettings = (entitySetting as { list?: { views?: Record<string, unknown> } })?.list?.views?.[\n      this.view().name\n    ] as { paging?: Partial<AXPEntityListPagingState>; pageSize?: number } | undefined;\n\n    const defaultTake = this.view().pageSize || 10;\n    let paging: Partial<AXPEntityListPagingState> | undefined = viewSettings?.paging;\n\n    if (!paging && typeof viewSettings?.pageSize === 'number') {\n      paging = { take: viewSettings.pageSize, skip: 0 };\n    }\n\n    this.resolvedListPaging.set(normalizeListPaging(paging, defaultTake));\n  }\n\n  getExpandedRowIds(): string[] {\n    return this.expandedRowIds();\n  }\n\n  /**\n   * Updates persisted expanded row ids when the user expands or collapses a tree row.\n   */\n  updateExpandedRowId(rowId: string, expanded: boolean): void {\n    if (!rowId || !this.parentKey()) {\n      return;\n    }\n\n    const next = new Set(this.expandedRowIds());\n    if (expanded) {\n      next.add(rowId);\n    } else {\n      next.delete(rowId);\n    }\n    const ids = Array.from(next);\n    this.expandedRowIds.set(ids);\n    this.saveSettings('expandedRows', ids);\n  }\n\n  handleRowExpandChange(rowData: Record<string, unknown>): void {\n    if (this.skipExpandedRowPersistence || !this.parentKey()) {\n      return;\n    }\n\n    const key = this.dataSource.config?.key ?? 'id';\n    const rowId = getEntityListRowId(rowData, key);\n    if (!rowId) {\n      return;\n    }\n\n    // onItemExpanded fires before the grid toggles __meta__.expanded on expandedItem.\n    const meta = rowData['__meta__'] as Record<string, unknown> | undefined;\n    const wasExpanded = meta?.['expanded'] === true;\n    this.updateExpandedRowId(rowId, !wasExpanded);\n  }\n\n  /**\n   * User-applied filters to persist (excludes hidden view conditions and empty values).\n   */\n  getPersistableFilterQueries(queries: AXPFilterQuery[] = this.filterQueries()): AXPFilterQuery[] {\n    return queries.filter((f) => {\n      if (f.hidden === true) {\n        return false;\n      }\n      if ((f as { readOnly?: boolean }).readOnly === true) {\n        return false;\n      }\n      const value = f.value;\n      if (value === undefined || value === null || value === '') {\n        return false;\n      }\n      if (Array.isArray(value) && value.length === 0) {\n        return false;\n      }\n      return true;\n    });\n  }\n\n  private enqueueSettingsUpdate(updateFn: (prev: any) => any): Promise<void> {\n    const run = () => this.settings.scope(AXPPlatformScope.User).update(this.settingEntityKey, updateFn);\n    const next = this.settingsUpdateChain.then(run);\n    this.settingsUpdateChain = next.catch(() => undefined);\n    return next;\n  }\n\n  public async saveSettings(\n    changesType:\n      | 'columnSizes'\n      | 'columnOrders'\n      | 'view'\n      | 'pageSize'\n      | 'listPaging'\n      | 'filters'\n      | 'sorts'\n      | 'expandedRows'\n      | 'listLayout'\n      | 'cardContentExpanded',\n    data?: unknown,\n  ) {\n    if (!(await this.shouldPersistListState())) {\n      return;\n    }\n\n    switch (changesType) {\n      case 'columnSizes': {\n        const columnSizeData = data as { dataField: string; width: number };\n        await this.enqueueSettingsUpdate((prev) => {\n          const field = columnSizeData.dataField.split('-')[1];\n          const newSettings = { ...prev };\n\n          const existingColumns = prev?.list?.views?.[this.view().name]?.columns as any[] | undefined;\n          const baseColumns =\n            Array.isArray(existingColumns) && existingColumns.length\n              ? existingColumns\n              : this.columns().map((c) => ({\n                  name: c.column?.options?.dataPath ?? c.name,\n                  visible: c.visible,\n                  width: c.width,\n                }));\n\n          const updatedColumns = baseColumns.map((c: any) => ({\n            ...c,\n            width: c.name === field ? columnSizeData.width : c.width,\n          }));\n\n          set(newSettings, `list.views.${this.view().name}.columns`, updatedColumns);\n          return newSettings;\n        });\n        break;\n      }\n      case 'columnOrders': {\n        const orderedColumns = data as AXPEntityListViewColumnViewModel[];\n        await this.enqueueSettingsUpdate((prev) => {\n          const newSettings = { ...prev };\n\n          set(\n            newSettings,\n            `list.views.${this.view().name}.columns`,\n            orderedColumns.map((c: any) => ({\n              name: c.column?.options?.dataPath ?? c.name,\n              visible: c.visible,\n              width: c.width,\n            })),\n          );\n\n          return newSettings;\n        });\n        break;\n      }\n      case 'view':\n        await this.enqueueSettingsUpdate((prev) => ({\n          ...prev,\n          list: {\n            ...prev?.list,\n            currentView: this.view().name,\n          },\n        }));\n        break;\n\n      case 'pageSize':\n        await this.enqueueSettingsUpdate((prev) => ({\n          ...prev,\n          list: {\n            ...prev?.list,\n            views: {\n              ...prev?.list?.views,\n              [this.view().name]: {\n                ...prev?.list?.views?.[this.view().name],\n                pageSize: data,\n                paging: normalizeListPaging(\n                  {\n                    take: data as number,\n                    skip: (prev?.list?.views?.[this.view().name]?.paging as AXPEntityListPagingState | undefined)?.skip,\n                  },\n                  this.view().pageSize || 10,\n                ),\n              },\n            },\n          },\n        }));\n        break;\n\n      case 'listPaging':\n        await this.enqueueSettingsUpdate((prev) => ({\n          ...prev,\n          list: {\n            ...prev?.list,\n            views: {\n              ...prev?.list?.views,\n              [this.view().name]: {\n                ...prev?.list?.views?.[this.view().name],\n                paging: data,\n                pageSize: (data as AXPEntityListPagingState).take,\n              },\n            },\n          },\n        }));\n        break;\n\n      case 'filters':\n        await this.enqueueSettingsUpdate((prev) => ({\n          ...prev,\n          list: {\n            ...prev?.list,\n            views: {\n              ...prev?.list?.views,\n              [this.view().name]: {\n                ...prev?.list?.views?.[this.view().name],\n                filters: data,\n              },\n            },\n          },\n        }));\n        break;\n\n      case 'sorts':\n        await this.enqueueSettingsUpdate((prev) => ({\n          ...prev,\n          list: {\n            ...prev?.list,\n            views: {\n              ...prev?.list?.views,\n              [this.view().name]: {\n                ...prev?.list?.views?.[this.view().name],\n                sorts: data,\n              },\n            },\n          },\n        }));\n        break;\n\n      case 'expandedRows':\n        await this.enqueueSettingsUpdate((prev) => ({\n          ...prev,\n          list: {\n            ...prev?.list,\n            views: {\n              ...prev?.list?.views,\n              [this.view().name]: {\n                ...prev?.list?.views?.[this.view().name],\n                expandedRowIds: data,\n              },\n            },\n          },\n        }));\n        break;\n\n      case 'listLayout':\n        await this.enqueueSettingsUpdate((prev) => ({\n          ...prev,\n          list: {\n            ...prev?.list,\n            layout: data,\n          },\n        }));\n        break;\n\n      case 'cardContentExpanded':\n        await this.enqueueSettingsUpdate((prev) => ({\n          ...prev,\n          list: {\n            ...prev?.list,\n            cardContentExpanded: data,\n          },\n        }));\n        break;\n\n      default:\n        break;\n    }\n  }\n\n  public selectedItems = signal<any[]>([]);\n\n  /**\n   * Selected category from the category sidebar (left panel).\n   * Used to set default category when creating new entities via command.\n   * Structure: { id: string; title: string } or null when \"All Items\" is selected.\n   */\n  public selectedCategory = signal<{ id: string; title: string } | null>(null);\n\n  public parentKey = computed(() => {\n    return this.entityDef.parentKey;\n  });\n\n  public hasSelectedItems = computed<boolean>(() => {\n    return this.selectedItems().length > 0;\n  });\n\n  public clearSelection(): void {\n    this.selectedItems.set([]);\n  }\n\n  /**\n   * Sets the selected category from the category sidebar.\n   * Call with null to clear (e.g. when \"All Items\" is selected).\n   */\n  public setSelectedCategory(category: { id: string; title: string } | null): void {\n    this.selectedCategory.set(category);\n  }\n\n  //****************** Title ******************//\n  public title = computed<string>(() => {\n    return this._viewDef.title ?? this.entityDef.formats.plural!;\n  });\n  //****************** Description ******************//\n  public description = computed<string | null>(() => {\n    return this._viewDef.description ?? null;\n  });\n\n  //****************** Inline filter ******************//\n  filterDefinitions = signal<AXPEntityListFilterDefinition[]>([]);\n\n  public inlineFiltersPlaceholders = computed<string[]>(() => {\n    return this.filterDefinitions()\n      .filter((f) => f.filterType.inline)\n      .map((c) => c.title ?? c.field!);\n  });\n\n  public hasInlineFilters = computed<boolean>(() => {\n    return this.inlineFiltersPlaceholders().length > 0;\n  });\n\n  /** Text for data-table cell highlighting (set only after filters are applied). */\n  inlineFilterHighlightText = signal('');\n\n  //****************** Beardcrumbs ******************//\n  public beardcrumbs = computed<AXPBreadcrumbItem[]>(() => {\n    return [\n      {\n        title: this.title(),\n      },\n    ];\n  });\n\n  //****************** Actions ******************//\n  private allActions = computed<AXPEntityCommandTriggerViewModel[]>(() => {\n    const list = this.entityDef.interfaces?.master?.list?.actions ?? [];\n    const actions = list.map((tr) => new AXPEntityCommandTriggerViewModel(this.entityDef, tr)) ?? [];\n    const orderedActions = orderBy(actions, 'order', 'asc');\n    return this.dedupeActionsByName(orderedActions);\n  });\n\n  /** Keeps the first action when list definitions repeat the same trigger name. */\n  private dedupeActionsByName(actions: AXPEntityCommandTriggerViewModel[]): AXPEntityCommandTriggerViewModel[] {\n    const seen = new Set<string>();\n    return actions.filter((action) => {\n      if (seen.has(action.name)) {\n        return false;\n      }\n      seen.add(action.name);\n      return true;\n    });\n  }\n\n  /** Flattened actions including children for execute lookup */\n  private flattenedActions = computed<AXPEntityCommandTriggerViewModel[]>(() => {\n    const flatten = (items: AXPEntityCommandTriggerViewModel[]): AXPEntityCommandTriggerViewModel[] => {\n      const result: AXPEntityCommandTriggerViewModel[] = [];\n      for (const a of items) {\n        result.push(a);\n        if (a.items?.length) {\n          result.push(...flatten(a.items));\n        }\n      }\n      return result;\n    };\n    return flatten(this.allActions());\n  });\n\n  public async getPrimaryActions(): Promise<AXPEntityCommandTriggerViewModel[]> {\n    const scope = this.createLogicExpressionScope(null);\n    const actions = await Promise.all(\n      this.allActions()\n        .filter(\n          (a) =>\n            a.priority == 'primary' &&\n            ((a.scope == AXPEntityCommandScope.Selected && this.hasSelectedItems()) ||\n              (a.scope == AXPEntityCommandScope.TypeLevel && !this.hasSelectedItems())),\n        )\n        .map(async (a) => {\n          if (!isEntityActionPermitted(a, (...keys) => this.session.authorize(...keys))) {\n            return null;\n          }\n          const isHidden = await this.expressionEvaluator.evaluate(a.hidden, scope);\n          if (isHidden) return null;\n          const disabled = await this.expressionEvaluator.evaluate(a.disabled, scope);\n          const name = await this.resolveTriggerName(a.name, null);\n          const title = await this.resolveTitleExpression(a.title, null);\n          const items = a.items?.filter((child) =>\n            isEntityActionPermitted(child, (...keys) => this.session.authorize(...keys)),\n          );\n          return { ...a, disabled, name, title, items };\n        }),\n    );\n    return actions.filter(Boolean) as AXPEntityCommandTriggerViewModel[];\n  }\n\n  public async getSecondaryActions(): Promise<AXPEntityCommandTriggerViewModel[]> {\n    const scope = this.createLogicExpressionScope(null);\n    const actions = await Promise.all(\n      this.allActions()\n        .filter(\n          (a) =>\n            a.priority == 'secondary' &&\n            ((a.scope == AXPEntityCommandScope.Selected && this.hasSelectedItems()) ||\n              (a.scope == AXPEntityCommandScope.TypeLevel && !this.hasSelectedItems())),\n        )\n        .map(async (a) => {\n          if (!isEntityActionPermitted(a, (...keys) => this.session.authorize(...keys))) {\n            return null;\n          }\n          const isHidden = await this.expressionEvaluator.evaluate(a.hidden, scope);\n          if (isHidden) return null;\n          const disabled = await this.expressionEvaluator.evaluate(a.disabled, scope);\n          const name = await this.resolveTriggerName(a.name, null);\n          const title = await this.resolveTitleExpression(a.title, null);\n          const items = a.items?.filter((child) =>\n            isEntityActionPermitted(child, (...keys) => this.session.authorize(...keys)),\n          );\n          return { ...a, disabled, name, title, items };\n        }),\n    );\n    return actions.filter(Boolean) as AXPEntityCommandTriggerViewModel[];\n  }\n\n  public selectedScopeActionsCount = computed<number>(() => {\n    return this.allActions().filter(\n      (a) =>\n        a.scope == AXPEntityCommandScope.Selected &&\n        isEntityActionPermitted(a, (...keys) => this.session.authorize(...keys)),\n    ).length;\n  });\n\n  public primaryRowActions = computed<AXPEntityCommandTriggerViewModel[]>(() =>\n    this.allActions().filter(\n      (a) =>\n        a.scope == AXPEntityCommandScope.Individual &&\n        a.priority === 'primary' &&\n        isEntityActionPermitted(a, (...keys) => this.session.authorize(...keys)),\n    ),\n  );\n\n  public async secondaryRowActions(rowData: any): Promise<AXPEntityCommandTriggerViewModel[]> {\n    const scope = this.createLogicExpressionScope(rowData);\n\n    const actions = await Promise.all(\n      this.allActions()\n        .filter((a) => a.scope === AXPEntityCommandScope.Individual && a.priority === 'secondary')\n        .map(async (a) => {\n          if (!isEntityActionPermitted(a, (...keys) => this.session.authorize(...keys))) {\n            return null;\n          }\n          const isHidden = await this.expressionEvaluator.evaluate(a.hidden, scope);\n          if (isHidden) return null;\n          const disabled = await this.expressionEvaluator.evaluate(a.disabled, scope);\n          const name = await this.resolveTriggerName(a.name, rowData);\n          const title = await this.resolveTitleExpression(a.title, rowData);\n          return { ...a, disabled, name, title };\n        }),\n    );\n\n    return actions.filter(Boolean) as AXPEntityCommandTriggerViewModel[];\n  }\n\n  /**\n   * Secondary actions for card layout rows, with the built-in Select action last (divider above it).\n   */\n  async cardSecondaryRowActions(rowData: unknown): Promise<AXPEntityMasterListCardSecondaryActionItem[]> {\n    const actions = await this.secondaryRowActions(rowData);\n    const items: AXPEntityMasterListCardSecondaryActionItem[] = actions\n      .filter((a) => a.name !== AXPEntityMasterListCardSelectActionName)\n      .map((a) => ({\n        name: a.name,\n        title: a.title,\n        icon: a.icon,\n        color: a.color,\n        disabled: a.disabled,\n        divided: a.separated,\n      }));\n\n    items.push({\n      name: AXPEntityMasterListCardSelectActionName,\n      title: '@general:actions.select.title',\n      icon: 'fa-square-check',\n      color: 'default',\n      disabled: false,\n      divided: items.length > 0,\n      isCardSelect: true,\n    });\n\n    return items;\n  }\n\n  //****************** Filter ******************//\n\n  filterQueries = signal<AXPFilterQuery[]>([]);\n\n  private static readonly URL_FILTER_OPERATOR_TYPES = new Set<string>([\n    'equal',\n    'isNull',\n    'isEmpty',\n    'lt',\n    'lte',\n    'gt',\n    'gte',\n    'startsWith',\n    'endsWith',\n    'contains',\n    'in',\n  ]);\n\n  get properties(): AXPEntityProperty[] {\n    return this.entityDef.properties;\n  }\n\n  /**\n   * Canonical JSON for the `filters` query param (sorted by field), or null when there are no active value filters.\n   */\n  filtersQueryParamCanonical(queries: AXPFilterQuery[]): string | null {\n    const items = this.toUrlFilterPayloadItems(queries);\n    return items.length ? JSON.stringify(items) : null;\n  }\n\n  /**\n   * Parse a `filters` query string to the same canonical form used by {@link filtersQueryParamCanonical}.\n   */\n  static parseQueryParamFiltersToCanonical(filtersJson: string | null): string | null {\n    if (!filtersJson) {\n      return null;\n    }\n    try {\n      const parsed: unknown = JSON.parse(filtersJson);\n      let rows: Array<{ field: string; value: unknown; operator?: unknown }> = [];\n      if (Array.isArray(parsed)) {\n        rows = parsed.filter(\n          (x): x is { field: string; value: unknown; operator?: unknown } =>\n            !!x && typeof x === 'object' && typeof (x as { field?: unknown }).field === 'string',\n        ) as Array<{ field: string; value: unknown; operator?: unknown }>;\n      } else if (parsed !== null && typeof parsed === 'object') {\n        rows = Object.entries(parsed as Record<string, unknown>)\n          .filter(([_, value]) => value !== undefined && value !== null && value !== '')\n          .map(([field, value]) => ({ field, value, operator: { type: 'equal' } }));\n      } else {\n        return null;\n      }\n      const items = rows\n        .filter((r) => r.field !== '' && r.value !== undefined && r.value !== null && r.value !== '')\n        .map((r) => ({\n          field: r.field,\n          operator: AXPEntityMasterListViewModel.coerceFilterOperatorFromUrl(r.operator),\n          value: r.value,\n        }))\n        .sort((a, b) => a.field.localeCompare(b.field));\n      return items.length ? JSON.stringify(items) : null;\n    } catch {\n      return null;\n    }\n  }\n\n  private toUrlFilterPayloadItems(\n    queries: AXPFilterQuery[],\n  ): Array<{ field: string; operator: { type: string }; value: unknown }> {\n    return queries\n      .filter(\n        (f) =>\n          typeof f.field === 'string' && f.field !== '' && f.value !== undefined && f.value !== null && f.value !== '',\n      )\n      .map((f) => ({\n        field: f.field as string,\n        operator: AXPEntityMasterListViewModel.coerceFilterOperatorFromUrl(f.operator),\n        value: f.value,\n      }))\n      .sort((a, b) => a.field.localeCompare(b.field));\n  }\n\n  private static coerceFilterOperatorFromUrl(op: unknown): { type: string } {\n    if (op && typeof op === 'object' && op !== null && 'type' in op) {\n      const t = String((op as { type: string }).type);\n      if (AXPEntityMasterListViewModel.URL_FILTER_OPERATOR_TYPES.has(t)) {\n        return { type: t };\n      }\n    }\n    return { type: 'equal' };\n  }\n\n  /**\n   * Apply filters from query params\n   */\n  applyFiltersFromQueryParams(filtersJson: string | null): boolean {\n    if (!filtersJson) {\n      return false;\n    }\n\n    try {\n      const parsed = JSON.parse(filtersJson);\n\n      // Handle both array and object formats\n      let filters: AXPFilterQuery[] = [];\n      if (Array.isArray(parsed)) {\n        // Already in array format\n        filters = parsed;\n      } else if (typeof parsed === 'object' && parsed !== null) {\n        // Convert object to array of filter queries\n        filters = Object.entries(parsed)\n          .filter(([_, value]) => value !== undefined && value !== null && value !== '')\n          .map(([field, value]) => ({\n            field,\n            operator: { type: 'equal' as const },\n            value,\n          }));\n      }\n\n      if (filters.length > 0) {\n        const convertedFilters: AXPFilterQuery[] = filters\n          .filter((f) => typeof f.field === 'string' && f.field !== '')\n          .map((f) => ({\n            field: f.field,\n            operator: AXPEntityMasterListViewModel.coerceFilterOperatorFromUrl(\n              f.operator,\n            ) as AXPFilterQuery['operator'],\n            value: f.value,\n            readOnly: true,\n          }));\n        this.filterQueries.set(convertedFilters);\n        this.hasQueryParamsFilters = true; // Mark that we have filters from queryParams\n        return true;\n      }\n    } catch (error) {\n      console.error('[AXPEntityMasterListViewModel] Failed to parse filters from query params:', error);\n    }\n\n    return false;\n  }\n\n  /**\n   * Records the current route query context after initial resolver / view init so the first\n   * subscription emission does not re-sync unnecessarily.\n   * Pass `overrides` when about to `replaceUrl` query params so the upcoming emission is treated as synced.\n   */\n  markRouteQueryContextSynced(\n    queryParamMap: ParamMap,\n    overrides?: Record<string, string | null | undefined>,\n  ): void {\n    this.routeQueryContextKey = this.buildRouteQueryContextKey(queryParamMap, overrides);\n  }\n\n  /**\n   * Reacts to any route query param change while the list route is reused (`reuse: queryParamsChange`).\n   * Handles known keys (`view`, `filters`) and re-evaluates view visibility for expression-driven params.\n   */\n  async syncFromRouteQueryParams(queryParamMap: ParamMap): Promise<{ reloadList: boolean }> {\n    const contextKey = this.buildRouteQueryContextKey(queryParamMap);\n    if (contextKey === this.routeQueryContextKey) {\n      return { reloadList: false };\n    }\n\n    this.routeQueryContextKey = contextKey;\n\n    const previousViewName = this.view().name;\n    await this.setView(queryParamMap.get('view'));\n\n    const filtersChanged = await this.syncFiltersFromRouteQueryParam(queryParamMap.get('filters'));\n    await this.refreshVisibleViews();\n\n    const viewChanged = this.view().name !== previousViewName;\n    if (filtersChanged || viewChanged) {\n      this.lastAppliedFilterKey = null;\n      this.lastAppliedSortKey = null;\n      // applyFilterAndSort already emits refresh — avoid a second reloadListData in the host.\n      await this.applyFilterAndSort();\n      return { reloadList: false };\n    }\n\n    // Other query-param context changes (e.g. expression-driven visibility) still need a list reload.\n    return { reloadList: true };\n  }\n\n  private buildRouteQueryContextKey(\n    queryParamMap: ParamMap,\n    overrides?: Record<string, string | null | undefined>,\n  ): string {\n    const params: Record<string, string> = {};\n    for (const key of queryParamMap.keys) {\n      params[key] = queryParamMap.get(key) ?? '';\n    }\n    if (overrides) {\n      for (const [key, value] of Object.entries(overrides)) {\n        if (value == null) {\n          delete params[key];\n        } else {\n          params[key] = value;\n        }\n      }\n    }\n    return Object.keys(params)\n      .sort()\n      .map((key) => `${key}=${params[key]}`)\n      .join('&');\n  }\n\n  private async syncFiltersFromRouteQueryParam(filtersJson: string | null): Promise<boolean> {\n    const nextCanonical = AXPEntityMasterListViewModel.parseQueryParamFiltersToCanonical(filtersJson);\n    const currentCanonical = this.filtersQueryParamCanonical(this.filterQueries());\n\n    if (nextCanonical === currentCanonical) {\n      return false;\n    }\n\n    if (!filtersJson) {\n      if (this.hasQueryParamsFilters) {\n        this.hasQueryParamsFilters = false;\n        await this.applyViewFilters();\n        return true;\n      }\n      return false;\n    }\n\n    return this.applyFiltersFromQueryParams(filtersJson);\n  }\n\n  /**\n   * Loads host and merge-detail related sortable field definitions (async registry resolution).\n   */\n  async loadSortableFields(): Promise<void> {\n    const fields = await collectEntityListSortableFields(this.entityDef, (moduleName, entityName) =>\n      this.entityDefinitionRegistry.resolve(moduleName, entityName).catch(() => null),\n    );\n    this.sortableFieldDefinitions.set(fields);\n  }\n\n  /**\n   * Loads host and merge-detail related filter definitions (async registry resolution).\n   */\n  async loadFilterDefinitions(): Promise<void> {\n    const definitions = await collectEntityListFilterDefinitions(\n      this.entityDef,\n      (moduleName, entityName) => this.entityDefinitionRegistry.resolve(moduleName, entityName).catch(() => null),\n      {\n        resolveWidget: (type) => this.widgetResolver.resolve(type),\n      },\n    );\n    this.filterDefinitions.set(definitions);\n  }\n\n  get filtersDef(): AXPEntityListFilterDefinition[] {\n    return this.filterDefinitions();\n  }\n\n  get preloadFiltersDef(): AXPEntityListFilterDefinition[] {\n    return this.filterDefinitions().filter((f) => f.filterType.preload?.enabled);\n  }\n\n  // const viewFilters = this.view().conditions.map((f) => ({\n  //   field: f.name,\n  //   operator: f.operator,\n  //   value: f.value,\n  // }));\n  async applyViewFilters() {\n    // Don't override filters if they came from queryParams\n    if (this.hasQueryParamsFilters) {\n      return;\n    }\n\n    const viewFilters = this.view().conditions.map((f) => ({\n      field: f.name,\n      operator: f.operator,\n      value: f.value,\n    }));\n    this.filterQueries.set(viewFilters as AXPFilterQuery[]);\n  }\n\n  resetFilters() {\n    this.hasQueryParamsFilters = false; // Reset flag when user resets filters\n    this.applyViewFilters();\n  }\n\n  async applyFilterAndSort() {\n    await this.ensureListPagingResolved();\n\n    const sorts = this.sortedFields()\n      .filter((sf) => sf.dir)\n      .map((s) => ({ name: s.name, dir: s.dir })) as { name: string; dir: string }[];\n    const filters = this.filterQueries();\n\n    const sortKey = JSON.stringify(sorts);\n    const transformedFilter = this.filterOperatorMiddleware.transformFilter({\n      field: null as any,\n      logic: 'and',\n      operator: null as any,\n      filters: filters as AXDataSourceFilterOption[],\n    });\n    const filterKey = JSON.stringify(transformedFilter);\n\n    if (sortKey === this.lastAppliedSortKey && filterKey === this.lastAppliedFilterKey) {\n      return; // No effective change; avoid redundant refresh\n    }\n\n    this.updateAppliedInlineFilterHighlightText(filters);\n\n    const filtersChanged = this.lastAppliedFilterKey != null && filterKey !== this.lastAppliedFilterKey;\n\n    this.lastAppliedSortKey = sortKey;\n    this.lastAppliedFilterKey = filterKey;\n\n    if (filtersChanged) {\n      this.resetListPagingSkip();\n    }\n\n    this.dataSource.clearFilter();\n    this.dataSource.sort(...sorts.map((s) => ({ dir: s.dir as any, field: s.name }) as AXDataSourceSortOption));\n\n    this.dataSource.filter(transformedFilter);\n    this.events$.next({ action: 'refresh', meta: { resetPagination: filtersChanged } });\n  }\n\n  private updateAppliedInlineFilterHighlightText(filters: AXPFilterQuery[]): void {\n    const allFilter = filters.find((f) => f.field === 'all');\n    const value = allFilter?.value;\n    this.inlineFilterHighlightText.set(typeof value === 'string' ? value.trim() : '');\n  }\n\n  //****************** Columns ******************//\n\n  private resolveMergeDetailProperty(columnName: string): AXPEntityProperty | null {\n    const parsed = parseDottedFieldPath(columnName);\n    if (!parsed) {\n      return null;\n    }\n\n    const { dataPath, propertyName } = parsed;\n    const related = this.entityDef.relatedEntities?.find(\n      (entry) => entry.layout?.type === 'merge-detail' && entry.persistence?.dataPath?.trim() === dataPath,\n    );\n    if (!related?.entity) {\n      return null;\n    }\n\n    const relatedDef = this.getRegisteredEntity(related.entity);\n    return relatedDef?.properties?.find((property) => property.name === propertyName) ?? null;\n  }\n\n  private allAvailableColumns = (): AXPEntityListViewColumnViewModel[] => {\n    const { columns = [], properties } = this.entityDef;\n    // const visibleProperties = properties.filter(({ schema }) => schema?.visible !== false);\n    const propNames = new Set(properties.map(({ name }) => name));\n    return columns\n      .filter(({ name, showAs, options }) => (propNames.has(name) || showAs) && options?.visible !== false)\n      .map((column) => {\n        const relatedProperty = this.resolveMergeDetailProperty(column.name);\n\n        if (column.showAs) {\n          const widgetConfig = this.widgetResolver.resolve(\n            column.showAs.type as AXPWidgetTypesMap[keyof AXPWidgetTypesMap],\n          );\n          const { title: _wcTitle, description: _wcDescription, ...widgetRest } = widgetConfig;\n          const property: AXPEntityProperty = {\n            ...widgetRest,\n            name: column.name,\n            title: column.title ?? relatedProperty?.title ?? '',\n            options: relatedProperty?.options,\n            schema: {\n              dataType: 'string',\n              interface: {\n                type: column.showAs.type,\n                options: column.showAs.options,\n              },\n            },\n          };\n          return new AXPEntityListViewColumnViewModel(property, column);\n        } else {\n          const property = properties.find(({ name }) => name === column.name);\n          return new AXPEntityListViewColumnViewModel(property!, column);\n        }\n      });\n  };\n\n  visibleColumnCount = () => {\n    return this.columns().filter((c) => c.visible == true).length;\n  };\n\n  columns = signal<AXPEntityListViewColumnViewModel[]>([]);\n\n  async resetColumns(): Promise<void> {\n    await this.applyViewColumns();\n  }\n\n  async onColumnsChanged(columns: AXPEntityListViewColumnViewModel[]) {\n    this.saveSettings('columnOrders', columns);\n  }\n\n  /**\n   * Builds list columns for the active view:\n   * - `view.columns` is a whitelist (empty = all columns)\n   * - string `options.visible` is evaluated against the master-list scope\n   */\n  async applyViewColumns(): Promise<void> {\n    const viewColumnNames = this.view().columns ?? [];\n    const scope = this.createLogicExpressionScope(null);\n    const cloned = await Promise.all(\n      this.allAvailableColumns().map(async (c) => {\n        const column = this.entityDef.columns?.find((cc) => cc.name == c.name);\n        const col = new AXPEntityListViewColumnViewModel(c.property, column!);\n        const expressionVisible = await this.resolveColumnVisibleExpression(col.visible, scope);\n        const includedInView =\n          viewColumnNames.length === 0 || viewColumnNames.some((name) => name === col.name);\n        col.visible = includedInView && expressionVisible;\n        return col;\n      }),\n    );\n\n    if (viewColumnNames.length > 0) {\n      cloned.sort((a, b) => {\n        const aIndex = viewColumnNames.indexOf(a.name);\n        const bIndex = viewColumnNames.indexOf(b.name);\n        const aOrder = aIndex === -1 ? Number.MAX_SAFE_INTEGER : aIndex;\n        const bOrder = bIndex === -1 ? Number.MAX_SAFE_INTEGER : bIndex;\n        return aOrder - bOrder;\n      });\n    }\n\n    this.columns.set(cloned);\n  }\n\n  /**\n   * Resolves column `options.visible` (boolean or expression) to a boolean for the current list scope.\n   */\n  private async resolveColumnVisibleExpression(\n    visible: boolean | string,\n    scope: AXPExpressionEvaluatorScope,\n  ): Promise<boolean> {\n    if (visible === false) {\n      return false;\n    }\n\n    if (visible === true || visible == null || visible === '') {\n      return true;\n    }\n\n    if (typeof visible === 'string') {\n      if (!visible.includes('{{')) {\n        const normalized = visible.trim().toLowerCase();\n        return normalized !== 'false' && normalized !== '0';\n      }\n\n      const result = await this.expressionEvaluator.evaluate(visible, scope);\n      return result !== false;\n    }\n\n    return Boolean(visible);\n  }\n\n  onColumnsOrderChanged(event: any) {\n    const columns = [...this.columns()];\n    moveItemInArray(columns, event.previousIndex - 1, event.currentIndex - 1);\n    this.columns.set(columns);\n    this.saveSettings('columnOrders', columns);\n  }\n\n  //****************** Card fields ******************//\n\n  private mergeDisplayFieldWithColumn<T extends AXPEntityDisplayField>(field: T, column?: AXPEntityTableColumn): T {\n    if (!column) {\n      return field;\n    }\n\n    return {\n      ...field,\n      title: field.title ?? column.title,\n      showAs: field.showAs ?? column.showAs,\n      options: { ...column.options, ...field.options },\n    };\n  }\n\n  private buildVirtualDisplayProperty(\n    name: string,\n    title: string | undefined,\n    showAs: NonNullable<AXPEntityDisplayField['showAs']>,\n  ): AXPEntityProperty {\n    const widgetConfig = this.widgetResolver.resolve(showAs.type as AXPWidgetTypesMap[keyof AXPWidgetTypesMap]);\n    const { title: _wcTitle, description: _wcDescription, ...widgetRest } = widgetConfig;\n\n    return {\n      ...widgetRest,\n      name,\n      title: title ?? '',\n      schema: {\n        dataType: 'string',\n        interface: {\n          type: showAs.type,\n          options: showAs.options,\n        },\n      },\n    };\n  }\n\n  private normalizeRelatedColumnNames(columns?: string[] | AXPEntityTableColumn[]): string[] {\n    if (!columns?.length) {\n      return [];\n    }\n\n    return columns.map((column) => (typeof column === 'string' ? column : column.name));\n  }\n\n  private findRelatedEntityForField(fieldName: string): { entity: string } | null {\n    for (const related of this.entityDef.relatedEntities ?? []) {\n      const columnNames = this.normalizeRelatedColumnNames(related.columns);\n      if (columnNames.includes(fieldName)) {\n        return { entity: related.entity };\n      }\n    }\n\n    return null;\n  }\n\n  private getRegisteredEntity(fullName: string): AXPEntity | undefined {\n    return this.entityDefinitionRegistry\n      .getAll()\n      .find((entity: AXPEntity) => `${entity.module}.${entity.name}` === fullName);\n  }\n\n  private resolveRelatedEntityProperty(fieldName: string): AXPEntityProperty | null {\n    const relatedRef = this.findRelatedEntityForField(fieldName);\n    if (!relatedRef) {\n      return null;\n    }\n\n    const relatedDef = this.getRegisteredEntity(relatedRef.entity);\n    return relatedDef?.properties?.find((property) => property.name === fieldName) ?? null;\n  }\n\n  private resolveRelatedEntityColumnDataPath(relatedEntityKey: string, fieldName: string): string | undefined {\n    const relatedDef = this.getRegisteredEntity(relatedEntityKey);\n    const column = relatedDef?.columns?.find(({ name }) => name === fieldName);\n    return column?.options?.dataPath;\n  }\n\n  private deriveDataPathFromLookupProperty(property: AXPEntityProperty): string | undefined {\n    const iface = property.schema?.interface;\n    if (iface?.type !== 'lookup-editor') {\n      return undefined;\n    }\n\n    const textField = (iface.options?.['textField'] as string | undefined) ?? 'title';\n    const expose = iface.options?.['expose'] as Array<{ source: string; target: string }> | undefined;\n    return expose?.find((entry) => entry.source === textField)?.target;\n  }\n\n  private resolveParentDataPathForRelatedField(\n    fieldName: string,\n    relatedEntityKey: string,\n    relatedProperty: AXPEntityProperty,\n  ): string | undefined {\n    const parentColumn = this.entityDef.columns?.find(({ name }) => name === fieldName);\n    if (parentColumn?.options?.dataPath) {\n      return parentColumn.options.dataPath;\n    }\n\n    const relatedDataPath =\n      this.resolveRelatedEntityColumnDataPath(relatedEntityKey, fieldName) ??\n      this.deriveDataPathFromLookupProperty(relatedProperty);\n\n    if (!relatedDataPath) {\n      return undefined;\n    }\n\n    const relatedLeaf = relatedDataPath.split('.').pop();\n    for (const property of this.entityDef.properties ?? []) {\n      const expose = property.schema?.interface?.options?.['expose'] as\n        | Array<{ source: string; target: string }>\n        | undefined;\n      if (!expose) {\n        continue;\n      }\n\n      const match = expose.find(\n        (entry) =>\n          entry.target === relatedDataPath ||\n          entry.target.endsWith(`.${relatedDataPath}`) ||\n          (relatedLeaf != null && entry.source === relatedLeaf),\n      );\n      if (match) {\n        return match.target;\n      }\n    }\n\n    return relatedDataPath;\n  }\n\n  private resolveDisplayFieldProperty(\n    field: AXPEntityDisplayField,\n    column?: AXPEntityTableColumn,\n  ): AXPEntityProperty | null {\n    const showAs = field.showAs ?? column?.showAs;\n    if (showAs) {\n      return this.buildVirtualDisplayProperty(field.name, field.title ?? column?.title, showAs);\n    }\n\n    const property = this.entityDef.properties.find(({ name }) => name === field.name);\n    if (property) {\n      return property;\n    }\n\n    return this.resolveRelatedEntityProperty(field.name);\n  }\n\n  private resolveCardField(field: AXPCardField): AXPEntityListViewCardFieldViewModel | null {\n    const column = this.entityDef.columns?.find(({ name }) => name === field.name);\n    const mergedField = this.mergeDisplayFieldWithColumn(field, column);\n\n    if (field.options?.visible === false) {\n      return null;\n    }\n\n    const property = this.resolveDisplayFieldProperty(mergedField, column);\n    if (!property) {\n      return null;\n    }\n\n    const isOwnProperty = this.entityDef.properties.some(({ name }) => name === field.name);\n    let resolvedField = mergedField;\n    if (!isOwnProperty && !resolvedField.options?.dataPath) {\n      const relatedRef = this.findRelatedEntityForField(field.name);\n      if (relatedRef) {\n        const dataPath = this.resolveParentDataPathForRelatedField(field.name, relatedRef.entity, property);\n        if (dataPath) {\n          resolvedField = {\n            ...resolvedField,\n            options: { ...resolvedField.options, dataPath },\n          };\n        }\n      }\n    }\n\n    return new AXPEntityListViewCardFieldViewModel(property, resolvedField);\n  }\n\n  private allAvailableCardFields = (): AXPEntityListViewCardFieldViewModel[] => {\n    const fields = this.cardLayout()?.fields ?? [];\n\n    return fields\n      .map((field) => this.resolveCardField(field))\n      .filter((field): field is AXPEntityListViewCardFieldViewModel => field != null);\n  };\n\n  cardFields = signal<AXPEntityListViewCardFieldViewModel[]>([]);\n\n  applyCardFields(): void {\n    this.cardFields.set(this.allAvailableCardFields());\n  }\n\n  //****************** Sort ******************//\n\n  sortableFieldDefinitions = signal<AXPEntityListSortableField[]>([]);\n\n  sortableFields = () => {\n    return this.sortableFieldDefinitions().map((field) => ({\n      name: field.name,\n      title: field.title,\n      dir: undefined,\n    }));\n  };\n\n  sortableFieldsCount = () => {\n    return this.sortableFieldDefinitions().length;\n  };\n\n  canSort = () => {\n    return this.sortableFieldsCount() > 0;\n  };\n\n  canAddMoreSort = () => {\n    return this.sortedCount() < this.sortableFieldsCount();\n  };\n\n  sortedCount = () => {\n    return this.sortedFields().filter((i) => i.dir).length;\n  };\n\n  sortedFields = signal<AXPEntityMasterListViewSortPropViewModel[]>([]);\n\n  resetSorts() {\n    this.applyViewSorts();\n  }\n\n  /**\n   * Applies active sorts in the given order (click order, saved settings, or view defaults).\n   */\n  private setActiveSortsFromQueries(sorts: Array<{ name: string; dir: 'asc' | 'desc' }>): void {\n    const sortableByName = new Map(this.sortableFields().map((f) => [f.name, f]));\n\n    this.sortedFields.set(\n      sorts\n        .filter((s) => s.dir && sortableByName.has(s.name))\n        .map((s) => ({\n          name: s.name,\n          title: sortableByName.get(s.name)!.title,\n          dir: s.dir,\n        })),\n    );\n  }\n\n  applyViewSorts() {\n    const viewSorts = this.view().sorts ?? [];\n    this.setActiveSortsFromQueries(viewSorts);\n  }\n\n  /**\n   * Active sort direction for a column (synced with toolbar sort UI and dataSource).\n   */\n  getColumnSortDirection(columnName: string): 'asc' | 'desc' | undefined {\n    const dir = this.sortedFields().find((sf) => sf.name === columnName)?.dir;\n    return dir === 'asc' || dir === 'desc' ? dir : undefined;\n  }\n\n  /**\n   * 1-based priority index when multiple columns are sorted (Ctrl+click order).\n   */\n  getColumnSortIndex(columnName: string): number | undefined {\n    const index = this.sortedFields().findIndex((sf) => sf.name === columnName);\n    return index >= 0 ? index + 1 : undefined;\n  }\n\n  /** True when active sorts still match the current view defaults (not yet customized). */\n  private isViewDefaultSorts(activeSorts: AXPEntityMasterListViewSortPropViewModel[]): boolean {\n    const viewSorts = this.view().sorts ?? [];\n    if (activeSorts.length !== viewSorts.length) {\n      return false;\n    }\n    return activeSorts.every((s, i) => s.name === viewSorts[i]?.name && s.dir === viewSorts[i]?.dir);\n  }\n\n  /**\n   * Toggles column sort (asc → desc → none). Without Ctrl, only one column is active.\n   * With Ctrl/Cmd, multiple columns are sorted in click order (first clicked = primary).\n   */\n  async toggleColumnSort(columnName: string, multiSort: boolean): Promise<void> {\n    const fieldMeta = this.sortableFields().find((f) => f.name === columnName);\n    if (!fieldMeta) {\n      return;\n    }\n\n    let activeSorts = [...this.sortedFields()];\n    const index = activeSorts.findIndex((sf) => sf.name === columnName);\n    const currentDir = index >= 0 ? activeSorts[index].dir : undefined;\n    const newDir: 'asc' | 'desc' | undefined =\n      currentDir === 'asc' ? 'desc' : currentDir === 'desc' ? undefined : 'asc';\n\n    if (!multiSort) {\n      activeSorts = newDir ? [{ name: columnName, title: fieldMeta.title, dir: newDir }] : [];\n    } else if (index >= 0) {\n      const [item] = activeSorts.splice(index, 1);\n      if (newDir) {\n        // Re-click moves column to end so click order can override view/default order.\n        activeSorts.push({ ...item, title: fieldMeta.title, dir: newDir });\n      }\n    } else if (newDir) {\n      if (this.isViewDefaultSorts(activeSorts)) {\n        activeSorts = [{ name: columnName, title: fieldMeta.title, dir: newDir }];\n      } else {\n        activeSorts.push({ name: columnName, title: fieldMeta.title, dir: newDir });\n      }\n    }\n\n    this.sortedFields.set(activeSorts);\n    this.lastAppliedSortKey = null;\n    await this.saveSettings(\n      'sorts',\n      activeSorts.map((s) => ({ name: s.name, dir: s.dir })),\n    );\n    await this.applyFilterAndSort();\n  }\n\n  //******************  Commands ******************//\n  public async executeCommand(commandName: string, data: any = null) {\n    const action = this.flattenedActions().find((c) => {\n      return (\n        c.name == commandName &&\n        ((this.selectedItems().length && !data // added by Arash\n          ? c.scope == AXPEntityCommandScope.Selected\n          : c.scope == AXPEntityCommandScope.Individual) ||\n          c.scope == AXPEntityCommandScope.TypeLevel)\n      );\n    });\n    const resolvedTriggerName = await this.resolveTriggerName(commandName, data);\n    const command = resolvedTriggerName.split('&')[0];\n    const options = await this.evaluateExpressions(action?.options, data);\n\n    const baseData = action?.scope == AXPEntityCommandScope.Selected ? this.selectedItems() : data;\n    let commandData = this.mergeViewConditionsForCreate(command, baseData);\n    commandData = this.mergeDefaultCategoryForCreate(command, commandData);\n\n    if (this.workflow.exists(command)) {\n      await this.workflow.execute(command, {\n        entity: getEntityInfo(this.entityDef).source,\n        entityInfo: {\n          name: this.entityDef.name,\n          module: this.entityDef.module,\n          title: this.entityDef.title,\n          parentKey: this.entityDef.parentKey,\n          source: `${this.entityDef.module}.${this.entityDef.name}`,\n        },\n        data: commandData,\n        options: options,\n        metadata: action?.metadata,\n      });\n    } else {\n      const commandOptions = {\n        __context__: {\n          data: commandData,\n          entity: getEntityInfo(this.entityDef).source,\n          entityInfo: {\n            name: this.entityDef.name,\n            module: this.entityDef.module,\n            title: this.entityDef.title,\n            parentKey: this.entityDef.parentKey,\n          },\n          options,\n        },\n        __metadata__: action?.metadata,\n      };\n\n      this.commandService.execute(command, commandOptions);\n      // this.commandService.execute(command, {\n      //   entity: getEntityInfo(this.entityDef).source,\n      //   entityInfo: {\n      //     name: this.entityDef.name,\n      //     module: this.entityDef.module,\n      //     title: this.entityDef.title,\n      //     parentKey: this.entityDef.parentKey,\n      //     source: `${this.entityDef.module}.${this.entityDef.name}`,\n      //   },\n      //   data: action?.scope == AXPEntityCommandScope.Selected ? this.selectedItems() : data,\n      //   options: options,\n      //   metadata: action?.metadata,\n      // });\n    }\n  }\n\n  /**\n   * Merges default category from selected category in sidebar when executing create command.\n   * For Entity:Create and create-entity, if entity has category plugin and a category is selected,\n   * pre-fills categoryIds and categories for the create form.\n   */\n  private mergeDefaultCategoryForCreate(command: string, baseData: any): any {\n    const isCreateCommand = command === 'Entity:Create' || command === 'create-entity';\n    if (!isCreateCommand) {\n      return baseData;\n    }\n\n    const categoryExt = (this.entityDef as any).extensions?.category;\n    if (!categoryExt) {\n      return baseData;\n    }\n\n    const selectedCat = this.selectedCategory();\n    if (!selectedCat) {\n      return baseData;\n    }\n\n    const propName = categoryExt.propertyName || 'categoryIds';\n    const valueField = categoryExt.valueField ?? 'id';\n    const textField = categoryExt.textField ?? 'title';\n    const idVal = (selectedCat as any)[valueField] ?? selectedCat.id;\n    const titleVal = (selectedCat as any)[textField] ?? selectedCat.title;\n    const defaultCategoryData = {\n      [propName]: [idVal],\n      categories: [{ [valueField]: idVal, [textField]: titleVal }],\n    };\n\n    if (baseData == null || (Array.isArray(baseData) && baseData.length === 0)) {\n      return defaultCategoryData;\n    }\n    if (typeof baseData === 'object' && !Array.isArray(baseData)) {\n      return { ...baseData, ...defaultCategoryData };\n    }\n    return baseData;\n  }\n\n  //#region ----   Create command defaults from list view   ----\n\n  /**\n   * Seeds create payloads with fixed list-view conditions (e.g. scope=T on the tenant dashboards view)\n   * so new rows match the view context and downstream queries (such as home dashboard) can find them.\n   */\n  private mergeViewConditionsForCreate(command: string, baseData: any): any {\n    const isCreateCommand = command === 'Entity:Create' || command === 'create-entity';\n    if (!isCreateCommand) {\n      return baseData;\n    }\n\n    const conditions = this.view()?.conditions ?? [];\n    if (conditions.length === 0) {\n      return baseData;\n    }\n\n    const seed: Record<string, unknown> = {};\n    for (const c of conditions) {\n      if (!c?.name || c.operator?.type !== 'equal' || c.value === undefined) {\n        continue;\n      }\n      seed[c.name] = c.value;\n    }\n\n    if (Object.keys(seed).length === 0) {\n      return baseData;\n    }\n\n    if (baseData == null) {\n      return seed;\n    }\n    if (typeof baseData === 'object' && !Array.isArray(baseData)) {\n      return { ...seed, ...baseData };\n    }\n    return baseData;\n  }\n\n  //#endregion\n\n  private evaluateExpressions = async (options: { [key: string]: string }, data: any) => {\n    const scope = this.createLogicExpressionScope(data);\n    return await this.expressionEvaluator.evaluate(options, scope);\n  };\n\n  async execute(command: AXPExecuteCommand): Promise<void> {\n    switch (command?.name) {\n      case 'navigate':\n        await this.workflow.execute('navigate', {\n          options: {\n            path: command.options?.['path'],\n          },\n        });\n        break;\n      default:\n        this.executeCommand(command.name);\n        break;\n    }\n  }\n\n  //\n  destroy() {\n    this.destroyed.next();\n    this.destroyed.complete();\n  }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXPEntityListViewModelFactory {\n  private entityService = inject(AXPEntityDefinitionRegistryService);\n  private layout = inject(AXPLayoutThemeService);\n  private injector = inject(Injector);\n\n  public async create(moduleName: string, entityName: string): Promise<AXPEntityMasterListViewModel> {\n    this.layout.setNavigationLoading(true);\n    const config = await this.entityService.resolve(moduleName, entityName);\n    this.layout.setNavigationLoading(false);\n    const vm = new AXPEntityMasterListViewModel(this.injector, config);\n    await vm.loadFilterDefinitions();\n    await vm.loadSortableFields();\n    await vm.initializeListPersistence();\n    await vm.refreshVisibleViews();\n    return vm;\n  }\n}\n\nexport const AXPEntityListViewModelResolver: ResolveFn<\n  Promise<AXPEntityMasterListViewModel | RedirectCommand>\n> = async (\n  route: ActivatedRouteSnapshot,\n  state: RouterStateSnapshot,\n  service: AXPEntityListViewModelFactory = inject(AXPEntityListViewModelFactory),\n  router: Router = inject(Router),\n): Promise<AXPEntityMasterListViewModel | RedirectCommand> => {\n  const moduleName = route.parent?.paramMap.get('module') as string;\n  const entityName = route.paramMap.get('entity') as string;\n\n  try {\n    const vm = await service.create(moduleName, entityName);\n\n    // URL `filters` (preload / deep link) always win over persisted list filters when present.\n    const filtersParam = route.queryParamMap.get('filters');\n    if (filtersParam) {\n      const applied = vm.applyFiltersFromQueryParams(filtersParam);\n      if (applied) {\n        await vm.applyFilterAndSort();\n      }\n    }\n\n    return vm;\n  } catch (error) {\n    if (error instanceof AXPNotFoundError) {\n      return axpRedirectToNotFound(router);\n    }\n\n    throw error;\n  }\n};\n","import { AXPEntity } from '@acorex/platform/layout/entity-contracts';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXLoadingDialogService } from '@acorex/components/loading-dialog';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPCommonSettings, AXP_ENTITY_DELETED_WORKFLOW_EVENT_TYPE, AXPRefreshEvent, AXPSettingsService } from '@acorex/platform/common';\nimport { AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext, createWorkFlowEvent } from '@acorex/platform/workflow';\nimport { Injectable, inject } from '@angular/core';\nimport { AXPEntityDefinitionRegistryService } from '../entity-registery.service';\n\nexport const AXPEntityDeletedEvent = createWorkFlowEvent<{ entity: string; ids: string[]; meta?: any }>(\n  AXP_ENTITY_DELETED_WORKFLOW_EVENT_TYPE,\n);\n\nexport interface AXPEntityDeleteOptions {\n  source: string;\n  ids: string[];\n}\n\n@Injectable()\nexport class AXPEntityPerformDeleteAction extends AXPWorkflowAction {\n  private entityRegistery = inject(AXPEntityDefinitionRegistryService);\n  private dialogService = inject(AXDialogService);\n  private loadingDialog = inject(AXLoadingDialogService);\n  private translationService = inject(AXTranslationService);\n  private settingsService = inject(AXPSettingsService);\n\n  async execute(context: AXPWorkflowContext): Promise<void> {\n    const moduleEntity = context.getVariable('entity');\n    const data = context.getVariable<any>('data');\n    const meta = context.getVariable<any>('meta');\n\n    const showResult = await this.settingsService.get(AXPCommonSettings.EnableOperationToasts);\n\n    const entities: AXPEntityDeleteOptions[] = [];\n    if (moduleEntity != null) {\n      const ids = Array.isArray(data) ? data.map((c) => c.id) : [data.id];\n      entities.push({\n        source: moduleEntity,\n        ids: ids,\n      });\n    } else {\n      const listEntities = context.getVariable('entities');\n      entities.push(...listEntities);\n    }\n\n    const entityDefinitions: { [key: string]: AXPEntity } = {};\n    let deletedCount = 0;\n    context.setVariable('deleteSuccessful', false);\n    for await (const entity of entities) {\n      const [moduleName, entityName] = entity.source.split('.');\n      const entityDefinition = await this.entityRegistery.resolve(moduleName, entityName);\n      if (data != null && entityDefinition.parentKey && data[entityDefinition.parentKey]) {\n        context.setVariable('meta', { ...meta, refreshTargetId: data[entityDefinition.parentKey] });\n      }\n      entityDefinitions[entity.source] = entityDefinition;\n    }\n\n    // Compute consolidated ids from all entities\n    const idLength = entities.reduce((acc: number, curr) => acc + curr.ids.length, 0);\n    let dialog: any;\n    let showDialogTimeout: any;\n    let isDialogShown = false;\n\n    // Create dialog config but don't show it yet\n    const createDialog = async () => {\n      dialog = this.loadingDialog.show({\n        title: await this.translationService.translateAsync('@general:workflow.deleting'),\n        mode: 'determinate',\n        status: await this.translationService.translateAsync('@general:workflow.deleting'),\n        progressValue: 0,\n        text: `0/${idLength}`,\n        buttons: [\n          {\n            text: await this.translationService.translateAsync('@general:actions.cancel.title'),\n            color: 'danger',\n            onClick: () => {\n              if (dialog) {\n                dialog.close();\n              }\n            },\n          },\n        ],\n      });\n      isDialogShown = true;\n    };\n\n    // Set timeout to show dialog after 2 seconds if process is not complete\n    showDialogTimeout = setTimeout(async () => {\n      await createDialog();\n    }, 2000);\n\n    let allPromises: any[] = [];\n    for (const entity of entities) {\n      const entityDefinition = entityDefinitions[entity.source];\n      if (entityDefinition.commands?.delete != null) {\n        const deleteExec = entityDefinition.commands?.delete?.execute as Function;\n        const entityPromises = (entity.ids as any[])\n          .map((id, i) => {\n            return new Promise((resolve) => {\n              setTimeout(() => {\n                resolve(deleteExec(id));\n              }, i * 200);\n            });\n          })\n          .map((p) =>\n            p?.then(\n              (value) => {\n                deletedCount++;\n                if (isDialogShown && dialog) {\n                  dialog.setProgressText(`${deletedCount}/${idLength}`);\n                  dialog.setProgressValue((deletedCount / idLength) * 100);\n                }\n                return { status: 'fulfilled', value };\n              },\n              (reason) => ({ status: 'rejected', reason }),\n            ),\n          );\n\n        allPromises = allPromises.concat(entityPromises);\n      } else {\n        // Clear timeout if error occurs\n        clearTimeout(showDialogTimeout);\n        throw new Error(\n          `The delete operation cannot be performed on ${entityDefinition.title}. This action might be restricted or not applicable for the selected item.`,\n        );\n      }\n    }\n\n    const results = await Promise.all(allPromises);\n    // Clear timeout as process is complete\n    clearTimeout(showDialogTimeout);\n\n    if (isDialogShown) {\n      setTimeout(() => {\n        dialog.close();\n      }, 300);\n    }\n\n    // Store the last entity for use in event dispatching\n    const lastEntity = entities[entities.length - 1];\n\n    // Handle different scenarios for alerts\n    const successfulPromises = results.filter((result: any) => result?.status === 'fulfilled').length;\n    const failedPromises = results.filter((result: any) => result?.status === 'rejected').length;\n\n    if (successfulPromises > 0 && failedPromises === 0) {\n      // All items deleted successfully\n      if (showResult) {\n        await this.dialogService.alert(\n          await this.translationService.translateAsync('@general:workflow.success-delete-title'),\n          await this.translationService.translateAsync('@general:workflow.success-delete-body', {\n            params: { item: successfulPromises },\n          }), //TODO test translation\n          'success',\n        );\n      }\n      // Dispatch actions\n      this.dispatch(AXPEntityDeletedEvent({ entity: lastEntity.source, ids: lastEntity.ids, meta: meta }));\n      this.dispatch(AXPRefreshEvent({ entity: lastEntity.source, meta: context.getVariable<any>('meta') }));\n    } else if (successfulPromises > 0 && failedPromises > 0) {\n      // Some items deleted successfully, some failed\n      if (showResult) {\n        await this.dialogService.alert(\n          await this.translationService.translateAsync('@general:workflow.success-partial-delete-title'),\n          await this.translationService.translateAsync('@general:workflow.partial-delete-body', {\n            params: { success: successfulPromises, fail: failedPromises },\n          }),\n          'warning',\n        );\n      }\n      // Dispatch actions\n      this.dispatch(AXPEntityDeletedEvent({ entity: lastEntity.source, ids: lastEntity.ids, meta: meta }));\n    } else if (successfulPromises === 0 && failedPromises > 0) {\n      // No items deleted, all failed\n      if (showResult) {\n        await this.dialogService.alert(\n          await this.translationService.translateAsync('@general:workflow.fail-delete-title'),\n          await this.translationService.translateAsync('@general:workflow.fail-delete-body', {\n            params: { item: failedPromises },\n          }),\n          'danger',\n        );\n      }\n    } else {\n      // No items to delete (no successful or failed promises)\n      if (showResult) {\n        await this.dialogService.alert(\n          await this.translationService.translateAsync('@general:workflow.no-need'),\n          await this.translationService.translateAsync('@general:workflow.no-item'),\n          'primary',\n        );\n      }\n    }\n  }\n}\n\nexport const AXPDeleteEntityWorkflow: AXPWorkflow = {\n  startStepId: 'confirm-delete',\n  steps: {\n    'confirm-delete': {\n      action: 'show-prompt-dialog',\n      input: {\n        title: '@general:workflow.warning',\n        message: '@general:workflow.confirm-delete',\n        type: 'danger',\n      },\n      nextSteps: [\n        {\n          conditions: [\n            {\n              type: 'AND',\n              conditions: [{ type: 'SINGLE', expression: 'context.getOutput(\"result\") == true' }],\n            },\n          ],\n          nextStepId: 'perform-delete',\n        },\n      ],\n    },\n    'perform-delete': {\n      action: 'entity-perform-delete',\n    },\n  },\n};\n","import { AXPPageStatus } from '@acorex/platform/layout/widget-core-contracts';\nimport { AXPEntity, AXPEntityProperty, AXPEntityPropertyLayoutConfig, AXPEntitySectionView } from '@acorex/platform/layout/entity-contracts';\nimport { AXPSessionService } from '@acorex/platform/auth';\n\nimport { AXPGridLayoutOptions, type AXPWidgetNode } from '@acorex/platform/contracts';\nimport { AXPWidgetCoreService } from '@acorex/platform/layout/widget-core';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { computed, inject, Injectable, Injector, signal } from '@angular/core';\nimport { cloneDeep, merge, set } from 'lodash-es';\nimport { getMasterInterfacePropertySortKey } from './entity-interface-property-order.util';\nimport { AXPEntityDefinitionRegistryService } from './entity-registery.service';\n\nexport class AXPEntityUpdateViewSectionViewModel {\n  constructor(\n    private entity: AXPEntity,\n    private section: AXPEntitySectionView,\n  ) {}\n\n  group = this.entity.groups?.find((c) => c.id == this.section.id)!;\n  name = signal(this.group.id);\n\n  title = computed<string>(() => {\n    return this.group.title ?? this.group.id;\n  });\n\n  description = computed<string | null | undefined>(() => {\n    return this.group.description;\n  });\n\n  layout = computed<AXPGridLayoutOptions>(() => {\n    const source = cloneDeep(this.section.layout ?? {}) as object;\n    set(source, 'positions.default.colSpan', 12);\n    return source as AXPGridLayoutOptions;\n  });\n\n  elements = computed(() => {\n    const { interfaces, properties } = this.entity;\n    const updateProps = interfaces?.master?.update?.properties ?? [];\n    const propsByName = new Map(properties.map((p) => [p.name, p]));\n\n    const ordered = updateProps\n      .map((up, index) => ({ up, index }))\n      .filter(({ up }) => {\n        const p = propsByName.get(up.name);\n        return p !== undefined && p.groupId === this.group.id && p.schema.visible !== false;\n      })\n      .sort(\n        (a, b) =>\n          getMasterInterfacePropertySortKey(a.up, a.index) - getMasterInterfacePropertySortKey(b.up, b.index),\n      );\n\n    return ordered.map(({ up }) => {\n      const property = propsByName.get(up.name)!;\n      return new AXPEntityMasterUpdateElementViewModel(this.entity, property);\n    });\n  });\n}\n\nexport class AXPEntityMasterUpdateElementViewModel {\n  constructor(\n    private entity: AXPEntity,\n    private property: AXPEntityProperty,\n  ) {}\n\n  name = signal(this.property.name);\n  title = signal(this.property.title);\n  description = signal(this.property.description);\n\n  editable = computed<boolean>(() => {\n    return !(this.property.schema.readonly ?? false);\n  });\n\n  isVisible = computed<boolean | string>(() => {\n    return this.property.schema.visible ?? true;\n  });\n\n  isRequired = computed<boolean>(() => {\n    return this.property.validations?.some((c) => c.rule == 'required') || false;\n  });\n\n  layout = computed<AXPEntityPropertyLayoutConfig>(() => {\n    const updateProp = this.entity.interfaces?.master?.update?.properties?.find((c) => c.name == this.property.name);\n    const source = cloneDeep(updateProp?.layout ?? {}) as object;\n    set(source, 'positions.default.colSpan', 12);\n    return source as AXPEntityPropertyLayoutConfig;\n  });\n\n  node = computed<AXPWidgetNode>(() => {\n    const schema = this.property.schema!;\n    const widget = schema.interface!;\n    return {\n      type: widget.type,\n      mode: this.editable() ? 'edit' : 'view',\n      path: this.name(),\n      name: this.name(),\n      children: widget.children,\n      triggers: widget.triggers,\n      valueTransforms: widget.valueTransforms,\n      options: merge({}, schema.interface?.options, {\n        validations: this.property.validations?.map((c) => ({ rule: c.rule, message: c.message, options: c.options })),\n      }),\n    } as AXPWidgetNode;\n  });\n}\n\nexport class AXPEntityMasterUpdateViewModel {\n  private entityDef = cloneDeep(this.config)!;\n  private workflow = this.injector.get(AXPWorkflowService);\n  private sessionService = this.injector.get(AXPSessionService);\n\n  // Dynamically resolve identifiers when needed\n  private get moduleName(): string {\n    return (this.config as any).module ?? '';\n  }\n\n  private get entityName(): string {\n    return (this.config as any).name ?? '';\n  }\n\n  private get entityId(): string {\n    return this.entityData?.id ?? '';\n  }\n\n  public builder: AXPWidgetCoreService;\n\n  constructor(\n    private injector: Injector,\n    private config: AXPEntity,\n    private entityData: any,\n    private props: string[],\n  ) {}\n\n  public isInProgress = signal<boolean>(false);\n\n  public context = signal<any>(cloneDeep(this.entityData));\n\n  elements = computed(() => {\n    const props = this.entityDef.properties.filter((c) => this.props.includes(c.name) && c.schema.visible !== false);\n    return props.map((e) => {\n      return new AXPEntityMasterUpdateElementViewModel(this.entityDef, e);\n    });\n  });\n\n  sections = computed<AXPEntityUpdateViewSectionViewModel[]>(() => {\n    const { interfaces, properties } = this.entityDef;\n    const updateProps = interfaces?.master?.update?.properties?.map(({ name }) => name) ?? [];\n\n    const visibleProperties = properties.filter(\n      ({ groupId, schema, name }) => groupId && schema.visible !== false && updateProps.includes(name),\n    );\n\n    const sections =\n      interfaces?.master?.update?.sections?.filter(({ id }) =>\n        visibleProperties.some(({ groupId }) => groupId === id),\n      ) ?? [];\n\n    return sections.map((section) => new AXPEntityUpdateViewSectionViewModel(this.entityDef, section));\n  });\n\n  public async save(): Promise<any> {\n    this.isInProgress.set(true);\n    this.builder.setStatus(AXPPageStatus.Submitting);\n    try {\n      const com = this.entityDef.commands?.update;\n      if (com) {\n        return new Promise((resolve) => {\n          setTimeout(async () => {\n            const exec = com.execute as Function;\n            const result = await exec(this.context());\n            this.builder.setStatus(AXPPageStatus.Submitted);\n            resolve(result);\n          });\n        });\n      }\n    } catch (error: any) {\n      this.builder.setStatus(AXPPageStatus.Error);\n      return Promise.reject(error);\n    } finally {\n      this.isInProgress.set(false);\n    }\n  }\n\n  public reset() {\n    this.context.set(cloneDeep(this.entityData));\n  }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXPEntityMasterUpdateViewModelFactory {\n  private entityService = inject(AXPEntityDefinitionRegistryService);\n  private layout = inject(AXPLayoutThemeService);\n  private injector = inject(Injector);\n\n  public async create(\n    moduleName: string,\n    entityName: string,\n    id: string,\n    props: string[],\n  ): Promise<AXPEntityMasterUpdateViewModel> {\n    const config = await this.entityService.resolve(moduleName, entityName);\n    this.layout.setNavigationLoading(true);\n    if (config.queries?.byKey) {\n      const func = config.queries?.byKey?.execute as Function;\n      const data = await func(id);\n      this.layout.setNavigationLoading(false);\n\n      return new AXPEntityMasterUpdateViewModel(this.injector, config, data, props);\n    }\n    this.layout.setNavigationLoading(false);\n    return Promise.reject('cannot fetch ');\n  }\n}\n","import { AXPopupService } from '@acorex/components/popup';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPRefreshEvent, resolveEntityModifyPopupTitle } from '@acorex/platform/common';\nimport { AXPContextEvalFactory, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext, createWorkFlowEvent } from '@acorex/platform/workflow';\nimport { Injectable, inject } from '@angular/core';\nimport { cloneDeep } from 'lodash-es';\nimport { AXPEntityMasterUpdateViewModelFactory } from '../entity-master-update.viewmodel';\nimport { AXPEntityDefinitionRegistryService } from '../entity-registery.service';\nimport { AXP_ENTITY_CONFIG_TOKEN } from '../entity.config';\n\nexport const AXPEntityModifyEvent = createWorkFlowEvent<{ entity: string; values: any }>('[Entity] Modified');\n\n@Injectable()\nexport class AXPEntityModifySectionPopupAction extends AXPWorkflowAction {\n  private popupService = inject(AXPopupService);\n  private platform = inject(AXPlatform);\n  private translateService = inject(AXTranslationService);\n  private formatService = inject(AXFormatService);\n  private expressionEvaluator = inject(AXPExpressionEvaluatorService);\n  private contextEvalFactory = inject(AXPContextEvalFactory);\n  private entityRegistery = inject(AXPEntityDefinitionRegistryService);\n  private config = inject(AXP_ENTITY_CONFIG_TOKEN);\n  private factory = inject(AXPEntityMasterUpdateViewModelFactory);\n\n  async execute(context: AXPWorkflowContext): Promise<void> {\n    const [moduleName, entityName] = context.getVariable<string>('entity').split('.');\n    const { properties, id, title } = context.getVariable('data');\n    const entityRef = await this.entityRegistery.resolve(moduleName, entityName);\n    const vm = await this.factory.create(moduleName, entityName, id, properties);\n\n    const options = context.getVariable<any>('options');\n    const decoration = options?.['decoration'];\n    const headerTitle = decoration?.header?.title;\n\n    const com = await this.config.viewers.master.modify();\n    const popup = await this.popupService.open(com, {\n      title: headerTitle\n        ? headerTitle\n        : title ??\n          (await resolveEntityModifyPopupTitle(\n            entityRef,\n            vm.context(),\n            this.translateService,\n            this.formatService,\n            this.expressionEvaluator,\n            this.contextEvalFactory,\n          )),\n      size: this.platform.is('Mobile') || this.platform.is('SM') ? 'full' : 'md',\n      data: {\n        vm,\n        properties,\n        entity: entityRef,\n      },\n    });\n    context.setOutput('result', false);\n    if (popup.data?.result == true) {\n      context.setOutput('result', true);\n      context.setVariable('data', cloneDeep(popup.data.context));\n    }\n  }\n}\n\n@Injectable()\nexport class AXPEntityModifyConfirmedAction extends AXPWorkflowAction {\n\n  async execute(context: AXPWorkflowContext): Promise<void> {\n    const updatedData = context.getVariable('data');\n    this.dispatch(AXPEntityModifyEvent({ entity: context.getVariable<string>('entity'), values: updatedData }));\n\n    const gridItemParentKey = context.getVariable('parentKey');\n\n    this.dispatch(\n      AXPRefreshEvent({\n        entity: context.getVariable<string>('entity'),\n        meta: {\n          refreshTargetId: updatedData[gridItemParentKey],\n        },\n      })\n    );\n  }\n}\n\nexport const AXPModifyEntitySectionWorkflow: AXPWorkflow = {\n  startStepId: 'modifyPopup',\n  steps: {\n    modifyPopup: {\n      id: 'modifyPopup',\n      action: 'AXPEntityModifySectionPopupAction',\n      nextSteps: [\n        {\n          conditions: [{ type: 'SINGLE', expression: 'context.getOutput(\"result\") == true' }],\n          nextStepId: 'successToast',\n        },\n      ],\n    },\n    successToast: {\n      id: 'successToast',\n      action: 'AXPToastAction',\n      input: {\n        color: 'success',\n        title: '@general:workflow.entity-modified-title',\n        content: '@general:workflow.entity-modified-body',\n      },\n      nextSteps: [\n        {\n          conditions: [],\n          nextStepId: 'modifyConfirmed',\n        },\n      ],\n    },\n    modifyConfirmed: {\n      id: 'modifyConfirmed',\n      action: 'AXPEntityModifyConfirmedAction',\n    },\n  },\n};\n","import { AXPEntity, AXPEntityPropertyView, AXPEntitySectionView, getEntityInfo, isEntityActionPermitted } from '@acorex/platform/layout/entity-contracts';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\n\nimport { AXPBreadcrumbItem, AXPExecuteCommand, AXPGridLayoutOptions, type AXPWidgetNode } from '@acorex/platform/contracts';\nimport { AXPExpressionEvaluatorScope, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { AXPWorkflowService, ofType } from '@acorex/platform/workflow';\nimport { Injectable, Injector, computed, inject, signal } from '@angular/core';\nimport { ActivatedRouteSnapshot, ResolveFn, RouterStateSnapshot } from '@angular/router';\nimport { cloneDeep, get, merge, set } from 'lodash-es';\nimport { Subject, takeUntil } from 'rxjs';\nimport { AXPEntityDetailListViewModel } from './entity-detail-list.viewmodel';\nimport { getMasterInterfacePropertySortKey } from './entity-interface-property-order.util';\nimport { AXPEntityDefinitionRegistryService } from './entity-registery.service';\nimport { AXPEntityService } from './entity.service';\nimport { AXPEntityCommandTriggerViewModel } from './entity.viewmodel';\nimport { AXPEntityDeletedEvent } from './workflows/delete-entity.workflow';\nimport { AXPEntityModifyEvent } from './workflows/modify-section.workflow';\n\nexport class AXPEntityMasterSingleViewGroupViewModel {\n  constructor(\n    private entity: AXPEntity,\n    private section: AXPEntitySectionView,\n  ) {}\n\n  group = this.entity.groups?.find((c) => c.id == this.section.id)!;\n  name = signal(this.group.id);\n  isLoading = signal(false);\n\n  title = computed<string>(() => {\n    return this.group.title ?? this.group.id;\n  });\n\n  description = computed<string | null | undefined>(() => {\n    return this.group.description;\n  });\n\n  layout = computed<AXPGridLayoutOptions>(() => {\n    const source = cloneDeep(this.section.layout ?? {}) as object;\n    set(source, 'positions.sm.colSpan', 12);\n    return source as AXPGridLayoutOptions;\n  });\n\n  props = computed(() => {\n    const { properties, interfaces } = this.entity;\n    const groupPropertyNames = new Set(\n      properties.filter(({ groupId, schema }) => groupId === this.group.id && schema.visible !== false).map((p) => p.name),\n    );\n\n    const singleProps = interfaces?.master?.single?.properties ?? [];\n\n    const ordered = singleProps\n      .map((vp, index) => ({ vp, index }))\n      .filter(({ vp }) => groupPropertyNames.has(vp.name))\n      .sort(\n        (a, b) =>\n          getMasterInterfacePropertySortKey(a.vp, a.index) - getMasterInterfacePropertySortKey(b.vp, b.index),\n      );\n\n    return ordered.map(({ vp }) => new AXPEntityMasterSingleElementViewModel(this.entity, this, vp));\n  });\n\n  editableProps = computed(() => {\n    const { properties, interfaces } = this.entity;\n    const singleViews = interfaces?.master?.single?.properties ?? [];\n    const updateViews = interfaces?.master?.update?.properties ?? [];\n    const propsByName = new Map(properties.map((p) => [p.name, p]));\n\n    const ordered = updateViews\n      .map((up, index) => ({ up, index }))\n      .filter(({ up }) => {\n        const p = propsByName.get(up.name);\n        return p !== undefined && p.groupId === this.group.id && p.schema.visible !== false;\n      })\n      .sort(\n        (a, b) =>\n          getMasterInterfacePropertySortKey(a.up, a.index) - getMasterInterfacePropertySortKey(b.up, b.index),\n      );\n\n    return ordered.map(({ up }) => {\n      const viewProp =\n        singleViews.find((s) => s.name === up.name) ??\n        ({ name: up.name, layout: up.layout } as AXPEntityPropertyView);\n      return new AXPEntityMasterSingleElementViewModel(this.entity, this, viewProp);\n    });\n  });\n\n  editable = computed(() => {\n    return this.editableProps().length > 0;\n  });\n}\n\nexport class AXPEntityMasterSingleElementViewModel {\n  constructor(\n    private entity: AXPEntity,\n    private section: AXPEntityMasterSingleViewGroupViewModel,\n    private propertyView: AXPEntityPropertyView,\n  ) {}\n\n  private property = this.entity.properties.find((c) => c.name == this.propertyView.name)!;\n  name = signal(this.property.name);\n  path = signal(this.propertyView.dataPath ?? this.property.name);\n  title = signal(this.property.title);\n  showLabel = signal(this.propertyView.layout?.label?.visible != false);\n  description = signal(this.property.description);\n\n  layout = computed<AXPGridLayoutOptions>(() => {\n    const viewProp = this.entity.interfaces?.master?.single?.properties?.find((c) => c.name == this.property.name);\n    const source = cloneDeep(viewProp?.layout ?? {}) as object;\n    set(source, 'positions.default.colSpan', 12);\n    return source as AXPGridLayoutOptions;\n  });\n\n  node = computed<AXPWidgetNode>(() => {\n    const schema = this.property.schema!;\n    const widget = schema.interface!;\n    return {\n      type: widget.type,\n      mode: 'view',\n      path: this.path(),\n      children: widget.children,\n      valueTransforms: widget.valueTransforms,\n      options: merge({}, schema.interface?.options),\n    } as AXPWidgetNode;\n  });\n}\n\nexport class AXPEntityMasterSingleViewModel {\n  entityDef = cloneDeep(this.config)!;\n  private readonly _viewDef = cloneDeep(this.entityDef.interfaces?.master?.single)!;\n  private readonly session = this.injector.get(AXPSessionService);\n  private readonly formatService = this.injector.get(AXFormatService);\n  private readonly workflow = this.injector.get(AXPWorkflowService);\n  private readonly commandService = this.injector.get(AXPCommandService);\n  private readonly destroyed = new Subject<void>();\n  private translateService = this.injector.get(AXTranslationService);\n  private entityService = this.injector.get(AXPEntityService);\n  private expressionEvaluator = this.injector.get(AXPExpressionEvaluatorService);\n  private entityDefinitionRegistryService = this.injector.get(AXPEntityDefinitionRegistryService);\n  private _updateTrigger = signal(1);\n  public readonly updateTrigger = this._updateTrigger.asReadonly();\n\n  constructor(\n    private injector: Injector,\n    private config: AXPEntity,\n    private entityData: any,\n  ) {\n    this.workflow.events$\n      .pipe(ofType(AXPEntityDeletedEvent))\n      .pipe(takeUntil(this.destroyed))\n      .subscribe((event) => {\n        if (\n          event.payload.entity == getEntityInfo(this.entityDef).source &&\n          event.payload.ids.includes(this.context().id)\n        ) {\n          this.workflow.execute('show-list-view', {\n            entity: getEntityInfo(this.entityDef).source,\n          });\n        }\n      });\n    this.workflow.events$\n      .pipe(ofType(AXPEntityModifyEvent))\n      .pipe(takeUntil(this.destroyed))\n      .subscribe(async (event) => {\n        if (\n          event.payload.entity == getEntityInfo(this.entityDef).source &&\n          event.payload.values.id === this.context().id\n        ) {\n          this.context.set(event.payload.values);\n        }\n      });\n    this.entityDefinitionRegistryService.onChanged$.pipe(takeUntil(this.destroyed)).subscribe((event) => {\n      if (event.name == getEntityInfo(this.entityDef).source) {\n        this._updateTrigger.set(this._updateTrigger() + 1);\n      }\n    });\n  }\n\n  public context = signal<any>(cloneDeep(this.entityData));\n\n  private actions = computed<AXPEntityCommandTriggerViewModel[]>(() => {\n    return (\n      this.entityDef.interfaces?.master?.single?.actions\n        ?.map((tr) => new AXPEntityCommandTriggerViewModel(this.entityDef, tr))\n        .filter((a) => isEntityActionPermitted(a, (...keys) => this.session.authorize(...keys))) ?? []\n    );\n  });\n\n  public primaryActions = computed<AXPEntityCommandTriggerViewModel[]>(() => {\n    return this.actions().filter((c) => c.priority == 'primary');\n  });\n\n  public secondaryActions = computed<AXPEntityCommandTriggerViewModel[]>(() => {\n    return this.actions().filter((c) => c.priority == 'secondary');\n  });\n\n  public sections = computed<AXPEntityMasterSingleViewGroupViewModel[]>(() => {\n    const { interfaces, properties } = this.entityDef;\n    const viewProps = interfaces?.master?.single?.properties?.map(({ name }) => name) ?? [];\n\n    const filteredProperties = properties.filter(\n      ({ groupId, schema, name }) => groupId && schema.visible !== false && viewProps.includes(name),\n    );\n\n    const groups =\n      interfaces?.master?.single?.sections?.filter(({ id }) =>\n        filteredProperties.some(({ groupId }) => groupId === id),\n      ) ?? [];\n\n    return groups.map((section) => new AXPEntityMasterSingleViewGroupViewModel(this.entityDef, section));\n  });\n\n  public navigateToUp() {\n    this.workflow.execute('navigate', {\n      options: {\n        path: this.entityService.createPath(this.entityDef.module, this.entityDef.name),\n      },\n    });\n  }\n\n  //****************** Title ******************//\n  public title = computed<string>(() => {\n    const suggestedProps = this.entityDef.properties.find((c) => ['title', 'name', 'code'].includes(c.name));\n    let suggestedFormat = 'Item #{{id}}';\n    if (suggestedProps) suggestedFormat = `{{${suggestedProps.name}}}`;\n    return this.formatService.format(this._viewDef.title ?? suggestedFormat, 'string', this.context());\n  });\n  //****************** Description ******************//\n  public description = computed<string | null>(() => {\n    return this._viewDef.description\n      ? this.formatService.format(this._viewDef.description, 'string', this.context())\n      : null;\n  });\n\n  //****************** Beardcrumbs ******************//\n  public beardcrumbs = computed<AXPBreadcrumbItem[]>(() => {\n    return [\n      {\n        title: this.entityDef.formats.plural ?? this.entityDef.formats.individual,\n        command: {\n          name: 'navigate',\n          options: {\n            path: `/${this.session.application?.name}/m/${this.entityDef.module}/e/${this.entityDef.name}/list`,\n          },\n        },\n      },\n      {\n        title: this.title(),\n      },\n    ];\n  });\n\n  evaluateExpressions = async (options: { [key: string]: string }, data: any) => {\n    const scope: AXPExpressionEvaluatorScope = {\n      context: {\n        eval: (path: string) => {\n          return get(data, path);\n        },\n      },\n    };\n    return await this.expressionEvaluator.evaluate(options, scope);\n  };\n\n  public relatedEntities = computed<Promise<AXPEntityDetailListViewModel[]>>(async () => {\n    const relatedEntities =\n      this.entityDef.relatedEntities?.map(\n        (re) => new AXPEntityDetailListViewModel(this.injector, re, { entity: this.entityDef, data: this.entityData }),\n      ) ?? [];\n\n    const filteredEntities = await Promise.all(relatedEntities.map(async (re) => ((await re.hidden()) ? null : re)));\n\n    return filteredEntities.filter((re) => re !== null) as AXPEntityDetailListViewModel[];\n  });\n\n  public async executeCommand(commandName: string, data: any = null) {\n    //TODO: syntax for workflow\n    const command = commandName.split('&')[0];\n    switch (command) {\n      case 'modify-entity-section': {\n        this.workflow.execute('modify-entity-section', {\n          entity: getEntityInfo(this.entityDef).source,\n          data: {\n            id: this.context().id,\n            properties: (data as AXPEntityMasterSingleViewGroupViewModel).editableProps().map((m) => m.name()),\n          },\n        });\n        break;\n      }\n      default: {\n        const action = this.actions().find((c) => c.name == commandName);\n        const options = await this.evaluateExpressions(action?.options, this.context());\n        //\n        if (this.workflow.exists(command)) {\n          this.workflow.execute(command, {\n            entity: getEntityInfo(this.entityDef).source,\n            data: this.context(),\n            options,\n          });\n        } else {\n          this.commandService.execute(command, data);\n        }\n      }\n    }\n  }\n\n  async execute(command: AXPExecuteCommand) {\n    switch (command?.name) {\n      case 'navigate':\n        await this.workflow.execute('navigate', {\n          options: {\n            path: command.options?.['path'],\n          },\n        });\n        break;\n      default:\n        this.executeCommand(command.name, command.options);\n        break;\n    }\n  }\n  //\n  //\n  destroy() {\n    this.destroyed.next();\n    this.destroyed.complete();\n  }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXPEntityDetailViewModelFactory {\n  private entityService = inject(AXPEntityDefinitionRegistryService);\n  private layout = inject(AXPLayoutThemeService);\n  private injector = inject(Injector);\n\n  public async create(moduleName: string, entityName: string, id: string): Promise<AXPEntityMasterSingleViewModel> {\n    const config = await this.entityService.resolve(moduleName, entityName);\n    this.layout.setNavigationLoading(true);\n    if (config.queries?.byKey) {\n      const func = config.queries?.byKey?.execute as Function;\n      const data = await func(id);\n      this.layout.setNavigationLoading(false);\n      return new AXPEntityMasterSingleViewModel(this.injector, config, data);\n    }\n    this.layout.setNavigationLoading(false);\n    return Promise.reject('cannot fetch ');\n  }\n}\n\nexport const AXPEntityDetailViewModelResolver: ResolveFn<Promise<AXPEntityMasterSingleViewModel>> = (\n  route: ActivatedRouteSnapshot,\n  state: RouterStateSnapshot,\n  service: AXPEntityDetailViewModelFactory = inject(AXPEntityDetailViewModelFactory),\n): Promise<AXPEntityMasterSingleViewModel> => {\n  const moduleName = route.parent?.paramMap.get('module') as string;\n  const entityName = route.paramMap.get('entity') as string;\n  const id = route.paramMap.get('id') as string;\n  //\n  return service.create(moduleName, entityName, id);\n};\n","import { axpRedirectToNotFound, AXPNotFoundError, CONTAINS_OPER } from '@acorex/platform/common';\nimport { AXPFilterDefinition, AXPFilterQuery } from '@acorex/platform/contracts';\nimport { AXPEntity, type AXPEntityListFilterDefinition, collectEntityListFilterDefinitions } from '@acorex/platform/layout/entity-contracts';\nimport { AXPWidgetRegistryService } from '@acorex/platform/layout/widget-core';\nimport { Injector, computed, inject, signal } from '@angular/core';\nimport { ActivatedRouteSnapshot, RedirectCommand, ResolveFn, Router, RouterStateSnapshot } from '@angular/router';\nimport { cloneDeep } from 'lodash-es';\nimport { AXPEntityDefinitionRegistryService } from './entity-registery.service';\n\nexport class AXPEntityPreloadFiltersViewModel {\n  readonly entityDef = cloneDeep(this.config);\n  private readonly widgetResolver = this.injector.get(AXPWidgetRegistryService);\n  private readonly entityRegistry = this.injector.get(AXPEntityDefinitionRegistryService);\n\n  filterDefinitions = signal<AXPEntityListFilterDefinition[]>([]);\n\n  //#region ----   Constructor   ----\n\n  constructor(\n    private injector: Injector,\n    private config: AXPEntity,\n  ) {}\n\n  //#endregion\n\n  //#region ----   Computed Properties   ----\n\n  /**\n   * Entity title\n   */\n  title = computed<string>(() => {\n    return this.entityDef.formats.plural ?? this.entityDef.title;\n  });\n\n  /**\n   * Entity description\n   */\n  description = computed<string | null>(() => {\n    return this.entityDef.interfaces?.master?.list?.description ?? null;\n  });\n\n  /**\n   * Preload filter definitions with a single `contains` operator (hides the filter operations menu).\n   */\n  preloadFiltersDef = computed<AXPFilterDefinition[]>(() => {\n    return this.filterDefinitions()\n      .filter((definition) => definition.filterType.preload?.enabled)\n      .map((definition) => ({\n        ...definition,\n        operator: { type: 'contains' as const },\n        widget: {\n          ...definition.widget,\n          options: {\n            ...definition.widget?.options,\n            operations: [CONTAINS_OPER],\n          },\n        },\n      }));\n  });\n\n  /**\n   * Required filter definitions only\n   */\n  requiredFiltersDef = computed<AXPFilterDefinition[]>(() => {\n    return this.preloadFiltersDef().filter((c) => c.filterType.preload?.required);\n  });\n\n  //#endregion\n\n  //#region ----   Methods   ----\n\n  async loadFilterDefinitions(): Promise<void> {\n    const definitions = await collectEntityListFilterDefinitions(\n      this.entityDef,\n      (moduleName, entityName) => this.entityRegistry.resolve(moduleName, entityName).catch(() => null),\n      {\n        resolveWidget: (type) => this.widgetResolver.resolve(type),\n      },\n    );\n    this.filterDefinitions.set(definitions);\n  }\n\n  /**\n   * Serialize filter values to plain objects (remove signals, functions, etc.)\n   */\n  serializeFilters(filters: unknown): AXPFilterQuery[] {\n    return JSON.parse(JSON.stringify(filters));\n  }\n\n  //#endregion\n}\n\n//#region ----   Resolver   ----\n\nexport const AXPEntityPreloadFiltersViewModelResolver: ResolveFn<\n  Promise<AXPEntityPreloadFiltersViewModel | RedirectCommand>\n> = async (\n  route: ActivatedRouteSnapshot,\n  state: RouterStateSnapshot,\n): Promise<AXPEntityPreloadFiltersViewModel | RedirectCommand> => {\n  const injector = inject(Injector);\n  const entityRegistry = inject(AXPEntityDefinitionRegistryService);\n  const router = inject(Router);\n\n  const moduleName = route.parent?.paramMap.get('module') as string;\n  const entityName = route.paramMap.get('entity') as string;\n\n  try {\n    const entity = await entityRegistry.resolve(moduleName, entityName);\n    const vm = new AXPEntityPreloadFiltersViewModel(injector, entity);\n    await vm.loadFilterDefinitions();\n    return vm;\n  } catch (error) {\n    if (error instanceof AXPNotFoundError) {\n      return axpRedirectToNotFound(router);\n    }\n\n    throw error;\n  }\n};\n\n//#endregion\n","import type { AXPEntityAggregateMeasure, AXPEntityAggregateRequest } from '@acorex/platform/layout/entity-contracts';\n\n//#region ---- Path / numeric helpers ----\n\nfunction getPath(obj: unknown, path: string): unknown {\n  if (obj == null || path.length === 0) {\n    return undefined;\n  }\n  const parts = path.split('.');\n  let cur: unknown = obj;\n  for (const p of parts) {\n    if (cur == null || typeof cur !== 'object') {\n      return undefined;\n    }\n    cur = (cur as Record<string, unknown>)[p];\n  }\n  return cur;\n}\n\nfunction toNumber(value: unknown): number | null {\n  if (typeof value === 'number' && Number.isFinite(value)) {\n    return value;\n  }\n  if (typeof value === 'string' && value.trim().length > 0) {\n    const n = Number(value);\n    return Number.isFinite(n) ? n : null;\n  }\n  return null;\n}\n\nfunction defaultAlias(measure: AXPEntityAggregateMeasure, index: number): string {\n  if (measure.alias?.trim()) {\n    return measure.alias.trim();\n  }\n  if (measure.reducer === 'count') {\n    return index === 0 ? 'count' : `count_${index}`;\n  }\n  const field = measure.field ?? 'value';\n  const safeField = field.replace(/\\./g, '_');\n  return `${measure.reducer}_${safeField}`;\n}\n\n//#endregion\n\n//#region ---- Aggregate ----\n\ninterface GroupBucket {\n  keyParts: unknown[];\n  rows: Record<string, unknown>[];\n}\n\n/**\n * Pure aggregation over already-filtered plain rows (e.g. outputs of {@link filterSortEntityRows}).\n */\nexport function computeEntityAggregates<T extends Record<string, unknown>>(\n  rows: T[],\n  request: AXPEntityAggregateRequest,\n): Record<string, unknown>[] {\n  const groupBy = request.groupBy ?? [];\n  const measures = request.measures ?? [];\n  if (measures.length === 0) {\n    return [];\n  }\n\n  const groups = new Map<string, GroupBucket>();\n\n  const stableGroupKey = (row: T): string => {\n    const parts = groupBy.map((path) => getPath(row, path));\n    return JSON.stringify(parts);\n  };\n\n  for (const row of rows) {\n    const k = stableGroupKey(row);\n    let bucket = groups.get(k);\n    if (!bucket) {\n      bucket = {\n        keyParts: groupBy.map((path) => getPath(row, path)),\n        rows: [],\n      };\n      groups.set(k, bucket);\n    }\n    bucket.rows.push(row);\n  }\n\n  const result: Record<string, unknown>[] = [];\n\n  for (const bucket of groups.values()) {\n    const out: Record<string, unknown> = {};\n    groupBy.forEach((field, i) => {\n      out[field] = bucket.keyParts[i];\n    });\n\n    measures.forEach((measure, index) => {\n      const alias = defaultAlias(measure, index);\n      const gRows = bucket.rows;\n\n      if (measure.reducer === 'count') {\n        out[alias] = gRows.length;\n        return;\n      }\n\n      const fieldPath = measure.field;\n      if (!fieldPath) {\n        out[alias] = null;\n        return;\n      }\n\n      const nums = gRows.map((r) => toNumber(getPath(r, fieldPath))).filter((n): n is number => n !== null);\n\n      switch (measure.reducer) {\n        case 'sum':\n          out[alias] = nums.reduce((a, b) => a + b, 0);\n          break;\n        case 'min':\n          out[alias] = nums.length ? Math.min(...nums) : null;\n          break;\n        case 'max':\n          out[alias] = nums.length ? Math.max(...nums) : null;\n          break;\n        case 'avg':\n          out[alias] = nums.length ? nums.reduce((a, b) => a + b, 0) / nums.length : null;\n          break;\n        default:\n          out[alias] = null;\n      }\n    });\n\n    result.push(out);\n  }\n\n  return result;\n}\n\n//#endregion\n","import { AXPPagedListResult, AXPQueryRequest } from '@acorex/platform/contracts';\nimport { applyFilterArray, applySortArray } from '@acorex/platform/core';\n\n//#region ---- Types ----\n\nexport interface RunEntityQueryAdapters<T = unknown> {\n  getRawAll(entityName: string): Promise<T[]>;\n  getDirectChildCount(categoryId: string, entityName: string): Promise<number>;\n  getAllChildCategoryIds(categoryId: string, entityName: string): Promise<string[]>;\n}\n\n//#endregion\n\n//#region ---- Pure helpers ----\n\n/**\n * Fields where `contains` means hierarchical category membership (expand to descendants).\n * Excludes e.g. `roleIds`, which uses array membership only and must use normal filter logic.\n */\nfunction isCategoryContainsFieldName(field: unknown): boolean {\n  if (field === 'categoryIds') {\n    return true;\n  }\n  if (typeof field === 'string' && field.endsWith('Ids') && field !== 'roleIds') {\n    return true;\n  }\n  return false;\n}\n\n/**\n * Check if the entity is a category entity (ends with 'Category').\n */\nexport function isCategoryEntity(entityName: string): boolean {\n  return entityName.endsWith('Category');\n}\n\n/**\n * Check if the filter is a category filter (contains operator on categoryIds field).\n * Handles both simple filters and compound filters.\n */\nexport function isCategoryFilter(filter: any): boolean {\n  if (filter?.operator?.type === 'contains' && isCategoryContainsFieldName(filter.field)) {\n    return true;\n  }\n  if (filter?.logic && filter?.filters && Array.isArray(filter.filters)) {\n    return filter.filters.some(\n      (nestedFilter: any) =>\n        nestedFilter?.operator?.type === 'contains' && isCategoryContainsFieldName(nestedFilter.field),\n    );\n  }\n  return false;\n}\n\n//#endregion\n\n//#region ---- Query execution ----\n\n/**\n * Apply recursive category filtering: entities that belong to the category or any of its children.\n */\nasync function applyRecursiveCategoryFilter<T>(\n  result: T[],\n  filter: any,\n  entityName: string,\n  getAllChildCategoryIds: (categoryId: string, entityName: string) => Promise<string[]>,\n): Promise<T[]> {\n  let categoryFilter = filter;\n  let otherFilters: any[] = [];\n\n  if (filter?.logic && filter?.filters && Array.isArray(filter.filters)) {\n    const categoryFilterIndex = filter.filters.findIndex(\n      (f: any) => f?.operator?.type === 'contains' && isCategoryContainsFieldName(f.field),\n    );\n    if (categoryFilterIndex !== -1) {\n      categoryFilter = filter.filters[categoryFilterIndex];\n      otherFilters = filter.filters.filter((_: any, index: number) => index !== categoryFilterIndex);\n    }\n  }\n\n  if (!categoryFilter) {\n    return applyFilterArray(result, [filter]);\n  }\n\n  const categoryId = categoryFilter.value;\n  const categoryField = categoryFilter.field;\n  const allCategoryIds = await getAllChildCategoryIds(categoryId, entityName);\n\n  let filteredResult = result.filter((item: any) => {\n    const categoryIds = item[categoryField];\n    if (!categoryIds) return false;\n    const itemCategoryIds = Array.isArray(categoryIds) ? categoryIds : [categoryIds];\n    return itemCategoryIds.some((itemCategoryId: any) => allCategoryIds.includes(itemCategoryId));\n  });\n\n  if (otherFilters.length > 0) {\n    filteredResult = applyFilterArray(filteredResult, otherFilters);\n  }\n  return filteredResult;\n}\n\n/**\n * Calculate childrenCount for each category entity when missing.\n */\nasync function calculateChildrenCounts<T>(\n  items: T[],\n  entityName: string,\n  getDirectChildCount: (categoryId: string, entityName: string) => Promise<number>,\n): Promise<T[]> {\n  return Promise.all(\n    items.map(async (item: any) => {\n      if (typeof item.childrenCount === 'number') {\n        return { ...item };\n      }\n      const childrenCount = await getDirectChildCount(item.id, entityName);\n      return { ...item, childrenCount };\n    }),\n  );\n}\n\n/**\n * Loads raw rows for an entity and applies the same sorting and filtering as {@link runEntityQuery},\n * without pagination.\n */\nexport async function filterSortEntityRows<T = unknown>(\n  entityName: string,\n  request: Pick<AXPQueryRequest, 'filter' | 'sort' | 'params'>,\n  adapters: RunEntityQueryAdapters<T>,\n  sortLocale?: string,\n): Promise<T[]> {\n  let result = await adapters.getRawAll(entityName);\n\n  if (request.sort && request.sort.length) {\n    const locale = sortLocale ?? request.params?.['locale'] ?? 'en-US';\n    result = applySortArray(result, request.sort, locale);\n  }\n\n  if (request.filter && isCategoryFilter(request.filter)) {\n    result = await applyRecursiveCategoryFilter(result, request.filter, entityName, adapters.getAllChildCategoryIds);\n  } else {\n    result = applyFilterArray(result, request.filter ? [request.filter] : []);\n  }\n\n  if (isCategoryEntity(entityName)) {\n    result = await calculateChildrenCounts(result, entityName, adapters.getDirectChildCount);\n  }\n\n  return result;\n}\n\n/**\n * Shared entity query logic: sort, filter (including recursive category filter), childrenCount, pagination.\n */\nexport async function runEntityQuery<T = unknown>(\n  entityName: string,\n  request: AXPQueryRequest,\n  adapters: RunEntityQueryAdapters<T>,\n  sortLocale?: string,\n): Promise<AXPPagedListResult<T>> {\n  const rows = await filterSortEntityRows(entityName, request, adapters, sortLocale);\n  const skip = request.skip ?? 0;\n  const take = request.take ?? 0;\n  return {\n    total: rows.length,\n    items: rows.slice(skip, skip + take),\n  };\n}\n\n//#endregion\n","\nimport { AXPEntityCommandScope } from '@acorex/platform/layout/entity-contracts';\nimport { resolveEntityPluginDetailPageOrder } from '../../entity-component-page-order.util';\nimport {\n  actionExists,\n  cloneLayoutArrays,\n  ensureLayoutPropertyView,\n  ensureLayoutSection,\n  ensureListActions,\n} from '../../plugins/shared';\nimport { AXPEntityActionPlugin } from '../../plugins/types';\n\n/** How to show attachments in entity single/create/update: as a section (default) or as a separate page. */\nexport type AttachmentsDisplayMode = 'section' | 'page';\n\n/** Component key used when display is 'page'. Register a page component with this key via AXP_PAGE_COMPONENT_PROVIDER. */\nexport const ATTACHMENTS_PAGE_COMPONENT_KEY = 'entity-attachments-page';\n\n/** Default section order for attachments when display is 'section' (after meta-data-form). */\nconst DEFAULT_ATTACHMENTS_SECTION_ORDER = 200;\nconst DEFAULT_ATTACHMENTS_PAGE_ICON = 'fa-light fa-paperclip';\n\ntype AttachmentLocalizedText = string | Record<string, string>;\n\ntype AttachmentSectionOptions = {\n  order?: number;\n  title?: AttachmentLocalizedText;\n};\n\ntype AttachmentsEditDialogOptions = {\n  mode?: 'manual' | 'auto';\n  fields?: {\n    name?: boolean;\n    title?: boolean;\n    description?: boolean;\n  };\n};\n\nfunction buildAttachmentsFileUploaderOptions(\n  opts: AttachmentsPluginOptions,\n  displayMode: AttachmentsDisplayMode,\n): Record<string, unknown> {\n  return {\n    multiple: opts.multiple ?? true,\n    accept: opts.accept,\n    readonly: opts['readonly'] ?? false,\n    fileEditable: opts.fileEditable ?? true,\n    editDialog: opts.editDialog,\n    plugins: opts.plugins ?? [],\n    showBorder: opts.showBorder ?? false,\n    showAddItemButton: opts.showAddItemButton ?? displayMode !== 'page',\n  };\n}\n\nfunction buildAttachmentsListActionCommandOptions(\n  opts: AttachmentsPluginOptions,\n  field: string,\n): Record<string, unknown> {\n  const base = buildAttachmentsFileUploaderOptions(opts, 'section');\n\n  return {\n    id: '{{ context.eval(\"id\") }}',\n    key: field,\n    ...base,\n    accept: opts.accept ?? '.jpg,.jpeg,.png,.gif,.webp',\n    showAddItemButton: true,\n  };\n}\n\nfunction applyAttachmentsFileUploaderOptions(\n  ctx: Parameters<AXPEntityActionPlugin['apply']>[0],\n  field: string,\n  opts: AttachmentsPluginOptions,\n  displayMode: AttachmentsDisplayMode,\n): void {\n  const fileUploaderOptions = {\n    ...buildAttachmentsFileUploaderOptions(opts, displayMode),\n    entityName: `${ctx.entity.module}.${ctx.entity.name}`,\n    entityId: '{{ context.eval(\"id\") }}',\n    entityField: field,\n  };\n  const prop = (ctx.properties.list() ?? []).find((p: { name: string }) => p.name === field) as\n    | { schema?: { interface?: { type?: string; options?: Record<string, unknown> } } }\n    | undefined;\n  if (prop?.schema?.interface?.type === 'attachments') {\n    prop.schema.interface.options = {\n      ...(prop.schema.interface.options ?? {}),\n      ...fileUploaderOptions,\n    };\n  }\n}\n\nexport type AttachmentsPluginOptions = {\n  // property name to hold file list, e.g., default is 'attachments'\n  field?: string;\n  // field and group title\n  title?: AttachmentLocalizedText;\n  // where to show attachments: section (inline) or page (separate tab). Default 'section'\n  display?: AttachmentsDisplayMode;\n  // accept: string (e.g., '.jpg,.png')\n  accept?: string;\n  // multiple: boolean (default true)\n  multiple?: boolean;\n  // fileEditable: boolean (default true)\n  fileEditable?: boolean;\n  /** When true, attachments field and list action run in read-only mode (widget option `readonly`). */\n  'readonly'?: boolean;\n  /** When true (default), registers a list column for the attachments field. Set false to hide the column. */\n  showListColumn?: boolean;\n  /** When true (default), registers the list upload action. Set false to omit the action. */\n  showListAction?: boolean;\n  /** Section options when display is 'section'. */\n  section?: AttachmentSectionOptions;\n  /** File edit dialog options. */\n  editDialog?: AttachmentsEditDialogOptions;\n  // file-uploader plugins\n  plugins?: { name: string; options?: unknown }[];\n  /** Widget option `showBorder`. Default false for attachments (section and page). */\n  showBorder?: boolean;\n  /** Widget option `showAddItemButton`. Default false when display is `page`, true for section. */\n  showAddItemButton?: boolean;\n};\n\n/**\n * Attachments plugin.\n * - Always ensures an attachments group and property; when display is 'section' (default), adds a section to single/create/update layouts.\n * - When display is 'page', adds a page to entity.pages with ATTACHMENTS_PAGE_COMPONENT_KEY; register a page component with that key via AXP_PAGE_COMPONENT_PROVIDER.\n * - List column and list upload action can be turned off with `showListColumn` / `showListAction` (both default true).\n * - Uses provided accept/multiple/fileEditable; others are fixed.\n */\nexport const attachmentsPlugin: AXPEntityActionPlugin = {\n  name: 'attachments',\n  order: 50,\n  apply: (ctx, options?: AttachmentsPluginOptions) => {\n    const opts = options ?? {};\n    const field = opts.field && opts.field.trim().length > 0 ? opts.field : 'attachments';\n    const displayTitle = opts.title ?? '@document-management:terms.common.attachments';\n    const displayMode: AttachmentsDisplayMode = opts.display ?? 'section';\n    const sectionTitle = opts.section?.title ?? displayTitle;\n    // Ensure group and section ids (unique per field)\n    const sectionId = `attachments-${field}`;\n    const groupIdForProperty = `attachments-${field}`;\n    const existingGroups = ctx.groups.list() ?? [];\n    if (!existingGroups.some((g: any) => g.id === groupIdForProperty)) {\n      ctx.groups.add({ id: groupIdForProperty, title: displayTitle } as any);\n    }\n\n    // Ensure property exists (using a generic file-uploader interface)\n    const props = ctx.properties.list();\n    if (!props.some((p: any) => p.name === field)) {\n      ctx.properties.add({\n        name: field,\n        title: displayTitle,\n        groupId: groupIdForProperty,\n        schema: {\n          dataType: 'string',\n          interface: {\n            type: 'attachments',\n            options: {\n              ...buildAttachmentsFileUploaderOptions({ ...opts, field }, displayMode),\n              entityName: `${ctx.entity.module}.${ctx.entity.name}`,\n              entityId: '{{ context.eval(\"id\") }}',\n              entityField: field,\n            },\n          },\n        },\n      } as any);\n    }\n\n    applyAttachmentsFileUploaderOptions(ctx, field, opts, displayMode);\n\n    // Ensure column exists (optional)\n    const showListColumn = opts.showListColumn ?? true;\n    if (showListColumn) {\n      const cols = ctx.columns.list() ?? [];\n      if (!cols?.some((c: any) => c.name === field)) {\n        ctx.columns.add({ name: field } as any);\n      }\n    }\n\n    if (displayMode === 'section') {\n      const propertyLayoutOrder = 8;\n      const layoutSectionOrder = opts.section?.order ?? DEFAULT_ATTACHMENTS_SECTION_ORDER;\n      const colSpan = 12;\n      ctx.interfaces.master.single.update((single) => {\n        const next = cloneLayoutArrays((single ?? { title: ctx.entity.title, sections: [], properties: [] }) as any);\n        ensureLayoutSection(next, { id: sectionId, title: sectionTitle, order: layoutSectionOrder } as any);\n        ensureLayoutPropertyView(next, {\n          name: field,\n          layout: { label: { visible: false }, positions: { lg: { colSpan, order: propertyLayoutOrder } } },\n        } as any);\n        return next;\n      });\n\n      ctx.interfaces.master.create.update((create) => {\n        const next = cloneLayoutArrays((create ?? { sections: [], properties: [] }) as any);\n        ensureLayoutSection(next, { id: sectionId, title: sectionTitle, order: layoutSectionOrder } as any);\n        ensureLayoutPropertyView(next, {\n          name: field,\n          layout: { label: { visible: false }, positions: { lg: { colSpan, order: 6 } } },\n        } as any);\n        return next;\n      });\n\n      ctx.interfaces.master.modify.update((modify) => {\n        const next = cloneLayoutArrays((modify ?? { sections: [], properties: [] }) as any);\n        ensureLayoutSection(next, { id: sectionId, title: sectionTitle, order: layoutSectionOrder } as any);\n        ensureLayoutPropertyView(next, {\n          name: field,\n          layout: { label: { visible: false }, positions: { lg: { colSpan, order: 6 } } },\n        } as any);\n        return next;\n      });\n    } else {\n      ctx.entity.pages ??= [];\n      const pageExists = ctx.entity.pages.some(\n        (p: any) => p.componentKey === ATTACHMENTS_PAGE_COMPONENT_KEY && (p as any).field === field,\n      );\n      const pageOrder = resolveEntityPluginDetailPageOrder(\n        { relatedEntities: ctx.entity.relatedEntities, pages: ctx.entity.pages },\n        'attachments',\n        {\n          componentKey: ATTACHMENTS_PAGE_COMPONENT_KEY,\n          field,\n          skipPage: pageExists\n            ? { componentKey: ATTACHMENTS_PAGE_COMPONENT_KEY, field }\n            : undefined,\n        },\n      );\n      const page: any = {\n        componentKey: ATTACHMENTS_PAGE_COMPONENT_KEY,\n        title: displayTitle,\n        icon: DEFAULT_ATTACHMENTS_PAGE_ICON,\n        layout: { order: pageOrder },\n        field,\n      };\n      if (!pageExists) {\n        ctx.entity.pages.push(page);\n      } else {\n        const pages = ctx.entity.pages as any[];\n        const index = pages.findIndex(\n          (p) => p.componentKey === ATTACHMENTS_PAGE_COMPONENT_KEY && p.field === field,\n        );\n        if (index >= 0) {\n          pages[index] = { ...pages[index], ...page };\n        }\n      }\n    }\n\n    // Ensure list action to open file uploader popup exists (optional)\n    const showListAction = opts.showListAction ?? true;\n    if (showListAction) {\n      ensureListActions(ctx);\n      ctx.interfaces.update((i) => {\n        const actions = (i as any).master.list.actions as any[];\n        const cmdName = 'show-file-uploader-popup';\n        const actionName = `attachments-${field}`;\n        if (!actionExists(actions, cmdName, actionName)) {\n          actions.push({\n            name: actionName,\n            title: '@document-management:actions.upload-files',\n            command: {\n              name: cmdName,\n              options: {...buildAttachmentsListActionCommandOptions(opts, field),\n                entity: {\n                  name: `${ctx.entity.module}.${ctx.entity.name}`,\n                  id: '{{ context.eval(\"id\") }}',\n                  field: field,\n                },\n              },\n            },\n            priority: 'secondary',\n            type: 'upload',\n            scope: AXPEntityCommandScope.Individual,\n          });\n        }\n        return i as any;\n      });\n    }\n\n    // Stamp normalized config for middleware\n    (ctx.entity as any).extensions ??= {};\n    (ctx.entity as any).extensions.attachments ??= {};\n    (ctx.entity as any).extensions.attachments[field] = { title: displayTitle, display: displayMode };\n  },\n};\n","import {\n  AXPPageComponentDefinition,\n  AXPPageComponentProvider,\n} from '@acorex/platform/layout/components';\nimport { Injectable } from '@angular/core';\nimport { ATTACHMENTS_PAGE_COMPONENT_KEY } from '../attachments.plugin';\n\n//#region ----   Attachments Page Component Provider   ----\n\n@Injectable()\nexport class AXMAttachmentsPageComponentProvider implements AXPPageComponentProvider {\n  async components(): Promise<AXPPageComponentDefinition[]> {\n    return [\n      {\n        key: ATTACHMENTS_PAGE_COMPONENT_KEY,\n        loader: () =>\n          import('./attachments-page.component').then((m) => m.AXMAttachmentsPageComponent),\n      },\n    ];\n  }\n}\n\n//#endregion\n","import { AXP_ENTITY_ACTION_PLUGIN } from '../../plugins/types';\nimport { NgModule } from '@angular/core';\nimport { attachmentsPlugin } from './attachments.plugin';\nimport { AXMAttachmentsPageComponentProvider } from './attachments-page/attachments-page-component.provider';\nimport { AXP_PAGE_COMPONENT_PROVIDER } from '@acorex/platform/layout/components';\n\n@NgModule({\n  declarations: [],\n  imports: [],\n  exports: [],\n  providers: [{ provide: AXP_ENTITY_ACTION_PLUGIN, multi: true, useValue: attachmentsPlugin },\n    { provide: AXP_PAGE_COMPONENT_PROVIDER, multi: true, useClass: AXMAttachmentsPageComponentProvider },\n  ],\n})\nexport class AXPAttachmentsPluginModule { }\n","import { AXPEntity } from '@acorex/platform/layout/entity-contracts';\nimport { AXDataSourceSortOption } from '@acorex/cdk/common';\nimport { AXTreeViewNode } from '@acorex/components/tree-view';\nimport { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\n\nimport { AXPMultiLanguageString } from '@acorex/platform/contracts';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\n\n//#region ----   Constants   ----\n\n/**\n * i18n key for the synthetic root node (\"all categories\"). Resolve in templates with the translate pipe.\n */\nexport const AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY = '@general:terms.interface.selection.all-items';\n\n//#endregion\n\n//#region ----   Interfaces   ----\n\nexport interface CategoryQueryEvent {\n  skip: number;\n  take: number;\n  sort?: AXDataSourceSortOption[];\n  filter?: {\n    field?: string;\n    value?: unknown;\n    operator?: { type: string };\n    filters?: unknown[];\n    logic?: string;\n  };\n}\n\nexport interface CategoryQueryResult {\n  items: Record<string, unknown>[];\n  total?: number;\n  totalCount?: number;\n}\n\nexport type CategoryQueryFunction = (event: CategoryQueryEvent) => Promise<CategoryQueryResult>;\n\nexport interface CategoryTreeConfig {\n  entityKey: string;\n  textField?: string;\n  valueField?: string;\n  parentKey?: string;\n}\n\nexport interface CategoryTreeNodeData {\n  categoryEntityDef: AXPEntity | null;\n  categoryEntityQueryFunc: CategoryQueryFunction | null;\n  basicQueryEvent: CategoryQueryEvent;\n}\n\n//#endregion\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPCategoryTreeService {\n  //#region ----   Services & Dependencies   ----\n\n  protected readonly entityResolver = inject(AXPEntityDefinitionRegistryService);\n  private readonly translation = inject(AXTranslationService);\n\n  //#endregion\n\n  //#region ----   Private Methods   ----\n\n  /** Sort field for list queries (backend); matches configured category display field. */\n  private getAlphabeticalSortOptions(config: CategoryTreeConfig): AXDataSourceSortOption[] {\n    const field = config.textField ?? 'title';\n    return [{ field, dir: 'asc' }];\n  }\n\n  /**\n   * Sort tree nodes by resolved display title (locale-aware).\n   * Ensures correct order for multi-language titles when storage order differs from UI order.\n   */\n  private sortTreeNodesByDisplayTitle(nodes: AXTreeViewNode[]): AXTreeViewNode[] {\n    return [...nodes].sort((a, b) =>\n      String(a['title'] ?? '').localeCompare(String(b['title'] ?? ''), undefined, {\n        sensitivity: 'base',\n        numeric: true,\n      }),\n    );\n  }\n\n  //#endregion\n\n  //#region ----   Public Methods   ----\n\n  /**\n   * Initialize category tree data source\n   */\n  async initializeCategoryTree(config: CategoryTreeConfig): Promise<CategoryTreeNodeData | null> {\n    const { entityKey } = config;\n    if (!entityKey) {\n      return null;\n    }\n\n    try {\n      const [module, entity] = entityKey.split('.');\n      if (!module || !entity) {\n        return null;\n      }\n\n      const categoryEntityDef = await this.entityResolver.resolve(module, entity);\n      if (!categoryEntityDef?.queries?.list?.execute || typeof categoryEntityDef.queries.list.execute !== 'function') {\n        return null;\n      }\n\n      const categoryEntityQueryFunc = categoryEntityDef.queries.list.execute as CategoryQueryFunction;\n      const basicQueryEvent: CategoryQueryEvent = {\n        skip: 0,\n        take: 1000,\n      };\n\n      return {\n        categoryEntityDef,\n        categoryEntityQueryFunc,\n        basicQueryEvent,\n      };\n    } catch (error) {\n      console.error('Error initializing category tree:', error);\n      return null;\n    }\n  }\n\n  /**\n   * Create root node with children from items\n   */\n  async createRootNode(items: Record<string, unknown>[], config: CategoryTreeConfig): Promise<AXTreeViewNode> {\n    const textField = config.textField ?? 'title';\n    const valueField = config.valueField ?? 'id';\n    const rootTitleKey = AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY;\n\n    const rootNode: AXTreeViewNode = {\n      id: 'all',\n      title: rootTitleKey,\n      icon: 'fa-solid fa-folder',\n      childrenCount: items.length,\n      expanded: true,\n      data: { [valueField]: 'all', [textField]: rootTitleKey },\n    };\n\n    const childNodes: AXTreeViewNode[] = this.sortTreeNodesByDisplayTitle(\n      items.map((item) => this.convertToTreeNode(item, config)),\n    );\n    rootNode['children'] = childNodes;\n\n    return rootNode;\n  }\n\n  /**\n   * Convert entity item to AXTreeViewNode format\n   */\n  convertToTreeNode(item: Record<string, unknown>, config: CategoryTreeConfig): AXTreeViewNode {\n    const textField = config.textField ?? 'title';\n    const valueField = config.valueField ?? 'id';\n\n    // Determine childrenCount properly:\n    // - Use explicit childrenCount from backend if it's a number (including 0)\n    // - Or use children array length if available\n    // - Default to undefined to indicate \"unknown\" - this allows lazy loading to work\n    let childrenCount: number | undefined;\n    if (typeof item['childrenCount'] === 'number') {\n      childrenCount = item['childrenCount'];\n    } else if (Array.isArray(item['children'])) {\n      childrenCount = (item['children'] as unknown[]).length;\n    }\n\n    const rawTitle = item[textField];\n    const titleText = resolveMultiLanguageString(rawTitle as AXPMultiLanguageString, this.translation.getActiveLang());\n\n    return {\n      id: String(item[valueField] ?? ''),\n      title: titleText,\n      icon: 'fa-solid fa-folder',\n      childrenCount,\n      expanded: false,\n      data: item,\n    };\n  }\n\n  /**\n   * Load root categories\n   */\n  async loadRootCategories(\n    treeData: CategoryTreeNodeData,\n    config: CategoryTreeConfig,\n  ): Promise<Record<string, unknown>[] | null> {\n    if (!treeData.categoryEntityQueryFunc) {\n      return null;\n    }\n\n    try {\n      const res = await treeData.categoryEntityQueryFunc({\n        ...treeData.basicQueryEvent,\n        sort: this.getAlphabeticalSortOptions(config),\n      });\n      return res?.items ?? null;\n    } catch (error) {\n      console.error('Error loading root categories:', error);\n      return null;\n    }\n  }\n\n  /**\n   * Fetches a single category item by ID. Uses byKey when available (full item with parent),\n   * otherwise falls back to list query with filter so ancestor chains can be built.\n   */\n  async fetchItemById(\n    id: string,\n    treeData: CategoryTreeNodeData,\n    config: CategoryTreeConfig,\n  ): Promise<Record<string, unknown> | null> {\n    const byKey = treeData.categoryEntityDef?.queries?.byKey?.execute as\n      | ((key: string) => Promise<Record<string, unknown> | null>)\n      | undefined;\n    if (typeof byKey === 'function') {\n      try {\n        const item = await byKey(id);\n        return item ?? null;\n      } catch (error) {\n        console.error('Error fetching category by key:', error);\n        return null;\n      }\n    }\n\n    if (!treeData.categoryEntityQueryFunc) return null;\n    try {\n      const valueField = config.valueField ?? 'id';\n      const event: CategoryQueryEvent = {\n        ...treeData.basicQueryEvent,\n        filter: {\n          field: valueField,\n          value: id,\n          operator: { type: 'equal' },\n        },\n      };\n      const res = await treeData.categoryEntityQueryFunc(event);\n      return res?.items?.[0] ?? null;\n    } catch (error) {\n      console.error('Error fetching category by id:', error);\n      return null;\n    }\n  }\n\n  /**\n   * Load children for a given node\n   */\n  async loadChildren(\n    node: AXTreeViewNode,\n    treeData: CategoryTreeNodeData,\n    config: CategoryTreeConfig,\n  ): Promise<AXTreeViewNode[]> {\n    if (!treeData.categoryEntityQueryFunc || !treeData.categoryEntityDef?.parentKey) {\n      return [];\n    }\n\n    try {\n      const event: CategoryQueryEvent = {\n        ...treeData.basicQueryEvent,\n        sort: this.getAlphabeticalSortOptions(config),\n        filter: {\n          field: treeData.categoryEntityDef.parentKey,\n          value: node['id'],\n          operator: { type: 'equal' },\n        },\n      };\n\n      const res = await treeData.categoryEntityQueryFunc(event);\n      if (!res?.items) {\n        return [];\n      }\n\n      return this.sortTreeNodesByDisplayTitle(res.items.map((item) => this.convertToTreeNode(item, config)));\n    } catch (error) {\n      console.error('Error loading children:', error);\n      return [];\n    }\n  }\n\n  /**\n   * Search categories recursively (all levels)\n   */\n  async searchCategories(\n    searchValue: string,\n    treeData: CategoryTreeNodeData,\n    config: CategoryTreeConfig,\n  ): Promise<Record<string, unknown>[] | null> {\n    if (!treeData.categoryEntityDef || !treeData.categoryEntityQueryFunc) {\n      return null;\n    }\n\n    try {\n      const categoryInlineFilters = treeData.categoryEntityDef.properties.filter(\n        (p) => p.options?.filter?.inline?.enabled,\n      );\n\n      // Search all categories (no parent filter - recursive search)\n      const event: CategoryQueryEvent = {\n        ...treeData.basicQueryEvent,\n        sort: this.getAlphabeticalSortOptions(config),\n        filter: {\n          filters: categoryInlineFilters.map((cif) => ({\n            field: cif.name,\n            operator: {\n              type: 'contains',\n            },\n            value: searchValue,\n          })),\n          logic: 'or',\n        },\n      };\n\n      const res = await treeData.categoryEntityQueryFunc(event);\n      return res?.items ?? null;\n    } catch (error) {\n      console.error('Error searching categories:', error);\n      return null;\n    }\n  }\n\n  /**\n   * Update children at a specific node in the tree\n   */\n  updateChildrenAtPath(nodes: AXTreeViewNode[], targetId: string, childNodes: AXTreeViewNode[]): AXTreeViewNode[] {\n    return nodes.map((node) => {\n      if (node['id'] === targetId) {\n        return { ...node, ['children']: childNodes, childrenCount: childNodes.length };\n      }\n      const nodeChildren = node['children'] as AXTreeViewNode[] | undefined;\n      if (nodeChildren?.length) {\n        return { ...node, ['children']: this.updateChildrenAtPath(nodeChildren, targetId, childNodes) };\n      }\n      return node;\n    });\n  }\n\n  //#endregion\n}\n","import { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXTreeViewComponent, AXTreeViewNode, AXTreeViewNodeSelectEvent } from '@acorex/components/tree-view';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPMultiLanguageString } from '@acorex/platform/contracts';\nimport { AXHighlightService } from '@acorex/platform/core';\nimport { AXPStateMessageComponent } from '@acorex/platform/layout/components';\nimport { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  computed,\n  effect,\n  inject,\n  OnInit,\n  signal,\n  viewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n  AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY,\n  AXPCategoryTreeService,\n  CategoryTreeConfig,\n  CategoryTreeNodeData,\n} from '../../services/entity-category/category-tree.service';\n\n@Component({\n  selector: 'axp-entity-category-tree-selector',\n  template: `\n    <div class=\"ax-flex ax-flex-col ax-h-full\">\n      @if (loading()) {\n        <div class=\"ax-p-4 ax-flex ax-flex-col ax-gap-3\">\n          @for (i of [1, 2, 3, 4]; track i) {\n            <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded-md\"></ax-skeleton>\n          }\n        </div>\n      } @else if (treeData) {\n        <div class=\"ax-flex ax-flex-col ax-flex-1 ax-min-h-0\">\n          <div class=\"ax-p-4 ax-border-b ax-flex ax-flex-col ax-gap-2\">\n            <ax-search-box\n              (onValueChanged)=\"handleSearchChange($event)\"\n              [value]=\"searchValue()\"\n              [delayTime]=\"300\"\n              [placeholder]=\"searchPlaceholder()\"\n            ></ax-search-box>\n            @if (isSearching() && searchValue().trim()) {\n              <div class=\"ax-text-xs ax-text-muted ax-flex ax-items-center ax-gap-1\">\n                <span>{{ '@general:terms.interface.category.search.searching' | translate | async }}</span>\n              </div>\n            } @else if (searchValue().trim() && !isSearching()) {\n              <div class=\"ax-text-xs ax-text-muted ax-flex ax-items-center ax-gap-1\">\n                @if (searchResultCount() > 0) {\n                  <span>{{ resultsFoundText() | translate | async }}</span>\n                }\n              </div>\n            }\n          </div>\n          @if (showNoSearchResults()) {\n            <div class=\"ax-flex-1 ax-flex ax-items-center ax-justify-center\">\n              <axp-state-message\n                icon=\"fa-light fa-search\"\n                [title]=\"'@general:terms.interface.category.search.no-results-found.title'\"\n                [description]=\"'@general:terms.interface.category.search.no-results-found.description'\"\n              >\n              </axp-state-message>\n            </div>\n          } @else {\n            <div class=\"ax-flex-1 ax-overflow-auto ax-p-4\">\n              <ax-tree-view\n                [datasource]=\"datasource\"\n                [dragBehavior]=\"'none'\"\n                [selectMode]=\"allowMultiple() ? 'multiple' : 'single'\"\n                [selectionBehavior]=\"allowMultiple() ? 'intermediate-nested' : 'all'\"\n                [controlledSelection]=\"!allowMultiple()\"\n                [selectedIds]=\"selectedNodeIds()\"\n                (selectedIdsChange)=\"onControlledSelectedIdsChange($event)\"\n                [showIcons]=\"true\"\n                [titleField]=\"textField()\"\n                [idField]=\"valueField()\"\n                (onNodeSelect)=\"onNodeSelect($event)\"\n                [nodeTemplate]=\"itemTemplate\"\n                #tree\n              >\n              </ax-tree-view>\n\n              <ng-template #itemTemplate let-node=\"node\" let-level=\"level\">\n                @if (node) {\n                  @let item = node.data || node;\n                  @let tf = textField();\n                  @let rawLabel = item[tf] ?? node.title;\n                  <div class=\"ax-flex ax-items-center ax-gap-2 ax-w-full ax-overflow-hidden ax-p-2 ax-pe-0\">\n                    <!-- @if (allowMultiple()) {\n                      <ax-check-box\n                        [ngModel]=\"node['indeterminate'] ? null : node['selected'] || false\"\n                        [indeterminate]=\"node['indeterminate'] || false\"\n                        (onValueChanged)=\"handleCheckboxChange(node.id, $event.value)\"\n                        (click)=\"$event.stopPropagation()\"\n                        (pointerdown)=\"$event.stopPropagation()\"\n                        [disabled]=\"node.disabled || node.id === 'all'\"\n                      ></ax-check-box>\n                    } -->\n                    <ax-icon\n                      class=\"fas fa-folder\"\n                      [style.color]=\"item.color ?? 'rgba(var(--ax-sys-color-warning-500), 1)'\"\n                    ></ax-icon>\n                    <span class=\"ax-truncate\">\n                      @if (node.id === 'all') {\n                        {{ categoryTreeRootTitleI18nKey | translate | async }}\n                      } @else {\n                        {{ rawLabel | translate | async }}\n                      }\n                    </span>\n                  </div>\n                }\n              </ng-template>\n            </div>\n          }\n        </div>\n      } @else {\n        <div class=\"ax-flex-1 ax-flex ax-items-center ax-justify-center\">\n          <axp-state-message\n            icon=\"fa-light fa-folder-open\"\n            [title]=\"'@general:terms.interface.category.search.no-records.title'\"\n            [description]=\"'@general:terms.interface.category.search.no-records.description'\"\n          >\n          </axp-state-message>\n        </div>\n      }\n    </div>\n    <ax-footer>\n      @if (allowMultiple() && selectedNodeIds().length > 0) {\n        <ax-prefix>\n          <div class=\"ax-flex ax-items-center ax-gap-2\">\n            <ax-badge [text]=\"selectedNodeIds().length.toString()\" color=\"primary\"></ax-badge>\n            <span class=\"ax-text-base ax-font-medium ax-text-text-primary\">\n              {{ '@general:terms.interface.items-selected' | translate | async }}\n            </span>\n            <ax-button\n              look=\"blank\"\n              color=\"ghost\"\n              class=\"ax-text-sm\"\n              [text]=\"'@general:terms.interface.unselect-all' | translate | async\"\n              (onClick)=\"onClearAll()\"\n            ></ax-button>\n          </div>\n        </ax-prefix>\n      }\n      <ax-suffix>\n        <ax-button\n          look=\"solid\"\n          [text]=\"'@general:actions.cancel.title' | translate | async\"\n          (onClick)=\"onCancel()\"\n        ></ax-button>\n        <ax-button\n          look=\"solid\"\n          color=\"primary\"\n          [text]=\"'@general:actions.ok.title' | translate | async\"\n          [disabled]=\"selectedNodeIds().length === 0\"\n          (onClick)=\"onConfirm()\"\n        ></ax-button>\n      </ax-suffix>\n    </ax-footer>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    CommonModule,\n    AXButtonModule,\n    AXBadgeModule,\n    AXCheckBoxModule,\n    AXDecoratorModule,\n    AXSearchBoxModule,\n    AXSkeletonModule,\n    AXTreeViewComponent,\n    AXTranslationModule,\n    AXPStateMessageComponent,\n    FormsModule,\n  ],\n})\nexport class AXPEntityCategoryTreeSelectorComponent extends AXBasePageComponent implements OnInit {\n  //#region ----   Services & Dependencies   ----\n\n  protected readonly categoryTreeService = inject(AXPCategoryTreeService);\n\n  /** i18n key for the synthetic \"all items\" root row; resolved in the template with the translate pipe. */\n  protected readonly categoryTreeRootTitleI18nKey = AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY;\n\n  private readonly translationService = inject(AXTranslationService);\n  protected readonly highlightService = inject(AXHighlightService);\n  private readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n  //#endregion\n\n  //#region ----   Properties (Set by popup service)   ----\n\n  entityKey = signal<string>('');\n  textField = signal<string>('title');\n  valueField = signal<string>('id');\n  allowMultiple = signal<boolean>(false);\n  selectedValues = signal<string[]>([]);\n  /** Optional input for when popup passes selected values via inputs instead of data */\n  selectedValuesInput = signal<string[]>([]);\n  searchPlaceholder = signal<string>('@general:terms.interface.category.search.placeholder');\n  excludedNodeId = signal<string | undefined>(undefined); // Node ID to disable\n  searchWithChildren = signal<boolean>(true); // Include children of search results\n\n  //#endregion\n\n  //#region ----   View Queries   ----\n\n  protected tree = viewChild<AXTreeViewComponent>('tree');\n\n  //#endregion\n\n  //#region ----   Component State   ----\n\n  protected loading = signal(true);\n  protected selectedNodeIds = signal<string[]>([]);\n  protected searchValue = signal<string>('');\n  protected searchResultCount = signal<number>(0);\n  protected isSearching = signal<boolean>(false);\n  protected resultsFoundText = signal<string>('');\n  protected noRecordsTitle = signal<string>('');\n  private currentSearchTerm: string | null = null;\n  private isRefreshing = false;\n  private isUpdatingSelection = false; // Flag to prevent recursive updates during batch operations (multiple mode)\n\n  /**\n   * Computed property to check if we should show the \"no search results\" empty state.\n   * Returns true when search is active, not searching, and no results found.\n   */\n  protected readonly showNoSearchResults = computed(() => {\n    const searchVal = this.searchValue().trim();\n    const searching = this.isSearching();\n    const resultCount = this.searchResultCount();\n    return searchVal.length > 0 && !searching && resultCount === 0;\n  });\n\n  //#endregion\n\n  //#region ----   Private Properties   ----\n\n  protected treeData: CategoryTreeNodeData | null = null;\n  private treeConfig: CategoryTreeConfig | null = null;\n  private nodeDataCache = new Map<string, Record<string, unknown>>(); // Cache node data by id for getSelectedItems\n  private matchingNodeIds = new Set<string>(); // IDs of nodes matching search term\n  private relevantNodeIds = new Set<string>(); // For search filtering\n  private expandedNodesBeforeSearch: string[] = []; // Store expanded nodes before search to restore after\n  private nodesExpandedDuringSearch: string[] = []; // Track nodes we expanded during search\n  private initialExpandSyncDone = false;\n\n  //#endregion\n\n  //#region ----   Lifecycle Methods   ----\n\n  constructor() {\n    super();\n    // When popup sets data after ngOnInit, run initial expand/sync when we get selected ids and tree is ready\n    effect(() => {\n      if (this.initialExpandSyncDone) return;\n      const loading = this.loading();\n      const fromData = this.selectedValues().filter((id) => id && id !== 'all');\n      const fromInput = (this.selectedValuesInput() ?? []).filter((id) => id && id !== 'all');\n      const ids = fromData.length > 0 ? fromData : fromInput;\n      if (loading || ids.length === 0 || !this.treeData || !this.treeConfig) return;\n      if (this.selectedNodeIds().length > 0) return; // already set in initializeTree\n      this.initialExpandSyncDone = true;\n      this.runInitialExpandAndSync(ids);\n    });\n  }\n\n  override ngOnInit(): void {\n    super.ngOnInit();\n    this.initializeTree();\n  }\n\n  //#endregion\n\n  //#region ----   Private Methods   ----\n\n  /** Keeps at most one id when {@link allowMultiple} is false. */\n  private normalizeSelectedIds(ids: readonly string[]): string[] {\n    const filtered = ids.filter((id) => id && id !== 'all');\n    if (this.allowMultiple()) {\n      return [...filtered];\n    }\n    return filtered.length > 0 ? [filtered[filtered.length - 1]] : [];\n  }\n\n  private setSelectedNodeIds(ids: readonly string[]): void {\n    this.selectedNodeIds.set(this.normalizeSelectedIds(ids));\n  }\n\n  /** Keeps widget selectedNodeIds in sync when the tree uses controlled single selection. */\n  protected onControlledSelectedIdsChange(ids: string[]): void {\n    if (this.allowMultiple()) {\n      return;\n    }\n    this.setSelectedNodeIds(ids);\n  }\n\n  private async waitForTreeComponent(maxWaitMs = 3500): Promise<AXTreeViewComponent | undefined> {\n    const deadline = Date.now() + maxWaitMs;\n    while (Date.now() < deadline) {\n      const treeComponent = this.tree();\n      if (treeComponent) {\n        return treeComponent;\n      }\n      await new Promise((resolve) => setTimeout(resolve, 80));\n    }\n    return undefined;\n  }\n\n  /** Expands ancestor paths and reveals the initial selection via the tree API. */\n  private async revealInitialSelection(ids: string[]): Promise<void> {\n    const normalizedIds = this.normalizeSelectedIds(ids);\n    if (normalizedIds.length === 0) {\n      return;\n    }\n\n    const treeComponent = await this.waitForTreeComponent();\n    if (!treeComponent) {\n      return;\n    }\n\n    try {\n      if (this.allowMultiple()) {\n        await this.restoreMultipleSelectionAfterReload(normalizedIds);\n      } else {\n        const chains = await this.buildAncestorChains(normalizedIds);\n        const ancestorPaths = normalizedIds.map((id) => chains.get(id) ?? []);\n        await treeComponent.selectAndReveal(normalizedIds, { ancestorPaths });\n      }\n    } catch (error) {\n      console.error('Error revealing initial category selection:', error);\n    }\n\n    this.changeDetectorRef.markForCheck();\n  }\n\n  private async initializeTree(): Promise<void> {\n    if (!this.entityKey()) {\n      this.loading.set(false);\n      return;\n    }\n\n    this.loading.set(true);\n\n    try {\n      this.treeConfig = {\n        entityKey: this.entityKey(),\n        textField: this.textField(),\n        valueField: this.valueField(),\n      };\n\n      this.treeData = await this.categoryTreeService.initializeCategoryTree(this.treeConfig);\n      if (!this.treeData) {\n        this.loading.set(false);\n        return;\n      }\n\n      // Get parentKey from entity definition\n      if (this.treeData.categoryEntityDef?.parentKey) {\n        this.treeConfig.parentKey = this.treeData.categoryEntityDef.parentKey;\n      }\n\n      // Resolve initial selected IDs from data (popup) or input binding\n      const fromData = this.selectedValues().filter((id) => id && id !== 'all');\n      const fromInput = (this.selectedValuesInput() ?? []).filter((id) => id && id !== 'all');\n      const initialSelectedIds = this.normalizeSelectedIds(fromData.length > 0 ? fromData : fromInput);\n\n      if (initialSelectedIds.length > 0) {\n        await this.loadMissingNodeData(initialSelectedIds);\n        // Re-fetch any node that has no parent info (batch query may return minimal fields)\n        await this.ensureParentDataInCache(initialSelectedIds);\n        this.setSelectedNodeIds(initialSelectedIds);\n      }\n    } catch (error) {\n      console.error('Error loading entity definition:', error);\n    } finally {\n      // Now let tree render by setting loading to false\n      this.loading.set(false);\n    }\n\n    // AFTER tree renders: wait for tree to exist, then expand path and sync selection\n    const selectedIds = this.selectedNodeIds();\n    if (selectedIds.length > 0) {\n      this.initialExpandSyncDone = true;\n      void this.revealInitialSelection(selectedIds);\n    }\n  }\n\n  /**\n   * Called when popup data arrives after ngOnInit: load data, set selection, expand and sync.\n   */\n  private runInitialExpandAndSync(ids: string[]): void {\n    this.setSelectedNodeIds(ids);\n    Promise.resolve()\n      .then(() => this.loadMissingNodeData(ids))\n      .then(() => this.ensureParentDataInCache(ids))\n      .then(() => this.revealInitialSelection(ids))\n      .catch((err) => console.error('Error in runInitialExpandAndSync:', err));\n  }\n\n  //#endregion\n\n  //#region ----   Public Methods   ----\n\n  /**\n   * Handles search input value changes - Uses server-side search for efficiency and reliability\n   */\n  async handleSearchChange(event: AXValueChangedEvent<string>): Promise<void> {\n    if (!this.treeData || !this.treeConfig) {\n      return;\n    }\n\n    const searchTerm = (event.value ?? '').trim().toLowerCase();\n    const previousSearchTerm = this.searchValue();\n\n    // If search is cleared, always reset (even if not user interaction)\n    if (!searchTerm) {\n      if (previousSearchTerm || this.matchingNodeIds.size > 0) {\n        this.searchValue.set('');\n        this.currentSearchTerm = null;\n        await this.resetSearch();\n      }\n      return;\n    }\n\n    // For non-empty search, only process user interactions to avoid unnecessary updates\n    if (!event.isUserInteraction) {\n      return;\n    }\n\n    // Prevent concurrent searches\n    // if (this.isSearching() && this.currentSearchTerm !== null) {\n    //   if (this.currentSearchTerm === searchTerm) {\n    //     return;\n    //   }\n    // }\n\n    this.searchValue.set(event.value ?? '');\n    this.currentSearchTerm = searchTerm;\n\n    const treeComponent = this.tree();\n    if (!treeComponent) {\n      return;\n    }\n\n    // Store expanded nodes before starting a new search (only on first search)\n    if (!previousSearchTerm && this.expandedNodesBeforeSearch.length === 0) {\n      const expandedNodes = treeComponent.getExpandedNodes();\n      this.expandedNodesBeforeSearch = expandedNodes\n        .map((node) => String(node['id'] ?? ''))\n        .filter((id) => id && id !== 'all');\n    }\n\n    // Collapse nodes from previous search before starting new search\n    if (previousSearchTerm && this.nodesExpandedDuringSearch.length > 0) {\n      const nodesToCollapse = [...this.nodesExpandedDuringSearch].reverse();\n      this.nodesExpandedDuringSearch = [];\n      for (const nodeId of nodesToCollapse) {\n        // Only collapse if it wasn't originally expanded before search\n        if (!this.expandedNodesBeforeSearch.includes(nodeId)) {\n          try {\n            treeComponent.collapseNode(nodeId);\n          } catch {\n            // Node might not exist anymore, ignore\n          }\n        }\n      }\n    }\n\n    this.isSearching.set(true);\n\n    try {\n      // Step 1: Use server-side search to get matching items\n      const searchResults = await this.categoryTreeService.searchCategories(searchTerm, this.treeData, this.treeConfig);\n\n      // Check if search term changed during the API call\n      if (this.currentSearchTerm !== searchTerm) {\n        return;\n      }\n\n      if (!searchResults || searchResults.length === 0) {\n        this.matchingNodeIds.clear();\n        this.relevantNodeIds.clear();\n        this.searchResultCount.set(0);\n        await this.updateTranslatedMessages(0, searchTerm);\n        // Clear highlighting and reload tree to show all nodes\n        this.highlightService.clear();\n        await treeComponent.reloadData();\n        return;\n      }\n\n      // Store matching node IDs from search results\n      this.matchingNodeIds.clear();\n      const valueField = this.treeConfig.valueField || 'id';\n      searchResults.forEach((item) => {\n        const nodeId = String(item[valueField] ?? '');\n        if (nodeId) {\n          this.matchingNodeIds.add(nodeId);\n          // Cache node data\n          this.nodeDataCache.set(nodeId, item);\n        }\n      });\n\n      const resultCount = searchResults.length;\n      this.searchResultCount.set(resultCount);\n\n      // Update translated messages\n      await this.updateTranslatedMessages(resultCount, searchTerm);\n\n      // Step 2: Collect parent IDs (builds relevantNodeIds for filtering)\n      const parentsToExpand = await this.collectParentIds(searchResults);\n\n      // Step 2.5: Collect children IDs if searchWithChildren is enabled\n      if (this.searchWithChildren()) {\n        await this.collectChildrenIds(searchResults);\n      }\n\n      // Step 3: Reload tree to apply filtering\n      await treeComponent.reloadData();\n\n      // Step 4: Expand root node\n      if (!treeComponent.isNodeExpanded('all')) {\n        try {\n          await treeComponent.expandNode('all');\n          this.nodesExpandedDuringSearch.push('all');\n        } catch {\n          // Root might not exist\n        }\n      }\n\n      // Step 4: Expand all parent nodes in order (from root to leaves)\n      // Expand nodes sequentially to maintain proper order (parent before children)\n      const sortedParents = await this.sortParentsByDepth(Array.from(parentsToExpand));\n      for (const parentId of sortedParents) {\n        // Only expand if not already expanded\n        if (!treeComponent.isNodeExpanded(parentId)) {\n          try {\n            await treeComponent.expandNode(parentId);\n            this.nodesExpandedDuringSearch.push(parentId);\n            // Small delay to prevent overwhelming the tree component\n            await new Promise((resolve) => setTimeout(resolve, 10));\n          } catch {\n            // Node might not exist, ignore\n          }\n        }\n      }\n\n      // Step 5: Apply highlighting after tree is rendered\n      // Use setTimeout to ensure DOM is updated after tree reload\n      setTimeout(() => {\n        if (this.searchValue().trim()) {\n          this.highlightService.highlight('ax-tree-view .ax-truncate', this.searchValue().trim());\n        }\n      }, 100);\n    } catch (error) {\n      console.error('Error searching categories:', error);\n      this.matchingNodeIds.clear();\n      this.relevantNodeIds.clear();\n      this.searchResultCount.set(0);\n      this.highlightService.clear();\n      // Reload tree to clear any filters\n      const treeComponent = this.tree();\n      if (treeComponent) {\n        await treeComponent.reloadData();\n      }\n    } finally {\n      if (this.currentSearchTerm === searchTerm) {\n        this.currentSearchTerm = null;\n      }\n      this.isSearching.set(false);\n    }\n  }\n\n  /**\n   * Collects all parent IDs for the given search results\n   * Handles both nested 'parent' object and 'parentId' field in search results\n   * Recursively fetches parent nodes to build the full parent chain\n   */\n  private async collectParentIds(items: Record<string, unknown>[]): Promise<Set<string>> {\n    const parentsToExpand = new Set<string>();\n    const valueField = this.treeConfig?.valueField || 'id';\n    const parentKey = this.treeData?.categoryEntityDef?.parentKey || 'parentId';\n\n    // Build relevantNodeIds = matching nodes + all parents\n    this.relevantNodeIds.clear();\n    this.matchingNodeIds.forEach((id) => this.relevantNodeIds.add(id));\n\n    // Recursively extract all parent IDs\n    const extractParentIds = async (item: Record<string, unknown>): Promise<void> => {\n      // First, try to get parent from nested 'parent' object (if available)\n      const parent = item['parent'] as Record<string, unknown> | undefined;\n      if (parent) {\n        const parentId = String(parent[valueField] ?? parent['id'] ?? '');\n        if (parentId && parentId !== 'all') {\n          parentsToExpand.add(parentId);\n          this.relevantNodeIds.add(parentId); // Add to filter set\n          this.nodeDataCache.set(parentId, parent);\n          await extractParentIds(parent);\n        }\n      } else {\n        // Fallback: use parentId field and fetch parent from server\n        // Try both parentKey from entity definition and common 'parentId' field\n        const parentIdValue = item[parentKey] ?? item['parentId'];\n        if (parentIdValue) {\n          const parentId = String(parentIdValue);\n          if (parentId && parentId !== 'all') {\n            // Add to sets first\n            parentsToExpand.add(parentId);\n            this.relevantNodeIds.add(parentId);\n\n            // Fetch parent from server if not already cached\n            if (!this.nodeDataCache.has(parentId)) {\n              const parentItem = await this.fetchItemById(parentId);\n              if (parentItem) {\n                this.nodeDataCache.set(parentId, parentItem);\n                // Recursively fetch parent's parent\n                await extractParentIds(parentItem);\n              }\n            } else {\n              // Parent already in cache, recursively process it\n              const cachedParent = this.nodeDataCache.get(parentId);\n              if (cachedParent) {\n                await extractParentIds(cachedParent);\n              }\n            }\n          }\n        }\n      }\n    };\n\n    // Process all items\n    for (const item of items) {\n      await extractParentIds(item);\n    }\n\n    return parentsToExpand;\n  }\n\n  /**\n   * Collects children IDs for matching search results recursively\n   * Adds all descendants (children, grandchildren, etc.) to relevantNodeIds so they appear in the filtered tree\n   */\n  private async collectChildrenIds(items: Record<string, unknown>[]): Promise<void> {\n    if (!this.treeData?.categoryEntityQueryFunc || !this.treeConfig) {\n      return;\n    }\n\n    const valueField = this.treeConfig.valueField || 'id';\n    const parentKey = this.treeData.categoryEntityDef?.parentKey;\n    if (!parentKey) {\n      return;\n    }\n\n    // For each matching node, recursively fetch all its descendants\n    for (const item of items) {\n      const nodeId = String(item[valueField] ?? '');\n      if (!nodeId || nodeId === 'all') {\n        continue;\n      }\n\n      await this.collectChildrenRecursively(nodeId, valueField, parentKey);\n    }\n  }\n\n  /**\n   * Recursively collects all descendant IDs for a given node\n   */\n  private async collectChildrenRecursively(nodeId: string, valueField: string, parentKey: string): Promise<void> {\n    if (!this.treeData?.categoryEntityQueryFunc) {\n      return;\n    }\n\n    try {\n      // Fetch children for this node\n      const event = {\n        ...this.treeData.basicQueryEvent,\n        filter: {\n          field: parentKey,\n          value: nodeId,\n          operator: { type: 'equal' },\n        },\n      };\n\n      const res = await this.treeData.categoryEntityQueryFunc(event);\n      if (res?.items && res.items.length > 0) {\n        // Add children IDs to relevantNodeIds so they appear in filtered tree\n        for (const child of res.items) {\n          const childId = String(child[valueField] ?? '');\n          if (childId && childId !== 'all') {\n            this.relevantNodeIds.add(childId);\n            // Cache child data\n            this.nodeDataCache.set(childId, child);\n            // Recursively fetch children of this child\n            await this.collectChildrenRecursively(childId, valueField, parentKey);\n          }\n        }\n      }\n    } catch (error) {\n      console.error(`Error fetching children for node ${nodeId}:`, error);\n    }\n  }\n\n  /**\n   * Fetches a single item by ID. Uses category tree service so byKey is used when available\n   * (returns full item with parent/parentId for building ancestor chains).\n   */\n  private async fetchItemById(id: string): Promise<Record<string, unknown> | null> {\n    if (!this.treeData || !this.treeConfig) return null;\n    return this.categoryTreeService.fetchItemById(id, this.treeData, this.treeConfig);\n  }\n\n  /**\n   * Sorts parent IDs by their depth (root first, leaves last)\n   * Optimized to use cached data and batch fetch missing items\n   */\n  private async sortParentsByDepth(parentIds: string[]): Promise<string[]> {\n    const parentKey = this.treeData?.categoryEntityDef?.parentKey;\n    if (!parentKey || parentIds.length === 0) {\n      return parentIds;\n    }\n\n    // Build depth map using cached data first\n    const depthMap = new Map<string, number>();\n    const itemCache = new Map<string, Record<string, unknown>>();\n    const missingIds = new Set<string>();\n\n    // First pass: calculate depth using cached data, collect missing IDs\n    for (const parentId of parentIds) {\n      if (depthMap.has(parentId)) {\n        continue;\n      }\n\n      let depth = 0;\n      let currentId: string | null = parentId;\n      const visited = new Set<string>();\n\n      while (currentId && currentId !== 'all' && !visited.has(currentId)) {\n        visited.add(currentId);\n        depth++;\n\n        // Check cache first\n        let item = this.nodeDataCache.get(currentId);\n        if (!item) {\n          item = itemCache.get(currentId);\n        }\n\n        // If still not found, mark for batch fetch\n        if (!item) {\n          missingIds.add(currentId);\n          break;\n        }\n\n        itemCache.set(currentId, item);\n        currentId = this.getParentIdFromNodeData(item);\n      }\n\n      if (missingIds.size === 0 || !missingIds.has(parentId)) {\n        depthMap.set(parentId, depth);\n      }\n    }\n\n    // Batch fetch missing items in parallel\n    if (missingIds.size > 0) {\n      const fetchPromises = Array.from(missingIds).map((id) => this.fetchItemById(id));\n      const fetchedItems = await Promise.all(fetchPromises);\n\n      fetchedItems.forEach((item, index) => {\n        if (item) {\n          const id = Array.from(missingIds)[index];\n          itemCache.set(id, item);\n          this.nodeDataCache.set(id, item);\n        }\n      });\n\n      // Second pass: calculate depth for items that were missing\n      for (const parentId of parentIds) {\n        if (depthMap.has(parentId)) {\n          continue;\n        }\n\n        let depth = 0;\n        let currentId: string | null = parentId;\n        const visited = new Set<string>();\n\n        while (currentId && currentId !== 'all' && !visited.has(currentId)) {\n          visited.add(currentId);\n          depth++;\n\n          const item: Record<string, unknown> | undefined =\n            this.nodeDataCache.get(currentId) || itemCache.get(currentId);\n          if (item) {\n            currentId = this.getParentIdFromNodeData(item);\n          } else {\n            break;\n          }\n        }\n\n        depthMap.set(parentId, depth);\n      }\n    }\n\n    // Sort by depth (lower depth = closer to root = expand first)\n    return parentIds.sort((a, b) => {\n      const depthA = depthMap.get(a) ?? 0;\n      const depthB = depthMap.get(b) ?? 0;\n      return depthA - depthB;\n    });\n  }\n\n  /**\n   * Updates translated messages for search results\n   */\n  private async updateTranslatedMessages(resultCount: number, searchTerm: string): Promise<void> {\n    if (resultCount > 0) {\n      const key =\n        resultCount === 1\n          ? '@general:terms.interface.category.search.results-found.singular'\n          : '@general:terms.interface.category.search.results-found.plural';\n      const text = await this.translationService.translateAsync(key, { params: { count: resultCount } });\n      this.resultsFoundText.set(text);\n    } else {\n      this.resultsFoundText.set('');\n    }\n\n    // Update no records title\n    const noRecordsTitleKey = '@general:terms.interface.category.search.no-records.title';\n    const noRecordsTitleText = await this.translationService.translateAsync(noRecordsTitleKey, {\n      params: { term: searchTerm },\n    });\n    this.noRecordsTitle.set(noRecordsTitleText);\n  }\n\n  /**\n   * Resets search state and restores tree to original expanded state\n   */\n  private async resetSearch(): Promise<void> {\n    // Clear all search-related state\n    this.searchResultCount.set(0);\n    this.resultsFoundText.set('');\n    this.noRecordsTitle.set('');\n    this.currentSearchTerm = null;\n    this.isSearching.set(false);\n    this.matchingNodeIds.clear();\n    this.relevantNodeIds.clear();\n    // Clear highlighting\n    this.highlightService.clear();\n\n    const treeComponent = this.tree();\n    if (!treeComponent) {\n      this.expandedNodesBeforeSearch = [];\n      this.nodesExpandedDuringSearch = [];\n      return;\n    }\n\n    const expandTargetIds = [...this.selectedNodeIds()];\n\n    // Reload tree to show all nodes (no filtering)\n    await treeComponent.reloadData();\n\n    // Collapse nodes that were expanded during search (in reverse order - leaves first)\n    const nodesToCollapse = [...this.nodesExpandedDuringSearch].reverse();\n    this.nodesExpandedDuringSearch = [];\n\n    for (const nodeId of nodesToCollapse) {\n      // Only collapse if it wasn't originally expanded before search\n      if (!this.expandedNodesBeforeSearch.includes(nodeId)) {\n        try {\n          treeComponent.collapseNode(nodeId);\n        } catch {\n          // Node might not exist anymore, ignore\n        }\n      }\n    }\n\n    // Clear the stored expanded nodes\n    this.expandedNodesBeforeSearch = [];\n\n    // Restore selection state after tree reload\n    if (expandTargetIds.length > 0) {\n      if (!this.allowMultiple()) {\n        await this.revealInitialSelection(expandTargetIds);\n      } else {\n        await this.restoreMultipleSelectionAfterReload(expandTargetIds);\n      }\n    }\n  }\n\n  /**\n   * Restores multiple-mode leaf selection after search reset.\n   */\n  private async restoreMultipleSelectionAfterReload(selectedLeafIds: string[]): Promise<void> {\n    const treeComponent = this.tree();\n    const normalizedIds = this.normalizeSelectedIds(selectedLeafIds);\n    if (!treeComponent || normalizedIds.length === 0) {\n      return;\n    }\n\n    this.isUpdatingSelection = true;\n    try {\n      const ancestorChains = await this.buildAncestorChains(normalizedIds);\n      await this.expandAncestorNodesInOrder(ancestorChains);\n\n      for (const id of normalizedIds) {\n        try {\n          treeComponent.selectNode(id);\n        } catch {\n          // Node might not be loaded yet\n        }\n      }\n\n      await this.updateParentStatesAfterSelection(normalizedIds);\n      treeComponent.refresh();\n    } finally {\n      this.isUpdatingSelection = false;\n    }\n  }\n\n  protected async onNodeSelect(event: AXTreeViewNodeSelectEvent): Promise<void> {\n    const node = event.node;\n    const nodeId = String(node['id'] ?? '');\n    if (!node) {\n      return;\n    }\n\n    // Only process USER interactions, not programmatic selections\n    // This prevents infinite loops when datasource callback syncs selection\n    if (!event.isUserInteraction) {\n      return;\n    }\n\n    // Cache node data for getSelectedItems (except for 'all' node)\n    if (nodeId !== 'all') {\n      const nodeData = node['data'];\n      if (nodeData && typeof nodeData === 'object' && nodeData !== null && !Array.isArray(nodeData)) {\n        this.nodeDataCache.set(nodeId, nodeData as Record<string, unknown>);\n      }\n    }\n\n    // Single selection is handled by the tree controlledSelection + selectedIds binding.\n    if (!this.allowMultiple()) {\n      return;\n    }\n\n    const isSelected = node['selected'] === true;\n\n    const children = node['children'] as unknown[] | undefined;\n    const childrenCount = node['childrenCount'] as number | undefined;\n\n    // Determine if this node has children (is a parent node)\n    // A node has children if: childrenCount > 0, or has non-empty children array\n    // Note: childrenCount === undefined means \"unknown\" - we need to check via datasource\n    const hasLoadedChildren = children && children.length > 0;\n    const hasChildrenCount = childrenCount !== undefined && childrenCount > 0;\n    const isDefinitelyLeaf = childrenCount === 0 && (!children || children.length === 0);\n\n    if (isSelected) {\n      // SELECTION: Only add LEAF nodes to selectedNodeIds\n      this.isUpdatingSelection = true;\n      try {\n        if (nodeId === 'all') {\n          // \"All Items\" selected - recursively select all leaf descendants\n          await this.selectAllLeafDescendants(nodeId);\n        } else if (isDefinitelyLeaf) {\n          // This is definitely a leaf node - add it directly\n          const currentSelected = new Set(this.selectedNodeIds());\n          currentSelected.add(nodeId);\n          this.setSelectedNodeIds(Array.from(currentSelected));\n        } else if (hasLoadedChildren || hasChildrenCount) {\n          // This node has children - only add its leaf descendants\n          await this.selectAllLeafDescendants(nodeId);\n        } else {\n          // childrenCount is undefined - fetch once and reuse to avoid double datasource call\n          const childNodes = await this.datasource(nodeId);\n          if (!childNodes || childNodes.length === 0) {\n            // No children - this is a leaf node, add it\n            const currentSelected = new Set(this.selectedNodeIds());\n            currentSelected.add(nodeId);\n            this.setSelectedNodeIds(Array.from(currentSelected));\n          } else {\n            // Has children - pass prefetched childNodes to avoid datasource(nodeId) again\n            await this.selectAllLeafDescendants(nodeId, childNodes);\n          }\n        }\n      } finally {\n        this.isUpdatingSelection = false;\n      }\n    } else {\n      // DESELECTION: Remove node (if leaf) and all leaf descendants from selectedNodeIds\n      this.isUpdatingSelection = true;\n      try {\n        await this.deselectAllLeafDescendants(nodeId);\n      } finally {\n        this.isUpdatingSelection = false;\n      }\n    }\n  }\n\n  /** Datasource callback for tree-view component. */\n  protected datasource = async (id?: string): Promise<AXTreeViewNode[]> => {\n    if (!this.treeData || !this.treeConfig) {\n      return [];\n    }\n\n    // If no id provided, return root nodes\n    if (!id) {\n      const items = await this.categoryTreeService.loadRootCategories(this.treeData, this.treeConfig);\n      if (!items) {\n        return [];\n      }\n\n      this.cacheNodeData(items);\n\n      const rootNode = await this.categoryTreeService.createRootNode(items, this.treeConfig);\n      this.processRootNode(rootNode);\n\n      // Filter root's children when search is active\n      if (this.relevantNodeIds.size > 0 && rootNode['children']) {\n        rootNode['children'] = (rootNode['children'] as AXTreeViewNode[]).filter((child) => {\n          const childId = String(child['id'] ?? '');\n          return this.relevantNodeIds.has(childId);\n        });\n        rootNode['childrenCount'] = (rootNode['children'] as AXTreeViewNode[]).length;\n      }\n\n      return [rootNode];\n    }\n\n    // Load children for the specified parent\n    const targetNode: AXTreeViewNode = { id, title: '', data: {} };\n    let childNodes = await this.categoryTreeService.loadChildren(targetNode, this.treeData, this.treeConfig);\n\n    // Filter children when search is active\n    if (this.relevantNodeIds.size > 0) {\n      childNodes = childNodes.filter((child) => {\n        const childId = String(child['id'] ?? '');\n        return this.relevantNodeIds.has(childId);\n      });\n    }\n\n    this.cacheNodeDataFromNodes(childNodes);\n    this.processChildNodes(childNodes);\n\n    // Mark excluded node as disabled\n    const excludedId = this.excludedNodeId();\n    if (excludedId) {\n      childNodes.forEach((node) => {\n        const nodeId = String(node['id'] ?? '');\n        if (nodeId === excludedId) {\n          node['disabled'] = true;\n        }\n      });\n    }\n\n    // Mark pre-selected leaf nodes on loaded children (multiple mode only; single uses controlledSelection)\n    if (!this.isUpdatingSelection && this.allowMultiple()) {\n      const selectedIds = this.selectedNodeIds();\n      childNodes.forEach((node) => {\n        const nodeId = String(node['id'] ?? '');\n        if (nodeId && selectedIds.includes(nodeId)) {\n          node['selected'] = true;\n        }\n      });\n    }\n\n    return childNodes;\n  };\n\n  protected async onConfirm(): Promise<void> {\n    // Use internal selectedNodeIds state which is kept in sync via onNodeSelect events\n    const selectedItems = await this.getSelectedItems();\n    this.close({ selected: selectedItems });\n  }\n\n  protected async onCancel(): Promise<void> {\n    await this.close();\n  }\n\n  /**\n   * Clears all selected items\n   */\n  protected onClearAll(): void {\n    this.setSelectedNodeIds([]);\n    const treeComponent = this.tree();\n    if (treeComponent) {\n      treeComponent.deselectAll();\n    }\n  }\n\n  /**\n   * Checks if a node matches the current search term\n   */\n  protected isMatchingNode(nodeId: string): boolean {\n    return this.matchingNodeIds.has(nodeId);\n  }\n\n  /**\n   * Checks if a node is currently selected\n   */\n  protected isNodeSelected(nodeId: string | number | undefined): boolean {\n    if (!nodeId || nodeId === 'all') {\n      return false;\n    }\n    const id = String(nodeId);\n    return this.selectedNodeIds().includes(id);\n  }\n\n  /**\n   * Expands parent nodes, collects all LEAF descendants, and selects them visually.\n   * If the parent itself is a leaf (no children), it will be added.\n   * When prefetchedChildren is provided, avoids an extra datasource(parentId) call.\n   */\n  private async selectAllLeafDescendants(parentId: string, prefetchedChildren?: AXTreeViewNode[]): Promise<void> {\n    if (!this.treeData || !this.treeConfig) {\n      return;\n    }\n\n    const treeComponent = this.tree();\n\n    try {\n      const leafIds = new Set<string>();\n      // Expand and collect leaf nodes; pass prefetchedChildren to avoid duplicate API call\n      await this.collectLeafNodes(parentId, leafIds, treeComponent, prefetchedChildren);\n\n      // Also check if the parent itself is a leaf (has no children)\n      if (parentId !== 'all') {\n        const isLeaf = await this.isLeafNodeCheck(parentId);\n        if (isLeaf) {\n          leafIds.add(parentId);\n        }\n      }\n\n      if (leafIds.size === 0) {\n        return;\n      }\n\n      // Update our internal state\n      const currentSelected = new Set(this.selectedNodeIds());\n      for (const leafId of leafIds) {\n        currentSelected.add(leafId);\n      }\n      this.setSelectedNodeIds(Array.from(currentSelected));\n\n      // Select all leaf nodes visually in the tree\n      if (treeComponent) {\n        for (const leafId of leafIds) {\n          try {\n            treeComponent.selectNode(leafId);\n          } catch {\n            // Node might not be in tree yet\n          }\n        }\n      }\n    } catch (error) {\n      console.error(`Error selecting leaf descendants for node ${parentId}:`, error);\n    }\n  }\n\n  /**\n   * Removes all LEAF descendants from selectedNodeIds.\n   * For 'all' node: clears everything and uses tree's deselectAll().\n   * For other nodes: tree handles visual state via user click.\n   */\n  private async deselectAllLeafDescendants(parentId: string): Promise<void> {\n    if (!this.treeData || !this.treeConfig) {\n      return;\n    }\n\n    try {\n      // Special case: deselecting 'all' clears everything\n      if (parentId === 'all') {\n        this.setSelectedNodeIds([]);\n        // Use tree's deselectAll() to clear all visual selections\n        const treeComponent = this.tree();\n        if (treeComponent) {\n          treeComponent.deselectAll();\n        }\n        return;\n      }\n\n      const leafIds = new Set<string>();\n      await this.collectLeafNodes(parentId, leafIds);\n\n      // Also check if the parent itself is a leaf\n      const isLeaf = await this.isLeafNodeCheck(parentId);\n      if (isLeaf) {\n        leafIds.add(parentId);\n      }\n\n      if (leafIds.size === 0) {\n        return;\n      }\n\n      // Only update our internal state - tree handles visual state\n      const currentSelected = this.selectedNodeIds();\n      const newSelected = currentSelected.filter((id) => !leafIds.has(id));\n      this.setSelectedNodeIds(newSelected);\n    } catch (error) {\n      console.error(`Error deselecting leaf descendants for node ${parentId}:`, error);\n    }\n  }\n\n  /**\n   * Recursively expands parent nodes and collects LEAF node IDs.\n   * When treeComponent is provided, expands each parent node before loading children.\n   * When prefetchedChildren is provided, uses it instead of calling datasource(parentId) (one less API call).\n   * Fetches each node's children at most once by passing grandchildren when recursing.\n   */\n  private async collectLeafNodes(\n    parentId: string,\n    collection: Set<string>,\n    treeComponent?: AXTreeViewComponent,\n    prefetchedChildren?: AXTreeViewNode[],\n  ): Promise<void> {\n    if (!this.treeData || !this.treeConfig) {\n      return;\n    }\n\n    try {\n      let childNodes: AXTreeViewNode[];\n\n      if (prefetchedChildren !== undefined) {\n        childNodes = prefetchedChildren;\n      } else if (parentId === 'all') {\n        // Expand 'all' node if tree component provided\n        if (treeComponent) {\n          try {\n            treeComponent.expandNode('all');\n          } catch {\n            // Ignore expand errors\n          }\n        }\n\n        // Get root node's children (single datasource call)\n        const rootNodes = await this.datasource();\n        if (!rootNodes || rootNodes.length === 0) {\n          return;\n        }\n        const rootNode = rootNodes[0];\n        childNodes = (rootNode['children'] as AXTreeViewNode[]) || [];\n      } else {\n        // Expand this parent node if tree component provided\n        if (treeComponent) {\n          try {\n            treeComponent.expandNode(parentId);\n          } catch {\n            // Ignore expand errors\n          }\n        }\n\n        // Load children via datasource (single call per parent)\n        childNodes = await this.datasource(parentId);\n      }\n\n      if (!childNodes || childNodes.length === 0) {\n        return;\n      }\n\n      // Process each child: fetch grandchildren once, then recurse with them to avoid double datasource call\n      for (const childNode of childNodes) {\n        const childId = String(childNode['id'] ?? '');\n        if (!childId || childId === 'all' || collection.has(childId)) {\n          continue;\n        }\n\n        // Cache node data\n        this.cacheNodeFromTreeNode(childNode);\n\n        // Fetch children once; use result to decide leaf vs recurse (avoids nodeHasChildren -> extra datasource)\n        const grandchildNodes = await this.datasource(childId);\n        if (!grandchildNodes || grandchildNodes.length === 0) {\n          collection.add(childId);\n        } else {\n          await this.collectLeafNodes(childId, collection, treeComponent, grandchildNodes);\n        }\n      }\n    } catch (error) {\n      console.error(`Error collecting leaf nodes for ${parentId}:`, error);\n    }\n  }\n\n  /**\n   * Checks if a node has children\n   */\n  private async nodeHasChildren(nodeId: string, node?: AXTreeViewNode): Promise<boolean> {\n    // First check node properties if available\n    if (node) {\n      const children = node['children'] as AXTreeViewNode[] | undefined;\n      const childrenCount = node['childrenCount'] as number | undefined;\n\n      if (children && children.length > 0) {\n        return true;\n      }\n      if (childrenCount !== undefined && childrenCount > 0) {\n        return true;\n      }\n      if (childrenCount === 0) {\n        return false;\n      }\n    }\n\n    // Query datasource to check\n    const childNodes = await this.datasource(nodeId);\n    return childNodes && childNodes.length > 0;\n  }\n\n  /**\n   * Checks if a node is a leaf (has no children)\n   */\n  private async isLeafNodeCheck(nodeId: string): Promise<boolean> {\n    const hasChildren = await this.nodeHasChildren(nodeId);\n    return !hasChildren;\n  }\n\n  /**\n   * Caches node data from a tree node\n   */\n  private cacheNodeFromTreeNode(node: AXTreeViewNode): void {\n    const nodeId = String(node['id'] ?? '');\n    if (!nodeId || !this.treeConfig) {\n      return;\n    }\n\n    let nodeData = node['data'] as Record<string, unknown> | undefined;\n    if (!nodeData || typeof nodeData !== 'object') {\n      const valueField = this.treeConfig.valueField || 'id';\n      const textField = this.treeConfig.textField || 'title';\n      nodeData = {\n        [valueField]: nodeId,\n        [textField]: node['title'] ?? '',\n        ...(node as Record<string, unknown>),\n      };\n    }\n    this.nodeDataCache.set(nodeId, nodeData);\n  }\n\n  //#endregion\n\n  /**\n   * Builds complete ancestor chains for all selected node IDs.\n   * Returns a Map where key is the selected node ID and value is array of ancestor IDs from root to parent.\n   * Batch-fetches missing node and ancestor data in parallel to minimize API calls.\n   */\n  private async buildAncestorChains(selectedIds: string[]): Promise<Map<string, string[]>> {\n    const ancestorChains = new Map<string, string[]>();\n    if (!this.treeData || !this.treeConfig) return ancestorChains;\n    if (!this.treeData.categoryEntityDef?.parentKey) return ancestorChains;\n\n    // Collect and batch-fetch all missing IDs (selected nodes without parent + ancestors) in rounds\n    let toFetch = new Set<string>();\n    for (const nodeId of selectedIds) {\n      const cached = this.nodeDataCache.get(nodeId);\n      if (!cached || this.getParentIdFromNodeData(cached) === null) {\n        toFetch.add(nodeId);\n      }\n    }\n\n    while (toFetch.size > 0) {\n      const results = await Promise.all(Array.from(toFetch).map((id) => this.fetchItemById(id)));\n      const idsArr = Array.from(toFetch);\n      results.forEach((item, i) => {\n        if (item) this.nodeDataCache.set(idsArr[i], item);\n      });\n\n      toFetch = new Set<string>();\n      for (const nodeId of selectedIds) {\n        let currentData = this.nodeDataCache.get(nodeId) ?? null;\n        const visited = new Set<string>();\n        while (currentData) {\n          const parentId = this.getParentIdFromNodeData(currentData);\n          if (!parentId || visited.has(parentId)) break;\n          visited.add(parentId);\n          if (!this.nodeDataCache.has(parentId)) {\n            toFetch.add(parentId);\n            break;\n          }\n          currentData = this.nodeDataCache.get(parentId) ?? null;\n        }\n      }\n    }\n\n    // Build chains from cache (no further API calls)\n    for (const nodeId of selectedIds) {\n      const chain: string[] = [];\n      let currentData = this.nodeDataCache.get(nodeId) ?? null;\n      if (!currentData) continue;\n      const visited = new Set<string>();\n      while (currentData) {\n        const parentId = this.getParentIdFromNodeData(currentData);\n        if (!parentId || visited.has(parentId)) break;\n        visited.add(parentId);\n        chain.unshift(parentId);\n        currentData = this.nodeDataCache.get(parentId) ?? null;\n      }\n      ancestorChains.set(nodeId, chain);\n    }\n\n    return ancestorChains;\n  }\n\n  /**\n   * Expands ancestor nodes in order from root to leaf.\n   * This ensures parent nodes are loaded into the tree before selecting children.\n   */\n  private async expandAncestorNodesInOrder(ancestorChains: Map<string, string[]>): Promise<void> {\n    const treeComponent = this.tree();\n    if (!treeComponent) {\n      return;\n    }\n\n    // Collect all unique ancestors and sort by depth (shallowest first)\n    const allAncestors = new Set<string>();\n    const ancestorDepths = new Map<string, number>();\n\n    ancestorChains.forEach((chain) => {\n      chain.forEach((ancestorId, depth) => {\n        allAncestors.add(ancestorId);\n        // Keep the minimum depth if ancestor appears in multiple chains\n        const existingDepth = ancestorDepths.get(ancestorId);\n        if (existingDepth === undefined || depth < existingDepth) {\n          ancestorDepths.set(ancestorId, depth);\n        }\n      });\n    });\n\n    // Sort by depth (root ancestors first)\n    const sortedAncestors = Array.from(allAncestors).sort((a, b) => {\n      return (ancestorDepths.get(a) ?? 0) - (ancestorDepths.get(b) ?? 0);\n    });\n\n    try {\n      if (!treeComponent.isNodeExpanded('all')) {\n        await treeComponent.expandNode('all');\n        await this.waitForNodeExpanded(treeComponent, 'all');\n      }\n    } catch {\n      // Root might not exist\n    }\n\n    for (const ancestorId of sortedAncestors) {\n      try {\n        if (!treeComponent.isNodeExpanded(ancestorId)) {\n          await treeComponent.expandNode(ancestorId);\n          await this.waitForNodeExpanded(treeComponent, ancestorId);\n        }\n      } catch {\n        // Ancestor might not be in tree yet\n      }\n    }\n  }\n\n  /** Waits until the node is expanded (tree has loaded children). Polls so deep paths load. */\n  private async waitForNodeExpanded(\n    treeComponent: AXTreeViewComponent,\n    nodeId: string,\n    maxWaitMs = 2800,\n    pollMs = 60,\n  ): Promise<void> {\n    const deadline = Date.now() + maxWaitMs;\n    while (Date.now() < deadline) {\n      try {\n        if (treeComponent.isNodeExpanded(nodeId)) return;\n      } catch {\n        // Node may not exist yet\n      }\n      await new Promise((r) => setTimeout(r, pollMs));\n    }\n  }\n\n  /**\n   * Updates parent node states (selected/indeterminate) based on children selection.\n   * Called after leaf nodes are selected to properly show parent states.\n   * Works bottom-up from deepest parents to root, tracking states in a Map.\n   */\n  private async updateParentStatesAfterSelection(selectedLeafIds: string[]): Promise<void> {\n    if (!this.treeData || !this.treeConfig || selectedLeafIds.length === 0) {\n      return;\n    }\n\n    const parentKey = this.treeData.categoryEntityDef?.parentKey;\n    if (!parentKey) {\n      return;\n    }\n\n    const treeComponent = this.tree();\n    if (!treeComponent) {\n      return;\n    }\n\n    // Track node states: { selected: boolean, indeterminate: boolean }\n    // This allows us to reference child states when processing parents\n    const nodeStates = new Map<string, { selected: boolean; indeterminate: boolean }>();\n\n    // Initialize with selected leaf nodes\n    for (const leafId of selectedLeafIds) {\n      nodeStates.set(leafId, { selected: true, indeterminate: false });\n    }\n\n    // Collect all unique parent IDs from selected nodes\n    const parentsToUpdate = new Set<string>();\n    for (const leafId of selectedLeafIds) {\n      const nodeData = this.nodeDataCache.get(leafId);\n      if (!nodeData) {\n        continue;\n      }\n\n      let currentData: Record<string, unknown> | undefined = nodeData;\n      while (currentData) {\n        const parentId = this.getParentIdFromNodeData(currentData);\n        if (!parentId) break;\n        parentsToUpdate.add(parentId);\n        currentData = this.nodeDataCache.get(parentId);\n      }\n    }\n\n    // Sort parents by depth (deepest first so we update bottom-up)\n    const sortedParents = await this.sortParentsByDepth(Array.from(parentsToUpdate));\n    const reversedParents = [...sortedParents].reverse(); // Deepest first\n\n    // Batch-load children for parents that don't have them in tree (parallel instead of sequential)\n    const parentIdsNeedingLoad = reversedParents.filter((parentId) => {\n      const parentNode = treeComponent.findNode(parentId);\n      const treeChildren = parentNode?.['children'] as AXTreeViewNode[] | undefined;\n      return !treeChildren || treeChildren.length === 0;\n    });\n    const childrenByParentId = new Map<string, Array<{ id: string }>>();\n    if (parentIdsNeedingLoad.length > 0) {\n      const results = await Promise.all(parentIdsNeedingLoad.map((id) => this.datasource(id)));\n      results.forEach((dsChildren, index) => {\n        if (dsChildren && dsChildren.length > 0) {\n          childrenByParentId.set(\n            parentIdsNeedingLoad[index],\n            dsChildren.map((c) => ({ id: String(c['id'] ?? '') })),\n          );\n        }\n      });\n    }\n\n    for (const parentId of reversedParents) {\n      try {\n        const parentNode = treeComponent.findNode(parentId);\n\n        // Get all direct children: from tree node, or from batch-loaded map\n        let childrenList: Array<{ id: string }> = [];\n        const treeChildren = parentNode?.['children'] as AXTreeViewNode[] | undefined;\n        if (treeChildren && treeChildren.length > 0) {\n          childrenList = treeChildren.map((c) => ({ id: String(c['id'] ?? '') }));\n        } else {\n          const loaded = childrenByParentId.get(parentId);\n          if (loaded && loaded.length > 0) {\n            childrenList = loaded;\n          }\n        }\n\n        if (childrenList.length === 0) {\n          continue;\n        }\n\n        // Count child states using our tracked nodeStates Map\n        let fullySelectedCount = 0;\n        let indeterminateCount = 0;\n        let totalCount = 0;\n\n        for (const child of childrenList) {\n          if (!child.id || child.id === 'all') {\n            continue;\n          }\n          totalCount++;\n\n          const childState = nodeStates.get(child.id);\n          if (childState) {\n            if (childState.selected && !childState.indeterminate) {\n              // Child is fully selected\n              fullySelectedCount++;\n            } else if (childState.indeterminate) {\n              // Child is indeterminate\n              indeterminateCount++;\n            }\n            // If neither, child is not selected at all\n          }\n          // If childState is undefined, child is not in our tracking = not selected\n        }\n\n        // Determine parent state based on children\n        let parentSelected = false;\n        let parentIndeterminate = false;\n\n        if (totalCount > 0) {\n          if (fullySelectedCount === totalCount && indeterminateCount === 0) {\n            // All children are fully selected - parent is fully selected\n            parentSelected = true;\n            parentIndeterminate = false;\n          } else if (fullySelectedCount > 0 || indeterminateCount > 0) {\n            // Some children selected or indeterminate - parent is indeterminate\n            parentSelected = true;\n            parentIndeterminate = true;\n          }\n          // else: no children selected - parent stays unselected\n        }\n\n        // Store state in our tracking Map (for use by parent's parent)\n        nodeStates.set(parentId, { selected: parentSelected, indeterminate: parentIndeterminate });\n\n        // Update tree node if it exists\n        if (parentNode) {\n          parentNode['selected'] = parentSelected;\n          parentNode['indeterminate'] = parentIndeterminate;\n        }\n      } catch (error) {\n        console.error(`Error updating parent state for ${parentId}:`, error);\n      }\n    }\n  }\n\n  /**\n   * Loads node data for IDs that are selected but not yet in the cache.\n   * This is critical for pre-selected values in collapsed branches.\n   * Fetches all missing IDs in parallel to minimize API calls and latency.\n   */\n  private async loadMissingNodeData(selectedIds: string[]): Promise<void> {\n    if (!this.treeData || !this.treeConfig || selectedIds.length === 0) {\n      return;\n    }\n\n    const missingIds = selectedIds.filter((id) => !this.nodeDataCache.has(id));\n    if (missingIds.length === 0) return;\n\n    try {\n      const valueField = this.treeConfig.valueField || 'id';\n      const results = await Promise.all(missingIds.map((id) => this.fetchItemById(id)));\n      results.forEach((item, index) => {\n        if (item) {\n          const id = missingIds[index];\n          this.nodeDataCache.set(String(item[valueField] ?? id), item);\n        }\n      });\n    } catch (error) {\n      console.error('Error loading missing node data:', error);\n    }\n  }\n\n  /**\n   * For each selected id, if cached item has no parent (e.g. batch query returned minimal fields),\n   * re-fetch by id so we have parent/parentId for building ancestor chains.\n   * Fetches all needing refresh in parallel.\n   */\n  private async ensureParentDataInCache(selectedIds: string[]): Promise<void> {\n    if (!this.treeConfig) return;\n    const idsNeedingFetch = selectedIds.filter((id) => {\n      const cached = this.nodeDataCache.get(id);\n      return cached && this.getParentIdFromNodeData(cached) === null;\n    });\n    if (idsNeedingFetch.length === 0) return;\n    const results = await Promise.all(idsNeedingFetch.map((id) => this.fetchItemById(id)));\n    results.forEach((full, index) => {\n      if (full) this.nodeDataCache.set(idsNeedingFetch[index], full);\n    });\n  }\n\n  /**\n   * Resolves parent ID from node data: supports nested `parent` object or flat parentId/parentKey.\n   */\n  private getParentIdFromNodeData(item: Record<string, unknown>): string | null {\n    if (!item || !this.treeConfig) return null;\n    const valueField = this.treeConfig.valueField || 'id';\n    const parentKey = this.treeData?.categoryEntityDef?.parentKey || 'parentId';\n    const parent = item['parent'] as Record<string, unknown> | undefined;\n    if (parent && typeof parent === 'object') {\n      const id = String(parent[valueField] ?? parent['id'] ?? '');\n      return id && id !== 'all' ? id : null;\n    }\n    const parentIdValue = item[parentKey] ?? item['parentId'];\n    if (parentIdValue == null || parentIdValue === '') return null;\n    const id = String(parentIdValue);\n    return id && id !== 'all' ? id : null;\n  }\n\n  /**\n   * Marks a node and its children as disabled if the node ID matches the excluded ID.\n   */\n  private markNodeAsDisabled(node: AXTreeViewNode, excludedId: string): void {\n    const nodeId = String(node['id'] ?? '');\n    if (nodeId === excludedId) {\n      node['disabled'] = true;\n    }\n\n    const nodeChildren = node['children'] as AXTreeViewNode[] | undefined;\n    if (nodeChildren) {\n      nodeChildren.forEach((child) => {\n        this.markNodeAsDisabled(child, excludedId);\n      });\n    }\n  }\n\n  /**\n   * Processes root node: marks excluded nodes as disabled.\n   */\n  private processRootNode(rootNode: AXTreeViewNode): void {\n    const excludedId = this.excludedNodeId();\n    if (excludedId) {\n      this.markNodeAsDisabled(rootNode, excludedId);\n    }\n  }\n\n  /**\n   * Processes child nodes: marks excluded as disabled\n   */\n  private processChildNodes(childNodes: AXTreeViewNode[]): void {\n    const excludedId = this.excludedNodeId();\n\n    childNodes.forEach((node) => {\n      const nodeId = String(node['id'] ?? '');\n      if (excludedId && nodeId === excludedId) {\n        node['disabled'] = true;\n      }\n    });\n  }\n\n  /**\n   * Caches node data from items array\n   */\n  private cacheNodeData(items: Record<string, unknown>[]): void {\n    items.forEach((item) => {\n      const itemId = String(item[this.treeConfig!.valueField || 'id'] ?? '');\n      if (itemId && typeof item === 'object' && item !== null) {\n        this.nodeDataCache.set(itemId, item as Record<string, unknown>);\n      }\n    });\n  }\n\n  /**\n   * Caches node data from tree nodes\n   */\n  private cacheNodeDataFromNodes(nodes: AXTreeViewNode[]): void {\n    nodes.forEach((node) => {\n      const nodeId = String(node['id'] ?? '');\n      const nodeData = node['data'] as Record<string, unknown> | undefined;\n      if (nodeData && nodeId && typeof nodeData === 'object') {\n        this.nodeDataCache.set(nodeId, nodeData);\n      }\n    });\n  }\n\n  /**\n   * Calculate the full path from root to the selected node.\n   * Returns an array of strings like [\"Operations\", \"IT Operations\"] for node \"IT Operations\" under parent \"Operations\".\n   * Uses tree-view's getNodePath() API when available, otherwise falls back to manual calculation.\n   */\n  private async calculateNodePath(nodeId: string, nodeData: Record<string, unknown>): Promise<string[]> {\n    if (!this.treeData || !this.treeConfig) {\n      const title = this.getNodeTitle(nodeData);\n      return title ? [title] : [];\n    }\n\n    const treeComponent = this.tree();\n    if (treeComponent) {\n      try {\n        // Use tree-view's getNodePath() to get ID path, then convert to titles\n        // Note: getNodePath() returns the path INCLUDING the node itself\n        const idPath = treeComponent.getNodePath(nodeId);\n        if (idPath && idPath.length > 0) {\n          const titlePath: string[] = [];\n          for (const pathId of idPath) {\n            if (pathId === 'all') continue; // Skip root node\n            const pathNode = treeComponent.findNode(pathId);\n            if (pathNode) {\n              const nodeData = pathNode['data'] as Record<string, unknown> | undefined;\n              const pathTitle = nodeData\n                ? this.getNodeTitle(nodeData)\n                : this.translationService.resolve(pathNode['title'] as AXPMultiLanguageString);\n              if (pathTitle) {\n                titlePath.push(pathTitle);\n              }\n            } else {\n              // Node not in tree, try cache\n              const cachedData = this.nodeDataCache.get(pathId);\n              if (cachedData) {\n                const pathTitle = this.getNodeTitle(cachedData);\n                if (pathTitle) {\n                  titlePath.push(pathTitle);\n                }\n              }\n            }\n          }\n          // DO NOT add current node title again - it's already included in idPath\n          return titlePath.length > 0 ? titlePath : this.getNodeTitle(nodeData) ? [this.getNodeTitle(nodeData)] : [];\n        }\n      } catch (error) {\n        // Fall through to manual calculation if getNodePath fails\n        console.warn('Error using getNodePath, falling back to manual calculation:', error);\n      }\n    }\n\n    // Fallback: Manual path calculation\n    return this.calculateNodePathManually(nodeId, nodeData);\n  }\n\n  /**\n   * Manual path calculation fallback\n   */\n  private async calculateNodePathManually(nodeId: string, nodeData: Record<string, unknown>): Promise<string[]> {\n    if (!this.treeData || !this.treeConfig) {\n      const title = this.getNodeTitle(nodeData);\n      return title ? [title] : [];\n    }\n\n    const parentKey = this.treeData.categoryEntityDef?.parentKey;\n    if (!parentKey) {\n      const title = this.getNodeTitle(nodeData);\n      return title ? [title] : [];\n    }\n\n    const path: string[] = [];\n    let currentId: string | null = nodeId;\n    let currentData: Record<string, unknown> | undefined = nodeData;\n    const visitedIds = new Set<string>();\n\n    while (currentId && currentData && !visitedIds.has(currentId)) {\n      visitedIds.add(currentId);\n      const title = this.getNodeTitle(currentData);\n      if (title) path.unshift(title);\n\n      const parentId = this.getParentIdFromNodeData(currentData);\n      if (!parentId || parentId === currentId) break;\n\n      let parentData = this.nodeDataCache.get(parentId);\n      if (!parentData && this.treeData.categoryEntityQueryFunc) {\n        try {\n          const fetched = await this.fetchItemById(parentId);\n          if (fetched) {\n            parentData = fetched;\n            this.nodeDataCache.set(parentId, fetched);\n          }\n        } catch (error) {\n          console.error('Error fetching parent node:', error);\n          break;\n        }\n      }\n\n      if (!parentData) break;\n\n      currentId = parentId;\n      currentData = parentData;\n    }\n\n    return path.length > 0 ? path : this.getNodeTitle(nodeData) ? [this.getNodeTitle(nodeData)] : [];\n  }\n\n  /**\n   * Get the display title for a node.\n   */\n  private getNodeTitle(nodeData: Record<string, unknown>): string {\n    if (!nodeData || !this.treeConfig) {\n      return '';\n    }\n    const textField = this.treeConfig.textField || 'title';\n    const raw = nodeData[textField];\n    return this.translationService.resolve(raw as AXPMultiLanguageString);\n  }\n\n  private async getSelectedItems(): Promise<Array<Record<string, unknown> & { id: string; path: string[] }>> {\n    const selectedIds = this.normalizeSelectedIds(this.selectedNodeIds());\n    if (selectedIds.length === 0) {\n      return [];\n    }\n\n    const treeComponent = this.tree();\n\n    // Get node data from cache and calculate paths\n    const items = await Promise.all(\n      selectedIds.map(async (id): Promise<(Record<string, unknown> & { id: string; path: string[] }) | null> => {\n        // First try to get from cache\n        let nodeData = this.nodeDataCache.get(id);\n\n        // If not in cache, try to get from tree component\n        if (!nodeData && treeComponent) {\n          try {\n            const node = treeComponent.findNode(id);\n            if (node) {\n              nodeData = (node['data'] as Record<string, unknown>) || (node as Record<string, unknown>);\n              // Cache it for future use\n              if (nodeData && typeof nodeData === 'object') {\n                this.nodeDataCache.set(id, nodeData);\n              }\n            }\n          } catch {\n            // Node not found in tree\n          }\n        }\n\n        // If still no data, try to fetch from server\n        if (!nodeData) {\n          const fetchedData = await this.fetchItemById(id);\n          if (fetchedData) {\n            nodeData = fetchedData;\n            this.nodeDataCache.set(id, fetchedData);\n          }\n        }\n\n        // If still no data, skip this node\n        if (!nodeData) {\n          console.warn(`Could not find data for selected node: ${id}`);\n          return null;\n        }\n\n        const path = await this.calculateNodePath(id, nodeData);\n        return {\n          ...nodeData,\n          id: id,\n          path: path,\n        };\n      }),\n    );\n\n    return items.filter((item): item is Record<string, unknown> & { id: string; path: string[] } => item != null);\n  }\n\n  //#endregion\n}\n","import { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { AXPMultiLanguageString } from '@acorex/platform/contracts';\nimport { inject, Injectable } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\nimport { AXPEntityStorageService } from '../../entity-storage-service';\n\nexport interface ResolvedCategory {\n  id: string;\n  title: string;\n  path: string[];\n}\n\ninterface PendingRequest {\n  ids: string[];\n  valueField: string;\n  textField: string;\n  parentKey?: string;\n  resolve: (m: Map<string, ResolvedCategory>) => void;\n  reject: (err: unknown) => void;\n}\n\n/**\n * Batch-resolves category data for entity-category-widget-column.\n * Only fetches when the column is visible. Returns full path for hierarchical display (e.g. \"… > Sales\").\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPEntityCategoryBatchResolverService {\n  private readonly entityResolver = inject(AXPEntityDefinitionRegistryService);\n  private readonly entityStorage = inject(AXPEntityStorageService);\n  private readonly translation = inject(AXTranslationService);\n\n  private readonly cache = new Map<string, Map<string, ResolvedCategory>>();\n  private readonly pendingByEntity = new Map<string, PendingRequest[]>();\n  private flushScheduled = false;\n\n  async resolve(\n    entityKey: string,\n    ids: string[],\n    valueField: string,\n    textField: string,\n    parentKey?: string,\n  ): Promise<Map<string, ResolvedCategory>> {\n    const uniqueIds = Array.from(new Set(ids.filter((id) => id != null && id !== '')));\n    if (uniqueIds.length === 0) return new Map();\n\n    const cached = this.getFromCache(entityKey, uniqueIds, valueField);\n    if (cached.size === uniqueIds.length) return cached;\n\n    return new Promise<Map<string, ResolvedCategory>>((resolve, reject) => {\n      const list = this.pendingByEntity.get(entityKey) ?? [];\n      list.push({\n        ids: uniqueIds,\n        valueField,\n        textField,\n        parentKey,\n        resolve: (m) => {\n          const subset = new Map<string, ResolvedCategory>();\n          for (const id of uniqueIds) {\n            const r = m.get(id);\n            if (r) subset.set(id, r);\n          }\n          resolve(subset);\n        },\n        reject,\n      });\n      this.pendingByEntity.set(entityKey, list);\n      this.scheduleFlush();\n    });\n  }\n\n  private getFromCache(entityKey: string, ids: string[], valueField: string): Map<string, ResolvedCategory> {\n    const entityCache = this.cache.get(entityKey);\n    if (!entityCache) return new Map();\n    const result = new Map<string, ResolvedCategory>();\n    for (const id of ids) {\n      const cached = entityCache.get(id);\n      if (cached) result.set(id, cached);\n    }\n    return result;\n  }\n\n  private setCache(entityKey: string, items: ResolvedCategory[], valueField: string): void {\n    let entityCache = this.cache.get(entityKey);\n    if (!entityCache) {\n      entityCache = new Map();\n      this.cache.set(entityKey, entityCache);\n    }\n    for (const item of items) {\n      entityCache.set(item.id, item);\n    }\n  }\n\n  private scheduleFlush(): void {\n    if (this.flushScheduled) return;\n    this.flushScheduled = true;\n    queueMicrotask(() => {\n      this.flushScheduled = false;\n      this.flushAll();\n    });\n  }\n\n  private async flushAll(): Promise<void> {\n    const entities = Array.from(this.pendingByEntity.keys());\n    for (const entityKey of entities) {\n      await this.flush(entityKey);\n    }\n  }\n\n  private async flush(entityKey: string): Promise<void> {\n    const list = this.pendingByEntity.get(entityKey);\n    if (!list?.length) return;\n    this.pendingByEntity.delete(entityKey);\n\n    const first = list[0];\n    const { valueField, textField, parentKey } = first;\n    const allIds = Array.from(new Set(list.flatMap((r) => r.ids)));\n\n    try {\n      const result = await this.fetchAndResolve(entityKey, allIds, valueField, textField, parentKey);\n      for (const req of list) {\n        const subset = new Map<string, ResolvedCategory>();\n        for (const id of req.ids) {\n          const r = result.get(id);\n          if (r) subset.set(id, r);\n        }\n        req.resolve(subset);\n      }\n    } catch (err) {\n      for (const req of list) req.reject(err);\n    }\n  }\n\n  private async fetchAndResolve(\n    entityKey: string,\n    ids: string[],\n    valueField: string,\n    textField: string,\n    parentKey?: string,\n  ): Promise<Map<string, ResolvedCategory>> {\n    const [moduleName, entityName] = entityKey.split('.');\n    if (!moduleName || !entityName) return new Map();\n\n    try {\n      let items: any[];\n      let allItems: any[];\n\n      if (parentKey) {\n        // Use storage directly to fetch ALL categories. The entity's list execute adds\n        // a default filter (parentId isEmpty) that returns only roots - we need the full tree.\n        const allResult = await this.entityStorage.query(entityKey, {\n          skip: 0,\n          take: 10000,\n        });\n        allItems = allResult?.items ?? [];\n        items = allItems.filter((c: any) => ids.includes(String(get(c, valueField))));\n      } else {\n        const entityDef = await this.entityResolver.resolve(moduleName, entityName);\n        const listExecute = entityDef?.queries?.list?.execute as (req: any) => Promise<{ items: any[] }>;\n        if (!listExecute || typeof listExecute !== 'function') return new Map();\n        const result = await listExecute({\n          skip: 0,\n          take: ids.length + 100,\n          filter: { field: valueField, operator: { type: 'in' }, value: ids },\n        });\n        items = result?.items ?? [];\n        allItems = items;\n      }\n\n      const pathMap = parentKey ? this.buildPathMap(allItems, valueField, textField, parentKey) : null;\n\n      const result = new Map<string, ResolvedCategory>();\n      for (const item of items) {\n        const id = String(get(item, valueField));\n        const rawTitle = get(item, textField);\n        const titleText = this.resolveCategoryLabel(rawTitle);\n        const path = pathMap\n          ? (pathMap.get(id) ?? (rawTitle != null && rawTitle !== '' ? [titleText] : []))\n          : rawTitle != null && rawTitle !== ''\n            ? [titleText]\n            : [];\n        result.set(id, {\n          id,\n          title: titleText,\n          path,\n        });\n      }\n\n      this.setCache(entityKey, Array.from(result.values()), valueField);\n      return result;\n    } catch (error) {\n      console.error('[EntityCategoryBatchResolver] Failed:', error);\n      return new Map();\n    }\n  }\n\n  private buildPathMap(items: any[], valueField: string, textField: string, parentKey: string): Map<string, string[]> {\n    const map = new Map<string, any>();\n    for (const item of items) {\n      map.set(String(get(item, valueField)), item);\n    }\n\n    const pathMap = new Map<string, string[]>();\n    const visited = new Set<string>();\n\n    const buildPath = (id: string): string[] => {\n      if (visited.has(id)) return pathMap.get(id) ?? [];\n      const item = map.get(id);\n      if (!item) return [];\n      const parentId = get(item, parentKey);\n      const title = this.resolveCategoryLabel(get(item, textField));\n      if (parentId == null || parentId === '' || parentId === 'all' || String(parentId) === id) {\n        const path = title ? [title] : [];\n        pathMap.set(id, path);\n        visited.add(id);\n        return path;\n      }\n      const parentPath = buildPath(String(parentId));\n      const path = title ? [...parentPath, title] : parentPath;\n      pathMap.set(id, path);\n      visited.add(id);\n      return path;\n    };\n\n    for (const item of items) {\n      const id = String(get(item, valueField));\n      if (!pathMap.has(id)) buildPath(id);\n    }\n    return pathMap;\n  }\n\n  private resolveCategoryLabel(raw: unknown): string {\n    return resolveMultiLanguageString(raw as AXPMultiLanguageString, this.translation.getActiveLang());\n  }\n}\n","import { AXPEntity } from '@acorex/platform/layout/entity-contracts';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXFormatService } from '@acorex/core/format';\n\nimport { AXPColumnItemListComponent, AXPColumnItemListItem } from '@acorex/platform/layout/components';\nimport { AXPColumnWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed, effect, ElementRef, inject, Input, signal } from '@angular/core';\nimport { castArray, get, isNil } from 'lodash-es';\nimport { AXPEntityDetailPopoverService } from '../../components';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\nimport { AXPEntityCategoryBatchResolverService } from '../../services/entity-category/entity-category-batch-resolver.service';\n\n@Component({\n  selector: 'axp-entity-category-widget-column',\n  host: {\n    class: 'ax-w-full',\n  },\n  template: `\n    <axp-column-item-list [items]=\"columnItems()\" [itemTemplate]=\"itemTemplate\" />\n\n    <!-- Item Template -->\n    <ng-template #itemTemplate let-item>\n      <div>\n        @if (hasParent(item.originalItem)) {\n          <ax-badge\n            [color]=\"'primary'\"\n            [look]=\"'twotone'\"\n            class=\"ax-p-0.5\"\n            [text]=\"getItemText(item.originalItem)\"\n            [axTooltip]=\"getBreadcrumbPath(item.originalItem)\"\n            [axTooltipPlacement]=\"'top'\"\n          >\n            <ax-prefix>\n              <i class=\"fal fa-ellipsis-h ax-text-on-primary ax-text-xs ax-ps-1\"></i>\n              <i class=\"fal fa-angle-right rtl:ax-rotate-180 ax-text-on-primary ax-text-xs ax-px-1\"></i>\n            </ax-prefix>\n          </ax-badge>\n        } @else {\n          <ax-badge\n            [color]=\"'primary'\"\n            [look]=\"'twotone'\"\n            class=\"ax-p-0.5\"\n            [text]=\"getItemText(item.originalItem)\"\n            [axTooltip]=\"getBreadcrumbPath(item.originalItem)\"\n            [axTooltipPlacement]=\"'top'\"\n          ></ax-badge>\n        }\n      </div>\n    </ng-template>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AXPColumnItemListComponent, AXBadgeModule, AXDecoratorModule, AXTooltipModule],\n  inputs: ['rawValue', 'rowData'],\n})\nexport class AXPEntityCategoryWidgetColumnComponent extends AXPColumnWidgetComponent<any> {\n  //#region ----   Services & Dependencies   ----\n\n  protected readonly entityDetailPopoverService = inject(AXPEntityDetailPopoverService);\n  protected readonly formatService = inject(AXFormatService);\n  protected readonly entityResolver = inject(AXPEntityDefinitionRegistryService);\n  private readonly categoryBatchResolver = inject(AXPEntityCategoryBatchResolverService);\n\n  //#endregion\n\n  //#region ----   Inputs   ----\n\n  private readonly rawValueSignal = signal<any>(null);\n\n  @Input('rawValue')\n  set rawValueInput(value: any) {\n    this.rawValueSignal.set(value);\n  }\n\n  //#endregion\n\n  //#region ----   Computed Properties   ----\n\n  protected entity = computed<string>(() => (this.options['entity'] as string) ?? '');\n  protected valueField = computed<string>(() => (this.options['valueField'] as string) ?? 'id');\n  protected textField = computed<string>(() => (this.options['textField'] as string) ?? 'title');\n  protected columnName = computed<string>(() => (this.options['columnName'] as string) ?? '');\n\n  protected defaultTextField = computed<string>(() => {\n    const textField =\n      this.entityDef()?.formats.lookup ?? this.entityDef()?.properties.find((c) => c.name != 'id')?.name ?? 'title';\n    return textField;\n  });\n\n  protected displayField = computed<string>(() => {\n    if (this.textField()) {\n      return this.textField();\n    }\n    return this.defaultTextField();\n  });\n\n  //#endregion\n\n  //#region ----   Component State   ----\n\n  protected host = inject(ElementRef);\n  private entityDef = signal<AXPEntity | null>(null);\n  protected displayItems = signal<any[]>([]);\n  protected selectedItemIndex = signal<number>(-1);\n\n  //#endregion\n\n  //#region ----   Effects   ----\n\n  private efEntity = effect(async () => {\n    const entityKey = this.entity();\n    if (!entityKey) {\n      return;\n    }\n\n    const [module, entity] = entityKey.split('.');\n    if (!module || !entity) {\n      return;\n    }\n\n    this.entityDef.set(await this.entityResolver.resolve(module, entity));\n  });\n\n  private efDisplay = effect(async () => {\n    const value = this.rawValueSignal();\n    const entity = this.entityDef();\n\n    // Wait for entity definition to be loaded before processing value\n    if (!entity) {\n      this.displayItems.set([]);\n      return;\n    }\n\n    if (isNil(value)) {\n      this.displayItems.set([]);\n    } else {\n      const items = castArray(value);\n      const itemsWithPaths = await this.resolveItemsWithPaths(items);\n      this.displayItems.set(itemsWithPaths.filter((c) => c != null));\n    }\n  });\n\n  //#endregion\n\n  //#region ----   Computed Properties (Derived)   ----\n\n  protected visibleItems = computed(() => this.displayItems());\n\n  protected columnItems = computed<AXPColumnItemListItem[]>(() => {\n    return this.visibleItems().map((item) => ({\n      id: this.getItemId(item),\n      content: this.getItemText(item),\n      originalItem: item, // Store original item for template access\n    }));\n  });\n\n  //#endregion\n\n  //#region ----   Public Methods   ----\n\n  protected async showItemDetail(item: any, index: number, anchor?: HTMLElement): Promise<void> {\n    if (this.options['disableDetailPopover']) {\n      return;\n    }\n\n    const columnData = this.rowData[this.columnName()];\n    const id = Array.isArray(columnData) ? columnData[index] : columnData;\n\n    this.selectedItemIndex.set(index);\n\n    const entityKey = this.entity();\n    if (entityKey && id) {\n      await this.entityDetailPopoverService.show(anchor ?? this.host.nativeElement, {\n        entity: entityKey,\n        id: id,\n        textField: this.textField(),\n        valueField: this.valueField(),\n        item,\n        breadcrumb: this.getBreadcrumbPath(item),\n      });\n    }\n  }\n\n  protected handleItemClick(listItem: AXPColumnItemListItem): void {\n    if (this.options['disableDetailPopover']) {\n      return;\n    }\n\n    const originalItem = (listItem as any).originalItem;\n    if (!originalItem) {\n      return;\n    }\n\n    const items = this.visibleItems();\n    const itemIndex = items.findIndex((item) => this.getItemId(item) === listItem.id);\n    if (itemIndex >= 0) {\n      this.showItemDetail(originalItem, itemIndex);\n    }\n  }\n\n  protected getItemPath(item: any): string[] {\n    if (!item) {\n      return [];\n    }\n    // If path is available as array, return it\n    if (item.path && Array.isArray(item.path) && item.path.length > 0) {\n      return item.path;\n    }\n    // Fall back to display field if no path\n    const displayValue = get(item, this.displayField());\n    return displayValue ? [String(displayValue)] : [];\n  }\n\n  protected hasParent(item: any): boolean {\n    const path = this.getItemPath(item);\n    return path.length > 1;\n  }\n\n  protected getItemText(item: any): string {\n    const path = this.getItemPath(item);\n    if (path.length === 0) {\n      return '';\n    }\n    // Return the last item in the path (the actual node)\n    return path[path.length - 1];\n  }\n\n  protected joinPath(path: string[]): string {\n    return path.join(' > ');\n  }\n\n  protected getItemId(item: any): string {\n    if (!item) {\n      return '';\n    }\n    return String(get(item, this.valueField()) ?? '');\n  }\n\n  protected getBreadcrumbPath(item: any): string {\n    const path = this.getItemPath(item);\n    if (path.length === 0) {\n      return '';\n    }\n    return this.joinPath(path);\n  }\n\n  //#endregion\n\n  //#region ----   Private Methods   ----\n\n  private async resolveItemsWithPaths(items: any[]): Promise<any[]> {\n    const entityKey = this.entity();\n    const valueField = this.valueField();\n    const textField = this.displayField();\n    const parentKey =\n      this.entityDef()?.parentKey ?? (entityKey?.endsWith('Category') ? 'parentId' : undefined);\n\n    // When record has categories: [{id, parentId, title}] from middleware, build path from chain\n    const hasFullChain = items.some(\n      (item) =>\n        item &&\n        typeof item === 'object' &&\n        get(item, 'parentId') != null &&\n        get(item, valueField) != null,\n    );\n    if (hasFullChain && items.length > 0) {\n      return items\n        .filter((item) => item != null)\n        .map((item) => this.buildItemWithPathFromChain(item, items, valueField, textField, parentKey ?? 'parentId'));\n    }\n\n    const needsResolve = items.filter((item) => {\n      if (isNil(item)) return false;\n      if (typeof item !== 'object') return true;\n      const idVal = get(item, valueField);\n      const hasPath = item.path && Array.isArray(item.path) && item.path.length > 0;\n      return !hasPath && idVal != null && idVal !== '';\n    });\n\n    const idsToResolve = needsResolve.map((item) =>\n      typeof item === 'object' ? String(get(item, valueField)) : String(item),\n    );\n\n    let resolvedMap = new Map<string, { id: string; title: string; path: string[] }>();\n    if (idsToResolve.length > 0 && entityKey) {\n      resolvedMap = await this.categoryBatchResolver.resolve(\n        entityKey,\n        idsToResolve,\n        valueField,\n        textField,\n        parentKey,\n      );\n    }\n\n    return Promise.all(items.map((item) => this.extractItemWithPath(item, resolvedMap)));\n  }\n\n  /**\n   * Build path from categories array when record has full chain (id, parentId, title).\n   * Used when middleware enriches categories on create/update.\n   */\n  private buildItemWithPathFromChain(\n    item: any,\n    allItems: any[],\n    valueField: string,\n    textField: string,\n    parentKey: string,\n  ): any {\n    const map = new Map<string, any>();\n    for (const c of allItems) {\n      const id = get(c, valueField);\n      if (id != null) map.set(String(id), c);\n    }\n    const path: string[] = [];\n    let current: any = item;\n    const visited = new Set<string>();\n    while (current) {\n      const id = String(get(current, valueField) ?? '');\n      if (!id || visited.has(id)) break;\n      visited.add(id);\n      const title = String(get(current, textField) ?? '');\n      if (title) path.unshift(title);\n      const parentId = get(current, parentKey);\n      if (parentId == null || parentId === '' || String(parentId) === id) break;\n      current = map.get(String(parentId));\n    }\n    const pathArray = path.length > 0 ? path : get(item, textField) ? [String(get(item, textField))] : [];\n    return {\n      [valueField]: get(item, valueField),\n      [textField]: get(item, textField),\n      path: pathArray,\n    };\n  }\n\n  private async extractItemWithPath(\n    item: any,\n    resolvedMap?: Map<string, { id: string; title: string; path: string[] }>,\n  ): Promise<any> {\n    if (isNil(item)) return null;\n\n    const valueField = this.valueField();\n    const textField = this.displayField();\n\n    let itemObj: any;\n    if (typeof item === 'object') {\n      itemObj = item;\n      const idVal = get(itemObj, valueField);\n      const hasPath = itemObj.path && Array.isArray(itemObj.path) && itemObj.path.length > 0;\n      if (!hasPath && resolvedMap && idVal != null && idVal !== '') {\n        const r = resolvedMap.get(String(idVal));\n        if (r) {\n          itemObj = {\n            [valueField]: r.id,\n            [textField]: r.title,\n            path: r.path,\n          };\n        }\n      }\n    } else {\n      if (resolvedMap) {\n        const r = resolvedMap.get(String(item));\n        if (r) {\n          itemObj = { [valueField]: r.id, [textField]: r.title, path: r.path };\n        } else {\n          itemObj = { [valueField]: item, [textField]: item, path: [String(item)] };\n        }\n      } else {\n        itemObj = { [valueField]: item, [textField]: item, path: [String(item)] };\n      }\n    }\n\n    if (itemObj.path && Array.isArray(itemObj.path) && itemObj.path.length > 0) {\n      return itemObj;\n    }\n\n    return await this.calculateItemPath(itemObj);\n  }\n\n  /**\n   * Calculate the full path from root to the item.\n   * Returns an array of strings like [\"C\", \"B\"] for item B under parent C.\n   */\n  private async calculateItemPath(item: any): Promise<any> {\n    if (!item || !this.entityDef()) {\n      return item;\n    }\n\n    // If item already has a path array, return it as is\n    if (item.path && Array.isArray(item.path) && item.path.length > 0) {\n      return item;\n    }\n\n    const parentKey = this.entityDef()?.parentKey;\n    if (!parentKey) {\n      // No parent key means flat structure, return item with just its title as path array\n      const title = get(item, this.displayField()) ?? '';\n      return { ...item, path: title ? [title] : [] };\n    }\n\n    const valueField = this.valueField();\n    const textField = this.displayField();\n    const byKey = this.entityDef()?.queries?.byKey?.execute as Function;\n\n    if (!byKey) {\n      return item;\n    }\n\n    const path: string[] = [];\n    let currentItem: any = item;\n    const visitedIds = new Set<string>(); // Prevent infinite loops\n\n    // Build path by traversing up the parent chain\n    while (currentItem) {\n      const currentId = String(get(currentItem, valueField) ?? '');\n      if (!currentId || visitedIds.has(currentId)) {\n        break; // Prevent infinite loops\n      }\n      visitedIds.add(currentId);\n\n      const title = String(get(currentItem, textField) ?? '');\n      if (title) {\n        path.unshift(title); // Add to beginning to maintain hierarchy order\n      }\n\n      // Get parent ID from current item\n      const parentId = get(currentItem, parentKey);\n      if (parentId == null || parentId === '' || parentId === 'all' || String(parentId) === currentId) {\n        break; // Reached root or invalid parent\n      }\n\n      try {\n        // Fetch parent item\n        const parentItem = await byKey(parentId);\n        if (!parentItem) {\n          break; // Parent not found, stop traversal\n        }\n        currentItem = parentItem;\n      } catch (error) {\n        console.error('Error fetching parent item:', error);\n        break;\n      }\n    }\n\n    // Return item with path array, or just the item title if no path\n    const pathArray = path.length > 0 ? path : get(item, textField) ? [String(get(item, textField))] : [];\n    return { ...item, path: pathArray };\n  }\n\n  //#endregion\n}\n","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\n\nimport type { AXPMultiLanguageString } from '@acorex/platform/contracts';\nimport { AsyncPipe } from '@angular/common';\nimport {\n  afterNextRender,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  OnDestroy,\n  signal,\n  untracked,\n  viewChild,\n  ViewEncapsulation,\n} from '@angular/core';\n\n@Component({\n  selector: 'axp-truncated-breadcrumb',\n  standalone: true,\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'ax-block' },\n  template: `\n    <div class=\"ax-flex ax-items-center ax-gap-2 ax-flex-wrap\" #container [title]=\"fullPath()\">\n      @if (sections().length === 0) {\n        <span class=\"ax-text-muted\">---</span>\n      } @else {\n        @if (isExpanded() && canToggle()) {\n          @for (section of sections(); track $index; let isLast = $last) {\n            <span class=\"ax-text-sm\">{{ section | translate | async }}</span>\n            @if (!isLast) {\n              <ax-icon [class]=\"separatorIcon()\" class=\"rtl:ax-rotate-180 ax-text-muted ax-text-xs\"></ax-icon>\n            }\n          }\n          <span\n            class=\"ax-text-sm ax-text-primary ax-cursor-pointer hover:ax-opacity-75 ax-ml-1\"\n            (click)=\"handleCollapseClick($event)\"\n            title=\"Collapse\"\n          >\n            <ax-icon [class]=\"eyeIcon()\" class=\"ax-text-primary\"></ax-icon>\n          </span>\n        } @else {\n          @for (section of displayedSections(); track $index; let isLast = $last) {\n            <span class=\"ax-text-sm\">{{ section.text }}</span>\n\n            @if (!isLast || (isLast && hasHiddenSections())) {\n              <ax-icon\n                [class]=\"separatorIcon()\"\n                [class.ax-cursor-pointer]=\"canToggle()\"\n                class=\"rtl:ax-rotate-180 ax-text-muted ax-text-xs ax-transition-opacity\"\n                (click)=\"handleSeparatorClick($event)\"\n              ></ax-icon>\n            }\n          }\n\n          @if (hasHiddenSections()) {\n            <span\n              class=\"ax-text-sm ax-text-primary ax-cursor-pointer hover:ax-opacity-75\"\n              (click)=\"handleEllipsisClick($event)\"\n            >\n              <ax-icon [class]=\"ellipsisIcon()\" class=\"ax-text-primary\"></ax-icon>\n            </span>\n\n            <ax-icon [class]=\"separatorIcon()\" class=\"rtl:ax-rotate-180 ax-text-muted ax-text-xs\"></ax-icon>\n            <span class=\"ax-text-sm\">{{ lastSection().text }}</span>\n          }\n        }\n      }\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AXDecoratorModule, AXTranslationModule, AsyncPipe],\n})\nexport class AXPTruncatedBreadcrumbComponent implements OnDestroy {\n  private readonly mlsResolver = inject(AXTranslationService);\n\n  /** Plain string or locale map per segment; truncation uses resolved text (see {@link resolvedSectionTexts}). */\n  sections = input<ReadonlyArray<AXPMultiLanguageString | null | undefined>>([]);\n  characterLimit = input<number | 'auto'>(20);\n  sectionLimit = input<number | 'auto'>(2);\n  separatorIcon = input<string>('fa-solid fa-chevron-right');\n  ellipsisIcon = input<string>('fa-solid fa-ellipsis');\n  eyeIcon = input<string>('fa-solid fa-eye');\n\n  protected container = viewChild<ElementRef<HTMLDivElement>>('container');\n  protected isExpanded = signal(false);\n  private containerWidth = signal<number>(0);\n  private resizeObserver: ResizeObserver | null = null;\n\n  //#region ----   Logic   ----\n\n  /** Resolved display strings for length / ellipsis (same rules as the pipe). */\n  protected resolvedSectionTexts = computed(() =>\n    this.sections().map((s) => this.mlsResolver.resolve(s as AXPMultiLanguageString)),\n  );\n\n  protected effectiveCharacterLimit = computed(() => {\n    const limit = this.characterLimit();\n    if (limit !== 'auto') return limit;\n\n    // When auto, check if sectionLimit is also auto - if so, take as much space as needed\n    if (this.sectionLimit() === 'auto') {\n      const sections = this.resolvedSectionTexts();\n      // Return the maximum length of any section to prevent truncation\n      return sections.length > 0 ? Math.max(...sections.map((s) => s.length)) : Number.MAX_SAFE_INTEGER;\n    }\n\n    // If only characterLimit is auto, calculate based on container width\n    const width = this.containerWidth();\n    return width === 0 ? 20 : Math.max(20, Math.floor((width - 100) / 10));\n  });\n\n  protected effectiveSectionLimit = computed(() => {\n    const limit = this.sectionLimit();\n    if (limit !== 'auto') return limit;\n\n    // When auto, check if characterLimit is also auto - if so, take as much space as needed\n    if (this.characterLimit() === 'auto') {\n      // Return all sections to prevent hiding any\n      return this.resolvedSectionTexts().length;\n    }\n\n    // If only sectionLimit is auto, calculate based on container width\n    const width = this.containerWidth();\n    const sections = this.resolvedSectionTexts();\n    if (width === 0 || sections.length <= 1) return sections.length;\n\n    // Estimate: Roughly 100px per section + separator\n    const estimatedSectionWidth = 100;\n    const availableWidth = width - 40; // Small buffer\n    const fitCount = Math.floor(availableWidth / estimatedSectionWidth);\n\n    return Math.max(1, Math.min(fitCount, sections.length));\n  });\n\n  protected hasTruncatedText = computed(() => {\n    const limit = this.effectiveCharacterLimit();\n    return this.resolvedSectionTexts().some((s) => s.length > limit);\n  });\n\n  protected hasHiddenSections = computed(() => {\n    return this.resolvedSectionTexts().length > this.effectiveSectionLimit() + 1;\n  });\n\n  /**\n   * canToggle: If this is false, NO Eye Icon and NO Click events will exist.\n   */\n  protected canToggle = computed(() => {\n    return this.hasHiddenSections() || this.hasTruncatedText();\n  });\n\n  protected allSectionsTruncated = computed(() => {\n    const limit = this.effectiveCharacterLimit();\n    return this.resolvedSectionTexts().map((s) => ({\n      text: s.length > limit ? s.substring(0, limit) + '...' : s,\n      original: s,\n    }));\n  });\n\n  protected displayedSections = computed(() => {\n    const limit = this.effectiveSectionLimit();\n    const truncated = this.allSectionsTruncated();\n    return this.hasHiddenSections() ? truncated.slice(0, limit) : truncated;\n  });\n\n  protected lastSection = computed(() => {\n    const truncated = this.allSectionsTruncated();\n    return truncated[truncated.length - 1] || { text: '' };\n  });\n\n  protected fullPath = computed(() => {\n    const sections = this.resolvedSectionTexts();\n    return sections.length > 0 ? sections.join(' > ') : '';\n  });\n\n  //#endregion\n\n  constructor() {\n    afterNextRender(() => {\n      this.initializeResizeObserver();\n    });\n\n    // Automatically collapse if the window grows and everything fits\n    effect(() => {\n      if (this.isExpanded() && !this.canToggle()) {\n        untracked(() => this.isExpanded.set(false));\n      }\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.resizeObserver?.disconnect();\n  }\n\n  protected handleSeparatorClick(event: Event): void {\n    if (this.canToggle()) {\n      event.stopPropagation();\n      this.isExpanded.set(true);\n    }\n  }\n\n  protected handleEllipsisClick(event: Event): void {\n    event.stopPropagation();\n    this.isExpanded.set(true);\n  }\n\n  protected handleCollapseClick(event: Event): void {\n    event.stopPropagation();\n    this.isExpanded.set(false);\n  }\n\n  private initializeResizeObserver(): void {\n    const el = this.container()?.nativeElement;\n    if (!el) return;\n    this.containerWidth.set(el.offsetWidth);\n    this.resizeObserver = new ResizeObserver((entries) => {\n      this.containerWidth.set(entries[0].contentRect.width);\n    });\n    this.resizeObserver.observe(el);\n  }\n}\n","import { AXPMultiLanguageString, extractValue, setSmart } from '@acorex/platform/contracts';\nimport { AXPEntity } from '@acorex/platform/layout/entity-contracts';\nimport { AXClickEvent, AXFocusEvent, AXHtmlEvent, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXTagBoxComponent, AXTagBoxModule } from '@acorex/components/tag-box';\nimport { AXTranslationModule, AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { AXValidationModule } from '@acorex/core/validation';\n\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\n\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  computed,\n  effect,\n  inject,\n  signal,\n  viewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { castArray, get, isEmpty, isNil, set } from 'lodash-es';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\nimport { AXPEntityCategoryTreeSelectorComponent } from './entity-category-tree-selector.component';\nimport { AXPEntityCategoryWidgetOptions } from './entity-category-widget.types';\nimport { AXPTruncatedBreadcrumbComponent } from './truncated-breadcrumb.component';\n\n@Component({\n  selector: 'axp-entity-category-widget-edit',\n  template: `\n    <ax-tag-box\n      #tagBoxComponent\n      [tagTemplate]=\"tagTemplate\"\n      [ngModel]=\"selectedItems()\"\n      [textField]=\"displayField()\"\n      [valueField]=\"valueField()\"\n      (onValueChanged)=\"handleValueChange($event)\"\n      [placeholder]=\"selectedItems().length ? '' : searchPlaceholderText()\"\n      [addOnEnter]=\"false\"\n      [addOnComma]=\"false\"\n      [readonly]=\"true\"\n      [disabled]=\"disabled()\"\n      (onKeyUp)=\"handleKeyUp($event)\"\n      (onBlur)=\"handleOnBlur($event)\"\n    >\n      @for (validation of validationRules(); track $index) {\n        <ax-validation-rule\n          [rule]=\"validation.rule\"\n          [message]=\"validation.options?.message\"\n          [options]=\"validation.options\"\n        ></ax-validation-rule>\n      }\n      @if (selectedItems().length > 1 || allowClear()) {\n        <ax-clear-button (click)=\"handleClearClick()\"></ax-clear-button>\n      }\n\n      <ax-suffix>\n        <ax-button color=\"ghost\" look=\"blank\" [disabled]=\"isLoading() || disabled()\" (onClick)=\"handleAddClick($event)\">\n          @if (isLoading()) {\n            <ax-loading></ax-loading>\n          } @else {\n            <ax-icon icon=\"far fa-search\"></ax-icon>\n          }\n        </ax-button>\n      </ax-suffix>\n    </ax-tag-box>\n    <ng-template #tagTemplate let-item let-index=\"index\">\n      <div class=\"ax-inline-flex ax-items-center ax-gap-1.5 ax-rounded-md ax-px-3 ax-py-1 ax-text-sm ax-surface\">\n        <axp-truncated-breadcrumb\n          [attr.data-color]=\"item.color\"\n          [sections]=\"getItemPath(item)\"\n          [characterLimit]=\"characterLimit()\"\n          [sectionLimit]=\"sectionLimit()\"\n        ></axp-truncated-breadcrumb>\n        <button type=\"button\" (click)=\"handleRemoveItem($event, index)\">\n          <ax-icon class=\"ax-icon ax-icon-close\"></ax-icon>\n        </button>\n      </div>\n    </ng-template>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    FormsModule,\n    AXButtonModule,\n    AXDecoratorModule,\n    AXLoadingModule,\n    AXValidationModule,\n    AXFormModule,\n    AXTagBoxModule,\n    AXTranslationModule,\n    AXPTruncatedBreadcrumbComponent,\n  ],\n})\nexport class AXPEntityCategoryWidgetEditComponent extends AXPValueWidgetComponent<any, AXPEntityCategoryWidgetOptions> {\n  //#region ----   Services & Dependencies   ----\n\n  protected readonly entityResolver = inject(AXPEntityDefinitionRegistryService);\n  protected readonly popupService = inject(AXPopupService);\n  private readonly translateService = inject(AXTranslationService);\n  protected readonly cdr = inject(ChangeDetectorRef);\n\n  //#endregion\n\n  //#region ----   Computed Properties   ----\n\n  protected entity = computed<string>(() => (this.options()['entity'] as string) ?? '');\n  protected multiple = computed<boolean>(() => (this.options()['multiple'] ?? false) as boolean);\n  protected disabled = computed<boolean>(() => (this.options()['disabled'] ?? false) as boolean);\n  protected textField = computed<string>(() => (this.options()['textField'] as string) ?? 'title');\n  protected valueField = computed<string>(() => (this.options()['valueField'] as string) ?? 'id');\n  protected expose = computed<Array<{ source: string; target: string }> | undefined>(\n    () => this.options()['expose'] as Array<{ source: string; target: string }> | undefined,\n  );\n  protected allowClear = computed<boolean>(() => (this.options()['allowClear'] ?? false) as boolean);\n  protected characterLimit = computed<number | 'auto'>(\n    () => (this.options()['characterLimit'] as number | 'auto') ?? 'auto',\n  );\n  protected sectionLimit = computed<number | 'auto'>(\n    () => (this.options()['sectionLimit'] as number | 'auto') ?? 'auto',\n  );\n\n  protected defaultTextField = computed<string>(() => {\n    const textField =\n      this.entityDef()?.formats.lookup ?? this.entityDef()?.properties.find((c) => c.name != 'id')?.name ?? 'title';\n    return textField;\n  });\n\n  protected displayField = computed<string>(() => {\n    if (this.textField()) {\n      return this.textField();\n    }\n    return this.defaultTextField();\n  });\n\n  protected searchPlaceholderText = signal<string>('');\n\n  //#endregion\n\n  //#region ----   Component State   ----\n\n  protected selectedItems = signal<any[]>([]);\n  protected isLoading = signal(false);\n  protected isOpen = signal(false);\n  protected tagBox = viewChild<AXTagBoxComponent>('tagBoxComponent');\n  protected searchTerm = signal<string | null>(null);\n\n  //#endregion\n\n  //#region ----   Private Properties   ----\n\n  private entityDef = signal<AXPEntity | null>(null);\n\n  /**\n   * Flag to prevent the value effect from running during internal updates.\n   * This prevents circular dependency when setItems() calls setValue().\n   */\n  private isInternalUpdate = false;\n\n  //#endregion\n\n  //#region ----   Effects   ----\n\n  #efEntity = effect(async () => {\n    const entityKey = this.entity();\n    if (!entityKey) return;\n    const [module, entity] = entityKey.split('.');\n    this.entityDef.set(await this.entityResolver.resolve(module, entity));\n  });\n\n  #efValue = effect(() => {\n    const value = this.getValue();\n    const entity = this.entityDef();\n\n    // Wait for entity definition to be loaded before processing value\n    if (!entity) {\n      return;\n    }\n\n    // Skip if this is an internal update (e.g., from setItems -> setValue)\n    // This prevents circular dependency\n    if (this.isInternalUpdate) {\n      return;\n    }\n\n    if (value) {\n      this.findByValue();\n    } else {\n      this.clear();\n    }\n  });\n\n  #efSearchPlaceholder = effect(async () => {\n    const entity = this.entityDef();\n    if (!entity) {\n      this.searchPlaceholderText.set('');\n      return;\n    }\n\n    const displayFieldName = this.displayField();\n    const displayProperty = entity.properties.find((property) => property.name === displayFieldName);\n    if (displayProperty) {\n      const translated = await this.translateService.translateAsync(displayProperty.title || displayProperty.name);\n      this.searchPlaceholderText.set(translated ? `Search in ${translated}...` : '');\n    } else {\n      const fallback = await this.translateService.translateAsync('@general:actions.search.title');\n      this.searchPlaceholderText.set(fallback ? `${fallback}...` : '');\n    }\n  });\n\n  //#endregion\n\n  //#region ----   Public Methods   ----\n\n  protected handleAddClick(e: AXClickEvent): void {\n    this.showTreeSelector();\n  }\n\n  protected handleValueChange(e: AXValueChangedEvent): void {\n    if (e.isUserInteraction) {\n      if (isNil(e.value) || isEmpty(e.value)) {\n        this.clear();\n      } else {\n        const items = Array.isArray(e.value) ? e.value : [e.value];\n        this.setItems(items);\n      }\n    }\n  }\n\n  protected handleOnBlur(e: AXFocusEvent): void {\n    setTimeout(() => {\n      if (!this.isOpen()) {\n        this.clearInput();\n      }\n    }, 100);\n  }\n\n  protected async handleKeyUp(e: AXHtmlEvent): Promise<void> {\n    const keyEvent = e.nativeEvent as KeyboardEvent;\n    const value = this.tagBox()?.inputValue() ?? '';\n    this.searchTerm.set(value);\n    if ((keyEvent.code == 'Enter' || keyEvent.code == 'NumpadEnter') && value) {\n      this.isLoading.set(true);\n      // For category widget, always open selector on Enter\n      this.showTreeSelector();\n      this.isLoading.set(false);\n    }\n    if (keyEvent.code == 'ArrowDown') {\n      this.showTreeSelector();\n    }\n  }\n\n  protected handleClearClick(): void {\n    this.clear();\n  }\n\n  protected async handleRemoveItem(event: Event, index: number): Promise<void> {\n    event.stopPropagation();\n    if (this.disabled()) {\n      return;\n    }\n\n    const currentItems = this.selectedItems();\n    if (index < 0 || index >= currentItems.length) {\n      return;\n    }\n\n    const filteredItems = currentItems.filter((_, i) => i !== index);\n\n    if (filteredItems.length === 0) {\n      this.clear();\n    } else {\n      await this.setItems(filteredItems);\n    }\n  }\n\n  public clearInput(): void {\n    this.tagBox()?.inputValue.set('');\n    this.searchTerm.set('');\n  }\n\n  private async showTreeSelector(): Promise<void> {\n    this.isOpen.set(true);\n\n    const currentValue = this.getValue();\n    const selectedIds = currentValue\n      ? this.normalizePopupSelectedIds(currentValue)\n      : [];\n\n    // Get current entity ID from context (if editing an entity)\n    const currentEntityId = this.contextService.getValue('id');\n    const excludedNodeId = currentEntityId ? String(currentEntityId) : undefined;\n\n    try {\n      const result = await this.popupService.open(AXPEntityCategoryTreeSelectorComponent, {\n        title: `${this.translateService.translateSync('@general:widgets.lookup.search.placeholder')} ${this.translateService.translateSync(\n          this.entityDef()?.formats.plural ?? '',\n        )}`,\n        size: 'md',\n        data: {\n          entityKey: signal(this.entity()),\n          textField: signal(this.textField()),\n          valueField: signal(this.valueField()),\n          allowMultiple: signal(this.multiple()),\n          selectedValues: signal(selectedIds),\n          searchPlaceholder: signal(this.searchPlaceholderText()),\n          excludedNodeId: signal(excludedNodeId),\n          selectedValuesInput: signal(selectedIds),\n        },\n      });\n\n      if (result?.data?.selected && Array.isArray(result.data.selected)) {\n        const newItems = this.multiple() ? result.data.selected : result.data.selected.slice(0, 1);\n\n        if (newItems.length === 0) {\n          // All items were deselected\n          this.clear();\n        } else {\n          // Set the new selection (replaces existing selection entirely)\n          await this.setItems(newItems);\n        }\n      } else if (result?.data?.selected === undefined && result?.data !== undefined) {\n        // User cancelled or closed popup without confirming - don't change anything\n        // This case is handled by the catch block or no result.data.selected\n      }\n    } catch (error) {\n      console.error('Error opening category tree selector:', error);\n    } finally {\n      this.isOpen.set(false);\n      this.tagBox()?.focus();\n    }\n  }\n\n  public clear(): void {\n    // Set flag to prevent circular dependency with the value effect\n    this.isInternalUpdate = true;\n\n    try {\n      this.setValue(null);\n      this.clearInput();\n      this.selectedItems.set([]);\n      this.cdr.markForCheck();\n    } finally {\n      // Reset flag after a short delay to ensure effect has time to skip\n      setTimeout(() => {\n        this.isInternalUpdate = false;\n      }, 0);\n    }\n  }\n\n  //#endregion\n\n  //#region ----   Private Methods   ----\n\n  private async findByValue(): Promise<void> {\n    this.isLoading.set(true);\n    const rawValue = this.getValue();\n\n    // If no value, clear and return\n    if (!rawValue) {\n      this.setItems([]);\n      this.isLoading.set(false);\n      return;\n    }\n\n    const values = castArray(rawValue);\n    const byKey = this.entityDef()?.queries?.byKey?.execute as Function;\n\n    if (!byKey) {\n      this.setItems([]);\n      this.isLoading.set(false);\n      return;\n    }\n\n    if (values.length === 0) {\n      this.setItems([]);\n      this.isLoading.set(false);\n      return;\n    }\n\n    try {\n      if (this.multiple()) {\n        // Filter out null/undefined/empty values\n        const validValues = values.filter((v) => v != null && v !== '' && v !== 'all');\n        if (validValues.length === 0) {\n          this.setItems([]);\n          this.isLoading.set(false);\n          return;\n        }\n\n        const items = await Promise.all(\n          validValues.map((value) => {\n            const id = extractValue(value, this.valueField());\n            if (!id) return null;\n            return byKey(id);\n          }),\n        );\n\n        // Filter out null results\n        const validItems = items.filter((item) => item != null);\n\n        // Calculate paths for items loaded from value\n        const itemsWithPaths = await Promise.all(validItems.map((item) => this.calculateItemPath(item)));\n        this.setItems(itemsWithPaths);\n      } else {\n        const id = extractValue(values[0], this.valueField());\n        if (!id || id === 'all') {\n          this.setItems([]);\n          this.isLoading.set(false);\n          return;\n        }\n\n        const item = await byKey(id);\n        if (!item) {\n          this.setItems([]);\n          this.isLoading.set(false);\n          return;\n        }\n\n        // Calculate path for item loaded from value\n        const itemWithPath = await this.calculateItemPath(item);\n        this.setItems(itemWithPath);\n      }\n    } catch (error) {\n      console.error('Error loading category items from value:', error);\n      this.setItems([]);\n    } finally {\n      this.isLoading.set(false);\n    }\n  }\n\n  private async setItems(items: any[]): Promise<void> {\n    // Set flag to prevent circular dependency with the value effect\n    this.isInternalUpdate = true;\n\n    try {\n      if (!items || items.length == 0) {\n        this.selectedItems.set([]);\n        this.setValue(null);\n        this.cdr.markForCheck();\n        return;\n      }\n\n      items = castArray(items);\n      this.clearInput();\n\n      // Ensure all items have paths\n      const itemsWithPaths = await Promise.all(\n        items.map(async (item) => {\n          // If item already has a path array, return it as is\n          if (item.path && Array.isArray(item.path) && item.path.length > 0) {\n            return item;\n          }\n          // Otherwise, calculate the path\n          return await this.calculateItemPath(item);\n        }),\n      );\n\n      this.selectedItems.set(itemsWithPaths);\n\n      const keys = itemsWithPaths.map((item) => get(item, this.valueField()));\n\n      // Extract data from valueField and set context by expose path\n      if (this.expose()) {\n        const exposeValue = castArray(this.expose());\n        const itemToExpose: any = {};\n\n        exposeValue.forEach((i) => {\n          if (typeof i == 'string') {\n            const values = itemsWithPaths.map((item) => set({}, i as string, get(item, i)));\n            setSmart(itemToExpose, i, this.singleOrMultiple(values));\n          } else {\n            // Extract data from item by source path and set context by target path\n            const values = this.multiple()\n              ? itemsWithPaths.map((item) => set({}, i.source, get(item, i.source)))\n              : itemsWithPaths.map((item) => get(item, i.source));\n            setSmart(itemToExpose, i.target, this.singleOrMultiple(values));\n          }\n        });\n        this.contextService.applyObjectPaths(itemToExpose, { origin: 'user' });\n        this.setValue(this.singleOrMultiple(keys));\n      } else {\n        this.setValue(this.singleOrMultiple(keys));\n      }\n\n      // Trigger change detection\n      this.cdr.markForCheck();\n    } finally {\n      // Reset flag after a short delay to ensure effect has time to skip\n      setTimeout(() => {\n        this.isInternalUpdate = false;\n      }, 0);\n    }\n  }\n\n  private singleOrMultiple(values: any[]): any | any[] {\n    return this.multiple() ? values : values[0];\n  }\n\n  private normalizePopupSelectedIds(currentValue: unknown): string[] {\n    const ids = (this.multiple() ? castArray(currentValue) : castArray(currentValue).slice(0, 1))\n      .map((v) => String(extractValue(v, this.valueField())))\n      .filter((id) => id && id !== 'all');\n    return this.multiple() ? ids : ids.slice(0, 1);\n  }\n\n  protected getItemLabel(item: any): string {\n    if (!item) {\n      return '';\n    }\n    // If path is available as array, join it with customizable separator\n    if (item.path && Array.isArray(item.path) && item.path.length > 0) {\n      return this.joinPath(item.path);\n    }\n    // Fall back to display field if no path\n    return this.joinPath([get(item, this.displayField())].filter((x) => x != null && x !== ''));\n  }\n\n  /**\n   * Get item path as array for breadcrumb component (raw MLS or string per segment).\n   */\n  protected getItemPath(item: any): AXPMultiLanguageString[] {\n    if (!item) {\n      return [];\n    }\n    // If path is available as array, return it\n    if (item.path && Array.isArray(item.path) && item.path.length > 0) {\n      return item.path;\n    }\n    // Fall back to display field if no path\n    const displayValue = get(item, this.displayField());\n    return displayValue != null && displayValue !== '' ? [displayValue as AXPMultiLanguageString] : [];\n  }\n\n  /**\n   * Join path array with separator.\n   * Override this method to customize the separator (e.g., \" > \", \" -> \", \" / \")\n   */\n  protected joinPath(path: unknown[]): string {\n    const lang = this.translateService.getActiveLang();\n    return path\n      .map((p) => resolveMultiLanguageString(p as AXPMultiLanguageString, lang))\n      .filter((s) => s.length > 0)\n      .join(' > ');\n  }\n\n  protected getItemId(item: any): string {\n    if (!item) {\n      return '';\n    }\n    return String(get(item, this.valueField()) ?? '');\n  }\n\n  /**\n   * Calculate the full path from root to the item.\n   * Returns an array of strings like [\"C\", \"B\"] for item B under parent C.\n   */\n  private async calculateItemPath(item: any): Promise<any> {\n    if (!item || !this.entityDef()) {\n      return item;\n    }\n\n    // If item already has a path array, return it as is\n    if (item.path && Array.isArray(item.path) && item.path.length > 0) {\n      return item;\n    }\n\n    const parentKey = this.entityDef()?.parentKey;\n    if (!parentKey) {\n      // No parent key means flat structure, return item with just its title as path array\n      const title = get(item, this.displayField());\n      return { ...item, path: title != null && title !== '' ? [title] : [] };\n    }\n\n    const valueField = this.valueField();\n    const textField = this.displayField();\n    const byKey = this.entityDef()?.queries?.byKey?.execute as Function;\n\n    if (!byKey) {\n      return item;\n    }\n\n    const path: AXPMultiLanguageString[] = [];\n    let currentItem: any = item;\n    const visitedIds = new Set<string>(); // Prevent infinite loops\n\n    // Build path by traversing up the parent chain\n    while (currentItem) {\n      const currentId = String(get(currentItem, valueField) ?? '');\n      if (!currentId || visitedIds.has(currentId)) {\n        break; // Prevent infinite loops\n      }\n      visitedIds.add(currentId);\n\n      const title = get(currentItem, textField);\n      if (title != null && title !== '') {\n        path.unshift(title as AXPMultiLanguageString); // Add to beginning to maintain hierarchy order\n      }\n\n      // Get parent ID from current item\n      const parentId = get(currentItem, parentKey);\n      if (!parentId || parentId === 'all' || parentId === currentId) {\n        break; // Reached root or invalid parent\n      }\n\n      try {\n        // Fetch parent item\n        const parentItem = await byKey(parentId);\n        if (!parentItem) {\n          break; // Parent not found, stop traversal\n        }\n        currentItem = parentItem;\n      } catch (error) {\n        console.error('Error fetching parent item:', error);\n        break;\n      }\n    }\n\n    // Return item with path array, or just the item title if no path\n    const rawLeafTitle = get(item, textField);\n    const pathArray =\n      path.length > 0\n        ? path\n        : rawLeafTitle != null && rawLeafTitle !== ''\n          ? [rawLeafTitle as AXPMultiLanguageString]\n          : [];\n    return { ...item, path: pathArray };\n  }\n\n  //#endregion\n}\n","import { AXPEntity } from '@acorex/platform/layout/entity-contracts';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXTranslationModule } from '@acorex/core/translation';\n\nimport { AXPMultiLanguageString } from '@acorex/platform/contracts';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { castArray, isNil } from 'lodash-es';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\n\n@Component({\n  selector: 'axp-entity-category-widget-view',\n  template: `\n    @if (loading()) {\n      <ax-loading></ax-loading>\n    } @else {\n      @if (displayItems().length > 1) {\n        @for (item of displayItems(); track item.id) {\n          <ax-badge class=\"ax-p-0.5 {{ badgeClass() }}\" [text]=\"(item.titleRaw | translate | async) || ''\"></ax-badge>\n        }\n      } @else if (displayItems().length == 1) {\n        <ax-badge\n          class=\"ax-p-0.5 {{ badgeClass() }}\"\n          [text]=\"(displayItems()[0].titleRaw | translate | async) || ''\"\n        ></ax-badge>\n      } @else {\n        <span class=\"ax-text-muted\">---</span>\n      }\n    }\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AXLoadingModule, AXBadgeModule, AXTranslationModule, AsyncPipe],\n})\nexport class AXPEntityCategoryWidgetViewComponent extends AXPValueWidgetComponent<any> {\n  //#region ----   Services & Dependencies   ----\n\n  protected readonly entityResolver = inject(AXPEntityDefinitionRegistryService);\n\n  //#endregion\n\n  //#region ----   Computed Properties   ----\n\n  protected entity = computed<string>(() => (this.options()['entity'] as string) ?? '');\n  protected multiple = computed<boolean>(() => (this.options()['multiple'] ?? false) as boolean);\n  protected valueField = computed<string>(() => (this.options()['valueField'] as string) ?? 'id');\n  protected textField = computed<string>(() => (this.options()['textField'] as string) ?? 'title');\n  protected badgeClass = computed<string>(() => (this.options()['badgeClass'] as string) ?? 'ax-accent1');\n\n  protected displayField = computed<string>(() => {\n    return (\n      this.textField() ??\n      this.entityDef()?.formats.lookup ??\n      this.entityDef()?.properties.find((c) => c.name != 'id')?.name ??\n      'title'\n    );\n  });\n\n  //#endregion\n\n  //#region ----   Component State   ----\n\n  protected loading = signal(false);\n  private entityDef = signal<AXPEntity | null>(null);\n  protected displayItems = signal<Array<{ id: string; titleRaw: AXPMultiLanguageString | null | undefined }>>([]);\n\n  //#endregion\n\n  //#region ----   Effects   ----\n\n  private efEntity = effect(async () => {\n    const entityKey = this.entity();\n    if (!entityKey) {\n      return;\n    }\n\n    const [module, entity] = entityKey.split('.');\n    if (!module || !entity) {\n      return;\n    }\n\n    this.entityDef.set(await this.entityResolver.resolve(module, entity));\n  });\n\n  private efDisplay = effect(async () => {\n    const value = this.getValue();\n    if (isNil(value)) {\n      this.displayItems.set([]);\n    } else {\n      const items = castArray(value).map(async (item: any) => await this.extractItem(item));\n      this.displayItems.set(await Promise.all(items));\n    }\n  });\n\n  //#endregion\n\n  //#region ----   Private Methods   ----\n\n  private async extractItem(item: any): Promise<{ id: string; titleRaw: AXPMultiLanguageString | null | undefined }> {\n    if (typeof item == 'object') {\n      return {\n        id: item[this.valueField()],\n        titleRaw: item[this.displayField()],\n      };\n    }\n\n    const def = this.entityDef();\n    const byKey = def?.queries?.byKey?.execute as Function;\n    if (byKey) {\n      this.loading.set(true);\n      try {\n        const fetchedItem = await byKey(item);\n        return {\n          id: fetchedItem[this.valueField()],\n          titleRaw: fetchedItem[this.displayField()],\n        };\n      } finally {\n        this.loading.set(false);\n      }\n    }\n\n    return {\n      id: String(item),\n      titleRaw: String(item),\n    };\n  }\n\n  //#endregion\n}\n","import { AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core-contracts';\nimport { AXPWidgetsCatalog } from '@acorex/platform/contracts';\n\nimport {\n  AXP_ALLOW_CLEAR_PROPERTY,\n  AXP_ALLOW_MULTIPLE_PROPERTY,\n  AXP_DATA_PATH_PROPERTY,\n  AXP_DATA_PROPERTY_GROUP,\n  AXP_DISABLED_PROPERTY,\n} from '@acorex/platform/layout/widgets';\n\nexport const AXPEntityCategoryWidget: AXPWidgetConfig = {\n  name: 'entity-category-editor',\n  title: 'Entity Category',\n  categories: [],\n  groups: [AXPWidgetGroupEnum.EntityWidget],\n  defaultFilterWidgetName: 'lookup-filter',\n  type: 'editor',\n  icon: 'fa-light fa-sitemap',\n  properties: [\n    AXP_DISABLED_PROPERTY,\n    AXP_ALLOW_CLEAR_PROPERTY,\n    AXP_DATA_PATH_PROPERTY,\n    {\n      name: 'entity',\n      title: 'Entity',\n      group: AXP_DATA_PROPERTY_GROUP,\n      schema: {\n        dataType: 'string',\n        interface: {\n          name: 'entity',\n          path: 'options.entity',\n          type: AXPWidgetsCatalog.text,\n        },\n      },\n      visible: true,\n    },\n    AXP_ALLOW_MULTIPLE_PROPERTY,\n    {\n      name: 'textField',\n      title: 'Text Field',\n      group: AXP_DATA_PROPERTY_GROUP,\n      schema: {\n        dataType: 'string',\n        interface: {\n          name: 'textField',\n          path: 'options.textField',\n          type: AXPWidgetsCatalog.text,\n        },\n      },\n      visible: true,\n    },\n    {\n      name: 'valueField',\n      title: 'Value Field',\n      group: AXP_DATA_PROPERTY_GROUP,\n      schema: {\n        dataType: 'string',\n        interface: {\n          name: 'valueField',\n          path: 'options.valueField',\n          type: AXPWidgetsCatalog.text,\n        },\n      },\n      visible: true,\n    },\n    {\n      name: 'parentKey',\n      title: 'Parent Key',\n      group: AXP_DATA_PROPERTY_GROUP,\n      schema: {\n        dataType: 'string',\n        interface: {\n          name: 'parentKey',\n          path: 'options.parentKey',\n          type: AXPWidgetsCatalog.text,\n        },\n      },\n      visible: true,\n    },\n    {\n      name: 'expose',\n      title: 'Expose',\n      group: AXP_DATA_PROPERTY_GROUP,\n      schema: {\n        dataType: 'string',\n        interface: {\n          name: 'expose',\n          path: 'options.expose',\n          type: AXPWidgetsCatalog.select,\n        },\n      },\n      visible: true,\n    },\n  ],\n  components: {\n    view: {\n      component: () =>\n        import('./entity-category-widget-view.component').then((c) => c.AXPEntityCategoryWidgetViewComponent),\n    },\n    edit: {\n      component: () =>\n        import('./entity-category-widget-edit.component').then((c) => c.AXPEntityCategoryWidgetEditComponent),\n    },\n    column: {\n      component: () =>\n        import('./entity-category-widget-column.component').then((c) => c.AXPEntityCategoryWidgetColumnComponent),\n    },\n    designer: {\n      component: () =>\n        import('./entity-category-widget-edit.component').then((c) => c.AXPEntityCategoryWidgetEditComponent),\n    },\n  },\n};\n","\nimport { AXPWidgetConfig, AXPWidgetGroupEnum, createBooleanProperty } from '@acorex/platform/layout/widget-core-contracts';\nimport {\n  AXP_BEHAVIOR_PROPERTY_GROUP,\n  AXP_ALLOW_CLEAR_PROPERTY,\n  AXP_ALLOW_MULTIPLE_PROPERTY,\n  AXP_DATA_PATH_PROPERTY,\n  AXP_DISABLED_PROPERTY,\n  AXP_NAME_PROPERTY,\n  AXP_PLACEHOLDER_PROPERTY,\n  AXP_READONLY_PROPERTY,\n} from '@acorex/platform/layout/widgets';\n\nexport const AXPEntityDefinitionProviderWidget: AXPWidgetConfig = {\n  name: 'entity-definition-provider-editor',\n  title: 'Entity definition',\n  description: 'Select a registered entity (module.name)',\n  icon: 'fa-light fa-database',\n  categories: [],\n  groups: [AXPWidgetGroupEnum.EntityWidget],\n  type: 'editor',\n  properties: [\n    AXP_NAME_PROPERTY,\n    AXP_DATA_PATH_PROPERTY,\n    AXP_DISABLED_PROPERTY,\n    AXP_READONLY_PROPERTY,\n    AXP_PLACEHOLDER_PROPERTY,\n    AXP_ALLOW_CLEAR_PROPERTY,\n    AXP_ALLOW_MULTIPLE_PROPERTY,\n    createBooleanProperty({\n      name: 'allowSearch',\n      title: 'Allow search',\n      path: 'options.allowSearch',\n      group: AXP_BEHAVIOR_PROPERTY_GROUP,\n    }),\n  ],\n  components: {\n    view: {\n      component: () =>\n        import('@acorex/platform/layout/widgets').then((m) => m.AXPProviderSelectWidgetViewComponent),\n    },\n    edit: {\n      component: () =>\n        import('./entity-definition-provider-widget-edit.component').then(\n          (c) => c.AXPEntityDefinitionProviderWidgetEditComponent,\n        ),\n    },\n    column: {\n      component: () =>\n        import('@acorex/platform/layout/widgets').then((m) => m.AXPProviderSelectWidgetColumnComponent),\n    },\n    designer: {\n      component: () =>\n        import('./entity-definition-provider-widget-edit.component').then(\n          (c) => c.AXPEntityDefinitionProviderWidgetEditComponent,\n        ),\n    },\n  },\n};\n\ndeclare module '@acorex/platform/layout/widget-core-contracts' {\n  interface AXPWidgetTypesMap {\n    entityDefinitionProvider: 'entity-definition-provider-editor';\n  }\n}\n","import { AXPEntity } from '@acorex/platform/layout/entity-contracts';\nimport { resolveSearchableText } from '@acorex/platform/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\n\nimport { AXPProviderSelectWidgetEditBase } from '@acorex/platform/layout/widgets';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, effect, inject, signal, untracked } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { get } from 'lodash-es';\nimport { AXPEntityResolver } from '../../entity.config';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\n\n@Component({\n  selector: 'axp-entity-definition-provider-widget-edit',\n  templateUrl: './entity-definition-provider-widget-edit.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    FormsModule,\n    AXSelectBoxModule,\n    AXFormModule,\n    AXDecoratorModule,\n    AXSearchBoxModule,\n    AXTranslationModule,\n    AsyncPipe,\n  ],\n})\nexport class AXPEntityDefinitionProviderWidgetEditComponent extends AXPProviderSelectWidgetEditBase {\n  //#region ---- Services & Dependencies ----\n\n  private readonly entityRegistry = inject(AXPEntityDefinitionRegistryService);\n  private readonly entityResolver = inject(AXPEntityResolver);\n  private readonly translationService = inject(AXTranslationService);\n\n  /**\n   * Last applied module filter (from context) to avoid redundant reloads.\n   */\n  private readonly lastModuleFilterKey = signal<string | null | undefined>(undefined);\n\n  //#endregion\n\n  //#region ---- React to sibling module field (context signal) ----\n\n  /**\n   * Reloads entity options when `filterModuleField` changes in form context (not only via `widget.refresh()`).\n   */\n  private readonly reloadWhenModuleContextChanges = effect(() => {\n    this.options();\n    const filterField = this.options()['filterModuleField'] as string | undefined;\n    if (!filterField) {\n      return;\n    }\n    this.contextService.data();\n    this.parentPath();\n    const data = this.contextService.data();\n    const path = this.resolveSiblingContextPath(filterField);\n    const modRaw = get(data as object, path) ?? get(data as object, filterField);\n    const modStr =\n      modRaw != null && String(modRaw).trim() !== '' ? String(modRaw).trim() : null;\n    if (modStr === this.lastModuleFilterKey()) {\n      return;\n    }\n    this.lastModuleFilterKey.set(modStr);\n    untracked(() => {\n      void this.reloadProviderData();\n    });\n  });\n\n  //#endregion\n\n  //#region ---- Data loading ----\n\n  /**\n   * Options:\n   * - `filterModuleField`: sibling context field name (e.g. `entityListModule`); when set, only entities in that module are listed.\n   * - `valueFormat`: `fullKey` (`module.name`, default) or `entityName` (short name only, for menus that store `entityListRef.entity`).\n   */\n  protected override async loadDataSourceRows(): Promise<Array<{ value: string; title: string }>> {\n    const entries = await this.entityResolver.listAll();\n    const filterModuleField = this.options()['filterModuleField'] as string | undefined;\n    const valueFormat = (this.options()['valueFormat'] as 'fullKey' | 'entityName') ?? 'fullKey';\n\n    let list = entries;\n    if (filterModuleField) {\n      const mod = this.readModuleFromContext(filterModuleField);\n      list = mod ? entries.filter((e) => e.module === mod) : [];\n    }\n\n    const locale = this.translationService.getActiveLang();\n    const registeredByKey = new Map<string, AXPEntity>(\n      this.entityRegistry.getAll().map((e: AXPEntity) => [`${e.module}.${e.name}`, e]),\n    );\n\n    return list.map((e) => {\n      const cached = registeredByKey.get(e.fullName);\n      const resolvedTitle = cached\n        ? resolveSearchableText(cached.title, locale, this.translationService).trim() || e.name\n        : e.name;\n      return {\n        value: valueFormat === 'entityName' ? e.name : e.fullName,\n        title: `${resolvedTitle} (${e.fullName})`,\n      };\n    });\n  }\n\n  //#endregion\n\n  //#region ---- Refresh (e.g. when sibling module field changes) ----\n\n  override refresh(): void {\n    void this.reloadProviderData().then(() => {\n      super.refresh();\n    });\n  }\n\n  //#endregion\n\n  //#region ---- Utility Methods ----\n\n  /**\n   * Reads sibling field from context store data (same shape as `lodash/get` paths).\n   */\n  private readModuleFromContext(field: string): string | null {\n    const data = this.contextService.data();\n    if (data == null || typeof data !== 'object') {\n      return null;\n    }\n    const path = this.resolveSiblingContextPath(field);\n    const modRaw = get(data as object, path) ?? get(data as object, field);\n    return modRaw != null && String(modRaw).trim() !== '' ? String(modRaw).trim() : null;\n  }\n\n  /**\n   * Resolves a sibling field path relative to the current widget's parent path.\n   */\n  private resolveSiblingContextPath(fieldName: string): string {\n    const parent = this.parentPath();\n    return parent ? `${parent}.${fieldName}` : fieldName;\n  }\n\n  //#endregion\n}\n","<ax-select-box\n  [placeholder]=\"(placeholder() | translate | async) ?? ''\"\n  [dataSource]=\"dataSource()\"\n  [disabled]=\"disabled()\"\n  [valueField]=\"valueField()\"\n  [textField]=\"textField()\"\n  [textTemplate]=\"textTemplate()\"\n  [multiple]=\"multiple()\"\n  [readonly]=\"readonly()\"\n  [ngModel]=\"filterMode() ? selectFilterDisplayValue() : getValue()\"\n  (onValueChanged)=\"handleValueChange($event)\"\n>\n  @if (allowSearch()) {\n    <ax-search-box\n      [autoSearch]=\"false\"\n      [ngModel]=\"searchValue()\"\n      (onValueChanged)=\"handleSearchValueChange($event)\"\n      ><ax-clear-button></ax-clear-button\n    ></ax-search-box>\n  }\n  @if (hasClearButton() && !filterMode()) {\n    <ax-clear-button></ax-clear-button>\n  }\n  @for (validation of validationRules(); track $index) {\n    <ax-validation-rule\n      [rule]=\"validation.rule\"\n      [message]=\"validation.options?.message\"\n      [options]=\"validation.options\"\n    ></ax-validation-rule>\n  }\n</ax-select-box>\n","\nimport type { AXDataSourceOperator } from '@acorex/cdk/common';\nimport { AXPEntity, ENTITY_ROW_POPUP_TITLE_OPTION } from '@acorex/platform/layout/entity-contracts';\nimport { AXPColumnWidthService, IColumnWithWidth } from '@acorex/platform/core';\nimport { AXPDataListWidgetColumn } from '@acorex/platform/layout/widgets';\n\n//#region ----   Column Mapping Helpers   ----\n\nfunction resolveEntityListRowTitleTemplate(entity: AXPEntity): string | undefined {\n  return (\n    entity.interfaces?.master?.single?.title ??\n    entity.formats?.searchResult?.title ??\n    entity.formats?.individual\n  );\n}\n\n/**\n * Maps an entity property to a list widget column configuration.\n * Preserves readonly behavior and leverages the property's interface options when available.\n */\nexport function mapPropertyToWidgetColumn(property: any): AXPDataListWidgetColumn {\n  return {\n    name: property.name,\n    title: property.title,\n    visible: true,\n    widget: property.schema?.interface\n      ? {\n        type: property.schema.interface.type || 'text-editor',\n        path: property.name,\n        options: {\n          readonly: true,\n          ...property.schema.interface.options,\n        },\n      }\n      : {\n        type: 'text-editor',\n        path: property.name,\n        options: { readonly: true },\n      },\n  };\n}\n\n/**\n * Maps an entity column metadata (and its related property) to a list widget column configuration.\n * Uses column.showAs when property is undefined (e.g. for related entity columns like person.firstName).\n */\nexport function mapEntityColumnToWidgetColumn(entity: AXPEntity, column: any): AXPDataListWidgetColumn {\n  const property = entity.properties.find((p) => p.name === column.name);\n  const entityRowTitleTemplate = resolveEntityListRowTitleTemplate(entity);\n\n  const interfaceType = property?.schema?.interface?.type;\n  const widgetFromProperty = property?.schema?.interface\n    ? {\n      type: interfaceType || 'text-editor',\n      path: column.options?.dataPath || column.name,\n      options: {\n        readonly: true,\n        columnName: column.name,\n        ...property.schema.interface.options,\n        ...(entityRowTitleTemplate\n          ? { [ENTITY_ROW_POPUP_TITLE_OPTION]: entityRowTitleTemplate }\n          : {}),\n        ...(interfaceType === 'attachments'\n          ? {\n            entityName:\n              property.schema.interface.options?.['entityName'] ??\n              `${entity.module}.${entity.name}`,\n            entityField: property.schema.interface.options?.['entityField'] ?? column.name,\n          }\n          : {}),\n        ...(property.schema.interface.children?.length && { children: property.schema.interface.children }),\n      },\n    }\n    : null;\n\n  const widgetFromShowAs =\n    column.showAs && !widgetFromProperty\n      ? {\n        type: column.showAs.type || 'text-editor',\n        path: column.options?.dataPath || column.name,\n        options: {\n          readonly: true,\n          columnName: column.name,\n          ...column.showAs.options,\n        },\n      }\n      : null;\n\n  const defaultWidget = {\n    type: 'text-editor',\n    path: column.options?.dataPath || column.name,\n    options: { readonly: true, columnName: column.name },\n  };\n\n  const widget = widgetFromProperty ?? widgetFromShowAs ?? defaultWidget;\n\n  return {\n    name: column.name,\n    title: column.title || property?.title || column.name,\n    width: column.options?.width,\n    visible: column.options?.visible !== false,\n    widget,\n  };\n}\n\n/**\n * Applies entity column width (explicit or resolved via {@link AXPColumnWidthService}) to data-list columns.\n */\nexport function applyDataListColumnWidths(\n  columns: AXPDataListWidgetColumn[],\n  columnWidthService: AXPColumnWidthService,\n): AXPDataListWidgetColumn[] {\n  return columns.map((column) => {\n    const existingWidth = column.width ?? column.widget?.options?.width;\n    if (existingWidth) {\n      return existingWidth === column.width ? column : { ...column, width: String(existingWidth) };\n    }\n\n    const columnWithWidth: IColumnWithWidth = {\n      name: column.name,\n      widget: column.widget ? { type: column.widget.type } : undefined,\n    };\n    const resolvedWidth = columnWidthService.resolveWidth(columnWithWidth);\n    if (!resolvedWidth) {\n      return column;\n    }\n\n    return { ...column, width: resolvedWidth };\n  });\n}\n\n//#endregion\n\n//#region ----   Include/Exclude Utilities   ----\n\n/**\n * Applies include and exclude filters to a named collection while preserving order.\n */\nexport function applyIncludeExclude<T extends { name: string }>(\n  items: T[],\n  include: string[] = [],\n  exclude: string[] = [],\n): T[] {\n  let result = items;\n  if (include.length > 0) {\n    result = result.filter((i) => include.includes(i.name));\n  }\n  if (exclude.length > 0) {\n    result = result.filter((i) => !exclude.includes(i.name));\n  }\n  return result;\n}\n\n/**\n * Returns only visible (non-hidden) properties of an entity.\n */\nexport function getVisibleProperties(entity: AXPEntity): any[] {\n  return entity.properties.filter((prop) => prop.schema?.visible !== false);\n}\n\n//#endregion\n\n//#region ---- Toolbar filter merge ----\n\nexport interface EntityListToolbarFilter {\n  field: string;\n  operator: AXDataSourceOperator;\n  value: unknown;\n  hidden?: boolean;\n}\n\n/**\n * Merges toolbar filters by `field`. Overlay entries win and keep parent-scope filters from being dropped.\n */\nexport function mergeEntityListToolbarFilters(\n  baseFilters: EntityListToolbarFilter[],\n  overlayFilters: EntityListToolbarFilter[],\n): EntityListToolbarFilter[] {\n  const byField = new Map(baseFilters.map((filter) => [filter.field, filter]));\n  for (const filter of overlayFilters) {\n    if (filter.field) {\n      byField.set(filter.field, filter);\n    }\n  }\n  return [...byField.values()];\n}\n\n//#endregion\n","import { AXPEntity, AXPEntityCommandScope, AXPEntityTableColumn, getEntityInfo, isEntityActionPermitted } from '@acorex/platform/layout/entity-contracts';\nimport { AXDataSource } from '@acorex/cdk/common';\nimport { AXRowCommandItemClickEvent } from '@acorex/components/data-table';\nimport {\n  AXPCommonSettings, AXPSettingsService } from '@acorex/platform/common';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPExpressionEvaluatorScope, AXPExpressionEvaluatorService, AXPColumnWidthService } from '@acorex/platform/core';\nimport {\n  AXPDataListWidgetColumn,\n  AXPDataListWidgetComponentOptions,\n  AXPDataListWidgetRowCommand,\n  AXP_ROW_EXPR_PREFIX,\n} from '@acorex/platform/layout/widgets';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { Injectable, inject } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { resetPagingForTreeChildrenLoad } from '../../entity-list-paging.util';\nimport { AXPEntityCommandTriggerViewModel } from '../../entity.viewmodel';\nimport {\n  applyDataListColumnWidths,\n  applyIncludeExclude,\n  getVisibleProperties,\n  mapEntityColumnToWidgetColumn as mapEntityColumnToWidgetColumnHelper,\n  mapPropertyToWidgetColumn,\n} from './entity-list.mappers';\n\n@Injectable()\nexport class AXPEntityListTableService {\n  //#region ----   Services & Dependencies   ----\n  private readonly workflow = inject(AXPWorkflowService);\n  private readonly commandService = inject(AXPCommandService);\n  private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n  private readonly settings = inject(AXPSettingsService);\n  private readonly columnWidthService = inject(AXPColumnWidthService);\n  private readonly session = inject(AXPSessionService);\n\n  //#endregion\n\n  //#region ----   Public Methods   ----\n\n  /**\n   * Convert Entity to List Widget Options\n   */\n  async convertEntityToListOptions(\n    entity: AXPEntity,\n    options: any,\n    allActions: AXPEntityCommandTriggerViewModel[],\n  ): Promise<AXPDataListWidgetComponentOptions> {\n    const viewIndexCol = entity.interfaces?.master?.list?.views?.[0]?.indexCol;\n    let showIndex = false;\n    if (viewIndexCol !== undefined) {\n      showIndex = viewIndexCol;\n    } else {\n      try {\n        const fromSetting = await this.settings.get<boolean>(AXPCommonSettings.ShowRowIndexColumn);\n        showIndex = fromSetting ?? false;\n      } catch {\n        showIndex = false;\n      }\n    }\n\n    const listOptions = {\n      // 📊 Data Source\n      dataSource: this.createDataSource(entity),\n\n      // 📋 Columns from Properties\n      columns: this.createColumnsFromProperties(entity, options),\n\n      // 🎯 Row Commands from Actions\n      primaryCommands: this.createRowCommands(allActions, 'primary'),\n      secondaryCommands: this.createRowCommands(allActions, 'secondary'),\n\n      // ⚙️ Table Features\n      showIndex,\n      allowSelection: this.hasSelectedScopeActions(entity),\n      paging: true,\n      showHeader: true,\n      showFooter: false,\n\n      // 🔗 Entity Configuration\n      parentField: entity.parentKey,\n      fetchDataMode: 'manual',\n\n      minHeight: 250,\n\n      // ⏳ Loading Configuration\n      loading: {\n        enabled: true,\n        animation: true,\n      },\n\n      // 🎪 Events\n      ...this.createDefaultEvents(entity, allActions, options?.excludeProperties),\n    };\n\n    return listOptions;\n  }\n\n  //#endregion\n\n  //#region ----   Private Methods   ----\n\n  /**\n   * Create DataSource for Entity\n   */\n  private createDataSource(entity: AXPEntity): AXDataSource {\n    return new AXDataSource({\n      byKey: (key) => {\n        const func = entity.queries?.byKey?.execute as Function;\n        return func(key);\n      },\n      load: (e) => {\n        const func = entity.queries?.list?.execute as Function;\n        if (!func || typeof func !== 'function') {\n          throw new Error(`Entity ${entity.name} does not have a list query`);\n        }\n        resetPagingForTreeChildrenLoad(e, entity.parentKey);\n        return func(e);\n      },\n      pageSize: entity.interfaces?.master?.list?.views?.[0]?.pageSize || 10,\n      key: 'id',\n    });\n  }\n\n  /**\n   * Convert Properties to Columns\n   */\n  private createColumnsFromProperties(entity: AXPEntity, options?: any): AXPDataListWidgetColumn[] {\n    const excludeColumns = options?.excludeColumns || [];\n    const includeColumns = options?.includeColumns || [];\n    const relatedTableColumns = options?.relatedTableColumns as AXPEntityTableColumn[] | undefined;\n\n    let baseColumns: AXPDataListWidgetColumn[];\n\n    if (relatedTableColumns?.length) {\n      baseColumns = relatedTableColumns.map((col) => this.mapEntityColumnToWidgetColumn(entity, col));\n    } else if (entity.columns && entity.columns.length > 0) {\n      baseColumns = entity.columns.map((col) => this.mapEntityColumnToWidgetColumn(entity, col));\n    } else {\n      baseColumns = getVisibleProperties(entity).map((prop) => mapPropertyToWidgetColumn(prop));\n    }\n\n    return applyDataListColumnWidths(\n      applyIncludeExclude(baseColumns, includeColumns, excludeColumns),\n      this.columnWidthService,\n    );\n  }\n\n  /**\n   * Map EntityTableColumn to ListWidgetColumn\n   */\n  private mapEntityColumnToWidgetColumn(entity: AXPEntity, column: any): AXPDataListWidgetColumn {\n    return mapEntityColumnToWidgetColumnHelper(entity, column);\n  }\n\n  /**\n   * Convert Entity Actions to Row Commands\n   */\n  private createRowCommands(\n    actions: AXPEntityCommandTriggerViewModel[],\n    priority: 'primary' | 'secondary',\n  ): AXPDataListWidgetRowCommand[] {\n    return actions\n      .filter(\n        (action) =>\n          action.scope === AXPEntityCommandScope.Individual && // Only individual actions\n          action.priority === priority &&\n          isEntityActionPermitted(action, (...keys) => this.session.authorize(...keys)),\n      )\n      .map((action) => ({\n        name: action.name as any,\n        text: action.title,\n        icon: action.icon,\n        color: action.color,\n        look: 'outline',\n        hidden: priority === 'secondary' ? this.wrapRowExpr(action.hidden) : action.hidden,\n        disabled: priority === 'secondary' ? this.wrapRowExpr(action.disabled) : action.disabled,\n      }));\n  }\n\n  /**\n   * Wraps string values with AXP_ROW_EXPR_PREFIX so widget-renderer does not\n   * evaluate them (it only treats {{ ... }} as expressions). Data-list will\n   * unwrap and evaluate per row with row data. Only used for secondary commands.\n   */\n  private wrapRowExpr(value: boolean | string | undefined): boolean | string | undefined {\n    if (value === undefined || value === null || typeof value !== 'string') {\n      return value;\n    }\n    return `${AXP_ROW_EXPR_PREFIX}${value}`;\n  }\n\n  /**\n   * Check if entity has Selected Scope Actions\n   */\n  private hasSelectedScopeActions(entity: AXPEntity): boolean {\n    const actions = entity.interfaces?.master?.list?.actions || [];\n    return actions.some(\n      (action) =>\n        action.scope === AXPEntityCommandScope.Selected &&\n        isEntityActionPermitted(action, (...keys) => this.session.authorize(...keys)),\n    );\n  }\n\n  private evaluateExpressions = async (options: { [key: string]: string }, data: any) => {\n    if (!options) {\n      return {} as any;\n    }\n    const scope: AXPExpressionEvaluatorScope = {\n      context: {\n        eval: (path: string) => {\n          return get(data, path);\n        },\n      },\n    };\n    return await this.expressionEvaluator.evaluate(options, scope);\n  };\n\n  /**\n   * Handle execution of a row command (shared by double-click and command handlers)\n   */\n  private async handleRowCommand(\n    e: AXRowCommandItemClickEvent,\n    selectedRows: any[] | undefined,\n    entity: AXPEntity,\n    allActions: AXPEntityCommandTriggerViewModel[],\n    relatedListExcludeProperties?: string[],\n  ): Promise<void> {\n    const data = e.data;\n    const commandName = e.name;\n    const action = allActions.find((c) => {\n      return (\n        c.name == e.name &&\n        ((selectedRows?.length\n          ? c.scope == AXPEntityCommandScope.Selected\n          : c.scope == AXPEntityCommandScope.Individual) ||\n          c.scope == AXPEntityCommandScope.TypeLevel)\n      );\n    });\n    const command = commandName.split('&')[0];\n\n    const evaluatedOptions = await this.evaluateExpressions(action?.options as any, data);\n    const options = this.mergeRelatedListFormOptions(\n      command,\n      evaluatedOptions,\n      relatedListExcludeProperties,\n    );\n    if (this.commandService.exists(command)) {\n      const excludeProperties = options['excludeProperties'] as string[] | undefined;\n      await this.commandService.execute(command, {\n        __context__: {\n          entity: getEntityInfo(entity).source,\n          entityInfo: {\n            name: entity.name,\n            module: entity.module,\n            title: entity.title,\n            parentKey: entity.parentKey,\n            source: `${entity.module}.${entity.name}`,\n          },\n\n          data: action?.scope == AXPEntityCommandScope.Selected ? selectedRows : data,\n\n          options,\n          metadata: action?.metadata,\n        },\n        options,\n        metadata: action?.metadata,\n        ...(excludeProperties?.length ? { excludeProperties } : {}),\n      });\n    } else {\n      await this.workflow.execute(command, {\n        entity: getEntityInfo(entity).source,\n        entityInfo: {\n          name: entity.name,\n          module: entity.module,\n          title: entity.title,\n          parentKey: entity.parentKey,\n          source: `${entity.module}.${entity.name}`,\n        },\n        data: action?.scope == AXPEntityCommandScope.Selected ? selectedRows : data,\n        options: options,\n        metadata: action?.metadata,\n      });\n    }\n  }\n\n  /**\n   * When a related entity list declares `excludeProperties`, row commands bypass the details page\n   * `execute()` merge — apply the same exclusions for embedded create/update commands.\n   */\n  private mergeRelatedListFormOptions(\n    command: string,\n    evaluatedOptions: Record<string, unknown>,\n    relatedListExcludeProperties?: string[],\n  ): Record<string, unknown> {\n    const exclusions = relatedListExcludeProperties?.filter(Boolean);\n    if (\n      !exclusions?.length ||\n      (command !== 'Entity:Create' && command !== 'Entity:Update' && command !== 'Entity:View')\n    ) {\n      return evaluatedOptions;\n    }\n    return {\n      ...evaluatedOptions,\n      excludeProperties: exclusions,\n    };\n  }\n\n  /**\n   * Create default events\n   */\n  private createDefaultEvents(\n    entity: AXPEntity,\n    allActions: AXPEntityCommandTriggerViewModel[],\n    relatedListExcludeProperties?: string[],\n  ) {\n    return {\n      onRowClick: (row: any) => {\n        console.log('Entity List - Row clicked:', row);\n      },\n      onRowDoubleClick: (e: any) => {\n        console.log('Entity List - Row double clicked:', e);\n        const defaultAction = allActions.find((c) => {\n          const commandName = c.name.split('&')[0];\n          return ((c as any).default || commandName === 'open-entity') && !c.hidden;\n        });\n\n        if (!defaultAction) {\n          return;\n        }\n\n        const d: AXRowCommandItemClickEvent = {\n          component: e.component,\n          name: defaultAction.name,\n          data: e.data,\n        };\n        this.handleRowCommand(d, undefined, entity, allActions, relatedListExcludeProperties);\n      },\n      onSelectionChange: (selectedRows: any[]) => {\n        console.log('Entity List - Selection changed:', selectedRows);\n      },\n      onRowCommand: async (e: AXRowCommandItemClickEvent, selectedRows: any[]) => {\n        await this.handleRowCommand(e, selectedRows, entity, allActions, relatedListExcludeProperties);\n      },\n    };\n  }\n\n  //#endregion\n}\n","\n\nimport { AXPWidgetTypesMap } from '@acorex/platform/layout/widget-core-contracts';\nimport { AXPEntity, type AXPEntityListFilterDefinition, AXPEntityTableColumn, collectEntityListFilterDefinitions, collectEntityListSortableFields } from '@acorex/platform/layout/entity-contracts';\nimport { AXPColumnQuery, AXPFilterDefinition, AXPSortDefinition } from '@acorex/platform/contracts';\n\nimport { AXPWidgetRegistryService } from '@acorex/platform/layout/widget-core';\nimport { Injectable, inject } from '@angular/core';\nimport { applyIncludeExclude, getVisibleProperties } from './entity-list.mappers';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\n\nexport interface AXPEntityListToolbarConvertOptions {\n  excludeColumns?: string[];\n  includeColumns?: string[];\n  /** Related list: evaluated `AXPEntityTableColumn[]` from `AXPRelatedEntity.columns` */\n  relatedTableColumns?: AXPEntityTableColumn[];\n  customFilterDefinitions?: Partial<AXPEntityListFilterDefinition>[];\n}\n\n@Injectable()\nexport class AXPEntityListToolbarService {\n  //#region ----   Services & Dependencies   ----\n\n  private readonly widgetResolver = inject(AXPWidgetRegistryService);\n  private readonly entityRegistry = inject(AXPEntityDefinitionRegistryService);\n\n  //#endregion\n\n  //#region ----   Public Methods   ----\n\n  /**\n   * Convert Entity to Toolbar Options\n   */\n  async convertEntityToolbarOptions(\n    entity: AXPEntity,\n    options: AXPEntityListToolbarConvertOptions | undefined,\n  ): Promise<{\n    filterDefinitions: AXPEntityListFilterDefinition[];\n    columnDefinitions: AXPColumnQuery[];\n    sortDefinitions: AXPSortDefinition[];\n  }> {\n    const baseFilters = await this.createFilterDefinitions(entity);\n    const toolbarOptions = {\n      filterDefinitions: this.mergeFilterDefinitions(baseFilters, options?.customFilterDefinitions),\n      columnDefinitions: this.createColumnDefinitions(entity, options),\n      sortDefinitions: await this.createSortDefinitions(entity),\n      canFilter: true,\n      canColumns: true,\n      canSort: true,\n    };\n\n    return toolbarOptions;\n  }\n\n  //#endregion\n\n  //#region ----   Private Methods   ----\n\n  /**\n   * Merges custom filter definitions into the entity-derived list by `field`.\n   * Matching fields: custom properties are applied on top of the base definition.\n   * Non-matching custom entries are appended.\n   */\n  private mergeFilterDefinitions(\n    base: AXPEntityListFilterDefinition[],\n    custom?: Partial<AXPEntityListFilterDefinition>[],\n  ): AXPEntityListFilterDefinition[] {\n    if (!custom?.length) {\n      return base;\n    }\n\n    const result = [...base];\n    const fieldToIndex = new Map<string, number>();\n    result.forEach((def, index) => {\n      const key = this.filterFieldKey(def.field);\n      if (key !== undefined) {\n        fieldToIndex.set(key, index);\n      }\n    });\n\n    for (const customDef of custom) {\n      const key = this.filterFieldKey(customDef.field);\n      if (key !== undefined && fieldToIndex.has(key)) {\n        const idx = fieldToIndex.get(key)!;\n        result[idx] = this.mergeFilterDefinition(result[idx], customDef);\n      } else {\n        result.push(customDef as AXPEntityListFilterDefinition);\n      }\n    }\n\n    return result;\n  }\n\n  private filterFieldKey(field: AXPFilterDefinition['field'] | undefined): string | undefined {\n    if (field === undefined || field === null) {\n      return undefined;\n    }\n    return String(field);\n  }\n\n  private mergeFilterDefinition(\n    base: AXPEntityListFilterDefinition,\n    custom: Partial<AXPEntityListFilterDefinition>,\n  ): AXPEntityListFilterDefinition {\n    const merged: AXPEntityListFilterDefinition = {\n      ...base,\n      ...custom,\n      widget:\n        base.widget && custom.widget\n          ? {\n              ...base.widget,\n              ...custom.widget,\n              options: {\n                ...(base.widget.options ?? {}),\n                ...(custom.widget.options ?? {}),\n              },\n            }\n          : (custom.widget ?? base.widget),\n      filterType:\n        base.filterType && custom.filterType\n          ? {\n              ...base.filterType,\n              ...custom.filterType,\n              preload:\n                base.filterType.preload || custom.filterType.preload\n                  ? {\n                      ...base.filterType.preload,\n                      ...custom.filterType.preload,\n                    }\n                  : undefined,\n            }\n          : (custom.filterType ?? base.filterType),\n    };\n\n    return merged;\n  }\n\n  /**\n   * Create Filter Definitions for Toolbar\n   */\n  private async createFilterDefinitions(entity: AXPEntity): Promise<AXPEntityListFilterDefinition[]> {\n    return collectEntityListFilterDefinitions(\n      entity,\n      (moduleName, entityName) => this.entityRegistry.resolve(moduleName, entityName).catch(() => null),\n      {\n        resolveWidget: (type) => this.widgetResolver.resolve(type as AXPWidgetTypesMap[keyof AXPWidgetTypesMap]),\n      },\n    );\n  }\n\n  /**\n   * Create Column Definitions for Toolbar.\n   * Includes both entity.properties and enriched columns (e.g. person.firstName with showAs).\n   */\n  private createColumnDefinitions(entity: AXPEntity, options?: AXPEntityListToolbarConvertOptions): AXPColumnQuery[] {\n    const { columns = [] } = entity;\n    const excludeColumns = options?.excludeColumns || [];\n    const includeColumns = options?.includeColumns || [];\n    const relatedTableColumns = options?.relatedTableColumns;\n\n    const visibleProperties = getVisibleProperties(entity);\n    const visiblePropNames = new Set(visibleProperties.map(({ name }) => name));\n\n    let baseColumns: AXPColumnQuery[];\n\n    if (relatedTableColumns?.length) {\n      baseColumns = relatedTableColumns.map((column) => {\n        const property = visibleProperties.find(({ name }) => name === column.name);\n        return {\n          name: column.name,\n          title: column.title || property?.title || column.name,\n          visible: column.options?.visible !== false,\n        } as AXPColumnQuery;\n      });\n    } else if (columns.length > 0) {\n      baseColumns = columns\n        .filter(({ name }) => visiblePropNames.has(name))\n        .map((column) => {\n          const property = visibleProperties.find(({ name }) => name === column.name);\n          return {\n            name: column.name,\n            title: property?.title!,\n            visible: column?.options?.visible ?? true,\n          } as AXPColumnQuery;\n        });\n    } else {\n      baseColumns = visibleProperties.map(\n        (property) =>\n          ({\n            name: property.name,\n            title: property.title,\n            visible: true,\n          }) as AXPColumnQuery,\n      );\n    }\n\n    return applyIncludeExclude(baseColumns, includeColumns, excludeColumns);\n  }\n\n  /**\n   * Create Sort Definitions for Toolbar.\n   * Includes host properties and merge-detail related fields with sort enabled.\n   */\n  private async createSortDefinitions(entity: AXPEntity): Promise<AXPSortDefinition[]> {\n    const fields = await collectEntityListSortableFields(entity, (moduleName, entityName) =>\n      this.entityRegistry.resolve(moduleName, entityName).catch(() => null),\n    );\n\n    return fields.map((field) => ({\n      name: field.name,\n      title: field.title,\n    }));\n  }\n\n  //#endregion\n}\n","\n\nimport { AXPActionMenuItem, AXPColumnQuery, AXPFilterDefinition, AXPSortQuery, type AXPWidgetNode, AXPWidgetsCatalog, getChangedPaths } from '@acorex/platform/contracts';\nimport { AXPEntity, AXPEntityAction, AXPEntityCommandScope, AXPEntityEventsKeys, AXPEntityTableColumn, AXPRelatedEntity, buildPageListWidgetName, isEntityActionPermitted } from '@acorex/platform/layout/entity-contracts';\nimport { AXDataSource, AXDataSourceOperator, AXDataSourceSortOption } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXTranslationModule } from '@acorex/core/translation';\n\nimport { AXPRefreshEvent } from '@acorex/platform/common';\nimport { AXPSessionService } from '@acorex/platform/auth';\n\nimport { AXPBroadcastEventService, AXPDeviceService, AXPExpressionEvaluatorScope, AXPExpressionEvaluatorService, AXPColumnWidthService } from '@acorex/platform/core';\n\nimport { AXPValueWidgetComponent, AXPWidgetCoreModule, AXPWidgetRendererDirective } from '@acorex/platform/layout/widget-core';\nimport { AXPDataListWidgetColumn, AXPDataListWidgetViewComponent } from '@acorex/platform/layout/widgets';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AXPWorkflowService, ofType } from '@acorex/platform/workflow';\nimport { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  inject,\n  linkedSignal,\n  signal,\n  untracked,\n  viewChild,\n  viewChildren,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { get, isEqual, merge } from 'lodash-es';\nimport { Subject, takeUntil } from 'rxjs';\n\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\nimport { AXPEntityCommandTriggerViewModel } from '../../entity.viewmodel';\nimport { AXPEntityListTableService } from './entity-list-table.service';\nimport { AXPEntityListToolbarService } from './entity-list-toolbar.service';\nimport {\n  applyDataListColumnWidths,\n  type EntityListToolbarFilter,\n  mergeEntityListToolbarFilters,\n} from './entity-list.mappers';\n\n@Component({\n  template: `\n    @if (showEntityActions()) {\n      <div class=\"ax-flex ax-gap-2 ax-justify-end ax-mb-4\">\n        @for (action of primaryActions(); track $index) {\n          @if (action.visible != false) {\n            <ax-button\n              [class.ax-sm]=\"deviceService.isSmall()\"\n              [iconOnly]=\"deviceService.isSmall()\"\n              [disabled]=\"action.disabled\"\n              [text]=\"(action.title | translate | async)!\"\n              [look]=\"'solid'\"\n              [color]=\"action.color\"\n              (onClick)=\"handleActionClick(action)\"\n            >\n              <ax-prefix>\n                <i class=\"{{ action.icon }}\"></i>\n              </ax-prefix>\n              @if (action?.items) {\n                <ax-dropdown-panel #panel>\n                  <ax-button-item-list>\n                    @for (sub of action?.items; track $index) {\n                      @if (sub.visible != false) {\n                        <ax-button-item\n                          [text]=\"(sub.title | translate | async)!\"\n                          [color]=\"sub.color\"\n                          [disabled]=\"sub.disabled\"\n                          (onClick)=\"handleActionClick(sub)\"\n                        >\n                          <ax-prefix>\n                            <ax-icon icon=\"fa-light {{ sub.icon }}\"></ax-icon>\n                          </ax-prefix>\n                        </ax-button-item>\n                        @if (sub.break) {\n                          <ax-divider></ax-divider>\n                        }\n                      }\n                    }\n                  </ax-button-item-list>\n                </ax-dropdown-panel>\n              }\n            </ax-button>\n          }\n        }\n        @if (secondaryActions().length) {\n          <ax-button\n            [class.ax-sm]=\"deviceService.isSmall()\"\n            [iconOnly]=\"deviceService.isSmall()\"\n            [text]=\"'@general:terms.interface.actions' | translate | async\"\n            [look]=\"deviceService.isSmall() ? 'blank' : 'solid'\"\n            [color]=\"'default'\"\n          >\n            <ax-prefix>\n              <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n            </ax-prefix>\n            <ax-dropdown-panel #panel>\n              <ax-button-item-list>\n                @for (item of secondaryActions(); track $index) {\n                  @if (item.visible != false) {\n                    <ax-button-item\n                      [text]=\"(item.title | translate | async)!\"\n                      [color]=\"item.color\"\n                      [disabled]=\"item.disabled\"\n                      (onClick)=\"handleSecondaryActionClick(item)\"\n                    >\n                      <ax-prefix>\n                        <ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon>\n                      </ax-prefix>\n                    </ax-button-item>\n                    @if (item.break) {\n                      <ax-divider></ax-divider>\n                    }\n                  }\n                }\n              </ax-button-item-list>\n            </ax-dropdown-panel>\n          </ax-button>\n        }\n      </div>\n    }\n    <div class=\"ax-flex ax-flex-col ax-gap-2 ax-h-full\" [style.max-height]=\"maxHeight()\">\n      @if (toolbarNode() != null && showToolbar()) {\n        <ng-container\n          #toolbar\n          axp-widget-renderer\n          [node]=\"toolbarNode()!\"\n          [parentNode]=\"this\"\n          [index]=\"index\"\n          [mode]=\"this.mode\"\n        ></ng-container>\n      }\n      <!-- <div class=\"ax-flex ax-items-center ax-justify-between ax-gap-1 \">\n        <span\n          >{{ selectedItems().length }}\n          <span>{{ '@general:terms.interface.items-selected' | translate | async }}</span>\n        </span>\n        <ax-button\n          text=\"@general:terms.interface.unselect-all\"\n          class=\"ax-xs\"\n          (onClick)=\"handleUnselectAll()\"\n        ></ax-button>\n      </div> -->\n      @if (listNode() != null) {\n        <ng-container\n          #list\n          axp-widget-renderer\n          [node]=\"listNode()!\"\n          [parentNode]=\"this\"\n          [index]=\"index\"\n          [mode]=\"this.mode\"\n        ></ng-container>\n      }\n    </div>\n  `,\n  standalone: true,\n  host: {\n    '[class]': '\"ax-h-full\"',\n  },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [AXPEntityListTableService, AXPEntityListToolbarService],\n  imports: [\n    CommonModule,\n    AXDecoratorModule,\n    AXPWidgetCoreModule,\n    AXButtonModule,\n    AXDropdownModule,\n    AXTranslationModule,\n  ],\n})\nexport class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {\n  protected entityService = inject(AXPEntityDefinitionRegistryService);\n  protected workflow = inject(AXPWorkflowService);\n  protected entityListTableService = inject(AXPEntityListTableService);\n  protected entityListToolbarService = inject(AXPEntityListToolbarService);\n  protected deviceService = inject(AXPDeviceService);\n  protected commandService = inject(AXPCommandService);\n  protected eventService = inject(AXPBroadcastEventService);\n  private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n  private readonly columnWidthService = inject(AXPColumnWidthService);\n  private readonly route = inject(ActivatedRoute);\n  private readonly session = inject(AXPSessionService);\n\n  protected isMounted = signal(false);\n\n  public readonly entity = signal<AXPEntity | null>(null);\n  protected listNode = signal<AXPWidgetNode | null>(null);\n  protected list = viewChild<AXPWidgetRendererDirective>('list');\n  protected allWidgets = viewChildren<AXPWidgetRendererDirective>(AXPWidgetRendererDirective);\n  protected listWidget = linkedSignal(() =>\n    this.allWidgets().find((widget) => widget.node()?.type === AXPWidgetsCatalog.dataList),\n  );\n\n  protected toolbarWidget = computed(() =>\n    this.allWidgets().find((widget) => widget.node()?.type === AXPWidgetsCatalog.listToolbar),\n  );\n\n  protected selectedItems = signal<any[]>([]);\n\n  protected toolbarNode = signal<AXPWidgetNode | null>(null);\n  protected destroyed = new Subject<void>();\n\n  /** Invalidates in-flight filter/refresh work on remount, rapid page switches, or destroy. */\n  private opGeneration = 0;\n  private isViewDestroyed = false;\n  private initListTimeoutId: ReturnType<typeof setTimeout> | null = null;\n  /** Unpatched data-list refresh (hits the grid). Prefer this over the scoped patch to avoid recursion. */\n  private boundDataListRefresh: (() => boolean) | null = null;\n  /** Parent-scope filters (related-entity conditions) that must survive user toolbar edits. */\n  private scopedToolbarFilters: EntityListToolbarFilter[] = [];\n\n  //options\n  protected entitySource = computed(() => this.options()['entity']);\n  protected excludeColumns = computed(() => this.options()['excludeColumns'] as string[]);\n  protected includeColumns = computed(() => this.options()['includeColumns'] as string[]);\n  protected relatedTableColumns = computed(\n    () => this.options()['relatedTableColumns'] as AXPEntityTableColumn[] | undefined,\n  );\n  protected customFilterDefinitions = computed(\n    () => this.options()['customFilterDefinitions'] as Partial<AXPFilterDefinition>[] | undefined,\n  );\n  protected externalActions = computed(() => this.options()['actions'] as AXPEntityAction[]);\n  protected maxHeight = computed(() => this.options()['maxHeight'] as string);\n\n  protected showEntityActions = computed(() => this.options()['showEntityActions'] ?? true);\n  protected showToolbar = computed(() => this.options()['showToolbar'] ?? true);\n\n  //actions\n  protected allActions = computed<AXPEntityCommandTriggerViewModel[]>(() => {\n    const originalList = this.entity()?.interfaces?.master?.list?.actions ?? [];\n    const externalActionList = this.externalActions() ?? [];\n\n    const usedOverrideActions = new Set<string>();\n\n    const mergedActions = originalList.map((originalAction: any) => {\n      const originalCommandName =\n        typeof originalAction.command === 'string' ? originalAction.command : originalAction.command?.name;\n\n      const overrideAction = externalActionList.find((action: any) => {\n        const actionCommandName = typeof action?.command === 'string' ? action.command : action?.command?.name;\n        return actionCommandName === originalCommandName;\n      });\n\n      if (overrideAction) {\n        const overrideKey = `${\n          typeof overrideAction.command === 'string' ? overrideAction.command : overrideAction.command?.name\n        }`;\n        usedOverrideActions.add(overrideKey);\n        return new AXPEntityCommandTriggerViewModel(this.entity()!, overrideAction);\n      }\n\n      return new AXPEntityCommandTriggerViewModel(this.entity()!, originalAction);\n    });\n\n    const additionalActions = externalActionList\n      .filter((action: any) => {\n        const actionKey = `${typeof action?.command === 'string' ? action.command : action?.command?.name}`;\n        return !usedOverrideActions.has(actionKey);\n      })\n      .map((action: any) => new AXPEntityCommandTriggerViewModel(this.entity()!, action));\n    return [...additionalActions, ...mergedActions].filter((a) =>\n      isEntityActionPermitted(a, (...keys) => this.session.authorize(...keys)),\n    );\n  });\n\n  protected primaryActions = computed(() => {\n    const actions = this.allActions()\n      .filter(\n        (a) =>\n          !a.isChild &&\n          a.priority == 'primary' &&\n          ((a.scope == AXPEntityCommandScope.Selected && this.selectedItems().length) ||\n            (a.scope == AXPEntityCommandScope.TypeLevel && !this.selectedItems().length)),\n      )\n      .map(\n        (tr) =>\n          ({\n            name: tr.name,\n            title: tr.title,\n            icon: tr.icon,\n            color: tr.color,\n            disabled: tr.disabled,\n            items: tr.items?.map((sub) => ({\n              name: sub.name,\n              title: sub.title,\n              icon: sub.icon,\n              color: sub.color,\n              disabled: sub.disabled,\n              command: {\n                name: sub.name,\n                options: sub.options,\n                metadata: sub.metadata,\n              },\n            })),\n            visible: tr.hidden !== true,\n            command: {\n              name: tr.name,\n              options: tr.options,\n              metadata: tr.metadata,\n            },\n          }) as AXPActionMenuItem,\n      );\n    return actions;\n  });\n\n  protected handleUnselectAll() {\n    this.selectedItems.set([]);\n  }\n\n  protected secondaryActions = computed(() => {\n    const actions = this.allActions()\n      .filter((a) => a.priority == 'secondary' && a.scope == AXPEntityCommandScope.TypeLevel)\n      .map(\n        (tr) =>\n          ({\n            name: tr.name,\n            title: tr.title,\n            icon: tr.icon,\n            color: tr.color,\n            disabled: tr.disabled,\n            visible: tr.hidden !== true,\n            separated: tr.separated,\n            command: {\n              name: tr.name,\n              options: tr.options,\n              metadata: tr.metadata,\n            },\n          }) as AXPActionMenuItem,\n      );\n    return actions;\n  });\n\n  protected handleActionClick(item: AXPActionMenuItem) {\n    if (item.command && (item.items?.length ?? 0) == 0) {\n      this.execute(item.command.name, null);\n    }\n  }\n\n  protected handleSecondaryActionClick(item: AXPActionMenuItem) {\n    if (item.command) {\n      this.execute(item.command.name, null);\n    }\n  }\n\n  // ngDoCheck(): void {\n  //   console.log(this.listWidget()?.instance.output('selectedRows'));\n  // }\n\n  protected async execute(commandName: string, _data: unknown) {\n    const action = this.findToolbarAction(commandName);\n    const command = commandName.split('&')[0];\n    const commandData =\n      action?.scope == AXPEntityCommandScope.Selected\n        ? this.selectedItems()\n        : action?.options?.['process']?.data || null;\n    let options = await this.evaluateToolbarExpressions(action?.options, commandData);\n    const listOpts = this.options() as Record<string, unknown>;\n    const foreignKeyFieldName = listOpts['foreignKeyField'] as string | undefined;\n    const createExcludes = (listOpts['nestedCreateHiddenProperties'] as string[] | undefined) ?? [];\n    if (command === 'Entity:Create' && foreignKeyFieldName) {\n      const root = this.contextService.snapshot();\n      const idVal = get(root, 'id');\n      options = merge({}, options) as Record<string, unknown>;\n      options['process'] = merge({}, options['process'] as object, {\n        data: merge({}, (options['process'] as { data?: Record<string, unknown> })?.data ?? {}, {\n          ...(idVal !== undefined && idVal !== null && idVal !== '' ? { [foreignKeyFieldName]: idVal } : {}),\n        }),\n      });\n    }\n    if (command === 'Entity:Create' && createExcludes.length) {\n      const existing = ((options['excludeProperties'] as string[]) ?? []).slice();\n      options = merge({}, options) as Record<string, unknown>;\n      options['excludeProperties'] = [...new Set([...createExcludes, ...existing])];\n    }\n    const relatedExcludes = listOpts['excludeProperties'] as string[] | undefined;\n    const exclusionsFromList = relatedExcludes?.filter(Boolean) ?? [];\n    if (exclusionsFromList.length && (command === 'Entity:Create' || command === 'Entity:Update')) {\n      const existing = ((options['excludeProperties'] as string[]) ?? []).slice();\n      options = merge({}, options) as Record<string, unknown>;\n      options['excludeProperties'] = [...new Set([...existing, ...exclusionsFromList])];\n    }\n    if (this.commandService.exists(command)) {\n      await this.commandService.execute(command, {\n        __context__: {\n          entity: this.entitySource(),\n          entityInfo: {\n            name: this.entity()?.name,\n            module: this.entity()?.module,\n            title: this.entity()?.title,\n            parentKey: this.entity()?.parentKey,\n            source: `${this.entity()?.module}.${this.entity()?.name}`,\n          },\n          data: commandData,\n          options,\n          metadata: action?.metadata,\n        },\n        options,\n        metadata: action?.metadata,\n      });\n    } else {\n      await this.workflow.execute(command, {\n        entity: this.entitySource(),\n        entityInfo: {\n          name: this.entity()?.name,\n          module: this.entity()?.module,\n          title: this.entity()?.title,\n          parentKey: this.entity()?.parentKey,\n          source: `${this.entity()?.module}.${this.entity()?.name}`,\n        },\n        data: commandData,\n        options,\n        metadata: action?.metadata,\n      });\n    }\n  }\n\n  /**\n   * Resolves toolbar commands including nested dropdown (`items`) actions.\n   */\n  private findToolbarAction(commandName: string): AXPEntityCommandTriggerViewModel | undefined {\n    const scopeMatches = (c: AXPEntityCommandTriggerViewModel) =>\n      (this.selectedItems().length\n        ? c.scope === AXPEntityCommandScope.Selected\n        : c.scope === AXPEntityCommandScope.Individual) || c.scope === AXPEntityCommandScope.TypeLevel;\n\n    const visit = (nodes: AXPEntityCommandTriggerViewModel[]): AXPEntityCommandTriggerViewModel | undefined => {\n      for (const node of nodes) {\n        if (node.name === commandName && scopeMatches(node)) {\n          return node;\n        }\n        if (node.items?.length) {\n          const nested = visit(node.items);\n          if (nested) {\n            return nested;\n          }\n        }\n      }\n      return undefined;\n    };\n\n    return visit(this.allActions());\n  }\n\n  private async evaluateToolbarExpressions(opts: unknown, expressionData: unknown): Promise<Record<string, unknown>> {\n    if (!opts) {\n      return {};\n    }\n    const root = this.contextService.snapshot();\n    const scope: AXPExpressionEvaluatorScope = {\n      context: {\n        eval: (path: string) => get(root, path) ?? get(expressionData as object, path),\n      },\n    };\n    return (await this.expressionEvaluator.evaluate(opts, scope)) as Record<string, unknown>;\n  }\n\n  /**\n   * Parses the `filters` query param (same shape as standalone entity list routes).\n   */\n  private parseFiltersFromRoute(): EntityListToolbarFilter[] {\n    const filtersJson = this.route.snapshot.queryParamMap.get('filters');\n    if (!filtersJson) {\n      return [];\n    }\n\n    try {\n      const parsed: unknown = JSON.parse(filtersJson);\n      const rows: Array<{ field: string; value: unknown; operator?: unknown }> = [];\n\n      if (Array.isArray(parsed)) {\n        for (const item of parsed) {\n          if (item && typeof item === 'object' && typeof (item as { field?: unknown }).field === 'string') {\n            rows.push(item as { field: string; value: unknown; operator?: unknown });\n          }\n        }\n      } else if (parsed !== null && typeof parsed === 'object') {\n        for (const [field, value] of Object.entries(parsed as Record<string, unknown>)) {\n          rows.push({ field, value, operator: { type: 'equal' } });\n        }\n      }\n\n      return rows\n        .filter((row) => row.field && row.value !== undefined && row.value !== null && row.value !== '')\n        .map((row) => ({\n          field: row.field,\n          operator:\n            row.operator && typeof row.operator === 'object' && 'type' in row.operator\n              ? (row.operator as AXDataSourceOperator)\n              : { type: 'equal' },\n          value: row.value,\n          hidden: true,\n        }));\n    } catch {\n      return [];\n    }\n  }\n\n  /**\n   * Route `filters` apply only when the active details `page` matches this list's entity\n   * (e.g. WorkOrder filters must not affect FailureRegister on the same asset layout).\n   * page-list sidebar pages use `page-list-{module.entity}` as their page id.\n   */\n  private shouldApplyRouteFilters(): boolean {\n    const pageId = this.route.snapshot.queryParamMap.get('page');\n    if (!pageId) {\n      return false;\n    }\n\n    const entitySource = this.entitySource();\n    if (!entitySource) {\n      return false;\n    }\n\n    const [, entityName] = entitySource.split('.');\n    return (\n      (!!entityName && pageId === entityName) || pageId === buildPageListWidgetName(entitySource)\n    );\n  }\n\n  /**\n   * Captures hidden related-entity filters from the widget value before the toolbar can overwrite them.\n   */\n  private captureScopedToolbarFiltersFromValue(): void {\n    if (this.scopedToolbarFilters.length) {\n      return;\n    }\n    const hidden = ((this.getValue()?.toolbar?.filters ?? []) as EntityListToolbarFilter[]).filter(\n      (filter) => filter.hidden === true,\n    );\n    if (hidden.length) {\n      this.scopedToolbarFilters = hidden;\n    }\n  }\n\n  /**\n   * Merges overlay filters into base filters (overlay wins per field).\n   */\n  private mergeToolbarFilters(\n    baseFilters: EntityListToolbarFilter[],\n    overlayFilters: EntityListToolbarFilter[],\n  ): EntityListToolbarFilter[] {\n    return mergeEntityListToolbarFilters(baseFilters, overlayFilters);\n  }\n\n  /**\n   * User toolbar filters plus parent-scope (related-entity / route) filters. Scoped fields always win.\n   */\n  private getMergedToolbarFilters(): EntityListToolbarFilter[] {\n    const user = ((this.getValue()?.toolbar?.filters ?? []) as EntityListToolbarFilter[]).filter(\n      (filter) => filter.hidden !== true,\n    );\n    let scoped = this.scopedToolbarFilters;\n    if (this.shouldApplyRouteFilters()) {\n      const routeFilters = this.parseFiltersFromRoute();\n      if (routeFilters.length) {\n        scoped = this.mergeToolbarFilters(scoped, routeFilters);\n      }\n    }\n    return this.mergeToolbarFilters(user, scoped);\n  }\n\n  //#region ---- Scoped filter / initial load (race-safe) ----\n\n  private beginOp(): number {\n    return ++this.opGeneration;\n  }\n\n  private isOpStale(generation: number): boolean {\n    return this.isViewDestroyed || generation !== this.opGeneration;\n  }\n\n  private delay(ms: number): Promise<void> {\n    return new Promise((resolve) => setTimeout(resolve, ms));\n  }\n\n  /**\n   * Applies merged route + parent-scope filters to the widget value and data source.\n   */\n  private applyMergedRouteFiltersToList(): void {\n    void this.reapplyScopedFiltersToDataSource({ triggerInitialLoad: true });\n  }\n\n  /**\n   * Syncs toolbar filters to context and AXDataSource (retries until data-list is mounted).\n   * Stale generations (destroy / newer op) exit without touching the grid.\n   */\n  private async reapplyScopedFiltersToDataSource(options?: {\n    triggerInitialLoad?: boolean;\n    generation?: number;\n  }): Promise<void> {\n    const generation = options?.generation ?? this.beginOp();\n    const triggerInitialLoad = options?.triggerInitialLoad !== false;\n\n    const merged = this.getMergedToolbarFilters();\n    const current = this.getValue();\n    if (!isEqual(current?.toolbar?.filters, merged)) {\n      this.setValue({\n        ...current,\n        toolbar: { ...(current?.toolbar ?? {}), filters: merged },\n      });\n    }\n    if (this.isOpStale(generation)) {\n      return;\n    }\n    const pushed = await this.ensureToolbarFiltersOnDataSource(generation);\n    if (!pushed || this.isOpStale(generation)) {\n      return;\n    }\n    if (triggerInitialLoad) {\n      await this.triggerInitialLoadIfNeeded(generation);\n    }\n  }\n\n  /**\n   * Entity lists use `fetchDataMode: 'manual'`; after scoped filters reach the data source,\n   * the grid must be refreshed once. Retries until the data-table view child accepts refresh\n   * so rapid relatedEntity page switches cannot leave the table on \"no data loaded yet\".\n   */\n  private async triggerInitialLoadIfNeeded(generation: number): Promise<void> {\n    if (this.isMounted() || this.isOpStale(generation)) {\n      return;\n    }\n    const refreshed = await this.refreshWhenGridReady(generation);\n    if (refreshed && !this.isOpStale(generation)) {\n      this.isMounted.set(true);\n    }\n  }\n\n  /**\n   * Calls the unpatched data-list refresh until the grid is ready or the op is stale.\n   */\n  private async refreshWhenGridReady(generation: number): Promise<boolean> {\n    return this.refreshWhenGridReadyWith(generation, () => this.resolveDataListRefresh()?.() ?? false);\n  }\n\n  /**\n   * Prefer the bound original refresh (pre-patch). Falls back to an unpatched instance refresh.\n   */\n  private resolveDataListRefresh(): (() => boolean) | null {\n    if (this.boundDataListRefresh) {\n      return this.boundDataListRefresh;\n    }\n    const inst = this.listWidget()?.instance as\n      | ({ refresh?: () => boolean } & { __axpEntityListRefreshPatched?: boolean })\n      | undefined;\n    if (!inst?.refresh || inst.__axpEntityListRefreshPatched) {\n      return null;\n    }\n    return () => inst.refresh?.() ?? false;\n  }\n\n  private async refreshWhenGridReadyWith(generation: number, refreshFn: () => boolean): Promise<boolean> {\n    const maxAttempts = 60;\n    const delayMs = 50;\n    for (let i = 0; i < maxAttempts; i++) {\n      if (this.isOpStale(generation)) {\n        return false;\n      }\n      this.pushToolbarFiltersToDataSource();\n      if (refreshFn()) {\n        return true;\n      }\n      await this.delay(delayMs);\n    }\n    return false;\n  }\n\n  /**\n   * Re-evaluates related-entity list filters from the live dialog form context (e.g. after create saves the main row id).\n   */\n  private async applyRelatedFiltersFromContext(specs: NonNullable<AXPRelatedEntity['conditions']>): Promise<void> {\n    const root = this.contextService.snapshot();\n    const scope: AXPExpressionEvaluatorScope = {\n      context: {\n        eval: (path: string) => get(root, path),\n      },\n    };\n    const relatedFilters = await Promise.all(\n      specs.map(async (c) => ({\n        field: c.name,\n        operator: c.operator,\n        value: await this.expressionEvaluator.evaluate(c.value, scope),\n        hidden: true as const,\n      })),\n    );\n    this.scopedToolbarFilters = relatedFilters;\n    if (this.isViewDestroyed || !this.fullPath()) {\n      return;\n    }\n    const current = this.getValue();\n    const user = ((current?.toolbar?.filters ?? []) as EntityListToolbarFilter[]).filter(\n      (filter) => filter.hidden !== true,\n    );\n    const filters = this.mergeToolbarFilters(user, relatedFilters);\n    if (isEqual(current?.toolbar?.filters, filters)) {\n      return;\n    }\n    this.setValue({\n      ...current,\n      toolbar: { ...(current?.toolbar ?? {}), filters },\n    });\n  }\n\n  /** Keeps related-list filters in sync with dialog context for create wizards (main id appears after first-step save). */\n  #relatedFilterSyncEffect = effect(() => {\n    const opts = this.options() as Record<string, unknown>;\n    if (!opts['syncRelatedListFiltersFromDialogContext']) {\n      return;\n    }\n    const specs = opts['relatedFilterConditionSpecs'] as AXPRelatedEntity['conditions'] | undefined;\n    if (!specs?.length) {\n      return;\n    }\n    this.contextService.data();\n    if (!this.fullPath()) {\n      return;\n    }\n    untracked(() => void this.applyRelatedFiltersFromContextAndDatasource(specs));\n  });\n\n  /**\n   * Pushes current toolbar filters to the embedded list data source when both exist.\n   * Returns false while data-list is still mounting (see deferred listNode.set in ngOnInit).\n   */\n  private pushToolbarFiltersToDataSource(): boolean {\n    const listInstance = this.listWidget()?.instance as\n      | { options?: () => Record<string, unknown>; call?: (m: string) => void }\n      | undefined;\n    const dataSource = listInstance?.options?.()?.['dataSource'] as\n      | { filter?: (q: { filters?: unknown }) => void }\n      | undefined;\n    const filters = this.getMergedToolbarFilters();\n    if (!dataSource?.filter || !filters.length) {\n      return false;\n    }\n    dataSource.filter({ filters });\n    return true;\n  }\n\n  /**\n   * Pushes toolbar filters once the embedded data-list exposes its data source\n   * (listNode is created via deferred setTimeout in ngOnInit).\n   */\n  private async ensureToolbarFiltersOnDataSource(generation?: number): Promise<boolean> {\n    const opGeneration = generation ?? this.opGeneration;\n    if (this.pushToolbarFiltersToDataSource()) {\n      return true;\n    }\n    const maxAttempts = 40;\n    const delayMs = 50;\n    for (let i = 0; i < maxAttempts; i++) {\n      await this.delay(delayMs);\n      if (this.isOpStale(opGeneration)) {\n        return false;\n      }\n      if (this.pushToolbarFiltersToDataSource()) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Writes toolbar filters from specs and pushes them onto the data source so refresh/reload keeps the parent scope.\n   */\n  private async applyRelatedFiltersFromContextAndDatasource(\n    specs: NonNullable<AXPRelatedEntity['conditions']>,\n  ): Promise<void> {\n    const generation = this.beginOp();\n    await this.applyRelatedFiltersFromContext(specs);\n    if (this.isOpStale(generation)) {\n      return;\n    }\n    await this.ensureToolbarFiltersOnDataSource(generation);\n  }\n\n  /**\n   * Refreshes the embedded data list (toolbar / workflow). In wizard mode, `refresh` is patched to re-apply scoped filters first.\n   */\n  private refreshGridWithParentScopedFilters(): void {\n    this.listWidget()?.instance?.call('refresh');\n  }\n\n  /** Patches data-list `refresh` so reload keeps parent-scoped toolbar filters on the data source. */\n  #patchDataListRefreshEffect = effect(() => {\n    const inst = this.listWidget()?.instance as\n      | ({ refresh?: () => boolean } & { __axpEntityListRefreshPatched?: boolean })\n      | undefined;\n    if (!inst?.refresh || inst.__axpEntityListRefreshPatched) {\n      return;\n    }\n    inst.__axpEntityListRefreshPatched = true;\n    const originalRefresh = inst.refresh.bind(inst) as () => boolean;\n    this.boundDataListRefresh = originalRefresh;\n    inst.refresh = () => {\n      void this.runScopedDataListRefresh(originalRefresh);\n      // Patched refresh is async; callers that need a boolean should use boundDataListRefresh.\n      return false;\n    };\n    // If the initial filter apply raced ahead of the grid, retry load now that refresh is bound.\n    untracked(() => {\n      if (!this.isMounted() && !this.isViewDestroyed) {\n        void this.reapplyScopedFiltersToDataSource({ triggerInitialLoad: true });\n      }\n    });\n  });\n\n  /**\n   * Re-applies parent-scoped filters then refreshes the grid, ignoring stale overlapping calls.\n   */\n  private async runScopedDataListRefresh(originalRefresh: () => boolean): Promise<void> {\n    const generation = this.beginOp();\n    const o = this.options() as Record<string, unknown>;\n    const specs = o['relatedFilterConditionSpecs'] as AXPRelatedEntity['conditions'] | undefined;\n    if (o['syncRelatedListFiltersFromDialogContext'] && specs?.length) {\n      await this.applyRelatedFiltersFromContext(specs);\n      if (this.isOpStale(generation)) {\n        return;\n      }\n      await this.ensureToolbarFiltersOnDataSource(generation);\n    } else {\n      await this.reapplyScopedFiltersToDataSource({ triggerInitialLoad: false, generation });\n    }\n    if (this.isOpStale(generation)) {\n      return;\n    }\n    const refreshed = await this.refreshWhenGridReadyWith(generation, originalRefresh);\n    if (refreshed && !this.isOpStale(generation) && !this.isMounted()) {\n      this.isMounted.set(true);\n    }\n  }\n\n  //#endregion\n  //#region ----   Query Change Handler   ----\n  protected queries = undefined;\n  #effect = effect(() => {\n    //TODO: this is a temporary solution to handle the query changes; this should be removed when the query changes are handled in the widget core;\n    if (this.getValue()?.toolbar) {\n      this.queries = this.getValue()?.toolbar;\n    }\n    const listInstance = this.listWidget()?.instance;\n    // const dataSource = this.listWidget()?.options()['dataSource'] as AXDataSource;\n    const dataSource = listInstance?.options()?.['dataSource'] as AXDataSource;\n    const isMounted = this.isMounted();\n    if (!this.hasRequiredDependencies(dataSource, this.queries, listInstance)) {\n      return;\n    }\n\n    untracked(() => {\n      this.handleQueryChanges(this.queries, dataSource, listInstance, isMounted);\n    });\n  });\n\n  /**\n   * Validates that all required dependencies are available\n   */\n  private hasRequiredDependencies(dataSource: AXDataSource | undefined, queries: any, listInstance: any): boolean {\n    return !!(dataSource && queries && listInstance);\n  }\n\n  /**\n   * Handles all query-related changes (filters, sorts, columns)\n   */\n  private handleQueryChanges(queries: any, dataSource: AXDataSource, listInstance: any, isMounted: boolean): void {\n    const changeTracker = this.analyzeChanges(queries);\n    this.previousQueries = queries;\n\n    this.applyDataSourceChanges(dataSource, queries, changeTracker, isMounted);\n    this.handleListRefresh(listInstance, changeTracker, isMounted);\n    this.handleColumnChanges(changeTracker);\n  }\n\n  /**\n   * Analyzes what has changed between current and previous queries\n   */\n  private analyzeChanges(queries: any) {\n    const changes = getChangedPaths(queries, this.previousQueries);\n    return {\n      isFilterChanged: changes.includes('filters'),\n      isSortChanged: changes.includes('sorts'),\n      isColumnsChanged: changes.includes('columns'),\n      hasAnyChange: changes.length > 0,\n    };\n  }\n\n  /**\n   * Maps toolbar sort queries ({ name, dir }) to AXDataSource sort options ({ field, dir }).\n   */\n  private toDataSourceSortOptions(sorts: AXPSortQuery[] | undefined): AXDataSourceSortOption[] {\n    return (sorts ?? [])\n      .filter((s) => s.dir)\n      .map((s) => ({ field: s.name, dir: s.dir }) as AXDataSourceSortOption);\n  }\n\n  /**\n   * Applies filter and sort changes to the data source\n   */\n  private applyDataSourceChanges(\n    dataSource: AXDataSource,\n    queries: any,\n    changeTracker: ReturnType<typeof this.analyzeChanges>,\n    isMounted: boolean,\n  ): void {\n    const mergedFilters = this.getMergedToolbarFilters();\n    const shouldApplyFilters = changeTracker.isFilterChanged || (!isMounted && mergedFilters.length > 0);\n    if (shouldApplyFilters) {\n      dataSource.filter({\n        filters: mergedFilters,\n      });\n    }\n\n    if (changeTracker.isSortChanged) {\n      const sortOptions = this.toDataSourceSortOptions(queries.sorts);\n      dataSource.sort(...sortOptions);\n    }\n  }\n\n  /**\n   * Handles list refresh logic based on changes and mount status.\n   * Initial fetch is owned by {@link triggerInitialLoadIfNeeded} (manual fetchDataMode).\n   */\n  private handleListRefresh(\n    listInstance: any,\n    changeTracker: ReturnType<typeof this.analyzeChanges>,\n    isMounted: boolean,\n  ): void {\n    if (!isMounted) {\n      return;\n    }\n\n    if (changeTracker.isFilterChanged || changeTracker.isSortChanged) {\n      this.pushToolbarFiltersToDataSource();\n      listInstance.call('refresh');\n    }\n  }\n\n  /**\n   * Handles column-related changes\n   * TODO: Implement column change logic\n   */\n  private handleColumnChanges(changeTracker: ReturnType<typeof this.analyzeChanges>): void {\n    if (!changeTracker.isColumnsChanged) {\n      return;\n    }\n\n    const listInstance = this.listWidget()?.instance as AXPDataListWidgetViewComponent | undefined;\n    const toolbarState = this.getValue()?.toolbar as { columns?: AXPColumnQuery[] } | undefined;\n\n    if (!listInstance || !toolbarState?.columns) {\n      return;\n    }\n\n    // Current columns from list options\n    const currentColumns = (listInstance.options()['columns'] || []) as AXPDataListWidgetColumn[];\n    const columnByName = new Map(currentColumns.map((c) => [c.name, c] as const));\n\n    // Build new ordered columns array based on toolbar order/visibility\n    const updatedColumns: AXPDataListWidgetColumn[] = toolbarState.columns\n      .map((q) => {\n        const base = columnByName.get(q.name);\n        if (!base) {\n          return null;\n        }\n        // Preserve all existing column config but update visibility\n        return { ...base, visible: q.visible } as AXPDataListWidgetColumn;\n      })\n      .filter((c): c is AXPDataListWidgetColumn => c != null);\n\n    // Apply updated columns to the list widget and refresh\n    listInstance.setOptions({\n      columns: applyDataListColumnWidths(updatedColumns, this.columnWidthService),\n    });\n  }\n\n  //#endregion\n\n  protected context = {};\n\n  protected previousQueries: any = null;\n\n  override async ngOnInit(): Promise<void> {\n    super.ngOnInit();\n    this.captureScopedToolbarFiltersFromValue();\n\n    const [moduleName, entityName] = this.entitySource().split('.');\n    if (!moduleName || !entityName) {\n      throw new Error('Invalid entity source');\n    }\n\n    // Resolve entity and set it in the signal\n    const resolvedEntity = await this.entityService.resolve(moduleName, entityName);\n    if (this.isViewDestroyed) {\n      return;\n    }\n    if (!resolvedEntity) {\n      throw new Error(`Entity not found: ${this.entitySource()}`);\n    }\n    this.entity.set(resolvedEntity);\n\n    const options = {\n      excludeColumns: this.excludeColumns(),\n      includeColumns: this.includeColumns(),\n      relatedTableColumns: this.relatedTableColumns(),\n      customFilterDefinitions: this.customFilterDefinitions(),\n      excludeProperties: this.options()['excludeProperties'] as string[] | undefined,\n    };\n\n    const listOptions = await this.entityListTableService.convertEntityToListOptions(\n      resolvedEntity,\n      options,\n      this.allActions(),\n    );\n    if (this.isViewDestroyed) {\n      return;\n    }\n    const toolbarOptions = await this.entityListToolbarService.convertEntityToolbarOptions(resolvedEntity, options);\n    if (this.isViewDestroyed) {\n      return;\n    }\n    this.initListTimeoutId = setTimeout(() => {\n      this.initListTimeoutId = null;\n      if (this.isViewDestroyed) {\n        return;\n      }\n      this.listNode.set({\n        type: AXPWidgetsCatalog.dataList,\n        options: listOptions,\n        path: `table`,\n        name: 'table',\n        mode: 'view',\n        defaultValue: this.getValue()?.table,\n      });\n\n      const mergedToolbarFilters = this.getMergedToolbarFilters();\n\n      this.toolbarNode.set({\n        type: AXPWidgetsCatalog.listToolbar,\n        path: `toolbar`,\n        options: toolbarOptions,\n        mode: 'view',\n        defaultValue: {\n          filters: mergedToolbarFilters,\n          sorts: this.getValue()?.toolbar?.sorts,\n          columns: this.getValue()?.toolbar?.columns,\n        },\n      });\n      queueMicrotask(() => {\n        if (!this.isViewDestroyed) {\n          this.applyMergedRouteFiltersToList();\n        }\n      });\n    }, 100);\n  }\n\n  async ngAfterViewInit(): Promise<void> {\n    this.route.queryParamMap.pipe(takeUntil(this.destroyed)).subscribe(() => {\n      this.applyMergedRouteFiltersToList();\n    });\n\n    this.workflow.events$\n      .pipe(ofType(AXPRefreshEvent))\n      .pipe(takeUntil(this.destroyed))\n      .subscribe((event) => {\n        if (event.payload.entity == this.entitySource()) {\n          this.refreshGridWithParentScopedFilters();\n        }\n      });\n\n    this.eventService\n      .listen(AXPEntityEventsKeys.REFRESH_LAYOUT)\n      .pipe(takeUntil(this.destroyed))\n      .subscribe((e) => {\n        if ((e.data as any).name == `${this.entity()?.module}.${this.entity()?.name}`) {\n          this.refreshGridWithParentScopedFilters();\n        }\n      });\n\n    const listWidget = (await this.layoutService.waitForWidget(\n      `${this.entitySource()}-tab-list_table`,\n      500,\n    )) as AXPDataListWidgetViewComponent;\n    if (this.isViewDestroyed) {\n      return;\n    }\n    if (listWidget?.api && typeof listWidget.api === 'function') {\n      const onSelectionChange = listWidget.api()['onSelectionChange'] as Subject<any>;\n      if (onSelectionChange) {\n        onSelectionChange.pipe(takeUntil(this.destroyed)).subscribe((e: any) => {\n          this.selectedItems.set(e);\n        });\n      }\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.isViewDestroyed = true;\n    this.beginOp();\n    if (this.initListTimeoutId != null) {\n      clearTimeout(this.initListTimeoutId);\n      this.initListTimeoutId = null;\n    }\n    this.boundDataListRefresh = null;\n    this.listWidget.set(undefined);\n    this.destroyed.next();\n    this.destroyed.complete();\n  }\n}\n","\nimport { AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core-contracts';\nimport { AXP_DATA_PATH_PROPERTY, AXP_NAME_PROPERTY } from '@acorex/platform/layout/widgets';\n\nexport const AXPEntityListWidget: AXPWidgetConfig = {\n  name: 'entity-list',\n  title: 'Entity List',\n  description: 'Displays entity data in a table format',\n  type: 'view',\n  categories: [],\n  groups: [AXPWidgetGroupEnum.EntityWidget],\n  icon: 'fa-light fa-square',\n  properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY],\n  components: {\n    view: {\n      component: () => import('./entity-list-widget-view.component').then((c) => c.AXPEntityListWidgetViewComponent),\n    },\n    edit: {\n      component: () => import('./entity-list-widget-view.component').then((c) => c.AXPEntityListWidgetViewComponent),\n    },\n    print: {\n      component: () => import('./entity-list-widget-view.component').then((c) => c.AXPEntityListWidgetViewComponent),\n    },\n    designer: {\n      component: () => import('./entity-list-widget-view.component').then((c) => c.AXPEntityListWidgetViewComponent),\n    },\n  },\n};\n","import { AXPActionMenuItem, AXPExecuteCommand, type AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPWidgetStatus } from '@acorex/platform/layout/widget-core-contracts';\n\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXPDeviceService } from '@acorex/platform/core';\nimport { AXPPageComponentRendererDirective } from '@acorex/platform/layout/views';\nimport { AXPBaseWidgetComponent, AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AsyncPipe } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  inject,\n  OnInit,\n  signal,\n  type Signal,\n  untracked,\n  viewChild,\n} from '@angular/core';\n\ninterface PageComponentToolbarHost {\n  primaryMenuItems: Signal<AXPActionMenuItem[]>;\n  secondaryMenuItems: Signal<AXPActionMenuItem[]>;\n  execute: (command: AXPExecuteCommand) => void | Promise<void | AXPExecuteCommandResult>;\n  getWizardStepContext?: () => Record<string, unknown> | null;\n  hasUnsavedChanges?: () => boolean;\n  getWizardStepContinueCommand?: () => AXPExecuteCommand | null;\n}\n\ntype ToolbarPageAction = AXPActionMenuItem & {\n  priority?: 'primary' | 'secondary';\n  zone?: 'header' | 'footer';\n};\n\n@Component({\n  selector: 'axp-page-component-widget-view',\n  host: {\n    class: 'ax-block ax-w-full ax-h-full ax-min-h-0',\n  },\n  template: `\n    @if (showPageActions() && (toolbarPrimaryActions().length || toolbarSecondaryActions().length)) {\n      <div class=\"ax-flex ax-flex-wrap ax-gap-2 ax-justify-end ax-mb-4\">\n        @for (action of toolbarPrimaryActions(); track action.title) {\n          @if (action.visible !== false) {\n            <ax-button\n              [class.ax-sm]=\"deviceService.isSmall()\"\n              [iconOnly]=\"deviceService.isSmall()\"\n              [disabled]=\"action.disabled\"\n              [text]=\"(action.title | translate | async)!\"\n              [look]=\"'solid'\"\n              [color]=\"action.color ?? 'default'\"\n              (onClick)=\"handleActionClick(action)\"\n            >\n              <ax-prefix>\n                <i [class]=\"action.icon\"></i>\n              </ax-prefix>\n              @if (action.items?.length) {\n                <ax-dropdown-panel #panel>\n                  <ax-button-item-list>\n                    @for (sub of action.items; track sub.title) {\n                      @if (sub.visible !== false) {\n                        <ax-button-item\n                          [text]=\"(sub.title | translate | async)!\"\n                          [color]=\"sub.color\"\n                          [disabled]=\"sub.disabled\"\n                          (onClick)=\"handleActionClick(sub)\"\n                        >\n                          <ax-prefix>\n                            <i [class]=\"sub.icon\"></i>\n                          </ax-prefix>\n                        </ax-button-item>\n                        @if (sub.break) {\n                          <ax-divider></ax-divider>\n                        }\n                      }\n                    }\n                  </ax-button-item-list>\n                </ax-dropdown-panel>\n              }\n            </ax-button>\n          }\n        }\n        @if (toolbarSecondaryActions().length) {\n          <ax-button\n            [class.ax-sm]=\"deviceService.isSmall()\"\n            [iconOnly]=\"deviceService.isSmall()\"\n            [text]=\"'@general:terms.interface.actions' | translate | async\"\n            [look]=\"deviceService.isSmall() ? 'blank' : 'solid'\"\n            [color]=\"'default'\"\n          >\n            <ax-prefix>\n              <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n            </ax-prefix>\n            <ax-dropdown-panel #panel>\n              <ax-button-item-list>\n                @for (item of toolbarSecondaryActions(); track item.title) {\n                  @if (item.visible !== false) {\n                    <ax-button-item\n                      [text]=\"(item.title | translate | async)!\"\n                      [color]=\"item.color\"\n                      [disabled]=\"item.disabled\"\n                      (onClick)=\"handleActionClick(item)\"\n                    >\n                      <ax-prefix>\n                        <i [class]=\"item.icon\"></i>\n                      </ax-prefix>\n                    </ax-button-item>\n                    @if (item.break) {\n                      <ax-divider></ax-divider>\n                    }\n                  }\n                }\n              </ax-button-item-list>\n            </ax-dropdown-panel>\n          </ax-button>\n        }\n      </div>\n    }\n    <div\n      class=\"ax-w-full ax-min-h-0\"\n      axp-page-component-renderer\n      [componentKey]=\"componentKey()\"\n      [rootContext]=\"rootContext()\"\n      [pageConfig]=\"pageConfig()\"\n      [options]=\"pageOptions()\"\n      (componentReady)=\"handleComponentReady()\"\n    ></div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    AXPWidgetCoreModule,\n    AXPPageComponentRendererDirective,\n    AXButtonModule,\n    AXDecoratorModule,\n    AXDropdownModule,\n    AXTranslationModule,\n    AsyncPipe,\n  ],\n})\nexport class AXPPageComponentWidgetViewComponent extends AXPBaseWidgetComponent implements OnInit {\n  //#region ----   Services & Dependencies   ----\n\n  protected readonly deviceService = inject(AXPDeviceService);\n  private readonly toastService = inject(AXToastService);\n  private readonly translationService = inject(AXTranslationService);\n  private readonly pageRenderer = viewChild(AXPPageComponentRendererDirective);\n\n  //#endregion\n\n  //#region ----   Computed Options   ----\n\n  componentKey = computed(() => this.options()['componentKey'] as string);\n\n  pageConfig = computed(() => {\n    const field = this.options()['field'];\n    return typeof field === 'string' ? { field } : undefined;\n  });\n\n  pageOptions = computed(() => (this.options()['pageOptions'] as Record<string, unknown>) ?? {});\n\n  rootContext = computed(() => this.contextService.snapshot());\n\n  showPageActions = computed(() => this.options()['showPageActions'] ?? true);\n\n  //#endregion\n\n  //#region ----   Toolbar Actions   ----\n\n  protected toolbarPrimaryActions = signal<AXPActionMenuItem[]>([]);\n  protected toolbarSecondaryActions = signal<AXPActionMenuItem[]>([]);\n\n  /** Bumped when the embedded page finishes async mount so toolbar can bind to the live instance. */\n  private readonly pageHostRevision = signal(0);\n\n  /** Keeps the toolbar in sync when the embedded page calls `recompute()` (e.g. dirty state). */\n  #syncPageActionsEffect = effect(() => {\n    this.pageHostRevision();\n    this.componentKey();\n    const instance = this.resolvePageHost();\n    if (!instance) {\n      return;\n    }\n    instance.primaryMenuItems();\n    instance.secondaryMenuItems();\n    untracked(() => this.syncActionsFromPageInstance(instance));\n  });\n\n  //#endregion\n\n  //#region ----   Lifecycle   ----\n\n  override ngOnInit(): void {\n    super.ngOnInit();\n    const widgetName = this.name;\n    if (widgetName) {\n      this.layoutService.registerWidget(widgetName, this);\n    }\n    this.setStatus(AXPWidgetStatus.Rendered);\n  }\n\n  //#endregion\n\n  //#region ----   Public API   ----\n\n  override api() {\n    const self = this;\n    return {\n      syncContext: () => {\n        self.syncPageComponentIntoFormContext();\n      },\n      continueWizardStep: async (callback?: { setLoading?: (loading: boolean) => void }) => {\n        callback?.setLoading?.(true);\n        try {\n          return await self.runWizardStepContinue();\n        } finally {\n          callback?.setLoading?.(false);\n        }\n      },\n      refreshPageActions: () => {\n        self.refreshPageActions();\n      },\n    };\n  }\n\n  /** Re-reads toolbar actions from the mounted page component. */\n  refreshPageActions(): void {\n    const instance = this.resolvePageHost();\n    if (!instance) {\n      this.toolbarPrimaryActions.set([]);\n      this.toolbarSecondaryActions.set([]);\n      return;\n    }\n    this.syncActionsFromPageInstance(instance);\n  }\n\n  //#endregion\n\n  //#region ----   UI Handlers   ----\n\n  protected handleComponentReady(): void {\n    this.pageHostRevision.update((value) => value + 1);\n  }\n\n  protected async handleActionClick(item: AXPActionMenuItem): Promise<void> {\n    if (!item.command || (item.items?.length ?? 0) > 0) {\n      return;\n    }\n    const instance = this.resolvePageHost();\n    if (!instance) {\n      return;\n    }\n    const command = normalizeExecuteCommand(item.command);\n    await instance.execute(command);\n    this.pageHostRevision.update((value) => value + 1);\n  }\n\n  //#endregion\n\n  //#region ----   Wizard Step Continue   ----\n\n  /**\n   * Persists the active page step when dirty (footer save action), then merges wizard context.\n   * Used by entity create/update step wizard footer Next/Done.\n   */\n  private async runWizardStepContinue(): Promise<{ success: boolean }> {\n    const instance = this.resolvePageHost();\n    if (!instance) {\n      return { success: true };\n    }\n\n    const dirty = instance.hasUnsavedChanges?.() ?? false;\n    if (dirty) {\n      const command = this.resolveWizardContinueCommand(instance);\n      if (command.name) {\n        const result = await instance.execute(command);\n        if (isExecuteCommandFailure(result)) {\n          await this.showExecuteFailureToast(result as AXPExecuteCommandResult);\n          return { success: false };\n        }\n      }\n    }\n\n    this.syncPageComponentIntoFormContext();\n    this.pageHostRevision.update((value) => value + 1);\n    return { success: true };\n  }\n\n  private resolveWizardContinueCommand(instance: PageComponentToolbarHost): AXPExecuteCommand {\n    const explicit = instance.getWizardStepContinueCommand?.();\n    if (explicit?.name) {\n      return explicit;\n    }\n\n    const actions = [...instance.primaryMenuItems(), ...instance.secondaryMenuItems()];\n    const continueAction = actions.find(\n      (action) =>\n        action.visible !== false &&\n        isFooterZoneAction(action) &&\n        getActionPriority(action) === 'primary' &&\n        action.command,\n    );\n\n    return continueAction ? normalizeExecuteCommand(continueAction.command) : { name: '', options: {} };\n  }\n\n  private async showExecuteFailureToast(result: AXPExecuteCommandResult): Promise<void> {\n    const rawText = result.message?.text;\n    let content: string;\n\n    if (typeof rawText === 'string') {\n      content = rawText.startsWith('@') ? await this.translationService.translateAsync(rawText) : rawText;\n    } else if (rawText) {\n      content = this.translationService.resolve(rawText);\n    } else {\n      content = await this.translationService.translateAsync('@general:messages.generic.error.description');\n    }\n\n    this.toastService.show({\n      color: 'danger',\n      title: await this.translationService.translateAsync('@general:messages.generic.error.title'),\n      content,\n      location: 'bottom-center',\n      closeButton: true,\n      timeOut: 5000,\n      timeOutProgress: true,\n    });\n  }\n\n  //#endregion\n\n  //#region ----   Context Sync   ----\n\n  /** Merges the mounted page component's wizard payload into the dialog form context. */\n  syncPageComponentIntoFormContext(): void {\n    const partial = this.resolvePageHost()?.getWizardStepContext?.();\n    if (!partial) {\n      return;\n    }\n    for (const [path, value] of Object.entries(partial)) {\n      this.contextService.update(path, value, { origin: 'user' });\n    }\n  }\n\n  //#endregion\n\n  //#region ----   Utility Methods   ----\n\n  private resolvePageHost(): PageComponentToolbarHost | null {\n    const instance = this.pageRenderer()?.getMountedPageInstance();\n    return isPageToolbarHost(instance) ? instance : null;\n  }\n\n  private syncActionsFromPageInstance(page: PageComponentToolbarHost): void {\n    const primary = page.primaryMenuItems();\n    const secondary = page.secondaryMenuItems();\n    this.toolbarPrimaryActions.set(splitToolbarPrimaryActions(primary));\n    this.toolbarSecondaryActions.set(splitToolbarSecondaryActions(primary, secondary));\n  }\n\n  //#endregion\n}\n\nfunction isPageToolbarHost(instance: unknown): instance is PageComponentToolbarHost {\n  return (\n    !!instance &&\n    typeof instance === 'object' &&\n    'primaryMenuItems' in instance &&\n    'secondaryMenuItems' in instance &&\n    typeof (instance as PageComponentToolbarHost).execute === 'function'\n  );\n}\n\nfunction splitToolbarPrimaryActions(actions: AXPActionMenuItem[]): AXPActionMenuItem[] {\n  return actions.filter(\n    (action) => action.visible !== false && isHeaderZoneAction(action) && getActionPriority(action) === 'primary',\n  );\n}\n\nfunction splitToolbarSecondaryActions(\n  primary: AXPActionMenuItem[],\n  secondary: AXPActionMenuItem[],\n): AXPActionMenuItem[] {\n  const fromPrimary = primary.filter(\n    (action) => action.visible !== false && isHeaderZoneAction(action) && getActionPriority(action) === 'secondary',\n  );\n  const fromSecondary = secondary.filter((action) => action.visible !== false && isHeaderZoneAction(action));\n  return [...fromPrimary, ...fromSecondary];\n}\n\nfunction isHeaderZoneAction(action: AXPActionMenuItem): boolean {\n  return (action as ToolbarPageAction).zone === 'header';\n}\n\nfunction isFooterZoneAction(action: AXPActionMenuItem): boolean {\n  return (action as ToolbarPageAction).zone === 'footer';\n}\n\nfunction isExecuteCommandFailure(result: unknown): boolean {\n  return (\n    !!result &&\n    typeof result === 'object' &&\n    'success' in result &&\n    (result as AXPExecuteCommandResult).success === false\n  );\n}\n\nfunction getActionPriority(action: AXPActionMenuItem): 'primary' | 'secondary' {\n  const priority = (action as ToolbarPageAction).priority;\n  return priority === 'secondary' ? 'secondary' : 'primary';\n}\n\nfunction normalizeExecuteCommand(command: AXPActionMenuItem['command']): AXPExecuteCommand {\n  if (command == null) {\n    return { name: '', options: {} };\n  }\n  if (typeof command === 'string') {\n    return { name: command, options: {} };\n  }\n  return {\n    name: command.name,\n    options: command.options ?? {},\n  };\n}\n","\nimport { AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core-contracts';\nimport { AXP_NAME_PROPERTY } from '@acorex/platform/layout/widgets';\n\nexport const AXPPageComponentWidget: AXPWidgetConfig = {\n  name: 'page-component',\n  title: 'Page Component',\n  description: 'Renders a registered page component via page-component-renderer and exposes its toolbar actions',\n  type: 'view',\n  categories: [],\n  groups: [AXPWidgetGroupEnum.FormElement],\n  icon: 'fa-light fa-file-lines',\n  properties: [AXP_NAME_PROPERTY],\n  components: {\n    view: {\n      component: () =>\n        import('./page-component-widget-view.component').then((c) => c.AXPPageComponentWidgetViewComponent),\n    },\n    edit: {\n      component: () =>\n        import('./page-component-widget-view.component').then((c) => c.AXPPageComponentWidgetViewComponent),\n    },\n    print: {\n      component: () =>\n        import('./page-component-widget-view.component').then((c) => c.AXPPageComponentWidgetViewComponent),\n    },\n    designer: {\n      component: () =>\n        import('./page-component-widget-view.component').then((c) => c.AXPPageComponentWidgetViewComponent),\n    },\n  },\n};\n","import { AXPEntity } from '@acorex/platform/layout/entity-contracts';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXFormatService } from '@acorex/core/format';\n\nimport { AXPMultiLanguageString } from '@acorex/platform/contracts';\nimport { AXPContextEvalFactory, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\n\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, HostBinding, inject, signal } from '@angular/core';\nimport { castArray, isNil } from 'lodash-es';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\nimport { formatLookupItemDisplayAsync, resolveLookupDisplayField, resolveLookupDisplayTemplate } from './lookup-display.util';\n\n@Component({\n  selector: 'axp-lookup-widget-view',\n  template: `\n    @if (loading()) {\n      <ax-loading></ax-loading>\n    } @else {\n      @if (displayItems().length > 1) {\n        @for (item of displayItems(); track $index) {\n          <ax-badge class=\"ax-p-0.5 {{ badgeClass() }}\" [text]=\"(item.text | translate | async) || ''\"></ax-badge>\n        }\n      } @else if (displayItems().length == 1) {\n        <ax-badge\n          class=\"ax-p-0.5 {{ badgeClass() }}\"\n          [text]=\"(displayItems()[0].text | translate | async) || ''\"\n        ></ax-badge>\n      } @else {\n        <span class=\"ax-text-muted\">---</span>\n      }\n    }\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AXLoadingModule, AXBadgeModule, AXTranslationModule, AsyncPipe],\n})\nexport class AXPLookupWidgetViewComponent extends AXPValueWidgetComponent<any> {\n  protected readonly formatService = inject(AXFormatService);\n  protected readonly translation = inject(AXTranslationService);\n  protected readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n  protected readonly contextEvalFactory = inject(AXPContextEvalFactory);\n  protected readonly entityResolver = inject(AXPEntityDefinitionRegistryService);\n\n  protected entity = computed<string>(() => this.options()['entity'] as string);\n  protected multiple = computed<boolean>(() => this.options()['multiple'] as boolean);\n  protected valueField = computed<string>(() => (this.options()['valueField'] as string) ?? 'id');\n  protected textField = computed<string>(() => (this.options()['textField'] as string) ?? 'title');\n  protected badgeClass = computed<string>(() => (this.options()['badgeClass'] as string) ?? 'ax-accent1');\n  protected displayFormat = computed<string | undefined>(() =>\n    resolveLookupDisplayTemplate(this.entityDef(), {\n      displayFormat: this.options()['displayFormat'] as string | undefined,\n      textField: this.textField(),\n    }),\n  );\n\n  protected displayField = computed<string>(() =>\n    resolveLookupDisplayField(this.entityDef(), { textField: this.textField() }),\n  );\n\n  protected loading = signal(false);\n  private entityDef = signal<AXPEntity | null>(null);\n\n  protected displayItems = signal<any[]>([]);\n\n  private efEntity = effect(async () => {\n    const [module, entity] = this.entity().split('.');\n    this.entityDef.set(await this.entityResolver.resolve(module, entity));\n  });\n\n  private efDisplay = effect(async () => {\n    const value = this.getValue();\n    if (isNil(value)) {\n      this.displayItems.set([]);\n    } else {\n      const items = castArray(value).map(async (item: any) => await this.extractItem(item));\n      this.displayItems.set(await Promise.all(items));\n    }\n  });\n\n  private async extractItem(item: any) {\n    if (typeof item == 'object') {\n      return {\n        id: item[this.valueField()],\n        text: await this.getDisplayRaw(item),\n      };\n    }\n\n    const def = this.entityDef();\n    const byKey = def?.queries?.byKey?.execute as Function;\n    if (byKey) {\n      this.loading.set(true);\n      const fetchedItem = await byKey(item);\n      this.loading.set(false);\n      return {\n        id: fetchedItem[this.valueField()],\n        text: await this.getDisplayRaw(fetchedItem),\n      };\n    }\n\n    return {\n      id: item,\n      text: item,\n    };\n  }\n\n  private async getDisplayRaw(item: any): Promise<string | AXPMultiLanguageString> {\n    const locale = this.translation.getActiveLang() ?? 'en-US';\n    return formatLookupItemDisplayAsync(\n      item,\n      this.entityDef(),\n      {\n        displayFormat: this.options()['displayFormat'] as string | undefined,\n        textField: this.textField(),\n      },\n      this.formatService,\n      {\n        expressionEvaluator: this.expressionEvaluator,\n        contextEvalFactory: this.contextEvalFactory,\n        translationService: this.translation,\n        locale,\n      },\n      (value) => this.translation.resolve(value),\n    );\n  }\n\n  @HostBinding('class')\n  private get __class(): string {\n    const cls: any = {};\n    cls[`ax-flex`] = true;\n    cls[`ax-gap-1`] = true;\n    return cls;\n  }\n}\n","import { AXPContextStore } from '@acorex/platform/core';\nimport { AXPExpressionEvaluatorScope, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { AXPContextData } from '@acorex/platform/contracts';\nimport { cloneDeep, isArray, isNil, isObjectLike } from 'lodash-es';\n\ntype AXPContextStoreInstance = InstanceType<typeof AXPContextStore>;\n\nexport type AXPLookupCreateContextStore = AXPContextStoreInstance;\n\n//#region ----   Expression Scope   ----\n\n/**\n * Builds the expression scope used to evaluate lookup `create.context` templates.\n * Matches widget-renderer `context.eval` / `context.set` semantics.\n */\nexport function buildLookupExpressionScope(\n  contextService: AXPContextStoreInstance,\n  parentPath?: string | null,\n): AXPExpressionEvaluatorScope {\n  return {\n    context: {\n      eval: (path: string) => {\n        const fullPath = path.startsWith('>') && parentPath ? `${parentPath}.${path.substring(1)}` : path;\n        return contextService.getValue(fullPath);\n      },\n      set: (path: string, value: unknown) => {\n        contextService.update(path, value, { origin: 'user' });\n      },\n      data: () => contextService.data(),\n      isDirty: () => {\n        if (!contextService.isSavedCommitted()) {\n          return false;\n        }\n        return contextService.isDirty();\n      },\n      options: (path?: string) => {\n        if (path == null || path === '') {\n          return contextService.getValue('options');\n        }\n        return contextService.getValue(`options.${path}`);\n      },\n    },\n    events: {},\n    widget: {},\n    methods: {},\n    vars: {},\n  };\n}\n\n//#endregion\n\n//#region ----   Create Context Evaluation   ----\n\n/**\n * Deep-evaluates expression strings inside lookup `create.context` (e.g. parentId from context).\n */\nexport async function evaluateLookupCreateContext(\n  template: AXPContextData | null | undefined,\n  expressionEvaluator: AXPExpressionEvaluatorService,\n  scope: AXPExpressionEvaluatorScope,\n): Promise<AXPContextData> {\n  if (!template || !isObjectLike(template)) {\n    return {};\n  }\n\n  return (await evaluateLookupCreateContextValue(template, expressionEvaluator, scope)) as AXPContextData;\n}\n\nasync function evaluateLookupCreateContextValue(\n  value: unknown,\n  expressionEvaluator: AXPExpressionEvaluatorService,\n  scope: AXPExpressionEvaluatorScope,\n): Promise<unknown> {\n  if (typeof value === 'string' && expressionEvaluator.isExpression(value)) {\n    return expressionEvaluator.evaluate(value, scope);\n  }\n\n  if (isArray(value)) {\n    const results = await Promise.all(\n      value.map((entry) => evaluateLookupCreateContextValue(entry, expressionEvaluator, scope)),\n    );\n    return results;\n  }\n\n  if (isObjectLike(value)) {\n    const result: Record<string, unknown> = {};\n    for (const [key, entry] of Object.entries(value as Record<string, unknown>)) {\n      result[key] = await evaluateLookupCreateContextValue(entry, expressionEvaluator, scope);\n    }\n    return result;\n  }\n\n  return value;\n}\n\n/**\n * Removes null/undefined entries from resolved create context before Entity:Create.\n */\nexport function compactLookupCreateContext(data: AXPContextData): AXPContextData {\n  const result: Record<string, unknown> = {};\n  for (const [key, value] of Object.entries(cloneDeep(data))) {\n    if (!isNil(value) && value !== '') {\n      result[key] = value;\n    }\n  }\n  return result;\n}\n\n//#endregion\n","import { AXPEntity, AXPEntityCommandScope, getEntityInfo } from '@acorex/platform/layout/entity-contracts';\nimport { AXRowCommandItem } from '@acorex/components/data-table';\nimport { translateSync } from '@acorex/core/translation';\n\nimport { AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport {\n  AXPDataSelectorRowActionItem,\n  AXPDataSelectorRowActionsHandler,\n} from '@acorex/platform/layout/components';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { Injectable, inject } from '@angular/core';\nimport { get, orderBy } from 'lodash-es';\nimport { AXPEntityCommandTriggerViewModel } from '../../entity.viewmodel';\n\n//#region ----   Types   ----\n\n/**\n * Selects which entity list row actions appear in the data selector.\n * Match by full command name, action `name`, trigger name, or command suffix (e.g. `:Preview`).\n */\nexport interface AXPEntityDataSelectorRowActionsConfig {\n  primary?: string[];\n  secondary?: string[];\n}\n\n//#endregion\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPEntityDataSelectorRowActionsService {\n  //#region ----   Services & Dependencies   ----\n\n  private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n  private readonly workflow = inject(AXPWorkflowService);\n  private readonly commandService = inject(AXPCommandService);\n\n  //#endregion\n\n  //#region ----   Public Methods   ----\n\n  /**\n   * Build a row-actions handler for {@link AXPDataSelectorComponent} from entity list actions.\n   */\n  createHandler(\n    entity: AXPEntity,\n    config: AXPEntityDataSelectorRowActionsConfig,\n  ): AXPDataSelectorRowActionsHandler | undefined {\n    const primaryFilters = config.primary ?? [];\n    const secondaryFilters = config.secondary ?? [];\n    if (primaryFilters.length === 0 && secondaryFilters.length === 0) {\n      return undefined;\n    }\n\n    const allActions = this.buildIndividualActions(entity);\n    const primaryActions = this.filterActions(allActions, primaryFilters);\n    const secondaryActions = this.filterActions(allActions, secondaryFilters);\n\n    if (primaryActions.length === 0 && secondaryActions.length === 0) {\n      return undefined;\n    }\n\n    const flattenedActions = this.flattenActions([...primaryActions, ...secondaryActions]);\n\n    return {\n      hasPrimary: () => primaryActions.length > 0,\n      hasDropdown: () => secondaryActions.length > 0,\n      getPrimaryItems: () => this.toRowCommandItems(primaryActions),\n      getDropdownItems: async (rowData: unknown) => {\n        const evaluated = await this.evaluateActionsForRow(secondaryActions, rowData);\n        return this.toRowCommandItems(evaluated);\n      },\n      execute: async (commandName: string, rowData: unknown) => {\n        await this.executeCommand(entity, flattenedActions, commandName, rowData);\n      },\n    };\n  }\n\n  //#endregion\n\n  //#region ----   Private Methods   ----\n\n  private buildIndividualActions(entity: AXPEntity): AXPEntityCommandTriggerViewModel[] {\n    const listActions = entity.interfaces?.master?.list?.actions ?? [];\n    const individualActions = listActions.filter((action) => action.scope === AXPEntityCommandScope.Individual);\n    return orderBy(\n      individualActions.map((action) => new AXPEntityCommandTriggerViewModel(entity, action)),\n      'order',\n      'asc',\n    );\n  }\n\n  private filterActions(\n    actions: AXPEntityCommandTriggerViewModel[],\n    filters: string[],\n  ): AXPEntityCommandTriggerViewModel[] {\n    if (!filters.length) {\n      return [];\n    }\n\n    return actions.filter((action) => this.matchesActionFilter(action, filters));\n  }\n\n  private matchesActionFilter(action: AXPEntityCommandTriggerViewModel, filters: string[]): boolean {\n    const commandName = this.getCommandNameFromTrigger(action.name);\n\n    return filters.some((filter) => {\n      const normalizedFilter = filter.trim();\n      if (!normalizedFilter) {\n        return false;\n      }\n\n      return (\n        commandName === normalizedFilter ||\n        action.name === normalizedFilter ||\n        commandName.endsWith(normalizedFilter) ||\n        action.name.endsWith(normalizedFilter) ||\n        action.name.startsWith(`${normalizedFilter}&`)\n      );\n    });\n  }\n\n  private getCommandNameFromTrigger(triggerName: string): string {\n    const ampIndex = triggerName.indexOf('&');\n    return ampIndex >= 0 ? triggerName.slice(0, ampIndex) : triggerName;\n  }\n\n  private flattenActions(actions: AXPEntityCommandTriggerViewModel[]): AXPEntityCommandTriggerViewModel[] {\n    const result: AXPEntityCommandTriggerViewModel[] = [];\n\n    const visit = (items: AXPEntityCommandTriggerViewModel[]): void => {\n      for (const item of items) {\n        result.push(item);\n        if (item.items?.length) {\n          visit(item.items);\n        }\n      }\n    };\n\n    visit(actions);\n    return result;\n  }\n\n  private toRowCommandItems(actions: AXPEntityCommandTriggerViewModel[]): AXPDataSelectorRowActionItem[] {\n    return actions.map(\n      (action) =>\n        ({\n          name: action.name,\n          text: translateSync(action.title),\n          icon: action.icon ?? '',\n          color: action.color,\n          disabled: action.disabled,\n          default: action.default,\n        }) as AXRowCommandItem,\n    );\n  }\n\n  private async evaluateActionsForRow(\n    actions: AXPEntityCommandTriggerViewModel[],\n    rowData: unknown,\n  ): Promise<AXPEntityCommandTriggerViewModel[]> {\n    const scope = this.createExpressionScope(rowData);\n    const evaluated = await Promise.all(\n      actions.map(async (action) => {\n        const isHidden = await this.expressionEvaluator.evaluate(action.hidden, scope);\n        if (isHidden) {\n          return null;\n        }\n\n        const disabled = await this.expressionEvaluator.evaluate(action.disabled, scope);\n        const name = await this.resolveTriggerName(action.name, rowData);\n        const title = await this.resolveTitleExpression(action.title, rowData);\n\n        return { ...action, disabled, name, title };\n      }),\n    );\n\n    return evaluated.filter(Boolean) as AXPEntityCommandTriggerViewModel[];\n  }\n\n  private createExpressionScope(data: unknown): { context: { eval: (path: string) => unknown } } {\n    return {\n      context: {\n        eval: (path: string) => get(data as Record<string, unknown>, path),\n      },\n    };\n  }\n\n  private async resolveTriggerName(triggerName: string, data: unknown): Promise<string> {\n    if (!triggerName) {\n      return triggerName;\n    }\n\n    const ampIndex = triggerName.indexOf('&');\n    if (ampIndex < 0) {\n      return this.resolveCommandNameExpression(triggerName, data);\n    }\n\n    const commandPart = triggerName.slice(0, ampIndex);\n    const suffix = triggerName.slice(ampIndex);\n    const resolvedCommand = await this.resolveCommandNameExpression(commandPart, data);\n    return `${resolvedCommand}${suffix}`;\n  }\n\n  private async resolveCommandNameExpression(commandName: string, data: unknown): Promise<string> {\n    if (!commandName || !commandName.includes('{{')) {\n      return commandName;\n    }\n\n    const scope = this.createExpressionScope(data);\n    const result = await this.expressionEvaluator.evaluate({ value: commandName } as never, scope);\n    const resolved = (result as { value?: unknown } | null | undefined)?.value;\n    return typeof resolved === 'string' && resolved.trim() !== '' ? resolved : commandName;\n  }\n\n  private async resolveTitleExpression(title: string, data: unknown): Promise<string> {\n    if (!title || !title.includes('{{')) {\n      return title;\n    }\n\n    const scope = this.createExpressionScope(data);\n    const result = await this.expressionEvaluator.evaluate({ value: title } as never, scope);\n    const resolved = (result as { value?: unknown } | null | undefined)?.value;\n    return typeof resolved === 'string' && resolved.trim() !== '' ? resolved : title;\n  }\n\n  private async executeCommand(\n    entity: AXPEntity,\n    actions: AXPEntityCommandTriggerViewModel[],\n    commandName: string,\n    rowData: unknown,\n  ): Promise<void> {\n    const action = actions.find((candidate) => candidate.name === commandName);\n    if (!action) {\n      return;\n    }\n\n    const resolvedTriggerName = await this.resolveTriggerName(commandName, rowData);\n    const command = resolvedTriggerName.split('&')[0];\n    const options = await this.evaluateActionOptions(action.options, rowData);\n\n    if (this.workflow.exists(command)) {\n      await this.workflow.execute(command, {\n        entity: getEntityInfo(entity).source,\n        entityInfo: {\n          name: entity.name,\n          module: entity.module,\n          title: entity.title,\n          parentKey: entity.parentKey,\n          source: `${entity.module}.${entity.name}`,\n        },\n        data: rowData,\n        options,\n        metadata: action.metadata,\n      });\n      return;\n    }\n\n    await this.commandService.execute(command, {\n      __context__: {\n        data: rowData,\n        entity: getEntityInfo(entity).source,\n        entityInfo: {\n          name: entity.name,\n          module: entity.module,\n          title: entity.title,\n          parentKey: entity.parentKey,\n        },\n        options,\n      },\n      __metadata__: action.metadata,\n    });\n  }\n\n  private async evaluateActionOptions(options: unknown, rowData: unknown): Promise<Record<string, unknown>> {\n    if (!options || typeof options !== 'object') {\n      return {};\n    }\n\n    const scope = this.createExpressionScope(rowData);\n    const evaluated = await this.expressionEvaluator.evaluate(options as Record<string, unknown>, scope);\n    return (evaluated as Record<string, unknown>) ?? {};\n  }\n\n  //#endregion\n}\n","import type { AXPCategoryEntity, AXPContextData, AXPMultiLanguageString } from '@acorex/platform/contracts';\nimport { AXPWidgetTypesMap } from '@acorex/platform/layout/widget-core-contracts';\nimport { AXDataSource, AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { AXTreeViewNode } from '@acorex/components/tree-view';\nimport { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport {\n  AXPCleanNestedFilters,\n  AXPFilterOperatorMiddlewareService,\n} from '@acorex/platform/common';\nimport { AXPEntity, AXPEntityProperty } from '@acorex/platform/layout/entity-contracts';\n\nimport { AXPExpressionEvaluatorService } from '@acorex/platform/core';\n\nimport {\n  AXPCategoryTreeDataSource,\n  AXPDataSelectorAllowCreate,\n  AXPDataSelectorColumn,\n  AXPDataSelectorConfig,\n  AXPDataSelectorService,\n} from '@acorex/platform/layout/components';\nimport { AXPWidgetRegistryService } from '@acorex/platform/layout/widget-core';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { Injectable, inject } from '@angular/core';\nimport { isNil } from 'lodash-es';\nimport {\n  AXPLookupCreateContextStore,\n  buildLookupExpressionScope,\n  compactLookupCreateContext,\n  evaluateLookupCreateContext,\n} from './lookup-create-context.util';\nimport { resolveLookupWidgetCreateOptions } from '@acorex/platform/layout/entity-contracts';\nimport { ensureHierarchicalRootFilter, resetPagingForTreeChildrenLoad } from '../../entity-list-paging.util';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\nimport {\n  AXPCategoryTreeService,\n  CategoryTreeConfig,\n  CategoryTreeNodeData,\n} from '../../services/entity-category/category-tree.service';\nimport {\n  AXPEntityDataSelectorRowActionsConfig,\n  AXPEntityDataSelectorRowActionsService,\n} from './entity-data-selector-row-actions.service';\n\n//#region ----   Types   ----\n\nexport interface AXPEntityDataSelectorSelectionOptions {\n  multiple?: boolean;\n  selectedItemIds?: string[] | number[];\n  /** Allow confirming with no selection (clears the lookup value). Default: true. */\n  allowUnselect?: boolean;\n}\n\nexport interface AXPEntityDataSelectorGridOptions {\n  columns?: string[];\n  pageSize?: number;\n}\n\nexport interface AXPEntityDataSelectorFilterOptions {\n  value?: AXDataSourceFilterOption | null;\n  parent?: AXDataSourceFilterOption | null;\n}\n\nexport interface AXPEntityDataSelectorSearchOptions {\n  fields?: string[];\n  initial?: string;\n}\n\nexport interface AXPEntityDataSelectorSortOptions {\n  fields?: { name: string; dir: 'asc' | 'desc' }[];\n}\n\nexport interface AXPEntityDataSelectorCategoryFilterOptions {\n  field: string;\n  operator?: 'equal' | 'contains' | 'in';\n}\n\nexport interface AXPEntityDataSelectorCategoryOptions {\n  /** When false, category sidebar is hidden. Default: true (auto-detect from entity plugin). */\n  enabled?: boolean;\n  title?: string;\n  width?: string;\n  filter?: AXPEntityDataSelectorCategoryFilterOptions;\n  dataSource?: AXPCategoryTreeDataSource;\n}\n\nexport interface AXPEntityDataSelectorCreateOptions {\n  enable?: boolean;\n  /** Create dialog mode when enabled. Legacy `allowCreate` maps here. */\n  mode?: AXPDataSelectorAllowCreate;\n  /** Prefilled entity create form values; may use {{ context.eval() }} expressions. */\n  context?: AXPContextData;\n}\n\n/** Nested options for {@link AXPEntityDataSelectorService.open}. */\nexport interface AXPEntityDataSelectorOpenOptions {\n  entity: AXPEntity;\n  title: string;\n  selection?: AXPEntityDataSelectorSelectionOptions;\n  grid?: AXPEntityDataSelectorGridOptions;\n  filter?: AXPEntityDataSelectorFilterOptions;\n  search?: AXPEntityDataSelectorSearchOptions;\n  sort?: AXPEntityDataSelectorSortOptions;\n  category?: AXPEntityDataSelectorCategoryOptions;\n  create?: AXPEntityDataSelectorCreateOptions;\n  /** Form context store used to evaluate `create.context` expressions. Must come from the hosting form scope. */\n  contextStore?: AXPLookupCreateContextStore;\n  /** Entity list row actions to expose in the selector grid (matched by command name). */\n  rowActions?: AXPEntityDataSelectorRowActionsConfig;\n}\n\n/**\n * @deprecated Use {@link AXPEntityDataSelectorOpenOptions}. Will be removed in a future release.\n */\nexport interface AXPEntityDataSelectorOptions {\n  entity: AXPEntity;\n  title: string;\n  allowMultiple?: boolean;\n  /** Allow confirming with no selection (clears the lookup value). Default: true. */\n  allowUnselect?: boolean;\n  filters?: AXDataSourceFilterOption | null;\n  parentFilters?: AXDataSourceFilterOption | null;\n  columns?: string[];\n  sortedFields?: { name: string; dir: 'asc' | 'desc' }[];\n  /** @deprecated Prefer nested `create`. Legacy allowCreate mode. */\n  allowCreate?: AXPDataSelectorAllowCreate;\n  /** Form context store for evaluating create.context expressions. */\n  contextStore?: AXPLookupCreateContextStore;\n  searchFields?: string[];\n  initialSearchTerm?: string;\n  selectedItemIds?: string[] | number[];\n  categoryFilter?: {\n    title: string;\n    dataSource: AXPCategoryTreeDataSource;\n    filterField: string;\n    filterOperator?: 'equal' | 'contains' | 'in';\n    width?: string;\n  };\n  showCategoryFilter?: boolean;\n  rowActions?: AXPEntityDataSelectorRowActionsConfig;\n}\n\nexport type AXPEntityDataSelectorOpenInput = AXPEntityDataSelectorOpenOptions | AXPEntityDataSelectorOptions;\n\nexport interface AXPEntityDataSelectorResult {\n  items: any[];\n}\n\nconst LEGACY_ENTITY_DATA_SELECTOR_OPTION_KEYS = [\n  'allowMultiple',\n  'allowUnselect',\n  'filters',\n  'parentFilters',\n  'columns',\n  'sortedFields',\n  'allowCreate',\n  'searchFields',\n  'initialSearchTerm',\n  'selectedItemIds',\n  'categoryFilter',\n  'showCategoryFilter',\n] as const satisfies readonly (keyof AXPEntityDataSelectorOptions)[];\n\n//#endregion\n\n//#region ----   Normalization   ----\n\n/**\n * Returns true when flat (legacy) option fields are present on the input object.\n */\nexport function isLegacyEntityDataSelectorOptions(\n  options: AXPEntityDataSelectorOpenInput,\n): options is AXPEntityDataSelectorOptions {\n  const legacy = options as AXPEntityDataSelectorOptions;\n  return LEGACY_ENTITY_DATA_SELECTOR_OPTION_KEYS.some((key) => legacy[key] !== undefined);\n}\n\n/**\n * Maps deprecated flat options to {@link AXPEntityDataSelectorOpenOptions}.\n */\nexport function mapLegacyEntityDataSelectorOptions(\n  legacy: AXPEntityDataSelectorOptions,\n): AXPEntityDataSelectorOpenOptions {\n  const normalized: AXPEntityDataSelectorOpenOptions = {\n    entity: legacy.entity,\n    title: legacy.title,\n  };\n\n  if (\n    legacy.allowMultiple !== undefined ||\n    legacy.selectedItemIds !== undefined ||\n    legacy.allowUnselect !== undefined\n  ) {\n    normalized.selection = {\n      ...(legacy.allowMultiple !== undefined && { multiple: legacy.allowMultiple }),\n      ...(legacy.selectedItemIds !== undefined && { selectedItemIds: legacy.selectedItemIds }),\n      ...(legacy.allowUnselect !== undefined && { allowUnselect: legacy.allowUnselect }),\n    };\n  }\n\n  if (legacy.columns !== undefined) {\n    normalized.grid = { columns: legacy.columns };\n  }\n\n  if (legacy.filters !== undefined || legacy.parentFilters !== undefined) {\n    normalized.filter = {\n      ...(legacy.filters !== undefined && { value: legacy.filters }),\n      ...(legacy.parentFilters !== undefined && { parent: legacy.parentFilters }),\n    };\n  }\n\n  if (legacy.searchFields !== undefined || legacy.initialSearchTerm !== undefined) {\n    normalized.search = {\n      ...(legacy.searchFields !== undefined && { fields: legacy.searchFields }),\n      ...(legacy.initialSearchTerm !== undefined && { initial: legacy.initialSearchTerm }),\n    };\n  }\n\n  if (legacy.sortedFields !== undefined) {\n    normalized.sort = { fields: legacy.sortedFields };\n  }\n\n  if (legacy.categoryFilter) {\n    normalized.category = {\n      enabled: true,\n      title: legacy.categoryFilter.title,\n      width: legacy.categoryFilter.width,\n      dataSource: legacy.categoryFilter.dataSource,\n      filter: {\n        field: legacy.categoryFilter.filterField,\n        operator: legacy.categoryFilter.filterOperator,\n      },\n    };\n  } else if (legacy.showCategoryFilter !== undefined) {\n    normalized.category = { enabled: legacy.showCategoryFilter };\n  }\n\n  if (legacy.allowCreate !== undefined) {\n    normalized.create = {\n      ...(legacy.allowCreate !== undefined && {\n        enable: legacy.allowCreate !== 'none',\n        mode: legacy.allowCreate,\n      }),\n      ...normalized.create,\n    };\n  }\n\n  if (legacy.rowActions !== undefined) {\n    normalized.rowActions = legacy.rowActions;\n  }\n\n  if (legacy.contextStore !== undefined) {\n    normalized.contextStore = legacy.contextStore;\n  }\n\n  return normalized;\n}\n\n/**\n * Normalizes legacy flat or nested options to {@link AXPEntityDataSelectorOpenOptions}.\n * When both shapes are mixed, nested groups take precedence over mapped legacy values.\n */\nexport function normalizeEntityDataSelectorOptions(\n  options: AXPEntityDataSelectorOpenInput,\n): AXPEntityDataSelectorOpenOptions {\n  const normalized = isLegacyEntityDataSelectorOptions(options)\n    ? mapLegacyEntityDataSelectorOptions(options)\n    : { ...options };\n\n  const nested = options as AXPEntityDataSelectorOpenOptions;\n\n  if (nested.selection) {\n    normalized.selection = { ...normalized.selection, ...nested.selection };\n  }\n  if (nested.grid) {\n    normalized.grid = { ...normalized.grid, ...nested.grid };\n  }\n  if (nested.filter) {\n    normalized.filter = { ...normalized.filter, ...nested.filter };\n  }\n  if (nested.search) {\n    normalized.search = { ...normalized.search, ...nested.search };\n  }\n  if (nested.sort) {\n    normalized.sort = { ...normalized.sort, ...nested.sort };\n  }\n  if (nested.category) {\n    normalized.category = { ...normalized.category, ...nested.category };\n    if (nested.category.filter) {\n      normalized.category.filter = { ...normalized.category?.filter, ...nested.category.filter };\n    }\n  }\n  if (nested.create) {\n    normalized.create = { ...normalized.create, ...nested.create };\n  }\n  if (nested.contextStore !== undefined) {\n    normalized.contextStore = nested.contextStore;\n  }\n  if (nested.rowActions !== undefined) {\n    normalized.rowActions = nested.rowActions;\n  }\n\n  return normalized;\n}\n\n//#endregion\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPEntityDataSelectorService {\n  //#region ----   Services & Dependencies   ----\n\n  private readonly dataSelectorService = inject(AXPDataSelectorService);\n  private readonly filterOperatorMiddleware = inject(AXPFilterOperatorMiddlewareService);\n  private readonly widgetResolver = inject(AXPWidgetRegistryService);\n  private readonly entityResolver = inject(AXPEntityDefinitionRegistryService);\n  private readonly commandService = inject(AXPCommandService);\n  private readonly categoryTreeService = inject(AXPCategoryTreeService);\n  private readonly translationService = inject(AXTranslationService);\n  private readonly rowActionsService = inject(AXPEntityDataSelectorRowActionsService);\n  private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n\n  //#endregion\n\n  //#region ----   Public Methods   ----\n\n  /**\n   * Resolves lookup `create.context` templates using the provided form context store.\n   */\n  async resolveCreateContext(\n    template?: AXPContextData | null,\n    contextStore?: AXPLookupCreateContextStore | null,\n  ): Promise<Record<string, unknown>> {\n    if (!template || !contextStore) {\n      return {};\n    }\n\n    const scope = buildLookupExpressionScope(contextStore);\n    const resolved = await evaluateLookupCreateContext(template, this.expressionEvaluator, scope);\n    return compactLookupCreateContext(resolved);\n  }\n\n  /**\n   * Open entity data selector popup.\n   * Accepts nested {@link AXPEntityDataSelectorOpenOptions} or deprecated flat {@link AXPEntityDataSelectorOptions}.\n   */\n  async open(options: AXPEntityDataSelectorOpenInput): Promise<AXPEntityDataSelectorResult | null> {\n    const normalized = normalizeEntityDataSelectorOptions(options);\n    const config = this.createDataSelectorConfig(normalized);\n    await this.applyCategoryFilter(normalized, config);\n\n    const result = (await this.dataSelectorService.open(config)) as AXPEntityDataSelectorResult | null;\n    return result;\n  }\n\n  /**\n   * Execute Entity:Create and return created item.\n   * Used by lookup widget and data selector for inline create.\n   */\n  async executeEntityCreate(\n    entity: AXPEntity,\n    mode: 'full' | 'quick',\n    initialData: Record<string, unknown> = {},\n  ): Promise<any | null> {\n    return this.executeCreate(entity, mode, initialData);\n  }\n\n  /**\n   * Normalize item's phones/emails for expose/display.\n   * Call this when receiving items from any source (create, API, selector).\n   */\n  normalizeItemContactArrays(item: any): any {\n    return this.normalizeContactArrays(item);\n  }\n\n  //#endregion\n\n  //#region ----   Private Methods   ----\n\n  /**\n   * Apply category sidebar config from normalized options or entity plugin auto-detection.\n   */\n  private async applyCategoryFilter(\n    options: AXPEntityDataSelectorOpenOptions,\n    config: AXPDataSelectorConfig,\n  ): Promise<void> {\n    const category = options.category;\n\n    if (category?.dataSource) {\n      config.category = {\n        enabled: category.enabled ?? true,\n        title: category.title ?? '@general:terms.classification.categories',\n        dataSource: category.dataSource,\n        filter: {\n          field: category.filter?.field ?? 'categoryIds',\n          operator: category.filter?.operator,\n        },\n        width: category.width,\n      };\n      return;\n    }\n\n    if (category?.enabled === false) {\n      return;\n    }\n\n    const categoryExt = (options.entity as any)?.extensions?.category;\n    if (!categoryExt) {\n      return;\n    }\n\n    const categoryTreeDataSource = await this.createCategoryTreeDataSource(categoryExt.entity, {\n      textField: categoryExt.textField,\n      valueField: categoryExt.valueField,\n      parentKey: categoryExt.parentKey,\n    });\n    if (!categoryTreeDataSource) {\n      return;\n    }\n\n    const propertyName = categoryExt.propertyName || 'categoryIds';\n    config.category = {\n      enabled: true,\n      title: category?.title ?? '@general:terms.classification.categories',\n      dataSource: categoryTreeDataSource,\n      filter: {\n        field: category?.filter?.field ?? propertyName,\n        operator: category?.filter?.operator ?? 'contains',\n      },\n      width: category?.width,\n    };\n  }\n\n  /**\n   * Create data selector configuration from entity options\n   */\n  private createDataSelectorConfig(options: AXPEntityDataSelectorOpenOptions): AXPDataSelectorConfig {\n    const dataSource = this.createDataSource(options);\n    const columns = this.createColumns(options);\n    const searchFields = this.getSearchFields(options);\n\n    const hasCreateConfig = options.create !== undefined;\n    const resolvedCreate = resolveLookupWidgetCreateOptions({\n      create: options.create,\n      allowCreate: options.create?.mode,\n    });\n    const allowCreate = hasCreateConfig\n      ? resolvedCreate.enabled\n        ? resolvedCreate.mode\n        : 'none'\n      : this.getAllowCreate(options.entity);\n    const rowActions = options.rowActions\n      ? this.rowActionsService.createHandler(options.entity, options.rowActions)\n      : undefined;\n\n    return {\n      title: options.title,\n      dataSource,\n      grid: {\n        columns,\n        parentField: options.entity.parentKey,\n      },\n      selection: {\n        mode: options.selection?.multiple ? 'multiple' : 'single',\n        selectedItemIds: options.selection?.selectedItemIds,\n        allowUnselect: options.selection?.allowUnselect ?? true,\n      },\n      search:\n        searchFields.length > 0 || options.search?.initial\n          ? {\n              fields: searchFields,\n              initial: options.search?.initial,\n            }\n          : undefined,\n      filter: options.filter?.value ? { value: options.filter.value } : undefined,\n      create: {\n        mode: allowCreate,\n        onCreate:\n          allowCreate !== 'none'\n            ? async (mode) => {\n                const data = await this.resolveCreateContext(resolvedCreate.context, options.contextStore);\n                return this.executeCreate(options.entity, mode, data);\n              }\n            : undefined,\n      },\n      rowActions,\n    };\n  }\n\n  /**\n   * Create data source from entity definition\n   */\n  private createDataSource(options: AXPEntityDataSelectorOpenOptions): AXDataSource<any> {\n    const { entity } = options;\n    const filters = options.filter?.value;\n    const parentFilters = options.filter?.parent;\n\n    return new AXDataSource({\n      byKey: (key) => {\n        const func = entity.queries?.byKey?.execute as Function;\n        return func(key);\n      },\n      load: (e) => {\n        const func = entity.queries?.list?.execute as Function;\n        if (!func || typeof func !== 'function') {\n          throw new Error(`Entity ${entity.name} does not have a list query`);\n        }\n        // Tree expand reuses grid page skip/take via getItemsByFilter; reset before merge.\n        resetPagingForTreeChildrenLoad(e, entity.parentKey);\n        this.mergeFilters(e, filters, parentFilters);\n        e.filter = ensureHierarchicalRootFilter(e.filter, entity.parentKey);\n        return func(e);\n      },\n      pageSize: options.grid?.pageSize ?? 10,\n      key: 'id',\n    });\n  }\n\n  /**\n   * Create columns configuration from entity definition\n   */\n  private createColumns(options: AXPEntityDataSelectorOpenOptions): AXPDataSelectorColumn[] {\n    const { entity } = options;\n    const columns = options.grid?.columns ?? [];\n    const { columns: entityColumns = [], properties } = entity;\n    const visibleProperties = properties.filter(({ schema }) => schema?.visible !== false);\n    const visiblePropNames = new Set(visibleProperties.map(({ name }) => name));\n\n    // Priority list of column names to show by default (in order of importance)\n    const priorityColumnNames = ['title', 'displayName', 'name', 'code', 'description'];\n\n    // Filter visible columns\n    const filteredColumns = entityColumns.filter(({ name, showAs }) => visiblePropNames.has(name) || showAs);\n\n    // If no columns specified, use only priority columns\n    let columnsToProcess: typeof filteredColumns;\n    if (columns.length === 0) {\n      // Filter to only priority columns that exist\n      const priorityColumns = filteredColumns\n        .filter((column) => priorityColumnNames.includes(column.name))\n        .sort((a, b) => {\n          const indexA = priorityColumnNames.indexOf(a.name);\n          const indexB = priorityColumnNames.indexOf(b.name);\n          return indexA - indexB;\n        });\n\n      columnsToProcess = priorityColumns;\n    } else {\n      // If columns are specified, filter by them\n      columnsToProcess = filteredColumns.filter(({ name }) => columns.includes(name));\n    }\n\n    return columnsToProcess.map((column) => {\n      let property: AXPEntityProperty;\n      let widgetType: string;\n      let widgetOptions: any;\n\n      if (column.showAs) {\n        // Use custom column configuration\n        const widgetConfig = this.widgetResolver.resolve(\n          column.showAs.type as AXPWidgetTypesMap[keyof AXPWidgetTypesMap],\n        );\n        const { title: _wcTitle, description: _wcDescription, ...widgetRest } = widgetConfig;\n        property = {\n          ...widgetRest,\n          name: column.name,\n          title: column.title ?? '',\n          schema: {\n            dataType: 'string',\n            interface: {\n              type: column.showAs.type,\n              options: {\n                ...column.showAs.options,\n                popover: { ...column.showAs.options?.['popover'], enabled: false },\n              },\n            },\n          },\n        };\n        widgetType = column.showAs.type;\n        widgetOptions = {\n          ...column.showAs.options,\n          popover: { ...column.showAs.options?.['popover'], enabled: false },\n        };\n      } else {\n        // Use entity property configuration - same columns, title, and interface as entity\n        property = visibleProperties.find(({ name }) => name === column.name)!;\n        const iface = property?.schema?.interface;\n        widgetType = iface?.type || 'text';\n        widgetOptions = {\n          ...(iface?.options ?? {}),\n          ...(iface?.children?.length && { children: iface.children }),\n          popover: { ...iface?.options?.['popover'], enabled: false },\n        };\n      }\n\n      // Get width from column options (set by middleware)\n      // Note: Column width resolution is now handled by AXPDataSelectorService\n      // to support all data selector instances (not just entity-based ones)\n      const width = column.options?.width;\n\n      return {\n        name: column.name,\n        title: property.title || column.title || column.name,\n        visible: true,\n        dataPath: column.options?.dataPath,\n        width,\n        widget: {\n          type: widgetType,\n          options: widgetOptions,\n        },\n      };\n    });\n  }\n\n  /**\n   * Get searchable fields from entity properties\n   */\n  private getSearchFields(options: AXPEntityDataSelectorOpenOptions): { name: string; title: string }[] {\n    const { entity } = options;\n    const searchFields = options.search?.fields;\n    const searchableFields =\n      entity.properties\n        .filter((p) => p.options?.filter?.inline?.enabled)\n        .map((p) => {\n          return {\n            name: p.name,\n            title: p.title,\n          };\n        }) ?? [];\n\n    if (searchFields && searchFields.length > 0) {\n      return searchableFields.filter((f) => searchFields.includes(f.name));\n    }\n\n    // Auto-detect searchable fields from entity properties\n    return searchableFields;\n  }\n\n  /**\n   * Get allowCreate mode from entity\n   */\n  private getAllowCreate(entity: AXPEntity): AXPDataSelectorAllowCreate {\n    if (entity.commands?.create?.execute == null) return 'none';\n    const quickCreate = entity.interfaces?.master?.create?.quickCreate;\n    return quickCreate?.enabled === true ? 'quick' : 'full';\n  }\n\n  /**\n   * Execute Entity:Create and return created item\n   */\n  private async executeCreate(\n    entity: AXPEntity,\n    mode: 'full' | 'quick',\n    initialData: Record<string, unknown> = {},\n  ): Promise<any | null> {\n    const quickCreate = entity.interfaces?.master?.create?.quickCreate;\n    const options: Record<string, unknown> = {};\n    if (mode === 'quick' && quickCreate) {\n      if (quickCreate.properties?.length) {\n        options['includeProperties'] = quickCreate.properties;\n      }\n      if (quickCreate.excludeProperties?.length) {\n        options['excludeProperties'] = quickCreate.excludeProperties;\n      }\n      if (quickCreate.layout) {\n        options['layout'] = quickCreate.layout;\n      }\n    }\n    options['process'] = { redirect: false };\n\n    const result = await this.commandService.execute('Entity:Create', {\n      __context__: {\n        entity: `${entity.module}.${entity.name}`,\n        entityInfo: {\n          name: entity.name,\n          module: entity.module,\n          title: entity.title,\n          parentKey: entity.parentKey,\n        },\n        data: initialData,\n        options,\n      },\n    });\n\n    if (result?.success && result?.data) {\n      const item = Array.isArray(result.data) ? result.data[0] : result.data;\n      return this.normalizeContactArrays(item);\n    }\n    return null;\n  }\n\n  /**\n   * Normalize phones/emails from repeater form to plain arrays of { value: string }.\n   * Repeater/ContactBox can return nested structure: { value: { label: \"\", value: \"101010\" } }\n   * Contact widget expects: { value: \"101010\", label?: string }\n   */\n  private normalizeContactArrays(item: any): any {\n    if (!item || typeof item !== 'object') return item;\n    const normalized = { ...item };\n    for (const key of ['phones', 'emails']) {\n      const arr = normalized[key];\n      if (Array.isArray(arr)) {\n        normalized[key] = arr.map((entry: any) => {\n          if (entry && typeof entry === 'object' && 'value' in entry) {\n            const inner = entry.value;\n            if (typeof inner === 'object' && inner && 'value' in inner) {\n              return {\n                value: String(inner.value ?? ''),\n                ...(inner.label && { label: inner.label }),\n              };\n            }\n            return {\n              value: String(entry.value ?? ''),\n              ...(entry.label && { label: entry.label }),\n            };\n          }\n          if (typeof entry === 'string') {\n            return { value: entry };\n          }\n          return { value: '' };\n        });\n      }\n    }\n    return normalized;\n  }\n\n  /**\n   * Create category tree data source from category entity key.\n   * Uses the same {@link AXPCategoryTreeService} as the entity master list category sidebar.\n   */\n  private async createCategoryTreeDataSource(\n    categoryEntityKey: string,\n    categoryOptions?: Pick<CategoryTreeConfig, 'textField' | 'valueField' | 'parentKey'>,\n  ): Promise<AXPCategoryTreeDataSource | null> {\n    try {\n      const treeConfig: CategoryTreeConfig = {\n        entityKey: categoryEntityKey,\n        textField: categoryOptions?.textField,\n        valueField: categoryOptions?.valueField,\n        parentKey: categoryOptions?.parentKey,\n      };\n      const treeData = await this.categoryTreeService.initializeCategoryTree(treeConfig);\n      if (!treeData) {\n        return null;\n      }\n\n      const parentKey = treeConfig.parentKey || treeData.categoryEntityDef?.parentKey || 'parentId';\n      treeConfig.parentKey = parentKey;\n      treeConfig.textField = treeConfig.textField ?? 'title';\n      treeConfig.valueField = treeConfig.valueField ?? 'id';\n\n      return this.buildCategoryTreeDataSource(treeData, treeConfig, parentKey);\n    } catch (error) {\n      console.error('Error creating category tree data source:', error);\n      return null;\n    }\n  }\n\n  /**\n   * Build category tree data source callbacks backed by shared category tree service.\n   */\n  private buildCategoryTreeDataSource(\n    treeData: CategoryTreeNodeData,\n    treeConfig: CategoryTreeConfig,\n    parentKey: string,\n  ): AXPCategoryTreeDataSource {\n    return {\n      loadRootNodes: async (): Promise<AXPCategoryEntity[]> => {\n        const items = await this.categoryTreeService.loadRootCategories(treeData, treeConfig);\n        if (!items) {\n          return [];\n        }\n\n        return items\n          .filter((item) => isNil(item[parentKey]) || item[parentKey] === '')\n          .map((item) => this.mapCategoryItemToEntity(item, treeConfig, parentKey));\n      },\n      loadChildNodes: async (parentId: string): Promise<AXPCategoryEntity[]> => {\n        const targetNode: AXTreeViewNode = { id: parentId, title: '', data: {} };\n        const children = await this.categoryTreeService.loadChildren(targetNode, treeData, treeConfig);\n        return children.map((node) => this.mapCategoryTreeNodeToEntity(node, parentKey));\n      },\n      searchNodes: async (searchValue: string): Promise<AXPCategoryEntity[]> => {\n        const items = await this.categoryTreeService.searchCategories(searchValue, treeData, treeConfig);\n        if (!items) {\n          return [];\n        }\n\n        return items.map((item) => this.mapCategoryItemToEntity(item, treeConfig, parentKey));\n      },\n    };\n  }\n\n  /**\n   * Map a category entity row to {@link AXPCategoryEntity} for the reusable category tree component.\n   */\n  private mapCategoryItemToEntity(\n    item: Record<string, unknown>,\n    config: CategoryTreeConfig,\n    parentKey: string,\n  ): AXPCategoryEntity {\n    const textField = config.textField ?? 'title';\n    const valueField = config.valueField ?? 'id';\n\n    let childrenCount = 0;\n    if (typeof item['childrenCount'] === 'number') {\n      childrenCount = item['childrenCount'];\n    } else if (Array.isArray(item['children'])) {\n      childrenCount = item['children'].length;\n    }\n\n    return {\n      id: String(item[valueField] ?? ''),\n      title: this.resolveCategoryText(item[textField] ?? item['name']),\n      description: this.resolveCategoryText(item['description']),\n      parentId: item[parentKey] as string | undefined,\n      childrenCount,\n    };\n  }\n\n  /**\n   * Map a lazy-loaded tree node to {@link AXPCategoryEntity}.\n   */\n  private mapCategoryTreeNodeToEntity(node: AXTreeViewNode, parentKey: string): AXPCategoryEntity {\n    const data = (node['data'] as Record<string, unknown> | undefined) ?? {};\n\n    let childrenCount = 0;\n    if (typeof node['childrenCount'] === 'number') {\n      childrenCount = node['childrenCount'];\n    } else if (typeof data['childrenCount'] === 'number') {\n      childrenCount = data['childrenCount'];\n    }\n\n    return {\n      id: String(node['id'] ?? ''),\n      title: String(node['title'] ?? ''),\n      description: this.resolveCategoryText(data['description']),\n      parentId: data[parentKey] as string | undefined,\n      childrenCount,\n    };\n  }\n\n  /**\n   * Resolve category display text, including multi-language titles.\n   */\n  private resolveCategoryText(value: unknown): string {\n    if (isNil(value)) {\n      return '';\n    }\n\n    if (typeof value === 'object') {\n      return resolveMultiLanguageString(value as AXPMultiLanguageString, this.translationService.getActiveLang());\n    }\n\n    return String(value);\n  }\n\n  /**\n   * Merge custom and parent filters into data source query\n   */\n  private mergeFilters(\n    request: any,\n    customFilter: AXDataSourceFilterOption | null | undefined,\n    parentFilters: AXDataSourceFilterOption | null | undefined,\n  ) {\n    if (!customFilter && !parentFilters) {\n      return request;\n    }\n\n    const filters: AXDataSourceFilterOption[] = [];\n\n    // Add custom filter\n    if (customFilter) {\n      const cleanedFilters = AXPCleanNestedFilters([customFilter]);\n      if (cleanedFilters.length > 0) {\n        filters.push(this.filterOperatorMiddleware.transformFilter(cleanedFilters[0]));\n      }\n    }\n\n    // Add parent filters\n    if (parentFilters) {\n      filters.push(parentFilters);\n    }\n\n    // Merge with existing filter\n    if (request.filter) {\n      request.filter = {\n        logic: 'and',\n        filters: [...[request.filter], ...filters],\n      };\n    } else {\n      request.filter = {\n        field: null as any,\n        logic: 'and',\n        operator: null as any,\n        filters: filters,\n      };\n    }\n\n    return request;\n  }\n\n  //#endregion\n}\n","import { Signal } from '@angular/core';\n\n/**\n * Base interface for lookup widget look components\n * All look components should implement this interface to ensure consistency\n */\nexport abstract class LookupWidgetLookBase {\n    abstract refresh(): void;\n    abstract focus(): void;\n    abstract clear(): void;\n}\n\n\n","import {\n  AXDataSource,\n  AXDataSourceFilterOption,\n  AXDataSourceSortOption,\n  AXValueChangedEvent,\n} from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXSearchBoxComponent } from '@acorex/components/search-box';\nimport { AXSelectBoxComponent, AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXValidationModule } from '@acorex/core/validation';\nimport { AXPEntity } from '@acorex/platform/layout/entity-contracts';\n\nimport { AXPMultiLanguageString } from '@acorex/platform/contracts';\nimport { AXPDebugService } from '@acorex/platform/core';\nimport { WIDGET_CASCADE_TRACE_NS } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  inject,\n  input,\n  linkedSignal,\n  output,\n  Signal,\n  signal,\n  viewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { get, isEmpty } from 'lodash-es';\nimport { ensureHierarchicalRootFilter } from '../../../entity-list-paging.util';\nimport { LookupWidgetLookBase } from './lookup-widget-look-base.interface';\n\n@Component({\n  selector: 'axp-lookup-widget-select',\n  template: `\n    @if (dataSource()) {\n      <div class=\"ax-flex ax-items-center ax-gap-1 ax-w-full\">\n        <ax-select-box\n          #selectBox\n          class=\"ax-flex-1 ax-min-w-0\"\n          [placeholder]=\"placeholderValue() || (('@general:widgets.lookup.placeholder' | translate | async) ?? '')\"\n          [dataSource]=\"dataSource()!\"\n          [ngModel]=\"selectedItemsValue()\"\n          [textField]=\"displayFieldValue()\"\n          [valueField]=\"valueFieldValue()\"\n          [disabled]=\"disabledValue()\"\n          [multiple]=\"multipleValue()\"\n          [showItemTooltip]=\"showItemTooltip()\"\n          [isItemTruncated]=\"isItemTruncated()\"\n          [textTemplate]=\"textTemplate()\"\n          (onValueChanged)=\"handleValueChanged($event)\"\n        >\n          @if (hasClearButton()) {\n            <ax-clear-button></ax-clear-button>\n          }\n          <ax-search-box [placeholder]=\"('@general:widgets.lookup.search.placeholder' | translate | async)!\">\n            <ax-clear-button></ax-clear-button>\n          </ax-search-box>\n          @for (validation of validationRulesValue(); track $index) {\n            <ax-validation-rule\n              [rule]=\"validation.rule\"\n              [message]=\"validation.options?.message\"\n              [options]=\"validation.options\"\n            ></ax-validation-rule>\n          }\n        </ax-select-box>\n      </div>\n    }\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    CommonModule,\n    FormsModule,\n    AXFormModule,\n    AXButtonModule,\n    AXDecoratorModule,\n    AXTranslationModule,\n    AXValidationModule,\n    AXSelectBoxModule,\n    AXSearchBoxComponent,\n  ],\n  providers: [\n    {\n      provide: LookupWidgetLookBase,\n      useExisting: AXPLookupWidgetSelectComponent,\n    },\n  ],\n})\nexport class AXPLookupWidgetSelectComponent extends LookupWidgetLookBase {\n  private readonly mlsResolver = inject(AXTranslationService);\n\n  //#region ----   Inputs   ----\n\n  entityDef = input.required<Signal<AXPEntity | null>>();\n  customFilter = input.required<Signal<AXDataSourceFilterOption | null>>();\n  selectedItems = input.required<Signal<any[]>>();\n  displayField = input.required<Signal<string>>();\n  valueField = input.required<Signal<string>>();\n  disabled = input.required<Signal<boolean | string>>();\n  multiple = input.required<Signal<boolean>>();\n  validationRules = input.required<Signal<any[]>>();\n  placeholder = input<Signal<string>>();\n  hasClearButton = input<boolean>(false);\n  allowCreate = input<'none' | 'full' | 'quick'>('none');\n  showItemTooltip = input<boolean>(false);\n  isItemTruncated = input<boolean>(true);\n  textTemplate = input<string | null>(null);\n  //#endregion\n\n  //#region ----   Outputs   ----\n\n  valueChanged = output<any[] | null>();\n\n  //#endregion\n\n  //#region ----   View Children   ----\n\n  protected selectBox = viewChild<AXSelectBoxComponent>('selectBox');\n\n  //#endregion\n\n  //#region ----   Computed Properties   ----\n\n  // Unwrap input signals\n  protected selectedItemsValue = linkedSignal(() => this.selectedItems()());\n  protected displayFieldValue = computed(() => this.displayField()());\n  protected valueFieldValue = computed(() => this.valueField()());\n  protected disabledValue = computed(() => this.disabled()());\n  protected multipleValue = computed(() => this.multiple()());\n  protected validationRulesValue = computed(() => this.validationRules()());\n  protected placeholderValue = computed(() => this.placeholder()?.() ?? '');\n\n  /**\n   * Get default sort order from entity's first list view\n   */\n  protected defaultSorts = computed<AXDataSourceSortOption[]>(() => {\n    const entity = this.entityDef()();\n    if (!entity) return [];\n\n    // Get the first view from the list views (usually the \"all\" view)\n    const firstView = entity.interfaces?.master?.list?.views?.[0];\n    if (!firstView?.sorts || firstView.sorts.length === 0) {\n      return [];\n    }\n\n    // Convert AXPQuerySort[] (with 'name') to AXDataSourceSortOption[] (with 'field')\n    return firstView.sorts.map((sort) => ({\n      field: sort.name,\n      dir: sort.dir,\n    }));\n  });\n\n  /**\n   * Create data source from entity definition\n   */\n  dataSource = computed<AXDataSource | null>(() => {\n    const entity = this.entityDef()();\n    if (!entity) return null;\n\n    const defaultSorts = this.defaultSorts();\n\n    return new AXDataSource({\n      byKey: async (key: any) => {\n        const func = entity.queries?.byKey?.execute as Function;\n        if (!func) {\n          return null;\n        }\n        const row = await func(key);\n        return this.applyResolvedDisplayField(row, this.displayField()());\n      },\n      load: async (e: any) => {\n        const func = entity.queries?.list?.execute as Function;\n        if (!func || typeof func !== 'function') {\n          throw new Error(`Entity ${entity.name} does not have a list query`);\n        }\n        this.mergeFilter(e, this.customFilter()());\n        this.expandSearchToInlineFields(e, entity, this.displayField()());\n        e.filter = ensureHierarchicalRootFilter(e.filter, entity.parentKey);\n\n        // Apply default sort order if no sort is already specified\n        if (defaultSorts.length > 0 && (!e.sort || e.sort.length === 0)) {\n          e.sort = defaultSorts;\n        }\n\n        const result = await func(e);\n        const field = this.displayField()();\n        if (result?.items?.length) {\n          return {\n            ...result,\n            items: result.items.map((item: any) => this.applyResolvedDisplayField(item, field)),\n          };\n        }\n        return result;\n      },\n      pageSize: 10,\n      key: 'id',\n    });\n  });\n\n  //#endregion\n\n  //#region ----   Utility Methods   ----\n\n  private applyResolvedDisplayField(item: any, field: string): any {\n    if (item == null) {\n      return item;\n    }\n    const raw = get(item, field);\n    if (raw != null && typeof raw === 'object' && !Array.isArray(raw)) {\n      return { ...item, [field]: this.mlsResolver.resolve(raw as AXPMultiLanguageString) };\n    }\n    return item;\n  }\n\n  /**\n   * Expands ax-select-box search (contains on displayField) to OR across entity inline filter fields.\n   */\n  private expandSearchToInlineFields(\n    request: { filter?: AXDataSourceFilterOption },\n    entity: AXPEntity,\n    displayField: string,\n  ): void {\n    const inlineFields = entity.properties\n      .filter((p) => p.options?.filter?.inline?.enabled)\n      .map((p) => p.name);\n\n    if (!request.filter || inlineFields.length === 0) {\n      return;\n    }\n\n    const searchTerm = this.extractDisplayFieldContainsValue(request.filter, displayField);\n    if (searchTerm == null || `${searchTerm}`.trim() === '') {\n      return;\n    }\n\n    const inlineSearchFilter: AXDataSourceFilterOption =\n      inlineFields.length === 1\n        ? {\n            field: inlineFields[0],\n            operator: { type: 'contains' },\n            value: searchTerm,\n          }\n        : {\n            field: null as any,\n            logic: 'or',\n            operator: null as any,\n            filters: inlineFields.map((field) => ({\n              field,\n              operator: { type: 'contains' },\n              value: searchTerm,\n            })),\n          };\n\n    request.filter = this.replaceDisplayFieldContainsFilter(request.filter, displayField, inlineSearchFilter);\n  }\n\n  private isDisplayFieldContainsFilter(filter: AXDataSourceFilterOption, displayField: string): boolean {\n    return (\n      filter.field === displayField &&\n      filter.operator?.type === 'contains' &&\n      !filter.filters?.length\n    );\n  }\n\n  private extractDisplayFieldContainsValue(\n    filter: AXDataSourceFilterOption,\n    displayField: string,\n  ): unknown {\n    if (this.isDisplayFieldContainsFilter(filter, displayField)) {\n      return filter.value;\n    }\n\n    for (const child of filter.filters ?? []) {\n      const value = this.extractDisplayFieldContainsValue(child as AXDataSourceFilterOption, displayField);\n      if (value != null) {\n        return value;\n      }\n    }\n\n    return undefined;\n  }\n\n  private replaceDisplayFieldContainsFilter(\n    filter: AXDataSourceFilterOption,\n    displayField: string,\n    replacement: AXDataSourceFilterOption,\n  ): AXDataSourceFilterOption {\n    if (this.isDisplayFieldContainsFilter(filter, displayField)) {\n      return replacement;\n    }\n\n    if (filter.filters?.length) {\n      return {\n        ...filter,\n        filters: filter.filters.map((child) =>\n          this.replaceDisplayFieldContainsFilter(child as AXDataSourceFilterOption, displayField, replacement),\n        ),\n      };\n    }\n\n    return filter;\n  }\n\n  /**\n   * Merge custom filter into data source query\n   */\n  private mergeFilter(request: any, filter: AXDataSourceFilterOption | null | undefined): void {\n    if (!filter) {\n      return;\n    }\n    if (request.filter) {\n      request.filter = {\n        field: null as unknown as string,\n        logic: 'and',\n        operator: null as unknown as AXDataSourceFilterOption['operator'],\n        filters: [request.filter, filter],\n      };\n    } else {\n      request.filter = filter;\n    }\n  }\n\n  //#endregion\n\n  //#region ----   Focus Management   ----\n\n  private shouldFocus = signal(false);\n\n  #focusEffect = effect(() => {\n    const shouldFocus = this.shouldFocus();\n    if (!shouldFocus) {\n      return;\n    }\n\n    const selectBox = this.selectBox();\n    if (selectBox) {\n      try {\n        selectBox.focus();\n        this.shouldFocus.set(false);\n      } catch (error) {\n        // Error focusing select box\n      }\n    }\n  });\n\n  focus(): void {\n    this.shouldFocus.set(true);\n  }\n\n  //#endregion\n\n  //#region ----   Event Handlers   ----\n\n  protected handleValueChanged(e: AXValueChangedEvent): void {\n    if (e.isUserInteraction) {\n      const items = (e.component as AXSelectBoxComponent).selectedItems;\n      this.valueChanged.emit(items);\n    }\n  }\n\n  //#endregion\n\n  clear(): void {\n    AXPDebugService.instance?.trace(WIDGET_CASCADE_TRACE_NS, 'lookup-select', 'clear() — value cleared', () => ({\n      entity: this.entityDef()()?.name,\n    }));\n    this.valueChanged.emit(null);\n  }\n\n  refresh(): void {\n    AXPDebugService.instance?.trace(WIDGET_CASCADE_TRACE_NS, 'lookup-select', 'refresh()', () => ({\n      entity: this.entityDef()()?.name,\n      filter: this.customFilter()(),\n      hasSelection: !isEmpty(this.selectedItemsValue()),\n    }));\n    if (!isEmpty(this.selectedItemsValue())) {\n      this.clear();\n    }\n    this.dataSource()?.refresh();\n  }\n}\n","import { AXPEntity } from '@acorex/platform/layout/entity-contracts';\nimport { AXDataSourceFilterOption, AXFocusEvent, AXHtmlEvent, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXTagBoxComponent, AXTagBoxModule } from '@acorex/components/tag-box';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXValidationModule } from '@acorex/core/validation';\n\nimport { AXPContextEvalFactory, AXPContextStore, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  inject,\n  input,\n  output,\n  Signal,\n  signal,\n  viewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { get } from 'lodash-es';\nimport { AXPEntityDataSelectorService } from '../entity-data-selector.service';\nimport type { AXPEntityDataSelectorRowActionsConfig } from '../entity-data-selector-row-actions.service';\nimport { formatLookupItemDisplayAsync } from '../lookup-display.util';\nimport type { ResolvedLookupCreateOptions } from '@acorex/platform/layout/entity-contracts';\nimport { LookupWidgetLookBase } from './lookup-widget-look-base.interface';\n\n@Component({\n  selector: 'axp-lookup-widget-tagbox',\n  template: `\n    <ax-tag-box\n      #tagBoxComponent\n      [tagTemplate]=\"tagTemplate\"\n      [ngModel]=\"selectedItemsValue()\"\n      [textField]=\"displayFieldValue()\"\n      [valueField]=\"valueFieldValue()\"\n      (onValueChanged)=\"handleValueChanged($event)\"\n      [placeholder]=\"\n        selectedItemsValue().length\n          ? ''\n          : (placeholderValue() || (('@general:widgets.lookup.placeholder' | translate | async) ?? ''))\n      \"\n      [addOnEnter]=\"false\"\n      [addOnComma]=\"false\"\n      [disabled]=\"disabledValue()\"\n      (onKeyDown)=\"handleKeyDown($event)\"\n      (onKeyUp)=\"handleKeyUp($event)\"\n      (onBlur)=\"handleBlur($event)\"\n    >\n      @for (validation of validationRulesValue(); track $index) {\n        <ax-validation-rule\n          [rule]=\"validation.rule\"\n          [message]=\"validation.options?.message\"\n          [options]=\"validation.options\"\n        ></ax-validation-rule>\n      }\n      @if (selectedItemsValue().length > 1 || hasClearButton()) {\n        <ax-clear-button></ax-clear-button>\n      }\n\n      <ax-suffix>\n        <ax-button\n          color=\"ghost\"\n          look=\"blank\"\n          [disabled]=\"isLoadingValue() || disabledValue()\"\n          (onClick)=\"handleOpenSelector($event)\"\n        >\n          @if (isLoadingValue()) {\n            <ax-loading></ax-loading>\n          } @else {\n            <ax-icon icon=\"far fa-search\"> </ax-icon>\n          }\n        </ax-button>\n      </ax-suffix>\n    </ax-tag-box>\n    <ng-template #tagTemplate let-item let-index=\"index\">\n      <div class=\"ax-inline-flex ax-items-center ax-gap-1.5 ax-rounded-md ax-px-3 ax-py-1 ax-text-sm ax-surface\">\n        <span>{{ getItemLabel(item) }}</span>\n        <button type=\"button\" (click)=\"tagBoxComponent.removeItem(index)\">\n          <ax-icon class=\"ax-icon ax-icon-close\"></ax-icon>\n        </button>\n      </div>\n    </ng-template>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    CommonModule,\n    FormsModule,\n    AXButtonModule,\n    AXDecoratorModule,\n    AXLoadingModule,\n    AXValidationModule,\n    AXFormModule,\n    AXTagBoxModule,\n    AXTranslationModule,\n  ],\n  providers: [\n    {\n      provide: LookupWidgetLookBase,\n      useExisting: AXPLookupWidgetTagboxComponent,\n    },\n  ],\n})\nexport class AXPLookupWidgetTagboxComponent extends LookupWidgetLookBase {\n  //#region ----   Services & Dependencies   ----\n\n  protected readonly formatService = inject(AXFormatService);\n  protected readonly translateService = inject(AXTranslationService);\n  protected readonly entityDataSelectorService = inject(AXPEntityDataSelectorService);\n  protected readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n  protected readonly contextEvalFactory = inject(AXPContextEvalFactory);\n  private readonly contextStore = inject(AXPContextStore, { optional: true });\n\n  //#endregion\n\n  //#region ----   Inputs   ----\n\n  selectedItems = input.required<Signal<any[]>>();\n  displayField = input.required<Signal<string>>();\n  valueField = input.required<Signal<string>>();\n  displayFormat = input<Signal<string | undefined>>();\n  disabled = input.required<Signal<boolean | string>>();\n  multiple = input.required<Signal<boolean>>();\n  isLoading = input.required<Signal<boolean>>();\n  validationRules = input.required<Signal<any[]>>();\n  placeholder = input<Signal<string>>();\n  hasClearButton = input<boolean>(false);\n  resolvedCreate = input<ResolvedLookupCreateOptions>({ enabled: false, mode: 'none' });\n  allowUnselect = input<boolean>(true);\n\n  // Entity and configuration data (for showSelector and searchByValue)\n  entityDef = input.required<Signal<AXPEntity | null>>();\n  customFilter = input.required<Signal<AXDataSourceFilterOption | null>>();\n  columns = input.required<Signal<string[]>>();\n  parentFilters = input<AXDataSourceFilterOption | null>(null);\n  rowActions = input<AXPEntityDataSelectorRowActionsConfig | undefined>(undefined);\n\n  // Business logic callbacks\n  onSetLoading = input.required<(loading: boolean) => void>();\n\n  //#endregion\n\n  //#region ----   Outputs   ----\n\n  valueChanged = output<any[]>();\n\n  //#endregion\n\n  //#region ----   Internal State   ----\n\n  protected searchTerm = signal<string>('');\n  isOpen = signal(false);\n  protected itemLabels = signal<Record<string, string>>({});\n  private itemLabelsVersion = 0;\n\n  //#endregion\n\n  //#region ----   View Children   ----\n\n  protected tagBox = viewChild<AXTagBoxComponent>('tagBoxComponent');\n\n  //#endregion\n\n  //#region ----   Focus Management   ----\n\n  private shouldFocus = signal(false);\n\n  #focusEffect = effect(() => {\n    const shouldFocus = this.shouldFocus();\n    if (!shouldFocus) {\n      return;\n    }\n\n    const tagBox = this.tagBox();\n    if (tagBox) {\n      try {\n        tagBox.focus();\n        this.shouldFocus.set(false);\n      } catch (error) {\n        // Error focusing tag box\n      }\n    }\n  });\n\n  #itemLabelsEffect = effect(() => {\n    void this.translateService.getActiveLang();\n    const items = this.selectedItemsValue();\n    const entityDef = this.entityDef()();\n    const valueField = this.valueFieldValue();\n    const version = ++this.itemLabelsVersion;\n\n    void Promise.all(\n      items.map(async (item) => {\n        const id = String(get(item, valueField) ?? '');\n        const label = await formatLookupItemDisplayAsync(\n          item,\n          entityDef,\n          {\n            displayFormat: this.displayFormatValue(),\n            textField: this.displayFieldValue(),\n          },\n          this.formatService,\n          {\n            expressionEvaluator: this.expressionEvaluator,\n            contextEvalFactory: this.contextEvalFactory,\n            translationService: this.translateService,\n            locale: this.translateService.getActiveLang() ?? 'en-US',\n          },\n          (value) => this.translateService.resolve(value),\n        );\n        return [id, label] as const;\n      }),\n    ).then((entries) => {\n      if (version !== this.itemLabelsVersion) {\n        return;\n      }\n      this.itemLabels.set(Object.fromEntries(entries));\n    });\n  });\n\n  focus(): void {\n    this.shouldFocus.set(true);\n  }\n\n  //#endregion\n\n  //#region ----   Computed Properties   ----\n\n  protected tagBoxComponent = computed(() => this.tagBox());\n\n  // Unwrap input signals\n  protected selectedItemsValue = computed(() => this.selectedItems()());\n  protected displayFieldValue = computed(() => this.displayField()());\n  protected valueFieldValue = computed(() => this.valueField()());\n  protected displayFormatValue = computed(() => this.displayFormat()?.());\n  protected disabledValue = computed(() => this.disabled()());\n  protected multipleValue = computed(() => this.multiple()());\n  protected isLoadingValue = computed(() => this.isLoading()());\n  protected validationRulesValue = computed(() => this.validationRules()());\n  protected placeholderValue = computed(() => this.placeholder()?.() ?? '');\n\n  //#endregion\n\n  //#region ----   Event Handlers   ----\n\n  protected handleKeyDown(e: AXHtmlEvent): void {\n    const keyEvent = e.nativeEvent as KeyboardEvent;\n    if (keyEvent.code === 'Enter' || keyEvent.code === 'NumpadEnter') {\n      keyEvent.preventDefault();\n      keyEvent.stopPropagation();\n    }\n  }\n\n  protected handleValueChanged(e: AXValueChangedEvent): void {\n    if (e.isUserInteraction) {\n      this.valueChanged.emit(e.value);\n    }\n  }\n\n  protected async handleKeyUp(e: AXHtmlEvent): Promise<void> {\n    const keyEvent = e.nativeEvent as KeyboardEvent;\n    const searchValue = this.getInputValue();\n    this.searchTerm.set(searchValue);\n\n    if ((keyEvent.code == 'Enter' || keyEvent.code == 'NumpadEnter') && searchValue) {\n      const onSetLoading = this.onSetLoading();\n      const multiple = this.multiple()();\n      const currentItems = this.selectedItems()();\n\n      onSetLoading(true);\n      const result = await this.searchByValue(searchValue);\n      if (result?.total === 1 && result?.items?.length === 1) {\n        const singleItem = result.items[0];\n        const valueField = this.valueField()();\n        const newId = get(singleItem, valueField);\n\n        if (multiple) {\n          const exists = currentItems.some((item) => get(item, valueField) === newId);\n          const newItems = exists ? currentItems : [...currentItems, singleItem];\n          this.valueChanged.emit(newItems);\n        } else {\n          this.valueChanged.emit([singleItem]);\n        }\n        this.clear();\n      } else {\n        await this.showSelector(searchValue);\n      }\n      onSetLoading(false);\n    }\n    if (keyEvent.code == 'ArrowDown') {\n      await this.showSelector(searchValue);\n    }\n  }\n\n  protected handleBlur(e: AXFocusEvent): void {\n    setTimeout(() => {\n      if (!this.isOpen()) {\n        this.clear();\n      }\n    }, 100);\n  }\n\n  protected async handleOpenSelector(_e?: unknown): Promise<void> {\n    const searchTerm = this.searchTerm();\n    this.isOpen.set(true);\n    await this.showSelector(searchTerm);\n    // isOpen will be set to false by showSelector in finally block\n  }\n\n  //#endregion\n\n  //#region ----   Utility Methods   ----\n\n  protected getItemLabel(item: unknown): string {\n    const id = String(get(item, this.valueFieldValue()) ?? '');\n    return this.itemLabels()[id] ?? '';\n  }\n\n  /**\n   * Get current input value from tag box\n   */\n  getInputValue(): string {\n    return this.tagBox()?.inputValue() ?? '';\n  }\n\n  /**\n   * Set isOpen state (called by parent after selector closes)\n   */\n  setIsOpen(value: boolean): void {\n    this.isOpen.set(value);\n  }\n\n  //#endregion\n\n  //#region ----   Business Logic Methods   ----\n\n  /**\n   * Search for items by value\n   */\n  protected async searchByValue(value: string): Promise<any> {\n    const entity = this.entityDef()();\n    if (!entity) return null;\n\n    const searchFields = entity.properties.filter((p) => p.options?.filter?.inline?.enabled);\n\n    const inlineFilters: AXDataSourceFilterOption = {\n      field: null as any,\n      logic: 'or',\n      operator: null as any,\n      filters: [],\n    };\n\n    if (value && searchFields.length > 0) {\n      searchFields.forEach((p) => {\n        inlineFilters.filters?.push({\n          field: p.name,\n          operator: { type: 'contains' },\n          value,\n        });\n      });\n    }\n\n    const func = entity.queries?.list?.execute as Function;\n    if (!func || typeof func !== 'function') {\n      throw new Error(`Entity ${entity.name} does not have a list query`);\n    }\n    return await func({ filter: inlineFilters, take: 10 });\n  }\n\n  /**\n   * Show entity data selector popup\n   */\n  protected async showSelector(initialSearchTerm?: string): Promise<void> {\n    this.isOpen.set(true);\n\n    const searchValue = initialSearchTerm?.trim() ?? '';\n    const searchTerm = searchValue.length > 0 ? searchValue : undefined;\n\n    const entity = this.entityDef()();\n    if (!entity) return;\n\n    // Extract current selected item IDs to pre-select them in the data selector\n    const selectedItemIds = this.selectedItems()()\n      .map((item) => get(item, this.valueField()()))\n      .filter((id) => id != null);\n\n    try {\n      const createOptions = this.resolvedCreate();\n      const result = await this.entityDataSelectorService.open({\n        entity,\n        title: `${this.translateService.translateSync(entity.formats.plural ?? '')}`,\n        allowMultiple: this.multiple()(),\n        allowUnselect: this.allowUnselect(),\n        filters: this.customFilter()(),\n        parentFilters: this.parentFilters(),\n        columns: this.columns()(),\n        create: {\n          enable: createOptions.enabled,\n          mode: createOptions.mode,\n          context: createOptions.context,\n        },\n        contextStore: this.contextStore ?? undefined,\n        initialSearchTerm: searchTerm,\n        selectedItemIds: selectedItemIds.length > 0 ? selectedItemIds : undefined,\n        rowActions: this.rowActions(),\n      });\n\n      if (result && 'items' in result) {\n        this.valueChanged.emit(result.items);\n      }\n    } catch (error) {\n      console.error('Error opening entity data selector:', error);\n    } finally {\n      this.isOpen.set(false);\n      this.focus();\n    }\n  }\n\n  //#endregion\n\n  clear(): void {\n    this.tagBox()?.inputValue.set('');\n    this.searchTerm.set('');\n  }\n\n  refresh(): void {\n    this.clear();\n  }\n}\n","import { AXClickEvent, AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPEntity, AXPQueryFilter } from '@acorex/platform/layout/entity-contracts';\n\nimport { AXPMultiLanguageString, extractValue, isSelectionValueEqual } from '@acorex/platform/contracts';\nimport { AXPDebugService, FORM_DIRTY_TRACE_NS } from '@acorex/platform/core';\nimport {\n  resolveLookupWidgetCreateOptions,\n  type AXPLookupSelectorRowActionsConfig,\n  type AXPLookupWidgetLookType,\n} from '@acorex/platform/layout/entity-contracts';\nimport { AXPValueWidgetComponent, WIDGET_CASCADE_TRACE_NS } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  Injector,\n  computed,\n  effect,\n  inject,\n  signal,\n  viewChild,\n} from '@angular/core';\nimport { castArray, cloneDeep, defaultTo, get, has, isEmpty, isEqual, isNil, set } from 'lodash-es';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\nimport { AXPEntityService } from '../../entity.service';\nimport { AXPEntityDataSelectorService } from './entity-data-selector.service';\nimport { LookupWidgetLookBase } from './looks/lookup-widget-look-base.interface';\nimport { AXPLookupWidgetSelectComponent } from './looks/lookup-widget-select.component';\nimport { AXPLookupWidgetTagboxComponent } from './looks/lookup-widget-tagbox.component';\nimport { resolveLookupDisplayField, resolveLookupDisplayTemplate } from './lookup-display.util';\n\n@Component({\n  selector: 'axp-lookup-widget-edit',\n  template: `\n    @if (entityDef()) {\n      <div class=\"ax-flex ax-items-center ax-gap-1 ax-w-full\">\n        @switch (look()) {\n          @case ('select') {\n            <axp-lookup-widget-select\n              class=\"ax-flex-1 ax-min-w-0\"\n              [entityDef]=\"entityDef\"\n              [customFilter]=\"customFilter\"\n              [selectedItems]=\"selectedItems\"\n              [displayField]=\"displayField\"\n              [valueField]=\"valueField\"\n              [textTemplate]=\"textTemplate()\"\n              [disabled]=\"disabled\"\n              [multiple]=\"multiple\"\n              [placeholder]=\"placeholder\"\n              [validationRules]=\"validationRules\"\n              [hasClearButton]=\"hasClearButton()\"\n              [showItemTooltip]=\"showItemTooltip()\"\n              [isItemTruncated]=\"isItemTruncated()\"\n              (valueChanged)=\"handleComponentValueChanged($event)\"\n            />\n          }\n          @default {\n            <axp-lookup-widget-tagbox\n              class=\"ax-flex-1 ax-min-w-0\"\n              [selectedItems]=\"selectedItems\"\n              [displayField]=\"displayField\"\n              [valueField]=\"valueField\"\n              [displayFormat]=\"displayFormat\"\n              [disabled]=\"disabled\"\n              [multiple]=\"multiple\"\n              [placeholder]=\"placeholder\"\n              [isLoading]=\"isLoading\"\n              [validationRules]=\"validationRules\"\n              [hasClearButton]=\"hasClearButton()\"\n              [resolvedCreate]=\"resolvedCreate()\"\n              [allowUnselect]=\"allowUnselect()\"\n              [entityDef]=\"entityDef\"\n              [customFilter]=\"customFilter\"\n              [columns]=\"columns\"\n              [parentFilters]=\"filter\"\n              [rowActions]=\"rowActions()\"\n              [onSetLoading]=\"setLoading.bind(this)\"\n              (valueChanged)=\"handleComponentValueChanged($event)\"\n            />\n          }\n        }\n        @if (resolvedCreate().enabled) {\n          <div class=\"ax-sm\">\n            <ax-button\n              color=\"primary\"\n              look=\"twotone\"\n              [disabled]=\"disabled() || isLoading()\"\n              (onClick)=\"handleCreateClick($event)\"\n              [title]=\"'@general:actions.create.title' | translate | async\"\n            >\n              <ax-icon icon=\"far fa-plus\"></ax-icon>\n            </ax-button>\n          </div>\n        }\n      </div>\n    }\n  `,\n  host: {\n    class: 'ax-w-full',\n  },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    CommonModule,\n    AXButtonModule,\n    AXDecoratorModule,\n    AXTranslationModule,\n    AXPLookupWidgetSelectComponent,\n    AXPLookupWidgetTagboxComponent,\n  ],\n})\nexport class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent<any> {\n  //#region ----   Services & Dependencies   ----\n\n  protected readonly injector = inject(Injector);\n  protected readonly entityResolver = inject(AXPEntityDefinitionRegistryService);\n  protected readonly entityService = inject(AXPEntityService);\n  protected readonly entityDataSelectorService = inject(AXPEntityDataSelectorService);\n  private readonly mlsResolver = inject(AXTranslationService);\n\n  //#endregion\n\n  //#region ----   View Children   ----\n\n  protected componentLook = viewChild(LookupWidgetLookBase);\n\n  //#endregion\n\n  //#region ----   Computed Properties   ----\n\n  protected expose = computed<string | undefined | any[]>(() => this.options()['expose'] as string);\n  protected entity = computed<string>(() => this.options()['entity'] as string);\n  protected disabled = computed<string | boolean>(() => (this.options()['disabled'] as string | boolean) ?? false);\n  protected columns = computed<string[]>(() => (this.options()['columns'] as string[]) ?? []);\n  protected textField = computed<string>(() => (this.options()['textField'] as string) ?? '');\n  /**\n   * Template for select look (`ax-select-box`). Uses `textTemplate` when set, otherwise\n   * falls back to `displayFormat` (same as tagbox). Single braces are expanded to `{{ }}`\n   * for the select box template engine (see `AXPDataListWidgetComponent.textTemplate`).\n   */\n  protected textTemplate = computed<string | null>(() => {\n    const explicit = this.options()['textTemplate'] as string | undefined;\n    if (explicit) {\n      return explicit.replace(/\\{/g, '{{').replace(/\\}/g, '}}');\n    }\n    return this.displayFormat() ?? null;\n  });\n  protected hasClearButton = computed<boolean>(\n    () => (!this.filterMode() && (this.options()['hasClearButton'] as boolean)) ?? false,\n  );\n  protected showItemTooltip = computed<boolean>(() => (this.options()['showItemTooltip'] as boolean) ?? false);\n  protected isItemTruncated = computed<boolean>(() => (this.options()['isItemTruncated'] as boolean) ?? true);\n  protected customFilter = computed<AXDataSourceFilterOption>(\n    () => this.options()['filter'] as AXDataSourceFilterOption,\n  );\n  protected placeholder = computed<string>(() => (this.options()['placeholder'] as string) ?? '');\n  protected filterMode = computed<boolean>(() => this.options()['filterMode'] as boolean);\n\n  protected multiple = computed(() => (this.options()['multiple'] ?? false) as boolean);\n  protected allowUnselect = computed(() => (this.options()['allowUnselect'] as boolean) ?? true);\n  protected look = computed<AXPLookupWidgetLookType>(\n    () => (this.options()['look'] as AXPLookupWidgetLookType) ?? 'lookup',\n  );\n\n  protected displayField = computed<string>(() =>\n    resolveLookupDisplayField(this.entityDef(), { textField: this.textField() }),\n  );\n\n  protected resolvedCreate = computed(() =>\n    resolveLookupWidgetCreateOptions({\n      create: this.options()['create'],\n      allowCreate: this.options()['allowCreate'] as 'none' | 'full' | 'quick' | undefined,\n    }),\n  );\n\n  protected rowActions = computed(\n    () => this.options()['rowActions'] as AXPLookupSelectorRowActionsConfig | undefined,\n  );\n\n  protected valueField = computed<string>(() => this.entityDef()?.properties.find((c) => c.name == 'id')?.name ?? 'id');\n\n  protected displayFormat = computed<string | undefined>(() =>\n    resolveLookupDisplayTemplate(this.entityDef(), {\n      displayFormat: this.options()['displayFormat'] as string | undefined,\n      textField: this.textField(),\n    }),\n  );\n\n  //#endregion\n\n  protected conditions?: AXPQueryFilter[];\n\n  protected filter: AXDataSourceFilterOption | null;\n\n  protected entityDef = signal<AXPEntity | null>(null);\n\n  protected selectedItems = signal<any[]>([]);\n  protected initialItems = signal<boolean>(false);\n  protected initialized = signal<boolean>(false);\n  protected previousValue = signal<any>(undefined);\n\n  protected isLoading = signal(false);\n\n  #efEntity = effect(async () => {\n    const [module, entity] = this.entity().split('.');\n    this.entityDef.set(await this.entityResolver.resolve(module, entity));\n  });\n\n  private hasValue = (value: any) => (Array.isArray(value) && !isEmpty(value)) || !isNil(value);\n\n  #efValue = effect(() => {\n    const currentValue = this.getValue();\n    const prevValue = this.previousValue();\n    const isInitialized = this.initialized();\n\n    // Check if value has actually changed\n    const valueChanged = !isEqual(currentValue, prevValue);\n\n    // Determine if we should update:\n    // 1. First initialization with a value\n    // 2. Value becomes empty after initialization\n    // 3. Value changes after initialization (handles discard scenario)\n    const shouldUpdate =\n      (!isInitialized && this.hasValue(currentValue)) ||\n      (isInitialized && !this.hasValue(currentValue)) ||\n      (isInitialized && valueChanged);\n\n    if (shouldUpdate) {\n      this.initialized.set(true);\n      this.previousValue.set(currentValue);\n      if (!isNil(currentValue)) {\n        this.findByValue();\n      } else {\n        this.clear();\n      }\n    }\n  });\n\n  private async findByValue() {\n    this.isLoading.set(true);\n    this.beginHydration();\n    const rawValue = this.getValue();\n    // When multiple is true, ensure we always work with arrays\n    const values = this.multiple()\n      ? castArray(this.filterMode() ? rawValue.value : rawValue)\n      : [rawValue].filter((v) => v != null);\n\n    if (!values.length) {\n      this.setItems([], false);\n\n      this.isLoading.set(false);\n      this.endHydration();\n      return;\n    }\n\n    try {\n      // Use entityService which handles entity resolution lazily and has fallback to CRUD service\n      const entityKey = this.entity();\n      const entityDataAccessor = this.entityService.withEntity(entityKey).data();\n\n      if (this.multiple()) {\n        const items = await Promise.all(\n          values\n            .map((value) => extractValue(value, this.valueField()))\n            .filter((id) => id != null)\n            .map((id) => entityDataAccessor.byKey(id)),\n        );\n        // Filter out null/undefined results\n        const validItems = items.filter((item) => item != null);\n        this.setItems(validItems, false);\n      } else {\n        const id = extractValue(this.filterMode() ? values[0].value : values[0], this.valueField());\n        if (id != null) {\n          const item = await entityDataAccessor.byKey(id);\n          this.setItems(item != null ? [item] : [], false);\n        } else {\n          this.setItems([], false);\n        }\n      }\n    } catch (error) {\n      console.error('[LookupWidget] findByValue() error:', error);\n      this.setItems([], false);\n    } finally {\n      this.isLoading.set(false);\n      this.endHydration();\n    }\n  }\n\n  //#region ----   Event Handlers from Dumb Components   ----\n\n  protected handleComponentValueChanged(items: any[] | null): void {\n    this.setItems(items ?? []);\n  }\n\n  protected async handleCreateClick(_e: AXClickEvent): Promise<void> {\n    const entity = this.entityDef();\n    if (!entity || !entity.commands?.create?.execute) return;\n\n    const { mode } = this.resolvedCreate();\n    if (mode !== 'full' && mode !== 'quick') return;\n\n    await this.executeCreate(mode);\n  }\n\n  private async executeCreate(mode: 'full' | 'quick'): Promise<void> {\n    const entity = this.entityDef();\n    if (!entity || !entity.commands?.create?.execute) return;\n\n    this.isLoading.set(true);\n    this.beginHydration();\n    try {\n      const { context } = this.resolvedCreate();\n      const createData = await this.entityDataSelectorService.resolveCreateContext(context, this.contextService);\n      const createdItem = await this.entityDataSelectorService.executeEntityCreate(entity, mode, createData);\n      if (createdItem) {\n        const currentItems = this.selectedItems();\n        const valueField = this.valueField();\n        const newId = get(createdItem, valueField);\n\n        if (this.multiple()) {\n          const exists = currentItems.some((item: any) => get(item, valueField) === newId);\n          const newItems = exists ? currentItems : [...currentItems, createdItem];\n          this.setItems(newItems);\n        } else {\n          this.setItems([createdItem]);\n        }\n      }\n    } catch (error) {\n      console.error('[LookupWidget] Create failed:', error);\n    } finally {\n      this.isLoading.set(false);\n      this.endHydration();\n    }\n  }\n\n  //#endregion\n\n  //#region ----   Business Logic Methods (Passed to Dumb Components)   ----\n\n  protected setLoading = (loading: boolean) => {\n    this.isLoading.set(loading);\n    if (loading) {\n      this.beginHydration();\n    } else {\n      this.endHydration();\n    }\n  };\n\n  /** @param syncContext When false, only updates UI (hydration/revert); skips context writes. */\n  protected setItems = (items: any[], syncContext = true) => {\n    // Ensure items is always an array\n    items = castArray(items);\n\n    // Filter out null/undefined items\n    items = items.filter((item) => item != null);\n\n    // Normalize phones/emails from repeater nested structure to { value: string }\n    items = items.map((item) => this.entityDataSelectorService.normalizeItemContactArrays(item));\n\n    /** Preserve raw entity fields (e.g. MLS maps) before display-field resolution for expose writes. */\n    const itemsForExpose = cloneDeep(items);\n\n    const displayField = this.displayField();\n    items = items.map((item) => {\n      const raw = get(item, displayField);\n      if (raw != null && typeof raw === 'object' && !Array.isArray(raw)) {\n        return { ...item, [displayField]: this.mlsResolver.resolve(raw as AXPMultiLanguageString) };\n      }\n      return item;\n    });\n\n    this.selectedItems.set(items);\n\n    if (!syncContext) {\n      return;\n    }\n\n    const keys = items.map((item) => get(item, this.valueField()));\n    const text = items.map((item) => this.mlsResolver.resolve(get(item, displayField) as AXPMultiLanguageString));\n    const newValue = this.singleOrMultiple(keys);\n\n    const widgetPath = this.fullPath();\n    const savedWidgetValue = widgetPath ? this.contextService.getSavedValue(widgetPath) : undefined;\n    const selectionMatchesSaved =\n      this.contextService.isSavedCommitted() && widgetPath != null && isSelectionValueEqual(newValue, savedWidgetValue);\n\n    if (this.expose()) {\n      AXPDebugService.instance?.trace(FORM_DIRTY_TRACE_NS, 'lookup-widget', 'setItems expose', () => ({\n        path: this.fullPath(),\n        items: items.map((item) => get(item, this.valueField())),\n        expose: this.expose(),\n        selectionMatchesSaved,\n      }));\n\n      if (selectionMatchesSaved) {\n        this.syncExposePathsToSavedBaseline();\n      } else {\n        this.expoesItems(itemsForExpose);\n      }\n    }\n\n    AXPDebugService.instance?.trace(FORM_DIRTY_TRACE_NS, 'lookup-widget', 'setItems setValue', () => ({\n      path: this.fullPath(),\n      newValue,\n      keys,\n      syncContext,\n    }));\n    if (this.filterMode()) {\n      this.setValue({\n        value: newValue,\n        displayText: text,\n        operation: {\n          type: this.multiple() ? 'in' : 'equal',\n        },\n      });\n    } else {\n      this.setValue(newValue);\n    }\n\n    if (this.expose() && selectionMatchesSaved) {\n      this.syncExposePathsToSavedBaseline();\n    }\n  };\n\n  /**\n   * Writes expose targets into context using per-path updates.\n   * Avoids `contextService.patch()` with nested objects: patch shallow-merges top-level keys only,\n   * so e.g. `{ person: { educationLevel: { id, title } } }` would replace the entire `person`\n   * object and drop sibling fields like `person.educationLevelId`, causing a value/effect loop.\n   */\n  private syncExposePathsToSavedBaseline(): void {\n    const exposeValue = castArray(this.expose());\n    const parentPaths = new Set<string>();\n\n    exposeValue.forEach((item) => {\n      const target = typeof item === 'string' ? item : item.target;\n      if (target.includes('.')) {\n        parentPaths.add(target.split('.').slice(0, -1).join('.'));\n      }\n      this.contextService.syncPathToSavedBaseline(target, { origin: 'system' });\n    });\n\n    const saved = this.contextService.saved() as Record<string, unknown>;\n    parentPaths.forEach((parentPath) => {\n      if (!has(saved, parentPath)) {\n        this.contextService.syncPathToSavedBaseline(parentPath, { origin: 'system' });\n      }\n    });\n\n    AXPDebugService.instance?.trace(FORM_DIRTY_TRACE_NS, 'lookup-widget', 'syncExposePathsToSavedBaseline', () => ({\n      path: this.fullPath(),\n      expose: this.expose(),\n      parentPaths: [...parentPaths],\n    }));\n  }\n\n  private expoesItems(sourceItems?: any[]): void {\n    const exposeValue = castArray(this.expose());\n    const items = sourceItems ?? this.selectedItems();\n    const isEmpty = !items || items.length === 0;\n\n    if (isEmpty) {\n      const parentPaths = new Set<string>();\n\n      exposeValue.forEach((i) => {\n        if (typeof i === 'string') {\n          const pathParts = i.split('.');\n          if (pathParts.length > 1) {\n            parentPaths.add(pathParts.slice(0, -1).join('.'));\n          } else {\n            this.contextService.update(i, null, { origin: 'user' });\n          }\n        } else {\n          const pathParts = i.target.split('.');\n          if (pathParts.length > 1) {\n            parentPaths.add(pathParts.slice(0, -1).join('.'));\n          } else {\n            this.contextService.update(i.target, null, { origin: 'user' });\n          }\n        }\n      });\n\n      parentPaths.forEach((parentPath) => {\n        this.contextService.update(parentPath, null, { origin: 'user' });\n      });\n      return;\n    }\n\n    exposeValue.forEach((i) => {\n      if (typeof i === 'string') {\n        const values = items.map((item) => set({}, i as string, get(item, i)));\n        this.contextService.update(i, this.singleOrMultiple(values), { origin: 'user' });\n      } else {\n        const values = this.multiple()\n          ? items.map((item) => set({}, i.source, defaultTo(get(item, i.source), null)))\n          : items.map((item) => defaultTo(get(item, i.source), null));\n        this.contextService.update(i.target, this.singleOrMultiple(values), { origin: 'user' });\n      }\n    });\n  }\n\n  public override outputs(): (string | { [name: string]: unknown })[] {\n    return [\n      {\n        name: 'selectedItems',\n        value: this.selectedItems(),\n      },\n    ];\n  }\n\n  private singleOrMultiple(values: any[]): any | any[] {\n    return this.multiple() ? values : values[0];\n  }\n\n  //#region ----   Component Methods   ----\n\n  public refresh() {\n    AXPDebugService.instance?.trace(WIDGET_CASCADE_TRACE_NS, 'lookup-widget', 'refresh()', () => ({\n      path: this.fullPath(),\n      entity: this.entity(),\n      look: this.look(),\n      customerPartyId: this.contextService.getValue('customer.partyId'),\n    }));\n    this.componentLook()?.refresh();\n  }\n\n  public clear() {\n    this.componentLook()?.clear();\n  }\n\n  public focus(): void {\n    this.componentLook()?.focus();\n  }\n\n  //#endregion\n}\n","import { AXLoadingModule } from '@acorex/components/loading';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXPColumnWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  ElementRef,\n  inject,\n  signal,\n  viewChild,\n} from '@angular/core';\nimport { castArray, get, isNil } from 'lodash-es';\nimport { AXPEntityDetailPopoverService } from '../../components';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\nimport { AXPEntityService } from '../../entity.service';\n\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\n\nimport { AXPEntity, isUnresolvedEntityDisplayTemplate } from '@acorex/platform/layout/entity-contracts';\nimport { AXPContextEvalFactory, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { AXPQueryExecutor } from '@acorex/platform/runtime';\n\nimport {\n  formatLookupItemDisplayAsync,\n  resolveLookupDisplayField,\n  resolveLookupDisplayTemplate,\n} from './lookup-display.util';\nimport type {\n  AXPLookupColumnResolveOptions,\n  AXPLookupColumnResolveStrategy,\n  AXPLookupWidgetOptions,\n} from '@acorex/platform/layout/entity-contracts';\n\n@Component({\n  templateUrl: './lookup-widget-column.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AXLoadingModule, AXPopoverModule],\n  inputs: ['rawValue', 'rowData'],\n})\nexport class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent<any> {\n  //#region ---- Dependencies ----\n\n  private readonly entityDetailPopoverService = inject(AXPEntityDetailPopoverService);\n  private readonly translation = inject(AXTranslationService);\n  private readonly formatService = inject(AXFormatService);\n  private readonly entityService = inject(AXPEntityService);\n  private readonly entityResolver = inject(AXPEntityDefinitionRegistryService);\n  private readonly queryExecutor = inject(AXPQueryExecutor);\n  private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n  private readonly contextEvalFactory = inject(AXPContextEvalFactory);\n\n  //#endregion\n\n  //#region ---- View Children ----\n\n  protected moreButton = viewChild<ElementRef>('moreButton');\n  protected lazyTrigger = viewChild<ElementRef>('lazyTrigger');\n  protected morePopover = viewChild<AXPopoverComponent>('morePopover');\n\n  //#endregion\n\n  //#region ---- Properties ----\n\n  protected host = inject(ElementRef);\n  protected valueField: string = this.options['valueField'] ?? 'id';\n  protected entity: string = this.options['entity'] ?? '';\n  protected columnName: string = this.options['columnName'] ?? 'title';\n  protected maxVisible: number = this.options['maxVisible'] ?? 2;\n\n  protected lookupDisplayOptions = computed(() => ({\n    displayFormat: this.options['displayFormat'] as string | undefined,\n    textField: this.options['textField'] as string | undefined,\n    isMultiLanguage: (value: unknown) => this.translation.isValidMultiLanguageObject(value),\n  }));\n\n  protected displayFormat = computed<string | undefined>(() =>\n    resolveLookupDisplayTemplate(this.entityDef(), this.lookupDisplayOptions()),\n  );\n\n  protected displayField = computed<string>(() =>\n    resolveLookupDisplayField(this.entityDef(), this.lookupDisplayOptions()),\n  );\n\n  protected columnResolve = computed(() => this.options['columnResolve'] as AXPLookupColumnResolveOptions | undefined);\n\n  protected resolveStrategy = computed((): AXPLookupColumnResolveStrategy => {\n    return this.columnResolve()?.strategy ?? 'hydrated';\n  });\n\n  protected isHydratedStrategy = computed(() => this.resolveStrategy() === 'hydrated');\n\n  protected detailPopoverEnabled = computed(() => {\n    const popover = (this.options as AXPLookupWidgetOptions).popover;\n    return popover?.enabled !== false;\n  });\n\n  //#endregion\n\n  //#region ---- Signals ----\n\n  protected isMorePopoverOpen = signal(false);\n  protected selectedItemIndex = signal<number>(-1);\n  protected resolvedPopoverItems = signal<any[]>([]);\n  protected resolveStatus = signal<'idle' | 'loading' | 'ready' | 'error'>('idle');\n  protected resolveError = signal<string | null>(null);\n  protected summaryLabel = signal<string>('');\n  protected popoverHeader = signal<string>('');\n  protected mainItemLabels = signal<string[]>([]);\n  protected lazyPopoverItemLabels = signal<string[]>([]);\n\n  private entityDef = signal<AXPEntity | null>(null);\n  private hydratedDisplayItems = signal<any[] | null>(null);\n  private hydrateRequestId = 0;\n  private mainLabelsVersion = 0;\n  private lazyPopoverLabelsVersion = 0;\n\n  //#endregion\n\n  //#region ---- Computed ----\n\n  protected popoverItemLabels = computed(() =>\n    this.isHydratedStrategy() ? this.mainItemLabels() : this.lazyPopoverItemLabels(),\n  );\n\n  protected displayItems = computed(() =>\n    isNil(this.rawValue)\n      ? []\n      : castArray(this.rawValue)\n          .map((item: any) => this.extractItem(item))\n          .filter((c) => c != null),\n  );\n\n  protected allItems = computed(() => {\n    const hydrated = this.hydratedDisplayItems();\n    if (hydrated != null && hydrated.length > 0) {\n      return hydrated;\n    }\n    return this.displayItems();\n  });\n\n  protected visibleItems = computed(() => {\n    const items = this.allItems();\n    return items.slice(0, this.maxVisible);\n  });\n\n  protected hasMoreItems = computed(() => this.allItems().length > this.maxVisible);\n\n  protected idsFromRow = computed(() => {\n    const cr = this.columnResolve();\n    const path = cr?.idsPath;\n    const source = path ? get(this.rowData, path) : this.rawValue;\n    if (isNil(source)) {\n      return [];\n    }\n    return castArray(source)\n      .map((x) => (typeof x === 'object' && x != null ? get(x, this.valueField) : x))\n      .filter((id) => id != null && id !== '');\n  });\n\n  protected displayCount = computed(() => {\n    const cr = this.columnResolve();\n    const countPath = cr?.countFieldPath;\n    if (countPath) {\n      const v = get(this.rowData, countPath);\n      if (typeof v === 'number' && !Number.isNaN(v)) {\n        return v;\n      }\n      if (typeof v === 'string' && v !== '') {\n        const n = Number(v);\n        return Number.isNaN(n) ? 0 : n;\n      }\n      return 0;\n    }\n    if (this.resolveStrategy() === 'idsWithCount') {\n      return this.idsFromRow().length;\n    }\n    if (this.resolveStrategy() === 'countOnly') {\n      return 0;\n    }\n    return 0;\n  });\n\n  protected popoverListItems = computed(() => {\n    if (this.isHydratedStrategy()) {\n      return this.allItems();\n    }\n    return this.resolvedPopoverItems();\n  });\n\n  //#endregion\n\n  //#region ---- Constructor effects ----\n\n  /** Avoid resetting lazy cache on every CD when `rowData` is a new object reference for the same row. */\n  private previousLazyRowId: string | undefined = undefined;\n\n  constructor() {\n    super();\n\n    effect(() => {\n      const id = this.rowData?.['id'];\n      const key = id != null && id !== '' ? String(id) : undefined;\n      if (key === this.previousLazyRowId) {\n        return;\n      }\n      this.previousLazyRowId = key;\n      this.resetLazyState();\n      this.hydratedDisplayItems.set(null);\n      this.hydrateRequestId++;\n    });\n\n    effect(() => {\n      if (!this.isHydratedStrategy()) {\n        const count = this.displayCount();\n        void this.refreshSummaryLabel(count);\n      }\n    });\n\n    effect(() => {\n      const hydrated = this.isHydratedStrategy();\n      const count = hydrated\n        ? this.allItems().length\n        : this.resolveStatus() === 'ready'\n          ? this.resolvedPopoverItems().length\n          : this.displayCount();\n      void this.refreshPopoverHeader(count);\n    });\n\n    effect(() => {\n      const key = this.entity;\n      if (!key?.includes('.')) {\n        this.entityDef.set(null);\n        return;\n      }\n      const [module, name] = key.split('.');\n      void this.entityResolver.resolve(module, name).then((def) => this.entityDef.set(def));\n    });\n\n    effect(() => {\n      if (!this.isHydratedStrategy()) {\n        this.hydratedDisplayItems.set(null);\n        return;\n      }\n\n      const entityKey = this.entity;\n      const raw = this.rawValue;\n      if (!entityKey?.includes('.') || isNil(raw)) {\n        this.hydratedDisplayItems.set(null);\n        return;\n      }\n\n      // Display text is already on the row (dataPath, denormalized title, nested object, etc.) — no byKey fetch.\n      if (this.hasPreresolvedDisplay()) {\n        this.hydratedDisplayItems.set(null);\n        return;\n      }\n\n      const values = castArray(raw).filter((value) => value != null && value !== '');\n      const needsHydrate =\n        values.length > 0 && values.every((value) => typeof value !== 'object' && this.isLikelyEntityId(value));\n      if (!needsHydrate) {\n        this.hydratedDisplayItems.set(null);\n        return;\n      }\n\n      void this.hydrateScalarIds(entityKey, values);\n    });\n\n    effect(() => {\n      void this.translation.getActiveLang();\n      this.entityDef();\n      const items = this.allItems();\n      const version = ++this.mainLabelsVersion;\n      void this.resolveLabelsForItems(items).then((labels) => {\n        if (version === this.mainLabelsVersion) {\n          this.mainItemLabels.set(labels);\n        }\n      });\n    });\n\n    effect(() => {\n      if (this.isHydratedStrategy()) {\n        return;\n      }\n      void this.translation.getActiveLang();\n      this.entityDef();\n      const status = this.resolveStatus();\n      const items = this.resolvedPopoverItems();\n      if (status !== 'ready') {\n        this.lazyPopoverItemLabels.set([]);\n        return;\n      }\n      const version = ++this.lazyPopoverLabelsVersion;\n      void this.resolveLabelsForItems(items).then((labels) => {\n        if (version === this.lazyPopoverLabelsVersion) {\n          this.lazyPopoverItemLabels.set(labels);\n        }\n      });\n    });\n  }\n\n  //#endregion\n\n  //#region ---- Public methods ----\n\n  protected showMoreItems(): void {\n    this.entityDetailPopoverService.hide();\n    this.openPopoverFromRef(this.moreButton());\n  }\n\n  protected openLazyPopover(): void {\n    this.entityDetailPopoverService.hide();\n    this.openPopoverFromRef(this.lazyTrigger());\n    if (!this.isHydratedStrategy()) {\n      void this.ensureLazyItemsLoaded();\n    }\n  }\n\n  protected onPopoverOpenChange(event: unknown): void {\n    const open = this.coercePopoverOpenEvent(event);\n    this.isMorePopoverOpen.set(open);\n    if (open && !this.isHydratedStrategy()) {\n      void this.ensureLazyItemsLoaded();\n    }\n  }\n\n  protected async showItemDetail(item: any, index: number, anchor?: HTMLElement): Promise<void> {\n    if (!this.detailPopoverEnabled()) {\n      return;\n    }\n\n    const detailAnchor = this.resolveStableDetailAnchor(anchor);\n\n    this.selectedItemIndex.set(index);\n    this.closeMorePopover();\n\n    // Prefer the row's FK / stored value (columnName) first. List columns often use options.dataPath so\n    // rawValue (and thus `item`) is only display text (e.g. manager.person.fullName) while managerId holds the real id.\n    const columnData = get(this.rowData, this.columnName);\n    let id: string | number | undefined;\n\n    if (Array.isArray(columnData)) {\n      const cell = columnData[index];\n      id =\n        typeof cell === 'object' && cell != null\n          ? (get(cell, this.valueField) as string | number | undefined)\n          : (cell as string | number | undefined);\n    } else if (!isNil(columnData) && columnData !== '') {\n      id =\n        typeof columnData === 'object' && columnData != null\n          ? (get(columnData, this.valueField) as string | number | undefined)\n          : (columnData as string | number | undefined);\n    }\n\n    if (isNil(id) || id === '') {\n      id = get(item, this.valueField) as string | number | undefined;\n    }\n\n    if (isNil(id) || id === '') {\n      return;\n    }\n\n    const headerItem = this.allItems()[index] ?? item;\n    let resolvedTitle = '';\n\n    if (headerItem != null && this.hasDisplayTextOnLookupValue(headerItem)) {\n      resolvedTitle =\n        typeof headerItem === 'object'\n          ? await this.resolveItemLabel(headerItem)\n          : this.formatDisplayValue(headerItem);\n    } else if (!this.isMultiValueLookup()) {\n      const rowText = this.getRowDisplayTextFromTextField();\n      if (!isNil(rowText) && rowText !== '') {\n        resolvedTitle = this.formatDisplayValue(rowText);\n      }\n    }\n\n    if (!resolvedTitle) {\n      resolvedTitle = await this.resolveItemLabel(headerItem);\n      if (isUnresolvedEntityDisplayTemplate(resolvedTitle)) {\n        resolvedTitle = '';\n      }\n    }\n\n    await this.entityDetailPopoverService.show(detailAnchor, {\n      entity: this.entity,\n      id,\n      textField: (this.options['textField'] as string | undefined) ?? this.displayField(),\n      valueField: this.valueField,\n      displayTitle: resolvedTitle,\n      item,\n    });\n  }\n\n  protected handleItemClick(index: number, event: Event): void {\n    if (!this.detailPopoverEnabled()) {\n      return;\n    }\n    const items = this.allItems();\n    if (index < items.length) {\n      void this.showItemDetail(items[index], index, this.resolvePopoverAnchor(event));\n    }\n  }\n\n  protected handleResolvedItemClick(index: number, event: Event): void {\n    if (!this.detailPopoverEnabled()) {\n      return;\n    }\n    const items = this.resolvedPopoverItems();\n    if (index < items.length) {\n      void this.showItemDetail(items[index], index, this.resolvePopoverAnchor(event));\n    }\n  }\n\n  protected handlePopoverItemClick(index: number, _event: Event): void {\n    const anchor = this.resolveMorePopoverDetailAnchor();\n\n    if (this.isHydratedStrategy()) {\n      const items = this.allItems();\n      if (index < items.length) {\n        void this.showItemDetail(items[index], index, anchor);\n      }\n      return;\n    }\n\n    const items = this.resolvedPopoverItems();\n    if (index < items.length) {\n      void this.showItemDetail(items[index], index, anchor);\n    }\n  }\n\n  /**\n   * True when the cell can render without fetching row data via byKey.\n   * Uses textField / expose targets on the row — not merely whether column dataPath differs from columnName.\n   */\n  protected hasPreresolvedDisplay(): boolean {\n    if (this.isMultiValueLookup()) {\n      const values = castArray(this.rawValue).filter((value) => value != null && value !== '');\n      return values.length > 0 && values.every((value) => this.hasDisplayTextOnLookupValue(value));\n    }\n\n    const rowText = this.getRowDisplayTextFromTextField();\n    if (!isNil(rowText) && rowText !== '' && (typeof rowText !== 'string' || !this.isLikelyEntityId(rowText))) {\n      return true;\n    }\n\n    const raw = this.rawValue;\n    if (isNil(raw)) {\n      return false;\n    }\n\n    const values = castArray(raw).filter((value) => value != null && value !== '');\n    return values.length > 0 && values.every((value) => this.hasDisplayTextOnLookupValue(value));\n  }\n\n  protected getItemLabel(index: number): string {\n    return this.mainItemLabels()[index] ?? '';\n  }\n\n  protected getPopoverItemLabel(index: number): string {\n    return this.popoverItemLabels()[index] ?? '';\n  }\n\n  //#endregion\n\n  //#region ---- Private methods ----\n\n  private async resolveLabelsForItems(items: unknown[]): Promise<string[]> {\n    return Promise.all(items.map((item) => this.resolveItemLabel(item)));\n  }\n\n  private async resolveItemLabel(item: unknown): Promise<string> {\n    if (item == null) {\n      return '';\n    }\n\n    if (typeof item === 'object' && this.translation.isValidMultiLanguageObject(item)) {\n      return this.translation.resolve(item);\n    }\n\n    if (!this.isMultiValueLookup()) {\n      const rowText = this.getRowDisplayTextFromTextField();\n      if (!isNil(rowText) && rowText !== '') {\n        return this.formatDisplayValue(rowText);\n      }\n    }\n\n    if (this.hasDisplayTextOnLookupValue(item)) {\n      if (typeof item !== 'object') {\n        return this.formatDisplayValue(item);\n      }\n    }\n\n    const locale = this.translation.getActiveLang() ?? 'en-US';\n    return formatLookupItemDisplayAsync(\n      item,\n      this.entityDef(),\n      this.lookupDisplayOptions(),\n      this.formatService,\n      {\n        expressionEvaluator: this.expressionEvaluator,\n        contextEvalFactory: this.contextEvalFactory,\n        translationService: this.translation,\n        locale,\n      },\n      (value) => this.translation.resolve(value),\n    );\n  }\n\n  private async refreshSummaryLabel(count: number): Promise<void> {\n    const text = await this.translation.translateAsync('@general:widgets.lookup.column.items-count', {\n      params: { count: String(count) },\n    });\n    this.summaryLabel.set(text);\n  }\n\n  private async refreshPopoverHeader(count: number): Promise<void> {\n    const text = await this.translation.translateAsync('@general:widgets.lookup.column.popover-title', {\n      params: { count: String(count) },\n    });\n    this.popoverHeader.set(text);\n  }\n\n  private resetLazyState(): void {\n    this.resolvedPopoverItems.set([]);\n    this.resolveStatus.set('idle');\n    this.resolveError.set(null);\n  }\n\n  private openPopoverFromRef(ref: ElementRef | undefined): void {\n    const popover = this.morePopover();\n    if (popover && ref) {\n      popover.target = ref.nativeElement;\n      popover.open();\n      this.isMorePopoverOpen.set(true);\n    }\n  }\n\n  private closeMorePopover(): void {\n    const popover = this.morePopover();\n    if (popover) {\n      popover.close();\n      this.isMorePopoverOpen.set(false);\n    }\n  }\n\n  /** Prefer the clicked inline item as anchor; fall back to the column host. */\n  private resolvePopoverAnchor(event: Event): HTMLElement {\n    const target = event.currentTarget;\n    return target instanceof HTMLElement ? target : this.host.nativeElement;\n  }\n\n  /**\n   * Stable anchor for entity detail when opened from the more-items list.\n   * Clicks inside ax-popover overlay use elements that are removed/hidden on close.\n   */\n  private resolveMorePopoverDetailAnchor(): HTMLElement {\n    return (\n      this.moreButton()?.nativeElement ??\n      this.lazyTrigger()?.nativeElement ??\n      this.host.nativeElement\n    );\n  }\n\n  /** Ensures the detail popover anchor stays in the layout after the more popover closes. */\n  private resolveStableDetailAnchor(anchor?: HTMLElement): HTMLElement {\n    const fallback = this.resolveMorePopoverDetailAnchor();\n\n    if (!anchor?.isConnected || this.isInsideMorePopover(anchor)) {\n      return fallback;\n    }\n\n    const rect = anchor.getBoundingClientRect();\n    if (rect.width <= 0 && rect.height <= 0) {\n      return fallback;\n    }\n\n    return anchor;\n  }\n\n  private isInsideMorePopover(element: HTMLElement): boolean {\n    const popover = this.morePopover();\n    const popoverHost = popover?.getHostElement?.();\n    return popoverHost instanceof HTMLElement && popoverHost.contains(element);\n  }\n\n  private async ensureLazyItemsLoaded(): Promise<void> {\n    if (this.resolveStatus() === 'loading') {\n      return;\n    }\n    const strategy = this.resolveStrategy();\n    if (strategy === 'idsWithCount') {\n      await this.loadByIds();\n      return;\n    }\n    if (strategy === 'countOnly') {\n      await this.loadByNamedQuery();\n    }\n  }\n\n  /**\n   * ax-popover may emit a boolean, CustomEvent with detail, or a DOM Event depending on version.\n   */\n  private coercePopoverOpenEvent(event: unknown): boolean {\n    if (typeof event === 'boolean') {\n      return event;\n    }\n    if (event && typeof event === 'object') {\n      const o = event as Record<string, unknown>;\n      if ('detail' in o) {\n        return Boolean(o['detail']);\n      }\n      if ('open' in o) {\n        return Boolean(o['open']);\n      }\n    }\n    return false;\n  }\n\n  private async loadByIds(): Promise<void> {\n    const ids = this.idsFromRow();\n    if (!ids.length) {\n      this.resolvedPopoverItems.set([]);\n      this.resolveStatus.set('ready');\n      return;\n    }\n\n    if (!this.entity?.includes('.')) {\n      const msg = await this.translation.translateAsync('@general:widgets.lookup.column.load-failed');\n      this.resolveError.set(msg);\n      this.resolveStatus.set('error');\n      return;\n    }\n\n    this.resolveStatus.set('loading');\n    this.resolveError.set(null);\n\n    try {\n      const accessor = this.entityService.withEntity(this.entity).data();\n      const results = await Promise.all(ids.map((id) => accessor.byKey(id as never)));\n      this.resolvedPopoverItems.set(results.filter((item): item is NonNullable<typeof item> => item != null));\n      this.resolveStatus.set('ready');\n    } catch {\n      const msg = await this.translation.translateAsync('@general:widgets.lookup.column.load-failed');\n      this.resolveError.set(msg);\n      this.resolveStatus.set('error');\n      this.resolvedPopoverItems.set([]);\n    }\n  }\n\n  private async loadByNamedQuery(): Promise<void> {\n    const cr = this.columnResolve();\n    const key = cr?.queryKey;\n    if (!key?.trim()) {\n      const msg = await this.translation.translateAsync('@general:widgets.lookup.column.load-failed');\n      this.resolveError.set(msg);\n      this.resolveStatus.set('error');\n      return;\n    }\n\n    this.resolveStatus.set('loading');\n    this.resolveError.set(null);\n\n    try {\n      const input = this.buildNamedQueryInput();\n      const result = await this.queryExecutor.fetch<Record<string, unknown>, unknown>(key, input);\n      const items = this.extractItemsFromQueryResult(result);\n      this.resolvedPopoverItems.set(items);\n      this.resolveStatus.set('ready');\n    } catch {\n      const msg = await this.translation.translateAsync('@general:widgets.lookup.column.load-failed');\n      this.resolveError.set(msg);\n      this.resolveStatus.set('error');\n      this.resolvedPopoverItems.set([]);\n    }\n  }\n\n  private buildNamedQueryInput(): Record<string, unknown> {\n    const map = this.parseQueryParamsMap();\n    const row = this.rowData ?? {};\n    if (!map) {\n      return {};\n    }\n    const out: Record<string, unknown> = {};\n    for (const [param, path] of Object.entries(map)) {\n      out[param] = get(row, path);\n    }\n    return out;\n  }\n\n  private parseQueryParamsMap(): Record<string, string> | null {\n    const raw = this.columnResolve()?.queryParams;\n    if (raw == null) {\n      return null;\n    }\n    if (typeof raw === 'string') {\n      try {\n        const parsed = JSON.parse(raw) as unknown;\n        return parsed && typeof parsed === 'object' && !Array.isArray(parsed)\n          ? (parsed as Record<string, string>)\n          : null;\n      } catch {\n        return null;\n      }\n    }\n    return raw;\n  }\n\n  private extractItemsFromQueryResult(result: unknown): any[] {\n    if (result == null) {\n      return [];\n    }\n    if (Array.isArray(result)) {\n      return result;\n    }\n    const cr = this.columnResolve();\n    const path = cr?.queryResultItemsPath ?? 'items';\n    const nested = get(result as object, path);\n    return Array.isArray(nested) ? nested : [];\n  }\n\n  private extractItem(item: any): any {\n    if (isNil(item)) {\n      return null;\n    }\n    if (typeof item === 'object') {\n      return item;\n    }\n    return {\n      [this.valueField]: item,\n      [this.displayField()]: item,\n    };\n  }\n\n  private async hydrateScalarIds(entityKey: string, ids: unknown[]): Promise<void> {\n    const requestId = ++this.hydrateRequestId;\n\n    try {\n      const accessor = this.entityService.withEntity(entityKey).data();\n      const items = await Promise.all(ids.map((id) => accessor.byKey(id as never)));\n      if (requestId !== this.hydrateRequestId) {\n        return;\n      }\n      const resolved = items.filter((item): item is NonNullable<typeof item> => item != null);\n      this.hydratedDisplayItems.set(resolved.length > 0 ? resolved : null);\n    } catch {\n      if (requestId === this.hydrateRequestId) {\n        this.hydratedDisplayItems.set(null);\n      }\n    }\n  }\n\n  private isMultiValueLookup(): boolean {\n    return Array.isArray(this.rawValue) && this.rawValue.length > 0;\n  }\n\n  /** Row display text resolved via widget textField and expose targets (not column dataPath alone). */\n  private getRowDisplayTextFromTextField(): unknown {\n    const textField = resolveLookupDisplayField(this.entityDef(), this.lookupDisplayOptions());\n    const exposeTargets = this.getExposeTargets();\n\n    for (const entry of exposeTargets) {\n      if (entry.source === this.valueField || entry.source === 'id') {\n        continue;\n      }\n      if (entry.source === textField || entry.target.endsWith(`.${textField}`)) {\n        const value = get(this.rowData, entry.target);\n        if (!isNil(value) && value !== '') {\n          return value;\n        }\n      }\n    }\n\n    for (const entry of exposeTargets) {\n      if (entry.source === 'title') {\n        const value = get(this.rowData, entry.target);\n        if (!isNil(value) && value !== '') {\n          return value;\n        }\n      }\n    }\n\n    if (this.path && this.path !== this.columnName) {\n      const atPath = get(this.rowData, this.path);\n      if (typeof atPath === 'string' && atPath !== '' && !this.isLikelyEntityId(atPath)) {\n        return atPath;\n      }\n      if (atPath != null && typeof atPath === 'object') {\n        const nested = get(atPath, textField);\n        if (!isNil(nested) && nested !== '') {\n          return nested;\n        }\n      }\n      const combined = get(this.rowData, `${this.path}.${textField}`);\n      if (!isNil(combined) && combined !== '') {\n        return combined;\n      }\n    }\n\n    if (this.columnName.endsWith('Id')) {\n      const parentKey = this.columnName.slice(0, -2);\n      const nestedObject = get(this.rowData, parentKey);\n      if (nestedObject != null && typeof nestedObject === 'object') {\n        const nested = get(nestedObject, textField);\n        if (!isNil(nested) && nested !== '') {\n          return nested;\n        }\n      }\n      const direct = get(this.rowData, `${parentKey}.${textField}`);\n      if (!isNil(direct) && direct !== '') {\n        return direct;\n      }\n    }\n\n    if (this.columnName.includes('.')) {\n      const parts = this.columnName.split('.');\n      const leaf = parts[parts.length - 1];\n      if (leaf === 'id' || leaf.endsWith('Id')) {\n        const parent = parts.slice(0, -1).join('.');\n        const direct = get(this.rowData, `${parent}.${textField}`);\n        if (!isNil(direct) && direct !== '') {\n          return direct;\n        }\n      }\n    }\n\n    return undefined;\n  }\n\n  private getExposeTargets(): Array<{ source: string; target: string }> {\n    const expose = this.options['expose'];\n    if (!Array.isArray(expose)) {\n      return [];\n    }\n\n    return expose.filter(\n      (entry): entry is { source: string; target: string } =>\n        entry != null &&\n        typeof entry === 'object' &&\n        typeof (entry as { source?: unknown }).source === 'string' &&\n        typeof (entry as { target?: unknown }).target === 'string',\n    );\n  }\n\n  private hasDisplayTextOnLookupValue(value: unknown): boolean {\n    if (isNil(value) || value === '') {\n      return false;\n    }\n    if (typeof value === 'string') {\n      return !this.isLikelyEntityId(value);\n    }\n    if (typeof value === 'number' || typeof value === 'boolean') {\n      return true;\n    }\n    if (typeof value !== 'object') {\n      return false;\n    }\n    if (this.translation.isValidMultiLanguageObject(value)) {\n      return true;\n    }\n\n    const textField = resolveLookupDisplayField(this.entityDef(), this.lookupDisplayOptions());\n    const text = get(value, textField);\n    if (!isNil(text) && text !== '' && !this.isLikelyEntityId(text)) {\n      return true;\n    }\n\n    return ['title', 'name', 'code', 'description'].some((field) => {\n      const candidate = get(value, field);\n      return !isNil(candidate) && candidate !== '' && !this.isLikelyEntityId(candidate);\n    });\n  }\n\n  private formatDisplayValue(value: unknown): string {\n    if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n      return String(value);\n    }\n    if (value != null && typeof value === 'object' && this.translation.isValidMultiLanguageObject(value)) {\n      return this.translation.resolve(value);\n    }\n    return '';\n  }\n\n  /** True when a scalar cell value is a stored entity key (uuid/numeric), not pre-resolved display text. */\n  private isLikelyEntityId(value: unknown): boolean {\n    if (typeof value === 'number') {\n      return true;\n    }\n    if (typeof value !== 'string') {\n      return false;\n    }\n    return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(value) || /^\\d+$/.test(value);\n  }\n\n  //#endregion\n}\n","@if (isHydratedStrategy()) {\n  <div class=\"ax-relative ax-flex ax-min-w-0 ax-items-center ax-gap-1\">\n    @for (item of visibleItems(); track $index) {\n      <span\n        [class.ax-cursor-pointer]=\"detailPopoverEnabled()\"\n        [class.hover:ax-text-primary]=\"detailPopoverEnabled()\"\n        [class.hover:ax-underline]=\"detailPopoverEnabled()\"\n        (click)=\"handleItemClick($index, $event)\"\n      >\n        {{ getItemLabel($index) }}\n      </span>\n      @if ($index < visibleItems().length - 1) {\n        <span class=\"ax-text-muted\">•</span>\n      }\n    } @empty {\n      <span class=\"ax-text-muted\">---</span>\n    }\n    @if (hasMoreItems()) {\n      <span\n        class=\"ax-absolute ax-end-0 ax-flex ax-h-full ax-cursor-pointer ax-items-center ax-px-1 hover:ax-primary-lighter\"\n        (click)=\"showMoreItems(); $event.stopPropagation()\"\n        #moreButton\n      >\n        <i class=\"fa-light fa-ellipsis-vertical\"></i>\n      </span>\n    }\n  </div>\n} @else {\n  <div class=\"ax-flex ax-min-w-0 ax-items-center ax-gap-1\">\n    @if (displayCount() > 0) {\n      <span\n        class=\"ax-cursor-pointer ax-text-primary hover:ax-underline\"\n        (click)=\"openLazyPopover(); $event.stopPropagation()\"\n        #lazyTrigger\n      >\n        {{ summaryLabel() }}\n      </span>\n    } @else {\n      <span class=\"ax-text-muted\">---</span>\n    }\n  </div>\n}\n\n<ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onPopoverOpenChange($event)\">\n  <div class=\"ax-lightest-surface dark:ax-dark-surface ax-min-w-[280px] ax-rounded-lg ax-p-4 ax-shadow-lg\">\n    <div class=\"ax-mb-4 ax-border-b ax-pb-2\">\n      <h3 class=\"ax-text-base ax-font-semibold\">{{ popoverHeader() }}</h3>\n    </div>\n\n    @if (!isHydratedStrategy() && resolveStatus() === 'loading') {\n      <div class=\"ax-flex ax-min-h-[120px] ax-items-center ax-justify-center\">\n        <ax-loading></ax-loading>\n      </div>\n    } @else if (!isHydratedStrategy() && resolveStatus() === 'error') {\n      <div class=\"ax-text-danger ax-text-sm\">{{ resolveError() }}</div>\n    } @else {\n      <div class=\"ax-flex ax-max-h-64 ax-flex-col ax-gap-3\">\n        @for (item of popoverListItems(); track $index) {\n          <span\n            [class.ax-cursor-pointer]=\"detailPopoverEnabled()\"\n            [class.hover:ax-text-primary]=\"detailPopoverEnabled()\"\n            [class.hover:ax-underline]=\"detailPopoverEnabled()\"\n            (click)=\"handlePopoverItemClick($index, $event)\"\n          >\n            {{ getPopoverItemLabel($index) }}\n          </span>\n        } @empty {\n          <span class=\"ax-text-muted\">---</span>\n        }\n      </div>\n    }\n  </div>\n</ax-popover>\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, createBooleanProperty } from '@acorex/platform/layout/widget-core-contracts';\nimport { objectKeyValueTransforms } from '@acorex/platform/core';\nimport { AXPWidgetsCatalog } from '@acorex/platform/contracts';\n\nimport {\n  AXP_ALLOW_CLEAR_PROPERTY,\n  AXP_ALLOW_MULTIPLE_PROPERTY,\n  AXP_BEHAVIOR_PROPERTY_GROUP,\n  AXP_DATA_PATH_PROPERTY,\n  AXP_DATA_PROPERTY_GROUP,\n  AXP_DISABLED_PROPERTY,\n} from '@acorex/platform/layout/widgets';\n\nexport const AXPLookupWidget: AXPWidgetConfig = {\n  name: 'lookup-editor',\n  title: 'Lookup',\n  categories: [],\n  groups: [AXPWidgetGroupEnum.EntityWidget, AXPWidgetGroupEnum.FormElement],\n  defaultFilterWidgetName: 'lookup-filter',\n  type: 'editor',\n  icon: 'fa-light fa-list-radio',\n  properties: [\n    AXP_DISABLED_PROPERTY,\n    AXP_ALLOW_CLEAR_PROPERTY,\n    AXP_DATA_PATH_PROPERTY,\n    {\n      name: 'expose',\n      title: 'Expose',\n      group: AXP_DATA_PROPERTY_GROUP,\n      schema: {\n        dataType: 'string',\n        interface: {\n          name: 'expose',\n          path: 'options.expose',\n          type: AXPWidgetsCatalog.select,\n        },\n      },\n      visible: true,\n    },\n    {\n      name: 'entity',\n      title: 'Entity',\n      group: AXP_DATA_PROPERTY_GROUP,\n      schema: {\n        dataType: 'string',\n        interface: {\n          name: 'entity',\n          path: 'options.entity',\n          type: AXPWidgetsCatalog.entityDefinitionProvider,\n          options: {\n            hasClearButton: true,\n            allowSearch: true,\n          },\n        },\n      },\n      visible: true,\n    },\n    {\n      name: 'filter',\n      title: 'Filters',\n      group: AXP_DATA_PROPERTY_GROUP,\n      schema: {\n        dataType: 'object',\n        interface: {\n          name: 'filter',\n          path: 'options.filter',\n          type: 'lookup-filter-options',\n        },\n      },\n      visible: true,\n    },\n    AXP_ALLOW_MULTIPLE_PROPERTY,\n    createBooleanProperty({\n      name: 'popoverEnabled',\n      title: 'Entity Detail Popover',\n      path: 'options.popover.enabled',\n      group: AXP_BEHAVIOR_PROPERTY_GROUP,\n      defaultValue: true,\n    }),\n    {\n      name: 'displayFormat',\n      title: 'Display Format',\n      group: AXP_DATA_PROPERTY_GROUP,\n      schema: {\n        dataType: 'string',\n        interface: {\n          name: 'displayFormat',\n          path: 'options.displayFormat',\n          type: AXPWidgetsCatalog.template,\n        },\n      },\n      visible: true,\n    },\n    {\n      name: 'columnResolveStrategy',\n      title: 'Column resolve strategy',\n      group: AXP_DATA_PROPERTY_GROUP,\n      schema: {\n        dataType: 'string',\n        defaultValue: 'hydrated',\n        interface: {\n          name: 'columnResolveStrategy',\n          path: 'options.columnResolve.strategy',\n          type: AXPWidgetsCatalog.select,\n          valueTransforms: objectKeyValueTransforms('id'),\n          options: {\n            dataSource: [\n              { id: 'hydrated', title: 'Hydrated (titles on row)' },\n              { id: 'idsWithCount', title: 'Ids + count on row (load titles on open)' },\n              { id: 'countOnly', title: 'Count on row (named query on open)' },\n            ],\n          },\n        },\n      },\n      visible: true,\n    },\n    {\n      name: 'columnResolveCountFieldPath',\n      title: 'Column resolve — count field path',\n      group: AXP_DATA_PROPERTY_GROUP,\n      schema: {\n        dataType: 'string',\n        interface: {\n          name: 'columnResolveCountFieldPath',\n          path: 'options.columnResolve.countFieldPath',\n          type: AXPWidgetsCatalog.text,\n        },\n      },\n      visible: true,\n    },\n    {\n      name: 'columnResolveIdsPath',\n      title: 'Column resolve — ids path',\n      group: AXP_DATA_PROPERTY_GROUP,\n      schema: {\n        dataType: 'string',\n        interface: {\n          name: 'columnResolveIdsPath',\n          path: 'options.columnResolve.idsPath',\n          type: AXPWidgetsCatalog.text,\n        },\n      },\n      visible: true,\n    },\n    {\n      name: 'columnResolveQueryKey',\n      title: 'Column resolve — query key (countOnly)',\n      group: AXP_DATA_PROPERTY_GROUP,\n      schema: {\n        dataType: 'string',\n        interface: {\n          name: 'columnResolveQueryKey',\n          path: 'options.columnResolve.queryKey',\n          type: AXPWidgetsCatalog.text,\n        },\n      },\n      visible: true,\n    },\n    {\n      name: 'columnResolveQueryParams',\n      title: 'Column resolve — query params (JSON: param → row path)',\n      group: AXP_DATA_PROPERTY_GROUP,\n      schema: {\n        dataType: 'string',\n        interface: {\n          name: 'columnResolveQueryParams',\n          path: 'options.columnResolve.queryParams',\n          type: AXPWidgetsCatalog.text,\n        },\n      },\n      visible: true,\n    },\n    {\n      name: 'columnResolveQueryResultItemsPath',\n      title: 'Column resolve — query result items path',\n      group: AXP_DATA_PROPERTY_GROUP,\n      schema: {\n        dataType: 'string',\n        defaultValue: 'items',\n        interface: {\n          name: 'columnResolveQueryResultItemsPath',\n          path: 'options.columnResolve.queryResultItemsPath',\n          type: AXPWidgetsCatalog.text,\n        },\n      },\n      visible: true,\n    },\n  ],\n  components: {\n    view: {\n      component: () => import('./lookup-widget-view.component').then((c) => c.AXPLookupWidgetViewComponent),\n    },\n    edit: {\n      component: () => import('./lookup-widget-edit.component').then((c) => c.AXPLookupWidgetEditComponent),\n    },\n    column: {\n      component: () => import('./lookup-widget-column.component').then((c) => c.AXPLookupWidgetColumnComponent),\n    },\n    designer: {\n      component: () => import('./lookup-widget-edit.component').then((c) => c.AXPLookupWidgetEditComponent),\n    },\n  },\n};\n","//#region ----   Imports   ----\n\nimport { AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core-contracts';\nimport { AXP_WIDGETS_EDITOR_CATEGORY } from '@acorex/platform/layout/widget-core';\nimport { AXP_DATA_PATH_PROPERTY, AXP_NAME_PROPERTY } from '@acorex/platform/layout/widgets';\n\n//#endregion\n\n//#region ----   Widget Config   ----\n\nexport const AXPLookupFilterOptionsWidget: AXPWidgetConfig = {\n  name: 'lookup-filter-options',\n  title: 'Lookup Filter Options',\n  description: 'Configure lookup entity filter conditions',\n  icon: 'fa-light fa-filter',\n  categories: AXP_WIDGETS_EDITOR_CATEGORY,\n  groups: [AXPWidgetGroupEnum.EntityWidget],\n  type: 'editor',\n  properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY],\n  components: {\n    edit: {\n      component: () =>\n        import('./lookup-filter-options-widget-editor.component').then(\n          (c) => c.AXPLookupFilterOptionsWidgetEditComponent,\n        ),\n    },\n  },\n};\n\n//#endregion\n","//#region ----   Imports   ----\n\nimport { AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPFilterClause } from '@acorex/platform/contracts';\nimport { AXPLayoutBuilderService, IActionBuilder } from '@acorex/platform/layout/builder';\nimport {\n  type AXPEntityListFilterDefinition,\n  collectEntityListFilterDefinitions,\n} from '@acorex/platform/layout/entity-contracts';\nimport { AXPValueWidgetComponent, AXPWidgetRegistryService } from '@acorex/platform/layout/widget-core';\nimport { AsyncPipe } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  inject,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { isEmpty } from 'lodash-es';\nimport { AXPEntityDefinitionRegistryService } from '../../../entity-registery.service';\n\n//#endregion\n\n//#region ----   Constants   ----\n\nconst LOOKUP_FILTER_OPTIONS_I18N = {\n  filters: '@general:widgets.data-source-options.filters',\n  filtersButtonEmpty: '@general:widgets.data-source-options.filters-button-empty',\n  filtersButtonWithCount: '@general:widgets.data-source-options.filters-button-with-count',\n  filtersModalTitle: '@general:widgets.data-source-options.filters-modal-title',\n  selectEntityFirst: '@general:widgets.lookup-filter-options.select-entity-first',\n  noFilterableFields: '@general:widgets.lookup-filter-options.no-filterable-fields',\n} as const;\n\n//#endregion\n\n//#region ----   Helpers   ----\n\nfunction getFilterKey(filter: AXPEntityListFilterDefinition, index: number): string {\n  return filter.id ?? filter.field ?? slugFilterTitle(filter.title ?? '') ?? `filter_${index}`;\n}\n\nfunction slugFilterTitle(title: string): string {\n  return (\n    title\n      .toLowerCase()\n      .replace(/[^a-z0-9\\s]/g, '')\n      .replace(/\\s+/g, '_')\n      .substring(0, 50) || 'filter'\n  );\n}\n\nfunction flattenFilterLeaves(filter: AXDataSourceFilterOption | null | undefined): AXDataSourceFilterOption[] {\n  if (!filter) {\n    return [];\n  }\n\n  if (filter.filters?.length) {\n    return filter.filters.flatMap((child) => flattenFilterLeaves(child));\n  }\n\n  if (filter.field) {\n    return [filter];\n  }\n\n  return [];\n}\n\nfunction filterToExpressionMap(\n  filter: AXPFilterClause | null | undefined,\n  definitions: AXPEntityListFilterDefinition[],\n): Record<string, string> {\n  const map: Record<string, string> = {};\n  definitions.forEach((definition, index) => {\n    map[getFilterKey(definition, index)] = '';\n  });\n\n  for (const leaf of flattenFilterLeaves(filter)) {\n    const definitionIndex = definitions.findIndex((definition) => definition.field === leaf.field);\n    if (definitionIndex < 0) {\n      continue;\n    }\n\n    const key = getFilterKey(definitions[definitionIndex], definitionIndex);\n    const value = leaf.value;\n    map[key] = typeof value === 'string' ? value : value != null ? String(value) : '';\n  }\n\n  return map;\n}\n\nfunction expressionsToFilter(\n  expressions: Record<string, string>,\n  definitions: AXPEntityListFilterDefinition[],\n): AXPFilterClause | undefined {\n  const clauses = definitions\n    .map((definition, index) => {\n      const key = getFilterKey(definition, index);\n      const expression = expressions[key]?.trim();\n      if (!expression) {\n        return null;\n      }\n\n      return {\n        field: definition.field,\n        operator: definition.operator ?? { type: 'equal' },\n        value: expression,\n      } satisfies AXDataSourceFilterOption;\n    })\n    .filter((clause): clause is NonNullable<typeof clause> => clause != null);\n\n  if (!clauses.length) {\n    return undefined;\n  }\n\n  return {\n    logic: 'and',\n    filters: clauses,\n  };\n}\n\nfunction countConfiguredExpressions(filter: AXPFilterClause | null | undefined): number {\n  return flattenFilterLeaves(filter).filter((leaf) => {\n    const value = leaf.value;\n    const text = typeof value === 'string' ? value : value != null ? String(value) : '';\n    return text.trim().length > 0;\n  }).length;\n}\n\n//#endregion\n\n//#region ----   Component   ----\n\n@Component({\n  selector: 'axp-lookup-filter-options-widget-editor',\n  templateUrl: './lookup-filter-options-widget-editor.component.html',\n  styleUrl: './lookup-filter-options-widget-editor.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AsyncPipe, AXButtonModule, AXDecoratorModule, AXTranslationModule],\n})\nexport class AXPLookupFilterOptionsWidgetEditComponent extends AXPValueWidgetComponent<AXPFilterClause | undefined> {\n  //#region ----   Services & Dependencies   ----\n\n  private readonly entityRegistry = inject(AXPEntityDefinitionRegistryService);\n  private readonly widgetRegistry = inject(AXPWidgetRegistryService);\n  private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n  private readonly translationService = inject(AXTranslationService);\n\n  //#endregion\n\n  //#region ----   State   ----\n\n  protected readonly I18N = LOOKUP_FILTER_OPTIONS_I18N;\n\n  protected readonly filterDefinitions = signal<AXPEntityListFilterDefinition[]>([]);\n  protected readonly entityTitle = signal<string>('');\n  private readonly loadedEntityKey = signal<string | null>(null);\n\n  //#endregion\n\n  //#region ----   Computed   ----\n\n  protected readonly entityKey = computed(() => {\n    this.contextService.data();\n    const key = this.contextService.getValue('options.entity') as string | undefined;\n    const trimmed = key?.trim();\n    return trimmed && trimmed.length > 0 ? trimmed : null;\n  });\n\n  protected readonly filterCount = computed(() => countConfiguredExpressions(this.getValue()));\n\n  //#endregion\n\n  //#region ----   Effects   ----\n\n  private readonly loadFilterDefinitionsEffect = effect(() => {\n    const key = this.entityKey();\n    untracked(() => {\n      void this.loadFilterDefinitions(key);\n    });\n  });\n\n  //#endregion\n\n  //#region ----   UI Handlers   ----\n\n  protected async openFilterEditor(): Promise<void> {\n    const definitions = this.filterDefinitions();\n    if (!definitions.length) {\n      return;\n    }\n\n    const initialFilters = filterToExpressionMap(this.getValue(), definitions);\n    const filtersModalTitle = await this.translationService.translateAsync(LOOKUP_FILTER_OPTIONS_I18N.filtersModalTitle);\n\n    const ref = await this.layoutBuilder\n      .create()\n      .dialog((dialog) => {\n        dialog\n          .setTitle(filtersModalTitle)\n          .setMessage(this.entityTitle())\n          .setSize('md')\n          .setContext({ filters: initialFilters })\n          .content((layoutBuilder) => {\n            layoutBuilder.flex((flex) => {\n              flex\n                .mode('edit')\n                .setOptions({\n                  flexDirection: 'column',\n                  maxHeight: '60vh',\n                  overflowY: 'auto',\n                });\n              definitions.forEach((filter, index) => {\n                const key = getFilterKey(filter, index);\n                flex.formField(filter.title, (field) => {\n                  field.path(`filters.${key}`).customWidget('code-editor', {\n                    language: 'javascript',\n                    lineNumbers: true,\n                    height: 'min-h-48',\n                  });\n                });\n              });\n            });\n          })\n          .setActions((actions: IActionBuilder) => {\n            actions.cancel('@general:actions.cancel.title');\n            actions.submit('@general:actions.save.title');\n          });\n      })\n      .show();\n\n    if (ref.action() === 'submit') {\n      const context = ref.context() as { filters?: Record<string, string> } | undefined;\n      const expressions = context?.filters ?? {};\n      this.setValue(expressionsToFilter(expressions, definitions));\n      ref.close();\n      return;\n    }\n\n    ref.close();\n  }\n\n  //#endregion\n\n  //#region ----   Private Methods   ----\n\n  private async loadFilterDefinitions(entityKey: string | null): Promise<void> {\n    if (!entityKey) {\n      this.filterDefinitions.set([]);\n      this.entityTitle.set('');\n      if (this.loadedEntityKey()) {\n        this.setValue(undefined);\n      }\n      this.loadedEntityKey.set(null);\n      return;\n    }\n\n    const [module, entity] = entityKey.split('.');\n    if (!module || !entity) {\n      this.filterDefinitions.set([]);\n      this.entityTitle.set('');\n      if (this.loadedEntityKey()) {\n        this.setValue(undefined);\n      }\n      this.loadedEntityKey.set(null);\n      return;\n    }\n\n    const previousKey = this.loadedEntityKey();\n    if (previousKey && previousKey !== entityKey) {\n      this.setValue(undefined);\n    }\n\n    const entityDef = await this.entityRegistry.resolve(module, entity).catch(() => null);\n    if (!entityDef) {\n      this.filterDefinitions.set([]);\n      this.entityTitle.set('');\n      this.loadedEntityKey.set(null);\n      return;\n    }\n\n    this.entityTitle.set(typeof entityDef.title === 'string' ? entityDef.title : entityKey);\n\n    const definitions = await collectEntityListFilterDefinitions(\n      entityDef,\n      (moduleName, entityName) => this.entityRegistry.resolve(moduleName, entityName).catch(() => null),\n      {\n        resolveWidget: (type) => this.widgetRegistry.resolve(type),\n      },\n    );\n\n    this.filterDefinitions.set(definitions);\n    this.loadedEntityKey.set(entityKey);\n\n    const current = this.getValue();\n    if (current && !isEmpty(current) && countConfiguredExpressions(current) === 0) {\n      this.setValue(undefined);\n    }\n  }\n\n  //#endregion\n}\n\n//#endregion\n","<div class=\"axp-lookup-filter-options ax-flex ax-flex-col ax-gap-2 ax-py-2\">\n  @if (!entityKey()) {\n    <span class=\"ax-text-sm ax-opacity-70\">{{ I18N.selectEntityFirst | translate | async }}</span>\n  } @else if (filterDefinitions().length === 0) {\n    <span class=\"ax-text-sm ax-opacity-70\">{{ I18N.noFilterableFields | translate | async }}</span>\n  } @else {\n    @if (filterCount() === 0) {\n      <ax-button\n        look=\"twotone\"\n        color=\"default\"\n        size=\"sm\"\n        [text]=\"(I18N.filtersButtonEmpty | translate | async) ?? ''\"\n        (onClick)=\"openFilterEditor()\"\n        class=\"ax-w-full\"\n      >\n        <ax-prefix>\n          <ax-icon icon=\"fa-light fa-filter\"></ax-icon>\n        </ax-prefix>\n      </ax-button>\n    } @else {\n      <ax-button\n        look=\"twotone\"\n        color=\"default\"\n        size=\"sm\"\n        [text]=\"((I18N.filtersButtonWithCount | translate: { params: { count: filterCount() } }) | async) ?? ''\"\n        (onClick)=\"openFilterEditor()\"\n        class=\"ax-w-full\"\n      >\n        <ax-prefix>\n          <ax-icon icon=\"fa-light fa-filter\"></ax-icon>\n        </ax-prefix>\n      </ax-button>\n    }\n  }\n</div>\n","import { AXDataSourceFilterOption } from '@acorex/cdk/common';\n\n/**\n * Unified reference format for all sources\n */\nexport interface AXPMultiSourceRef {\n  /** Source identifier (e.g., 'site-location', 'inline-address', 'employee-user') */\n  sourceKey: string;\n\n  /** Entity ID if entity source (optional for inline sources) */\n  refId?: string;\n\n  /** Always present - used for display */\n  displayName: string;\n\n  /** Full data (for inline sources or denormalized entity data) */\n  data?: any;\n\n  /** Additional metadata */\n  meta?: Record<string, unknown>;\n}\n\n/**\n * Stored value type\n * - Single: AXPMultiSourceRef\n * - Multiple: AXPMultiSourceRef[]\n */\nexport type AXPMultiSourceValue = AXPMultiSourceRef | AXPMultiSourceRef[];\n\n/**\n * Source type\n */\nexport enum AXPMultiSourceType {\n  Entity = 'entity',\n  Inline = 'inline',\n}\n\n/**\n * Single source item definition\n */\nexport interface AXPMultiSourceItem {\n  /** Unique identifier for this source */\n  key: string;\n\n  /** Display information */\n  title: string;\n  icon?: string;\n  badge?: string;\n  description?: string;\n\n  /** Source type */\n  type: AXPMultiSourceType;\n\n  /** For entity sources: entity name (e.g., 'LocationManagement.Location') */\n  entity?: string;\n\n  /** For inline sources: command key to execute for inline creation (e.g., 'Module.Entity:CreateInline') */\n  inlineCreateCommand?: string;\n\n  /** Optional: Filter/constraints for this source */\n  filters?: AXDataSourceFilterOption;\n\n  /** Optional: Custom search fields */\n  searchFields?: string[];\n\n  /** Display format template for results */\n  displayFormat?: string;\n\n  /** Value transformation (how to store this source) */\n  valueTransform?: (item: any) => AXPMultiSourceRef;\n}\n\n/**\n * Complete source configuration (from provider)\n */\nexport interface AXPMultiSourceDefinition {\n  /** Provider name */\n  name: string;\n\n  /** Display title */\n  title: string;\n\n  /** Sources array */\n  sources: AXPMultiSourceItem[];\n\n  /** Default search strategy */\n  searchStrategy: 'unified' | 'tabs' | 'grouped';\n\n  /** Default display format */\n  defaultDisplayFormat?: string;\n\n  /** Default multiple selection */\n  defaultMultiple?: boolean;\n}\n\n/**\n * Widget options\n */\nexport interface AXPMultiSourceSelectorWidgetOptions {\n  /** Provider name (required) */\n  providerName: string;\n\n  /** Override multiple selection (optional, uses provider default if not specified) */\n  multiple?: boolean;\n\n  /** Override display format (optional, uses provider default if not specified) */\n  displayFormat?: string;\n\n  /** Additional filters to apply to all sources */\n  filters?: AXDataSourceFilterOption;\n\n  /** Custom placeholder */\n  placeholder?: string;\n\n  /** Allow clear */\n  allowClear?: boolean;\n}\n\n","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { AXPMultiSourceDefinition } from './multi-source-selector-widget.types';\n\n/**\n * Injection token for multi-source definition providers\n */\nexport const AXP_MULTI_SOURCE_DEFINITION_PROVIDER = new InjectionToken<\n  AXPMultiSourceDefinitionProvider[]\n>('AXP_MULTI_SOURCE_DEFINITION_PROVIDER');\n\n/**\n * Provider context for building definitions\n */\nexport class AXPMultiSourceDefinitionProviderContext {\n  private definitions: Map<string, AXPMultiSourceDefinition> = new Map();\n\n  addDefinition(definition: AXPMultiSourceDefinition): void {\n    this.definitions.set(definition.name, definition);\n  }\n\n  getDefinitions(): AXPMultiSourceDefinition[] {\n    return Array.from(this.definitions.values());\n  }\n\n  findDefinition(name: string): AXPMultiSourceDefinition | undefined {\n    return this.definitions.get(name);\n  }\n}\n\n/**\n * Provider interface\n */\nexport interface AXPMultiSourceDefinitionProvider {\n  provide(context: AXPMultiSourceDefinitionProviderContext): Promise<void> | void;\n}\n\n/**\n * Service for managing multi-source definitions\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPMultiSourceDefinitionProviderService {\n  //#region ----   Services & Dependencies   ----\n\n  private readonly providers = inject(AXP_MULTI_SOURCE_DEFINITION_PROVIDER, { optional: true });\n\n  //#endregion\n\n  //#region ----   Properties   ----\n\n  private cache: Map<string, AXPMultiSourceDefinition> | null = null;\n\n  //#endregion\n\n  //#region ----   Private Methods   ----\n\n  private async load(): Promise<void> {\n    if (this.cache) {\n      return;\n    }\n\n    const context = new AXPMultiSourceDefinitionProviderContext();\n\n    if (Array.isArray(this.providers)) {\n      for (const provider of this.providers) {\n        await provider.provide(context);\n      }\n    }\n\n    this.cache = new Map(context.getDefinitions().map((def) => [def.name, def]));\n  }\n\n  //#endregion\n\n  //#region ----   Public Methods   ----\n\n  /**\n   * Get definition by name\n   */\n  public async getDefinition(name: string): Promise<AXPMultiSourceDefinition> {\n    await this.load();\n    const definition = this.cache?.get(name);\n    if (!definition) {\n      throw new Error(`Multi-source definition '${name}' not found`);\n    }\n    return definition;\n  }\n\n  /**\n   * Reload definitions (clear cache)\n   */\n  public async reload(): Promise<void> {\n    this.cache = null;\n    await this.load();\n  }\n\n  //#endregion\n}\n\n","import { AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core-contracts';\nimport { AXPWidgetsCatalog } from '@acorex/platform/contracts';\n\nimport {\n  AXP_ALLOW_CLEAR_PROPERTY,\n  AXP_ALLOW_MULTIPLE_PROPERTY,\n  AXP_DATA_PATH_PROPERTY,\n  AXP_DATA_PROPERTY_GROUP,\n  AXP_DISABLED_PROPERTY,\n} from '@acorex/platform/layout/widgets';\n\nexport const AXPMultiSourceSelectorWidget: AXPWidgetConfig = {\n  name: 'multi-source-selector-editor',\n  title: 'Multi-Source Selector',\n  categories: [],\n  groups: [AXPWidgetGroupEnum.EntityWidget],\n  type: 'editor',\n  icon: 'fa-light fa-layer-group',\n  properties: [\n    AXP_DISABLED_PROPERTY,\n    AXP_ALLOW_CLEAR_PROPERTY,\n    AXP_DATA_PATH_PROPERTY,\n    {\n      name: 'providerName',\n      title: 'Provider Name',\n      group: AXP_DATA_PROPERTY_GROUP,\n      schema: {\n        dataType: 'string',\n        interface: {\n          name: 'providerName',\n          path: 'options.providerName',\n          type: AXPWidgetsCatalog.text,\n          options: {\n            placeholder: 'Enter provider name (e.g., party-selector)',\n          },\n        },\n      },\n      visible: true,\n    },\n    AXP_ALLOW_MULTIPLE_PROPERTY,\n    {\n      name: 'displayFormat',\n      title: 'Display Format',\n      group: AXP_DATA_PROPERTY_GROUP,\n      schema: {\n        dataType: 'string',\n        interface: {\n          name: 'displayFormat',\n          path: 'options.displayFormat',\n          type: AXPWidgetsCatalog.template,\n        },\n      },\n      visible: true,\n    },\n  ],\n  components: {\n    view: {\n      component: () =>\n        import('./multi-source-selector-widget-view.component').then(\n          (c) => c.AXPMultiSourceSelectorWidgetViewComponent,\n        ),\n    },\n    edit: {\n      component: () =>\n        import('./multi-source-selector-widget-edit.component').then(\n          (c) => c.AXPMultiSourceSelectorWidgetEditComponent,\n        ),\n    },\n    column: {\n      component: () =>\n        import('./multi-source-selector-widget-column.component').then(\n          (c) => c.AXPMultiSourceSelectorWidgetColumnComponent,\n        ),\n    },\n    designer: {\n      component: () =>\n        import('./multi-source-selector-widget-edit.component').then(\n          (c) => c.AXPMultiSourceSelectorWidgetEditComponent,\n        ),\n    },\n  },\n};\n\n","import { AXPEntity } from '@acorex/platform/layout/entity-contracts';\nimport { AXDataSourceFilterOption } from '@acorex/cdk/common';\n\nimport { Injectable, inject } from '@angular/core';\nimport { AXPMultiSourceDefinition, AXPMultiSourceItem } from './multi-source-selector-widget.types';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\n\n/**\n * Search result item with source information\n */\nexport interface AXPMultiSourceSearchResultItem {\n  source: AXPMultiSourceItem;\n  item: any;\n}\n\n/**\n * Search result\n */\nexport interface AXPMultiSourceSearchResult {\n  items: AXPMultiSourceSearchResultItem[];\n  total: number;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXPMultiSourceFederatedSearchService {\n  //#region ----   Services & Dependencies   ----\n\n  private readonly entityResolver = inject(AXPEntityDefinitionRegistryService);\n\n  //#endregion\n\n  //#region ----   Public Methods   ----\n\n  /**\n   * Search across all enabled sources\n   */\n  async search(\n    definition: AXPMultiSourceDefinition,\n    searchTerm: string,\n    filters?: AXDataSourceFilterOption,\n  ): Promise<AXPMultiSourceSearchResult> {\n    const enabledSources = definition.sources.filter((source) => {\n      // Filter out disabled sources if needed\n      return true;\n    });\n\n    const searchPromises = enabledSources.map((source) =>\n      this.searchSource(source, searchTerm, filters),\n    );\n\n    const results = await Promise.all(searchPromises);\n\n    // Combine all results\n    const allItems: AXPMultiSourceSearchResultItem[] = [];\n    let total = 0;\n\n    results.forEach((result, index) => {\n      const source = enabledSources[index];\n      result.items.forEach((item) => {\n        allItems.push({\n          source,\n          item,\n        });\n      });\n      total += result.total;\n    });\n\n    return {\n      items: allItems,\n      total,\n    };\n  }\n\n  /**\n   * Search single source\n   */\n  async searchSource(\n    source: AXPMultiSourceItem,\n    searchTerm: string,\n    filters?: AXDataSourceFilterOption,\n  ): Promise<{ items: any[]; total: number }> {\n    if (source.type === 'inline') {\n      // Inline sources don't support search\n      return {\n        items: [],\n        total: 0,\n      };\n    }\n\n    if (!source.entity) {\n      return {\n        items: [],\n        total: 0,\n      };\n    }\n\n    try {\n      const entity = await this.resolveEntity(source.entity);\n      if (!entity) {\n        return {\n          items: [],\n          total: 0,\n        };\n      }\n\n      return await this.searchEntity(entity, source, searchTerm, filters);\n    } catch (error) {\n      console.error(`[MultiSourceFederatedSearch] Error searching source ${source.key}:`, error);\n      return {\n        items: [],\n        total: 0,\n      };\n    }\n  }\n\n  //#endregion\n\n  //#region ----   Private Methods   ----\n\n  /**\n   * Resolve entity from entity name string (e.g., 'LocationManagement.Location')\n   */\n  private async resolveEntity(entityName: string): Promise<AXPEntity | null> {\n    try {\n      const [module, entity] = entityName.split('.');\n      return await this.entityResolver.resolve(module, entity);\n    } catch (error) {\n      console.error(`[MultiSourceFederatedSearch] Error resolving entity ${entityName}:`, error);\n      return null;\n    }\n  }\n\n  /**\n   * Search entity using entity queries\n   */\n  private async searchEntity(\n    entity: AXPEntity,\n    source: AXPMultiSourceItem,\n    searchTerm: string,\n    filters?: AXDataSourceFilterOption,\n  ): Promise<{ items: any[]; total: number }> {\n    const listQuery = entity.queries?.list?.execute;\n    if (!listQuery || typeof listQuery !== 'function') {\n      return {\n        items: [],\n        total: 0,\n      };\n    }\n\n    // Build search filters\n    const searchFilters = this.buildSearchFilters(entity, source, searchTerm);\n\n    // Merge with source filters and additional filters\n    const allFilters = this.mergeFilters(source.filters, filters, searchFilters);\n\n    // Execute query\n    try {\n      const result = await listQuery({\n        filter: allFilters,\n        take: 50, // Limit results per source\n        skip: 0,\n      });\n\n      return {\n        items: result.items || [],\n        total: result.total || 0,\n      };\n    } catch (error) {\n      console.error(`[MultiSourceFederatedSearch] Error executing query for ${source.key}:`, error);\n      return {\n        items: [],\n        total: 0,\n      };\n    }\n  }\n\n  /**\n   * Build search filters from search term\n   */\n  private buildSearchFilters(\n    entity: AXPEntity,\n    source: AXPMultiSourceItem,\n    searchTerm: string,\n  ): AXDataSourceFilterOption | null {\n    if (!searchTerm || searchTerm.trim().length === 0) {\n      return null;\n    }\n\n    const normalizedTerm = searchTerm.trim();\n\n    // Use custom search fields if provided, otherwise use entity's searchable fields\n    const searchFields = source.searchFields || this.getDefaultSearchFields(entity);\n\n    if (searchFields.length === 0) {\n      return null;\n    }\n\n    // Create OR filter for search fields\n    const searchFieldFilters = searchFields.map((field) => ({\n      field,\n      value: normalizedTerm,\n      operator: { type: 'contains' as const },\n    }));\n\n    if (searchFieldFilters.length === 1) {\n      return searchFieldFilters[0];\n    }\n\n    return {\n      field: null as any,\n      logic: 'or',\n      operator: null as any,\n      filters: searchFieldFilters,\n    };\n  }\n\n  /**\n   * Get default searchable fields from entity\n   */\n  private getDefaultSearchFields(entity: AXPEntity): string[] {\n    return (\n      entity.properties\n        ?.filter((p) => p.options?.filter?.inline?.enabled)\n        .map((p) => p.name) || []\n    );\n  }\n\n  /**\n   * Merge multiple filters\n   */\n  private mergeFilters(\n    ...filters: (AXDataSourceFilterOption | null | undefined)[]\n  ): AXDataSourceFilterOption | null {\n    const validFilters = filters.filter(\n      (f): f is AXDataSourceFilterOption => f !== null && f !== undefined,\n    );\n\n    if (validFilters.length === 0) {\n      return null;\n    }\n\n    if (validFilters.length === 1) {\n      return validFilters[0];\n    }\n\n    return {\n      field: null as any,\n      logic: 'and',\n      operator: null as any,\n      filters: validFilters,\n    };\n  }\n\n  //#endregion\n}\n\n","import { AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { Injectable, inject } from '@angular/core';\nimport { signal } from '@angular/core';\nimport {\n  AXPMultiSourceDefinition,\n  AXPMultiSourceRef,\n  AXPMultiSourceValue,\n} from './multi-source-selector-widget.types';\nimport { AXPMultiSourceDefinitionProviderService } from './multi-source-definition.provider';\n\n/**\n * Selector open configuration\n */\nexport interface AXPMultiSourceSelectorOpenConfig {\n  definition: AXPMultiSourceDefinition;\n  multiple: boolean;\n  selectedValues?: AXPMultiSourceValue;\n  filters?: AXDataSourceFilterOption;\n  title?: string;\n}\n\n/**\n * Selector result\n */\nexport interface AXPMultiSourceSelectorResult {\n  items: AXPMultiSourceRef[];\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXPMultiSourceSelectorService {\n  //#region ----   Services & Dependencies   ----\n\n  private readonly popupService = inject(AXPopupService);\n  private readonly definitionService = inject(AXPMultiSourceDefinitionProviderService);\n\n  //#endregion\n\n  //#region ----   Public Methods   ----\n\n  /**\n   * Open selector popup by provider name\n   */\n  async openByProviderName(\n    providerName: string,\n    config: {\n      multiple: boolean;\n      selectedValues?: AXPMultiSourceValue;\n      filters?: AXDataSourceFilterOption;\n      title?: string;\n    },\n  ): Promise<AXPMultiSourceSelectorResult | null> {\n    const definition = await this.definitionService.getDefinition(providerName);\n    return this.open({\n      definition,\n      ...config,\n    });\n  }\n\n  /**\n   * Open selector popup\n   */\n  async open(config: AXPMultiSourceSelectorOpenConfig): Promise<AXPMultiSourceSelectorResult | null> {\n    const component = await import('./multi-source-selector.component').then((c) => c.AXPMultiSourceSelectorComponent);\n\n    const result = await this.popupService.open(component, {\n      title: config.title || config.definition.title,\n      size: 'lg',\n      data: {\n        config: signal(config),\n      },\n    });\n\n    return result?.data || null;\n  }\n\n  //#endregion\n}\n\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { setupPopupFooterKeyboardShortcuts } from '@acorex/platform/core';\nimport { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  inject,\n  signal,\n} from '@angular/core';\nimport {\n  AXPMultiSourceDefinition,\n  AXPMultiSourceItem,\n  AXPMultiSourceRef,\n  AXPMultiSourceType,\n} from './multi-source-selector-widget.types';\nimport { AXPMultiSourceSelectorOpenConfig } from './multi-source-selector.service';\nimport { AXPEntityDataSelectorService } from '../lookup-widget/entity-data-selector.service';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\nimport { AXTranslationService } from '@acorex/core/translation';\n\n/**\n * Multi-source selector popup component\n */\n@Component({\n  selector: 'axp-multi-source-selector',\n  template: `\n    <div class=\"ax-flex ax-flex-col ax-h-full ax-overflow-hidden\">\n      @if (definition().searchStrategy === 'tabs') {\n        <div class=\"ax-flex ax-flex-col ax-flex-1 ax-overflow-hidden\">\n          <ax-tabs [look]=\"'with-line'\" class=\"ax-px-4 ax-pt-4\">\n            @for (source of definition().sources; track source.key) {\n              <ax-tab-item\n                [text]=\"(source.title | translate | async) || source.title\"\n                [key]=\"source.key\"\n                [active]=\"activeTabKey() === source.key\"\n                (onClick)=\"handleTabClick(source)\"\n              >\n                @if (source.icon) {\n                  <ax-prefix>\n                    <ax-icon [icon]=\"source.icon\"></ax-icon>\n                  </ax-prefix>\n                }\n              </ax-tab-item>\n            }\n          </ax-tabs>\n\n          <div class=\"ax-flex-1 ax-p-4 ax-overflow-auto\">\n            @if (activeSource()) {\n              @if (activeSource()!.type === AXPMultiSourceType.Entity) {\n                <div class=\"ax-text-center ax-py-8\">\n                  <ax-button\n                    color=\"primary\"\n                    [text]=\"('@general:actions.select.title' | translate | async) || 'Select'\"\n                    (onClick)=\"handleSelectFromSource(activeSource()!)\"\n                  ></ax-button>\n                </div>\n              } @else {\n                <div class=\"ax-text-center ax-py-8 ax-text-muted\">\n                  Inline creation - Implementation pending\n                </div>\n              }\n            }\n          </div>\n        </div>\n      } @else {\n        <div class=\"ax-p-4\">\n          <div class=\"ax-text-muted\">\n            Unified search strategy - Implementation in progress\n          </div>\n          <div class=\"ax-mt-4\">\n            <p>Definition: {{ definition().title }}</p>\n            <p>Multiple: {{ config().multiple }}</p>\n            <p>Sources: {{ definition().sources.length }}</p>\n          </div>\n        </div>\n      }\n    </div>\n\n    <ax-footer>\n      <ax-suffix>\n        <ax-button\n          look=\"solid\"\n          [text]=\"('@general:actions.cancel.title' | translate | async) || 'Cancel'\"\n          (onClick)=\"handleCancel()\"\n        ></ax-button>\n        <ax-button\n          look=\"solid\"\n          color=\"primary\"\n          [text]=\"('@general:actions.select.title' | translate | async) || 'Select'\"\n          [disabled]=\"selectedItems().length === 0\"\n          (onClick)=\"handleConfirm()\"\n        ></ax-button>\n      </ax-suffix>\n    </ax-footer>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [CommonModule, AXButtonModule, AXTabsModule, AXDecoratorModule, AXTranslationModule],\n})\nexport class AXPMultiSourceSelectorComponent extends AXBasePageComponent {\n  //#region ----   Services & Dependencies   ----\n\n  private readonly entityDataSelectorService = inject(AXPEntityDataSelectorService);\n  private readonly entityResolver = inject(AXPEntityDefinitionRegistryService);\n  private readonly translationService = inject(AXTranslationService);\n\n  //#endregion\n\n  //#region ----   Properties   ----\n\n  protected config = signal<AXPMultiSourceSelectorOpenConfig>({\n    definition: {} as AXPMultiSourceDefinition,\n    multiple: false,\n  });\n\n  protected definition = computed<AXPMultiSourceDefinition>(() => {\n    return this.config().definition;\n  });\n\n  protected activeTabKey = signal<string | null>(null);\n  protected activeSource = computed<AXPMultiSourceItem | null>(() => {\n    const key = this.activeTabKey();\n    if (!key) return null;\n    return this.definition().sources.find((s) => s.key === key) || null;\n  });\n\n  protected selectedItems = signal<AXPMultiSourceRef[]>([]);\n\n  protected readonly AXPMultiSourceType = AXPMultiSourceType;\n\n  //#endregion\n\n  constructor() {\n    super();\n    setupPopupFooterKeyboardShortcuts(\n      () => [\n        {\n          title: '@general:actions.cancel.title',\n          command: 'cancel',\n          handler: () => this.handleCancel(),\n        },\n        {\n          title: '@general:actions.select.title',\n          command: 'select',\n          disabled: () => this.selectedItems().length === 0,\n          handler: () => this.handleConfirm(),\n        },\n      ],\n      { id: 'multi-source-selector-popup' },\n    );\n  }\n\n  //#region ----   Lifecycle   ----\n\n  protected override ngOnInit(): void {\n    super.ngOnInit();\n\n    // Set initial active tab to first source\n    effect(() => {\n      const def = this.definition();\n      if (def.sources.length > 0 && !this.activeTabKey()) {\n        this.activeTabKey.set(def.sources[0].key);\n      }\n    });\n  }\n\n  //#endregion\n\n  //#region ----   Event Handlers   ----\n\n  protected handleTabClick(source: AXPMultiSourceItem): void {\n    this.activeTabKey.set(source.key);\n  }\n\n  protected async handleSelectFromSource(source: AXPMultiSourceItem): Promise<void> {\n    if (source.type !== AXPMultiSourceType.Entity || !source.entity) {\n      return;\n    }\n\n    try {\n      // Resolve entity\n      const [module, entityName] = source.entity.split('.');\n      const entity = await this.entityResolver.resolve(module, entityName);\n\n      if (!entity) {\n        console.error(`[MultiSourceSelector] Entity ${source.entity} not found`);\n        return;\n      }\n\n      // Translate title\n      const title = await this.translationService.translateAsync(source.title);\n\n      // Open entity selector\n      const result = await this.entityDataSelectorService.open({\n        entity,\n        title,\n        allowMultiple: this.config().multiple,\n        filters: source.filters,\n        searchFields: source.searchFields,\n      });\n\n      if (result?.items && result.items.length > 0) {\n        // Transform items to AXPMultiSourceRef\n        const refs: AXPMultiSourceRef[] = result.items.map((item) => {\n          if (source.valueTransform) {\n            return source.valueTransform(item);\n          }\n          // Default transform\n          return {\n            sourceKey: source.key,\n            refId: item.id,\n            displayName: item.title || item.name || item.code || String(item.id),\n            data: item,\n          };\n        });\n\n        // Update selected items\n        if (this.config().multiple) {\n          // Merge with existing selection\n          const current = this.selectedItems();\n          this.selectedItems.set([...current, ...refs]);\n        } else {\n          // Replace selection\n          this.selectedItems.set(refs);\n        }\n      }\n    } catch (error) {\n      console.error('[MultiSourceSelector] Error opening entity selector:', error);\n    }\n  }\n\n  protected handleCancel(): void {\n    this.close();\n  }\n\n  protected handleConfirm(): void {\n    this.close({\n      items: this.selectedItems(),\n    });\n  }\n\n  //#endregion\n}\n","import {\n  AXClickEvent,\n  AXFocusEvent,\n  AXHtmlEvent,\n  AXValueChangedEvent,\n} from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXTagBoxComponent, AXTagBoxModule } from '@acorex/components/tag-box';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXValidationModule } from '@acorex/core/validation';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\n\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  inject,\n  signal,\n  viewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { castArray, get, isEmpty, isNil } from 'lodash-es';\nimport {\n  AXPMultiSourceDefinition,\n  AXPMultiSourceRef,\n  AXPMultiSourceValue,\n} from './multi-source-selector-widget.types';\nimport { AXPMultiSourceDefinitionProviderService } from './multi-source-definition.provider';\nimport { AXPMultiSourceSelectorService } from './multi-source-selector.service';\n\n@Component({\n  selector: 'axp-multi-source-selector-widget-edit',\n  template: `\n    @if (definition()) {\n      <ax-tag-box\n        #tagBoxComponent\n        [tagTemplate]=\"tagTemplate\"\n        [ngModel]=\"selectedItems()\"\n        [textField]=\"'displayName'\"\n        [valueField]=\"'id'\"\n        (onValueChanged)=\"handleValueChange($event)\"\n        [placeholder]=\"selectedItems().length ? '' : placeholderText()\"\n        [addOnEnter]=\"false\"\n        [addOnComma]=\"false\"\n        [disabled]=\"disabled()\"\n        (onKeyUp)=\"handleKeyUp($event)\"\n        (onBlur)=\"handleOnBlur($event)\"\n      >\n        @for (validation of validationRules(); track $index) {\n          <ax-validation-rule\n            [rule]=\"validation.rule\"\n            [message]=\"validation.options?.message\"\n            [options]=\"validation.options\"\n          ></ax-validation-rule>\n        }\n        @if (selectedItems().length > 0 && allowClear()) {\n          <ax-clear-button (click)=\"handleClearClick()\"></ax-clear-button>\n        }\n\n        <ax-suffix>\n          <ax-button\n            color=\"ghost\"\n            look=\"blank\"\n            [disabled]=\"isLoading() || disabled()\"\n            (onClick)=\"handleOnClick($event)\"\n          >\n            @if (isLoading()) {\n              <ax-loading></ax-loading>\n            } @else {\n              <ax-icon icon=\"far fa-search\"> </ax-icon>\n            }\n          </ax-button>\n        </ax-suffix>\n      </ax-tag-box>\n      <ng-template #tagTemplate let-item let-index=\"index\">\n        <div class=\"ax-inline-flex ax-items-center ax-gap-1.5 ax-rounded-md ax-px-3 ax-py-1 ax-text-sm ax-surface\">\n          <span>{{ getTagLabel(item) }}</span>\n          <button type=\"button\" (click)=\"tagBoxComponent.removeItem(index)\">\n            <ax-icon class=\"ax-icon ax-icon-close\"></ax-icon>\n          </button>\n        </div>\n      </ng-template>\n    }\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    FormsModule,\n    AXButtonModule,\n    AXDecoratorModule,\n    AXLoadingModule,\n    AXValidationModule,\n    AXFormModule,\n    AXTagBoxModule,\n    AXTranslationModule\n],\n})\nexport class AXPMultiSourceSelectorWidgetEditComponent extends AXPValueWidgetComponent<any> {\n  //#region ----   Services & Dependencies   ----\n\n  protected readonly popupService = inject(AXPopupService);\n  protected readonly definitionService = inject(AXPMultiSourceDefinitionProviderService);\n  protected readonly selectorService = inject(AXPMultiSourceSelectorService);\n\n  //#endregion\n\n  //#region ----   View Children   ----\n\n  protected tagBox = viewChild<AXTagBoxComponent>('tagBoxComponent');\n\n  //#endregion\n\n  //#region ----   Properties   ----\n\n  protected providerName = computed<string>(() => (this.options()['providerName'] as string) ?? '');\n  protected disabled = computed<boolean>(() => (this.options()['disabled'] as boolean) ?? false);\n  protected multiple = computed<boolean>(() => {\n    const def = this.definition();\n    const optionMultiple = this.options()['multiple'] as boolean | undefined;\n    return optionMultiple ?? def?.defaultMultiple ?? false;\n  });\n  protected allowClear = computed<boolean>(() => (this.options()['allowClear'] as boolean) ?? false);\n\n  protected placeholderText = computed<string>(() => {\n    const custom = this.options()['placeholder'] as string | undefined;\n    if (custom) {\n      return custom;\n    }\n    const def = this.definition();\n    return def?.title || 'Select...';\n  });\n\n  protected searchTerm = signal<string | null>(null);\n  protected selectedItems = signal<AXPMultiSourceRef[]>([]);\n  protected isLoading = signal(false);\n  protected isOpen = signal(false);\n\n  protected definition = signal<AXPMultiSourceDefinition | null>(null);\n\n  //#endregion\n\n  //#endregion\n\n  //#region ----   Effects   ----\n\n  private efProvider = effect(async () => {\n    const providerName = this.providerName();\n    if (!providerName) {\n      this.definition.set(null);\n      return;\n    }\n\n    try {\n      const def = await this.definitionService.getDefinition(providerName);\n      this.definition.set(def);\n    } catch (error) {\n      console.error(`[MultiSourceSelectorEdit] Error loading definition '${providerName}':`, error);\n      this.definition.set(null);\n    }\n  });\n\n  private efValue = effect(() => {\n    const value = this.getValue();\n    if (value) {\n      this.findByValue();\n    } else {\n      this.clear();\n    }\n  });\n\n  //#endregion\n\n  //#region ----   Event Handlers   ----\n\n  protected handleOnClick(e: AXClickEvent) {\n    this.showSelector();\n  }\n\n  protected handleValueChange(e: AXValueChangedEvent) {\n    if (e.isUserInteraction) {\n      if (isNil(e.value) || isEmpty(e.value)) {\n        this.clear();\n      } else {\n        this.setValue(this.singleOrMultiple(e.value));\n      }\n    }\n  }\n\n  protected handleSearchInputChange(e: AXValueChangedEvent) {\n    if (e.isUserInteraction) {\n      this.searchTerm.set(e.value ?? '');\n    }\n  }\n\n  protected handleOnBlur(e: AXFocusEvent) {\n    setTimeout(() => {\n      if (!this.isOpen()) {\n        this.clearInput();\n      }\n    }, 100);\n  }\n\n  protected async handleKeyUp(e: AXHtmlEvent) {\n    const keyEvent = e.nativeEvent as KeyboardEvent;\n    const value = this.tagBox()?.inputValue()!;\n    this.searchTerm.set(value);\n    if ((keyEvent.code == 'Enter' || keyEvent.code == 'NumpadEnter') && value) {\n      // For now, just open selector\n      this.showSelector();\n    }\n    if (keyEvent.code == 'ArrowDown') {\n      this.showSelector();\n    }\n  }\n\n  protected handleClearClick() {\n    this.clear();\n  }\n\n  //#endregion\n\n  //#region ----   Private Methods   ----\n\n  private async findByValue() {\n    this.isLoading.set(true);\n    const rawValue = this.getValue();\n    const values = this.multiple() ? castArray(rawValue) : [rawValue].filter((v) => v != null);\n\n    if (values.length === 0) {\n      this.setItems([]);\n      this.isLoading.set(false);\n      return;\n    }\n\n    // Convert values to AXPMultiSourceRef[] if needed\n    const refs = values.map((v) => this.normalizeToRef(v));\n    this.setItems(refs);\n    this.isLoading.set(false);\n  }\n\n  private normalizeToRef(value: any): AXPMultiSourceRef {\n    // If already AXPMultiSourceRef format\n    if (value && value.sourceKey && value.displayName) {\n      return value as AXPMultiSourceRef;\n    }\n\n    // If object with id, create ref\n    if (typeof value === 'object' && value.id) {\n      return {\n        sourceKey: value.sourceKey || 'unknown',\n        refId: value.id,\n        displayName: value.displayName || value.title || value.name || String(value.id),\n        data: value,\n      };\n    }\n\n    // If primitive, create simple ref\n    return {\n      sourceKey: 'unknown',\n      refId: String(value),\n      displayName: String(value),\n    };\n  }\n\n  private async showSelector() {\n    this.isOpen.set(true);\n\n    const def = this.definition();\n    if (!def) {\n      console.error('[MultiSourceSelectorEdit] Definition not loaded');\n      this.isOpen.set(false);\n      return;\n    }\n\n    const inlineSearchValue = (this.searchTerm() ?? '').trim();\n    const initialSearchTerm = inlineSearchValue.length > 0 ? inlineSearchValue : undefined;\n\n    // Extract current selected item IDs\n    const selectedValues = this.selectedItems().length > 0 ? this.selectedItems() : undefined;\n\n    try {\n      const result = await this.selectorService.openByProviderName(this.providerName(), {\n        multiple: this.multiple(),\n        selectedValues,\n        title: def.title,\n      });\n\n      if (result && 'items' in result) {\n        const hadInitialSelection = selectedValues && selectedValues.length > 0;\n\n        if (hadInitialSelection) {\n          // Replace the selection\n          this.setItems(result.items, false);\n        } else {\n          // Merge behavior\n          const shouldMerge = this.multiple() && this.selectedItems().length > 0;\n          this.setItems(result.items, shouldMerge);\n        }\n      }\n    } catch (error) {\n      console.error('[MultiSourceSelectorEdit] Error opening selector:', error);\n    } finally {\n      this.isOpen.set(false);\n      this.tagBox()?.focus();\n    }\n  }\n\n  private setItems(items: AXPMultiSourceRef[], mergeWithExisting: boolean = false) {\n    items = castArray(items);\n    items = items.filter((item) => item != null);\n\n    if (items.length == 0) {\n      if (!mergeWithExisting) {\n        this.selectedItems.set([]);\n      }\n      return;\n    }\n\n    // If merging and multiple is enabled, combine with existing items\n    if (mergeWithExisting && this.multiple()) {\n      const existingItems = this.selectedItems();\n      const existingKeys = new Set(\n        existingItems.map((item) => `${item.sourceKey}:${item.refId || item.displayName}`),\n      );\n      const newItems = items.filter((item) => {\n        const key = `${item.sourceKey}:${item.refId || item.displayName}`;\n        return !existingKeys.has(key);\n      });\n      items = [...existingItems, ...newItems];\n    }\n\n    this.clearInput();\n    this.selectedItems.set(items);\n\n    // Convert to value format\n    const value: AXPMultiSourceValue = this.multiple() ? items : items[0];\n    this.setValue(value);\n  }\n\n  public refresh() {\n    this.clear();\n    // TODO: Refresh data source if needed\n  }\n\n  public clear() {\n    this.setValue(null);\n    this.clearInput();\n    this.selectedItems.set([]);\n  }\n\n  private clearInput() {\n    this.tagBox()?.inputValue.set('');\n    this.searchTerm.set('');\n  }\n\n  protected getTagLabel(item: AXPMultiSourceRef): string {\n    return item.displayName || String(item.refId || item.sourceKey);\n  }\n\n  private singleOrMultiple(values: any[]): any | any[] {\n    return this.multiple() ? values : values[0];\n  }\n\n  //#endregion\n}\n\n","import { AXLoadingModule } from '@acorex/components/loading';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { castArray, get, isNil } from 'lodash-es';\nimport { AXPMultiSourceRef } from './multi-source-selector-widget.types';\nimport { AXPMultiSourceDefinitionProviderService } from './multi-source-definition.provider';\nimport { AXPMultiSourceDefinition } from './multi-source-selector-widget.types';\n\n@Component({\n  selector: 'axp-multi-source-selector-widget-view',\n  template: `\n    @if (loading()) {\n      <ax-loading></ax-loading>\n    } @else {\n      @if (displayItems().length > 1) {\n        @for (item of displayItems(); track $index) {\n          <ax-badge class=\"ax-p-0.5 {{ badgeClass() }}\" [text]=\"item.text\"></ax-badge>\n        }\n      } @else if (displayItems().length == 1) {\n        <ax-badge class=\"ax-p-0.5 {{ badgeClass() }}\" [text]=\"displayItems()[0].text\"></ax-badge>\n      } @else {\n        <span class=\"ax-text-muted\">---</span>\n      }\n    }\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AXLoadingModule, AXBadgeModule],\n})\nexport class AXPMultiSourceSelectorWidgetViewComponent extends AXPValueWidgetComponent<any> {\n  //#region ----   Services & Dependencies   ----\n\n  protected readonly formatService = inject(AXFormatService);\n  protected readonly definitionService = inject(AXPMultiSourceDefinitionProviderService);\n\n  //#endregion\n\n  //#region ----   Properties   ----\n\n  protected providerName = computed<string>(() => (this.options()['providerName'] as string) ?? '');\n  protected multiple = computed<boolean>(() => (this.options()['multiple'] as boolean) ?? false);\n  protected badgeClass = computed<string>(() => (this.options()['badgeClass'] as string) ?? 'ax-accent1');\n  protected displayFormat = computed<string | undefined>(() => {\n    const template = this.options()['displayFormat'] as string | undefined;\n    return template ? template.replace(/\\{/g, '{{').replace(/\\}/g, '}}') : undefined;\n  });\n\n  protected loading = signal(false);\n  private definition = signal<AXPMultiSourceDefinition | null>(null);\n\n  protected displayItems = signal<Array<{ id: string; text: string }>>([]);\n\n  //#endregion\n\n  //#region ----   Effects   ----\n\n  private efProvider = effect(async () => {\n    const providerName = this.providerName();\n    if (!providerName) {\n      this.definition.set(null);\n      return;\n    }\n\n    try {\n      const def = await this.definitionService.getDefinition(providerName);\n      this.definition.set(def);\n    } catch (error) {\n      console.error(`[MultiSourceSelectorView] Error loading definition '${providerName}':`, error);\n      this.definition.set(null);\n    }\n  });\n\n  private efDisplay = effect(async () => {\n    const value = this.getValue();\n    const def = this.definition();\n\n    if (isNil(value) || !def) {\n      this.displayItems.set([]);\n      return;\n    }\n\n    const refs = this.multiple() ? castArray(value) : [value];\n    const items = await Promise.all(refs.map((ref) => this.extractDisplayItem(ref, def)));\n\n    this.displayItems.set(items.filter((item): item is { id: string; text: string } => item !== null));\n  });\n\n  //#endregion\n\n  //#region ----   Private Methods   ----\n\n  private async extractDisplayItem(ref: any, definition: AXPMultiSourceDefinition): Promise<{ id: string; text: string } | null> {\n    if (!ref) {\n      return null;\n    }\n\n    // If ref is already AXPMultiSourceRef format\n    if (ref.sourceKey && ref.displayName) {\n      return {\n        id: ref.refId || ref.sourceKey,\n        text: ref.displayName,\n      };\n    }\n\n    // If ref is object with id, try to find source and get display name\n    if (typeof ref === 'object' && ref.id) {\n      // Try to find source by key if present\n      const sourceKey = ref.sourceKey;\n      if (sourceKey) {\n        const source = definition.sources.find((s) => s.key === sourceKey);\n        if (source) {\n          const displayText = this.getDisplayText(ref, source);\n          return {\n            id: ref.id,\n            text: displayText,\n          };\n        }\n      }\n\n      // Fallback: use displayName or title or id\n      const displayText = ref.displayName || ref.title || ref.id || String(ref);\n      return {\n        id: ref.id,\n        text: displayText,\n      };\n    }\n\n    // If ref is primitive (string/number), return as is\n    return {\n      id: String(ref),\n      text: String(ref),\n    };\n  }\n\n  private getDisplayText(item: any, source: any): string {\n    if (!item) {\n      return '';\n    }\n\n    const template = source.displayFormat || this.displayFormat();\n    if (template) {\n      const formatted = this.formatService.format(template, 'string', item);\n      if (formatted) {\n        return formatted;\n      }\n    }\n\n    // Fallback to common display fields\n    return get(item, 'displayName') || get(item, 'title') || get(item, 'name') || String(item.id || item);\n  }\n\n  //#endregion\n}\n\n","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXPColumnWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed, inject, signal } from '@angular/core';\nimport { castArray, get, isNil } from 'lodash-es';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXPMultiSourceRef } from './multi-source-selector-widget.types';\nimport { AXPMultiSourceDefinitionProviderService } from './multi-source-definition.provider';\nimport { AXPMultiSourceDefinition } from './multi-source-selector-widget.types';\n\n@Component({\n  selector: 'axp-multi-source-selector-widget-column',\n  template: `\n    @if (displayItems().length > 0) {\n      <div class=\"ax-flex ax-flex-wrap ax-gap-1\">\n        @for (item of visibleItems(); track item.id) {\n          <ax-badge class=\"ax-p-0.5 ax-accent1\" [text]=\"item.text\"></ax-badge>\n        }\n        @if (hasMoreItems()) {\n          <ax-badge class=\"ax-p-0.5 ax-accent2\" [text]=\"'+' + remainingItemsCount()\"></ax-badge>\n        }\n      </div>\n    } @else {\n      <span class=\"ax-text-muted\">---</span>\n    }\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AXBadgeModule],\n  inputs: ['rawValue', 'rowData'],\n})\nexport class AXPMultiSourceSelectorWidgetColumnComponent extends AXPColumnWidgetComponent<any> {\n  //#region ----   Services & Dependencies   ----\n\n  private readonly formatService = inject(AXFormatService);\n  private readonly definitionService = inject(AXPMultiSourceDefinitionProviderService);\n\n  //#endregion\n\n  //#region ----   Properties   ----\n\n  protected providerName: string = (this.options['providerName'] as string) ?? '';\n  protected columnName: string = (this.options['columnName'] as string) ?? '';\n  protected maxVisible: number = (this.options['maxVisible'] as number) ?? 2;\n  protected displayFormat = computed<string | undefined>(() => {\n    const template = this.options['displayFormat'] as string | undefined;\n    return template ? template.replace(/\\{/g, '{{').replace(/\\}/g, '}}') : undefined;\n  });\n\n  private definition = signal<AXPMultiSourceDefinition | null>(null);\n\n  //#endregion\n\n  //#region ----   Constructor   ----\n\n  constructor() {\n    super();\n    void this.loadDefinition();\n  }\n\n  //#endregion\n\n  //#region ----   Computed Properties   ----\n\n  protected displayItems = computed(() => {\n    if (isNil(this.rawValue)) {\n      return [];\n    }\n\n    const refs = castArray(this.rawValue);\n    return refs\n      .map((ref) => this.extractDisplayItem(ref))\n      .filter((item): item is { id: string; text: string } => item !== null);\n  });\n\n  protected allItems = computed(() => this.displayItems());\n\n  protected visibleItems = computed(() => {\n    const items = this.allItems();\n    return items.slice(0, this.maxVisible);\n  });\n\n  protected hasMoreItems = computed(() => {\n    return this.allItems().length > this.maxVisible;\n  });\n\n  protected remainingItemsCount = computed(() => {\n    return this.allItems().length - this.maxVisible;\n  });\n\n  //#endregion\n\n  //#region ----   Private Methods   ----\n\n  private async loadDefinition(): Promise<void> {\n    if (!this.providerName) {\n      return;\n    }\n\n    try {\n      const def = await this.definitionService.getDefinition(this.providerName);\n      this.definition.set(def);\n    } catch (error) {\n      console.error(`[MultiSourceSelectorColumn] Error loading definition '${this.providerName}':`, error);\n    }\n  }\n\n  private extractDisplayItem(ref: any): { id: string; text: string } | null {\n    if (!ref) {\n      return null;\n    }\n\n    const def = this.definition();\n\n    // If ref is already AXPMultiSourceRef format\n    if (ref.sourceKey && ref.displayName) {\n      return {\n        id: ref.refId || ref.sourceKey,\n        text: ref.displayName,\n      };\n    }\n\n    // If ref is object with id\n    if (typeof ref === 'object' && ref.id) {\n      const sourceKey = ref.sourceKey;\n      if (sourceKey && def) {\n        const source = def.sources.find((s) => s.key === sourceKey);\n        if (source) {\n          const displayText = this.getDisplayText(ref, source);\n          return {\n            id: ref.id,\n            text: displayText,\n          };\n        }\n      }\n\n      // Fallback\n      const displayText = ref.displayName || ref.title || ref.id || String(ref);\n      return {\n        id: ref.id,\n        text: displayText,\n      };\n    }\n\n    // If ref is primitive\n    return {\n      id: String(ref),\n      text: String(ref),\n    };\n  }\n\n  private getDisplayText(item: any, source: any): string {\n    if (!item) {\n      return '';\n    }\n\n    const template = source.displayFormat || this.displayFormat();\n    if (template) {\n      const formatted = this.formatService.format(template, 'string', item);\n      if (formatted) {\n        return formatted;\n      }\n    }\n\n    // Fallback to common display fields\n    return get(item, 'displayName') || get(item, 'title') || get(item, 'name') || String(item.id || item);\n  }\n\n  //#endregion\n}\n\n","export const FileUploaderWebhookKeys = {\n  Actions: 'file-uploader.actions',\n  Configure: 'file-uploader.configure',\n  BeforeFilesAdded: 'file-uploader.beforeFilesAdded',\n  AfterFilesAdded: 'file-uploader.afterFilesAdded',\n  FileItem: {\n    Actions: 'file-uploader.fileItem.actions',\n    BeforeDownload: 'file-uploader.fileItem.before-download',\n    AfterDownload: 'file-uploader.fileItem.after-download',\n    AfterEdit: 'file-uploader.fileItem.after-edit',\n    AfterRemove: 'file-uploader.fileItem.after-remove',\n    DownloadReference: 'file-uploader.fileItem.download-reference',\n  },\n  EditDialog: {\n    Params: {\n      BeforeRename: 'file-uploader.edit-dialog.params.before-rename',\n      AfterRename: 'file-uploader.edit-dialog.params.after-rename',\n    },\n    Groups: {\n      BeforeForm: 'file-uploader.edit-dialog.groups.before-form',\n      AfterForm: 'file-uploader.edit-dialog.groups.after-form',\n    },\n  },\n} as const;\n\n","\nimport { AXPCommand } from '@acorex/platform/runtime-contracts';\nimport { AXPExecuteCommandResult, AXPFileListItem } from '@acorex/platform/contracts';\n\nimport { inject, Injectable } from '@angular/core';\nimport { AXPLayoutBuilderService, IFormFieldBuilder, IFieldsetContainerBuilder, IFlexContainerBuilder } from '@acorex/platform/layout/builder';\nimport { AXTranslationService } from '@acorex/core/translation';\n\nimport { AXPHookService } from '@acorex/platform/core';\nimport { FileUploaderWebhookKeys } from '../../webhook.key';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPEditFileUploaderCommand implements AXPCommand<{ file: AXPFileListItem; plugins?: { name: string; options?: unknown }[]; excludePlugins?: string[]; enableTitleDescription?: boolean; isNewFile?: boolean }, AXPFileListItem> {\n\n    //#region ----   Services & Dependencies   ----\n    private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n    private readonly translationService = inject(AXTranslationService);\n    private readonly hooks = inject(AXPHookService);\n\n    //#endregion\n\n    //#region ----   Command Execution   ----\n\n    async execute(input: { file: AXPFileListItem; plugins?: { name: string; options?: unknown }[]; excludePlugins?: string[]; enableTitleDescription?: boolean; isNewFile?: boolean }): Promise<AXPExecuteCommandResult<AXPFileListItem>> {\n        if (input.file.readOnly === true && !input.isNewFile) {\n            const text = await this.translationService.translateAsync('@general:terms.common.readonly');\n            return {\n                success: false,\n                message: { text: `${text}.` },\n            };\n        }\n        try {\n            const updatedFile = await this.showEditDialog(\n                input.file,\n                input.plugins ?? [],\n                input.excludePlugins ?? [],\n                input.enableTitleDescription ?? false,\n                input.isNewFile ?? false,\n            );\n            return {\n                success: true,\n                data: updatedFile\n            };\n        } catch (error) {\n            return {\n                success: false,\n                message: {\n                    text: error instanceof Error ? error.message : 'Failed to edit file'\n                }\n            };\n        }\n    }\n\n    //#endregion\n\n    //#region ----   Dialog Logic   ----\n\n    private async showEditDialog(file: AXPFileListItem, plugins: { name: string; options?: unknown }[], excludePlugins: string[], enableTitleDescription: boolean, isNewFile: boolean): Promise<AXPFileListItem> {\n        const titleKey = isNewFile ? '@general:widgets.file-uploader.edit-dialog.add-title' : '@general:widgets.file-uploader.edit-dialog.title';\n        const title = await this.translationService.translateAsync(titleKey);\n        const nameLabel = await this.translationService.translateAsync('@general:terms.common.name');\n        const namePlaceholder = await this.translationService.translateAsync('@general:terms.common.name');\n        const titleLabel = await this.translationService.translateAsync('@general:terms.common.title');\n        const descriptionLabel = await this.translationService.translateAsync('@general:terms.common.description');\n        const submitLabel = await this.translationService.translateAsync('@general:actions.submit.title');\n\n        // Hooks: parameter insertion points\n        const beforeRenamePayload = await this.hooks.runAsync(FileUploaderWebhookKeys.EditDialog.Params.BeforeRename, {\n            file: file,\n            plugins,\n            excludePlugins,\n            items: [] as any[],\n        });\n        const afterRenamePayload = await this.hooks.runAsync(FileUploaderWebhookKeys.EditDialog.Params.AfterRename, {\n            file: file,\n            plugins,\n            excludePlugins,\n            items: [] as any[],\n        });\n\n        // Hooks: group insertion points around 'form'\n        const groupsBeforePayload = await this.hooks.runAsync(FileUploaderWebhookKeys.EditDialog.Groups.BeforeForm, {\n            file: file,\n            plugins,\n            excludePlugins,\n            groups: [] as any[],\n        });\n        const groupsAfterPayload = await this.hooks.runAsync(FileUploaderWebhookKeys.EditDialog.Groups.AfterForm, {\n            file: file,\n            plugins,\n            excludePlugins,\n            groups: [] as any[],\n        });\n\n        const dialogRef = await this.layoutBuilder\n            .create()\n            .dialog(dialog => {\n                dialog\n                    .setTitle(title)\n                    .setContext({ ...file })\n                    .content(contentBuilder => {\n                        // Add groups before form\n                        this.buildGroups(contentBuilder, groupsBeforePayload?.groups ?? []);\n\n                        // Main form container with rename field and hook items\n                        contentBuilder.flex(formFlex => {\n                            formFlex\n                                .setDirection('column')\n                                .setGap('16px');\n\n                            // Add items before rename\n                            this.buildFormFields(formFlex, beforeRenamePayload?.items ?? []);\n\n                            // Name field (label \"Name\" when enableTitleDescription, else \"Rename\")\n                            formFlex.formField(nameLabel, field => {\n                                field.path('name');\n                                field.textBox({\n                                    placeholder: namePlaceholder,\n                                    validations: [\n                                        { rule: 'maxLength', options: { value: 256 } }\n                                    ]\n                                });\n                            });\n\n                            // Title and description fields when enableTitleDescription is true\n                            if (enableTitleDescription) {\n                                formFlex.formField(titleLabel, field => {\n                                    field.path('title');\n                                    field.textBox({\n                                        placeholder: titleLabel,\n                                        validations: [\n                                            { rule: 'maxLength', options: { value: 256 } }\n                                        ]\n                                    });\n                                });\n                                formFlex.formField(descriptionLabel, field => {\n                                    field.path('description');\n                                    field.largeTextBox({\n                                        placeholder: descriptionLabel,\n                                        validations: [\n                                            { rule: 'maxLength', options: { value: 1024 } }\n                                        ]\n                                    });\n                                });\n                            }\n\n                            // Add items after rename\n                            this.buildFormFields(formFlex, afterRenamePayload?.items ?? []);\n                        });\n\n                        // Add groups after form\n                        this.buildGroups(contentBuilder, groupsAfterPayload?.groups ?? []);\n                    })\n                    .setCloseButton(true)\n                    .setActions(actions => {\n                        actions.custom({\n                            title: submitLabel,\n                            icon: 'fa-check',\n                            color: 'primary',\n                            command: { name: 'submit', options: { validate: true } }\n                        });\n                    });\n            })\n            .show();\n\n        const result = dialogRef.context();\n        \n        dialogRef.close();\n        return result;\n    }\n\n    //#endregion\n\n    //#region ----   Helper Methods   ----\n\n    /**\n     * Build form fields from hook items (old format parameters)\n     */\n    private buildFormFields(builder: IFlexContainerBuilder | IFieldsetContainerBuilder, items: any[]): void {\n        for (const item of items) {\n            if (!item || !item.path) {\n                continue;\n            }\n\n            const label = item.title || item.path;\n            const widgetType = item.widget?.type || 'text-editor';\n            const widgetOptions = item.widget?.options || {};\n\n            builder.formField(label, field => {\n                field.path(item.path);\n\n                // Apply mode if specified\n                if (item.mode) {\n                    field.mode(item.mode);\n                }\n\n                // Apply visibility if specified\n                if (item.visible !== undefined) {\n                    field.visible(item.visible);\n                }\n\n                // Apply readonly if specified\n                if (item.readonly !== undefined) {\n                    field.readonly(item.readonly);\n                }\n\n                // Apply disabled if specified\n                if (item.disabled !== undefined) {\n                    field.disabled(item.disabled);\n                }\n\n                // Convert widget based on type\n                this.applyWidget(field, widgetType, widgetOptions, item.validations);\n            });\n        }\n    }\n\n    /**\n     * Build groups/containers from hook groups (old format groups)\n     */\n    private buildGroups(containerBuilder: IFlexContainerBuilder, groups: any[]): void {\n        for (const group of groups) {\n            if (!group) {\n                continue;\n            }\n\n            // Use fieldset for groups with title, otherwise use flex\n            if (group.title) {\n                containerBuilder.fieldset(fieldset => {\n                    fieldset.setTitle(group.title);\n\n                    if (group.description) {\n                        fieldset.setDescription(group.description);\n                    }\n\n                    if (group.mode) {\n                        fieldset.mode(group.mode);\n                    }\n\n                    if (group.cols) {\n                        fieldset.setCols(group.cols);\n                    }\n\n                    // Build form fields from group parameters\n                    if (group.parameters && Array.isArray(group.parameters)) {\n                        this.buildFormFields(fieldset, group.parameters);\n                    }\n                });\n            } else {\n                containerBuilder.flex(flex => {\n                    flex.setDirection('column');\n                    flex.setGap('16px');\n\n                    if (group.mode) {\n                        flex.mode(group.mode);\n                    }\n\n                    // Build form fields from group parameters\n                    if (group.parameters && Array.isArray(group.parameters)) {\n                        this.buildFormFields(flex, group.parameters);\n                    }\n                });\n            }\n        }\n    }\n\n    /**\n     * Apply widget configuration to field based on widget type\n     */\n    private applyWidget(field: IFormFieldBuilder, widgetType: string, options: any, validations?: any[]): void {\n        // Convert validations from old format if needed\n        const fieldValidations = validations || options.validations || [];\n\n        // Handle different widget types\n        switch (widgetType) {\n            case 'text-editor':\n            case 'text-box':\n                field.textBox({\n                    ...options,\n                    validations: fieldValidations\n                });\n                break;\n\n            case 'large-text-editor':\n            case 'large-text-box':\n                field.largeTextBox({\n                    ...options,\n                    validations: fieldValidations\n                });\n                break;\n\n            case 'rich-text-editor':\n            case 'rich-text':\n                field.richText({\n                    ...options,\n                    validations: fieldValidations\n                });\n                break;\n\n            case 'number-editor':\n            case 'number-box':\n                field.numberBox({\n                    ...options,\n                    validations: fieldValidations\n                });\n                break;\n\n            case 'date-time-editor':\n            case 'date-time-box':\n                field.dateTimeBox({\n                    ...options,\n                    validations: fieldValidations\n                });\n                break;\n\n            case 'select-box':\n            case 'select-editor':\n                field.selectBox({\n                    ...options,\n                    validations: fieldValidations\n                });\n                break;\n\n            case 'lookup-box':\n            case 'lookup-editor':\n                field.lookupBox({\n                    ...options,\n                    validations: fieldValidations\n                });\n                break;\n\n            case 'toggle-switch':\n            case 'boolean-editor':\n                field.toggleSwitch({\n                    ...options,\n                    validations: fieldValidations\n                });\n                break;\n\n            default:\n                // For custom widgets or unknown types, use customWidget\n                field.customWidget(widgetType, {\n                    ...options,\n                    validations: fieldValidations\n                });\n                break;\n        }\n    }\n\n    //#endregion\n}\n","import { AsyncPipe, NgClass } from '@angular/common';\nimport { Component, OnDestroy, OnInit, computed, effect, inject, input, output, signal } from '@angular/core';\n\nimport { AXClickEvent } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport {\n  AXCFileUploaderCapabilities,\n  AXPFileStorageService,\n  AXPFileType,\n  AXPFileTypeProviderService,\n} from '@acorex/platform/common';\nimport { AXPFileListItem } from '@acorex/platform/contracts';\nimport { AXPHookService } from '@acorex/platform/core';\nimport { AXPStateMessageComponent } from '@acorex/platform/layout/components';\nimport { AXPCommandExecutor } from '@acorex/platform/runtime';\nimport { FileUploaderWebhookKeys } from '../webhook.key';\nimport type { AXPFileListLook } from './file-list.types';\n\n@Component({\n  selector: 'axp-file-list',\n  templateUrl: './file-list.component.html',\n  styleUrl: './file-list.component.scss',\n  host: {\n    '[class.--look-rows]': 'look() === \"rows\"',\n    '[class.--look-links]': 'look() === \"links\"',\n    '[class.--links-inline]': 'look() === \"links\" && linksLayout() === \"inline\"',\n  },\n  imports: [\n    // Angular\n    AsyncPipe,\n    NgClass,\n    // ACoreX\n    AXFormModule,\n    AXTextBoxModule,\n    AXButtonModule,\n    AXLabelModule,\n    AXCheckBoxModule,\n    AXDecoratorModule,\n    AXTranslationModule,\n    // Platform\n    AXPStateMessageComponent,\n  ],\n  providers: [],\n})\nexport class AXPFileListComponent implements OnInit, OnDestroy {\n  private static readonly DOWNLOAD_DEBOUNCE_MS = 500;\n\n  private fileTypeService = inject(AXPFileTypeProviderService);\n  private fileStorageService = inject(AXPFileStorageService);\n\n  private commandExecutor = inject(AXPCommandExecutor);\n  private hooks = inject(AXPHookService);\n\n  public isLoading = signal(true);\n  private fileTypes = signal<AXPFileType[]>([]);\n\n  public onRemove = output<AXPFileListItem>();\n  public onRevert = output<AXPFileListItem>();\n  public onRename = output<AXPFileListItem>();\n\n  readonly = input<boolean>(false);\n  fileEditable = input<boolean>(true);\n  /** When true, edit dialog shows name, title and description fields. Default false. */\n  enableTitleDescription = input<boolean>(false);\n  multiple = input<boolean>(true);\n\n  /** `rows`: file-type icons and action buttons; `links`: compact paperclip links (download on click). */\n  look = input<AXPFileListLook>('rows');\n\n  /** i18n key for links look label (template adds trailing colon). */\n  titleKey = input<string>('@general:widgets.file-uploader.attachments.title');\n\n  /** When false, links look omits the label (e.g. popover body). */\n  showLabel = input(true);\n\n  /** `inline`: label + divider; `menu`: compact list for popovers/panels. */\n  linksLayout = input<'inline' | 'menu'>('inline');\n\n  files = input<AXPFileListItem[]>([]);\n  // Plugin context (passed from parent widget)\n  plugins = input<{ name: string; options?: unknown }[] | undefined>(undefined);\n  excludePlugins = input<string[] | undefined>(undefined);\n  // Capabilities API for file operations (passed from parent widget)\n  capabilities = input<AXCFileUploaderCapabilities | undefined>(undefined);\n  /**\n   * All files should be displayed, even those with `deleted` status.\n   * The template will handle the visual differences based on the status.\n   */\n  displayFiles = computed(() => {\n    const list = this.files();\n    if (this.look() === 'links') {\n      return list.filter((file) => file.status !== 'deleted');\n    }\n    return list;\n  });\n\n  // Cache for per-file actions provided by hooks\n  private fileIdToActions = signal<Record<string, any[]>>({});\n  // Global actions from FileUploaderWebhookKeys.Actions hook\n  private globalActions = signal<any[]>([]);\n\n  /** Suppress duplicate downloads from double-click (two click events). */\n  private readonly recentDownloadAtByKey = new Map<string, number>();\n\n  // Clear cache when files change to reload actions\n  private filesChangeEffect = effect(() => {\n    // Track files changes to clear cache\n    this.files();\n    this.fileIdToActions.set({});\n  });\n\n  // Default actions that can be removed via hooks\n  private getDefaultActions(file: AXPFileListItem): any[] {\n    const defaultActions: any[] = [];\n\n    // Download action (always available, including in readonly mode)\n    defaultActions.push({\n      id: 'attachments.default.download',\n      plugin: 'attachments',\n      global: true,\n      textKey: '@general:actions.download.title',\n      icon: 'fa-light fa-download',\n      run: async (ctx: any) => {\n        await this.handleFileDownload(\n          { nativeEvent: { preventDefault: () => { }, stopPropagation: () => { } } } as any,\n          file,\n        );\n      },\n    });\n\n    // Edit and Remove actions (if editable and not widget/item readonly)\n    if (\n      !this.isItemInteractionLocked(file) &&\n      (this.fileEditable() || (!this.fileEditable() && file.status === 'attached'))\n    ) {\n      defaultActions.push({\n        id: 'attachments.default.edit',\n        plugin: 'attachments',\n        global: true,\n        textKey: '@general:actions.edit.title',\n        icon: 'fa-light fa-pencil',\n        run: async (ctx: any) => {\n          await this.handleFileEdit({ stopPropagation: () => { }, preventDefault: () => { } } as any, file);\n        },\n      });\n\n      defaultActions.push({\n        id: 'attachments.default.remove',\n        plugin: 'attachments',\n        global: true,\n        textKey: '@general:actions.delete.title',\n        icon: 'fa-light fa-trash-can',\n        run: async (ctx: any) => {\n          await this.handleFileRemove(\n            { nativeEvent: { preventDefault: () => { }, stopPropagation: () => { } } } as any,\n            file,\n          );\n        },\n      });\n    }\n\n    return defaultActions;\n  }\n\n  /** True when the widget is readonly or this file row is locked (`readOnly`). */\n  isItemInteractionLocked(file: AXPFileListItem): boolean {\n    return this.readonly() || file.readOnly === true;\n  }\n\n  public actionsFor(file: AXPFileListItem, index: number): any[] {\n    const key = file.id ?? String(index);\n    const map = this.fileIdToActions();\n    if (map[key]) {\n      return map[key];\n    }\n    // Lazy-load actions via hooks\n    this.loadActionsFor(file, index).catch(console.error);\n    return [];\n  }\n\n  private async loadActionsFor(file: AXPFileListItem, index: number): Promise<void> {\n    const key = file.id ?? String(index);\n\n    // Start with default actions\n    const defaultActions = this.getDefaultActions(file);\n\n    // Get per-file actions from FileUploaderWebhookKeys.FileItem.Actions hook\n    // Note: globalActions are only for toolbar, not for per-file actions\n    const fileItemPayload = await this.hooks.runAsync<any>(FileUploaderWebhookKeys.FileItem.Actions, {\n      item: file,\n      index,\n      itemReadOnly: file.readOnly === true,\n      itemInteractionLocked: this.isItemInteractionLocked(file),\n      plugins: this.plugins() ?? [],\n      excludePlugins: this.excludePlugins() ?? [],\n      capabilities: this.capabilities(),\n      actions: [],\n    });\n\n    // Combine all actions: default + file-item specific (exclude globalActions from per-file items)\n    const allActions = [...defaultActions, ...(fileItemPayload?.actions ?? [])];\n\n    // Filter actions based on plugins and excludePlugins\n    const enabledPlugins = this.plugins()?.map((p) => p.name) ?? [];\n    const excludedPlugins = this.excludePlugins() ?? [];\n\n    const filteredActions = allActions.filter((action) => {\n      // If action has an id and is in excluded list, remove it\n      if (action.id && excludedPlugins.some((excluded) => action.id?.includes(excluded))) {\n        return false;\n      }\n\n      // If plugin is excluded, remove it\n      if (excludedPlugins.includes(action.plugin)) {\n        return false;\n      }\n\n      // If no enabled plugins, only show global actions\n      if (!enabledPlugins || enabledPlugins.length === 0) {\n        return action.global === true;\n      }\n\n      // Show if plugin is enabled or action is global\n      return enabledPlugins.includes(action.plugin) || action.global === true;\n    });\n\n    const next = { ...this.fileIdToActions() };\n    next[key] = filteredActions;\n    this.fileIdToActions.set(next);\n  }\n\n  async ngOnInit(): Promise<void> {\n    if (this.look() === 'links') {\n      this.isLoading.set(false);\n      return;\n    }\n    this.fileTypes.set(await this.fileTypeService.items());\n    await this.loadGlobalActions();\n    this.isLoading.set(false);\n  }\n\n  private async loadGlobalActions(): Promise<void> {\n    try {\n      const payload = await this.hooks.runAsync<any>(FileUploaderWebhookKeys.Actions, {\n        plugins: this.plugins() ?? [],\n        excludePlugins: this.excludePlugins() ?? [],\n        capabilities: this.capabilities(),\n        actions: [],\n      });\n      this.globalActions.set(payload?.actions ?? []);\n    } catch (error) {\n      console.error('Error loading global actions:', error);\n      this.globalActions.set([]);\n    }\n  }\n\n  private shouldSkipDuplicateDownload(file: AXPFileListItem): boolean {\n    const key = this.downloadDedupeKey(file);\n    const now = Date.now();\n    const last = this.recentDownloadAtByKey.get(key);\n    if (last != null && now - last < AXPFileListComponent.DOWNLOAD_DEBOUNCE_MS) {\n      return true;\n    }\n    this.recentDownloadAtByKey.set(key, now);\n    return false;\n  }\n\n  private downloadDedupeKey(file: AXPFileListItem): string {\n    if (typeof file.id === 'string' && file.id.trim()) {\n      return file.id;\n    }\n    const src = file.source;\n    if (src?.kind === 'fileId' && typeof src.value === 'string' && src.value.trim()) {\n      return src.value;\n    }\n    return file.name;\n  }\n\n  /** Ensures `source` is set for links look and legacy rows that only carry storage id on `id`. */\n  private resolveFileForDownload(file: AXPFileListItem): AXPFileListItem {\n    if (file.source) {\n      return file;\n    }\n    if (typeof file.id === 'string' && file.id.trim()) {\n      return { ...file, source: { kind: 'fileId', value: file.id } };\n    }\n    return file;\n  }\n\n  protected getFileInfo(fileName: string): { icon: string; type: string } {\n    const extension = fileName.split('.').pop()?.toLowerCase() || '';\n    const extensions = this.fileTypes().flatMap((t) => t.extensions);\n    const fileType = extensions.find((e) => e.name === extension);\n    return {\n      icon: fileType?.icon || 'fa-light fa-file',\n      type: fileType?.name || 'Unknown',\n    };\n  }\n\n  /**\n   * Double-click on a file row (rows look) or link row triggers download.\n   */\n  protected handleFileRowActivate(event: Event, file: AXPFileListItem): void {\n    if (file.status === 'deleted') {\n      return;\n    }\n    void this.handleFileDownload(event, file);\n  }\n\n  async handleFileDownload(event: AXClickEvent | Event, file: AXPFileListItem) {\n    const nativeEvent = event instanceof Event ? event : event.nativeEvent;\n    nativeEvent.preventDefault();\n    nativeEvent.stopPropagation();\n\n    if (this.shouldSkipDuplicateDownload(file)) {\n      return;\n    }\n\n    try {\n      await this.hooks.runAsync<any>(FileUploaderWebhookKeys.FileItem.BeforeDownload, {\n        file,\n        plugins: this.plugins() ?? [],\n        excludePlugins: this.excludePlugins() ?? [],\n        capabilities: this.capabilities(),\n      });\n    } catch { }\n    const resolved = this.resolveFileForDownload(file);\n    const source = resolved.source;\n    if (!source) {\n      console.error('File source is undefined, cannot download.', file);\n      return;\n    }\n\n    const triggerDownload = (blob: Blob, fileName: string) => {\n      const url = URL.createObjectURL(blob);\n      const link = document.createElement('a');\n      link.href = url;\n      link.download = fileName;\n      document.body.appendChild(link);\n      link.click();\n      document.body.removeChild(link);\n      URL.revokeObjectURL(url);\n    };\n\n    switch (source.kind) {\n      case 'blob':\n        if (source.value instanceof Blob) {\n          triggerDownload(source.value, resolved.name ?? 'download');\n        } else {\n          console.error('Source kind is blob, but value is not a Blob.', file);\n        }\n        break;\n      case 'fileId':\n        if (typeof source.value === 'string') {\n          try {\n            const fileInfo = await this.fileStorageService.getInfo(source.value);\n            if (fileInfo && fileInfo.url) {\n              const link = document.createElement('a');\n              link.href = fileInfo.url;\n              link.download = resolved.name ?? fileInfo.name ?? 'download';\n              link.target = '_blank';\n              document.body.appendChild(link);\n              link.click();\n              document.body.removeChild(link);\n            } else if (fileInfo && (fileInfo as any).binary instanceof Blob) {\n              triggerDownload((fileInfo as any).binary, resolved.name ?? fileInfo.name ?? 'download');\n            } else {\n              console.error('Could not retrieve file for download from fileId:', fileInfo);\n            }\n          } catch (error) {\n            console.error('Error downloading file by fileId:', source.value, error);\n          }\n        } else {\n          console.error('Source kind is fileId, but value is not a string ID.', file);\n        }\n        break;\n      case 'url':\n        if (typeof source.value === 'string') {\n          const link = document.createElement('a');\n          link.href = source.value;\n          link.download = resolved.name ?? 'download';\n          link.target = '_blank';\n          document.body.appendChild(link);\n          link.click();\n          document.body.removeChild(link);\n        } else {\n          console.error('Source kind is url, but value is not a string URL.', file);\n        }\n        break;\n      case 'reference':\n        if (\n          source.value &&\n          typeof source.value === 'object' &&\n          'id' in source.value &&\n          'type' in source.value\n        ) {\n          try {\n            const result = await this.hooks.runAsync<any>(FileUploaderWebhookKeys.FileItem.DownloadReference, {\n              file: resolved,\n              reference: source.value,\n              plugins: this.plugins() ?? [],\n              excludePlugins: this.excludePlugins() ?? [],\n              capabilities: this.capabilities(),\n              fileInfo: undefined,\n            });\n            if (result?.fileInfo) {\n              if (result.fileInfo.url) {\n                const link = document.createElement('a');\n                link.href = result.fileInfo.url;\n                link.download = resolved.name ?? result.fileInfo.name ?? 'download';\n                link.target = '_blank';\n                document.body.appendChild(link);\n                link.click();\n                document.body.removeChild(link);\n              } else if (result.fileInfo.binary instanceof Blob) {\n                triggerDownload(result.fileInfo.binary, resolved.name ?? result.fileInfo.name ?? 'download');\n              } else {\n                console.error('Could not retrieve file for download from reference:', result.fileInfo);\n              }\n            } else {\n              console.error('Hook did not return fileInfo for reference download.', file);\n            }\n          } catch (error) {\n            console.error('Error downloading file by reference:', source.value, error);\n          }\n        } else {\n          console.error('Source kind is reference, but value is not a valid AXPEntityReference.', file);\n        }\n        break;\n      case 'preview':\n      case 'none':\n      default:\n        console.error(`Download not supported for source kind: ${source.kind}`, file);\n        break;\n    }\n    try {\n      await this.hooks.runAsync<any>(FileUploaderWebhookKeys.FileItem.AfterDownload, {\n        file: resolved,\n        plugins: this.plugins() ?? [],\n        excludePlugins: this.excludePlugins() ?? [],\n        capabilities: this.capabilities(),\n      });\n    } catch { }\n  }\n\n  async handleFileRemove(event: AXClickEvent, file: AXPFileListItem) {\n    event.nativeEvent.preventDefault();\n    event.nativeEvent.stopPropagation();\n    this.onRemove.emit(file);\n    try {\n      await this.hooks.runAsync<any>(FileUploaderWebhookKeys.FileItem.AfterRemove, {\n        file,\n        plugins: this.plugins() ?? [],\n        excludePlugins: this.excludePlugins() ?? [],\n        capabilities: this.capabilities(),\n      });\n    } catch { }\n  }\n\n  /**\n   * Handle revert action – emit the file so parent components can update the status.\n   */\n  handleFileRevert(event: AXClickEvent, file: AXPFileListItem) {\n    if (this.isItemInteractionLocked(file)) {\n      return;\n    }\n    event.nativeEvent.preventDefault();\n    event.nativeEvent.stopPropagation();\n    this.onRevert.emit(file);\n  }\n\n  /**\n   * Handle file edit action – open rename popup\n   */\n  async handleFileEdit(event: any, file: AXPFileListItem) {\n    //   if (event instanceof MouseEvent) {\n    event.stopPropagation();\n    event.preventDefault();\n    // } else {\n    //   event.nativeEvent.preventDefault();\n    //   event.nativeEvent.stopPropagation();\n    // }\n    if (this.isItemInteractionLocked(file)) {\n      return;\n    }\n\n    const commandResult = await this.commandExecutor.execute<any, AXPFileListItem>('FileUploader:Edit', {\n      file,\n      plugins: this.plugins() ?? [],\n      excludePlugins: this.excludePlugins() ?? [],\n      enableTitleDescription: this.enableTitleDescription(),\n    });\n    if (!commandResult?.success || !commandResult.data) {\n      return;\n    }\n    const newFile = commandResult.data;\n    this.onRename.emit(newFile);\n    try {\n      await this.hooks.runAsync<any>(FileUploaderWebhookKeys.FileItem.AfterEdit, {\n        file: newFile ?? file,\n        previous: file,\n        plugins: this.plugins() ?? [],\n        excludePlugins: this.excludePlugins() ?? [],\n        capabilities: this.capabilities(),\n      });\n    } catch { }\n  }\n\n  ngOnDestroy(): void {\n    this.recentDownloadAtByKey.clear();\n  }\n\n  public async runAction(action: any): Promise<void> {\n    try {\n      await action.run(this.capabilities());\n    } catch (e) {\n      console.error(e);\n    }\n  }\n\n  protected getActionColor(action: any): string {\n    // Map default action IDs to colors\n    if (action.id === 'attachments.default.download') {\n      return 'primary';\n    }\n    if (action.id === 'attachments.default.edit') {\n      return 'secondary';\n    }\n    if (action.id === 'attachments.default.remove') {\n      return 'danger';\n    }\n    // Default color for custom actions\n    return action.color ?? 'primary';\n  }\n}\n","@if (look() === 'links') {\n  @if (displayFiles().length > 0) {\n    <div class=\"__links\">\n      @if (showLabel()) {\n        <span class=\"__links-label\">{{ titleKey() | translate | async }}:</span>\n      }\n      <ul class=\"__links-list\">\n        @for (file of displayFiles(); track file.id ?? $index) {\n          <li>\n            <button\n              type=\"button\"\n              class=\"__link-item\"\n              (click)=\"handleFileDownload($event, file)\"\n              (dblclick)=\"handleFileRowActivate($event, file)\"\n            >\n              <i class=\"fa-light fa-paperclip ax-flex-shrink-0\"></i>\n              <span class=\"ax-min-w-0 ax-break-all\">{{ file.name }}</span>\n            </button>\n          </li>\n        }\n      </ul>\n    </div>\n  } @else {\n    <div class=\"__empty-state __empty-state--links\">\n      <axp-state-message\n        icon=\"fa-light fa-folder-open\"\n        [title]=\"'@general:widgets.file-uploader.empty-state.title'\"\n        [description]=\"'@general:widgets.file-uploader.empty-state.description'\"\n        look=\"minimal\"\n      />\n    </div>\n  }\n} @else {\n  @for (file of displayFiles(); track $index) {\n    <div\n      class=\"__item\"\n      [ngClass]=\"{\n        '--removed': file.status === 'deleted',\n        '--attached': file.status === 'attached',\n        '--with-meta': enableTitleDescription(),\n        '--item-readonly': file.readOnly === true,\n        '--downloadable': file.status !== 'deleted',\n      }\"\n      (dblclick)=\"handleFileRowActivate($event, file)\"\n    >\n      <div class=\"__icon\">\n        <i class=\"fa-fw {{ getFileInfo(file.name).icon }} fa-solid\"></i>\n      </div>\n      @if (enableTitleDescription()) {\n        <div class=\"__content\">\n          <div class=\"__primary\">{{ file.name }}{{ file.title?.trim() ? ' - ' + file.title : '' }}</div>\n          @if (file.description?.trim()) {\n            <div class=\"__secondary\">{{ file.description }}</div>\n          }\n        </div>\n      } @else {\n        <div class=\"__name\">{{ file.name }}</div>\n      }\n      <div class=\"__actions\" (dblclick)=\"$event.stopPropagation()\">\n        @if (file.status === 'deleted' && multiple() && !isItemInteractionLocked(file)) {\n          <ax-button [look]=\"'blank'\" class=\"ax-sm\" color=\"warning\" (onClick)=\"handleFileRevert($event, file)\">\n            <ax-icon class=\"fa-light fa-rotate-left\"></ax-icon>\n          </ax-button>\n        } @else if (file.status !== 'deleted') {\n          @for (action of actionsFor(file, $index); track action.id ?? action.textKey ?? action.text ?? $index) {\n            <ax-button\n              [look]=\"'blank'\"\n              class=\"ax-sm\"\n              [color]=\"getActionColor(action)\"\n              (onClick)=\"runAction(action)\"\n            >\n              @if (action.icon) {\n                <ax-icon class=\"{{ action.icon }}\"></ax-icon>\n              }\n            </ax-button>\n          }\n        }\n      </div>\n    </div>\n  } @empty {\n    <div class=\"__empty-state\">\n      <axp-state-message\n        icon=\"fa-light fa-folder-open\"\n        [title]=\"'@general:widgets.file-uploader.empty-state.title'\"\n        [description]=\"'@general:widgets.file-uploader.empty-state.description'\"\n      >\n      </axp-state-message>\n    </div>\n  }\n}\n","import { isArray } from 'lodash-es';\nimport type { AXPFileListItem } from '@acorex/platform/contracts';\n\n//#region ----   Attachment fingerprint (no blob comparison)   ----\n\n/** Stable fingerprint for one file row; ignores Blob binary content. */\nexport function fingerprintAttachmentItem(item: unknown): string {\n  if (!item || typeof item !== 'object') {\n    return '';\n  }\n  const file = item as Record<string, unknown>;\n  const source = file['source'] as Record<string, unknown> | undefined;\n  const kind = source?.['kind'];\n  let sourceToken = '';\n  if (kind === 'blob') {\n    const blob = source?.['value'];\n    const size = blob instanceof Blob ? blob.size : file['size'];\n    sourceToken = `blob:${size ?? 0}`;\n  } else if (kind === 'fileId') {\n    sourceToken = `fileId:${String(source?.['value'] ?? '')}`;\n  } else {\n    sourceToken = `${String(kind ?? '')}:${String(source?.['value'] ?? '')}`;\n  }\n  return [\n    String(file['id'] ?? ''),\n    String(file['name'] ?? ''),\n    String(file['status'] ?? ''),\n    String(file['size'] ?? ''),\n    sourceToken,\n    String(file['title'] ?? ''),\n    String(file['description'] ?? ''),\n  ].join('|');\n}\n\n/** Order-independent fingerprint for attachment lists. */\nexport function fingerprintAttachments(value: unknown): string {\n  if (!isArray(value) || value.length === 0) {\n    return '';\n  }\n  return value.map(fingerprintAttachmentItem).sort().join(';');\n}\n\n/** Identity key for semantic compare (ignores blob/source shape differences on load, includes status). */\nfunction attachmentIdentityKey(item: unknown): string {\n  if (!item || typeof item !== 'object') {\n    return '';\n  }\n  const file = item as Record<string, unknown>;\n  const source = file['source'] as Record<string, unknown> | undefined;\n  const persistedId =\n    source?.['kind'] === 'fileId' ? String(source['value'] ?? '') : String(file['id'] ?? '');\n  return [persistedId, String(file['name'] ?? ''), String(file['status'] ?? '')].join('|');\n}\n\n/** True when lists represent the same attachments regardless of blob vs fileId shape. */\nexport function attachmentsSemanticallyEqual(a: unknown, b: unknown): boolean {\n  const listA = isArray(a) ? a : [];\n  const listB = isArray(b) ? b : [];\n  if (listA.length !== listB.length) {\n    return false;\n  }\n  const keysA = listA.map(attachmentIdentityKey).sort();\n  const keysB = listB.map(attachmentIdentityKey).sort();\n  return keysA.every((key, index) => key === keysB[index]);\n}\n\n/** Attachment rows that remain after a successful save (drops soft-deleted rows). */\nexport function committedAttachments(value: unknown): AXPFileListItem[] {\n  if (!isArray(value)) {\n    return [];\n  }\n  return value.filter((item): item is AXPFileListItem => {\n    if (!item || typeof item !== 'object') {\n      return false;\n    }\n    return (item as AXPFileListItem).status !== 'deleted';\n  });\n}\n\n/**\n * Post-save attachment list: drops soft-deleted rows and promotes pending `attached` rows to `uploaded`\n * so deferred-save pages get the same delete/revert behavior as after a full reload.\n */\nexport function persistedAttachments(value: unknown): AXPFileListItem[] {\n  return committedAttachments(value).map((item) =>\n    item.status === 'attached' ? { ...item, status: 'uploaded' as const } : item,\n  );\n}\n\n//#endregion\n","import { AXPFileStorageService } from '@acorex/platform/common';\nimport { AXPFileListItem, AXPFileManyStorageInfo } from '@acorex/platform/contracts';\nimport { castArray, get, has, isString } from 'lodash-es';\n\nconst FILE_PREFIX = 'file:';\nconst DOCUMENT_PREFIX = 'document:';\nconst REFERENCE_PREFIX = 'reference:';\n\n//#region ----   Types   ----\n\nexport interface AXPFileUploaderEntityFilesScope {\n  name: string;\n  id: string;\n  field: string;\n}\n\ntype EntityAttachmentFieldSource = {\n  extensions?: { attachments?: Record<string, unknown> };\n  properties?: Array<{ name: string; schema?: { interface?: { type?: string } } }>;\n};\n\n//#endregion\n\n//#region ----   Helpers   ----\n\nexport function isFileListItem(value: unknown): value is AXPFileListItem {\n  return value != null && typeof value === 'object' && typeof get(value, 'name') === 'string';\n}\n\n/** Whether a list-row value represents one attachment (file item, id reference, or fileId source). */\nexport function isAttachmentListEntry(value: unknown): boolean {\n  if (isFileListItem(value)) {\n    return true;\n  }\n  if (isString(value) && value.trim().length > 0) {\n    return true;\n  }\n  if (value != null && typeof value === 'object') {\n    const id: unknown = get(value, 'id');\n    if (typeof id === 'string' && id.trim().length > 0) {\n      return true;\n    }\n    const fileId: unknown = get(value, 'source.value');\n    if (get(value, 'source.kind') === 'fileId' && typeof fileId === 'string' && fileId.trim().length > 0) {\n      return true;\n    }\n    const entryName: unknown = get(value, 'name');\n    if (typeof entryName === 'string' && entryName.trim().length > 0) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction parseAttachmentFieldEntries(fieldValue: unknown): unknown[] {\n  if (fieldValue == null) {\n    return [];\n  }\n  if (isString(fieldValue)) {\n    const trimmed = fieldValue.trim();\n    if (!trimmed) {\n      return [];\n    }\n    if (trimmed.startsWith('[') || trimmed.startsWith('{')) {\n      try {\n        const parsed = JSON.parse(trimmed) as unknown;\n        return castArray(parsed);\n      } catch {\n        return [trimmed];\n      }\n    }\n    return [trimmed];\n  }\n  return castArray(fieldValue);\n}\n\nexport function attachmentFieldCount(fieldValue: unknown): number {\n  return parseAttachmentFieldEntries(fieldValue).filter(isAttachmentListEntry).length;\n}\n\nexport function normalizeEntityFieldToFileList(fieldValue: unknown): AXPFileListItem[] {\n  return parseAttachmentFieldEntries(fieldValue).filter(isFileListItem) as AXPFileListItem[];\n}\n\n/** Whether a stored value is a persisted file/document/reference token. */\nexport function isAttachmentStorageRef(value: unknown): value is string {\n  return (\n    isString(value) &&\n    (value.startsWith(FILE_PREFIX) ||\n      value.startsWith(DOCUMENT_PREFIX) ||\n      value.startsWith(REFERENCE_PREFIX))\n  );\n}\n\n/** True when the field has entries that cannot be shown without hydration (e.g. mixed `file:` refs + objects). */\nexport function attachmentNeedsHydration(fieldValue: unknown): boolean {\n  const entries = parseAttachmentFieldEntries(fieldValue);\n  const count = entries.filter(isAttachmentListEntry).length;\n  if (count === 0) {\n    return false;\n  }\n  const normalizedCount = entries.filter(isFileListItem).length;\n  if (normalizedCount < count) {\n    return true;\n  }\n  return entries.some(isAttachmentStorageRef);\n}\n\nfunction removeFilePrefix(prefixedId: string): string {\n  return prefixedId.startsWith(FILE_PREFIX) ? prefixedId.substring(FILE_PREFIX.length) : prefixedId;\n}\n\nfunction storageInfoToFileListItem(info: {\n  fileId: string;\n  name?: string;\n  size?: number;\n  title?: string;\n  description?: string;\n  readOnly?: boolean;\n}): AXPFileListItem {\n  const item: AXPFileListItem = {\n    id: info.fileId,\n    name: info.name || 'Unknown',\n    size: info.size,\n    status: 'uploaded',\n    source: { kind: 'fileId', value: info.fileId },\n  };\n  if (info.title !== undefined) {\n    item.title = info.title;\n  }\n  if (info.description !== undefined) {\n    item.description = info.description;\n  }\n  if (info.readOnly === true) {\n    item.readOnly = true;\n  }\n  return item;\n}\n\n/**\n * Resolves inline attachment field values to displayable file list items.\n * Handles mixed arrays of `file:` refs and already-hydrated AXPFileListItem objects.\n */\nexport async function hydrateAttachmentFieldToFileList(\n  fieldValue: unknown,\n  fileStorage: AXPFileStorageService,\n): Promise<AXPFileListItem[]> {\n  const entries = parseAttachmentFieldEntries(fieldValue).filter(isAttachmentListEntry);\n  if (entries.length === 0) {\n    return [];\n  }\n\n  const fileIds = entries\n    .filter(isAttachmentStorageRef)\n    .filter((ref) => ref.startsWith(FILE_PREFIX))\n    .map(removeFilePrefix);\n\n  const infoMap = new Map<string, AXPFileManyStorageInfo>();\n  if (fileIds.length > 0) {\n    const infos = await fileStorage.findMany(fileIds);\n    for (const info of infos) {\n      infoMap.set(info.fileId, info);\n    }\n  }\n\n  const result: AXPFileListItem[] = [];\n  for (const entry of entries) {\n    if (isFileListItem(entry)) {\n      result.push(entry);\n      continue;\n    }\n    if (isAttachmentStorageRef(entry) && entry.startsWith(FILE_PREFIX)) {\n      const id = removeFilePrefix(entry);\n      const info = infoMap.get(id);\n      if (info) {\n        result.push(storageInfoToFileListItem(info));\n      } else {\n        result.push({\n          id,\n          name: 'Unknown File',\n          status: 'remote',\n          source: { kind: 'fileId', value: id },\n        });\n      }\n      continue;\n    }\n    if (isAttachmentStorageRef(entry)) {\n      result.push({\n        id: entry,\n        name: 'File',\n        status: 'remote',\n        source: { kind: 'fileId', value: entry },\n      });\n    }\n  }\n  return result;\n}\n\n/** Attachment field path from widget options or column path fallback. */\nexport function resolveAttachmentFieldPath(\n  options: Record<string, unknown>,\n  fieldFallback?: string,\n): string | undefined {\n  const entityBlock: unknown = get(options, 'entity');\n  const fromEntityBlock =\n    entityBlock != null && typeof entityBlock === 'object'\n      ? get(entityBlock, 'field')\n      : undefined;\n  const field: unknown = get(options, 'entityField') ?? fromEntityBlock ?? fieldFallback;\n  if (typeof field !== 'string' || !field.trim()) {\n    return undefined;\n  }\n  return field.trim();\n}\n\n/** True when the list row includes the attachment field (even when empty). */\nexport function isAttachmentFieldPresentOnRow(\n  rowData: Record<string, unknown> | undefined,\n  fieldPath: string | undefined,\n): boolean {\n  if (!fieldPath || !rowData) {\n    return false;\n  }\n  return has(rowData, fieldPath);\n}\n\n/** Resolve entity scope for column popup / load when widget options carry list-row expressions. */\nfunction resolveEntityId(\n  entityIdOption: unknown,\n  rowData: Record<string, unknown> | undefined,\n): string | undefined {\n  if (isString(entityIdOption) && entityIdOption.trim() && !entityIdOption.includes('{{')) {\n    return entityIdOption.trim();\n  }\n  const rowId = get(rowData, 'id') ?? get(rowData, 'Id');\n  if (rowId != null && String(rowId).trim()) {\n    return String(rowId).trim();\n  }\n  return undefined;\n}\n\nexport function resolveFileUploaderEntityScope(\n  options: Record<string, unknown>,\n  rowData: Record<string, unknown> | undefined,\n  fieldFallback?: string,\n): AXPFileUploaderEntityFilesScope | undefined {\n  const entityBlock: unknown = get(options, 'entity');\n  if (entityBlock != null && typeof entityBlock === 'object') {\n    const name: unknown = get(entityBlock, 'name');\n    const field: unknown = get(entityBlock, 'field') ?? fieldFallback;\n    const entityId = resolveEntityId(get(entityBlock, 'id'), rowData);\n    if (\n      typeof name === 'string' &&\n      name.trim() &&\n      entityId &&\n      typeof field === 'string' &&\n      field.trim()\n    ) {\n      return { name: name.trim(), id: entityId, field: field.trim() };\n    }\n  }\n\n  const entityName: unknown = get(options, 'entityName') ?? get(options, 'entityRef');\n  const field: unknown = get(options, 'entityField') ?? fieldFallback;\n  const entityId = resolveEntityId(get(options, 'entityId'), rowData);\n\n  if (\n    typeof entityName !== 'string' ||\n    !entityName.trim() ||\n    !entityId ||\n    typeof field !== 'string' ||\n    !field.trim()\n  ) {\n    return undefined;\n  }\n\n  return { name: entityName.trim(), id: entityId, field: field.trim() };\n}\n\n/**\n * Attachment field names registered by the attachments plugin (`extensions.attachments`)\n * or properties using the `attachments` widget interface.\n */\nexport function resolveEntityAttachmentFieldNames(\n  def: EntityAttachmentFieldSource | null | undefined,\n): Set<string> {\n  const fields = new Set<string>();\n  const attachCfg = def?.extensions?.attachments;\n  if (attachCfg != null && typeof attachCfg === 'object') {\n    for (const key of Object.keys(attachCfg)) {\n      if (key.trim()) {\n        fields.add(key);\n      }\n    }\n  }\n  const props = def?.properties ?? [];\n  for (const prop of props) {\n    if (prop?.name?.trim() && prop.schema?.interface?.type === 'attachments') {\n      fields.add(prop.name);\n    }\n  }\n  return fields;\n}\n\n/** True when a hydrated key path belongs to a lazy attachment plugin field (top-level property). */\nexport function isLazyAttachmentFieldPath(keyPath: string, lazyFields: ReadonlySet<string>): boolean {\n  if (!lazyFields.size || !keyPath.trim()) {\n    return false;\n  }\n  const root = keyPath.split(/[.[\\]]/)[0];\n  return lazyFields.has(root);\n}\n\n//#endregion\n","/** Trace namespace for file-uploader attachment column, load/save, and hydration. */\nexport const FILE_UPLOADER_TRACE_NS = 'file-uploader-attachments';\n","import { AXPFileListItem } from '@acorex/platform/contracts';\nimport { AXPDebugService } from '@acorex/platform/core';\nimport { AXPQueryExecutor } from '@acorex/platform/runtime';\nimport type { AXPFileUploaderEntityFilesScope } from './file-uploader-entity-files.util';\nimport type { AXPFileUploaderLoadFilesResult } from './file-uploader-load-files.query';\nimport { FILE_UPLOADER_TRACE_NS } from './file-uploader-trace.constants';\n\n/**\n * Loads and hydrates entity attachment field values via `FileUploader:LoadFiles`.\n * Used when read middleware keeps storage refs and the UI mounts the attachments widget.\n */\nexport async function fetchHydratedEntityAttachments(\n  queryExecutor: AXPQueryExecutor,\n  scope: AXPFileUploaderEntityFilesScope,\n): Promise<AXPFileListItem[]> {\n  AXPDebugService.instance?.trace(\n    FILE_UPLOADER_TRACE_NS,\n    'lazy-hydrate',\n    'Loading attachments on widget display',\n    () => ({\n      entity: scope.name,\n      entityId: scope.id,\n      field: scope.field,\n    }),\n  );\n\n  try {\n    const result = await queryExecutor.fetch<AXPFileUploaderEntityFilesScope, AXPFileUploaderLoadFilesResult>(\n      'FileUploader:LoadFiles',\n      scope,\n    );\n    const files = result?.files ?? [];\n\n    AXPDebugService.instance?.trace(\n      FILE_UPLOADER_TRACE_NS,\n      'lazy-hydrate',\n      'Attachments loaded on widget display',\n      () => ({\n        entity: scope.name,\n        entityId: scope.id,\n        field: scope.field,\n        fileCount: files.length,\n        fileNames: files.map((file) => file.name),\n      }),\n    );\n\n    return files;\n  } catch (error) {\n    AXPDebugService.instance?.warn(\n      FILE_UPLOADER_TRACE_NS,\n      'lazy-hydrate',\n      'Failed to load attachments on widget display',\n      () => ({\n        entity: scope.name,\n        entityId: scope.id,\n        field: scope.field,\n        error: error instanceof Error ? error.message : String(error),\n      }),\n    );\n    throw error;\n  }\n}\n","import { AXPQuery } from '@acorex/platform/runtime-contracts';\nimport { AXPFileStorageService } from '@acorex/platform/common';\nimport { AXPFileListItem } from '@acorex/platform/contracts';\nimport { AXPDebugService } from '@acorex/platform/core';\nimport { AXMEntityCrudServiceImpl } from '../../entity-storage-service';\n\nimport { inject, Injectable, Injector, runInInjectionContext } from '@angular/core';\nimport { get } from 'lodash-es';\nimport {\n  attachmentFieldCount,\n  attachmentNeedsHydration,\n  AXPFileUploaderEntityFilesScope,\n  hydrateAttachmentFieldToFileList,\n  normalizeEntityFieldToFileList,\n} from './file-uploader-entity-files.util';\nimport { FILE_UPLOADER_TRACE_NS } from './file-uploader-trace.constants';\n\nexport interface AXPFileUploaderLoadFilesInput extends AXPFileUploaderEntityFilesScope {}\n\nexport interface AXPFileUploaderLoadFilesResult {\n  files: AXPFileListItem[];\n  /** Count including file-id references, not only hydrated AXPFileListItem rows. */\n  count: number;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXPFileUploaderLoadFilesQuery\n  implements AXPQuery<AXPFileUploaderLoadFilesInput, AXPFileUploaderLoadFilesResult>\n{\n  //#region ----   Services & Dependencies   ----\n\n  private readonly injector = inject(Injector);\n  private readonly debug = inject(AXPDebugService);\n\n  //#endregion\n\n  //#region ----   Query Execution   ----\n\n  async fetch(input: AXPFileUploaderLoadFilesInput): Promise<AXPFileUploaderLoadFilesResult> {\n    const { name: entityRef, id: entityId, field } = input;\n\n    if (!entityRef?.trim() || !entityId?.trim() || !field?.trim()) {\n      throw new Error('entityRef, entityId, and field are required.');\n    }\n\n    const record = await runInInjectionContext(this.injector, () => {\n      const dataService = new AXMEntityCrudServiceImpl(entityRef);\n      return dataService.getOne(entityId);\n    });\n\n    const fieldValue = get(record, field);\n    const count = attachmentFieldCount(fieldValue);\n    const inlineFiles = normalizeEntityFieldToFileList(fieldValue);\n    const needsHydration = attachmentNeedsHydration(fieldValue);\n\n    this.debug.trace(FILE_UPLOADER_TRACE_NS, 'load-files', 'Fetched entity attachment field', () => ({\n      entityRef,\n      entityId,\n      field,\n      count,\n      inlineFiles: inlineFiles.length,\n      needsHydration,\n    }));\n\n    let files = inlineFiles;\n    if (needsHydration) {\n      const fileStorage = runInInjectionContext(this.injector, () => inject(AXPFileStorageService));\n      files = await hydrateAttachmentFieldToFileList(fieldValue, fileStorage);\n      this.debug.trace(FILE_UPLOADER_TRACE_NS, 'load-files', 'Hydrated attachment refs', () => ({\n        entityId,\n        field,\n        hydratedCount: files.length,\n        fileNames: files.map((f) => f.name),\n      }));\n    }\n\n    return { files, count };\n  }\n\n  //#endregion\n}\n","import { AXPCommand } from '@acorex/platform/runtime-contracts';\nimport { AXPExecuteCommandResult, AXPFileListItem } from '@acorex/platform/contracts';\nimport { AXPDebugService } from '@acorex/platform/core';\nimport { AXMEntityCrudServiceImpl } from '../../entity-storage-service';\n\nimport { inject, Injector, runInInjectionContext } from '@angular/core';\nimport {\n  attachmentFieldCount,\n  AXPFileUploaderEntityFilesScope,\n  isFileListItem,\n} from './file-uploader-entity-files.util';\nimport { FILE_UPLOADER_TRACE_NS } from './file-uploader-trace.constants';\n\nexport interface AXPFileUploaderSaveFilesInput extends AXPFileUploaderEntityFilesScope {\n  files: AXPFileListItem[];\n}\n\nexport interface AXPFileUploaderSaveFilesResult {\n  entityData: Record<string, unknown>;\n}\n\nexport class AXPFileUploaderSaveFilesCommand\n  implements AXPCommand<AXPFileUploaderSaveFilesInput, AXPFileUploaderSaveFilesResult>\n{\n  //#region ----   Services & Dependencies   ----\n\n  private readonly injector = inject(Injector);\n  private readonly debug = inject(AXPDebugService);\n\n  //#endregion\n\n  //#region ----   Command Execution   ----\n\n  async execute(\n    input: AXPFileUploaderSaveFilesInput,\n  ): Promise<AXPExecuteCommandResult<AXPFileUploaderSaveFilesResult>> {\n    const { name: entityRef, id: entityId, field } = input;\n    const files = (input.files ?? []).filter(isFileListItem);\n\n    this.debug.trace(FILE_UPLOADER_TRACE_NS, 'save-files', 'Saving attachment field', () => ({\n      entityRef,\n      entityId,\n      field,\n      inputCount: input.files?.length ?? 0,\n      savingCount: files.length,\n      attachmentCount: attachmentFieldCount(files),\n    }));\n\n    if (!entityRef?.trim() || !entityId?.trim() || !field?.trim()) {\n      return {\n        success: false,\n        message: { text: 'entityRef, entityId, and field are required.' },\n      };\n    }\n\n    try {\n      const entityData = await runInInjectionContext(this.injector, async () => {\n        const dataService = new AXMEntityCrudServiceImpl(entityRef);\n        return dataService.updateOne(entityId, { [field]: files });\n      });\n\n      return {\n        success: true,\n        data: { entityData: { ...entityData, [field]: files } },\n      };\n    } catch (error) {\n      return {\n        success: false,\n        message: {\n          text: error instanceof Error ? error.message : 'Failed to save files.',\n        },\n      };\n    }\n  }\n\n  //#endregion\n}\n","//#region ----   File uploader widget API types   ----\n\n/** Serializable upload action exposed via widget `api().getUploadActions()`. */\nexport interface AXPFileUploaderUploadActionDescriptor {\n  plugin: string;\n  text?: string;\n  textKey?: string;\n  icon?: string;\n}\n\nexport type AXPFileUploaderEditDialogMode = 'manual' | 'auto';\n\nexport interface AXPFileUploaderEditDialogFieldOptions {\n  name?: boolean;\n  title?: boolean;\n  description?: boolean;\n}\n\nexport interface AXPFileUploaderEditDialogOptions {\n  mode?: AXPFileUploaderEditDialogMode;\n  fields?: AXPFileUploaderEditDialogFieldOptions;\n}\n\nexport function resolveFileUploaderEditDialog(\n  options?: Record<string, unknown>,\n): AXPFileUploaderEditDialogOptions | undefined {\n  return options?.['editDialog'] as AXPFileUploaderEditDialogOptions | undefined;\n}\n\nexport function isFileUploaderEditDialogAuto(editDialog?: AXPFileUploaderEditDialogOptions): boolean {\n  return editDialog?.mode === 'auto';\n}\n\nexport function hasFileUploaderTitleOrDescriptionFields(\n  editDialog?: AXPFileUploaderEditDialogOptions,\n): boolean {\n  return !!(editDialog?.fields?.title || editDialog?.fields?.description);\n}\n\n//#endregion\n","//#region ----   Imports   ----\n\nimport { AXPEntity } from '@acorex/platform/layout/entity-contracts';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { resolveEntityRowDisplayTitle } from '@acorex/platform/common';\nimport { AXPFileListItem, AXPMultiLanguageString } from '@acorex/platform/contracts';\nimport { AXPDebugService } from '@acorex/platform/core';\nimport { AXPColumnWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { AXPQueryExecutor } from '@acorex/platform/runtime';\nimport { AsyncPipe } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  ElementRef,\n  inject,\n  signal,\n  untracked,\n  viewChild,\n} from '@angular/core';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\nimport {\n  attachmentFieldCount,\n  attachmentNeedsHydration,\n  isAttachmentFieldPresentOnRow,\n  normalizeEntityFieldToFileList,\n  resolveAttachmentFieldPath,\n  resolveFileUploaderEntityScope,\n} from './file-uploader-entity-files.util';\nimport type { AXPFileUploaderLoadFilesResult } from './file-uploader-load-files.query';\nimport { FILE_UPLOADER_TRACE_NS } from './file-uploader-trace.constants';\nimport { AXPFileListComponent } from './file-list/file-list.component';\n\n//#endregion\n\n//#region ----   Component   ----\n\n@Component({\n  selector: 'axp-file-uploader-widget-column',\n  templateUrl: './file-uploader-widget-column.component.html',\n  styleUrl: './file-uploader-widget-column.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AXTranslationModule, AsyncPipe, AXPopoverModule, AXLoadingModule, AXPFileListComponent],\n  inputs: ['rawValue', 'rowData'],\n})\nexport class AXPFileUploaderWidgetColumnComponent extends AXPColumnWidgetComponent<AXPFileListItem[]> {\n  //#region ----   Services & Dependencies   ----\n\n  private readonly queryExecutor = inject(AXPQueryExecutor);\n  private readonly entityResolver = inject(AXPEntityDefinitionRegistryService);\n  private readonly formatService = inject(AXFormatService);\n  private readonly translation = inject(AXTranslationService);\n  private readonly debug = inject(AXPDebugService);\n\n  //#endregion\n\n  //#region ----   View Children   ----\n\n  protected readonly fileListTrigger = viewChild<ElementRef>('fileListTrigger');\n  protected readonly fileListPopover = viewChild<AXPopoverComponent>('fileListPopover');\n\n  //#endregion\n\n  //#region ----   State   ----\n\n  protected readonly popoverFiles = signal<AXPFileListItem[]>([]);\n  protected readonly loadStatus = signal<'idle' | 'loading' | 'ready' | 'error'>('idle');\n  protected readonly loadError = signal<string | null>(null);\n  protected readonly isPopoverOpen = signal(false);\n\n  private readonly entityDef = signal<AXPEntity | null>(null);\n  private popoverLoadRequestId = 0;\n  private previousRowId: string | undefined;\n\n  //#endregion\n\n  //#region ----   Computed   ----\n\n  protected readonly entityScope = computed(() =>\n    resolveFileUploaderEntityScope(\n      this.options ?? {},\n      this.rowData as Record<string, unknown> | undefined,\n      this.path,\n    ),\n  );\n\n  protected readonly attachmentFieldPath = computed(() =>\n    resolveAttachmentFieldPath(this.options ?? {}, this.path),\n  );\n\n  protected readonly inlineFieldPresent = computed(() =>\n    isAttachmentFieldPresentOnRow(\n      this.rowData as Record<string, unknown> | undefined,\n      this.attachmentFieldPath(),\n    ),\n  );\n\n  protected readonly fileCount = computed(() => {\n    if (!this.inlineFieldPresent()) {\n      return 0;\n    }\n    return attachmentFieldCount(this.rawValue);\n  });\n\n  /** Clickable when count is unknown or zero — opens popover (lazy load or inline empty). */\n  protected readonly showAttachmentsLink = computed(\n    () => this.fileCount() === 0 && this.entityScope() != null,\n  );\n\n  protected readonly popoverTitle = computed((): AXPMultiLanguageString => {\n    const row = this.rowData as Record<string, unknown> | undefined;\n    const lang = this.translation.getActiveLang();\n    const resolved = resolveEntityRowDisplayTitle({\n      data: row,\n      widgetOptions: this.options as Record<string, unknown>,\n      formatService: this.formatService,\n      activeLang: lang,\n      entity: this.entityDef(),\n    });\n    if (resolved) {\n      return resolved;\n    }\n\n    return '@document-management:terms.common.file';\n  });\n\n  //#endregion\n\n  //#region ----   Lifecycle   ----\n\n  constructor() {\n    super();\n\n    effect(() => {\n      const row = this.rowData as Record<string, unknown> | undefined;\n      const rowId = row?.['id'] != null ? String(row['id']) : undefined;\n      if (rowId !== this.previousRowId) {\n        this.previousRowId = rowId;\n        untracked(() => {\n          this.popoverFiles.set([]);\n          this.loadStatus.set('idle');\n          this.loadError.set(null);\n          this.popoverLoadRequestId++;\n        });\n      }\n    });\n\n    effect(() => {\n      const scope = this.entityScope();\n      if (!scope?.name?.includes('.')) {\n        this.entityDef.set(null);\n        return;\n      }\n      const [module, name] = scope.name.split('.');\n      void this.entityResolver.resolve(module, name).then((def) => this.entityDef.set(def));\n    });\n  }\n\n  //#endregion\n\n  //#region ----   UI Handlers   ----\n\n  protected openFileListPopover(): void {\n    this.openPopoverFromRef(this.fileListTrigger());\n    void this.ensurePopoverFilesLoaded();\n  }\n\n  protected onPopoverOpenChange(event: unknown): void {\n    const open = this.coercePopoverOpenEvent(event);\n    this.isPopoverOpen.set(open);\n    if (open) {\n      void this.ensurePopoverFilesLoaded();\n    }\n  }\n\n  //#endregion\n\n  //#region ----   Private Methods   ----\n\n  private openPopoverFromRef(ref: ElementRef | undefined): void {\n    const popover = this.fileListPopover();\n    if (popover && ref) {\n      popover.target = ref.nativeElement;\n      popover.open();\n      this.isPopoverOpen.set(true);\n    }\n  }\n\n  private async ensurePopoverFilesLoaded(): Promise<void> {\n    if (this.loadStatus() === 'loading') {\n      return;\n    }\n\n    const count = attachmentFieldCount(this.rawValue);\n    const inline = normalizeEntityFieldToFileList(this.rawValue);\n    const needsHydration = attachmentNeedsHydration(this.rawValue);\n\n    this.debug.trace(FILE_UPLOADER_TRACE_NS, 'column-popover', 'Ensure popover files', () => ({\n      rowId: this.previousRowId,\n      inlineFieldPresent: this.inlineFieldPresent(),\n      count,\n      inlineFiles: inline.length,\n      needsHydration,\n      loadStatus: this.loadStatus(),\n    }));\n\n    if (inline.length > 0 && !needsHydration) {\n      this.popoverFiles.set(inline);\n      this.loadStatus.set('ready');\n      this.loadError.set(null);\n      return;\n    }\n\n    if (this.inlineFieldPresent() && count === 0) {\n      this.popoverFiles.set([]);\n      this.loadStatus.set('ready');\n      this.loadError.set(null);\n      return;\n    }\n\n    const entity = this.entityScope();\n    if (!entity) {\n      this.popoverFiles.set([]);\n      this.loadStatus.set('ready');\n      return;\n    }\n\n    if (this.loadStatus() === 'ready' && this.popoverFiles().length > 0 && !needsHydration) {\n      return;\n    }\n\n    const requestId = ++this.popoverLoadRequestId;\n    this.loadStatus.set('loading');\n    this.loadError.set(null);\n\n    this.debug.trace(FILE_UPLOADER_TRACE_NS, 'column-popover', 'Loading files via FileUploader:LoadFiles', () => ({\n      entity,\n      reason: needsHydration ? 'hydration-required' : 'lazy-or-empty',\n    }));\n\n    try {\n      const result = await this.queryExecutor.fetch<typeof entity, AXPFileUploaderLoadFilesResult>(\n        'FileUploader:LoadFiles',\n        entity,\n      );\n      if (requestId !== this.popoverLoadRequestId) {\n        return;\n      }\n      this.popoverFiles.set(result?.files ?? []);\n      this.loadStatus.set('ready');\n      this.debug.trace(FILE_UPLOADER_TRACE_NS, 'column-popover', 'Popover files loaded', () => ({\n        loadedCount: result?.files?.length ?? 0,\n        expectedCount: result?.count ?? 0,\n      }));\n    } catch (error) {\n      if (requestId !== this.popoverLoadRequestId) {\n        return;\n      }\n      this.debug.warn(FILE_UPLOADER_TRACE_NS, 'column-popover', 'Failed to load popover files', () => ({\n        entity,\n        error: error instanceof Error ? error.message : String(error),\n      }));\n      const msg = await this.translation.translateAsync('@general:widgets.lookup.column.load-failed');\n      this.loadError.set(msg);\n      this.loadStatus.set('error');\n      this.popoverFiles.set([]);\n    }\n  }\n\n  private coercePopoverOpenEvent(event: unknown): boolean {\n    if (typeof event === 'boolean') {\n      return event;\n    }\n    if (event && typeof event === 'object') {\n      const o = event as Record<string, unknown>;\n      if ('detail' in o) {\n        return Boolean(o['detail']);\n      }\n      if ('open' in o) {\n        return Boolean(o['open']);\n      }\n    }\n    return false;\n  }\n\n  //#endregion\n}\n\n//#endregion\n","@if (fileCount() > 0) {\n  <span\n    class=\"ax-cursor-pointer ax-text-primary ax-underline\"\n    (click)=\"openFileListPopover(); $event.stopPropagation()\"\n    #fileListTrigger\n  >\n    {{\n      '@general:widgets.file-uploader.column.files-count'\n        | translate: { params: { count: fileCount() } }\n        | async\n    }}\n  </span>\n} @else if (showAttachmentsLink()) {\n  <span\n    class=\"ax-cursor-pointer ax-text-primary ax-underline\"\n    (click)=\"openFileListPopover(); $event.stopPropagation()\"\n    #fileListTrigger\n  >\n    {{ '@general:widgets.file-uploader.attachments.title' | translate | async }}\n  </span>\n} @else {\n  <span class=\"ax-text-muted\">---</span>\n}\n\n<ax-popover [openOn]=\"'manual'\" #fileListPopover (openChange)=\"onPopoverOpenChange($event)\">\n  <div class=\"ax-lightest-surface dark:ax-dark-surface ax-min-w-[17.5rem] ax-max-w-[26rem] ax-overflow-hidden\">\n    <div class=\"ax-border-b ax-border-surface ax-px-4 ax-py-3\">\n      <h3 class=\"ax-m-0 ax-text-sm ax-font-semibold ax-leading-normal ax-text-on-lightest-surface\">\n        {{ popoverTitle() | translate | async }}\n      </h3>\n    </div>\n    <div class=\"ax-max-h-64 ax-overflow-y-auto ax-px-3 ax-py-3\" style=\"max-height: max(30dvh, 12rem)\">\n      @if (loadStatus() === 'loading') {\n        <div class=\"ax-flex ax-min-h-[120px] ax-items-center ax-justify-center\">\n          <ax-loading></ax-loading>\n        </div>\n      } @else if (loadStatus() === 'error') {\n        <div class=\"ax-text-danger ax-text-sm\">{{ loadError() }}</div>\n      } @else if (popoverFiles().length === 0) {\n        <p class=\"axp-file-uploader-column-popover__empty\">\n          {{ '@general:widgets.file-uploader.empty-state.title' | translate | async }}\n        </p>\n      } @else {\n        <axp-file-list\n          [files]=\"popoverFiles()\"\n          look=\"links\"\n          linksLayout=\"menu\"\n          [showLabel]=\"false\"\n          [readonly]=\"true\"\n        />\n      }\n    </div>\n  </div>\n</ax-popover>\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXFileService, getFileExtension } from '@acorex/core/file';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport {\n  AXCFileUploaderAction,\n  AXCFileUploaderActionsPayload,\n  AXCFileUploaderCapabilities,\n  AXPFileActionsService,\n} from '@acorex/platform/common';\nimport { AXPDataGenerator, AXPFileListItem } from '@acorex/platform/contracts';\nimport { AXPComponentSlotModule, AXPHookService } from '@acorex/platform/core';\nimport { AXPValueWidgetComponent, AXPWidgetCoreElementAPI } from '@acorex/platform/layout/widget-core';\nimport { AXPCommandExecutor, AXPQueryExecutor } from '@acorex/platform/runtime';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { cloneDeep } from 'lodash-es';\nimport { Subject } from 'rxjs';\nimport { AXPFileListComponent } from './file-list/file-list.component';\nimport { attachmentsSemanticallyEqual, fingerprintAttachments, persistedAttachments } from './file-uploader-dirty.util';\nimport {\n  attachmentNeedsHydration,\n  resolveAttachmentFieldPath,\n  resolveFileUploaderEntityScope,\n  type AXPFileUploaderEntityFilesScope,\n} from './file-uploader-entity-files.util';\nimport { fetchHydratedEntityAttachments } from './file-uploader-lazy-hydrate.util';\nimport {\n  hasFileUploaderTitleOrDescriptionFields,\n  isFileUploaderEditDialogAuto,\n  resolveFileUploaderEditDialog,\n  type AXPFileUploaderUploadActionDescriptor,\n} from './file-uploader-widget.types';\nimport { FileUploaderWebhookKeys } from './webhook.key';\n\nimport type { AXUploaderFileChangeEvent } from '@acorex/cdk/uploader';\nimport { AXUploaderZoneDirective } from '@acorex/cdk/uploader';\n\ninterface FileUploaderRejectedFile {\n  file: File;\n  reason: 'type' | 'size';\n}\n\ninterface FileUploaderConfigureOverrides {\n  accept?: string;\n  maxFileSize?: number;\n  readonly?: boolean;\n}\n\ninterface FileUploaderConfigurePayload {\n  plugins: { name: string; options?: unknown }[];\n  excludePlugins: string[];\n  capabilities: AXCFileUploaderCapabilities;\n  overrides: FileUploaderConfigureOverrides;\n}\n\ninterface FileUploaderAfterFilesAddedPayload {\n  plugins: { name: string; options?: unknown }[];\n  excludePlugins: string[];\n  capabilities: AXCFileUploaderCapabilities;\n  newFiles: AXPFileListItem[];\n}\n\ninterface FileUploaderBeforeFilesAddedPayload {\n  plugins: { name: string; options?: unknown }[];\n  excludePlugins: string[];\n  capabilities: AXCFileUploaderCapabilities;\n  newFiles: AXPFileListItem[];\n}\n\n@Component({\n  selector: 'axp-file-uploader-widget-edit',\n  template: `\n    @if (showAddItemButton() && !readonly()) {\n      <div class=\"ax-flex ax-justify-end ax-p-2\" [class.ax-border-b]=\"showBorder()\" *translate=\"let t\">\n        <!-- Add Item Button -->\n        <ax-button class=\"ax-sm\" [text]=\"t('@general:actions.add-item.title') | async\" [color]=\"'primary'\">\n          <ax-prefix>\n            <ax-icon icon=\"fa-light  fa-plus\"></ax-icon>\n          </ax-prefix>\n          <ax-dropdown-panel>\n            <!-- Upload Dropdown -->\n            <ax-button-item-list>\n              @for (action of fileActions(); track action.plugin) {\n                <ax-button-item\n                  (onClick)=\"action.run(capabilities)\"\n                  [text]=\"action.text ?? (action.textKey ? (t(action.textKey) | async)! : '')\"\n                >\n                  @if (action.icon) {\n                    <ax-prefix>\n                      <ax-icon [icon]=\"action.icon\"></ax-icon>\n                    </ax-prefix>\n                  }\n                </ax-button-item>\n              }\n            </ax-button-item-list>\n          </ax-dropdown-panel>\n        </ax-button>\n      </div>\n    }\n    <div\n      [class.ax-p-2]=\"showBorder()\"\n      axUploaderZone\n      (fileChange)=\"onFileChange($event)\"\n      [accept]=\"accept()\"\n      [multiple]=\"multiple()\"\n      [disableBrowse]=\"readonly() || (getValue() ?? []).length > 0\"\n    >\n      <axp-file-list\n        [files]=\"files()\"\n        [readonly]=\"readonly()\"\n        [fileEditable]=\"fileEditable()\"\n        [enableTitleDescription]=\"enableTitleDescription()\"\n        [plugins]=\"plugins()\"\n        [excludePlugins]=\"excludePlugins()\"\n        [capabilities]=\"capabilities\"\n        [multiple]=\"multiple()\"\n        (onRemove)=\"handleFileRemove($event)\"\n        (onRevert)=\"handleFileRevert($event)\"\n        (onRename)=\"handleFileRename($event)\"\n      ></axp-file-list>\n    </div>\n  `,\n  host: {\n    '[class.axp-file-uploader-widget-edit--borderless]': '!showBorder()',\n    '[class.ax-block]': 'true',\n    '[class.ax-flex-1]': 'true',\n    '[class.ax-border]': 'showBorder()',\n    '[class.ax-rounded-md]': 'showBorder()',\n    '[class.ax-lightest-surface]': 'showBorder()',\n  },\n  styles: [\n    `\n      :host {\n        border-color: rgba(var(--ax-comp-editor-border-color));\n      }\n      :host.axp-file-uploader-widget-edit--borderless {\n        border: none !important;\n      }\n      .__drag-over {\n        background-color: rgba(var(--ax-sys-color-primary-50), 0.1);\n        border: 2px dashed rgb(var(--ax-sys-color-primary-500));\n        border-radius: 0.375rem;\n      }\n    `,\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    AXButtonModule,\n    AXUploaderZoneDirective,\n    AXDecoratorModule,\n    AXLoadingModule,\n    AXDropdownModule,\n    AXPComponentSlotModule,\n    AXTranslationModule,\n    AXPFileListComponent,\n  ],\n})\nexport class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent<AXPFileListItem[] | undefined> {\n  protected readonly fileService = inject(AXFileService);\n  private readonly hooks = inject(AXPHookService);\n  private readonly fileActionsService = inject(AXPFileActionsService);\n  private readonly commandExecutor = inject(AXPCommandExecutor);\n  private readonly queryExecutor = inject(AXPQueryExecutor);\n  private readonly toastService = inject(AXToastService);\n  private readonly translateService = inject(AXTranslationService);\n\n  //#region ----   Dirty tracking (deferred save pages)   ----\n\n  private readonly dirtyChangeSubject = new Subject<boolean>();\n  private readonly uploadActionsChangeSubject = new Subject<void>();\n  private readonly savedSnapshot = signal<AXPFileListItem[] | undefined>(undefined);\n  private readonly baselineFingerprint = signal('');\n  private readonly baselinePendingReconcile = signal(true);\n  private readonly isDirtySignal = signal(false);\n  private skipDirtyEvaluation = false;\n  /** Status before soft-delete; used for restore when baseline was not synced (section layout). */\n  private readonly statusBeforeDelete = new Map<string, AXPFileListItem['status']>();\n  private readonly autoBaselineSynced = signal(false);\n  private hydrateRequestId = 0;\n\n  /** Sync baseline from context when not wired by a deferred-save page (section layout). */\n  private readonly baselineInitEffect = effect(() => {\n    if (this.autoBaselineSynced()) {\n      return;\n    }\n    const value = this.getValue();\n    if (value == null || attachmentNeedsHydration(value)) {\n      return;\n    }\n    this.syncBaseline(value);\n  });\n\n  /** Hydrate attachment refs when the widget is shown (read middleware keeps refs lazy). */\n  private readonly lazyHydrateEffect = effect(() => {\n    const value = this.getValue();\n    if (!attachmentNeedsHydration(value)) {\n      return;\n    }\n    const scope = resolveFileUploaderEntityScope(\n      this.options(),\n      this.contextService.snapshot(),\n      resolveAttachmentFieldPath(this.options(), this.path),\n    );\n    if (!scope?.id) {\n      return;\n    }\n    void this.hydrateAttachments(scope);\n  });\n\n  //#endregion\n\n  protected multiple = computed<boolean>(() => this.options()['multiple'] as boolean);\n  private readonly acceptOverride = signal<string | undefined>(undefined);\n  protected accept = computed<string>(() => this.acceptOverride() ?? (this.options()['accept'] as string));\n  protected plugins = computed<{ name: string; options?: unknown }[]>(\n    () => (this.options()['plugins'] as { name: string; options?: unknown }[]) ?? [],\n  );\n  protected pluginNames = computed<string[]>(() => (this.plugins() ?? []).map((p) => p.name));\n  protected excludePlugins = computed<string[]>(() => this.options()['excludePlugins'] as string[]);\n\n  protected fileEditable = computed<boolean>(() => {\n    if (this.options()['readonly']) {\n      return false;\n    }\n    return this.options()['fileEditable'] as boolean;\n  });\n\n  protected editDialog = computed(() => resolveFileUploaderEditDialog(this.options()));\n\n  protected enableTitleDescription = computed<boolean>(() =>\n    hasFileUploaderTitleOrDescriptionFields(this.editDialog()),\n  );\n\n  /** When mode is `auto`, show the edit dialog after each file select. */\n  protected showEditDialogAfterSelect = computed<boolean>(() => isFileUploaderEditDialogAuto(this.editDialog()));\n\n  protected readonly = computed<boolean>(() => Boolean(this.options()['readonly']));\n\n  protected showBorder = computed<boolean>(() => (this.options()['showBorder'] as boolean) ?? true);\n\n  protected showAddItemButton = computed<boolean>(() => (this.options()['showAddItemButton'] as boolean) ?? true);\n\n  protected maxFileSize = computed<number>(() => this.options()['maxFileSize'] as number);\n\n  // Drag and drop state\n  protected isDragOver = signal(false);\n\n  private readonly innerActions = signal<AXCFileUploaderAction[]>([]);\n  protected readonly fileActions = computed<AXCFileUploaderAction[]>(() => {\n    const enabledPlugins = this.pluginNames() ?? [];\n    const excludedPlugins = this.excludePlugins() ?? [];\n    const all = this.innerActions() ?? [];\n    return all.filter((a) => {\n      if (excludedPlugins.includes(a.plugin)) {\n        return false;\n      }\n      if (!enabledPlugins || enabledPlugins.length === 0) {\n        return a.global === true;\n      }\n      return enabledPlugins.includes(a.plugin) || a.global === true;\n    });\n  });\n\n  override ngOnInit(): void {\n    super.ngOnInit();\n    this.configureFromHooks();\n    this.loadActions();\n  }\n\n  private async hydrateAttachments(scope: AXPFileUploaderEntityFilesScope): Promise<void> {\n    const requestId = ++this.hydrateRequestId;\n    try {\n      const files = await fetchHydratedEntityAttachments(this.queryExecutor, scope);\n      if (requestId !== this.hydrateRequestId) {\n        return;\n      }\n      this.skipDirtyEvaluation = true;\n      this.setValue(cloneDeep(files));\n      this.skipDirtyEvaluation = false;\n      this.syncBaseline(files);\n    } catch {\n      if (requestId !== this.hydrateRequestId) {\n        return;\n      }\n    }\n  }\n\n  override setValue(value: AXPFileListItem[] | null | undefined): void {\n    super.setValue(value);\n    if (this.skipDirtyEvaluation) {\n      return;\n    }\n    this.evaluateDirty();\n  }\n\n  /** Align dirty baseline with persisted attachments (call when record loads or after discard remount). */\n  syncBaseline(saved: AXPFileListItem[] | undefined): void {\n    this.savedSnapshot.set(cloneDeep(saved));\n    this.baselineFingerprint.set(fingerprintAttachments(saved));\n    this.baselinePendingReconcile.set(true);\n    this.statusBeforeDelete.clear();\n    this.autoBaselineSynced.set(true);\n    this.evaluateDirty();\n  }\n\n  /** Mark current list as saved; clears dirty and drops soft-deleted rows from the UI. */\n  markSaved(): void {\n    const attachments = persistedAttachments(this.getValue() ?? []);\n    this.skipDirtyEvaluation = true;\n    this.setValue(cloneDeep(attachments));\n    this.skipDirtyEvaluation = false;\n    this.savedSnapshot.set(cloneDeep(attachments));\n    this.baselineFingerprint.set(fingerprintAttachments(attachments));\n    this.baselinePendingReconcile.set(false);\n    this.statusBeforeDelete.clear();\n    this.setDirty(false);\n  }\n\n  /** Revert widget value to last saved baseline. */\n  discardToBaseline(): void {\n    const saved = this.savedSnapshot();\n    this.skipDirtyEvaluation = true;\n    this.setValue(cloneDeep(saved ?? []));\n    this.skipDirtyEvaluation = false;\n    this.baselineFingerprint.set(fingerprintAttachments(saved));\n    this.baselinePendingReconcile.set(false);\n    this.statusBeforeDelete.clear();\n    this.setDirty(false);\n  }\n\n  override api(): AXPWidgetCoreElementAPI {\n    return {\n      onDirtyChange: this.dirtyChangeSubject,\n      onUploadActionsChanged: this.uploadActionsChangeSubject,\n      getUploadActions: () => this.getUploadActionDescriptors(),\n      runUploadAction: (plugin: string) => this.runUploadActionByPlugin(plugin),\n      markSaved: () => this.markSaved(),\n      syncBaseline: (saved: AXPFileListItem[] | undefined) => this.syncBaseline(saved),\n      discardToBaseline: () => this.discardToBaseline(),\n      isDirty: () => this.isDirtySignal(),\n    };\n  }\n\n  /** Current upload actions for host pages (always read via api; list may change after plugins load). */\n  getUploadActionDescriptors(): AXPFileUploaderUploadActionDescriptor[] {\n    return this.fileActions().map((action) => ({\n      plugin: action.plugin,\n      text: action.text,\n      textKey: action.textKey,\n      icon: action.icon,\n    }));\n  }\n\n  async runUploadActionByPlugin(plugin: string): Promise<void> {\n    if (this.readonly()) {\n      return;\n    }\n    const action = this.fileActions().find((item) => item.plugin === plugin);\n    if (!action) {\n      return;\n    }\n    await action.run(this.capabilities);\n  }\n\n  private notifyUploadActionsChanged(): void {\n    this.uploadActionsChangeSubject.next();\n  }\n\n  private evaluateDirty(): void {\n    const attachments = this.getValue() ?? [];\n    const fingerprint = fingerprintAttachments(attachments);\n    const baseline = this.baselineFingerprint();\n\n    if (this.baselinePendingReconcile()) {\n      this.baselinePendingReconcile.set(false);\n      const normalizedOnly = attachmentsSemanticallyEqual(attachments, this.savedSnapshot());\n      if (normalizedOnly) {\n        this.baselineFingerprint.set(fingerprint);\n        this.setDirty(false);\n        return;\n      }\n    }\n\n    this.setDirty(fingerprint !== baseline);\n  }\n\n  private setDirty(dirty: boolean): void {\n    if (this.isDirtySignal() === dirty) {\n      return;\n    }\n    this.isDirtySignal.set(dirty);\n    this.dirtyChangeSubject.next(dirty);\n    this.layoutService.notifyWidgetDirtyChanged();\n  }\n\n  //#endregion\n\n  private async loadActions(): Promise<void> {\n    const payload: AXCFileUploaderActionsPayload = {\n      plugins: this.plugins() ?? [],\n      excludePlugins: this.excludePlugins() ?? [],\n      capabilities: this.capabilities,\n      actions: [],\n      options: {\n        multiple: this.multiple(),\n        accept: this.accept(),\n      },\n    };\n    const actions = await this.fileActionsService.getActions(payload);\n    this.innerActions.set(actions);\n    this.notifyUploadActionsChanged();\n  }\n\n  private async configureFromHooks(): Promise<void> {\n    const payload = await this.hooks.runAsync<FileUploaderConfigurePayload>(FileUploaderWebhookKeys.Configure, {\n      plugins: this.plugins() ?? [],\n      excludePlugins: this.excludePlugins() ?? [],\n      capabilities: this.capabilities,\n      overrides: {},\n    });\n    if (payload?.overrides?.accept) {\n      this.acceptOverride.set(payload.overrides.accept);\n    }\n  }\n\n  /**\n   * Process files from various sources (file picker, drag-drop, etc.)\n   * When showEditDialogAfterSelect is true, the edit dialog (with plugin hooks) is shown per file before adding; otherwise files are added and user can edit via Edit button.\n   */\n  private async processFiles(files: File[]): Promise<void> {\n    if (this.readonly()) {\n      return;\n    }\n    if (files.length === 0) {\n      return;\n    }\n\n    const { accepted, rejected } = this.filterFilesByAcceptAndMaxSize(files);\n\n    if (rejected.length > 0) {\n      await this.notifyRejectedFiles(rejected);\n    }\n\n    if (accepted.length === 0) {\n      return;\n    }\n\n    if (!this.multiple()) {\n      this.clear();\n    }\n\n    const showDialog = this.showEditDialogAfterSelect();\n\n    const fileUploadRequests = accepted.map(\n      (file) =>\n        ({\n          id: AXPDataGenerator.uuid(),\n          name: file.name,\n          size: file.size,\n          status: 'attached',\n          source: {\n            kind: 'blob',\n            value: file,\n          },\n        }) as unknown as AXPFileListItem,\n    );\n\n    if (showDialog) {\n      await this.addFilesWithEditDialogAsync(fileUploadRequests);\n      return;\n    }\n\n    // Default: run BeforeFilesAdded (plugins may transform), then add all, then AfterFilesAdded\n    await this.hooks.runAsync<FileUploaderBeforeFilesAddedPayload>(FileUploaderWebhookKeys.BeforeFilesAdded, {\n      plugins: this.plugins() ?? [],\n      excludePlugins: this.excludePlugins() ?? [],\n      capabilities: this.capabilities,\n      newFiles: fileUploadRequests,\n    });\n\n    this.setValue([...(this.getValue() ?? []), ...fileUploadRequests]);\n\n    await this.hooks.runAsync<FileUploaderAfterFilesAddedPayload>(FileUploaderWebhookKeys.AfterFilesAdded, {\n      plugins: this.plugins() ?? [],\n      excludePlugins: this.excludePlugins() ?? [],\n      capabilities: this.capabilities,\n      newFiles: fileUploadRequests,\n    });\n  }\n\n  /**\n   * Show edit dialog per file and add only those submitted. Used when showEditDialogAfterSelect is true (both from zone and from dropdown actions).\n   */\n  private async addFilesWithEditDialogAsync(fileItems: AXPFileListItem[]): Promise<void> {\n    const added: AXPFileListItem[] = [];\n    for (const fileItem of fileItems) {\n      const result = await this.commandExecutor.execute<unknown, AXPFileListItem>('FileUploader:Edit', {\n        file: fileItem,\n        plugins: this.plugins() ?? [],\n        excludePlugins: this.excludePlugins() ?? [],\n        enableTitleDescription: this.enableTitleDescription(),\n        isNewFile: true,\n      });\n      if (result?.success && result.data) {\n        added.push(result.data);\n      }\n    }\n    if (added.length > 0) {\n      this.setValue([...(this.getValue() ?? []), ...added]);\n      await this.hooks.runAsync<FileUploaderAfterFilesAddedPayload>(FileUploaderWebhookKeys.AfterFilesAdded, {\n        plugins: this.plugins() ?? [],\n        excludePlugins: this.excludePlugins() ?? [],\n        capabilities: this.capabilities,\n        newFiles: added,\n      });\n    }\n  }\n\n  private fileFromListItem(item: AXPFileListItem): File | undefined {\n    const source = item.source;\n    if (source?.kind !== 'blob' || source.value == null) {\n      return undefined;\n    }\n    if (source.value instanceof File) {\n      return source.value;\n    }\n    if (source.value instanceof Blob) {\n      return new File([source.value], item.name, { type: source.value.type ?? '' });\n    }\n    return undefined;\n  }\n\n  private async validateListItemsForUpload(items: AXPFileListItem[]): Promise<AXPFileListItem[]> {\n    const blobItems = items.filter((item) => this.fileFromListItem(item) != null);\n    const passthrough = items.filter((item) => this.fileFromListItem(item) == null);\n\n    if (blobItems.length === 0) {\n      return items;\n    }\n\n    const files = blobItems.map((item) => this.fileFromListItem(item)!);\n    const { accepted, rejected } = this.filterFilesByAcceptAndMaxSize(files);\n\n    if (rejected.length > 0) {\n      await this.notifyRejectedFiles(rejected);\n    }\n\n    const acceptedSet = new Set(accepted);\n    const acceptedItems = blobItems.filter((item) => acceptedSet.has(this.fileFromListItem(item)!));\n    return [...passthrough, ...acceptedItems];\n  }\n\n  private async notifyRejectedFiles(rejected: FileUploaderRejectedFile[]): Promise<void> {\n    if (rejected.length === 0) {\n      return;\n    }\n\n    const errorTitle = await this.translateService.translateAsync('@general:messages.error.title');\n    const typeRejections = rejected.filter((entry) => entry.reason === 'type');\n    const sizeRejections = rejected.filter((entry) => entry.reason === 'size');\n\n    if (typeRejections.length === 1) {\n      const content = await this.translateService.translateAsync(\n        '@general:widgets.file-uploader.validation.file-type-not-allowed',\n        { params: { fileName: typeRejections[0].file.name } },\n      );\n      this.toastService.show({ color: 'danger', title: errorTitle, content });\n      return;\n    }\n\n    if (typeRejections.length > 1) {\n      const content = await this.translateService.translateAsync(\n        '@general:widgets.file-uploader.validation.file-type-not-allowed-summary',\n        { params: { count: typeRejections.length } },\n      );\n      this.toastService.show({ color: 'danger', title: errorTitle, content });\n      return;\n    }\n\n    if (sizeRejections.length === 1) {\n      const maxMb = Math.round((this.maxFileSize() / (1024 * 1024)) * 10) / 10;\n      const content = await this.translateService.translateAsync(\n        '@general:widgets.file-uploader.validation.file-size-exceeds-limit',\n        { params: { fileName: sizeRejections[0].file.name, maxSizeMb: maxMb } },\n      );\n      this.toastService.show({ color: 'danger', title: errorTitle, content });\n      return;\n    }\n\n    const content = await this.translateService.translateAsync(\n      '@general:widgets.file-uploader.validation.files-rejected-summary',\n      { params: { count: rejected.length } },\n    );\n    this.toastService.show({ color: 'danger', title: errorTitle, content });\n  }\n\n  private filterFilesByAcceptAndMaxSize(files: File[]): {\n    accepted: File[];\n    rejected: FileUploaderRejectedFile[];\n  } {\n    const accepted: File[] = [];\n    const rejected: FileUploaderRejectedFile[] = [];\n    const accept = this.accept();\n    const maxFileSize = this.maxFileSize();\n\n    for (const file of files) {\n      if (!this.isUnrestrictedAccept(accept) && !this.fileMatchesAccept(file, accept)) {\n        rejected.push({ file, reason: 'type' });\n        continue;\n      }\n\n      if (maxFileSize > 0 && file.size > maxFileSize) {\n        rejected.push({ file, reason: 'size' });\n        continue;\n      }\n\n      accepted.push(file);\n    }\n\n    return { accepted, rejected };\n  }\n\n  private isUnrestrictedAccept(accept?: string): boolean {\n    const trimmed = accept?.trim();\n    return !trimmed || trimmed === '*';\n  }\n\n  private fileMatchesAccept(file: File, accept: string): boolean {\n    if (this.isUnrestrictedAccept(accept)) {\n      return true;\n    }\n\n    const tokens = accept\n      .split(',')\n      .map((token) => token.trim())\n      .filter(Boolean);\n    const mime = (file.type ?? '').trim().toLowerCase();\n    const fileName = file.name ?? '';\n    const missingOrGenericMime = !mime || mime === 'application/octet-stream';\n\n    return tokens.some((token) => {\n      if (token.startsWith('.')) {\n        const ext = token.startsWith('.') ? token.slice(1).toLowerCase() : token.toLowerCase();\n        return getFileExtension(fileName) === ext;\n      }\n\n      if (this.matchesMimePattern(mime, token)) {\n        return true;\n      }\n\n      if (missingOrGenericMime && token.endsWith('/*')) {\n        const category = token.slice(0, -2).toLowerCase();\n        return this.matchesCategoryByExtension(fileName, category);\n      }\n\n      return false;\n    });\n  }\n\n  private matchesMimePattern(mime: string, pattern: string): boolean {\n    const normalizedPattern = pattern.trim().toLowerCase();\n\n    if (!normalizedPattern || normalizedPattern === '*/*' || normalizedPattern === '*') {\n      return true;\n    }\n\n    if (normalizedPattern.endsWith('/*')) {\n      const category = normalizedPattern.slice(0, -2);\n      return mime.startsWith(`${category}/`) || (mime === '' && category === 'application');\n    }\n\n    return mime === normalizedPattern;\n  }\n\n  private matchesCategoryByExtension(fileName: string, category: string): boolean {\n    const ext = getFileExtension(fileName);\n    const extensionsByCategory: Record<string, readonly string[]> = {\n      image: ['png', 'jpg', 'jpeg', 'gif', 'webp', 'bmp', 'svg', 'ico', 'heic', 'heif'],\n      audio: ['mp3', 'm4a', 'aac', 'wav', 'webm', 'ogg', 'opus', 'flac'],\n      video: ['mp4', 'webm', 'ogg', 'mov', 'avi', 'mkv'],\n      text: ['txt', 'md', 'csv', 'tsv', 'json', 'xml', 'html', 'htm', 'yaml', 'yml', 'log'],\n    };\n    const allowed = extensionsByCategory[category];\n    return allowed ? allowed.includes(ext) : false;\n  }\n\n  protected files = computed<AXPFileListItem[]>(\n    () =>\n      (this.getValue() ?? []).map((file) => ({\n        ...file,\n      })) ?? [],\n  );\n\n  handleFileRemove(file: AXPFileListItem) {\n    this.removeFile(file);\n  }\n\n  public removeFile(file: AXPFileListItem) {\n    if (file.readOnly === true || !file.id) {\n      return;\n    }\n    // If multiple is false, always remove the file directly (no redo capability)\n    if (!this.multiple()) {\n      this.setValue((this.getValue() ?? []).filter((f) => f.id !== file.id) ?? []);\n      return;\n    }\n\n    // If multiple is true, use the existing logic (mark as deleted for redo)\n    if (file.status === 'attached') {\n      this.statusBeforeDelete.delete(file.id);\n      this.setValue((this.getValue() ?? []).filter((f) => f.id !== file.id) ?? []);\n    } else {\n      this.statusBeforeDelete.set(file.id, file.status);\n      this.setValue(\n        (this.getValue() ?? []).map((f) => (f.id === file.id ? { ...f, status: 'deleted' as const } : f)) ?? [],\n      );\n    }\n  }\n\n  /**\n   * Revert a deleted file back to its pre-delete status.\n   */\n  public handleFileRevert(file: AXPFileListItem) {\n    if (file.readOnly === true || !file.id) {\n      return;\n    }\n    const restoredStatus = this.resolveRestoredStatus(file);\n    if (!restoredStatus) {\n      return;\n    }\n    this.statusBeforeDelete.delete(file.id);\n    this.setValue((this.getValue() ?? []).map((f) => (f.id === file.id ? { ...f, status: restoredStatus } : f)) ?? []);\n  }\n\n  private resolveRestoredStatus(file: AXPFileListItem): AXPFileListItem['status'] | undefined {\n    if (!file.id) {\n      return undefined;\n    }\n    const fileId = file.id;\n    const baselineFile = (this.savedSnapshot() ?? []).find((f) => f.id === fileId);\n    const fromBaseline = baselineFile?.status;\n    if (fromBaseline && fromBaseline !== 'deleted') {\n      return fromBaseline;\n    }\n    const fromDelete = this.statusBeforeDelete.get(fileId);\n    if (fromDelete && fromDelete !== 'deleted') {\n      return fromDelete;\n    }\n    return 'uploaded';\n  }\n\n  /**\n   * Handle file rename action. Persists name/title/description to file storage immediately when edited\n   * so they are saved even if the entity payload does not carry these fields.\n   */\n  public handleFileRename(file: AXPFileListItem) {\n    if (file.readOnly === true) {\n      return;\n    }\n    const currentFiles = this.getValue() ?? [];\n    const previousFile = currentFiles.find((f) => f.id === file.id);\n\n    const nameChanged = previousFile && previousFile.name !== file.name;\n    const titleChanged = previousFile && previousFile.title !== file.title;\n    const descriptionChanged = previousFile && previousFile.description !== file.description;\n    const anyMetadataChanged = nameChanged || titleChanged || descriptionChanged;\n    const shouldChangeStatus =\n      anyMetadataChanged && previousFile && (previousFile.status === 'uploaded' || previousFile.status === 'remote');\n\n    const updatedFile: AXPFileListItem = {\n      ...file,\n      status: shouldChangeStatus ? 'editing' : file.status,\n    };\n\n    this.setValue(currentFiles.map((f) => (f.id === file.id ? updatedFile : f)) ?? []);\n  }\n\n  public clear() {\n    const current = this.getValue() ?? [];\n    const locked = current.filter((f) => f.readOnly === true);\n    this.setValue(locked);\n  }\n\n  protected readonly capabilities: AXCFileUploaderCapabilities = {\n    getFiles: () => this.files(),\n    setFiles: (files: AXPFileListItem[]) => this.setValue(files),\n    addFiles: (files: AXPFileListItem[]) => {\n      if (this.readonly()) {\n        return;\n      }\n      void this.addFilesWithValidation(files);\n    },\n    updateFile: (predicate: (f: AXPFileListItem) => boolean, updater: (f: AXPFileListItem) => AXPFileListItem) => {\n      const current = this.getValue() ?? [];\n      const next = current.map((f) => (predicate(f) ? updater(f) : f));\n      this.setValue(next);\n    },\n    removeFile: (file: AXPFileListItem) => this.removeFile(file),\n    clear: () => this.clear(),\n    getFileById: (id: string) => (this.getValue() ?? []).find((f) => f.id === id),\n    updateFileById: (id: string, next: Partial<AXPFileListItem>) => {\n      const current = this.getValue() ?? [];\n      const idx = current.findIndex((f) => f.id === id);\n      if (idx === -1) {\n        return;\n      }\n      const updated = { ...current[idx], ...next } as AXPFileListItem;\n      const cloned = [...current];\n      cloned[idx] = updated;\n      this.setValue(cloned);\n    },\n  };\n\n  private async addFilesWithValidation(files: AXPFileListItem[]): Promise<void> {\n    const validated = await this.validateListItemsForUpload(files);\n    if (validated.length === 0) {\n      return;\n    }\n    if (this.showEditDialogAfterSelect()) {\n      await this.addFilesWithEditDialogAsync(validated);\n      return;\n    }\n    this.setValue([...(this.getValue() ?? []), ...validated]);\n  }\n\n  //#region ----   Drag & Drop Handlers   ----\n\n  onFileChange(event: AXUploaderFileChangeEvent) {\n    if (event.rejected?.length) {\n      void this.notifyRejectedFiles(\n        event.rejected.map((entry) => ({\n          file: entry.file,\n          reason: 'type' as const,\n        })),\n      );\n    }\n    void this.processFiles(event.files);\n  }\n\n  //#endregion\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport {\n  AXUploaderModule,\n} from '@acorex/components/uploader';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { AXPQueryExecutor } from '@acorex/platform/runtime';\n\nimport { ChangeDetectionStrategy, Component, computed, effect, HostBinding, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXPFileListComponent } from './file-list/file-list.component';\nimport { AXPFileListItem } from '@acorex/platform/contracts';\nimport {\n  attachmentNeedsHydration,\n  resolveAttachmentFieldPath,\n  resolveFileUploaderEntityScope,\n  type AXPFileUploaderEntityFilesScope,\n} from './file-uploader-entity-files.util';\nimport { fetchHydratedEntityAttachments } from './file-uploader-lazy-hydrate.util';\n\n@Component({\n  selector: 'axp-file-uploader-widget-view',\n  template: `\n  <axp-file-list [files]=\"files()\" [readonly]=\"true\"></axp-file-list>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    FormsModule,\n    AXButtonModule,\n    AXDecoratorModule,\n    AXUploaderModule,\n    AXLoadingModule,\n    AXTranslationModule,\n    AXPFileListComponent\n],\n  inputs: [],\n})\nexport class AXPFileUploaderWidgetViewComponent extends AXPValueWidgetComponent<AXPFileListItem[]> {\n  private readonly queryExecutor = inject(AXPQueryExecutor);\n  private hydrateRequestId = 0;\n\n  constructor() {\n    super();\n\n    effect(() => {\n      const value = this.getValue();\n      if (!attachmentNeedsHydration(value)) {\n        return;\n      }\n      const scope = resolveFileUploaderEntityScope(\n        this.options(),\n        this.contextService.snapshot(),\n        resolveAttachmentFieldPath(this.options(), this.path),\n      );\n      if (!scope?.id) {\n        return;\n      }\n      void this.hydrateAttachments(scope);\n    });\n  }\n\n  protected files = computed<AXPFileListItem[]>(() => (this.getValue() ?? []).filter(file => file.status !== 'deleted') ?? []);\n\n  @HostBinding('class')\n  private get __class(): string {\n    const cls: any = {};\n    cls[`ax-block`] = true;\n    cls[`ax-flex-1`] = true;\n    return cls;\n  }\n\n  private async hydrateAttachments(scope: AXPFileUploaderEntityFilesScope): Promise<void> {\n    const requestId = ++this.hydrateRequestId;\n    try {\n      const files = await fetchHydratedEntityAttachments(this.queryExecutor, scope);\n      if (requestId !== this.hydrateRequestId) {\n        return;\n      }\n      const path = this.fullPath();\n      if (!path) {\n        return;\n      }\n      this.contextService.update(path, files, { origin: 'system' });\n    } catch {\n      /* keep refs; popover / edit can retry */\n    }\n  }\n}\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, createBooleanProperty, createNumberProperty, createStringProperty } from '@acorex/platform/layout/widget-core-contracts';\nimport { AXP_WIDGETS_ADVANCE_CATEGORY, AXP_WIDGETS_ADVANCE_SUB_MEDIA } from '@acorex/platform/layout/widget-core';\nimport {\n  AXP_ALLOW_MULTIPLE_PROPERTY,\n  AXP_BEHAVIOR_PROPERTY_GROUP,\n  AXP_DATA_PATH_PROPERTY,\n  AXP_DESCRIPTION_PROPERTY,\n  AXP_DOWNLOADABLE_PROPERTY,\n  AXP_NAME_PROPERTY,\n  AXP_READONLY_PROPERTY,\n} from '@acorex/platform/layout/widgets';\n\nexport const AXPFileUploaderWidget: AXPWidgetConfig = {\n  name: 'attachments',\n  title: '@platform-layout-widgets:widgets.attachments.title',\n  description: '@platform-layout-widgets:widgets.attachments.description',\n  icon: 'fa-light fa-files',\n  categories: [AXP_WIDGETS_ADVANCE_CATEGORY],\n  subCategory: AXP_WIDGETS_ADVANCE_SUB_MEDIA,\n  groups: [AXPWidgetGroupEnum.EntityWidget, 'form-element'],\n  type: 'editor',\n  properties: [\n    AXP_NAME_PROPERTY,\n    AXP_DATA_PATH_PROPERTY,\n    AXP_ALLOW_MULTIPLE_PROPERTY,\n    AXP_DOWNLOADABLE_PROPERTY,\n    AXP_READONLY_PROPERTY,\n    AXP_DESCRIPTION_PROPERTY,\n    createStringProperty({\n      name: 'accept',\n      title: 'Accept',\n      path: 'options.accept',\n      group: AXP_BEHAVIOR_PROPERTY_GROUP,\n    }),\n    createBooleanProperty({\n      name: 'fileEditable',\n      title: 'File Editable',\n      path: 'options.fileEditable',\n      group: AXP_BEHAVIOR_PROPERTY_GROUP,\n    }),\n    createBooleanProperty({\n      name: 'enableTitleDescription',\n      title: 'Enable Title & Description',\n      path: 'options.enableTitleDescription',\n      group: AXP_BEHAVIOR_PROPERTY_GROUP,\n    }),\n    createBooleanProperty({\n      name: 'showEditDialogAfterSelect',\n      title: 'Show Edit Dialog After File Select',\n      path: 'options.showEditDialogAfterSelect',\n      group: AXP_BEHAVIOR_PROPERTY_GROUP,\n    }),\n    createBooleanProperty({\n      name: 'showBorder',\n      title: 'Show Border',\n      path: 'options.showBorder',\n      group: AXP_BEHAVIOR_PROPERTY_GROUP,\n    }),\n    createBooleanProperty({\n      name: 'showAddItemButton',\n      title: 'Show Add Item Button',\n      path: 'options.showAddItemButton',\n      group: AXP_BEHAVIOR_PROPERTY_GROUP,\n    }),\n    createNumberProperty({\n      name: 'maxFileSize',\n      title: 'Max File Size (bytes)',\n      path: 'options.maxFileSize',\n      group: AXP_BEHAVIOR_PROPERTY_GROUP,\n    }),\n  ],\n  components: {\n    view: {\n      component: () =>\n        import('./file-uploader-widget-view.component').then((c) => c.AXPFileUploaderWidgetViewComponent),\n    },\n    edit: {\n      component: () =>\n        import('./file-uploader-widget-edit.component').then((c) => c.AXPFileUploaderWidgetEditComponent),\n    },\n    column: {\n      component: () =>\n        import('./file-uploader-widget-column.component').then((c) => c.AXPFileUploaderWidgetColumnComponent),\n    },\n    designer: {\n      component: () =>\n        import('./file-uploader-widget-edit.component').then((c) => c.AXPFileUploaderWidgetEditComponent),\n    },\n  },\n};\n\nexport interface AXPFileUploaderWidgetDesignerOptions {\n  multiple?: boolean;\n  accept?: string;\n  plugins?: { name: string; options?: unknown }[];\n  excludePlugins?: string[];\n  readonly?: boolean;\n  fileEditable?: boolean;\n  maxFileSize?: number;\n  enableTitleDescription?: boolean;\n  showEditDialogAfterSelect?: boolean;\n  showBorder?: boolean;\n  showAddItemButton?: boolean;\n}\n\nexport interface AXPFileUploaderWidgetViewOptions {}\n\nexport interface AXPFileUploaderWidgetEditOptions {\n  multiple?: boolean;\n  accept?: string;\n  plugins?: { name: string; options?: unknown }[];\n  excludePlugins?: string[];\n  readonly?: boolean;\n  fileEditable?: boolean;\n  maxFileSize?: number;\n  enableTitleDescription?: boolean;\n  showEditDialogAfterSelect?: boolean;\n  showBorder?: boolean;\n  showAddItemButton?: boolean;\n}\n\nexport interface AXPFileUploaderWidgetColumnOptions {}\n\nexport interface AXPFileUploaderWidgetPrintOptions {}\n\nexport interface AXPFileUploaderWidgetOptions {\n  designer: AXPFileUploaderWidgetDesignerOptions;\n  view: AXPFileUploaderWidgetViewOptions;\n  edit: AXPFileUploaderWidgetEditOptions;\n  print: AXPFileUploaderWidgetPrintOptions;\n  column: AXPFileUploaderWidgetColumnOptions;\n}\n\ndeclare module '@acorex/platform/layout/widget-core-contracts' {\n  interface AXPWidgetTypesMap {\n    attachments: 'attachments';\n  }\n}\n","import { inject, Injectable, signal } from '@angular/core';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPFileListItem } from '@acorex/platform/contracts';\nimport { AXPCommandExecutor, AXPQueryExecutor } from '@acorex/platform/runtime';\nimport type { AXPFileUploaderEditDialogOptions } from './file-uploader-widget.types';\nimport type { AXPFileUploaderEntityFilesScope } from './file-uploader-entity-files.util';\nimport type { AXPFileUploaderLoadFilesResult } from './file-uploader-load-files.query';\nimport type { AXPFileUploaderSaveFilesResult } from './file-uploader-save-files.command';\n\nexport interface AXPFileUploaderShowFileListEntityContext extends AXPFileUploaderEntityFilesScope {}\n\nexport interface AXPFileUploaderShowFileListOptions {\n  /** When set, files are loaded and saved via FileUploader:LoadFiles / FileUploader:SaveFiles. */\n  entity?: AXPFileUploaderShowFileListEntityContext;\n  /** Direct files (e.g. grid column preview); skips load/save commands. */\n  files?: AXPFileListItem[];\n  readonly?: boolean;\n  multiple?: boolean;\n  accept?: string;\n  fileEditable?: boolean;\n  maxFileSize?: number;\n  showAddItemButton?: boolean;\n  plugins?: { name: string; options?: unknown }[];\n  editDialog?: AXPFileUploaderEditDialogOptions;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPFileUploaderWidgetService {\n  //#region ----   Services & Dependencies   ----\n\n  private popupService = inject(AXPopupService);\n  private translate = inject(AXTranslationService);\n  private commandExecutor = inject(AXPCommandExecutor);\n  private queryExecutor = inject(AXPQueryExecutor);\n\n  //#endregion\n\n  //#region ----   Public API   ----\n\n  async showFileList(options?: AXPFileUploaderShowFileListOptions): Promise<AXPFileListItem[] | undefined> {\n    const entity = options?.entity;\n    let files = options?.files;\n\n    if (entity) {\n      const filesResult = await this.queryExecutor.fetch<\n        AXPFileUploaderShowFileListEntityContext,\n        AXPFileUploaderLoadFilesResult\n      >('FileUploader:LoadFiles', entity);\n      if (!filesResult) {\n        return undefined;\n      }\n      files = filesResult.files ?? [];\n    }\n\n    const resolved = {\n      files: files ?? [],\n      readonly: options?.readonly ?? false,\n      multiple: options?.multiple ?? false,\n      accept: options?.accept ?? '*',\n      fileEditable: options?.fileEditable ?? true,\n      maxFileSize: options?.maxFileSize ?? 1024 * 1024 * 10,\n      showAddItemButton: options?.showAddItemButton ?? true,\n      plugins: options?.plugins ?? [],\n      editDialog: options?.editDialog,\n    };\n\n    const component = await import('./file-list-popup/file-list-popup.component').then(\n      (m) => m.AXPFileListPopupComponent,\n    );\n    const result = await this.popupService.open(component, {\n      title: await this.translate.translateAsync('@document-management:terms.common.file'),\n      data: {\n        files: signal(resolved.files),\n        isReadonly: signal(resolved.readonly),\n        multiple: signal(resolved.multiple),\n        accept: signal(resolved.accept),\n        maxFileSize: signal(resolved.maxFileSize),\n        fileEditable: signal(resolved.fileEditable),\n        showAddItemButton: signal(resolved.showAddItemButton),\n        plugins: signal(resolved.plugins),\n        editDialog: signal(resolved.editDialog),\n      },\n    });\n\n    const updatedFiles = result?.data?.data?.files as AXPFileListItem[] | undefined;\n    if (!updatedFiles) {\n      return undefined;\n    }\n\n    if (!entity) {\n      return updatedFiles;\n    }\n\n    const saveResult = await this.commandExecutor.execute<\n      AXPFileUploaderShowFileListEntityContext & { files: AXPFileListItem[] },\n      AXPFileUploaderSaveFilesResult\n    >('FileUploader:SaveFiles', {\n      ...entity,\n      files: updatedFiles,\n    });\n\n    if (!saveResult?.success) {\n      return undefined;\n    }\n\n    return updatedFiles;\n  }\n\n  //#endregion\n}\n","//#region ---- Imports ----\n\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\n\n//#endregion\n\n@Component({\n  selector: 'axp-selector-structure-widget-column',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <span class=\"ax-inline-flex ax-items-center ax-gap-2 ax-text-sm\" [title]=\"cellText()\">\n      @if (previewIcon()) {\n        <i [class]=\"previewIcon()\" aria-hidden=\"true\"></i>\n      }\n      <span>{{ cellText() }}</span>\n    </span>\n  `,\n})\nexport class AXPSelectorStructureWidgetColumnComponent extends AXPValueWidgetComponent {\n  //#region ---- Computed ----\n\n  protected identityField = computed(() => (this.options() as { identityField?: string })['identityField'] ?? 'name');\n  protected textField = computed(() => (this.options() as { textField?: string })['textField'] ?? 'title');\n  protected valueField = computed(() => (this.options() as { valueField?: string })['valueField'] ?? 'name');\n\n  protected previewIcon = computed(() => (this.options() as { previewIcon?: string })['previewIcon']?.trim() ?? '');\n\n  protected cellText = computed(() => {\n    const rows = (this.getValue() as Record<string, unknown>[]) ?? [];\n    if (!rows.length) {\n      return '—';\n    }\n    const tf = this.textField();\n    const idf = this.identityField();\n    const vf = this.valueField();\n    const parts = rows\n      .filter((r) => {\n        const key = r[vf] ?? r[idf];\n        return key != null && key !== '';\n      })\n      .map((r) => (typeof r[tf] === 'string' && (r[tf] as string).length ? String(r[tf]) : String(r[idf] ?? '')));\n    return parts.length ? parts.join(', ') : '—';\n  });\n\n  //#endregion\n}\n","//#region ---- Imports ----\n\nimport { AXPContextChangeEvent, type AXPWidgetNode, extractValue } from '@acorex/platform/contracts';\nimport { AXPEntity } from '@acorex/platform/layout/entity-contracts';\nimport {\n  AXDataSource,\n  AXDataSourceFilterOption,\n  AXDataSourceQuery,\n  AXDataSourceSortOption,\n  AXValueChangedEvent,\n} from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCollapseModule } from '@acorex/components/collapse';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXSelectBoxComponent, AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\n\nimport { AXPValueWidgetComponent, AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, untracked } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\nimport type { AXPSelectorStructureFieldDef } from './selector-structure-widget.config';\n\n/** Internal key for stable row tracking before a selector value is committed (persisted with the row). */\nconst SELECTOR_STRUCTURE_ROW_UID = '__rowUid';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n  selector: 'axp-selector-structure-widget-edit',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    FormsModule,\n    AXSelectBoxModule,\n    AXFormModule,\n    AXCollapseModule,\n    AXLabelModule,\n    AXPWidgetCoreModule,\n    AXTextBoxModule,\n    AXButtonModule,\n    AXDecoratorModule\n],\n  template: `\n    @if (!disabled()) {\n      @if (useCompactLayout()) {\n        <div class=\"ax-flex ax-flex-col ax-gap-3\">\n          @for (row of rows(); track trackRow(row); let idx = $index) {\n            <ax-collapse-group look=\"fill\">\n              <ax-collapse\n                [caption]=\"rowCaption(row)\"\n                [showHeader]=\"true\"\n                [icon]=\"previewIcon()\"\n              >\n                <div class=\"ax-flex ax-flex-col ax-gap-4 ax-pt-1\">\n                  <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-start\">\n                    <ax-select-box\n                      class=\"ax-flex-1\"\n                      [dataSource]=\"compactRowDataSources()[idx]\"\n                      [valueField]=\"valueField()\"\n                      [textField]=\"textField()\"\n                      [multiple]=\"false\"\n                      [disabled]=\"isRowSelectLocked(row)\"\n                      [placeholder]=\"compactSelectPlaceholder()\"\n                      [ngModel]=\"compactRowSelectedItems()[idx]\"\n                      (onValueChanged)=\"handleCompactSelectChange(idx, $event)\"\n                    >\n                    </ax-select-box>\n                    @if (isRowSelectLocked(row)) {\n                      <ax-button\n                        color=\"neutral\"\n                        look=\"blank\"\n                        [title]=\"clearRowTitle()\"\n                        type=\"button\"\n                        (onClick)=\"clearCompactRow(idx)\"\n                      >\n                        <i class=\"far fa-times\"></i>\n                      </ax-button>\n                    }\n                    <ax-button\n                      color=\"danger\"\n                      look=\"blank\"\n                      [title]=\"removeRowTitle()\"\n                      type=\"button\"\n                      (onClick)=\"removeCompactRow(idx)\"\n                    >\n                      <i class=\"far fa-trash\"></i>\n                    </ax-button>\n                  </div>\n                  @if (structureMode() === 'schema') {\n                    <axp-widgets-container\n                      [context]=\"row\"\n                      (onContextChanged)=\"handleSchemaContextChange(trackRow(row), $event)\"\n                    >\n                      @if (identityDisplay() === 'readonly' && identityNode(); as idNode) {\n                        <ax-form-field>\n                          <ax-label>{{ identityLabel() }}</ax-label>\n                          <ng-container axp-widget-renderer [node]=\"idNode\" [mode]=\"'edit'\"></ng-container>\n                        </ax-form-field>\n                      }\n                      @for (f of structureFieldNodes(); track f.name) {\n                        <ax-form-field>\n                          <ax-label>{{ f.title }}</ax-label>\n                          <ng-container axp-widget-renderer [node]=\"f.node\" [mode]=\"'edit'\"></ng-container>\n                        </ax-form-field>\n                      }\n                    </axp-widgets-container>\n                  } @else {\n                    <div class=\"ax-flex ax-flex-col ax-gap-2\">\n                      <span class=\"ax-font-semibold ax-text-sm\">{{ freeformHeading() }}</span>\n                      @for (entry of freeformEntries(row); track entry.index) {\n                        <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-start\">\n                          <ax-text-box\n                            class=\"ax-flex-1\"\n                            [placeholder]=\"keyPlaceholder()\"\n                            [ngModel]=\"entry.key\"\n                            (ngModelChange)=\"onFreeformKeyInput(row, entry, $event)\"\n                          ></ax-text-box>\n                          <ax-text-box\n                            class=\"ax-flex-1\"\n                            [placeholder]=\"valuePlaceholder()\"\n                            [ngModel]=\"entry.value\"\n                            (ngModelChange)=\"patchFreeformValue(row, entry.key, $event)\"\n                          ></ax-text-box>\n                          <ax-button\n                            color=\"danger\"\n                            look=\"blank\"\n                            [title]=\"removePairTitle()\"\n                            type=\"button\"\n                            (onClick)=\"removeFreeformKey(row, entry.key)\"\n                          >\n                            <i class=\"far fa-trash\"></i>\n                          </ax-button>\n                        </div>\n                      }\n                      <div>\n                        <ax-button [text]=\"addPairLabel()\" color=\"primary\" look=\"twotone\" type=\"button\" (onClick)=\"addFreeformPair(row)\">\n                          <i class=\"far fa-plus ax-me-1\"></i>\n                        </ax-button>\n                      </div>\n                    </div>\n                  }\n                </div>\n              </ax-collapse>\n            </ax-collapse-group>\n          }\n          <div class=\"ax-flex ax-justify-end\">\n            <ax-button [text]=\"addCompactItemLabel()\" color=\"primary\" look=\"twotone\" type=\"button\" (onClick)=\"addCompactRow()\">\n              <i class=\"far fa-plus ax-me-1\"></i>\n            </ax-button>\n          </div>\n        </div>\n      } @else {\n        @if (selectorMode() === 'select') {\n          <ax-select-box\n            [dataSource]=\"contextSelectDataSource()\"\n            [valueField]=\"valueField()\"\n            [textField]=\"textField()\"\n            [multiple]=\"multiple()\"\n            [ngModel]=\"selectedSourceItems()\"\n            (onValueChanged)=\"handleSelectValueChange($event)\"\n          >\n          </ax-select-box>\n        } @else if (selectorMode() === 'lookup' && lookupDataSource()) {\n          <ax-select-box\n            [dataSource]=\"lookupDataSource()!\"\n            [valueField]=\"valueField()\"\n            [textField]=\"lookupTextField()\"\n            [multiple]=\"multiple()\"\n            [ngModel]=\"lookupSelectedItems()\"\n            (onValueChanged)=\"handleLookupValueChange($event)\"\n          >\n            @if (lookupHasClearButton()) {\n              <ax-clear-button></ax-clear-button>\n            }\n          </ax-select-box>\n        }\n\n        <div class=\"ax-py-3\"></div>\n\n        @if (rows().length > 0) {\n          <ax-collapse-group look=\"fill\">\n            @for (row of rows(); track trackRow(row)) {\n              <ax-collapse [caption]=\"rowCaption(row)\">\n                <div class=\"ax-flex ax-flex-col ax-gap-4\">\n                  @if (structureMode() === 'schema') {\n                    <axp-widgets-container\n                      [context]=\"row\"\n                      (onContextChanged)=\"handleSchemaContextChange(trackRow(row), $event)\"\n                    >\n                      @if (identityDisplay() === 'readonly' && identityNode(); as idNode) {\n                        <ax-form-field>\n                          <ax-label>{{ identityLabel() }}</ax-label>\n                          <ng-container axp-widget-renderer [node]=\"idNode\" [mode]=\"'edit'\"></ng-container>\n                        </ax-form-field>\n                      }\n                      @for (f of structureFieldNodes(); track f.name) {\n                        <ax-form-field>\n                          <ax-label>{{ f.title }}</ax-label>\n                          <ng-container axp-widget-renderer [node]=\"f.node\" [mode]=\"'edit'\"></ng-container>\n                        </ax-form-field>\n                      }\n                    </axp-widgets-container>\n                  } @else {\n                    <div class=\"ax-flex ax-flex-col ax-gap-2\">\n                      <span class=\"ax-font-semibold ax-text-sm\">{{ freeformHeading() }}</span>\n                      @for (entry of freeformEntries(row); track entry.index) {\n                        <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-start\">\n                          <ax-text-box\n                            class=\"ax-flex-1\"\n                            [placeholder]=\"keyPlaceholder()\"\n                            [ngModel]=\"entry.key\"\n                            (ngModelChange)=\"onFreeformKeyInput(row, entry, $event)\"\n                          ></ax-text-box>\n                          <ax-text-box\n                            class=\"ax-flex-1\"\n                            [placeholder]=\"valuePlaceholder()\"\n                            [ngModel]=\"entry.value\"\n                            (ngModelChange)=\"patchFreeformValue(row, entry.key, $event)\"\n                          ></ax-text-box>\n                          <ax-button\n                            color=\"danger\"\n                            look=\"blank\"\n                            [title]=\"removePairTitle()\"\n                            type=\"button\"\n                            (onClick)=\"removeFreeformKey(row, entry.key)\"\n                          >\n                            <i class=\"far fa-trash\"></i>\n                          </ax-button>\n                        </div>\n                      }\n                      <div>\n                        <ax-button [text]=\"addPairLabel()\" color=\"primary\" look=\"twotone\" type=\"button\" (onClick)=\"addFreeformPair(row)\">\n                          <i class=\"far fa-plus ax-me-1\"></i>\n                        </ax-button>\n                      </div>\n                    </div>\n                  }\n                </div>\n              </ax-collapse>\n            }\n          </ax-collapse-group>\n        }\n      }\n    } @else {\n      <span class=\"ax-text-muted\">{{ disabledHint() }}</span>\n    }\n  `,\n})\nexport class AXPSelectorStructureWidgetEditComponent extends AXPValueWidgetComponent {\n  //#region ---- Services & dependencies ----\n\n  private readonly entityRegistry = inject(AXPEntityDefinitionRegistryService);\n\n  //#endregion\n\n  //#region ---- Options ----\n\n  protected selectorMode = computed(() => ((this.options() as { selectorMode?: string })['selectorMode'] as 'select' | 'lookup') ?? 'select');\n  protected structureMode = computed(() => ((this.options() as { structureMode?: string })['structureMode'] as 'schema' | 'freeform') ?? 'schema');\n  protected contextSiblingPath = computed(() => (this.options() as { contextSiblingPath?: string })['contextSiblingPath'] ?? '');\n  protected identityField = computed(() => (this.options() as { identityField?: string })['identityField'] ?? 'name');\n  protected identityDisplay = computed(() => ((this.options() as { identityDisplay?: string })['identityDisplay'] as 'readonly' | 'hidden') ?? 'readonly');\n  protected valueField = computed(() => (this.options() as { valueField?: string })['valueField'] ?? 'name');\n  protected textField = computed(() => (this.options() as { textField?: string })['textField'] ?? 'title');\n  protected multiple = computed(() => ((this.options() as { multiple?: boolean })['multiple'] ?? true) as boolean);\n  protected freeformPath = computed(() => (this.options() as { freeformPath?: string })['freeformPath'] ?? 'options');\n  protected lookupEntityKey = computed(() => (this.options() as { entity?: string })['entity'] as string | undefined);\n  protected lookupHasClearButton = computed(\n    () => ((this.options() as { hasClearButton?: boolean })['hasClearButton'] ?? false) as boolean,\n  );\n  protected lookupCustomFilter = computed(\n    () => (this.options() as { filter?: AXDataSourceFilterOption })['filter'] as AXDataSourceFilterOption | undefined,\n  );\n\n  protected disabled = computed(() => {\n    const raw = (this.options() as { disabled?: boolean | string })['disabled'];\n    return raw === true || raw === 'true';\n  });\n\n  protected presentationMode = computed(() => {\n    const raw = (this.options() as { presentation?: unknown })['presentation'];\n    const v = extractValue(raw, 'id') as string | null;\n    return v === 'compactPanel' ? 'compactPanel' : 'standard';\n  });\n\n  /** Compact panel (address-style) applies only to sibling select mode; lookup falls back to standard layout. */\n  protected useCompactLayout = computed(() => this.presentationMode() === 'compactPanel' && this.selectorMode() === 'select');\n\n  protected previewIcon = computed(() => (this.options() as { previewIcon?: string })['previewIcon']?.trim() ?? '');\n\n  protected placeholder = computed(() => (this.options() as { placeholder?: string })['placeholder'] ?? '');\n\n  protected compactSelectPlaceholder = computed(() => {\n    const p = this.placeholder();\n    return p.length ? p : 'Choose';\n  });\n\n  protected addCompactItemLabel = computed(() => (this.options() as { addCompactItemLabel?: string })['addCompactItemLabel'] ?? 'Add item');\n\n  protected clearRowTitle = computed(() => (this.options() as { clearRowTitle?: string })['clearRowTitle'] ?? 'Clear selection');\n\n  protected removeRowTitle = computed(() => (this.options() as { removeRowTitle?: string })['removeRowTitle'] ?? 'Remove row');\n\n  //#endregion\n\n  //#region ---- Context / select ----\n\n  protected resolvedSiblingPath(): string {\n    const s = this.contextSiblingPath();\n    if (!s) {\n      return '';\n    }\n    const parent = this.parentPath();\n    return parent ? `${parent}.${s}` : s;\n  }\n\n  /**\n   * Items shown in the selector: sibling context array when path is set, otherwise optional static `dataSource` array.\n   */\n  protected contextItems = computed(() => {\n    const path = this.resolvedSiblingPath();\n    if (path) {\n      const v = this.contextService.getValue(path);\n      return Array.isArray(v) ? (v as unknown[]) : [];\n    }\n    const raw = (this.options() as { dataSource?: unknown })['dataSource'];\n    if (Array.isArray(raw)) {\n      return raw as unknown[];\n    }\n    return [] as unknown[];\n  });\n\n  protected contextSelectDataSource = computed(\n    () =>\n      new AXDataSource({\n        load: async () => {\n          const items = this.contextItems();\n          return { items, total: items.length };\n        },\n        pageSize: 500,\n        key: this.valueField(),\n      }),\n  );\n\n  protected selectedSourceItems = signal<unknown[]>([]);\n\n  protected compactRowDataSources = computed(() => {\n    this.contextItems();\n    const rows = this.rows();\n    const n = rows.length;\n    const vf = this.valueField();\n    const out: AXDataSource[] = [];\n    for (let i = 0; i < n; i++) {\n      const index = i;\n      out.push(\n        new AXDataSource({\n          load: async () => {\n            const items = this.exclusiveItemsForRow(index);\n            return { items, total: items.length };\n          },\n          pageSize: 500,\n          key: vf,\n        }),\n      );\n    }\n    return out;\n  });\n\n  protected compactRowSelectedItems = computed(() => {\n    const rows = this.rows();\n    const vf = this.valueField();\n    const tf = this.textField();\n    const idf = this.identityField();\n    const all = this.contextItems();\n    return rows.map((row) => {\n      if (this.isDraftRow(row)) {\n        return [];\n      }\n      const key = row[vf] ?? row[idf];\n      const found = all.find((i) => (i as Record<string, unknown>)[vf] === key);\n      if (found) {\n        return [found];\n      }\n      return [{ [vf]: key, [tf]: row[tf] ?? String(key) }] as unknown[];\n    });\n  });\n\n  //#endregion\n\n  //#region ---- Lookup ----\n\n  protected lookupEntityDef = signal<AXPEntity | null>(null);\n\n  protected defaultLookupSorts = computed<AXDataSourceSortOption[]>(() => {\n    const entity = this.lookupEntityDef();\n    if (!entity?.interfaces) {\n      return [];\n    }\n    const master = (entity.interfaces as Record<string, unknown>)['master'] as Record<string, unknown> | undefined;\n    const list = master?.['list'] as Record<string, unknown> | undefined;\n    const views = list?.['views'] as unknown[] | undefined;\n    const firstView = views?.[0] as { sorts?: { name: string; dir?: string }[] } | undefined;\n    if (!firstView?.sorts?.length) {\n      return [];\n    }\n    return firstView.sorts.map((sort) => ({\n      field: sort.name,\n      dir: (sort.dir === 'desc' ? 'desc' : 'asc') as 'asc' | 'desc',\n    }));\n  });\n\n  protected lookupDataSource = computed<AXDataSource | null>(() => {\n    const entity = this.lookupEntityDef();\n    if (!entity) {\n      return null;\n    }\n    const defaultSorts = this.defaultLookupSorts();\n    return new AXDataSource({\n      load: (e: AXDataSourceQuery) => {\n        const func = entity.queries?.list?.execute as ((req: unknown) => Promise<{ items: unknown[]; total: number }>) | undefined;\n        if (!func || typeof func !== 'function') {\n          return Promise.resolve({ items: [], total: 0 });\n        }\n        this.mergeListFilter(e as unknown as Record<string, unknown>, this.lookupCustomFilter());\n        const query = e as unknown as Record<string, unknown>;\n        if (defaultSorts.length > 0 && (!(query['sort'] as unknown[])?.length)) {\n          query['sort'] = defaultSorts;\n        }\n        return func(e);\n      },\n      pageSize: 10,\n      key: this.valueField(),\n    });\n  });\n\n  protected lookupTextField = computed(() => {\n    const explicit = (this.options() as { textField?: string })['textField'];\n    if (explicit) {\n      return explicit;\n    }\n    const entity = this.lookupEntityDef();\n    const props = entity?.properties as { name: string }[] | undefined;\n    const list = ['title', 'name', 'code', 'description'];\n    return list.find((c) => props?.some((p) => p.name === c)) ?? 'title';\n  });\n\n  protected lookupSelectedItems = signal<unknown[]>([]);\n\n  //#endregion\n\n  //#region ---- Rows & schema ----\n\n  protected rows = computed(() => (this.getValue() as Record<string, unknown>[]) ?? []);\n\n  protected structureFields = computed(\n    () => ((this.options() as { structureFields?: AXPSelectorStructureFieldDef[] })['structureFields'] ?? []) as AXPSelectorStructureFieldDef[],\n  );\n\n  protected structureFieldNodes = computed(() =>\n    this.structureFields().map((f) => ({\n      name: f.name,\n      title: f.title,\n      node: {\n        type: f.widgetType,\n        path: f.name,\n        name: f.name,\n        options: f.options ?? {},\n      } as AXPWidgetNode,\n    })),\n  );\n\n  protected identityLabel = computed(() => (this.options() as { identityLabel?: string })['identityLabel'] ?? 'Key');\n\n  protected identityNode = computed((): AXPWidgetNode | null => {\n    if (this.identityDisplay() !== 'readonly') {\n      return null;\n    }\n    const idf = this.identityField();\n    return {\n      type: 'text-editor',\n      path: idf,\n      name: idf,\n      options: { readonly: true },\n    };\n  });\n\n  //#endregion\n\n  //#region ---- i18n fallbacks (plain EN; can swap for translate pipe later) ----\n\n  protected freeformHeading = computed(() => (this.options() as { freeformHeading?: string })['freeformHeading'] ?? 'Options');\n  protected keyPlaceholder = computed(() => (this.options() as { keyPlaceholder?: string })['keyPlaceholder'] ?? 'Key');\n  protected valuePlaceholder = computed(() => (this.options() as { valuePlaceholder?: string })['valuePlaceholder'] ?? 'Value');\n  protected addPairLabel = computed(() => (this.options() as { addPairLabel?: string })['addPairLabel'] ?? 'Add pair');\n  protected removePairTitle = computed(() => (this.options() as { removePairTitle?: string })['removePairTitle'] ?? 'Remove');\n  protected disabledHint = computed(() => (this.options() as { disabledHint?: string })['disabledHint'] ?? '—');\n\n  //#endregion\n\n  //#region ---- Lifecycle & effects ----\n\n  #resolveLookup = effect(async () => {\n    if (this.selectorMode() !== 'lookup') {\n      this.lookupEntityDef.set(null);\n      return;\n    }\n    const key = this.lookupEntityKey();\n    if (!key) {\n      this.lookupEntityDef.set(null);\n      return;\n    }\n    const parts = key.split('.');\n    const moduleName = parts[0] ?? '';\n    const entityName = parts.slice(1).join('.');\n    try {\n      const def = await this.entityRegistry.resolve(moduleName, entityName);\n      this.lookupEntityDef.set(def);\n    } catch {\n      this.lookupEntityDef.set(null);\n    }\n  });\n\n  #syncSelect = effect(() => {\n    if (this.useCompactLayout()) {\n      return;\n    }\n    if (this.selectorMode() !== 'select') {\n      return;\n    }\n    const rows = this.rows();\n    const idf = this.identityField();\n    const vf = this.valueField();\n    const keys = new Set(rows.map((r) => r[idf] as string | number));\n    const items = this.contextItems().filter((item) => keys.has((item as Record<string, unknown>)[vf] as string | number));\n    untracked(() => this.selectedSourceItems.set(items));\n  });\n\n  #syncLookup = effect(() => {\n    if (this.useCompactLayout()) {\n      return;\n    }\n    if (this.selectorMode() !== 'lookup') {\n      return;\n    }\n    const rows = this.rows();\n    const vf = this.valueField();\n    const tf = this.lookupTextField();\n    const synthetic = rows.map((r) => {\n      const base = { ...r } as Record<string, unknown>;\n      base[tf] = base[tf] ?? r[vf] ?? '';\n      return base;\n    });\n    untracked(() => this.lookupSelectedItems.set(synthetic));\n  });\n\n  //#endregion\n\n  //#region ---- Row helpers ----\n\n  protected trackRow(row: Record<string, unknown>): unknown {\n    const idf = this.identityField();\n    const k = row[idf];\n    if (k != null && k !== '') {\n      return k;\n    }\n    const uid = row[SELECTOR_STRUCTURE_ROW_UID];\n    if (typeof uid === 'string' && uid.length) {\n      return uid;\n    }\n    return null;\n  }\n\n  protected rowCaption(row: Record<string, unknown>): string {\n    if (this.isDraftRow(row)) {\n      const p = this.placeholder();\n      return p.length ? p : 'Choose';\n    }\n    const tf = this.textField();\n    const idf = this.identityField();\n    const t = row[tf];\n    if (typeof t === 'string' && t.length) {\n      return t;\n    }\n    return String(row[idf] ?? '');\n  }\n\n  protected isDraftRow(row: Record<string, unknown>): boolean {\n    const vf = this.valueField();\n    const idf = this.identityField();\n    const key = row[vf] ?? row[idf];\n    return key == null || key === '';\n  }\n\n  protected isRowSelectLocked(row: Record<string, unknown>): boolean {\n    return !this.isDraftRow(row);\n  }\n\n  /**\n   * Items available for row `index`: all source items minus keys already chosen on other committed rows;\n   * always includes the current row's selected item so the select can display it.\n   */\n  protected exclusiveItemsForRow(index: number): unknown[] {\n    const all = this.contextItems();\n    const vf = this.valueField();\n    const idf = this.identityField();\n    const rows = this.rows();\n    const otherKeys = new Set<string | number>();\n    for (let j = 0; j < rows.length; j++) {\n      if (j === index) {\n        continue;\n      }\n      const r = rows[j];\n      if (this.isDraftRow(r)) {\n        continue;\n      }\n      const k = r[vf] ?? r[idf];\n      if (k != null && k !== '') {\n        otherKeys.add(k as string | number);\n      }\n    }\n    const row = rows[index];\n    const currentKey = row?.[vf] ?? row?.[idf];\n    return all.filter((item) => {\n      const itemKey = (item as Record<string, unknown>)[vf];\n      if (currentKey != null && currentKey !== '' && itemKey === currentKey) {\n        return true;\n      }\n      return !otherKeys.has(itemKey as string | number);\n    });\n  }\n\n  //#endregion\n\n  //#region ---- Compact panel handlers ----\n\n  private newRowUid(): string {\n    return globalThis.crypto?.randomUUID?.() ?? `row-${Date.now()}-${Math.random()}`;\n  }\n\n  protected handleCompactSelectChange(index: number, e: AXValueChangedEvent): void {\n    if (!e.isUserInteraction) {\n      return;\n    }\n    const items = ((e.component as AXSelectBoxComponent).selectedItems ?? []) as unknown[];\n    const item = items[0];\n    this.applyCompactRowFromItem(index, item ?? undefined);\n  }\n\n  protected applyCompactRowFromItem(index: number, rawItem: unknown | undefined): void {\n    const idf = this.identityField();\n    const vf = this.valueField();\n    const tf = this.textField();\n    const fp = this.freeformPath();\n    const rows = [...((this.getValue() as Record<string, unknown>[]) ?? [])];\n    const prev = rows[index] ?? {};\n    if (rawItem == null) {\n      rows[index] = {\n        [SELECTOR_STRUCTURE_ROW_UID]: (prev[SELECTOR_STRUCTURE_ROW_UID] as string) ?? this.newRowUid(),\n        ...(this.structureMode() === 'freeform' ? { [fp]: {} } : {}),\n      };\n      this.setValue(rows);\n      return;\n    }\n    const item = rawItem as Record<string, unknown>;\n    const key = item[vf];\n    const old = prev;\n    const row: Record<string, unknown> = {\n      ...old,\n      [idf]: key,\n      [tf]: item[tf] ?? old[tf] ?? key,\n    };\n    delete row[SELECTOR_STRUCTURE_ROW_UID];\n    if (this.structureMode() === 'freeform') {\n      const path = fp ?? 'options';\n      row[path] = old[path] && typeof old[path] === 'object' ? { ...(old[path] as object) } : {};\n    }\n    rows[index] = row;\n    this.setValue(rows);\n  }\n\n  protected clearCompactRow(index: number): void {\n    const fp = this.freeformPath();\n    const rows = [...((this.getValue() as Record<string, unknown>[]) ?? [])];\n    rows[index] = {\n      [SELECTOR_STRUCTURE_ROW_UID]: this.newRowUid(),\n      ...(this.structureMode() === 'freeform' ? { [fp]: {} } : {}),\n    };\n    this.setValue(rows);\n  }\n\n  protected removeCompactRow(index: number): void {\n    const rows = [...((this.getValue() as Record<string, unknown>[]) ?? [])];\n    rows.splice(index, 1);\n    this.setValue(rows);\n  }\n\n  protected addCompactRow(): void {\n    const fp = this.freeformPath();\n    const rows = [...((this.getValue() as Record<string, unknown>[]) ?? [])];\n    const draft: Record<string, unknown> = {\n      [SELECTOR_STRUCTURE_ROW_UID]: this.newRowUid(),\n    };\n    if (this.structureMode() === 'freeform') {\n      draft[fp] = {};\n    }\n    rows.push(draft);\n    this.setValue(rows);\n  }\n\n  //#endregion\n\n  //#region ---- Select handlers ----\n\n  protected handleSelectValueChange(e: AXValueChangedEvent): void {\n    if (!e.isUserInteraction) {\n      return;\n    }\n    const items = ((e.component as AXSelectBoxComponent).selectedItems ?? []) as unknown[];\n    this.applyRowsFromSourceItems(items);\n  }\n\n  protected handleLookupValueChange(e: AXValueChangedEvent): void {\n    if (!e.isUserInteraction) {\n      return;\n    }\n    const items = ((e.component as AXSelectBoxComponent).selectedItems ?? []) as unknown[];\n    this.applyRowsFromSourceItems(items);\n  }\n\n  protected applyRowsFromSourceItems(items: unknown[]): void {\n    const idf = this.identityField();\n    const vf = this.valueField();\n    const tf = this.textField();\n    const fp = this.freeformPath();\n    const prev = (this.getValue() as Record<string, unknown>[]) ?? [];\n    const prevMap = new Map(prev.map((r) => [r[idf], r] as const));\n    const next: Record<string, unknown>[] = [];\n    for (const raw of items) {\n      const item = raw as Record<string, unknown>;\n      const key = item[vf];\n      const old = prevMap.get(key) ?? {};\n      const row: Record<string, unknown> = {\n        ...old,\n        [idf]: key,\n        [tf]: item[tf] ?? old[tf] ?? key,\n      };\n      if (this.structureMode() === 'freeform') {\n        const path = fp ?? 'options';\n        row[path] = old[path] && typeof old[path] === 'object' ? { ...(old[path] as object) } : {};\n      }\n      next.push(row);\n    }\n    this.setValue(next);\n  }\n\n  //#endregion\n\n  //#region ---- Schema ----\n\n  protected handleSchemaContextChange(rowKey: unknown, e: AXPContextChangeEvent): void {\n    const rows = [...((this.getValue() as Record<string, unknown>[]) ?? [])];\n    const idf = this.identityField();\n    let idx = rows.findIndex((r) => r[idf] === rowKey);\n    if (idx < 0 && rowKey != null) {\n      idx = rows.findIndex((r) => r[SELECTOR_STRUCTURE_ROW_UID] === rowKey);\n    }\n    if (idx < 0) {\n      return;\n    }\n    rows[idx] = { ...rows[idx], ...e.data };\n    this.setValue(rows);\n  }\n\n  //#endregion\n\n  //#region ---- Freeform ----\n\n  protected freeformEntries(row: Record<string, unknown>): { key: string; value: string; index: number }[] {\n    const fp = this.freeformPath();\n    const raw = row[fp];\n    if (!raw || typeof raw !== 'object') {\n      return [];\n    }\n    const o = raw as Record<string, unknown>;\n    return Object.keys(o).map((key, index) => ({\n      key,\n      value: this.serializeFreeformValue(o[key]),\n      index,\n    }));\n  }\n\n  private serializeFreeformValue(value: unknown): string {\n    if (value == null) {\n      return '';\n    }\n    if (typeof value === 'object') {\n      try {\n        return JSON.stringify(value);\n      } catch {\n        return String(value);\n      }\n    }\n    return String(value);\n  }\n\n  protected onFreeformKeyInput(row: Record<string, unknown>, entry: { key: string; value: string; index: number }, nextKey: string): void {\n    if (nextKey === entry.key) {\n      return;\n    }\n    this.renameFreeformKey(row, entry.key, nextKey);\n  }\n\n  protected patchFreeformValue(row: Record<string, unknown>, key: string, raw: string): void {\n    const parsed = this.tryParseFreeformString(raw);\n    this.patchFreeformMap(row, (o) => {\n      o[key] = parsed;\n    });\n  }\n\n  protected removeFreeformKey(row: Record<string, unknown>, key: string): void {\n    this.patchFreeformMap(row, (o) => {\n      delete o[key];\n    });\n  }\n\n  protected addFreeformPair(row: Record<string, unknown>): void {\n    this.patchFreeformMap(row, (o) => {\n      let n = 1;\n      while (`key${n}` in o) {\n        n++;\n      }\n      o[`key${n}`] = '';\n    });\n  }\n\n  private renameFreeformKey(row: Record<string, unknown>, oldKey: string, newKey: string): void {\n    if (!newKey || oldKey === newKey) {\n      return;\n    }\n    this.patchFreeformMap(row, (o) => {\n      const v = o[oldKey];\n      delete o[oldKey];\n      o[newKey] = v ?? '';\n    });\n  }\n\n  private patchFreeformMap(row: Record<string, unknown>, fn: (draft: Record<string, unknown>) => void): void {\n    const rows = [...((this.getValue() as Record<string, unknown>[]) ?? [])];\n    const idf = this.identityField();\n    const idx = rows.findIndex((r) => r[idf] === row[idf]);\n    if (idx < 0) {\n      return;\n    }\n    const fp = this.freeformPath();\n    const nextRow = { ...rows[idx] };\n    const nextMap = { ...((nextRow[fp] as Record<string, unknown>) ?? {}) };\n    fn(nextMap);\n    nextRow[fp] = nextMap;\n    rows[idx] = nextRow;\n    this.setValue(rows);\n  }\n\n  private tryParseFreeformString(raw: string): unknown {\n    const t = raw.trim();\n    if (!t.length) {\n      return '';\n    }\n    if ((t.startsWith('{') && t.endsWith('}')) || (t.startsWith('[') && t.endsWith(']'))) {\n      try {\n        return JSON.parse(t) as unknown;\n      } catch {\n        return raw;\n      }\n    }\n    return raw;\n  }\n\n  //#endregion\n\n  //#region ---- Lookup filter merge (mirror lookup select) ----\n\n  private mergeListFilter(request: Record<string, unknown>, filter: AXDataSourceFilterOption | null | undefined): void {\n    if (!filter) {\n      return;\n    }\n    if (request['filter']) {\n      request['filter'] = {\n        logic: 'and',\n        filters: [request['filter'], ...(filter.filters ?? [])],\n      };\n    } else {\n      request['filter'] = filter;\n    }\n  }\n\n  //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\n\n//#endregion\n\n@Component({\n  selector: 'axp-selector-structure-widget-view',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    @if (summaries().length) {\n      <span class=\"ax-inline-flex ax-items-center ax-gap-2 ax-text-sm ax-text-muted\">\n        @if (previewIcon()) {\n          <i [class]=\"previewIcon()\" aria-hidden=\"true\"></i>\n        }\n        <span>{{ summaries().join(', ') }}</span>\n      </span>\n    } @else {\n      <span class=\"ax-inline-flex ax-items-center ax-gap-2 ax-text-sm ax-text-muted\">\n        @if (previewIcon()) {\n          <i [class]=\"previewIcon()\" aria-hidden=\"true\"></i>\n        }\n        <span>—</span>\n      </span>\n    }\n  `,\n})\nexport class AXPSelectorStructureWidgetViewComponent extends AXPValueWidgetComponent {\n  //#region ---- Computed ----\n\n  protected identityField = computed(() => (this.options() as { identityField?: string })['identityField'] ?? 'name');\n  protected textField = computed(() => (this.options() as { textField?: string })['textField'] ?? 'title');\n  protected valueField = computed(() => (this.options() as { valueField?: string })['valueField'] ?? 'name');\n\n  protected previewIcon = computed(() => (this.options() as { previewIcon?: string })['previewIcon']?.trim() ?? '');\n\n  protected summaries = computed(() => {\n    const rows = (this.getValue() as Record<string, unknown>[]) ?? [];\n    const tf = this.textField();\n    const idf = this.identityField();\n    const vf = this.valueField();\n    return rows\n      .filter((r) => {\n        const key = r[vf] ?? r[idf];\n        return key != null && key !== '';\n      })\n      .map((r) => (typeof r[tf] === 'string' && (r[tf] as string).length ? String(r[tf]) : String(r[idf] ?? '')));\n  });\n\n  //#endregion\n}\n","//#region ---- Imports ----\n\nimport { AXPWidgetConfig, AXPWidgetGroupEnum, createSelectProperty, createStringProperty } from '@acorex/platform/layout/widget-core-contracts';\nimport { AXPWidgetsCatalog } from '@acorex/platform/contracts';\n\nimport {\n  AXP_BEHAVIOR_PROPERTY_GROUP,\n  AXP_DATA_PATH_PROPERTY,\n  AXP_DISABLED_PROPERTY,\n  AXP_NAME_PROPERTY,\n} from '@acorex/platform/layout/widgets';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport type AXPSelectorStructureSelectorMode = 'select' | 'lookup';\n\nexport type AXPSelectorStructureStructureMode = 'schema' | 'freeform';\n\nexport type AXPSelectorStructureIdentityDisplay = 'readonly' | 'hidden';\n\n/** UI layout: standard = global multi-select + collapse rows; compactPanel = per-row select (address-style). */\nexport type AXPSelectorStructurePresentationMode = 'standard' | 'compactPanel';\n\nexport interface AXPSelectorStructureFieldDef {\n  name: string;\n  title: string;\n  widgetType: string;\n  options?: Record<string, unknown>;\n}\n\n//#endregion\n\n//#region ---- Widget config ----\n\nexport const AXPSelectorStructureWidget: AXPWidgetConfig = {\n  name: 'selector-structure',\n  title: 'Selector + structure',\n  description: 'Select items (list or lookup), then edit structured fields or free-form key/value pairs per row.',\n  icon: 'fa-light fa-list-tree',\n  categories: [],\n  groups: [AXPWidgetGroupEnum.EntityWidget],\n  type: 'editor',\n  properties: [\n    AXP_NAME_PROPERTY,\n    AXP_DATA_PATH_PROPERTY,\n    AXP_DISABLED_PROPERTY,\n    {\n      name: 'selectorMode',\n      title: 'Selector mode',\n      group: { name: 'behavior', title: 'Behavior', order: 2 },\n      schema: {\n        dataType: 'string',\n        interface: {\n          path: 'selectorMode',\n          type: AXPWidgetsCatalog.select,\n          options: {\n            dataSource: [\n              { value: 'select', title: 'Select' },\n              { value: 'lookup', title: 'Lookup' },\n            ],\n            valueField: 'value',\n            textField: 'title',\n          },\n        },\n      },\n      visible: true,\n    },\n    {\n      name: 'structureMode',\n      title: 'Structure mode',\n      group: { name: 'behavior', title: 'Behavior', order: 2 },\n      schema: {\n        dataType: 'string',\n        interface: {\n          path: 'structureMode',\n          type: AXPWidgetsCatalog.select,\n          options: {\n            dataSource: [\n              { value: 'schema', title: 'Schema' },\n              { value: 'freeform', title: 'Free-form map' },\n            ],\n            valueField: 'value',\n            textField: 'title',\n          },\n        },\n      },\n      visible: true,\n    },\n    createSelectProperty({\n      name: 'presentation',\n      title: 'Presentation',\n      group: AXP_BEHAVIOR_PROPERTY_GROUP,\n      path: 'options.presentation',\n      defaultValue: { id: 'standard', title: 'Standard' },\n      dataSource: [\n        { id: 'standard', title: 'Standard' },\n        { id: 'compactPanel', title: 'Compact panel' },\n      ],\n    }),\n    createStringProperty({\n      name: 'previewIcon',\n      title: 'Preview icon',\n      group: AXP_BEHAVIOR_PROPERTY_GROUP,\n      path: 'options.previewIcon',\n      defaultValue: '',\n    }),\n    createStringProperty({\n      name: 'placeholder',\n      title: 'Placeholder',\n      group: AXP_BEHAVIOR_PROPERTY_GROUP,\n      path: 'options.placeholder',\n      defaultValue: '',\n    }),\n  ],\n  components: {\n    view: {\n      component: () =>\n        import('./selector-structure-widget-view.component').then((c) => c.AXPSelectorStructureWidgetViewComponent),\n    },\n    edit: {\n      component: () =>\n        import('./selector-structure-widget-edit.component').then((c) => c.AXPSelectorStructureWidgetEditComponent),\n    },\n    column: {\n      component: () =>\n        import('./selector-structure-widget-column.component').then((c) => c.AXPSelectorStructureWidgetColumnComponent),\n    },\n    designer: {\n      component: () =>\n        import('./selector-structure-widget-edit.component').then((c) => c.AXPSelectorStructureWidgetEditComponent),\n    },\n  },\n};\n\n//#endregion\n\n//#region ---- Options interfaces ----\n\nexport interface AXPSelectorStructureWidgetDesignerOptions {\n  selectorMode?: AXPSelectorStructureSelectorMode;\n  structureMode?: AXPSelectorStructureStructureMode;\n  presentation?: AXPSelectorStructurePresentationMode;\n  previewIcon?: string;\n  placeholder?: string;\n  contextSiblingPath?: string;\n  identityField?: string;\n  identityDisplay?: AXPSelectorStructureIdentityDisplay;\n  valueField?: string;\n  textField?: string;\n  dataSource?: unknown;\n  multiple?: boolean;\n  lookup?: {\n    entity?: string;\n    look?: 'select' | 'lookup';\n    filter?: unknown;\n    hasClearButton?: boolean;\n  };\n  structureFields?: AXPSelectorStructureFieldDef[];\n  freeformPath?: string;\n}\n\nexport interface AXPSelectorStructureWidgetViewOptions extends AXPSelectorStructureWidgetDesignerOptions {}\n\nexport interface AXPSelectorStructureWidgetEditOptions extends AXPSelectorStructureWidgetDesignerOptions {}\n\nexport interface AXPSelectorStructureWidgetColumnOptions {\n  identityField?: string;\n  textField?: string;\n  previewIcon?: string;\n}\n\nexport interface AXPSelectorStructureWidgetPrintOptions {}\n\nexport interface AXPSelectorStructureWidgetOptions {\n  designer: AXPSelectorStructureWidgetDesignerOptions;\n  view: AXPSelectorStructureWidgetViewOptions;\n  edit: AXPSelectorStructureWidgetEditOptions;\n  print: AXPSelectorStructureWidgetPrintOptions;\n  column: AXPSelectorStructureWidgetColumnOptions;\n}\n\n//#endregion\n","//#region ----   Imports   ----\n\nimport { AXPExtendedWidget, AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core-contracts';\nimport { AXP_WIDGETS_EDITOR_CATEGORY, AXPWidgetDefinitionProvider } from '@acorex/platform/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport { AXPEntityCategoryWidget } from './widgets/entity-category-widget';\nimport { AXPEntityDefinitionProviderWidget } from './widgets/entity-definition-provider-widget';\nimport { AXPEntityListWidget } from './widgets/entity-list';\nimport { AXPPageComponentWidget } from './widgets/page-component';\nimport { AXPLookupWidget } from './widgets/lookup-widget';\nimport { AXPLookupFilterOptionsWidget } from './widgets/lookup-widget/lookup-filter-options';\nimport { AXPMultiSourceSelectorWidget } from './widgets/multi-source-selector-widget';\nimport { AXPFileUploaderWidget } from './widgets/file-uploader-widget';\nimport { AXPSelectorStructureWidget } from './widgets/selector-structure-widget';\n\n//#endregion\n\n//#region ----   Entity Widgets Provider   ----\n\nconst ENTITY_WIDGETS = [\n  AXPLookupWidget,\n  AXPLookupFilterOptionsWidget,\n  AXPSelectorStructureWidget,\n  AXPEntityListWidget,\n  AXPPageComponentWidget,\n  AXPEntityCategoryWidget,\n  AXPMultiSourceSelectorWidget,\n  AXPEntityDefinitionProviderWidget,\n  AXPFileUploaderWidget,\n];\n\nconst ENTITY_EXTENDED_WIDGETS: AXPExtendedWidget[] = [\n  {\n    parentName: AXPLookupWidget.name,\n    widget: {\n      name: 'lookup-filter' as any,\n      title: 'Lookup Filter',\n      categories: AXP_WIDGETS_EDITOR_CATEGORY,\n      groups: [AXPWidgetGroupEnum.EntityWidget],\n      type: 'filter',\n      components: {},\n      options: {\n        look: 'select',\n        filterMode: true,\n      },\n    },\n  },\n];\n\n/**\n * Provider for entity-related widgets (Lookup, SelectorStructure, EntityList, EntityCategory, MultiSourceSelector).\n */\n@Injectable()\nexport class AXPEntityWidgetsProvider implements AXPWidgetDefinitionProvider {\n  getWidgets() {\n    return ENTITY_WIDGETS;\n  }\n\n  getExtendedWidgets() {\n    return ENTITY_EXTENDED_WIDGETS;\n  }\n}\n\n//#endregion\n","import { AXPBadge, type AXPPageStatus } from '@acorex/platform/contracts';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\n\nexport interface DetailsViewPageStatusInput {\n  readonly isReadonly?: boolean;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPDetailsViewBadgeStatusService {\n  private readonly entityRegistry = inject(AXPEntityDefinitionRegistryService);\n  private readonly translateService = inject(AXTranslationService);\n\n  async getPageBadge(\n    entityName: string,\n    _context: unknown,\n    isDirty: boolean,\n  ): Promise<AXPBadge | null> {\n    if (!isDirty) {\n      return null;\n    }\n    return {\n      title: await this.translateService.translateAsync(\n        '@general:terms.interface.save-status.not-saved.title',\n      ),\n      color: 'warning',\n      description: await this.translateService.translateAsync(\n        '@general:terms.interface.save-status.not-saved.description',\n      ),\n    };\n  }\n\n  async getPageStatus(\n    entityName: string,\n    context: Record<string, unknown>,\n    currentPage: DetailsViewPageStatusInput | null,\n  ): Promise<AXPPageStatus | null> {\n    if (!entityName) {\n      return null;\n    }\n\n    const [moduleName, entityNamePart] = entityName.split('.');\n    if (!moduleName || !entityNamePart) {\n      return null;\n    }\n\n    try {\n      const entityDefinition = await this.entityRegistry.resolve(moduleName, entityNamePart);\n      if (!entityDefinition) {\n        return null;\n      }\n\n      const statusPlugins = (entityDefinition.plugins ?? []).filter(\n        (p: { name?: string }) => p.name === 'status',\n      );\n      if (statusPlugins.length === 0) {\n        return null;\n      }\n\n      const explicitPrimary = statusPlugins.find(\n        (p: { options?: { isPrimary?: boolean } }) => p.options?.isPrimary === true,\n      );\n      const primaryPlugin =\n        explicitPrimary ??\n        statusPlugins.find((p: { options?: { isPrimary?: boolean } }) => p.options?.isPrimary !== false) ??\n        statusPlugins[0];\n\n      const statusOptions = primaryPlugin.options as {\n        field?: string;\n        definition?: string;\n        readonly?: boolean;\n      };\n      const statusField = statusOptions.field ?? 'statusId';\n      const statusDefinitionKey = statusOptions.definition;\n      const pluginReadonly = statusOptions.readonly === true;\n\n      let definitionKey: string | undefined =\n        typeof statusDefinitionKey === 'string' ? statusDefinitionKey : undefined;\n\n      if (!definitionKey) {\n        const statusProperty = entityDefinition.properties?.find(\n          (p: { name?: string }) => p.name === statusField,\n        );\n        const widgetOptions = statusProperty?.schema?.interface?.options as\n          | { definitionKey?: string }\n          | undefined;\n        if (widgetOptions?.definitionKey) {\n          definitionKey = widgetOptions.definitionKey;\n        }\n      }\n\n      if (!definitionKey) {\n        return null;\n      }\n\n      const statusValue = context?.[statusField];\n      if (statusValue == null) {\n        return null;\n      }\n\n      const value =\n        typeof statusValue === 'string' ? statusValue : (statusValue as { name?: string })?.name ?? statusValue;\n\n      return {\n        definitionKey,\n        value: String(value),\n        dataPath: statusField,\n        readonly: pluginReadonly || (currentPage?.isReadonly ?? false),\n      };\n    } catch (error) {\n      console.warn('Failed to get page status:', error);\n      return null;\n    }\n  }\n}\n","\n\nimport { AXPContextData, AXPExecuteCommand, AXPExecuteCommandResult, type AXPMultiLanguageString } from '@acorex/platform/contracts';\nimport { AXPLayoutDetailsViewAdapter } from '@acorex/platform/layout/views';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPDetailsViewBadgeStatusService } from './details-view-badge-status.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPLayoutAdapterBuilder {\n  private readonly badgeStatusService = inject(AXPDetailsViewBadgeStatusService);\n  private adapter: Partial<AXPLayoutDetailsViewAdapter> = {};\n  private entity: any;\n  private rootContext: any;\n  private rootTitle: AXPMultiLanguageString | undefined;\n  private dependencies: any;\n\n  setEntity(entity: any, rootContext: any): this {\n    this.entity = entity;\n    this.rootContext = rootContext;\n    return this;\n  }\n\n  setDependencies(dependencies: any): this {\n    this.dependencies = dependencies;\n    return this;\n  }\n\n  setMainPage(mainPage: any): this {\n    this.adapter.pages = [mainPage];\n    return this;\n  }\n\n  setRelatedPages(relatedPages: any[]): this {\n    this.adapter.pages = [...(this.adapter.pages || []), ...relatedPages];\n    return this;\n  }\n\n  setPages(pages: any[]): this {\n    this.adapter.pages = pages;\n    return this;\n  }\n\n  setExitUrl(params: { moduleName: string; entityName: string; applicationName: string }): this {\n    this.adapter.exitUrl = `/${params.applicationName}/m/${params.moduleName}/e/${params.entityName}/list`;\n    return this;\n  }\n\n  /**\n   * Sets the evaluated root title (e.g. display name) used when displaying the adapter title on mobile.\n   * Accepts a plain string, `@` i18n key, or locale map. Without this, the raw template expression would be shown when showPages is true.\n   */\n  setRootTitle(rootTitle: AXPMultiLanguageString): this {\n    this.rootTitle = rootTitle;\n    return this;\n  }\n\n  build(): AXPLayoutDetailsViewAdapter {\n    const title =\n      this.rootTitle ?? this.entity?.interfaces?.master?.single?.title ?? this.entity?.formats?.individual ?? '';\n    const name = `${this.entity?.module}.${this.entity?.name}`;\n    return {\n      name,\n      title,\n      label: this.entity?.formats.plural,\n      actions: [],\n      breadcrumbs: this.createBreadcrumbs(),\n      execute: this.createExecuteFunction(),\n      load: this.createLoadFunction(),\n      pages: this.adapter.pages || [],\n      exitUrl: this.adapter.exitUrl,\n      getPageBadge: (context, isDirty) => this.badgeStatusService.getPageBadge(name, context, isDirty),\n      getPageStatus: (context, currentPage) => this.badgeStatusService.getPageStatus(name, context, currentPage),\n    };\n  }\n\n  private createBreadcrumbs() {\n    const session = this.dependencies.session;\n    const moduleName = this.entity?.module;\n    const entityName = this.entity?.name;\n\n    return [\n      {\n        title: this.entity?.formats.plural ?? '',\n        command: {\n          name: 'navigate',\n          options: {\n            path: `/${session.application?.name}/m/${moduleName}/e/${entityName}/list`,\n          },\n        },\n      },\n      {\n        title: this.rootTitle ?? this.entity?.interfaces?.master?.single?.title ?? '',\n        command: {\n          name: 'navigate',\n          options: {\n            path: `/${session.application?.name}/m/${moduleName}/e/${entityName}/${this.rootContext.id}/view`,\n          },\n        },\n      },\n    ];\n  }\n\n  private createExecuteFunction(): (\n    command: AXPExecuteCommand,\n    context: AXPContextData,\n  ) => Promise<AXPExecuteCommandResult> {\n    return (command: any, context: any) => {\n      return Promise.resolve({ success: true });\n    };\n  }\n\n  private createLoadFunction(): () => Promise<AXPExecuteCommandResult> {\n    return async () => {\n      return {\n        success: true,\n        data: this.rootContext,\n      };\n    };\n  }\n}\n","import { AXPEntity, AXPEntityAction, AXPEntityCommandScope, AXPRelatedEntity } from '@acorex/platform/layout/entity-contracts';\nimport { AXPFilterOperatorMiddlewareService } from '@acorex/platform/common';\nimport type { AXPMultiLanguageString } from '@acorex/platform/contracts';\nimport { AXPExpressionEvaluatorScope, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { get } from 'lodash-es';\nimport { AXPEntityDefinitionRegistryService } from '../../../entity-registery.service';\nimport { hintFormFieldOptionsFromDescription } from '../../../utils/hint-form-field-options.util';\n\nexport interface AXPRelatedEntityConverter {\n  convert(relatedEntity: AXPRelatedEntity, context: any): Promise<any>;\n}\n\nexport interface AXPRelatedEntityConverterContext {\n  entityResolver: AXPEntityDefinitionRegistryService;\n  expressionEvaluator?: AXPExpressionEvaluatorService;\n  context?: any;\n  rootTitle?: AXPMultiLanguageString;\n  workflowService?: any;\n  commandService?: any;\n  filterOperatorMiddleware: AXPFilterOperatorMiddlewareService;\n  [key: string]: any;\n}\n\nexport abstract class AXPBaseRelatedEntityConverter implements AXPRelatedEntityConverter {\n  abstract convert(relatedEntity: AXPRelatedEntity, context: AXPRelatedEntityConverterContext): Promise<any>;\n\n  protected async getEntityDefinition(\n    relatedEntity: AXPRelatedEntity,\n    entityResolver: AXPEntityDefinitionRegistryService,\n  ) {\n    const [moduleName, entityName] = relatedEntity.entity.split('.');\n    const entityDef = await entityResolver.resolve(moduleName, entityName);\n\n    if (!entityDef) {\n      throw new Error(`Entity ${relatedEntity.entity} not found`);\n    }\n\n    return { entityDef, moduleName, entityName };\n  }\n\n  protected createExpressionEvaluator(context: any, expressionEvaluator: AXPExpressionEvaluatorService) {\n    return async (actionData: { [key: string]: string }) => {\n      const scope: AXPExpressionEvaluatorScope = {\n        context: {\n          eval: (path: string) => get(context, path),\n        },\n      };\n      return await expressionEvaluator.evaluate(actionData, scope);\n    };\n  }\n\n  /**\n   * Evaluates related-entity action expressions against the parent (root) context.\n   * Individual-scope actions are left unchanged so row-level expressions are evaluated later in the list/table layer.\n   */\n  protected async evaluateRelatedEntityActionsForRootContext(\n    actions: AXPEntityAction[] | undefined,\n    context: AXPRelatedEntityConverterContext,\n  ): Promise<AXPEntityAction[]> {\n    const list = actions ?? [];\n    const evaluator = context.expressionEvaluator;\n    if (!evaluator) {\n      return list;\n    }\n    const scope: AXPExpressionEvaluatorScope = {\n      context: {\n        eval: (path: string) => get(context.context, path),\n      },\n    };\n    return Promise.all(\n      list.map(async (action) => {\n        if (action.scope === AXPEntityCommandScope.Individual) {\n          return action;\n        }\n        return (await evaluator.evaluate(action, scope)) as AXPEntityAction;\n      }),\n    );\n  }\n\n  protected async createFilters(relatedEntity: AXPRelatedEntity, evaluateExpressions: (data: any) => Promise<any>) {\n    return (\n      relatedEntity.conditions?.map(async (c) => {\n        const value = await evaluateExpressions(c.value);\n        return {\n          field: c.name,\n          operator: c.operator,\n          value: value,\n        };\n      }) ?? []\n    );\n  }\n\n  protected createEntityHelpers(entityDef: AXPEntity) {\n    const groups = entityDef?.groups ?? [];\n    const singleInterface = entityDef?.interfaces?.master?.single;\n\n    return {\n      getGroupById: (id: string) => groups.find((s: any) => s.id === id),\n      getPropertyByGroupId: (groupId: string) => entityDef?.properties.filter((p: any) => p.groupId === groupId) ?? [],\n      getPropertyLayout: (name: string) => singleInterface?.properties?.find((p: any) => p.name === name)?.layout,\n      singleInterface,\n      groups,\n    };\n  }\n\n  protected createGridLayoutStructure(\n    singleInterface: any,\n    helpers: ReturnType<typeof this.createEntityHelpers>,\n    includeProperties?: string[],\n  ) {\n    return this.createGridLayoutStructureInternal(singleInterface, helpers, includeProperties);\n  }\n\n  //#region ----   Property visibility (layout)   ----\n\n  /**\n   * Chooses which properties appear in the related-entity grid layout.\n   * Boolean `schema.visible === false` excludes a property. String templates are kept in the layout\n   * and passed on `form-field.options.visible`; `AXPWidgetRendererDirective` uses\n   * `AXPExpressionEvaluatorService` in `updateVisibility()` to evaluate them when context updates.\n   */\n  private getVisiblePropertiesByGroupId(\n    sectionId: string,\n    helpers: ReturnType<typeof this.createEntityHelpers>,\n    includeProperties?: string[],\n  ) {\n    let properties = helpers.getPropertyByGroupId(sectionId) ?? [];\n\n    // Filter by includeProperties if provided\n    if (includeProperties && includeProperties.length > 0) {\n      const includeSet = new Set(includeProperties);\n      properties = properties.filter((p: any) => includeSet.has(p.name));\n    }\n\n    const evaluated = properties.map((property: any) => {\n      const visible = property?.schema?.visible;\n      if (typeof visible === 'string') {\n        // Include in layout; runtime evaluation via `AXPExpressionEvaluatorService` (widget renderer).\n        return { property, visible: true };\n      }\n      return { property, visible: visible ?? true };\n    });\n\n    return evaluated.filter((x) => x.visible !== false).map((x) => x.property);\n  }\n\n  private createPropertyGrid(\n    sectionId: string,\n    helpers: ReturnType<typeof this.createEntityHelpers>,\n    includeProperties?: string[],\n  ) {\n    const visibleProperties = this.getVisiblePropertiesByGroupId(sectionId, helpers, includeProperties);\n\n    return {\n      type: 'grid-layout',\n      mode: 'edit',\n      options: {\n        grid: {\n          default: {\n            columns: 'repeat(12, 1fr)',\n            rows: 'repeat(1, 1fr)',\n            gap: '20px',\n          },\n        },\n      },\n      children: visibleProperties.map((p: any) => {\n        const layout = helpers.getPropertyLayout(p.name);\n        const sv = p.schema?.visible;\n        let formFieldVisible: boolean | string | undefined;\n        if (typeof sv === 'string') {\n          // Evaluated by `AXPExpressionEvaluatorService` in `AXPWidgetRendererDirective.updateVisibility()`.\n          formFieldVisible = sv;\n        } else if (sv === false) {\n          formFieldVisible = false;\n        }\n        return {\n          type: 'grid-item-layout',\n          name: p.name,\n          options: {\n            colSpan: layout?.positions?.lg?.colSpan ?? 12,\n            colStart: layout?.positions?.lg?.colStart,\n            colEnd: layout?.positions?.lg?.colEnd,\n          },\n          children: [\n            {\n              type: 'form-field',\n              options: {\n                label: p.title,\n                showLabel: layout?.label?.visible ?? true,\n                ...(formFieldVisible !== undefined ? { visible: formFieldVisible } : {}),\n                ...(hintFormFieldOptionsFromDescription(p.description) ?? {}),\n              },\n              children: [\n                {\n                  type: p.schema.interface?.type ?? '',\n                  path: p.name,\n                  name: p.name,\n                  defaultValue: p.schema.defaultValue,\n                  children: p.schema.interface?.children,\n                  options: p.schema.interface?.options,\n                  triggers: p.schema.interface?.triggers,\n                  valueTransforms: p.schema.interface?.valueTransforms,\n                },\n              ],\n            },\n          ],\n        };\n      }),\n    };\n  }\n\n  private createGridLayoutStructureInternal(\n    singleInterface: any,\n    helpers: ReturnType<typeof this.createEntityHelpers>,\n    includeProperties?: string[],\n  ) {\n    // Filter out empty sections (sections with no visible properties)\n    const sectionsWithProperties = (singleInterface?.sections ?? []).map((s: any) => {\n      const visibleProperties = this.getVisiblePropertiesByGroupId(s.id, helpers, includeProperties);\n      return { section: s, hasProperties: visibleProperties.length > 0 };\n    });\n\n    const validSections = sectionsWithProperties\n      .filter((item: { section: any; hasProperties: boolean }) => item.hasProperties)\n      .map((item: { section: any; hasProperties: boolean }) => item.section);\n\n    return {\n      type: 'grid-layout',\n      options: {\n        grid: {\n          default: {\n            columns: 'repeat(12, 1fr)',\n            rows: 'repeat(1, 1fr)',\n            gap: '20px',\n          },\n        },\n      },\n      children: validSections.map((s: any) => ({\n        type: 'grid-item-layout',\n        name: s.id,\n        options: {\n          colSpan: s.layout?.positions?.lg?.colSpan ?? 12,\n          colStart: s.layout?.positions?.lg?.colStart,\n          colEnd: s.layout?.positions?.lg?.colEnd,\n        },\n        children: [\n          {\n            type: 'fieldset-layout',\n            options: {\n              title: helpers.getGroupById(s.id)?.title ?? '',\n              collapsible: true,\n              showTitle: s.layout?.label?.visible ?? true,\n            },\n            children: [this.createPropertyGrid(s.id, helpers, includeProperties)],\n          },\n        ],\n      })),\n    };\n  }\n\n  //#endregion\n}\n","\nimport { AXPEntityPage } from '@acorex/platform/layout/entity-contracts';\nimport { AXPExecuteCommand, AXPExecuteCommandResult, AXPMultiLanguageString } from '@acorex/platform/contracts';\nimport { AXPContextStore } from '@acorex/platform/core';\nimport { AXPPageComponentRegistryService } from '@acorex/platform/layout/components';\nimport {\n  AXPLayoutDetailsViewAction,\n  AXPLayoutDetailsViewPage,\n  AXPPageComponentInstanceRegistryService,\n  AXPPageLayoutBaseComponent,\n} from '@acorex/platform/layout/views';\nimport { inject, Injectable, Injector, Type } from '@angular/core';\n\n//#region ----   Page Component Converter   ----\n\n/**\n * Converts AXPEntityPage to AXPLayoutDetailsViewPage for component-based pages\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPPageComponentConverter {\n  private pageComponentRegistry = inject(AXPPageComponentRegistryService);\n  private injector = inject(Injector);\n  private instanceRegistry = inject(AXPPageComponentInstanceRegistryService);\n\n  async convert(\n    entityPage: AXPEntityPage,\n    rootContext: Record<string, any>,\n    rootTitle: AXPMultiLanguageString,\n  ): Promise<AXPLayoutDetailsViewPage> {\n    // Verify component exists in registry\n    const loader = await this.pageComponentRegistry.find(entityPage.componentKey);\n    if (!loader) {\n      throw new Error(`Component with key \"${entityPage.componentKey}\" not found in registry`);\n    }\n\n    // Load component type\n    const ComponentType = await loader();\n\n    const { actions, hasExecute } = await this.getComponentActionsAndExecute(ComponentType);\n\n    const pageConfig = typeof entityPage.field === 'string' ? { field: entityPage.field } : undefined;\n    const options = entityPage.options;\n    const componentKey = entityPage.componentKey;\n\n    return {\n      id: componentKey,\n      title: rootTitle,\n      label: entityPage.title ?? componentKey,\n      description: entityPage.description,\n      icon: entityPage.icon,\n      content: [{ type: 'component', componentKey, pageConfig, options }],\n      actions,\n      getActions: () => this.getActionsFromInstance(componentKey, actions),\n      ...(hasExecute && {\n        execute: (command: AXPExecuteCommand, context: Record<string, unknown>): Promise<AXPExecuteCommandResult> =>\n          this.delegateExecute(componentKey, command, context),\n      }),\n      isReadonly: false,\n    };\n  }\n\n  /**\n   * Get actions from the registered component instance (reactive).\n   * Falls back to static actions if instance is not yet registered.\n   */\n  private async getActionsFromInstance(\n    componentKey: string,\n    fallbackActions: AXPLayoutDetailsViewAction[],\n  ): Promise<AXPLayoutDetailsViewAction[]> {\n    const instance = this.instanceRegistry.get(componentKey);\n    if (!instance) {\n      return fallbackActions;\n    }\n\n    const actions: AXPLayoutDetailsViewAction[] = [];\n\n    const [primaryActions, secondaryActions] = await Promise.all([\n      instance.getPrimaryMenuItems(),\n      instance.getSecondaryMenuItems(),\n    ]);\n\n    for (const action of primaryActions) {\n      actions.push({\n        ...action,\n        priority: 'primary',\n        zone: (action as { zone?: 'header' | 'footer' }).zone ?? 'header',\n      } as AXPLayoutDetailsViewAction);\n    }\n\n    for (const action of secondaryActions) {\n      actions.push({\n        ...action,\n        priority: 'secondary',\n        zone: (action as { zone?: 'header' | 'footer' }).zone ?? 'header',\n      } as AXPLayoutDetailsViewAction);\n    }\n\n    return actions;\n  }\n\n  private async delegateExecute(\n    componentKey: string,\n    command: AXPExecuteCommand,\n    context: Record<string, unknown>,\n  ): Promise<AXPExecuteCommandResult> {\n    const instance = this.instanceRegistry.get(componentKey);\n    const result = await instance?.execute?.(command);\n    if (result !== undefined && typeof result === 'object' && result !== null && 'success' in result) {\n      return result as AXPExecuteCommandResult;\n    }\n    return { success: true };\n  }\n\n  /**\n   * Get actions and whether component has custom execute from component if it extends AXPPageLayoutBaseComponent\n   */\n  private async getComponentActionsAndExecute(ComponentType: Type<unknown>): Promise<{\n    actions: AXPLayoutDetailsViewAction[];\n    hasExecute: boolean;\n  }> {\n    const empty = { actions: [] as AXPLayoutDetailsViewAction[], hasExecute: false };\n    try {\n      let currentType: unknown = ComponentType;\n      let extendsBase = false;\n\n      while (currentType) {\n        if (currentType === AXPPageLayoutBaseComponent) {\n          extendsBase = true;\n          break;\n        }\n        currentType = Object.getPrototypeOf(currentType);\n        if (\n          !currentType ||\n          currentType === Object ||\n          currentType === Function ||\n          !(currentType as { prototype?: unknown }).prototype\n        ) {\n          break;\n        }\n      }\n\n      if (!extendsBase) {\n        return empty;\n      }\n\n      const tempInjector = Injector.create({\n        providers: [AXPContextStore, { provide: ComponentType, useClass: ComponentType as Type<unknown> }],\n        parent: this.injector,\n      });\n      const componentInstance = tempInjector.get(ComponentType) as AXPPageLayoutBaseComponent;\n\n      const hasExecute =\n        typeof componentInstance.execute === 'function' &&\n        componentInstance.execute !== AXPPageLayoutBaseComponent.prototype.execute;\n\n      const [primaryActions, secondaryActions] = await Promise.all([\n        componentInstance.getPrimaryMenuItems(),\n        componentInstance.getSecondaryMenuItems(),\n      ]);\n\n      const actions: AXPLayoutDetailsViewAction[] = [];\n\n      for (const action of primaryActions) {\n        actions.push({\n          ...action,\n          priority: 'primary',\n          zone: (action as { zone?: 'header' | 'footer' }).zone ?? 'header',\n        } as AXPLayoutDetailsViewAction);\n      }\n\n      for (const action of secondaryActions) {\n        actions.push({\n          ...action,\n          priority: 'secondary',\n          zone: (action as { zone?: 'header' | 'footer' }).zone ?? 'header',\n        } as AXPLayoutDetailsViewAction);\n      }\n\n      return { actions, hasExecute };\n    } catch (error) {\n      console.warn(`Failed to get actions from component:`, error);\n      return empty;\n    }\n  }\n}\n\n//#endregion\n","\nimport { AXPContextData, AXPExecuteCommand, AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPEntityCommandScope, AXPRelatedEntity, getEntityInfo } from '@acorex/platform/layout/entity-contracts';\n\nimport { AXPExpressionEvaluatorScope } from '@acorex/platform/core';\nimport { AXPLayoutDetailsViewPage } from '@acorex/platform/layout/views';\nimport { get, set } from 'lodash-es';\nimport { commandMessageTextForError, mapEntityStorageErrorToCommandResult } from '../../../entity.service';\nimport { AXPEntityCommandTriggerViewModel } from '../../../entity.viewmodel';\nimport { AXPRelatedEntityConverterFactory } from '../related-entity-converter-factory.service';\nimport { AXPBaseRelatedEntityConverter, AXPRelatedEntityConverterContext } from './base-related-entity-converter';\n\nexport class AXPPageDetailsConverter extends AXPBaseRelatedEntityConverter {\n  constructor(private readonly factory: AXPRelatedEntityConverterFactory) {\n    super();\n  }\n\n  async convert(\n    relatedEntity: AXPRelatedEntity,\n    context: AXPRelatedEntityConverterContext,\n  ): Promise<AXPLayoutDetailsViewPage> {\n    const { entityDef } = await this.getEntityDefinition(relatedEntity, context.entityResolver);\n    const baseHelpers = this.createEntityHelpers(entityDef);\n\n    // Get update interface to determine editable properties\n    const updateInterface = entityDef?.interfaces?.master?.update;\n    const editablePropertyNames = new Set(updateInterface?.properties?.map((p: any) => p.name) ?? []);\n\n    // Check if page should be readonly (no editable properties or all editable properties are readonly)\n    const isPageReadonly =\n      editablePropertyNames.size === 0 ||\n      (editablePropertyNames.size > 0 &&\n        [...editablePropertyNames].every((propName) => {\n          const prop = entityDef?.properties?.find((p) => p.name === propName);\n          return prop?.schema?.readonly === true;\n        }));\n\n    // If referenced strategy with mapping and detail type, exclude mapped properties from UI\n    const p = relatedEntity?.persistence || {};\n    const strategy = p.strategy || 'embedded';\n    const mappedTargets: string[] = Object.keys(p.map || {}).map((k) => (k || '').split('.')[0]);\n    const excludeProperties =\n      relatedEntity.excludeProperties && relatedEntity.excludeProperties.length > 0\n        ? new Set(relatedEntity.excludeProperties)\n        : undefined;\n    const helpers = {\n      ...baseHelpers,\n      getPropertyByGroupId: (groupId: string) => {\n        let props = baseHelpers.getPropertyByGroupId(groupId) ?? [];\n        if (strategy === 'referenced' && mappedTargets.length > 0) {\n          props = props.filter((prop: { name?: string }) => !mappedTargets.includes(prop?.name ?? ''));\n        }\n        if (excludeProperties) {\n          props = props.filter((prop: { name?: string }) => !excludeProperties.has(prop.name ?? ''));\n        }\n        return props;\n      },\n    } as typeof baseHelpers;\n\n    const evaluateExpressions = async (actionData: any) => {\n      const scope: AXPExpressionEvaluatorScope = {\n        context: {\n          eval: (path: string) => {\n            return get(context.context, path);\n          },\n        },\n      };\n      return await context.expressionEvaluator!.evaluate(actionData, scope);\n    };\n\n    // Build related tabs for the related entity page (mirrors main-entity tab building)\n    const tabDetailEntities = entityDef?.relatedEntities?.filter(\n      (re: any) => !re.hidden && re.layout?.type === 'tab-detail',\n    );\n    const tabListEntities = entityDef?.relatedEntities?.filter(\n      (re: any) => !re.hidden && (!re.layout?.type || re.layout?.type === 'tab-list'),\n    );\n\n    const tabDetailTabs = await this.buildTabDetails(this.factory, tabDetailEntities ?? [], context);\n    const tabListTabs = await this.buildTabLists(this.factory, tabListEntities ?? [], context);\n\n    // Build actions from single interface\n    const actions = this.buildActions(entityDef, helpers.singleInterface);\n\n    return {\n      id: entityDef?.name ?? '',\n      title: context.rootTitle ?? '',\n      label: relatedEntity.title ?? '@general:terms.common.overview',\n      icon: relatedEntity.icon || entityDef.icon,\n      isReadonly: isPageReadonly,\n      settings: this.createPageSettings(),\n      load: this.createLoadFunction(entityDef, relatedEntity, evaluateExpressions),\n      execute: this.createExecuteFunction(entityDef, actions, evaluateExpressions, context),\n      actions: await this.buildEvaluatedActions(actions, evaluateExpressions),\n      // tabs: [...tabDetailTabs, ...tabListTabs],\n      content: [this.createGridLayoutStructure(helpers.singleInterface, helpers, relatedEntity.properties)],\n    };\n  }\n\n  //#region ----   Utility Methods   ----\n\n  private buildActions(entityDef: any, singleInterface: any): AXPEntityCommandTriggerViewModel[] {\n    const actions = singleInterface?.actions ?? [];\n    return actions.map((action: any) => new AXPEntityCommandTriggerViewModel(entityDef, action));\n  }\n\n  private async buildEvaluatedActions(\n    actions: AXPEntityCommandTriggerViewModel[],\n    evaluateExpressions: ((data: any) => Promise<any>) | null,\n  ): Promise<any[]> {\n    const evaluatedActions = [];\n\n    for (const action of actions) {\n      // Evaluate disabled condition\n      let disabled = action.disabled;\n      if (disabled && typeof disabled === 'string' && evaluateExpressions) {\n        try {\n          const result = await evaluateExpressions({ disabled: disabled });\n          disabled = result.disabled;\n        } catch {\n          disabled = false;\n        }\n      }\n      // Evaluate hidden condition\n      let hidden = action.hidden;\n      if (hidden && typeof hidden === 'string' && evaluateExpressions) {\n        try {\n          const result = await evaluateExpressions({ hidden: hidden });\n          hidden = result.hidden;\n        } catch {\n          hidden = false;\n        }\n      }\n\n      // Skip if hidden\n      if (hidden) continue;\n\n      // Evaluate options\n      let options = action.options;\n      if (options && evaluateExpressions) {\n        try {\n          options = await evaluateExpressions(options);\n        } catch {\n          // Keep original options if evaluation fails\n        }\n      }\n\n      evaluatedActions.push({\n        name: action.name,\n        title: action.title,\n        icon: action.icon,\n        color: action.color,\n        disabled: disabled || false,\n        zone: 'header',\n        priority: action.priority,\n        scope: action.scope === AXPEntityCommandScope.Individual ? AXPEntityCommandScope.TypeLevel : action.scope,\n        command: {\n          name: action.name,\n          options: options,\n          metadata: action.metadata,\n        },\n      });\n    }\n    return evaluatedActions;\n  }\n\n  private createPageSettings() {\n    return {\n      commands: {\n        reject: {\n          title: '@general:actions.discard.title',\n          icon: 'fa-light fa-rotate-left',\n          color: 'default',\n          visible: '{{context.isDirty()}}',\n          command: { name: 'discard' },\n        },\n        accept: {\n          title: '@general:actions.save.title',\n          icon: 'fa-light fa-floppy-disk',\n          color: 'primary',\n          visible: '{{context.isDirty()}}',\n          command: { name: 'update-entity' },\n        },\n      },\n    };\n  }\n\n  private createLoadFunction(entityDef: any, relatedEntity: AXPRelatedEntity, evaluateExpressions: any) {\n    return async (context: any) => {\n      const conditions = relatedEntity.conditions ?? [];\n\n      if (conditions.length > 0) {\n        const evaluatedFilters = await Promise.all(\n          conditions.map(async (c) => ({\n            field: c.name,\n            operator: c.operator,\n            value: await evaluateExpressions(c.value),\n          })),\n        );\n\n        if (conditions.length === 1 && conditions[0].name === 'id') {\n          const byKeyFn = entityDef?.queries?.byKey?.execute as Function;\n          const id = evaluatedFilters[0]?.value;\n          const result = id ? await byKeyFn(id) : null;\n          return { success: true, data: result ?? {} };\n        }\n\n        const listFn = entityDef?.queries?.list?.execute as Function;\n        const filter =\n          evaluatedFilters.length === 1\n            ? evaluatedFilters[0]\n            : { logic: 'and', filters: evaluatedFilters };\n        const page = await listFn({ skip: 0, take: 1, filter });\n        const item = page?.items?.[0];\n        const data: Record<string, unknown> = item ? { ...item } : {};\n\n        if (!item) {\n          for (const evaluated of evaluatedFilters) {\n            if (evaluated.field) {\n              set(data, evaluated.field, evaluated.value);\n            }\n          }\n        }\n\n        return { success: true, data };\n      }\n\n      const fn = entityDef?.queries?.byKey?.execute as Function;\n      const conditionValues = relatedEntity.conditions?.map((c) => c.value) ?? [];\n      const evaluatedConditionValues = await Promise.all(conditionValues.map((c) => evaluateExpressions(c)));\n\n      const id = evaluatedConditionValues[0];\n      const result = id ? await fn(id) : null;\n\n      return { success: true, data: result ?? {} };\n    };\n  }\n\n  private createExecuteFunction(\n    entityDef: any,\n    actions: AXPEntityCommandTriggerViewModel[],\n    evaluateExpressions: ((data: any) => Promise<any>) | null,\n    converterContext: AXPRelatedEntityConverterContext,\n  ): (e: AXPExecuteCommand, context: AXPContextData) => Promise<AXPExecuteCommandResult> {\n    return async (e: AXPExecuteCommand, context: AXPContextData): Promise<AXPExecuteCommandResult> => {\n      try {\n        if (e.name === 'update-entity') {\n          const recordId = context?.['id'];\n          if (!recordId) {\n            const createFn = entityDef?.commands?.create?.execute as Function;\n            const created = await createFn(context);\n            if (created && typeof created === 'object' && 'success' in created) {\n              const cmd = created as AXPExecuteCommandResult;\n              if (!cmd.success) {\n                const errorText =\n                  commandMessageTextForError(cmd.message?.text) || 'Failed to create entity';\n                return {\n                  success: false,\n                  message: cmd.message ?? { text: errorText },\n                };\n              }\n              return {\n                success: true,\n                data: cmd.data ?? created,\n              };\n            }\n            return {\n              success: true,\n              data: created,\n            };\n          }\n\n          const fn = entityDef?.commands?.update?.execute as Function;\n          const result = await fn(context);\n          if (result && typeof result === 'object' && 'success' in result) {\n            const cmd = result as AXPExecuteCommandResult;\n            if (!cmd.success) {\n              const errorText =\n                commandMessageTextForError(cmd.message?.text) || 'Failed to update entity';\n              return {\n                success: false,\n                message: cmd.message ?? { text: errorText },\n              };\n            }\n            return {\n              success: true,\n              data: cmd.data ?? result,\n            };\n          }\n          return {\n            success: true,\n            data: result,\n          };\n        } else {\n          // Find action in single interface actions\n          const action = actions.find((a) => a.name === e.name);\n          if (action && converterContext.workflowService) {\n            // Evaluate action options with current context\n            let evaluatedOptions = action.options;\n            if (evaluateExpressions && action.options) {\n              try {\n                evaluatedOptions = await evaluateExpressions(action.options);\n              } catch {\n                // Keep original options if evaluation fails\n              }\n            }\n\n            const commandName = e.name.split('&')[0];\n            if (converterContext.workflowService.exists(commandName)) {\n              await converterContext.workflowService.execute(commandName, {\n                entity: getEntityInfo(entityDef).source,\n                data: context,\n                entityInfo: {\n                  name: entityDef.name,\n                  module: entityDef.module,\n                  title: entityDef.title,\n                  parentKey: entityDef.parentKey,\n                  source: `${entityDef.module}.${entityDef.name}`,\n                },\n                options: evaluatedOptions,\n                metadata: action.metadata,\n              });\n              return {\n                success: true,\n              };\n            }\n            if (converterContext.commandService?.exists(commandName)) {\n              // check options for evaluation\n              await converterContext.commandService.execute(commandName, e.options);\n            }\n          }\n          return {\n            success: false,\n            message: {\n              code: 'invalid_command',\n              text: 'Invalid command',\n            },\n          };\n        }\n      } catch (error: unknown) {\n        return mapEntityStorageErrorToCommandResult(error);\n      }\n    };\n  }\n\n  //#endregion\n\n  //#region ----   Tab Builders   ----\n\n  /**\n   * Builds tab-detail items for a related entity page using the shared converters.\n   */\n  private async buildTabDetails(\n    factory: AXPRelatedEntityConverterFactory,\n    tabDetailEntities: AXPRelatedEntity[],\n    ctx: AXPRelatedEntityConverterContext,\n  ): Promise<any[]> {\n    if (!ctx?.entityResolver || !tabDetailEntities?.length) {\n      return [];\n    }\n\n    const tabs = [] as any[];\n    for (const re of tabDetailEntities) {\n      const converter = factory.createTabDetailsConverter();\n      tabs.push(\n        await converter.convert(re, {\n          entityResolver: ctx.entityResolver,\n        }),\n      );\n    }\n    return tabs;\n  }\n\n  /**\n   * Builds tab-list items for a related entity page using the shared converters with context-aware filters/actions.\n   */\n  private async buildTabLists(\n    factory: AXPRelatedEntityConverterFactory,\n    tabListEntities: AXPRelatedEntity[],\n    ctx: AXPRelatedEntityConverterContext,\n  ): Promise<any[]> {\n    if (!ctx?.entityResolver || !tabListEntities?.length) {\n      return [];\n    }\n\n    const tabs = [] as any[];\n    for (const re of tabListEntities) {\n      const converter = factory.createTabListConverter();\n      tabs.push(\n        await converter.convert(re, {\n          entityResolver: ctx.entityResolver,\n          expressionEvaluator: ctx.expressionEvaluator,\n          context: ctx.context,\n        }),\n      );\n    }\n    return tabs;\n  }\n\n  //#endregion\n}\n","\n\nimport { AXPContextData, AXPExecuteCommand, AXPExecuteCommandResult, AXPWidgetsCatalog } from '@acorex/platform/contracts';\nimport {\n  AXPEntityAction,\n  AXPEntityCommandScope,\n  AXPRelatedEntity,\n  buildPageListWidgetName,\n  getEntityInfo,\n  isEntityActionPermitted,\n} from '@acorex/platform/layout/entity-contracts';\nimport { AXPSessionService } from '@acorex/platform/auth';\n\nimport { AXPExpressionEvaluatorScope } from '@acorex/platform/core';\nimport { AXPLayoutDetailsViewPage } from '@acorex/platform/layout/views';\n\nimport { cloneDeep, get } from 'lodash-es';\nimport { AXPEntityCommandTriggerViewModel } from '../../../entity.viewmodel';\nimport { AXPBaseRelatedEntityConverter, AXPRelatedEntityConverterContext } from './base-related-entity-converter';\nimport { resolveRelatedEntityColumns } from './related-entity-include-columns';\n\nexport class AXPPageListConverter extends AXPBaseRelatedEntityConverter {\n  constructor(private readonly session: AXPSessionService) {\n    super();\n  }\n\n  async convert(\n    relatedEntity: AXPRelatedEntity,\n    context: AXPRelatedEntityConverterContext,\n  ): Promise<AXPLayoutDetailsViewPage> {\n    const { entityDef } = await this.getEntityDefinition(relatedEntity, context.entityResolver);\n\n    const evaluateExpressions = async (actionData: { [key: string]: string } | { [key: string]: any }[]) => {\n      const scope: AXPExpressionEvaluatorScope = {\n        context: {\n          eval: (path: string) => {\n            return get(context.context, path);\n          },\n        },\n      };\n      return await context.expressionEvaluator!.evaluate(actionData, scope);\n    };\n\n    const actions = await this.evaluateRelatedEntityActionsForRootContext(relatedEntity?.actions, context);\n\n    const columnScope: AXPExpressionEvaluatorScope = {\n      context: {\n        eval: (path: string) => {\n          return get(context.context, path);\n        },\n      },\n    };\n    const { includeColumns, relatedTableColumns } = await resolveRelatedEntityColumns(\n      relatedEntity.columns,\n      context.expressionEvaluator!,\n      columnScope,\n    );\n\n    const filters = await Promise.all(\n      relatedEntity.conditions?.map(async (c) => {\n        const value = await evaluateExpressions(c.value);\n        return {\n          field: c.name,\n          operator: c.operator,\n          value: value,\n          hidden: true,\n        };\n      }) ?? [],\n    );\n\n    // Unique from host overview page id (`entity.name`) so self-referential related lists navigate correctly.\n    const pageId = buildPageListWidgetName(relatedEntity.entity);\n\n    return {\n      id: pageId,\n      title: context.rootTitle ?? '',\n      label: relatedEntity.title!,\n      icon: relatedEntity.icon || entityDef.icon,\n      /** List-only page: scoped filters are system state, not user edits. */\n      isReadonly: true,\n      actions: this.mergeActions(entityDef, actions)\n        ?.filter(\n          (a) =>\n            a.priority === 'primary' &&\n            !a.isChild &&\n            isEntityActionPermitted(a, (...keys) => this.session.authorize(...keys)),\n        )\n        ?.map((a) => {\n          return {\n            ...a,\n            zone: 'header',\n            visible: !a.hidden,\n            hidden: a.hidden,\n            priority: 'primary',\n            name: a.name,\n            title: a.title,\n            scope: a.scope,\n            icon: a.icon,\n            color: a.color,\n            disabled: a.disabled,\n            command: {\n              name: a.name,\n              options: a.options,\n              metadata: a.metadata,\n            },\n            items: a.items?.map((sub) => ({\n              name: sub.name,\n              title: sub.title,\n              icon: sub.icon,\n              color: sub.color,\n              disabled: sub.disabled,\n              command: {\n                name: sub.name,\n                options: sub.options,\n                metadata: sub.metadata,\n              },\n            })),\n          };\n        }),\n      execute: async (command: AXPExecuteCommand, executeContext: AXPContextData): Promise<AXPExecuteCommandResult> => {\n        try {\n          const commandName = command.name.split('&')[0];\n          const mergedActions = this.mergeActions(entityDef, actions);\n\n          const flattenActions = (list: AXPEntityCommandTriggerViewModel[]): AXPEntityCommandTriggerViewModel[] => {\n            const result: AXPEntityCommandTriggerViewModel[] = [];\n            for (const a of list) {\n              result.push(a);\n              if (a.items?.length) result.push(...flattenActions(a.items));\n            }\n            return result;\n          };\n          const flatActions = flattenActions(mergedActions);\n\n          /**\n           * Toolbar keys are `commandKey&action.name`. Several dropdown items can share the same `commandKey`\n           * (e.g. multiple `WorkflowManagement.WorkflowDefinition:Execute` lifecycle templates). Matching only by\n           * prefix makes `.find` return the first sibling — wrong template (e.g. offboarding runs onboarding).\n           */\n          const action = command.name.includes('&')\n            ? flatActions.find((a) => a.name === command.name)\n            : flatActions.find((a) => {\n                return a.name === command.name || a.name === commandName || a.name.split('&')[0] === commandName;\n              });\n\n          if (!action) {\n            console.warn(`Action ${commandName} not found in entity definition`);\n            return {\n              success: false,\n              message: {\n                code: 'ACTION_NOT_FOUND',\n                text: `Action ${commandName} not found`,\n              },\n            };\n          }\n\n          // Evaluate action options with current root context for lazy evaluation\n          // This ensures actions use the latest context data when executed\n          let evaluatedOptions = action.options;\n          if (\n            action.scope !== AXPEntityCommandScope.Individual &&\n            action.options &&\n            context.context &&\n            context.expressionEvaluator\n          ) {\n            try {\n              const scope: AXPExpressionEvaluatorScope = {\n                context: {\n                  eval: (path: string) => {\n                    return get(context.context, path);\n                  },\n                },\n              };\n              evaluatedOptions = await context.expressionEvaluator.evaluate(action.options, scope);\n            } catch {\n              evaluatedOptions = action.options;\n            }\n          }\n\n          let actionData =\n            action.scope == AXPEntityCommandScope.Selected\n              ? executeContext\n              : evaluatedOptions?.['process']?.data || null;\n\n          const foreignKeyField = relatedEntity.persistence?.foreignKeyField;\n          if (commandName === 'Entity:Create' && foreignKeyField && context.context) {\n            const parentId = get(context.context, 'id');\n            actionData = {\n              ...(typeof actionData === 'object' && actionData !== null ? actionData : {}),\n              ...(parentId !== undefined && parentId !== null && parentId !== ''\n                ? { [foreignKeyField]: parentId }\n                : {}),\n            };\n          }\n\n          const createExcludes = [\n            ...new Set([\n              ...(relatedEntity.excludeProperties ?? []),\n              ...(commandName === 'Entity:Create' && foreignKeyField ? [foreignKeyField] : []),\n            ]),\n          ];\n          const excludeForCreate = commandName === 'Entity:Create' && createExcludes.length > 0;\n          const excludeForUpdate =\n            commandName === 'Entity:Update' &&\n            relatedEntity.excludeProperties &&\n            relatedEntity.excludeProperties.length > 0;\n          const excludeForView =\n            commandName === 'Entity:View' &&\n            relatedEntity.excludeProperties &&\n            relatedEntity.excludeProperties.length > 0;\n          const mergedOptions = excludeForCreate\n            ? { ...evaluatedOptions, excludeProperties: createExcludes }\n            : excludeForUpdate\n              ? { ...evaluatedOptions, excludeProperties: relatedEntity.excludeProperties }\n              : excludeForView\n                ? { ...evaluatedOptions, excludeProperties: relatedEntity.excludeProperties }\n                : evaluatedOptions;\n\n          if (context.commandService.exists(commandName)) {\n            // check options for evaluation\n            await context.commandService.execute(commandName, {\n              __context__: {\n                entity: getEntityInfo(entityDef).source,\n                entityInfo: {\n                  name: entityDef.name,\n                  module: entityDef.module,\n                  title: entityDef.title,\n                  parentKey: entityDef.parentKey,\n                  source: `${entityDef.module}.${entityDef.name}`,\n                },\n                data: actionData,\n                options: mergedOptions,\n                metadata: action.metadata,\n              },\n              options: mergedOptions,\n              metadata: action.metadata,\n              ...(excludeForView ? { excludeProperties: relatedEntity.excludeProperties } : {}),\n            });\n          } else {\n            await context.workflowService.execute(commandName, {\n              entity: getEntityInfo(entityDef).source,\n              entityInfo: {\n                name: entityDef.name,\n                module: entityDef.module,\n                title: entityDef.title,\n                parentKey: entityDef.parentKey,\n                source: `${entityDef.module}.${entityDef.name}`,\n              },\n              data: actionData,\n              options: mergedOptions,\n              metadata: action.metadata,\n            });\n          }\n\n          return { success: true };\n        } catch (error) {\n          console.error('Error executing command:', error);\n          return {\n            success: false,\n            message: {\n              code: 'EXECUTION_ERROR',\n              text: error instanceof Error ? error.message : 'Unknown error occurred',\n            },\n          };\n        }\n      },\n\n      content: [\n        {\n          type: AXPWidgetsCatalog.entityList,\n          name: buildPageListWidgetName(relatedEntity.entity),\n          defaultValue: {\n            toolbar: {\n              filters: await Promise.all(filters),\n            },\n          },\n          options: {\n            entity: relatedEntity.entity,\n            showEntityActions: false,\n            actions: actions,\n            includeColumns,\n            relatedTableColumns,\n            customFilterDefinitions: relatedEntity.customFilterDefinitions,\n            excludeProperties: relatedEntity.excludeProperties,\n            ...(relatedEntity.conditions?.length\n              ? { relatedFilterConditionSpecs: cloneDeep(relatedEntity.conditions) }\n              : {}),\n          },\n        },\n      ],\n    };\n  }\n\n  private mergeActions(entityDef: any, relatedEntityActions: AXPEntityAction[]): AXPEntityCommandTriggerViewModel[] {\n    const originalList = entityDef?.interfaces?.master?.list?.actions ?? [];\n    const relatedEntityActionList = relatedEntityActions ?? [];\n\n    // Create a map to track which actions from relatedEntityActionList have been used\n    const usedOverrideActions = new Set<string>();\n\n    // Start with original actions, applying overrides where they exist\n    const mergedActions = originalList.map((originalAction: any) => {\n      const originalCommandName =\n        typeof originalAction.command === 'string' ? originalAction.command : originalAction.command.name;\n\n      const overrideAction = relatedEntityActionList.find((action) => {\n        const actionCommandName = typeof action.command === 'string' ? action.command : action.command.name;\n        return actionCommandName === originalCommandName && action.name === originalAction.name;\n      });\n\n      if (overrideAction) {\n        // Mark this override action as used\n        const overrideKey = `${typeof overrideAction.command === 'string' ? overrideAction.command : overrideAction.command.name}_${overrideAction.name}`;\n        usedOverrideActions.add(overrideKey);\n        return new AXPEntityCommandTriggerViewModel(entityDef, overrideAction);\n      }\n\n      return new AXPEntityCommandTriggerViewModel(entityDef, originalAction);\n    });\n\n    // Add any remaining actions from relatedEntityActionList that weren't used as overrides\n    const additionalActions = relatedEntityActionList\n      .filter((action) => {\n        const actionKey = `${typeof action.command === 'string' ? action.command : action.command.name}_${action.name}`;\n        return !usedOverrideActions.has(actionKey);\n      })\n      .map((action) => new AXPEntityCommandTriggerViewModel(entityDef, action));\n\n    return [...additionalActions, ...mergedActions].filter((a) =>\n      isEntityActionPermitted(a, (...keys) => this.session.authorize(...keys)),\n    );\n  }\n}\n","\nimport { AXPRelatedEntity } from '@acorex/platform/layout/entity-contracts';\nimport { AXPLayoutDetailsViewTabItem } from '@acorex/platform/layout/views';\nimport { AXPBaseRelatedEntityConverter, AXPRelatedEntityConverterContext } from './base-related-entity-converter';\n\nexport class AXPTabDetailsConverter extends AXPBaseRelatedEntityConverter {\n  async convert(\n    relatedEntity: AXPRelatedEntity,\n    context: AXPRelatedEntityConverterContext,\n  ): Promise<AXPLayoutDetailsViewTabItem> {\n    const { entityDef } = await this.getEntityDefinition(relatedEntity, context.entityResolver);\n    const baseHelpers = this.createEntityHelpers(entityDef);\n\n    // If referenced strategy with mapping and detail type, exclude mapped properties from UI\n    const p = relatedEntity?.persistence || {};\n    const strategy = p.strategy || 'embedded';\n    const mappedTargets: string[] = Object.keys(p.map || {}).map((k) => (k || '').split('.')[0]);\n    const helpers = {\n      ...baseHelpers,\n      getPropertyByGroupId: (groupId: string) => {\n        const props = baseHelpers.getPropertyByGroupId(groupId) ?? [];\n        if (strategy !== 'referenced' || mappedTargets.length === 0) return props;\n        return props.filter((prop: any) => !mappedTargets.includes(prop?.name));\n      },\n    } as typeof baseHelpers;\n\n    return {\n      id: entityDef?.name ?? '',\n      title: relatedEntity.title ?? entityDef?.title ?? '',\n      icon: relatedEntity.icon || entityDef.icon,\n      content: [\n        this.createGridLayoutStructure(helpers.singleInterface, helpers, relatedEntity.properties),\n      ],\n    };\n  }\n}\n","\nimport { AXPRelatedEntity } from '@acorex/platform/layout/entity-contracts';\nimport { AXPExpressionEvaluatorScope } from '@acorex/platform/core';\nimport { AXPLayoutDetailsViewTabItem } from '@acorex/platform/layout/views';\nimport { AXPWidgetsCatalog } from '@acorex/platform/contracts';\nimport { cloneDeep, get } from 'lodash-es';\nimport { AXPBaseRelatedEntityConverter, AXPRelatedEntityConverterContext } from './base-related-entity-converter';\nimport { resolveRelatedEntityColumns } from './related-entity-include-columns';\n\nexport class AXPTabListConverter extends AXPBaseRelatedEntityConverter {\n  async convert(\n    relatedEntity: AXPRelatedEntity,\n    context: AXPRelatedEntityConverterContext,\n  ): Promise<AXPLayoutDetailsViewTabItem> {\n    const { entityDef } = await this.getEntityDefinition(relatedEntity, context.entityResolver);\n    const evaluateExpressions = async (actionData: any) => {\n      const scope: AXPExpressionEvaluatorScope = {\n        context: {\n          eval: (path: string) => {\n            return get(context.context, path);\n          },\n        },\n      };\n      return await context.expressionEvaluator!.evaluate(actionData, scope);\n    };\n    // console.log({ relatedEntity });\n\n    const filters = await Promise.all(\n      relatedEntity.conditions?.map(async (c) => {\n        const value = await evaluateExpressions(c.value);\n        return {\n          field: c.name,\n          operator: c.operator,\n          value: value,\n          hidden: true,\n        };\n      }) ?? [],\n    );\n    const actions = await this.evaluateRelatedEntityActionsForRootContext(relatedEntity.actions, context);\n\n    const columnScope: AXPExpressionEvaluatorScope = {\n      context: {\n        eval: (path: string) => {\n          return get(context.context, path);\n        },\n      },\n    };\n    const { includeColumns, relatedTableColumns } = await resolveRelatedEntityColumns(\n      relatedEntity.columns,\n      context.expressionEvaluator!,\n      columnScope,\n    );\n\n    return {\n      id: entityDef?.name ?? '',\n      title: relatedEntity.title ?? entityDef?.title ?? '',\n      icon: relatedEntity.icon || entityDef.icon,\n      content: [\n        {\n          type: AXPWidgetsCatalog.entityList,\n          name: `${relatedEntity.entity}-tab-list`,\n          defaultValue: {\n            toolbar: {\n              filters: filters,\n            },\n          },\n          options: {\n            entity: relatedEntity.entity,\n            showEntityActions: true,\n            showToolbar: false,\n            actions: actions,\n            maxHeight: '300px',\n            includeColumns,\n            relatedTableColumns,\n            customFilterDefinitions: relatedEntity.customFilterDefinitions,\n            excludeProperties: relatedEntity.excludeProperties,\n            ...(relatedEntity.conditions?.length\n              ? { relatedFilterConditionSpecs: cloneDeep(relatedEntity.conditions) }\n              : {}),\n          },\n        },\n      ],\n    };\n  }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport {\n  AXPPageDetailsConverter,\n  AXPPageListConverter,\n  AXPRelatedEntityConverter,\n  AXPTabDetailsConverter,\n  AXPTabListConverter,\n} from './related-entity-converters';\n\nexport type ConverterType = 'page-detail' | 'page-list' | 'tab-detail' | 'tab-list';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPRelatedEntityConverterFactory {\n  private readonly session = inject(AXPSessionService);\n\n  createConverter(type: ConverterType): AXPRelatedEntityConverter {\n    switch (type) {\n      case 'page-detail':\n        return new AXPPageDetailsConverter(this);\n      case 'page-list':\n        return new AXPPageListConverter(this.session);\n      case 'tab-detail':\n        return new AXPTabDetailsConverter();\n      case 'tab-list':\n        return new AXPTabListConverter();\n      default:\n        throw new Error(`Unsupported converter type: ${type}`);\n    }\n  }\n\n  createPageDetailsConverter(): AXPRelatedEntityConverter {\n    return this.createConverter('page-detail');\n  }\n\n  createPageListConverter(): AXPRelatedEntityConverter {\n    return this.createConverter('page-list');\n  }\n\n  createTabDetailsConverter(): AXPRelatedEntityConverter {\n    return this.createConverter('tab-detail');\n  }\n\n  createTabListConverter(): AXPRelatedEntityConverter {\n    return this.createConverter('tab-list');\n  }\n}\n","import { AXPContextData, AXPExecuteCommand, AXPExecuteCommandResult, type AXPMultiLanguageString } from '@acorex/platform/contracts';\nimport { AXPEntity, AXPEntityCommandScope, AXPEntityProperty, AXPRelatedEntity, getEntityInfo } from '@acorex/platform/layout/entity-contracts';\nimport { AXPFilterOperatorMiddlewareService } from '@acorex/platform/common';\n\nimport { AXPExpressionEvaluatorScope } from '@acorex/platform/core';\nimport { AXPLayoutDetailsViewPage } from '@acorex/platform/layout/views';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { inject, Injectable } from '@angular/core';\nimport { get, merge } from 'lodash-es';\nimport { commandMessageTextForError, mapEntityStorageErrorToCommandResult } from '../../entity.service';\nimport { AXPEntityCommandTriggerViewModel } from '../../entity.viewmodel';\nimport { AXPRelatedEntityConverterFactory } from './related-entity-converter-factory.service';\nimport { hintFormFieldOptionsFromDescription } from '../../utils/hint-form-field-options.util';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPMainEntityContentBuilder {\n  private workflowService = inject(AXPWorkflowService);\n  private commandService = inject(AXPCommandService);\n  private filterOperatorMiddleware = inject(AXPFilterOperatorMiddlewareService);\n\n  constructor(private relatedEntityConverterFactory: AXPRelatedEntityConverterFactory) { }\n\n  async build(\n    entity: AXPEntity,\n    rootContext: any,\n    dependencies?: any,\n    rootTitle?: AXPMultiLanguageString,\n  ): Promise<AXPLayoutDetailsViewPage> {\n    const groups = entity?.groups ?? [];\n    const singleInterface = entity?.interfaces?.master?.single;\n    const updateInterface = entity?.interfaces?.master?.update;\n\n    // Get list of visible property names from single interface\n    const visiblePropertyNames = new Set(singleInterface?.properties?.map((p: any) => p.name) ?? []);\n\n    // Get list of editable property names from update interface\n    const editablePropertyNames = new Set(updateInterface?.properties?.map((p: any) => p.name) ?? []);\n\n    // Accumulate groups from main and merge-detail related entities for validation/title lookup\n    const allGroups: any[] = [...groups];\n\n    // Create expression evaluator for actions\n    const evaluateExpressions = dependencies?.expressionEvaluator\n      ? this.createExpressionEvaluator(rootContext, dependencies.expressionEvaluator)\n      : null;\n\n    // Prepare merge-details structures (sections and properties per section)\n    let evaluatedRelatedEntities = [...(entity?.relatedEntities ?? [])];\n\n    if (evaluatedRelatedEntities && evaluateExpressions) {\n      // Only evaluate the 'hidden' property for each related entity\n      evaluatedRelatedEntities = await Promise.all(\n        (entity.relatedEntities ?? []).map(async (re: AXPRelatedEntity) => {\n          let hidden = re.hidden;\n          if (hidden && typeof hidden === 'string') {\n            try {\n              const result = await evaluateExpressions({ hidden });\n              hidden = result.hidden;\n            } catch {\n              // Keep original hidden if evaluation fails\n            }\n          }\n          return { ...re, hidden };\n        }),\n      );\n    }\n\n    const mergeDetailEntities = evaluatedRelatedEntities?.filter(\n      (re: any) => !re.hidden && re.layout?.type === 'merge-detail',\n    );\n\n    type SectionPropsMap = Record<string, AXPEntityProperty[]>;\n    const mainPropsByGroup: SectionPropsMap = (entity?.properties ?? []).reduce((acc: SectionPropsMap, p: any) => {\n      if (!acc[p.groupId]) acc[p.groupId] = [];\n      acc[p.groupId].push(p);\n      return acc;\n    }, {} as SectionPropsMap);\n\n    // Will hold merged properties per group (section)\n    const mergedPropsByGroup: SectionPropsMap = { ...mainPropsByGroup };\n\n    // Collect sections from main interface (validated later) and related ones for ordering\n    const mainSections = singleInterface?.sections ?? [];\n    // Track extra sections with entity-level ordering context\n    const beforeExtraSections: Array<{ section: any; entityOrder: number }> = [];\n    const middleExtraSections: Array<{ section: any }> = [];\n    const afterExtraSections: Array<{ section: any; entityOrder: number }> = [];\n    const beforeExtraIds = new Set<string>();\n    const middleExtraIds = new Set<string>();\n    const afterExtraIds = new Set<string>();\n\n    // Effective order overrides for main sections when merged with BEFORE related entities\n    let beforeOverrideSectionOrders: Record<string, number> = {};\n\n    // Collect tab-list tabs from merge-detail related entities to merge with main tabs\n    const nestedTabListTabs: any[] = [];\n\n    // Helper to append related-only sections into before/after buckets\n    const queueRelatedSection = (\n      section: any,\n      position: 'before' | 'middle' | 'after' | undefined,\n      entityOrder: number,\n    ) => {\n      if (!section) return;\n      if (position === 'before') {\n        if (!beforeExtraIds.has(section.id)) {\n          beforeExtraIds.add(section.id);\n          beforeExtraSections.push({ section, entityOrder });\n        }\n      } else if (position === 'middle') {\n        if (!middleExtraIds.has(section.id)) {\n          middleExtraIds.add(section.id);\n          middleExtraSections.push({ section });\n        }\n      } else {\n        if (!afterExtraIds.has(section.id)) {\n          afterExtraIds.add(section.id);\n          afterExtraSections.push({ section, entityOrder });\n        }\n      }\n    };\n\n    // Resolve and merge merge-detail entities\n    // Sort related entities by position group then by layout.order\n    if (mergeDetailEntities?.length && dependencies?.entityResolver) {\n      const beforeEntities = (mergeDetailEntities || [])\n        .filter((re: any) => (re.layout?.position ?? 'middle') === 'before')\n        .sort(\n          (a: any, b: any) =>\n            (a.layout?.order ?? Number.MAX_SAFE_INTEGER) - (b.layout?.order ?? Number.MAX_SAFE_INTEGER),\n        );\n      const middleEntities = (mergeDetailEntities || []).filter(\n        (re: any) => (re.layout?.position ?? 'middle') === 'middle',\n      );\n      const afterEntities = (mergeDetailEntities || [])\n        .filter((re: any) => (re.layout?.position ?? 'middle') === 'after')\n        .sort(\n          (a: any, b: any) =>\n            (a.layout?.order ?? Number.MAX_SAFE_INTEGER) - (b.layout?.order ?? Number.MAX_SAFE_INTEGER),\n        );\n\n      const processRelated = async (relatedEntity: any) => {\n        try {\n          const [moduleName, entityName] = relatedEntity.entity.split('.');\n          const entityDef = await dependencies.entityResolver.resolve(moduleName, entityName);\n          if (!entityDef) {\n            return;\n          }\n\n          const relSingle = entityDef?.interfaces?.master?.single;\n          const relUpdate = entityDef?.interfaces?.master?.update;\n          const relGroups = entityDef?.groups ?? [];\n          // Merge related groups into allGroups (avoid duplicates by id)\n          for (const rg of relGroups) {\n            if (!allGroups.some((g: any) => g.id === rg.id)) {\n              allGroups.push(rg);\n            }\n          }\n\n          // Collect nested tab-list related entities from this merge-detail entity and convert to tabs\n          try {\n            const nestedTabListEntities = entityDef?.relatedEntities?.filter(\n              (re: any) => !re.hidden && (!re.layout?.type || re.layout?.type === 'tab-list'),\n            );\n            if (nestedTabListEntities?.length) {\n              const converter = this.relatedEntityConverterFactory.createTabListConverter();\n              const nestedDataPath = relatedEntity?.persistence?.dataPath || entityName;\n              const nestedContext = get(rootContext, nestedDataPath) ?? rootContext;\n              for (const nre of nestedTabListEntities) {\n                try {\n                  const tab = await converter.convert(nre, {\n                    entityResolver: dependencies.entityResolver,\n                    expressionEvaluator: dependencies.expressionEvaluator,\n                    // Evaluate conditions relative to the merge-detail entity's dataPath\n                    context: nestedContext,\n                  });\n                  nestedTabListTabs.push(tab);\n                } catch (err) {\n                  console.error('error: ', err);\n                }\n              }\n            }\n          } catch { }\n\n          // Build related props map per group with metadata: __dataPath and __layout\n          // If referenced strategy with mapping, exclude mapped target property names from UI props\n          const p = relatedEntity?.persistence || {};\n          const strategy = p.strategy || 'embedded';\n          const mappedTargets: string[] = Object.keys(p.map || {}).map((k) => (k || '').split('.')[0]);\n          // Filter by properties if provided (for detail types)\n          const includeProperties =\n            relatedEntity?.properties && relatedEntity.properties.length > 0\n              ? new Set(relatedEntity.properties)\n              : undefined;\n          const excludeProperties =\n            relatedEntity?.excludeProperties && relatedEntity.excludeProperties.length > 0\n              ? new Set(relatedEntity.excludeProperties)\n              : undefined;\n          const relPropsByGroup: SectionPropsMap = (entityDef?.properties ?? []).reduce(\n            (acc: SectionPropsMap, p: any) => {\n              // Filter by excludeProperties if provided\n              if (excludeProperties && excludeProperties.has(p.name)) {\n                return acc; // skip excluded properties\n              }\n              // Filter by includeProperties if provided (for detail types)\n              if (\n                includeProperties &&\n                (relatedEntity?.layout?.type === 'merge-detail' ||\n                  relatedEntity?.layout?.type === 'page-detail' ||\n                  relatedEntity?.layout?.type === 'tab-detail') &&\n                !includeProperties.has(p.name)\n              ) {\n                return acc; // skip properties not in includeProperties\n              }\n              if (\n                strategy === 'referenced' &&\n                (relatedEntity?.layout?.type === 'merge-detail' ||\n                  relatedEntity?.layout?.type === 'page-detail' ||\n                  relatedEntity?.layout?.type === 'tab-detail') &&\n                mappedTargets.includes(p.name)\n              ) {\n                return acc; // skip mapped properties\n              }\n              if (!acc[p.groupId]) acc[p.groupId] = [];\n              // Clone shallow to not mutate original definitions\n              const propClone = { ...p } as AXPEntityProperty & { __dataPath?: string; __layout?: any };\n              const dataPath = relatedEntity?.persistence?.dataPath || entityName;\n              (propClone as any).__dataPath = dataPath;\n              (propClone as any).__layout = relSingle?.properties?.find((x: any) => x.name === p.name)?.layout;\n              (propClone as any).__isEditable = !!relUpdate?.properties?.some((x: any) => x.name === p.name);\n              // Apply generic propertyOverrides extension (e.g. for identifier defaultValue on nested paths)\n              const override = (entity as any)?.extensions?.propertyOverrides?.[`${dataPath}.${p.name}`];\n              if (override?.schema) {\n                propClone.schema = { ...(propClone.schema ?? {}), ...override.schema };\n              }\n              acc[p.groupId].push(propClone as any);\n              return acc;\n            },\n            {} as SectionPropsMap,\n          );\n\n          // Merge properties by section id\n          const position: 'before' | 'middle' | 'after' = relatedEntity.layout?.position ?? 'middle';\n          const entityOrder: number = relatedEntity.layout?.order ?? Number.MAX_SAFE_INTEGER;\n          const relSections = (relSingle?.sections ?? []).filter((s: any) => relGroups.some((g: any) => g.id === s.id));\n\n          for (const rs of relSections) {\n            const sectionId = rs.id;\n            const mainHasSection = !!mainSections?.some((s: any) => s.id === sectionId);\n            const relProps = relPropsByGroup[sectionId] ?? [];\n\n            if (mainHasSection) {\n              const current = mergedPropsByGroup[sectionId] ?? [];\n              mergedPropsByGroup[sectionId] =\n                position === 'before' ? [...relProps, ...current] : [...current, ...relProps];\n\n              // Capture override order for main section when position is 'before'\n              if (position === 'before') {\n                const order = rs?.order ?? 0;\n                const prev = beforeOverrideSectionOrders[sectionId] ?? Number.MAX_SAFE_INTEGER;\n                beforeOverrideSectionOrders[sectionId] = Math.min(prev, order);\n              }\n            } else {\n              // Section isn't in main; queue section for rendering and set its props\n              if (!mergedPropsByGroup[sectionId]) {\n                mergedPropsByGroup[sectionId] = [];\n              }\n              mergedPropsByGroup[sectionId] =\n                position === 'before'\n                  ? [...(relProps ?? []), ...(mergedPropsByGroup[sectionId] ?? [])]\n                  : [...(mergedPropsByGroup[sectionId] ?? []), ...(relProps ?? [])];\n              queueRelatedSection(rs, position, entityOrder);\n            }\n          }\n        } catch {\n          // Silently ignore failures to resolve or merge\n        }\n      };\n\n      // Process BEFORE entities first (sorted), then AFTER entities\n      for (const re of beforeEntities) {\n        await processRelated(re);\n      }\n      for (const re of middleEntities) {\n        await processRelated(re);\n      }\n      for (const re of afterEntities) {\n        await processRelated(re);\n      }\n    }\n\n    const getGroupById = (id: string) => {\n      return groups.find((s: any) => s.id === id);\n    };\n\n    const filterValidSections = (sections: any[]) => {\n      return (\n        sections?.filter((section: any) => {\n          return allGroups.some((group: any) => group.id === section.id);\n        }) ?? []\n      );\n    };\n\n    // Utility: sort related-only sections by entity order then section order\n    const sortRelatedSections = (sections: Array<{ section: any; entityOrder: number }>) =>\n      [...(sections ?? [])]\n        .filter((e) => !!e?.section)\n        .sort((a, b) => {\n          const ae = a.entityOrder ?? Number.MAX_SAFE_INTEGER;\n          const be = b.entityOrder ?? Number.MAX_SAFE_INTEGER;\n          if (ae !== be) return ae - be;\n          const ao = a.section?.order ?? 0;\n          const bo = b.section?.order ?? 0;\n          return ao - bo;\n        })\n        .map((e) => e.section);\n\n    // Determine effective order for main sections: if any BEFORE related merged that section, use its order; otherwise keep main order\n    const computeEffectiveMainOrder = (s: any) => {\n      const defaultOrder = s?.order ?? 0;\n      const beforeOverride = beforeOverrideSectionOrders?.[s?.id ?? ''];\n      return beforeOverride != null ? beforeOverride : defaultOrder;\n    };\n\n    // Build combined section list:\n    // 1) related-before (entity-sorted)\n    // 2) middle block: main sections + related-middle-only sections sorted by their section.order (with effective order for main)\n    // 3) related-after (entity-sorted)\n    const beforeSections = sortRelatedSections(beforeExtraSections);\n    const mainSectionsList = [...filterValidSections(mainSections)];\n    const middleOnlySections = middleExtraSections.map((e) => e.section);\n\n    const middleBlock = [...mainSectionsList, ...middleOnlySections].sort((a: any, b: any) => {\n      const ao = computeEffectiveMainOrder(a);\n      const bo = computeEffectiveMainOrder(b);\n      return ao - bo;\n    });\n\n    const afterSections = sortRelatedSections(afterExtraSections);\n\n    const combinedSections = [...beforeSections, ...middleBlock, ...afterSections];\n\n    // Check if page should be readonly (no editable properties or all editable properties are readonly)\n    const isPageReadonly =\n      editablePropertyNames.size === 0 ||\n      (editablePropertyNames.size > 0 &&\n        [...editablePropertyNames].every((propName) => {\n          const prop = entity?.properties?.find((p) => p.name === propName);\n          return prop?.schema?.readonly === true;\n        }));\n\n    // Debug: Log final sorted sections for verification\n    try {\n      const beforeEntityOrderMap = new Map(\n        beforeExtraSections.map((e) => [e.section?.id, e.entityOrder ?? Number.MAX_SAFE_INTEGER]),\n      );\n      const afterEntityOrderMap = new Map(\n        afterExtraSections.map((e) => [e.section?.id, e.entityOrder ?? Number.MAX_SAFE_INTEGER]),\n      );\n\n      const debugSections = [\n        ...beforeSections.map((s: any) => ({\n          bucket: 'before',\n          id: s?.id,\n          sectionOrder: s?.order ?? 0,\n          entityOrder: beforeEntityOrderMap.get(s?.id) ?? Number.MAX_SAFE_INTEGER,\n        })),\n        ...middleBlock.map((s: any) => ({\n          bucket: 'middle',\n          id: s?.id,\n          sectionOrder: s?.order ?? 0,\n          effectiveOrder: computeEffectiveMainOrder(s),\n        })),\n        ...afterSections.map((s: any) => ({\n          bucket: 'after',\n          id: s?.id,\n          sectionOrder: s?.order ?? 0,\n          entityOrder: afterEntityOrderMap.get(s?.id) ?? Number.MAX_SAFE_INTEGER,\n        })),\n      ];\n      // eslint-disable-next-line no-console\n      //console.debug('[AXP] merge-details sorted sections', debugSections);\n    } catch { }\n\n    const getVisiblePropertyByGroupId = async (groupId: string) => {\n      return (mergedPropsByGroup[groupId] ?? []) as Array<AXPEntityProperty & { __dataPath?: string; __layout?: any }>;\n    };\n    const getPropertyLayout = (name: string, prop?: any) => {\n      // Prefer per-property layout (for merged related props), fallback to main entity layout\n      return prop?.__layout ?? singleInterface?.properties?.find((p: any) => p.name === name)?.layout;\n    };\n\n    // Get related entities for tabs\n    const tabDetailEntities = evaluatedRelatedEntities?.filter(\n      (re: any) => !re.hidden && re.layout?.type === 'tab-detail',\n    );\n    const tabListEntities = evaluatedRelatedEntities?.filter(\n      (re: any) => !re.hidden && (!re.layout?.type || re.layout?.type === 'tab-list'),\n    );\n\n    // Build related tabs if dependencies are provided\n    const tabDetailTabs = await this.buildTabDetails(tabDetailEntities ?? [], dependencies);\n    const tabListTabs = await this.buildTabLists(tabListEntities ?? [], rootContext, dependencies);\n\n    // Build actions from single interface\n    const actions = this.buildActions(entity, singleInterface);\n\n    let cachedRootContext = rootContext;\n\n    //console.log({ rootContext, dependencies });\n    return {\n      id: entity?.name ?? '',\n      // title: singleInterface?.title ?? entity?.formats.individual ?? '',\n      title: rootTitle ?? entity?.formats.individual,\n      label: entity?.formats.displayName ?? '@general:terms.common.overview',\n      icon: entity?.icon,\n      actions: await this.buildEvaluatedActions(actions, evaluateExpressions),\n      isPrimary: true,\n      isReadonly: isPageReadonly,\n      settings: {\n        commands: {\n          reject: {\n            title: '@general:actions.discard.title',\n            icon: 'fa-light fa-rotate-left',\n            color: 'default',\n            visible: '{{context.isDirty()}}',\n            shortcuts: ['escape'],\n            command: {\n              name: 'discard',\n            },\n          },\n          accept: {\n            title: '@general:actions.save.title',\n            icon: 'fa-light fa-floppy-disk',\n            color: 'primary',\n            visible: '{{context.isDirty()}}',\n            shortcuts: ['ctrl+s'],\n            command: {\n              name: 'update-entity',\n            },\n          },\n        },\n      },\n      load: async (params?: { forceRefresh?: boolean }) => {\n        if (params?.forceRefresh) {\n          cachedRootContext = await dependencies.reloadRootContext();\n          return {\n            success: true,\n            data: cachedRootContext,\n          };\n        }\n        return {\n          success: true,\n          data: cachedRootContext,\n        };\n      },\n      execute: async (e: AXPExecuteCommand, context: AXPContextData): Promise<AXPExecuteCommandResult> => {\n        try {\n          if (e.name == 'update-entity') {\n            const fn = entity?.commands?.update?.execute as Function;\n            const result = await fn(context);\n            if (result && typeof result === 'object' && 'success' in result) {\n              const cmd = result as AXPExecuteCommandResult;\n              if (!cmd.success) {\n                const errorText =\n                  commandMessageTextForError(cmd.message?.text) || 'Failed to update entity';\n                return {\n                  success: false,\n                  message: cmd.message ?? { text: errorText },\n                };\n              }\n              return {\n                success: true,\n                data: cmd.data ?? result,\n              };\n            }\n            return {\n              success: true,\n              data: result,\n            };\n          } else {\n            // Find action in single interface actions\n            const action = actions.find((a) => a.name === e.name);\n            if (action && dependencies?.workflowService) {\n              // Evaluate action options with current context\n              let evaluatedOptions = action.options;\n              if (evaluateExpressions && action.options) {\n                try {\n                  evaluatedOptions = await evaluateExpressions(action.options);\n                } catch {\n                  // Keep original options if evaluation fails\n                }\n              }\n\n              const commandName = e.name.split('&')[0];\n              if (this.workflowService.exists(commandName)) {\n                await this.workflowService.execute(commandName, {\n                  entity: getEntityInfo(entity).source,\n                  data: context,\n                  entityInfo: {\n                    name: entity.name,\n                    module: entity.module,\n                    title: entity.title,\n                    parentKey: entity.parentKey,\n                    source: `${entity.module}.${entity.name}`,\n                  },\n                  options: evaluatedOptions,\n                  metadata: action.metadata,\n                });\n                return {\n                  success: true,\n                };\n              }\n              if (this.commandService.exists(commandName)) {\n                const liveEvaluateExpressions = dependencies?.expressionEvaluator\n                  ? this.createExpressionEvaluator(context, dependencies.expressionEvaluator)\n                  : null;\n                let commandInput = evaluatedOptions ?? e.options ?? {};\n                if (liveEvaluateExpressions && action.options) {\n                  try {\n                    commandInput = await liveEvaluateExpressions(action.options);\n                  } catch {\n                    // Keep previously evaluated options if live evaluation fails\n                  }\n                }\n\n                await this.commandService.execute(commandName, {\n                  ...commandInput,\n                  __context__: {\n                    data: context as Record<string, unknown>,\n                    options: commandInput,\n                  },\n                });\n              }\n            }\n            return {\n              success: false,\n              message: {\n                code: 'invalid_command',\n                text: 'Invalid command',\n              },\n            };\n          }\n        } catch (error: unknown) {\n          return mapEntityStorageErrorToCommandResult(error);\n        }\n      },\n      tabs: [...tabDetailTabs, ...tabListTabs, ...nestedTabListTabs],\n\n      content: [\n        {\n          type: 'grid-layout',\n          mode: 'edit',\n          options: {\n            grid: {\n              default: {\n                columns: 12,\n                rows: 1,\n                gap: '20px',\n              },\n            },\n          },\n          children: await Promise.all(\n            (\n              await Promise.all(\n                (combinedSections as any[]).map(async (s: any) => {\n                  const properties = await getVisiblePropertyByGroupId(s.id);\n                  const inView = properties.filter((p: any) => {\n                    const isFromRelated = (p as any).__dataPath != null;\n                    const visibleInMain = visiblePropertyNames.has(p.name);\n                    const visibleInRelated = isFromRelated ? !!(p as any).__layout : false;\n                    return visibleInMain || visibleInRelated;\n                  });\n\n                  // String `schema.visible` is not evaluated here (no `dependencies.expressionEvaluator` call).\n                  // The template is placed on `form-field.options.visible` below; at render time\n                  // `AXPWidgetRendererDirective` injects `AXPExpressionEvaluatorService` and evaluates it in\n                  // `updateVisibility()` (and on context changes via `hasVisibilityDependency`). Evaluating once\n                  // at build time would freeze visibility and break detail/edit when data changes.\n                  const visibilityEvaluated = inView.map((p: any) => {\n                    const v = p.schema?.visible;\n                    if (typeof v === 'string') {\n                      return { property: p, resolvedVisible: true };\n                    }\n                    return { property: p, resolvedVisible: v !== false };\n                  });\n\n                  const visibleProperties = visibilityEvaluated\n                    .filter((x) => x.resolvedVisible)\n                    .map((x) => x.property);\n\n                  return { section: s, hasProperties: visibleProperties.length > 0, visibleProperties };\n                }),\n              )\n            )\n              .filter((item) => item.hasProperties)\n              .map(({ section: s, visibleProperties }) => ({\n                type: 'grid-item-layout',\n                name: s.id,\n                options: {\n                  colSpan: s.layout?.positions?.lg?.colSpan ?? 12,\n                  colStart: s.layout?.positions?.lg?.colStart ?? 1,\n                  colEnd: s.layout?.positions?.lg?.colEnd ?? 13,\n                },\n                children: [\n                  {\n                    type: 'fieldset-layout',\n                    options: {\n                      title: allGroups.find((g: any) => g.id === s.id)?.title ?? '',\n                      icon: allGroups.find((g: any) => g.id === s.id)?.icon ?? '',\n                      collapsible: true,\n                      isOpen: !s.collapsed,\n                      look: 'card',\n                      showTitle: s.layout?.label?.visible !== false,\n                      ...(s.layout?.visible != null && String(s.layout.visible).trim() !== ''\n                        ? { visible: s.layout.visible }\n                        : {}),\n                    },\n                    children: [\n                      {\n                        type: 'grid-layout',\n                        options: {\n                          grid: {\n                            default: {\n                              columns: 12,\n                              rows: 1,\n                              gap: '20px',\n                            },\n                          },\n                        },\n                        children: visibleProperties.map((p: any) => {\n                          const layout = getPropertyLayout(p.name, p);\n                          const prefixed = (p as any).__dataPath ? `${(p as any).__dataPath}.${p.name}` : p.name;\n\n                          // Check if property is editable (exists in update interface)\n                          const isEditable =\n                            (p as any).__isEditable != null\n                              ? (p as any).__isEditable\n                              : editablePropertyNames.has(p.name);\n\n                          // Check if property has its own disabled option\n                          const hasOwnDisabled = p.schema.interface?.options?.disabled !== undefined;\n                          let formFieldVisible: boolean | string | undefined;\n                          const sv = p.schema?.visible;\n                          // Template strings are evaluated by `AXPExpressionEvaluatorService` in the widget renderer, not here.\n                          if (typeof sv === 'string') {\n                            formFieldVisible = sv;\n                          } else if (sv === false) {\n                            formFieldVisible = false;\n                          }\n                          return {\n                            type: 'form-field',\n                            options: {\n                              label: p.title,\n                              showLabel: layout?.label?.visible ?? true,\n                              colSpan: layout?.positions?.lg?.colSpan,\n                              colStart: layout?.positions?.lg?.colStart,\n                              colEnd: layout?.positions?.lg?.colEnd,\n                              rowSpan: layout?.positions?.lg?.rowSpan,\n                              rowStart: layout?.positions?.lg?.rowStart,\n                              rowEnd: layout?.positions?.lg?.rowEnd,\n                              ...(formFieldVisible !== undefined ? { visible: formFieldVisible } : {}),\n                              ...(hintFormFieldOptionsFromDescription(p.description) ?? {}),\n                            },\n                            children: [\n                              {\n                                type: p.schema.interface?.type ?? '',\n                                path: prefixed,\n                                name: prefixed,\n                                defaultValue: p.schema.defaultValue,\n                                children: p.schema.interface?.children,\n                                triggers: p.schema.interface?.triggers,\n                                valueTransforms: p.schema.interface?.valueTransforms,\n                                options: merge(\n                                  {},\n                                  p.schema.interface?.options,\n                                  {\n                                    validations: p.validations?.map((c: any) => ({\n                                      rule: c.rule,\n                                      message: c.message,\n                                      options: c.options,\n                                    })),\n                                    // Attach dataPath for merged properties to be available in widgets/options if needed\n                                    dataPath: (p as any).__dataPath,\n                                  },\n                                  // Only set disabled if property doesn't have its own disabled option\n                                  hasOwnDisabled ? {} : { disabled: !isEditable },\n                                ),\n                              },\n                            ],\n                          };\n                        }),\n                      },\n                    ],\n                  },\n                ],\n              })),\n          ),\n        },\n      ],\n    };\n  }\n\n  private buildActions(entity: AXPEntity, singleInterface: any): AXPEntityCommandTriggerViewModel[] {\n    const actions = singleInterface?.actions ?? [];\n    return actions.map((action: any) => new AXPEntityCommandTriggerViewModel(entity, action));\n  }\n\n  private createExpressionEvaluator(context: any, expressionEvaluator: any) {\n    return async (actionData: any) => {\n      const scope: AXPExpressionEvaluatorScope = {\n        context: {\n          eval: (path: string) => {\n            const value = get(context, path);\n            return value;\n          },\n        },\n      };\n      return await expressionEvaluator.evaluate(actionData, scope);\n    };\n  }\n\n  private async buildEvaluatedActions(\n    actions: AXPEntityCommandTriggerViewModel[],\n    evaluateExpressions: ((data: any) => Promise<any>) | null,\n  ): Promise<any[]> {\n    const evaluatedActions = [];\n\n    for (const action of actions) {\n      // Evaluate disabled condition\n      let disabled = action.disabled;\n      if (disabled && typeof disabled === 'string' && evaluateExpressions) {\n        try {\n          const result = await evaluateExpressions({ disabled: disabled });\n          disabled = result.disabled;\n        } catch {\n          disabled = false;\n        }\n      }\n      // Evaluate hidden condition\n      let hidden = action.hidden;\n      if (hidden && typeof hidden === 'string' && evaluateExpressions) {\n        try {\n          const result = await evaluateExpressions({ hidden: hidden });\n          hidden = result.hidden;\n        } catch {\n          hidden = false;\n        }\n      }\n\n      // Skip if hidden\n      if (hidden) continue;\n\n      // Evaluate options\n      let options = action.options;\n      if (options && evaluateExpressions) {\n        try {\n          options = await evaluateExpressions(options);\n        } catch {\n          // Keep original options if evaluation fails\n        }\n      }\n\n      evaluatedActions.push({\n        name: action.name,\n        title: action.title,\n        icon: action.icon,\n        color: action.color,\n        disabled: disabled || false,\n        shortcuts: action.shortcuts,\n        zone: 'header',\n        priority: action.priority,\n        scope: action.scope === AXPEntityCommandScope.Individual ? AXPEntityCommandScope.TypeLevel : action.scope,\n        command: {\n          name: action.name,\n          options: options,\n          metadata: action.metadata,\n        },\n      });\n    }\n    return evaluatedActions;\n  }\n\n  private async buildTabDetails(tabDetailEntities: AXPRelatedEntity[], dependencies?: any): Promise<any[]> {\n    if (!dependencies?.entityResolver || !tabDetailEntities?.length) {\n      return [];\n    }\n\n    const tabs = [];\n    for (const relatedEntity of tabDetailEntities) {\n      const converter = this.relatedEntityConverterFactory.createTabDetailsConverter();\n      tabs.push(\n        await converter.convert(relatedEntity, {\n          entityResolver: dependencies.entityResolver,\n        }),\n      );\n    }\n    return tabs;\n  }\n\n  private async buildTabLists(\n    tabListEntities: AXPRelatedEntity[],\n    rootContext: any,\n    dependencies?: any,\n  ): Promise<any[]> {\n    if (!dependencies?.entityResolver || !tabListEntities?.length) {\n      return [];\n    }\n\n    const tabs = [];\n    for (const relatedEntity of tabListEntities) {\n      const converter = this.relatedEntityConverterFactory.createTabListConverter();\n      tabs.push(\n        await converter.convert(relatedEntity, {\n          entityResolver: dependencies.entityResolver,\n          expressionEvaluator: dependencies.expressionEvaluator,\n          context: rootContext,\n          filterOperatorMiddleware: this.filterOperatorMiddleware,\n        }),\n      );\n    }\n    return tabs;\n  }\n}\n","import { AXPEntity, AXPRelatedEntity, buildPageListWidgetName } from '@acorex/platform/layout/entity-contracts';\nimport { AXPFilterOperatorMiddlewareService, axpIsEntityRecordNotFound, AXPNotFoundError } from '@acorex/platform/common';\nimport type { AXPMultiLanguageString } from '@acorex/platform/contracts';\nimport { AXPExpressionEvaluatorScope, AXPContextEvalFactory } from '@acorex/platform/core';\nimport { AXPLayoutDetailsViewAdapter, AXPLayoutDetailsViewPage } from '@acorex/platform/layout/views';\nimport { Injectable, inject } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { AXPEntityDefinitionRegistryService } from '../../entity-registery.service';\nimport { AXPLayoutAdapterBuilder } from './layout-adapter-builder.service';\nimport { AXPMainEntityContentBuilder } from './main-entity-content-builder.service';\nimport { AXPRelatedEntityConverterFactory } from './related-entity-converter-factory.service';\nimport { AXPPageComponentConverter } from './related-entity-converters/page-component-converter';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPLayoutAdapterFactory {\n  private pageComponentConverter = inject(AXPPageComponentConverter);\n  private contextEvalFactory = inject(AXPContextEvalFactory);\n\n  constructor(\n    private relatedEntityConverterFactory: AXPRelatedEntityConverterFactory,\n    private mainEntityContentBuilder: AXPMainEntityContentBuilder,\n    private layoutAdapterBuilder: AXPLayoutAdapterBuilder,\n    private filterOperatorMiddleware: AXPFilterOperatorMiddlewareService,\n  ) { }\n\n  async createDetailsViewAdapter(\n    entityResolver: AXPEntityDefinitionRegistryService,\n    moduleName: string,\n    entityName: string,\n    id: string,\n    dependencies: any, // Services like expressionEvaluator, session, etc.\n  ): Promise<AXPLayoutDetailsViewAdapter> {\n    const entity = await entityResolver.resolve(moduleName, entityName);\n    if (!entity) {\n      throw new AXPNotFoundError(`Entity ${moduleName}.${entityName} not found`);\n    }\n\n    const rootContext = await this.loadRootContext(entity, id);\n    if (axpIsEntityRecordNotFound(rootContext)) {\n      throw new AXPNotFoundError(`Entity record ${moduleName}.${entityName}#${id} not found`);\n    }\n\n    // Evaluate hidden expressions for related entities and component pages once, reuse across building and composing\n    const evaluatedRelatedEntities = await this.evaluateHiddenFlags(\n      entity?.relatedEntities ?? [],\n      rootContext,\n      dependencies,\n    );\n    const evaluatedPages = await this.evaluateHiddenFlags(entity?.pages ?? [], rootContext, dependencies);\n\n    // Build main and related pages using evaluated related entities and pages\n    const entityWithEvaluatedLayout = {\n      ...entity,\n      relatedEntities: evaluatedRelatedEntities,\n      pages: evaluatedPages,\n    };\n    const mainPage = await this.buildMainPage(entityWithEvaluatedLayout, rootContext, id, dependencies);\n    const relatedPages = await this.buildRelatedPages(entityWithEvaluatedLayout, rootContext, dependencies);\n\n    // Compose ordered pages around the primary page\n    const orderedPages = this.composePagesWithPositions(mainPage, relatedPages, entityWithEvaluatedLayout);\n\n    const applicationName = dependencies.session.application?.name ?? 'default';\n    const rootTitle = await this.getRootTitle(entity, rootContext, dependencies);\n\n    return this.layoutAdapterBuilder\n      .setEntity(entity, rootContext)\n      .setDependencies(dependencies)\n      .setPages(orderedPages)\n      .setRootTitle(rootTitle)\n      .setExitUrl({ moduleName, entityName, applicationName })\n      .build();\n  }\n\n  private async loadRootContext(entity: any, id: string): Promise<any> {\n    const fn = entity?.queries.byKey?.execute as Function;\n    return await fn(id);\n  }\n\n  private async buildMainPage(entity: any, rootContext: any, id: string, dependencies?: any): Promise<any> {\n    return this.mainEntityContentBuilder.build(\n      entity,\n      rootContext,\n      { ...dependencies, reloadRootContext: () => this.loadRootContext(entity, id) },\n      await this.getRootTitle(entity, rootContext, dependencies),\n    );\n  }\n\n  /**\n   * Evaluates the 'hidden' expression for layout items using the expression evaluator.\n   * Returns a new array with evaluated hidden values.\n   */\n  private async evaluateHiddenFlags<T extends { hidden?: boolean | string }>(\n    items: T[],\n    rootContext: any,\n    dependencies: any,\n  ): Promise<T[]> {\n    if (!items?.length || !dependencies?.expressionEvaluator) {\n      return items ?? [];\n    }\n\n    return Promise.all(\n      items.map(async (item) => {\n        let hidden = item.hidden;\n        if (hidden && typeof hidden === 'string') {\n          try {\n            const scope: AXPExpressionEvaluatorScope = {\n              context: this.contextEvalFactory.createScope(rootContext),\n            };\n            const result = await dependencies.expressionEvaluator.evaluate({ hidden }, scope);\n            hidden = result.hidden;\n          } catch {\n            // Keep original hidden value if evaluation fails\n          }\n        }\n        return { ...item, hidden };\n      }),\n    );\n  }\n\n  private async evaluateRelatedEntitiesHidden(\n    relatedEntities: AXPRelatedEntity[],\n    rootContext: any,\n    dependencies: any,\n  ): Promise<AXPRelatedEntity[]> {\n    return this.evaluateHiddenFlags(relatedEntities, rootContext, dependencies);\n  }\n\n  private async buildRelatedPages(entity: any, rootContext: any, dependencies: any): Promise<any[]> {\n    const pages = [];\n\n    const rootTitle = await this.getRootTitle(entity, rootContext, dependencies);\n\n    // Evaluate hidden expressions before filtering related entities\n    const evaluatedRelatedEntities = await this.evaluateRelatedEntitiesHidden(\n      entity?.relatedEntities ?? [],\n      rootContext,\n      dependencies,\n    );\n\n    // Page Details\n    const pageDetailEntities = evaluatedRelatedEntities.filter(\n      (re: any) => !re.hidden && re.layout?.type === 'page-detail',\n    );\n    for (const relatedEntity of pageDetailEntities || []) {\n      const converter = this.relatedEntityConverterFactory.createPageDetailsConverter();\n      pages.push(\n        await converter.convert(relatedEntity, {\n          ...dependencies,\n          context: rootContext,\n          rootTitle: rootTitle,\n        }),\n      );\n    }\n\n    // Include nested page-related entities from merge-detail related entities\n    const mergeDetailEntities = evaluatedRelatedEntities.filter(\n      (re: any) => !re.hidden && re.layout?.type === 'merge-detail',\n    );\n    for (const mergeRelated of mergeDetailEntities || []) {\n      try {\n        const [moduleName, childEntityName] = (mergeRelated.entity || '').split('.');\n        const childEntity = await dependencies.entityResolver.resolve(moduleName, childEntityName);\n        if (!childEntity) {\n          continue;\n        }\n\n        const nestedDataPath = mergeRelated?.persistence?.dataPath || childEntityName;\n        const nestedContext = get(rootContext, nestedDataPath) ?? rootContext;\n\n        // Evaluate hidden expressions for nested related entities\n        const evaluatedNestedEntities = await this.evaluateRelatedEntitiesHidden(\n          childEntity?.relatedEntities ?? [],\n          nestedContext,\n          dependencies,\n        );\n\n        const nestedPageDetailEntities = evaluatedNestedEntities.filter(\n          (re: any) => !re.hidden && re.layout?.type === 'page-detail',\n        );\n        for (const nestedRelated of nestedPageDetailEntities || []) {\n          const converter = this.relatedEntityConverterFactory.createPageDetailsConverter();\n          pages.push(\n            await converter.convert(nestedRelated, {\n              ...dependencies,\n              context: nestedContext,\n              rootTitle: rootTitle,\n            }),\n          );\n        }\n\n        const nestedPageListEntities = evaluatedNestedEntities.filter(\n          (re: any) => !re.hidden && re.layout?.type === 'page-list',\n        );\n        for (const nestedRelated of nestedPageListEntities || []) {\n          const converter = this.relatedEntityConverterFactory.createPageListConverter();\n          pages.push(\n            await converter.convert(nestedRelated, {\n              ...dependencies,\n              context: nestedContext,\n              rootTitle: rootTitle,\n            }),\n          );\n        }\n      } catch {\n        // Silently ignore failures\n      }\n    }\n\n    // Component-based pages from entity.pages\n    const componentPages = entity?.pages?.filter((p: any) => !p.hidden) ?? [];\n    if (componentPages.length > 0) {\n      for (const entityPage of componentPages) {\n        try {\n          const page = await this.pageComponentConverter.convert(entityPage, rootContext, rootTitle);\n          // page.actions is now populated from component if it extends AXPPageLayoutBaseComponent\n          pages.push(page);\n        } catch (error) {\n          console.error(`Failed to convert page component \"${entityPage.componentKey}\":`, error);\n        }\n      }\n    }\n\n    // Page Lists\n    const pageListEntities = entity?.relatedEntities?.filter(\n      (re: any) => !re.hidden && re.layout?.type === 'page-list',\n    );\n    for (const relatedEntity of pageListEntities || []) {\n      const converter = this.relatedEntityConverterFactory.createPageListConverter();\n      pages.push(\n        await converter.convert(relatedEntity, {\n          ...dependencies,\n          context: rootContext,\n          rootTitle: rootTitle,\n          filterOperatorMiddleware: this.filterOperatorMiddleware,\n        }),\n      );\n    }\n\n    return pages;\n  }\n\n  private composePagesWithPositions(\n    mainPage: AXPLayoutDetailsViewPage,\n    relatedPages: AXPLayoutDetailsViewPage[],\n    entity: AXPEntity,\n  ): any[] {\n    // Only consider related entities with layout types page-detail or page-list\n    const pageEntities = (entity?.relatedEntities || []).filter(\n      (re: any) => !re.hidden && (re.layout?.type === 'page-detail' || re.layout?.type === 'page-list'),\n    );\n\n    // Build a map from page id to its layout config (order/position).\n    // page-list ids use `page-list-{module.entity}` so they never collide with the host overview page.\n    const layoutConfigByEntity: Record<\n      string,\n      { order?: number; position?: 'before' | 'after' | 'middle' } | undefined\n    > = {};\n    for (const re of pageEntities) {\n      const [, entityName] = (re.entity || '').split('.');\n      const key =\n        re.layout?.type === 'page-list'\n          ? buildPageListWidgetName(re.entity)\n          : entityName || re.entity;\n      layoutConfigByEntity[key] = { order: re.layout?.order, position: re.layout?.position };\n    }\n\n    // Nested pages from merge-detail (e.g. PartyContact from Party) have no layout config.\n    // Assign order 1 so they appear before component pages (e.g. Documents with order 100).\n    for (const page of relatedPages) {\n      if (page.id && layoutConfigByEntity[page.id] === undefined) {\n        layoutConfigByEntity[page.id] = { order: 1, position: 'after' };\n      }\n    }\n\n    // Also include component-based pages from entity.pages\n    const componentPages = (entity?.pages || []).filter((p: any) => !p.hidden) ?? [];\n    for (const page of componentPages) {\n      const key = page.componentKey; // This is the page id in the converted page\n      layoutConfigByEntity[key] = {\n        order: page.layout?.order,\n        position: page.layout?.position ?? 'after',\n      };\n    }\n\n    // Split related pages into before/after buckets based on their relatedEntity layout\n    const before: any[] = [];\n    const after: any[] = [];\n\n    for (const page of relatedPages) {\n      const conf = layoutConfigByEntity[page.id];\n      const position = conf?.position ?? 'after';\n      if (position === 'before') {\n        before.push(page);\n      } else {\n        after.push(page);\n      }\n    }\n\n    // Sort by order within each bucket (undefined orders go last)\n    const sortByOrder = (a: any, b: any) => {\n      const ao = layoutConfigByEntity[a.id]?.order ?? Number.POSITIVE_INFINITY;\n      const bo = layoutConfigByEntity[b.id]?.order ?? Number.POSITIVE_INFINITY;\n      return ao - bo;\n    };\n    before.sort(sortByOrder);\n    after.sort(sortByOrder);\n\n    // Ensure the main page is primary\n    mainPage.isPrimary = true;\n\n    // Compose final pages: before -> main -> after\n    return [...before, mainPage, ...after];\n  }\n\n  private async getRootTitle(\n    entity: AXPEntity,\n    rootContext: any,\n    dependencies: any,\n  ): Promise<AXPMultiLanguageString> {\n    const titleTemplate = entity.interfaces?.master?.single?.title;\n    const fallback = entity?.formats?.individual ?? '';\n\n    if (titleTemplate == null || titleTemplate === '') {\n      return fallback;\n    }\n\n    if (typeof titleTemplate === 'object' && !Array.isArray(titleTemplate)) {\n      return titleTemplate as AXPMultiLanguageString;\n    }\n\n    if (typeof titleTemplate !== 'string') {\n      return fallback;\n    }\n\n    if (!dependencies?.expressionEvaluator) {\n      return titleTemplate;\n    }\n\n    const scope = {\n      ...rootContext,\n      context: this.contextEvalFactory.createScope(rootContext),\n    };\n    const title = await dependencies.expressionEvaluator.evaluate(titleTemplate, scope);\n    return title as AXPMultiLanguageString;\n  }\n}\n","import { AXFormatService } from '@acorex/core/format';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport {\n  AXP_LAYOUT_DETAILS_VIEW_ADAPTER_LOADER,\n  AXPLayoutDetailsViewAdapter,\n  AXPLayoutDetailsViewAdapterLoader,\n  AXPLayoutDetailsViewRouteParams,\n} from '@acorex/platform/layout/views';\nimport { AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPEntityDefinitionRegistryService } from './entity-registery.service';\nimport { AXPLayoutAdapterFactory } from './services/entity-details/layout-adapter-factory.service';\n\n//#region ---- Entity Details View Adapter Loader ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXPEntityDetailsViewAdapterLoader implements AXPLayoutDetailsViewAdapterLoader {\n  //#region ---- Services & Dependencies ----\n\n  private readonly entityResolver = inject(AXPEntityDefinitionRegistryService);\n  private readonly layoutAdapterFactory = inject(AXPLayoutAdapterFactory);\n  private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n  private readonly session = inject(AXPSessionService);\n  private readonly formatService = inject(AXFormatService);\n  private readonly workflowService = inject(AXPWorkflowService);\n  private readonly commandService = inject(AXPCommandService);\n\n  //#endregion\n\n  /**\n   * Builds the details-view adapter for an entity record (definition, layout pages, root context).\n   */\n  async load(params: AXPLayoutDetailsViewRouteParams): Promise<AXPLayoutDetailsViewAdapter> {\n    const { moduleName, entityName, id } = params;\n    const dependencies = {\n      entityResolver: this.entityResolver,\n      expressionEvaluator: this.expressionEvaluator,\n      session: this.session,\n      formatService: this.formatService,\n      workflowService: this.workflowService,\n      commandService: this.commandService,\n    };\n\n    return this.layoutAdapterFactory.createDetailsViewAdapter(\n      this.entityResolver,\n      moduleName,\n      entityName,\n      id,\n      dependencies,\n    );\n  }\n}\n\nexport const AXP_ENTITY_DETAILS_VIEW_ADAPTER_LOADER_PROVIDER = {\n  provide: AXP_LAYOUT_DETAILS_VIEW_ADAPTER_LOADER,\n  useExisting: AXPEntityDetailsViewAdapterLoader,\n};\n\n//#endregion\n","import { inject, Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, Router, UrlTree } from '@angular/router';\nimport { AXPEntityDefinitionRegistryService } from '../entity-registery.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPEntityPreloadFilterGuard implements CanActivate {\n  private readonly entityRegistry = inject(AXPEntityDefinitionRegistryService);\n  private readonly router = inject(Router);\n\n  async canActivate(route: ActivatedRouteSnapshot): Promise<boolean | UrlTree> {\n    const moduleName = route.paramMap.get('module');\n    const entityName = route.paramMap.get('entity');\n\n    if (!moduleName || !entityName) {\n      return true;\n    }\n\n    // Check if filters are already applied (coming from preload page)\n    const hasFiltersParam = route.queryParamMap.has('filters');\n    if (hasFiltersParam) {\n      // User has already filled filters, allow access to list\n      return true;\n    }\n\n    try {\n      const entity = await this.entityRegistry.resolve(moduleName, entityName);\n\n      // Check if any property has preload filter enabled\n      const hasPreloadFilter = entity.properties?.some(\n        (property) => property.options?.filter?.preload?.enabled === true,\n      );\n\n      if (hasPreloadFilter) {\n        // Build the target URL from route segments\n        const segments = route.pathFromRoot\n          .map((r) => r.url.map((segment) => segment.path))\n          .reduce((acc, val) => acc.concat(val), []);\n\n        // Replace 'list' with 'filters' in segments\n        const filterSegments = segments.map((s) => (s === 'list' ? 'filters' : s));\n        const filterUrl = '/' + filterSegments.filter((s) => s).join('/');\n\n        return this.router.parseUrl(filterUrl);\n      }\n\n      // Allow access to list\n      return true;\n    } catch (error) {\n      console.error('[AXPEntityPreloadFilterGuard] Failed to resolve entity:', error);\n      // On error, allow access to list (fail-safe)\n      return true;\n    }\n  }\n}\n","import { inject } from '@angular/core';\nimport { AXPRefreshEvent } from '@acorex/platform/common';\nimport { AXPWorkflowEventService } from '@acorex/platform/workflow';\nimport { AXPEntityEventDispatcherService } from '../entity-events/entity-event-dispatcher.service';\nimport { AXPEntityStorageMiddleware } from '../storage-middleware/storage-middleware.types';\n\nexport const eventDispatchMiddleware: AXPEntityStorageMiddleware = {\n    target: { ops: ['create', 'update', 'delete'], order: 90 },\n    execute: async (ctx, next) => {\n        const dispatcher = inject(AXPEntityEventDispatcherService);\n        const workflowEventService = inject(AXPWorkflowEventService);\n\n        await next();\n\n        try {\n            if (ctx.op === 'create') {\n                const createdData = ctx.result ? { ...(ctx.data as any), id: ctx.result } : ctx.data;\n                await dispatcher.dispatchInserted(ctx.entityName, { refType: ctx.entityName, data: createdData });\n                // List refresh is dispatched after create UI closes (Entity:Create command / create-entity workflow).\n            } else if (ctx.op === 'update') {\n                await dispatcher.dispatchUpdated(ctx.entityName, {\n                    refType: ctx.entityName,\n                    data: ctx.result,\n                    changes: ctx.locals.get('changes'),\n                });\n                workflowEventService.dispatch(\n                    AXPRefreshEvent({\n                        entity: ctx.entityName,\n                    }),\n                );\n            } else if (ctx.op === 'delete') {\n                await dispatcher.dispatchDeleted(ctx.entityName, { refType: ctx.entityName, data: ctx.result ?? ctx.previous });\n                workflowEventService.dispatch(\n                    AXPRefreshEvent({\n                        entity: ctx.entityName,\n                    }),\n                );\n            }\n        } catch {\n            // Persist already succeeded; event dispatch must not block the write result.\n        }\n    },\n};\n\n","import { AXPEntityModifier, AXPEntityModifierProvider } from '../entity-middleware/entity-modifier.types';\nimport { AXPColumnWidthService, IColumnWithWidth } from '@acorex/platform/core';\nimport { inject } from '@angular/core';\n\n//#region ----   Column Width Middleware   ----\n\n/**\n * Entity modifier that applies column widths using the column width service\n * Uses the generic column width resolution system from core library\n * Note: inject() works here because modifiers are executed via runInInjectionContext()\n */\nexport const columnWidthMiddleware: AXPEntityModifier = (context) => {\n    const columnWidthService = inject(AXPColumnWidthService);\n    const columns = context.columns.list();\n\n    if (!columns) {\n        return;\n    }\n\n    columns.forEach((column) => {\n        // Convert entity column to IColumnWithWidth interface\n        const columnWithWidth: IColumnWithWidth = {\n            name: column.name,\n            options: column.options,\n            showAs: column.showAs,\n        };\n\n        // Apply width if resolved\n        const resolvedWidth = columnWidthService.resolveWidth(columnWithWidth);\n        if (resolvedWidth) {\n            context.columns.find(column.name).update((col) => ({\n                ...col,\n                options: {\n                    ...col.options,\n                    width: resolvedWidth,\n                },\n            }));\n        }\n    });\n};\n\n//#endregion\n\n//#region ----   Provider Registration   ----\n\n/**\n * Default provider that applies column width middleware to all entities\n */\nexport const columnWidthMiddlewareProvider: AXPEntityModifierProvider = {\n    entityName: '*', // Apply to all entities\n    modifier: columnWidthMiddleware,\n};\n\n//#endregion","import { AXPCommonSettings, AXPSettingsService, coerceAXPSettingRawValueByKind } from '@acorex/platform/common';\nimport { inject, Injectable, signal } from '@angular/core';\n\nimport { AXPEntityDefinitionRegistryService } from '../entity-registery.service';\n\nconst DEFAULT_APPLY_ORDERING = true;\n\n/**\n * Provides synchronous access to the ApplyLayoutOrdering setting.\n * Used by layout ordering middleware to avoid async in the modifier and prevent startup deadlocks.\n * Reads from the settings in-memory cache when available; refreshes entity definitions when the value changes.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPLayoutOrderingConfigService {\n  private readonly settingsService = inject(AXPSettingsService);\n  private readonly entityRegistry = inject(AXPEntityDefinitionRegistryService);\n\n  private readonly _applyOrdering = signal<boolean>(DEFAULT_APPLY_ORDERING);\n  private asyncWarmupScheduled = false;\n\n  constructor() {\n    this.settingsService.onLoaded.subscribe(() => void this.handleSettingsEvent());\n    this.settingsService.onChanged.subscribe((event) => {\n      if (event.keys.includes(AXPCommonSettings.ApplyLayoutOrdering)) {\n        void this.handleSettingsEvent();\n      }\n    });\n  }\n\n  getApplyOrdering(): boolean {\n    const cached = this.settingsService.peekCached(AXPCommonSettings.ApplyLayoutOrdering);\n    if (cached !== undefined) {\n      const value = coerceAXPSettingRawValueByKind(cached, 'boolean') as boolean;\n      this._applyOrdering.set(value);\n      return value;\n    }\n\n    if (!this.asyncWarmupScheduled) {\n      this.asyncWarmupScheduled = true;\n      void this.handleSettingsEvent();\n    }\n    return this._applyOrdering();\n  }\n\n  private async handleSettingsEvent(): Promise<void> {\n    const previous = this._applyOrdering();\n    await this.syncFromSettings();\n    const current = this._applyOrdering();\n    if (previous !== current) {\n      try {\n        await this.entityRegistry.refresh();\n      } catch (err) {\n        console.error('[AXPLayoutOrderingConfigService] entity refresh failed:', err);\n      }\n    }\n  }\n\n  private async syncFromSettings(): Promise<void> {\n    try {\n      const value = await this.settingsService.get<boolean>(AXPCommonSettings.ApplyLayoutOrdering);\n      this._applyOrdering.set(value ?? DEFAULT_APPLY_ORDERING);\n    } catch {\n      this._applyOrdering.set(DEFAULT_APPLY_ORDERING);\n    }\n  }\n}\n","import { inject } from '@angular/core';\n\nimport { AXPEntityModifier, AXPEntityModifierProvider } from '../entity-middleware/entity-modifier.types';\nimport { AXPLayoutOrderingConfigService } from './layout-ordering-config.service';\n\n//#region ----   Default Column Order   ----\n\n/**\n * Default order for common list view columns.\n * Lower numbers appear first. Columns not in this map get order 500 (middle).\n * Use high numbers (990+) for columns that should appear at the end.\n */\nexport const DEFAULT_COLUMN_ORDER: Record<string, number> = {\n  // Identifier columns first\n  code: 1,\n  employeeCode: 1,\n\n  // Common display columns\n  title: 3,\n  name: 4,\n  'person.firstName': 5,\n  'person.lastName': 6,\n  'person.fullName': 5,\n  'person.phones': 7,\n  'person.emails': 8,\n  'party.code': 2,\n  'party.title': 3,\n  'party.phones': 7,\n  'party.emails': 8,\n\n  // Middle columns\n  description: 10,\n  jobDefinitionId: 19,\n  employmentTypeId: 20,\n  hireDate: 21,\n  createdAt: 90,\n  updatedAt: 91,\n\n  // Last columns: Documents/attachments, Categories before Status\n  imageId: 990,\n  //\n  categoryIds: 700,\n  categories: 700,\n  //\n  attachments: 800,\n  //\n  statusId: 995,\n  isArchived: 999,\n  isDisabled: 999,\n};\n\n//#endregion\n\n//#region ----   Column Ordering Middleware   ----\n\n/**\n * Entity modifier that sorts list view columns by default order.\n * Similar to layout-ordering for sections/properties, but for list columns.\n */\nexport const columnOrderingMiddleware: AXPEntityModifier = (context) => {\n  const configService = inject(AXPLayoutOrderingConfigService);\n  if (!configService.getApplyOrdering()) {\n    return;\n  }\n\n  const columns = context.columns.list();\n\n  if (!columns || columns.length === 0) {\n    return;\n  }\n\n  const defaultOrder = 500;\n\n  columns.sort((a: { name: string }, b: { name: string }) => {\n    const orderA = DEFAULT_COLUMN_ORDER[a.name] ?? defaultOrder;\n    const orderB = DEFAULT_COLUMN_ORDER[b.name] ?? defaultOrder;\n    return orderA - orderB;\n  });\n};\n\n//#endregion\n\n//#region ----   Provider Registration   ----\n\n/**\n * Factory to create a column ordering middleware with custom order config\n */\nexport const createColumnOrderingMiddlewareProvider = (\n  columnOrder: Record<string, number> = {},\n  entityName: string | RegExp = '*',\n): AXPEntityModifierProvider => ({\n  entityName,\n  modifier: (context) => {\n    const configService = inject(AXPLayoutOrderingConfigService);\n    if (!configService.getApplyOrdering()) {\n      return;\n    }\n\n    const columns = context.columns.list();\n    if (!columns || columns.length === 0) return;\n\n    const mergedOrder = { ...DEFAULT_COLUMN_ORDER, ...columnOrder };\n    const defaultOrder = 500;\n\n    columns.sort((a: { name: string }, b: { name: string }) => {\n      const orderA = mergedOrder[a.name] ?? defaultOrder;\n      const orderB = mergedOrder[b.name] ?? defaultOrder;\n      return orderA - orderB;\n    });\n  },\n});\n\n/**\n * Default provider that applies column ordering to all entities\n */\nexport const columnOrderingMiddlewareProvider: AXPEntityModifierProvider = {\n  entityName: '*',\n  modifier: columnOrderingMiddleware,\n};\n\n//#endregion\n","import { inject } from '@angular/core';\nimport { AXPEntityModifier, AXPEntityModifierProvider } from '../entity-middleware/entity-modifier.types';\nimport { AXPLayoutOrderingConfigService } from './layout-ordering-config.service';\n\n//#region ---- Layout Ordering Middleware ----\n\n/**\n * Default colSpans for two properties in one section (`md` / `lg`).\n * Missing `positions[*].colSpan` are filled only; entities keep full control.\n */\nexport interface PairSpanRule {\n  first: string;\n  second: string;\n  /** Col span applied to {@link first} */\n  firstSpan: number;\n  /** Col span applied to {@link second} */\n  secondSpan: number;\n  breakpoints?: readonly ('sm' | 'md' | 'lg')[];\n}\n\nexport interface SectionOrderConfig {\n  sections: Record<string, number>;\n\n  properties: Record<string, number>;\n\n  /**\n   * Defaults for pairing two columns (e.g. code + title). Replace or extend defaults.\n   * - `undefined`: use {@link DEFAULT_PAIR_SPAN_RULES}\n   * - `false`: do not apply any pair spans\n   * - `[...]` + spread `DEFAULT_PAIR_SPAN_RULES` when you want to append custom pairs\n   */\n  pairSpanRules?: PairSpanRule[] | false;\n}\n\n/**\n * Default shipped rules: narrow identifier + wider title on `md` / `lg`.\n */\nexport const DEFAULT_PAIR_SPAN_RULES: readonly PairSpanRule[] = [\n  {\n    first: 'code',\n    second: 'title',\n    firstSpan: 4,\n    secondSpan: 8,\n    breakpoints: ['md', 'lg'],\n  },\n  {\n    first: 'name',\n    second: 'title',\n    firstSpan: 4,\n    secondSpan: 8,\n    breakpoints: ['md', 'lg'],\n  },\n];\n\nexport const DEFAULT_SECTION_ORDER: Record<string, number> = {\n  'basic-info': -100,\n  classification: 20,\n  appearance: 90,\n  advanced: 110,\n  metadata: 120,\n  settings: 200,\n};\n\nexport const DEFAULT_PROPERTY_ORDER: Record<string, number> = {\n  'basic-info.code': -10,\n  'basic-info.title': -9,\n  'basic-info.name': -8,\n  'basic-info.description': -7,\n  'basic-info.note': -6,\n  'basic-info.notes': -5,\n  'classification.categoryIds': 1,\n  'classification.tags': 2,\n  'classification.type': 3,\n  'appearance.icon': 1,\n  'appearance.color': 2,\n  'appearance.avatar': 3,\n  'settings.isDefault': 90,\n  'settings.isPrimary': 91,\n  'settings.isDisabled': 95,\n  'settings.isArchived': 96,\n  code: 1,\n  title: 2,\n  name: 3,\n  icon: 5,\n  color: 6,\n  avatar: 7,\n  description: 10,\n  categoryIds: 15,\n  tags: 16,\n  isDefault: 90,\n  isPrimary: 91,\n  isDisabled: 95,\n  isArchived: 96,\n};\n\nconst DEFAULT_PAIR_BREAKPOINTS: readonly ('sm' | 'md' | 'lg')[] = ['md', 'lg'];\n\nfunction applyPairSpanRules(\n  layout: { properties?: unknown[] },\n  rules: PairSpanRule[],\n  getGroupId: (propertyName: string) => string | undefined,\n): void {\n  if (!layout.properties?.length || rules.length === 0) {\n    return;\n  }\n\n  const namesByGroup = new Map<string, Set<string>>();\n  for (const prop of layout.properties as { name?: string }[]) {\n    if (!prop.name) continue;\n    const gid = getGroupId(prop.name);\n    if (!gid) continue;\n    if (!namesByGroup.has(gid)) {\n      namesByGroup.set(gid, new Set());\n    }\n    namesByGroup.get(gid)!.add(prop.name);\n  }\n\n  type PropVm = { name?: string; layout?: Record<string, unknown> };\n  const findPropView = (name: string): PropVm | undefined =>\n    (layout.properties as PropVm[]).find((p) => p.name === name);\n\n  const spanIfUnset = (pv: PropVm, breakpoint: string, span: number): void => {\n    if (!pv.layout) pv.layout = {};\n    let positions = (pv.layout['positions'] as Record<string, { colSpan?: number }> | undefined) ?? undefined;\n    if (!positions) {\n      positions = {};\n      (pv.layout as Record<string, unknown>)['positions'] = positions;\n    }\n    const cell = positions[breakpoint] ?? {};\n    positions[breakpoint] = cell;\n    if (cell.colSpan === undefined) cell.colSpan = span;\n  };\n\n  for (const namesInGroup of namesByGroup.values()) {\n    for (const rule of rules) {\n      if (!namesInGroup.has(rule.first) || !namesInGroup.has(rule.second)) continue;\n      if (rule.first === 'name' && rule.second === 'title' && namesInGroup.has('code')) {\n        continue;\n      }\n\n      const a = findPropView(rule.first);\n      const b = findPropView(rule.second);\n      if (!a || !b) continue;\n\n      const breakpoints = rule.breakpoints?.length ? rule.breakpoints : DEFAULT_PAIR_BREAKPOINTS;\n      for (const bp of breakpoints) spanIfUnset(a, bp, rule.firstSpan);\n      for (const bp of breakpoints) spanIfUnset(b, bp, rule.secondSpan);\n\n      break;\n    }\n  }\n}\n\nconst getPropertyOrder = (\n  sectionId: string | undefined,\n  propertyName: string,\n  orderConfig: Record<string, number>,\n): number | undefined => {\n  if (sectionId) {\n    const sectionSpecific = orderConfig[`${sectionId}.${propertyName}`];\n    if (sectionSpecific !== undefined) return sectionSpecific;\n  }\n  return orderConfig[propertyName];\n};\n\n/**\n * True when the entity already defined sort order for this property view.\n * Middleware default order applies only when this is false (entity layout takes priority).\n */\nfunction hasExplicitLayoutOrder(prop: { layout?: Record<string, unknown> }): boolean {\n  const layout = prop.layout;\n  if (!layout || typeof layout !== 'object') {\n    return false;\n  }\n\n  if (layout['order'] !== undefined && layout['order'] !== null) {\n    return true;\n  }\n\n  const positions = layout['positions'] as Record<string, { order?: unknown }> | undefined;\n  if (!positions || typeof positions !== 'object') {\n    return false;\n  }\n\n  for (const key of Object.keys(positions)) {\n    const cell = positions[key];\n    if (cell && typeof cell === 'object' && cell['order'] !== undefined && cell['order'] !== null) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction resolveViewPropertySortOrder(prop: { layout?: Record<string, unknown> }): number {\n  const toNum = (v: unknown): number | null => {\n    if (v === undefined || v === null) return null;\n    const n = Number(v);\n    return Number.isFinite(n) ? n : null;\n  };\n\n  const layout = prop.layout;\n  if (!layout) return 999;\n\n  const primary = toNum(layout['order']);\n  if (primary !== null) return primary;\n\n  const positions = layout['positions'] as Record<string, { order?: string | number }> | undefined;\n  const lg = toNum(positions?.['lg']?.order);\n  if (lg !== null) return lg;\n  const md = toNum(positions?.['md']?.order);\n  if (md !== null) return md;\n\n  return 999;\n}\n\nexport const layoutOrderingMiddlewareFactory = (config: SectionOrderConfig): AXPEntityModifier => {\n  return (context) => {\n    const configService = inject(AXPLayoutOrderingConfigService);\n    if (!configService.getApplyOrdering()) {\n      return;\n    }\n\n    const { sections: sectionOrder, properties: propertyOrder } = config;\n    const pairRules =\n      config.pairSpanRules === false\n        ? []\n        : config.pairSpanRules?.length\n          ? config.pairSpanRules\n          : [...DEFAULT_PAIR_SPAN_RULES];\n\n    const orderSections = (layout: any) => {\n      if (!layout?.sections) return;\n\n      layout.sections.forEach((section: any) => {\n        const defaultOrder = sectionOrder[section.id];\n        if (defaultOrder !== undefined && section.order === undefined) {\n          section.order = defaultOrder;\n        }\n      });\n\n      layout.sections.sort((a: any, b: any) => {\n        const orderA = a.order ?? 999;\n        const orderB = b.order ?? 999;\n        return orderA - orderB;\n      });\n    };\n\n    const orderProperties = (layout: any) => {\n      if (!layout?.properties) return;\n\n      layout.properties.forEach((prop: any) => {\n        const groupId = context.properties.find(prop.name).get()?.groupId;\n        const defaultOrder = getPropertyOrder(groupId, prop.name, propertyOrder);\n\n        if (defaultOrder !== undefined && !hasExplicitLayoutOrder(prop)) {\n          if (!prop.layout) prop.layout = {};\n          if (prop.layout.order === undefined) prop.layout.order = defaultOrder;\n          if (!prop.layout.positions) prop.layout.positions = {};\n          if (!prop.layout.positions.lg) prop.layout.positions.lg = {};\n          if (prop.layout.positions.lg.order === undefined) {\n            prop.layout.positions.lg.order = defaultOrder;\n          }\n        }\n      });\n\n      layout.properties.sort(\n        (a: { layout?: Record<string, unknown> }, b: { layout?: Record<string, unknown> }) =>\n          resolveViewPropertySortOrder(a) - resolveViewPropertySortOrder(b),\n      );\n\n      if (pairRules.length > 0) {\n        applyPairSpanRules(layout, pairRules, (propertyName) => context.properties.find(propertyName).get()?.groupId);\n      }\n    };\n\n    context.interfaces.master.create.update((create) => {\n      if (create) {\n        orderSections(create);\n        orderProperties(create);\n      }\n      return create ?? { sections: [], properties: [] };\n    });\n\n    context.interfaces.master.modify.update((modify) => {\n      if (modify) {\n        orderSections(modify);\n        orderProperties(modify);\n      }\n      return modify ?? { sections: [], properties: [] };\n    });\n\n    context.interfaces.master.single.update((single) => {\n      if (single) {\n        orderSections(single);\n        orderProperties(single);\n      }\n      return single ?? { title: context.entity.title, sections: [], properties: [] };\n    });\n  };\n};\n\nexport const createLayoutOrderingMiddlewareProvider = (\n  config: Partial<SectionOrderConfig> = {},\n  entityName: string | RegExp = '*',\n): AXPEntityModifierProvider => ({\n  entityName,\n  modifier: layoutOrderingMiddlewareFactory({\n    sections: { ...DEFAULT_SECTION_ORDER, ...config.sections },\n    properties: { ...DEFAULT_PROPERTY_ORDER, ...config.properties },\n    pairSpanRules:\n      config.pairSpanRules === false ? false : config.pairSpanRules !== undefined ? config.pairSpanRules : undefined,\n  }),\n});\n\nexport const layoutOrderingMiddlewareProvider: AXPEntityModifierProvider = createLayoutOrderingMiddlewareProvider();\n\n//#endregion\n","import { AXPModuleManifestRegistry } from '@acorex/platform/core';\nimport { inject } from '@angular/core';\nimport { AXPEntityModifier, AXPEntityModifierProvider } from '../entity-middleware/entity-modifier.types';\n\n//#region ----   Search Result Description Middleware   ----\n\n/**\n * Fallback: converts PascalCase to kebab-case (e.g. PersonCore → person-core).\n */\nfunction moduleNameToI18nScope(moduleName: string): string {\n  return moduleName.replace(/([A-Z])/g, '-$1').toLowerCase().replace(/^-/, '');\n}\n\n/**\n * Ensures all entities have a searchResult.description.\n * Uses @{i18nScope}:module.title when missing (guaranteed to exist in i18n).\n */\nexport const searchResultDescriptionMiddleware: AXPEntityModifier = (context) => {\n  const manifestRegistry = inject(AXPModuleManifestRegistry);\n  const formats = context.formats.get();\n  const searchResult = formats?.searchResult;\n\n  if (searchResult?.description) {\n    return;\n  }\n\n  const manifest = manifestRegistry.get(context.module.get());\n  const i18nScope = manifest?.i18n ?? moduleNameToI18nScope(context.module.get());\n  const fallbackKey = `@${i18nScope}:module.title`;\n\n  context.formats.update((f) => ({\n    ...f,\n    searchResult: {\n      ...(f?.searchResult ?? {}),\n      title: f?.searchResult?.title ?? '{{ title }}',\n      description: fallbackKey,\n    },\n  }));\n};\n\n//#endregion\n\n//#region ----   Provider Registration   ----\n\nexport const searchResultDescriptionMiddlewareProvider: AXPEntityModifierProvider = {\n  entityName: '*',\n  modifier: searchResultDescriptionMiddleware,\n};\n\n//#endregion\n","import type { AXPWidgetNode } from '@acorex/platform/contracts';\nimport type { AXEntityPropertyWidget } from '@acorex/platform/layout/entity-contracts';\nimport { inject } from '@angular/core';\nimport {\n  AXPDefaultMultiLanguageConfigService, withDefaultMultiLanguageOnWidgetNodeTree } from '@acorex/platform/common';\nimport { AXPEntityModifier, AXPEntityModifierProvider } from '../entity-middleware/entity-modifier.types';\n\n//#region ----   Middleware ----\n\n/**\n * When enabled in regional settings ({@link AXPRegionalSetting.MultiLanguageSupport}), walks each\n * property's `schema.interface` widget tree and sets `options.multiLanguage` on matching text-like\n * editors (including nested GridLayout leaves such as `pre.content` / `post.summaryContent`), unless\n * the node already specifies `multiLanguage` (including explicit false to opt out).\n */\nexport const defaultMultiLanguageMiddleware: AXPEntityModifier = (context) => {\n  const config = inject(AXPDefaultMultiLanguageConfigService);\n  const applyDefault = config.getApplyDefaultMultiLanguage();\n  if (!applyDefault) {\n    return;\n  }\n\n  for (const prop of context.properties.list()) {\n    context.properties.find(prop.name).update((p) => {\n      const iface = p.schema?.interface as AXPWidgetNode | undefined;\n      if (!iface) {\n        return p;\n      }\n      const nextIface = withDefaultMultiLanguageOnWidgetNodeTree(iface, true);\n      if (nextIface === iface) {\n        return p;\n      }\n      return {\n        ...p,\n        schema: {\n          ...p.schema,\n          interface: (nextIface ?? iface) as Partial<AXEntityPropertyWidget>,\n        },\n      };\n    });\n  }\n};\n\n//#endregion\n\n//#region ----   Provider ----\n\nexport const defaultMultiLanguageMiddlewareProvider: AXPEntityModifierProvider = {\n  entityName: '*',\n  modifier: defaultMultiLanguageMiddleware,\n};\n\n//#endregion\n","\nimport { AXPCardField, AXPEntity, AXPEntityProperty, AXPEntityTableColumn } from '@acorex/platform/layout/entity-contracts';\nimport {\n  AXPEntityMasterListCardLayout,\n  AXPEntityModifier,\n  AXPEntityModifierProvider,\n} from '../entity-middleware/entity-modifier.types';\n\n//#region ---- Smart card layout builders ----\n\nconst TITLE_FIELD_CANDIDATES = ['title', 'name'] as const;\nconst DESCRIPTION_FIELD_CANDIDATES = ['description'] as const;\nconst ICON_FIELD_CANDIDATES = ['icon'] as const;\nconst STATUS_FIELD_CANDIDATES = ['status', 'statusId'] as const;\n\nfunction findPropertyName(properties: AXPEntityProperty[], candidates: readonly string[]): string | undefined {\n  const names = new Set(properties.map((p) => p.name));\n  return candidates.find((candidate) => names.has(candidate));\n}\n\nfunction findColumnName(columnNames: string[], candidates: readonly string[]): string | undefined {\n  return candidates.find((candidate) => columnNames.includes(candidate));\n}\n\nfunction findNestedColumnName(columnNames: string[], suffix: string): string | undefined {\n  return columnNames.find((name) => name === suffix || name.endsWith(`.${suffix}`));\n}\n\nfunction resolveTitleField(properties: AXPEntityProperty[], columnNames: string[]): string {\n  return (\n    findPropertyName(properties, TITLE_FIELD_CANDIDATES) ??\n    findColumnName(columnNames, TITLE_FIELD_CANDIDATES) ??\n    findNestedColumnName(columnNames, 'fullName') ??\n    findNestedColumnName(columnNames, 'displayName') ??\n    columnNames[0] ??\n    'name'\n  );\n}\n\nfunction resolveDescriptionField(properties: AXPEntityProperty[], columnNames: string[]): string | undefined {\n  return (\n    findPropertyName(properties, DESCRIPTION_FIELD_CANDIDATES) ??\n    findColumnName(columnNames, DESCRIPTION_FIELD_CANDIDATES) ??\n    findNestedColumnName(columnNames, 'description')\n  );\n}\n\nfunction resolveIconField(properties: AXPEntityProperty[], columnNames: string[]): string | undefined {\n  return findPropertyName(properties, ICON_FIELD_CANDIDATES) ?? findColumnName(columnNames, ICON_FIELD_CANDIDATES);\n}\n\nfunction resolveStatusField(properties: AXPEntityProperty[], columnNames: string[]): string | undefined {\n  return (\n    findPropertyName(properties, STATUS_FIELD_CANDIDATES) ??\n    findColumnName(columnNames, STATUS_FIELD_CANDIDATES) ??\n    findNestedColumnName(columnNames, 'status')\n  );\n}\n\nfunction resolveListColumnNames(\n  entityColumns: AXPEntityTableColumn[] | undefined,\n  tableColumns: AXPEntityTableColumn[] | undefined,\n): string[] {\n  const names = new Set<string>();\n  const ordered: string[] = [];\n\n  const append = (columns: AXPEntityTableColumn[] | undefined): void => {\n    for (const column of columns ?? []) {\n      if (!column.name || names.has(column.name)) {\n        continue;\n      }\n      if (column.options?.visible === false) {\n        continue;\n      }\n      names.add(column.name);\n      ordered.push(column.name);\n    }\n  };\n\n  append(entityColumns);\n  append(tableColumns);\n\n  return ordered;\n}\n\nfunction buildCardFields(\n  columnNames: string[],\n  headerFields: Set<string>,\n  statusField: string | undefined,\n): AXPCardField[] {\n  return columnNames\n    .filter((name) => !headerFields.has(name))\n    .map((name) => {\n      const field: AXPCardField = { name };\n      if (statusField && name === statusField) {\n        field.display = 'badge';\n      }\n      return field;\n    });\n}\n\nfunction buildDefaultCardLayout(\n  entity: AXPEntity,\n  entityColumns: AXPEntityTableColumn[] | undefined,\n): AXPEntityMasterListCardLayout | null {\n  const properties = entity.properties ?? [];\n  const tableColumns = entity.interfaces?.master?.list?.layouts?.table?.columns;\n  const columnNames = resolveListColumnNames(entityColumns, tableColumns);\n\n  if (columnNames.length === 0) {\n    return null;\n  }\n\n  const titleField = resolveTitleField(properties, columnNames);\n  const descriptionField = resolveDescriptionField(properties, columnNames);\n  const iconField = resolveIconField(properties, columnNames);\n  const statusField = resolveStatusField(properties, columnNames);\n\n  const headerFields = new Set([titleField, descriptionField, iconField].filter((field): field is string => !!field));\n\n  const fields = buildCardFields(columnNames, headerFields, statusField);\n  if (fields.length === 0 && !titleField) {\n    return null;\n  }\n\n  return {\n    enabled: true,\n    header: {\n      title: titleField,\n      ...(descriptionField ? { description: descriptionField } : {}),\n      ...(iconField ? { icon: iconField } : {}),\n    },\n    fields,\n  };\n}\n\n//#endregion\n\n//#region ---- Default card layout middleware ----\n\n/**\n * When an entity has no `interfaces.master.list.layouts.card`, creates a sensible default\n * from list columns and property names (title, description, remaining columns as card fields).\n */\nexport const defaultCardLayoutMiddleware: AXPEntityModifier = (context) => {\n  const existingCard = context.interfaces.master.list.card.get();\n  if (existingCard !== undefined) {\n    return;\n  }\n\n  if (!context.interfaces.master.list.get()) {\n    return;\n  }\n\n  const layout = buildDefaultCardLayout(context.entity, context.columns.list());\n  if (!layout) {\n    return;\n  }\n\n  context.interfaces.master.list.card.set(layout);\n};\n\n//#endregion\n\n//#region ---- Provider registration ----\n\nexport const defaultCardLayoutMiddlewareProvider: AXPEntityModifierProvider = {\n  entityName: '*',\n  modifier: defaultCardLayoutMiddleware,\n  order: 600,\n};\n\n//#endregion\n","import { AXPEntityQueryType } from '@acorex/platform/layout/entity-contracts';\nimport { isPlainObject } from 'lodash-es';\nimport { AXPEntityModifierProvider } from '../entity-middleware/entity-modifier.types';\nimport { AXMEntityCrudServiceImpl } from '../entity-storage-service';\n\n/**\n * Factory to create a column width middleware using provided config map.\n * Sets width for columns defined in the map if not already defined on the column.\n */\nexport const AXPCrudModifier: AXPEntityModifierProvider = {\n  entityName: '*',\n  modifier: (ctx) => {\n    const dataService = new AXMEntityCrudServiceImpl<any, any>(ctx.module.get() + '.' + ctx.name.get());\n\n    ctx.commands.update((command) => {\n      if (!command) {\n        command = {};\n      }\n      if (!command?.create) {\n        command.create = {\n          execute: async (data: any) => {\n            const res = await dataService.insertOne(data);\n            console.log('create', res, ctx.module.get() + '.' + ctx.name.get(), data);\n            //await delay(2000);\n            if (isPlainObject(res)) {\n              return res;\n            }\n            return { id: res };\n          },\n        };\n      }\n      if (!command?.delete) {\n        command.delete = {\n          execute: async (id: any) => {\n            return await dataService.deleteOne(id);\n          },\n        };\n      }\n      if (!command?.update) {\n        command.update = {\n          execute: async (data: any) => {\n            const entityKey = ctx.module.get() + '.' + ctx.name.get();\n            const { id, ...patch } = data ?? {};\n            if (id == null || id === '') {\n              throw new Error(`Update requires entity id (${entityKey})`);\n            }\n            const updated = await dataService.updateOne(id, patch);\n            //await delay(2000);\n            return updated;\n          },\n        };\n      }\n      return command;\n    });\n\n    ctx.queries.update((queries) => {\n      if (!queries) {\n        queries = {};\n      }\n      if (!queries?.byKey) {\n        queries.byKey = {\n          execute: async (id: any) => {\n            const data = await dataService.getOne(id);\n            //await delay(1000);\n            return data;\n          },\n          type: AXPEntityQueryType.Single,\n        };\n      }\n      if (!queries?.list) {\n        queries.list = {\n          execute: async (e: any) => {\n            const res = await dataService.query(e);\n            // console.log('query', res, ctx.module.get() + '.' + ctx.name.get(), e);\n            return res;\n          },\n          type: AXPEntityQueryType.List,\n        };\n      }\n      return queries;\n    });\n  },\n};\n\n//#endregion\n","import { AXPSearchDefinitionProvider, AXPSearchDefinitionProviderContext } from '@acorex/platform/common';\n\nexport class AXPEntityCommandSearchDefinitionProvider implements AXPSearchDefinitionProvider {\n  async provide(context: AXPSearchDefinitionProviderContext): Promise<void> {\n    context.addDefinition('command', 'Commands', 'command', 'fa-solid fa-command', 1, {\n      format: {\n        id: '{{id}}',\n      },\n      actions: [\n        {\n          name: 'open-entity',\n          type: 'view',\n          priority: 'primary',\n        },\n      ],\n    });\n  }\n}\n","import {\n  type AXPSearchDefinition,\n  type AXPSearchDefinitionLazyResolver,\n} from '@acorex/platform/common';\nimport { type AXPEntity, buildEntitySearchTitleContext } from '@acorex/platform/layout/entity-contracts';\nimport { AXPSystemActionType } from '@acorex/platform/contracts';\nimport { AXPModuleManifestRegistry } from '@acorex/platform/core';\nimport { inject, Injectable } from '@angular/core';\n\nimport { AXPEntityResolver } from './entity.config';\n\n/** Fallback: converts PascalCase module name to kebab-case (e.g. PersonCore → person-core). */\nfunction moduleNameToI18nScope(moduleName: string): string {\n  return moduleName.replace(/([A-Z])/g, '-$1').toLowerCase().replace(/^-/, '');\n}\n\n//#region ----   Entity search definition builder   ----\n\nexport function buildEntitySearchDefinition(\n  entity: AXPEntity,\n  manifestRegistry: AXPModuleManifestRegistry,\n): AXPSearchDefinition {\n  const manifest = manifestRegistry.get(entity.module);\n  const i18nScope = manifest?.i18n ?? moduleNameToI18nScope(entity.module);\n  const searchTitleTemplate = entity.formats.searchResult?.title;\n  const titleContext = buildEntitySearchTitleContext(entity, searchTitleTemplate);\n\n  return {\n    name: `Module.${entity.module}.${entity.name}`,\n    title: `@${i18nScope}:module.title`,\n    group: `Module.${entity.module}`,\n    icon: entity.icon ?? 'fa-solid fa-objects-column',\n    order: 4,\n    format: {\n      title: searchTitleTemplate,\n      description: entity.formats.searchResult?.description ?? `${entity.module} / ${entity.title}`,\n      id: '{{data.id}}',\n      titleFallbackTemplates: titleContext.fallbackTemplates,\n      titleFallbackFields: titleContext.fallbackFields,\n    },\n    actions: [\n      {\n        name: 'open-entity',\n        type: AXPSystemActionType.View,\n        priority: 'primary',\n      },\n    ],\n  };\n}\n\n//#endregion\n\n//#region ----   Lazy resolver   ----\n\n@Injectable()\nexport class AXPEntitySearchDefinitionLazyResolver implements AXPSearchDefinitionLazyResolver {\n  private readonly entityResolver = inject(AXPEntityResolver);\n  private readonly manifestRegistry = inject(AXPModuleManifestRegistry);\n  private readonly resolved = new Map<string, AXPSearchDefinition>();\n\n  async resolve(definitionName: string): Promise<AXPSearchDefinition | null> {\n    const cached = this.resolved.get(definitionName);\n    if (cached) {\n      return cached;\n    }\n\n    const match = definitionName.match(/^Module\\.([^.]+)\\.(.+)$/);\n    if (!match) {\n      return null;\n    }\n\n    const [, moduleName, entityName] = match;\n    await this.manifestRegistry.initialize();\n\n    const entity = await this.entityResolver.get(moduleName, entityName);\n    if (!entity) {\n      return null;\n    }\n\n    const definition = buildEntitySearchDefinition(entity, this.manifestRegistry);\n    this.resolved.set(definitionName, definition);\n    return definition;\n  }\n}\n\n//#endregion\n","import {\n  AXPSearchDefinitionProvider,\n  AXPSearchDefinitionProviderContext,\n} from '@acorex/platform/common';\nimport { AXPModuleManifestRegistry } from '@acorex/platform/core';\nimport { inject } from '@angular/core';\nimport { AXPEntityDefinitionRegistryService } from './entity-registery.service';\nimport { buildEntitySearchDefinition } from './entity-search-definition-lazy-resolver.service';\n\nexport class AXPEntitySearchDefinitionProvider implements AXPSearchDefinitionProvider {\n  private readonly entityRegister = inject(AXPEntityDefinitionRegistryService);\n  private readonly manifestRegistry = inject(AXPModuleManifestRegistry);\n\n  async provide(context: AXPSearchDefinitionProviderContext): Promise<void> {\n    await this.manifestRegistry.initialize();\n\n    for (const entity of this.entityRegister.getAll()) {\n      const definition = buildEntitySearchDefinition(entity, this.manifestRegistry);\n      context.addDefinition(\n        definition.name,\n        definition.title,\n        definition.group,\n        definition.icon,\n        definition.order,\n        {\n          actions: definition.actions,\n          format: definition.format,\n        },\n      );\n    }\n  }\n}\n","import { InjectionToken } from '@angular/core';\nimport { AXPEntityStorageService } from '../entity-storage-service';\nimport { AXPEntityStorageMiddleware } from './storage-middleware.types';\n\nexport const AXP_ENTITY_STORAGE_BACKEND = new InjectionToken<AXPEntityStorageService<any, any>>(\n    'AXP_ENTITY_STORAGE_BACKEND',\n);\n\nexport const AXP_ENTITY_STORAGE_MIDDLEWARE = new InjectionToken<AXPEntityStorageMiddleware<any, any, any, any, any>[]>(\n    'AXP_ENTITY_STORAGE_MIDDLEWARE',\n);\n\n\n","import { AXPEntityOp, AXPPagedListResult, AXPQueryRequest } from '@acorex/platform/contracts';\n\nimport { EnvironmentInjector, Injectable, inject, runInInjectionContext } from '@angular/core';\nimport { AXPEntityAggregateOptions, AXPEntityAggregateRequest, AXPEntityAggregateResult, AXPEntityCreateDto, AXPEntityDetailDto, AXPEntityListItemDto, AXPEntityQueryAllOptions, AXPEntityQueryAllResult, AXPEntityUpdateDto } from '@acorex/platform/layout/entity-contracts';\nimport { AXPEntityStorageService } from '../entity-storage-service';\nimport { AXP_ENTITY_STORAGE_BACKEND, AXP_ENTITY_STORAGE_MIDDLEWARE } from './storage-middleware.tokens';\nimport { AXPEntityStorageContext, AXPEntityStorageMiddleware } from './storage-middleware.types';\n\n/** In-flight request deduplication - parallel identical read requests share one execution */\nfunction getDedupKey(\n  op: 'getOne' | 'getAll' | 'query' | 'count' | 'queryAll' | 'getMany' | 'exists' | 'aggregate',\n  entityName: string,\n  init?: Partial<AXPEntityStorageContext> & {\n    ids?: unknown[];\n    queryAllOptions?: AXPEntityQueryAllOptions;\n    aggregateRequest?: AXPEntityAggregateRequest;\n    aggregateOptions?: AXPEntityAggregateOptions;\n  },\n): string {\n  if (op === 'getOne' && init?.id !== undefined) {\n    return `getOne:${entityName}:${String(init.id)}`;\n  }\n  if (op === 'exists' && init?.id !== undefined) {\n    return `exists:${entityName}:${String(init.id)}`;\n  }\n  if (op === 'getAll') {\n    return `getAll:${entityName}`;\n  }\n  if (op === 'query' && init?.request) {\n    const r = init.request;\n    return `query:${entityName}:${r.skip ?? 0}:${r.take ?? 0}:${JSON.stringify(r.filter ?? null)}:${JSON.stringify(r.sort ?? null)}:${JSON.stringify(r.params ?? null)}`;\n  }\n  if (op === 'count' && init?.request) {\n    const r = init.request;\n    return `count:${entityName}:${JSON.stringify(r.filter ?? null)}:${JSON.stringify(r.sort ?? null)}`;\n  }\n  if (op === 'queryAll' && init?.request) {\n    const r = init.request;\n    return `queryAll:${entityName}:${JSON.stringify(r.filter ?? null)}:${JSON.stringify(r.sort ?? null)}:${JSON.stringify(init.queryAllOptions ?? null)}`;\n  }\n  if (op === 'getMany' && init?.ids) {\n    return `getMany:${entityName}:${init.ids.map(String).join(',')}`;\n  }\n  if (op === 'aggregate' && init?.aggregateRequest) {\n    return `aggregate:${entityName}:${JSON.stringify(init.aggregateRequest)}:${JSON.stringify(init.aggregateOptions ?? null)}`;\n  }\n  return '';\n}\n\n@Injectable()\nexport class AXPMiddlewareEntityStorageService<\n  TKey = any,\n  TDetailDto extends AXPEntityDetailDto<TKey> = any,\n  TListItemDto extends AXPEntityListItemDto<TKey> = any,\n  TCreateDto extends AXPEntityCreateDto = any,\n  TUpdateDto extends AXPEntityUpdateDto<TKey> = any,\n> extends AXPEntityStorageService<TKey, TDetailDto, TListItemDto, TCreateDto, TUpdateDto> {\n  private readonly backend = inject(AXP_ENTITY_STORAGE_BACKEND);\n  private readonly allMiddlewares = (inject(AXP_ENTITY_STORAGE_MIDDLEWARE, { optional: true }) || []).slice();\n  private readonly injector = inject(EnvironmentInjector);\n\n  /** In-flight read requests - identical parallel requests share one execution */\n  private readonly inFlight = new Map<string, Promise<unknown>>();\n\n  get dbName(): string {\n    return this.backend.dbName;\n  }\n\n  private filterMiddlewares(ctx: AXPEntityStorageContext): AXPEntityStorageMiddleware[] {\n    return this.allMiddlewares\n      .filter((mw) => {\n        const t = mw.target;\n        if (!t) return true;\n        if (t.ops && !t.ops.includes(ctx.op)) return false;\n        if (t.entity) {\n          if (typeof t.entity === 'string' && t.entity !== ctx.entityName) return false;\n          if (t.entity instanceof RegExp && !t.entity.test(ctx.entityName)) return false;\n        }\n        if (t.predicate && !t.predicate(ctx)) return false;\n        return true;\n      })\n      .sort((a, b) => (a.target?.order ?? 0) - (b.target?.order ?? 0));\n  }\n\n  private compose(mws: AXPEntityStorageMiddleware[], leaf: () => Promise<void>, ctx: AXPEntityStorageContext) {\n    return mws\n      .slice()\n      .reverse()\n      .reduce((next, mw) => {\n        return async () => runInInjectionContext(this.injector, () => mw.execute(ctx, next));\n      }, leaf);\n  }\n\n  private async run(ctx: AXPEntityStorageContext, delegate: () => Promise<any>) {\n    const chain = this.compose(\n      this.filterMiddlewares(ctx),\n      async () => {\n        ctx.result = await delegate();\n      },\n      ctx,\n    );\n    await chain();\n    return ctx.result;\n  }\n\n  private createCtx(\n    op: AXPEntityOp,\n    entityName: string,\n    init?: Partial<AXPEntityStorageContext>,\n  ): AXPEntityStorageContext {\n    return {\n      op,\n      entityName,\n      locals: new Map<string, unknown>(),\n      backend: {\n        getOne: (name: string, id: unknown) => this.backend.getOne(name, id as TKey),\n        insertOne: (name: string, e: unknown) => this.backend.insertOne(name, e as TCreateDto),\n        query: (name: string, request: AXPQueryRequest) => this.backend.query(name, request),\n        updateOne: (name: string, id: unknown, data: unknown) =>\n          this.backend.updateOne(name, id as TKey, data as Omit<Partial<TUpdateDto>, 'id'>),\n        deleteOne: (name: string, id: unknown) => this.backend.deleteOne(name, id as TKey),\n        count: (name: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>) => this.backend.count(name, request),\n        queryAll: (name: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>, options?: AXPEntityQueryAllOptions) =>\n          this.backend.queryAll(name, request, options),\n        getMany: (name: string, ids: unknown[]) => this.backend.getMany(name, ids as TKey[]),\n        exists: (name: string, id: unknown) => this.backend.exists(name, id as TKey),\n        upsertOne: (name: string, entity: unknown, options?: { merge?: boolean }) =>\n          this.backend.upsertOne(name, entity as TCreateDto, options),\n        aggregate: (name: string, request: AXPEntityAggregateRequest, options?: AXPEntityAggregateOptions) =>\n          this.backend.aggregate(name, request, options),\n      },\n      ...init,\n    } as AXPEntityStorageContext;\n  }\n\n  async initial(\n    entityName: string,\n    collection: TCreateDto[],\n  ): Promise<TCreateDto[]> {\n    const ctx = this.createCtx('initial', entityName, { data: collection });\n    return this.run(ctx, () => this.backend.initial(ctx.entityName, ctx.data as TCreateDto[]));\n  }\n\n  async getOne(entityName: string, id: TKey): Promise<TDetailDto> {\n    const key = getDedupKey('getOne', entityName, { id });\n    if (key) {\n      const existing = this.inFlight.get(key);\n      if (existing) {\n        return existing as Promise<TDetailDto>;\n      }\n      const promise = this.runWithDedup(key, () => {\n        const ctx = this.createCtx('getOne', entityName, { id });\n        return this.run(ctx, () => this.backend.getOne(ctx.entityName, id));\n      });\n      this.inFlight.set(key, promise as Promise<unknown>);\n      return promise as Promise<TDetailDto>;\n    }\n    const ctx = this.createCtx('getOne', entityName, { id });\n    return this.run(ctx, () => this.backend.getOne(ctx.entityName, id));\n  }\n\n  async updateOne(entityName: string, id: TKey, keyValues: Omit<Partial<TUpdateDto>, 'id'>): Promise<TDetailDto> {\n    const ctx = this.createCtx('update', entityName, { id, data: keyValues });\n    return this.run(ctx, () => this.backend.updateOne(ctx.entityName, id, ctx.data as Omit<Partial<TUpdateDto>, 'id'>));\n  }\n\n  async deleteOne(entityName: string, id: TKey): Promise<void> {\n    const ctx = this.createCtx('delete', entityName, { id });\n    return this.run(ctx, () => this.backend.deleteOne(ctx.entityName, id));\n  }\n\n  async insertOne(entityName: string, entity: TCreateDto): Promise<TKey> {\n    const ctx = this.createCtx('create', entityName, { data: entity });\n    return this.run(ctx, () => this.backend.insertOne(ctx.entityName, ctx.data as TCreateDto));\n  }\n\n  async getAll(entityName: string): Promise<TListItemDto[]> {\n    const key = getDedupKey('getAll', entityName);\n    if (key) {\n      const existing = this.inFlight.get(key);\n      if (existing) {\n        return existing as Promise<TListItemDto[]>;\n      }\n      const promise = this.runWithDedup(key, () => {\n        const ctx = this.createCtx('getAll', entityName);\n        return this.run(ctx, () => this.backend.getAll(ctx.entityName));\n      });\n      this.inFlight.set(key, promise);\n      return promise as Promise<TListItemDto[]>;\n    }\n    const ctx = this.createCtx('getAll', entityName);\n    return this.run(ctx, () => this.backend.getAll(ctx.entityName));\n  }\n\n  async query(entityName: string, request: AXPQueryRequest): Promise<AXPPagedListResult<TListItemDto>> {\n    const key = getDedupKey('query', entityName, { request });\n    if (key) {\n      const existing = this.inFlight.get(key);\n      if (existing) {\n        return existing as Promise<AXPPagedListResult<TListItemDto>>;\n      }\n      const promise = this.runWithDedup(key, () => {\n        const ctx = this.createCtx('query', entityName, { request });\n        return this.run(ctx, () => this.backend.query(ctx.entityName, request));\n      });\n      this.inFlight.set(key, promise);\n      return promise as Promise<AXPPagedListResult<TListItemDto>>;\n    }\n    const ctx = this.createCtx('query', entityName, { request });\n    return this.run(ctx, () => this.backend.query(ctx.entityName, request));\n  }\n\n  async count(entityName: string, request: Pick<AXPQueryRequest, 'filter' | 'sort'>): Promise<number> {\n    const filterSortRequest: AXPQueryRequest = { ...request, skip: 0, take: 0 };\n    const key = getDedupKey('count', entityName, { request: filterSortRequest });\n    if (key) {\n      const existing = this.inFlight.get(key);\n      if (existing) {\n        return existing as Promise<number>;\n      }\n      const promise = this.runWithDedup(key, () => {\n        const ctx = this.createCtx('count', entityName, { request: filterSortRequest });\n        return this.run(ctx, () => this.backend.count(ctx.entityName, request));\n      });\n      this.inFlight.set(key, promise);\n      return promise as Promise<number>;\n    }\n    const ctx = this.createCtx('count', entityName, { request: filterSortRequest });\n    return this.run(ctx, () => this.backend.count(ctx.entityName, request));\n  }\n\n  async queryAll(\n    entityName: string,\n    request: Pick<AXPQueryRequest, 'filter' | 'sort'>,\n    options?: AXPEntityQueryAllOptions,\n  ): Promise<AXPEntityQueryAllResult<TListItemDto>> {\n    const filterSortRequest: AXPQueryRequest = { ...request, skip: 0, take: 0 };\n    const key = getDedupKey('queryAll', entityName, { request: filterSortRequest, queryAllOptions: options });\n    if (key) {\n      const existing = this.inFlight.get(key);\n      if (existing) {\n        return existing as Promise<AXPEntityQueryAllResult<TListItemDto>>;\n      }\n      const promise = this.runWithDedup(key, () => {\n        const ctx = this.createCtx('queryAll', entityName, { request: filterSortRequest });\n        return this.run(ctx, () => this.backend.queryAll(ctx.entityName, request, options));\n      });\n      this.inFlight.set(key, promise);\n      return promise as Promise<AXPEntityQueryAllResult<TListItemDto>>;\n    }\n    const ctx = this.createCtx('queryAll', entityName, { request: filterSortRequest });\n    return this.run(ctx, () => this.backend.queryAll(ctx.entityName, request, options));\n  }\n\n  async getMany(entityName: string, ids: TKey[]): Promise<(TListItemDto | null)[]> {\n    const key = getDedupKey('getMany', entityName, { ids: ids as unknown[] });\n    if (key) {\n      const existing = this.inFlight.get(key);\n      if (existing) {\n        return existing as Promise<(TListItemDto | null)[]>;\n      }\n      const promise = this.runWithDedup(key, () => {\n        const ctx = this.createCtx('getMany', entityName);\n        return this.run(ctx, () => this.backend.getMany(ctx.entityName, ids));\n      });\n      this.inFlight.set(key, promise);\n      return promise as Promise<(TListItemDto | null)[]>;\n    }\n    const ctx = this.createCtx('getMany', entityName);\n    return this.run(ctx, () => this.backend.getMany(ctx.entityName, ids));\n  }\n\n  async exists(entityName: string, id: TKey): Promise<boolean> {\n    const key = getDedupKey('exists', entityName, { id });\n    if (key) {\n      const existing = this.inFlight.get(key);\n      if (existing) {\n        return existing as Promise<boolean>;\n      }\n      const promise = this.runWithDedup(key, () => {\n        const ctx = this.createCtx('exists', entityName, { id });\n        return this.run(ctx, () => this.backend.exists(ctx.entityName, id));\n      });\n      this.inFlight.set(key, promise);\n      return promise as Promise<boolean>;\n    }\n    const ctx = this.createCtx('exists', entityName, { id });\n    return this.run(ctx, () => this.backend.exists(ctx.entityName, id));\n  }\n\n  async upsertOne(\n    entityName: string,\n    entity: TCreateDto,\n    options?: { merge?: boolean },\n  ): Promise<TKey> {\n    const ctx = this.createCtx('upsertOne', entityName, { data: entity });\n    ctx.locals.set('upsertOptions', options);\n    return this.run(ctx, () => this.backend.upsertOne(ctx.entityName, entity, options));\n  }\n\n  async aggregate(\n    entityName: string,\n    request: AXPEntityAggregateRequest,\n    options?: AXPEntityAggregateOptions,\n  ): Promise<AXPEntityAggregateResult> {\n    const key = getDedupKey('aggregate', entityName, { aggregateRequest: request, aggregateOptions: options });\n    if (key) {\n      const existing = this.inFlight.get(key);\n      if (existing) {\n        return existing as Promise<AXPEntityAggregateResult>;\n      }\n      const promise = this.runWithDedup(key, () => {\n        const ctx = this.createCtx('aggregate', entityName);\n        ctx.locals.set('aggregateRequest', request);\n        ctx.locals.set('aggregateOptions', options);\n        return this.run(ctx, () => this.backend.aggregate(ctx.entityName, request, options));\n      });\n      this.inFlight.set(key, promise);\n      return promise as Promise<AXPEntityAggregateResult>;\n    }\n    const ctx = this.createCtx('aggregate', entityName);\n    return this.run(ctx, () => this.backend.aggregate(ctx.entityName, request, options));\n  }\n\n  private async runWithDedup<T>(key: string, fn: () => Promise<T>): Promise<T> {\n    try {\n      return await fn();\n    } finally {\n      this.inFlight.delete(key);\n    }\n  }\n}\n","import { AXPopupService } from '@acorex/components/popup';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPRefreshEvent, AXPSettingsService, resolveEntityCreateListBehavior } from '@acorex/platform/common';\nimport { AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext, createWorkFlowEvent } from '@acorex/platform/workflow';\nimport { Injectable, inject } from '@angular/core';\nimport { AXPEntityCreateViewModelFactory } from '../entity-master-create.viewmodel';\nimport { AXPEntityDefinitionRegistryService } from '../entity-registery.service';\nimport { AXP_ENTITY_CONFIG_TOKEN } from '../entity.config';\n\nexport const AXPEntityCreateEvent = createWorkFlowEvent<{ entity: string; meta?: any }>('[Entity] Created!');\n\n@Injectable()\nexport class AXPEntityCreatePopupAction extends AXPWorkflowAction {\n  private entityRegistery = inject(AXPEntityDefinitionRegistryService);\n  private popupService = inject(AXPopupService);\n  private platform = inject(AXPlatform);\n  private factory = inject(AXPEntityCreateViewModelFactory);\n  private config = inject(AXP_ENTITY_CONFIG_TOKEN);\n  private translateService = inject(AXTranslationService);\n  private settingsService = inject(AXPSettingsService);\n\n  async execute(context: AXPWorkflowContext): Promise<void> {\n    const [module, entity] = context.getVariable<string>('entity').split('.');\n    const data = context.getVariable<any>('data');\n    const options = context.getVariable<any>('options');\n\n    const process = options?.['process'];\n    const decoration = options?.['decoration'];\n    const layout = options?.['layout'];\n\n    const headerTitle = decoration?.header?.title;\n\n    const size = layout?.size;\n\n    const entityRef = await this.entityRegistery.resolve(module, entity);\n    const com = await this.config.viewers.master.create();\n\n    if (entityRef.parentKey) {\n      context.setVariable('parentKey', entityRef.parentKey);\n    }\n\n    const result = await this.popupService.open(com, {\n      title: headerTitle\n        ? headerTitle\n        : `${await this.translateService.translateAsync('@general:actions.create.title')} ${await this.translateService.translateAsync(\n            entityRef.formats.individual,\n          )}`,\n      size: this.platform.is('Mobile') || this.platform.is('SM') ? 'full' : size ? size : 'md',\n      data: {\n        vm: await this.factory.create(module, entity, data, options),\n        entity,\n      },\n    });\n    context.setOutput('result', false);\n    if (result.data?.save) {\n      context.setOutput('result', true);\n      const prevData = context.getVariable('data');\n      const prevMeta = context.getVariable('meta');\n\n      context.setVariable('data', { ...prevData, ...result.data.item });\n      const createdItem = result.data.item;\n      const highlightRowId = createdItem?.id ?? createdItem?._id;\n      const { shouldRedirect, shouldHighlight } = await resolveEntityCreateListBehavior(this.settingsService, {\n        redirect: process?.redirect,\n      });\n      context.setVariable('shouldRedirect', shouldRedirect);\n      const meta = {\n        ...prevMeta,\n        resetPagination: true,\n        ...(shouldHighlight && highlightRowId != null ? { highlightRowId } : {}),\n        ...(entityRef.parentKey && createdItem[entityRef.parentKey]\n          ? { refreshTargetId: createdItem[entityRef.parentKey] }\n          : {}),\n      };\n      if (Object.keys(meta).length > 0) {\n        context.setVariable('meta', meta);\n      }\n    }\n  }\n}\n@Injectable() //avoid DEPRECATED: DI is instantiating a token \"AXPEntityCreateSubmittedAction\" that inherits its @Injectable decorator but does not provide one itself. This will become an error in a future version of Angular. Please add @Injectable() to the \"AXPEntityCreateSubmittedAction\" class.\nexport class AXPEntityCreateSubmittedAction extends AXPWorkflowAction {\n  async execute(context: AXPWorkflowContext): Promise<void> {\n    this.dispatch(\n      AXPEntityCreateEvent({ entity: context.getVariable<string>('entity'), meta: context.getVariable('meta') }),\n    );\n    this.dispatch(\n      AXPRefreshEvent({ entity: context.getVariable<string>('entity'), meta: context.getVariable('meta') }),\n    );\n  }\n}\n\nexport const AXPCreateEntityWorkflow: AXPWorkflow = {\n  startStepId: 'show-popup',\n  steps: {\n    'show-popup': {\n      action: 'AXPEntityCreatePopupAction',\n      nextSteps: [\n        {\n          conditions: [{ type: 'SINGLE', expression: 'context.getOutput(\"result\") == true' }],\n          nextStepId: 'show-toast',\n        },\n      ],\n    },\n    'show-toast': {\n      action: 'AXPToastAction',\n      input: {\n        color: 'success',\n        title: 'workflow.entity-created',\n        content: 'workflow.entity-created-body',\n      },\n      nextSteps: [\n        {\n          conditions: [],\n          nextStepId: 'dispatch-event',\n        },\n      ],\n    },\n    'dispatch-event': {\n      action: 'AXPEntityCreateSubmittedAction',\n      nextSteps: [\n        {\n          conditions: [{ type: 'SINGLE', expression: 'context.getVariable(\"shouldRedirect\") == true' }],\n          nextStepId: 'show-entity',\n        },\n      ],\n    },\n    'show-entity': {\n      action: 'AXPShowDetailViewAction',\n    },\n  },\n};\n","import { AXPopupService } from '@acorex/components/popup';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { resolveEntityModifyPopupTitle } from '@acorex/platform/common';\nimport { AXPContextEvalFactory, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext } from '@acorex/platform/workflow';\nimport { Injectable, inject } from '@angular/core';\nimport { cloneDeep } from 'lodash-es';\nimport { AXPEntityMasterUpdateViewModelFactory } from '../entity-master-update.viewmodel';\nimport { AXPEntityDefinitionRegistryService } from '../entity-registery.service';\nimport { AXP_ENTITY_CONFIG_TOKEN } from '../entity.config';\n\n@Injectable()\nexport class AXPQuickEntityModifyPopupAction extends AXPWorkflowAction {\n  private popupService = inject(AXPopupService);\n  private platform = inject(AXPlatform);\n  private translateService = inject(AXTranslationService);\n  private formatService = inject(AXFormatService);\n  private expressionEvaluator = inject(AXPExpressionEvaluatorService);\n  private contextEvalFactory = inject(AXPContextEvalFactory);\n  private entityRegistery = inject(AXPEntityDefinitionRegistryService);\n  private config = inject(AXP_ENTITY_CONFIG_TOKEN);\n  private factory = inject(AXPEntityMasterUpdateViewModelFactory);\n\n  async execute(context: AXPWorkflowContext): Promise<void> {\n    const [moduleName, entityName] = context.getVariable<string>('entity').split('.');\n    const data = context.getVariable('data');\n    const entityRef = await this.entityRegistery.resolve(moduleName, entityName);\n    const { parentKey } = entityRef;\n\n    const { id } = data;\n    const properties = entityRef.interfaces?.master?.update?.properties?.map((p) => p.name) || [];\n\n    const vm = await this.factory.create(moduleName, entityName, id, properties);\n\n    const options = context.getVariable<any>('options');\n    const decoration = options?.['decoration'];\n    const headerTitle = decoration?.header?.title;\n\n    const layout = options?.['layout'];\n    const size = layout?.size;\n\n    if (parentKey) {\n      context.setVariable('parentKey', parentKey);\n    }\n\n    const com = await this.config.viewers.master.modify();\n    const popup = await this.popupService.open(com, {\n      title: headerTitle\n        ? headerTitle\n        : await resolveEntityModifyPopupTitle(\n            entityRef,\n            vm.context(),\n            this.translateService,\n            this.formatService,\n            this.expressionEvaluator,\n            this.contextEvalFactory,\n          ),\n      size: this.platform.is('Mobile') || this.platform.is('SM') ? 'full' : size ? size : 'md',\n      data: {\n        vm,\n        properties,\n        entity: entityRef,\n      },\n    });\n    context.setOutput('result', false);\n    if (popup.data?.result == true) {\n      context.setOutput('result', true);\n      context.setVariable('data', cloneDeep(popup.data.context));\n    }\n  }\n}\n\nexport const AXPQuickModifyEntityWorkflow: AXPWorkflow = {\n  startStepId: 'modifyPopup',\n  steps: {\n    modifyPopup: {\n      id: 'modifyPopup',\n      action: 'AXPQuickEntityModifyPopupAction',\n      nextSteps: [\n        {\n          conditions: [{ type: 'SINGLE', expression: 'context.getOutput(\"result\") == true' }],\n          nextStepId: 'successToast',\n        },\n      ],\n    },\n    successToast: {\n      id: 'successToast',\n      action: 'AXPToastAction',\n      input: {\n        color: 'success',\n        title: '@general:workflow.entity-modified-title',\n        content: '@general:workflow.entity-modified-body',\n      },\n      nextSteps: [\n        {\n          conditions: [],\n          nextStepId: 'modifyConfirmed',\n        },\n      ],\n    },\n    modifyConfirmed: {\n      id: 'modifyConfirmed',\n      action: 'AXPEntityModifyConfirmedAction',\n    },\n  },\n};\n\n@Injectable()\nexport class AXPEntityApplyUpdatesAction extends AXPWorkflowAction {\n  private entityRegistery = inject(AXPEntityDefinitionRegistryService);\n\n  async execute(context: AXPWorkflowContext): Promise<void> {\n    try {\n      const [moduleName, entityName] = context.getVariable<string>('entity').split('.');\n      const data = context.getVariable('data');\n      const entityRef = await this.entityRegistery.resolve(moduleName, entityName);\n      const exec = entityRef.commands?.update?.execute as Function;\n      const result = await exec(data);\n      context.setVariable('data', result);\n      context.setOutput('result', true);\n    } catch (error) {\n      context.setOutput('result', false);\n      context.setOutput('error', error);\n    }\n  }\n}\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPWorkflowNavigateAction } from '@acorex/platform/common';\nimport { AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext } from '@acorex/platform/workflow';\nimport { Injectable, inject } from '@angular/core';\n\n@Injectable()\nexport class AXPShowDetailViewAction extends AXPWorkflowAction {\n  private navigation = inject(AXPWorkflowNavigateAction);\n  private sessionService = inject(AXPSessionService);\n\n  async execute(context: AXPWorkflowContext): Promise<void> {\n    const [module, entity] = context.getVariable('entity').split('.');\n    const { id } = context.getVariable('data');\n    const newPayload = {\n      commands: `/${this.sessionService.application?.name}/m/${module}/e/${entity}/${id}/view`,\n    };\n    context.setVariable('payload', newPayload);\n    this.navigation.execute(context);\n  }\n}\n\nexport const AXPShowDetailsViewWorkflow: AXPWorkflow = {\n  startStepId: 'showDetailView',\n  steps: {\n    showDetailView: {\n      action: 'AXPShowDetailViewAction',\n    },\n  },\n};\n","import {\n  axpIsEntityDetailsPath,\n  axpIsEntityListPath,\n  axpParseEntityDetailsRoute,\n  axpParseEntityListRoute,\n  axpSaveEntityListReturnUrl,\n} from '@acorex/platform/common';\nimport { DestroyRef, inject, Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationStart, Router } from '@angular/router';\nimport { filter } from 'rxjs/operators';\n\n//#region ---- Entity List Return URL Capture ----\n\n/**\n * Captures the active entity list URL (including query params) whenever navigation\n * moves from list to details for the same entity. Works for simple and tabular navigation.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPEntityListReturnUrlCaptureService {\n  //#region ---- Services & Dependencies ----\n\n  private readonly router = inject(Router);\n  private readonly destroyRef = inject(DestroyRef);\n\n  //#endregion\n\n  //#region ---- Lifecycle ----\n\n  constructor() {\n    this.router.events\n      .pipe(\n        filter((event): event is NavigationStart => event instanceof NavigationStart),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe((event) => this.captureIfLeavingList(event.url));\n  }\n\n  //#endregion\n\n  //#region ---- Capture ----\n\n  private captureIfLeavingList(targetUrl: string): void {\n    const fromUrl = this.router.url;\n    if (!axpIsEntityListPath(fromUrl) || !axpIsEntityDetailsPath(targetUrl)) {\n      return;\n    }\n\n    const from = axpParseEntityListRoute(fromUrl);\n    const to = axpParseEntityDetailsRoute(targetUrl);\n    if (!from || !to || from.module !== to.module || from.entity !== to.entity) {\n      return;\n    }\n\n    axpSaveEntityListReturnUrl(from.module, from.entity, fromUrl);\n  }\n\n  //#endregion\n}\n\n//#endregion\n","import { inject, Injectable } from '@angular/core';\nimport { AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext } from '@acorex/platform/workflow';\nimport {\n  AXPFileUploaderWidgetService,\n  type AXPFileUploaderEditDialogOptions,\n} from '../widgets/file-uploader-widget';\nimport { cloneDeep } from 'lodash-es';\n\n@Injectable()\nexport class AXPShowFileUploaderPopupAction extends AXPWorkflowAction {\n  //#region ----   Services & Dependencies   ----\n\n  private fileUploaderWidgetService = inject(AXPFileUploaderWidgetService);\n\n  //#endregion\n\n  //#region ----   Workflow Action   ----\n\n  async execute(context: AXPWorkflowContext): Promise<void> {\n    const field = context.getVariable<string>('options.key');\n    const rawReadonly =\n      context.getVariable<boolean | string | undefined>('options.readonly') ??\n      context.getVariable<boolean | string | undefined>('options.readOnly');\n    const isReadonly = rawReadonly === true || rawReadonly === 'true';\n    const multiple = context.getVariable<boolean>('options.multiple');\n    const accept = context.getVariable<string>('options.accept');\n    const maxFileSize = context.getVariable<number>('options.maxFileSize');\n    const fileEditable = context.getVariable<boolean>('options.fileEditable');\n    const showAddItemButton = context.getVariable<boolean>('options.showAddItemButton');\n    const editDialog = context.getVariable<AXPFileUploaderEditDialogOptions | undefined>('options.editDialog');\n    const plugins = context.getVariable<{ name: string; options?: unknown }[] | undefined>('options.plugins');\n\n    const entityOption = context.getVariable<{ name?: string; id?: string; field?: string }>(\n      'options.entity',\n    );\n    const entityRef =\n      entityOption?.name ??\n      context.getVariable<string>('entity') ??\n      context.getVariable<string>('options.entityName');\n    const entityId = entityOption?.id ?? context.getVariable<string>('options.id');\n    const resolvedField = entityOption?.field ?? field;\n\n    if (!entityRef || !entityId || !resolvedField) {\n      context.setOutput('result', false);\n      return;\n    }\n\n    const files = await this.fileUploaderWidgetService.showFileList({\n      entity: { name: entityRef, id: entityId, field: resolvedField },\n      readonly: isReadonly,\n      multiple,\n      accept,\n      fileEditable,\n      maxFileSize,\n      showAddItemButton: showAddItemButton ?? true,\n      plugins: plugins ?? [],\n      editDialog,\n    });\n\n    if (!files) {\n      context.setOutput('result', false);\n      return;\n    }\n\n    context.setOutput('result', true);\n    context.setVariable('data', cloneDeep({ id: entityId, [resolvedField]: files }));\n  }\n\n  //#endregion\n}\n\nexport const AXPShowFileUploaderPopupWorkflow: AXPWorkflow = {\n  startStepId: 'show-popup',\n  steps: {\n    'show-popup': {\n      action: 'AXPShowFileUploaderPopupAction',\n      nextSteps: [\n        {\n          conditions: [{ type: 'SINGLE', expression: 'context.getOutput(\"result\") == true' }],\n          nextStepId: 'successToast',\n        },\n      ],\n    },\n    successToast: {\n      id: 'successToast',\n      action: 'AXPToastAction',\n      input: {\n        color: 'success',\n        title: '@general:workflow.entity-modified-title',\n        content: '@general:workflow.entity-modified-body',\n      },\n      nextSteps: [\n        {\n          conditions: [],\n          nextStepId: 'modifyConfirmed',\n        },\n      ],\n    },\n    modifyConfirmed: {\n      id: 'modifyConfirmed',\n      action: 'AXPEntityModifyConfirmedAction',\n    },\n  },\n};\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPWorkflowNavigateAction } from '@acorex/platform/common';\nimport { AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext } from '@acorex/platform/workflow';\nimport { Injectable, inject } from '@angular/core';\n\n/** Optional list filters passed into `show-list-view` (e.g. from `Entity:List` with `conditions`). */\nexport interface AXPShowListViewCondition {\n  name?: string;\n  field?: string;\n  operator?: { type: string };\n  value?: unknown;\n}\n\n@Injectable()\nexport class AXPShowListViewAction extends AXPWorkflowAction {\n  private navigation = inject(AXPWorkflowNavigateAction);\n  private sessionService = inject(AXPSessionService);\n\n  async execute(context: AXPWorkflowContext): Promise<void> {\n    const entity = context.getVariable<string>('entity');\n    const [moduleName, entityName] = entity.split('.');\n\n    const newPayload: {\n      commands: string;\n      extras?: { queryParams: Record<string, string> };\n    } = {\n      commands: `/${this.sessionService.application?.name}/m/${moduleName}/e/${entityName}/list`,\n    };\n\n    const conditions = context.getVariable<AXPShowListViewCondition[] | undefined>('conditions');\n    if (Array.isArray(conditions) && conditions.length > 0) {\n      const filterQueries = conditions\n        .map((c) => {\n          const field = c.name ?? c.field;\n          if (!field || c.value === undefined || c.value === null || c.value === '') {\n            return null;\n          }\n          return {\n            field,\n            operator: c.operator ?? { type: 'equal' as const },\n            value: c.value,\n          };\n        })\n        .filter((entry): entry is NonNullable<typeof entry> => entry !== null);\n\n      if (filterQueries.length > 0) {\n        newPayload.extras = {\n          queryParams: {\n            filters: JSON.stringify(filterQueries),\n          },\n        };\n      }\n    }\n\n    context.setVariable('payload', newPayload);\n    this.navigation.execute(context);\n  }\n}\n\nexport const AXPShowListViewWorkflow: AXPWorkflow = {\n  startStepId: 'showListView',\n  steps: {\n    showListView: {\n      id: 'showListView',\n      action: 'AXPShowListViewAction',\n    },\n  },\n};\n","import { AXPPermissionDefinitionsDataSourceDefinition } from '@acorex/platform/auth';\nimport {\n  AXPMenuItemsDataSourceDefinition,\n  AXP_NOT_FOUND_ROUTE,\n  AXP_PROTECTED_ROUTE_GUARDS,\n  AXPToastAction,\n  AXPWorkflowNavigateAction,\n  AXP_SEARCH_DEFINITION_PROVIDER,\n  AXP_SEARCH_DEFINITION_LAZY_RESOLVER,\n} from '@acorex/platform/common';\nimport {\n  AXPModuleManifestsDataSourceDefinition,\n  AXP_COLUMN_WIDTH_PROVIDER,\n  AXP_DATASOURCE_DEFINITION_PROVIDER,\n  defaultColumnWidthProvider,\n} from '@acorex/platform/core';\nimport { LayoutBuilderModule } from '@acorex/platform/layout/builder';\nimport { AXPWidgetCoreModule, AXP_WIDGET_DEFINITION_PROVIDER } from '@acorex/platform/layout/widget-core';\nimport { AXP_REPEATER_ENTITY_BY_KEY_LOOKUP } from '@acorex/platform/layout/widgets';\nimport { AXPAttachmentsPluginModule } from './features/attachments-plugin/attachments-plugin.module';\nimport { AXPEntityWidgetsProvider } from './widget-definition.provider';\n\nimport { provideCommandSetups, provideQuerySetups } from '@acorex/platform/runtime';\nimport { AXPWorkflowModule } from '@acorex/platform/workflow';\nimport { NgModule, inject } from '@angular/core';\nimport { ROUTES, RouterModule, Routes } from '@angular/router';\nimport { AXPEntitiesListDataSourceDefinition } from './entities-list.datasource';\nimport { AXP_ENTITY_DETAILS_VIEW_ADAPTER_LOADER_PROVIDER } from './entity-details-view.adapter-loader.service';\nimport { AXPEntityListViewModelResolver } from './entity-master-list.viewmodel';\nimport { AXP_ENTITY_MODIFIER } from './entity-middleware';\nimport { AXPEntityPreloadFiltersViewModelResolver } from './entity-preload-filters.viewmodel';\nimport { AXPEntityStorageService } from './entity-storage-service';\nimport { AXPEntityService } from './entity.service';\nimport { AXP_ENTITY_CONFIG_TOKEN } from './entity.config';\nimport { axpDetailsViewCanDeactivateGuard } from '@acorex/platform/layout/views';\nimport { AXPEntityPreloadFilterGuard } from './guards/entity-preload-filter.guard';\nimport { columnWidthMiddlewareProvider, layoutOrderingMiddlewareProvider } from './middlewares';\nimport { columnOrderingMiddlewareProvider } from './middlewares/column-ordering.middleware';\nimport { AXPCrudModifier } from './middlewares/crud.middleware';\nimport { searchResultDescriptionMiddlewareProvider } from './middlewares/search-result-description.middleware';\nimport { defaultCardLayoutMiddlewareProvider } from './middlewares/default-card-layout.middleware';\nimport { defaultMultiLanguageMiddlewareProvider } from './middlewares/default-multi-language.middleware';\nimport { AXPEntityCommandSearchDefinitionProvider } from './search-definition-command.provider';\nimport { AXPEntitySearchDefinitionLazyResolver } from './entity-search-definition-lazy-resolver.service';\nimport { AXPEntitySearchDefinitionProvider } from './search-definition.provider';\nimport { AXPMiddlewareEntityStorageService } from './storage-middleware';\nimport {\n  AXPCreateEntityWorkflow,\n  AXPEntityCreatePopupAction,\n  AXPEntityCreateSubmittedAction,\n} from './workflows/create-entity.workflow';\nimport { AXPDeleteEntityWorkflow, AXPEntityPerformDeleteAction } from './workflows/delete-entity.workflow';\nimport {\n  AXPEntityApplyUpdatesAction,\n  AXPQuickEntityModifyPopupAction,\n  AXPQuickModifyEntityWorkflow,\n} from './workflows/modify-entity.workflow';\nimport {\n  AXPEntityModifyConfirmedAction,\n  AXPEntityModifySectionPopupAction,\n  AXPModifyEntitySectionWorkflow,\n} from './workflows/modify-section.workflow';\nimport { AXPShowDetailViewAction, AXPShowDetailsViewWorkflow } from './workflows/show-details.workflow';\nimport { AXPEntityListReturnUrlCaptureService } from './services/entity-list-return-url-capture.service';\nimport {\n  AXPShowFileUploaderPopupAction,\n  AXPShowFileUploaderPopupWorkflow,\n} from './workflows/show-file-uploader-popup.workflow';\nimport { AXPShowListViewAction, AXPShowListViewWorkflow } from './workflows/show-list.workflow';\n\nfunction routesFacory() {\n  const config = inject(AXP_ENTITY_CONFIG_TOKEN);\n  let routes: Routes = [];\n  routes = [\n    {\n      path: ':app/m',\n      loadComponent: () => {\n        return config.viewers.root();\n      },\n      canActivate: [...AXP_PROTECTED_ROUTE_GUARDS],\n      data: { rootLayout: true },\n      children: [\n        {\n          path: ':module',\n          children: [\n            {\n              path: 'e/:entity/filters',\n              loadComponent: () =>\n                import('./components/entity-preload-filters-container.component').then(\n                  (m) => m.AXPEntityPreloadFiltersContainerComponent,\n                ),\n              resolve: {\n                vm: AXPEntityPreloadFiltersViewModelResolver,\n              },\n              data: { reuse: false },\n            },\n            {\n              path: 'e/:entity/list',\n              loadComponent: () => {\n                return config.viewers.master.list();\n              },\n              resolve: {\n                vm: AXPEntityListViewModelResolver,\n              },\n              canActivate: [AXPEntityPreloadFilterGuard],\n              data: { reuse: 'queryParamsChange' },\n            },\n            // {\n            //   path: 'e/:entity/:id/view',\n            //   resolve: { vm: AXPEntityDetailViewModelResolver },\n            //   loadComponent: () => {\n            //     return config.viewers.master.single();\n            //   },\n            //   data: { reuse: false },\n            // },\n            {\n              path: 'e/:entity/:id/view',\n              loadComponent: () => {\n                return config.viewers.master.details();\n              },\n              canDeactivate: [axpDetailsViewCanDeactivateGuard],\n              data: { reuse: 'queryParamsChange' },\n            },\n            {\n              path: 'e/:entity/:id',\n              redirectTo: 'e/:entity/:id/view',\n              pathMatch: 'full',\n            },\n            {\n              path: 'e/:entity',\n              redirectTo: ':entity/list',\n              pathMatch: 'full',\n            },\n            {\n              path: '**',\n              redirectTo: AXP_NOT_FOUND_ROUTE,\n            },\n          ],\n        },\n        {\n          path: '**',\n          redirectTo: AXP_NOT_FOUND_ROUTE,\n        },\n      ],\n    },\n  ];\n  return routes;\n}\n\n@NgModule({\n  imports: [\n    RouterModule,\n    AXPAttachmentsPluginModule,\n    AXPWorkflowModule.forChild({\n      actions: {\n        AXPEntityCreatePopupAction,\n        AXPEntityPerformDeleteAction,\n        AXPWorkflowNavigateAction,\n        'entity-perform-delete': AXPEntityPerformDeleteAction,\n        AXPEntityModifySectionPopupAction,\n        AXPQuickEntityModifyPopupAction,\n        AXPEntityModifyConfirmedAction,\n        AXPToastAction,\n        AXPShowDetailViewAction,\n        AXPEntityCreateSubmittedAction,\n        AXPShowListViewAction,\n        'entity-apply-updates': AXPEntityApplyUpdatesAction,\n        AXPShowFileUploaderPopupAction,\n      },\n      workflows: {\n        'create-entity': AXPCreateEntityWorkflow,\n        'delete-entity': AXPDeleteEntityWorkflow,\n        'modify-entity-section': AXPModifyEntitySectionWorkflow,\n        'quick-modify-entity': AXPQuickModifyEntityWorkflow,\n        'open-entity': AXPShowDetailsViewWorkflow,\n        'show-list-view': AXPShowListViewWorkflow,\n        'show-file-uploader-popup': AXPShowFileUploaderPopupWorkflow,\n      },\n      functions: {},\n    }),\n    AXPWidgetCoreModule,\n    LayoutBuilderModule,\n  ],\n  exports: [],\n  declarations: [],\n  providers: [\n    AXP_ENTITY_DETAILS_VIEW_ADAPTER_LOADER_PROVIDER,\n    {\n      provide: AXP_REPEATER_ENTITY_BY_KEY_LOOKUP,\n      useFactory: () => {\n        const entityService = inject(AXPEntityService);\n        return {\n          byKey: (entityKey: string, id: unknown) =>\n            entityService.withEntity(entityKey).data().byKey(id as never),\n        };\n      },\n    },\n    { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXPEntityWidgetsProvider, multi: true },\n    {\n      provide: ROUTES,\n      multi: true,\n      useFactory: routesFacory,\n    },\n    {\n      provide: AXP_SEARCH_DEFINITION_PROVIDER,\n      useClass: AXPEntitySearchDefinitionProvider,\n      multi: true,\n    },\n    {\n      provide: AXP_SEARCH_DEFINITION_PROVIDER,\n      useClass: AXPEntityCommandSearchDefinitionProvider,\n      multi: true,\n    },\n    {\n      provide: AXP_SEARCH_DEFINITION_LAZY_RESOLVER,\n      useClass: AXPEntitySearchDefinitionLazyResolver,\n    },\n    // Bind the middleware wrapper as the public storage service\n    { provide: AXPEntityStorageService, useClass: AXPMiddlewareEntityStorageService },\n    {\n      provide: AXP_ENTITY_MODIFIER,\n      useValue: columnWidthMiddlewareProvider,\n      multi: true,\n    },\n    {\n      provide: AXP_ENTITY_MODIFIER,\n      useValue: columnOrderingMiddlewareProvider,\n      multi: true,\n    },\n    {\n      provide: AXP_ENTITY_MODIFIER,\n      useValue: defaultCardLayoutMiddlewareProvider,\n      multi: true,\n    },\n    {\n      provide: AXP_ENTITY_MODIFIER,\n      useValue: AXPCrudModifier,\n      multi: true,\n    },\n    // Register default column width provider\n    {\n      provide: AXP_COLUMN_WIDTH_PROVIDER,\n      useValue: defaultColumnWidthProvider,\n      multi: true,\n    },\n    // Entities list data source (all entity names from registry)\n    {\n      provide: AXP_DATASOURCE_DEFINITION_PROVIDER,\n      useClass: AXPEntitiesListDataSourceDefinition,\n      multi: true,\n    },\n    {\n      provide: AXP_DATASOURCE_DEFINITION_PROVIDER,\n      useClass: AXPMenuItemsDataSourceDefinition,\n      multi: true,\n    },\n    {\n      provide: AXP_DATASOURCE_DEFINITION_PROVIDER,\n      useClass: AXPModuleManifestsDataSourceDefinition,\n      multi: true,\n    },\n    {\n      provide: AXP_DATASOURCE_DEFINITION_PROVIDER,\n      useClass: AXPPermissionDefinitionsDataSourceDefinition,\n      multi: true,\n    },\n    {\n      provide: AXP_ENTITY_MODIFIER,\n      useValue: layoutOrderingMiddlewareProvider,\n      multi: true,\n    },\n    {\n      provide: AXP_ENTITY_MODIFIER,\n      useValue: searchResultDescriptionMiddlewareProvider,\n      multi: true,\n    },\n    {\n      provide: AXP_ENTITY_MODIFIER,\n      useValue: defaultMultiLanguageMiddlewareProvider,\n      multi: true,\n    },\n    provideCommandSetups([\n      {\n        key: 'Entity:OpenDetails',\n        command: () => import('./commands/open-entity-details.command').then((c) => c.AXPOpenEntityDetailsCommand),\n      },\n      {\n        key: 'Entity:Create',\n        command: () => import('./commands/create-entity.command').then((c) => c.AXPCreateEntityCommand),\n      },\n      {\n        key: 'Entity:Update',\n        command: () => import('./commands/update-entity.command').then((c) => c.AXPUpdateEntityCommand),\n      },\n      {\n        key: 'Entity:View',\n        command: () => import('./commands/view-entity-details.command').then((c) => c.AXPViewEntityDetailsCommand),\n      },\n      {\n        key: 'FileUploader:Edit',\n        command: () =>\n          import('./widgets/file-uploader-widget').then((c) => c.AXPEditFileUploaderCommand),\n      },\n      {\n        key: 'FileUploader:SaveFiles',\n        command: () =>\n          import('./widgets/file-uploader-widget').then((c) => c.AXPFileUploaderSaveFilesCommand),\n      },\n    ]),\n    provideQuerySetups([\n      {\n        key: 'Entity:GetDetails',\n        loader: () => import('./queries/get-entity-details.query').then((c) => c.AXPGetEntityDetailsQuery),\n      },\n      {\n        key: 'FileUploader:LoadFiles',\n        loader: () =>\n          import('./widgets/file-uploader-widget').then((c) => c.AXPFileUploaderLoadFilesQuery),\n      },\n    ]),\n  ],\n})\nexport class AXPEntityModule {\n  constructor() {\n    inject(AXPEntityListReturnUrlCaptureService);\n  }\n\n  // constructor(appInitService: AXPAppStartUpService, injector: Injector) {\n  //   const service = injector.get(AXPEntityDefinitionRegistryService);\n  //   appInitService.registerTask({\n  //     name: 'layout-theme',\n  //     statusText: '@general:app-startup.preloading-entities',\n  //     priority: 4, // Run after module providers (priority 3) are loaded\n  //     run: async () => {\n  //       // Wait a bit to ensure module providers are fully registered\n  //       await new Promise(resolve => setTimeout(resolve, 100));\n  //       // load in background\n  //       await service.preload();\n  //     },\n  //   });\n  // }\n}\n","import {\n  EnvironmentProviders,\n  inject,\n  makeEnvironmentProviders,\n} from '@angular/core';\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\n\nimport { AXP_ENTITY_CRUD_SETUP } from '@acorex/platform/domain';\nimport { AXPCommandRegistry, AXPQueryRegistry } from '@acorex/platform/runtime';\nimport { AXPEntityService } from './entity.service';\n\n/**\n * Registers entity CRUD commands and queries for the given entity keys.\n * Use in app/module providers; consumes AXPEntityService from this package.\n */\nexport function provideEntity(entityKeys: string[]): EnvironmentProviders {\n  return makeEnvironmentProviders([\n    {\n      provide: AXP_ENTITY_CRUD_SETUP,\n      multi: true,\n      useFactory: () => {\n        const commandRegistry = inject(AXPCommandRegistry);\n        const queryRegistry = inject(AXPQueryRegistry);\n        const entityService = inject(AXPEntityService);\n\n        for (const entityKey of entityKeys) {\n          const dataAccessor = entityService.withEntity(entityKey).data<any, any>();\n\n          commandRegistry.register(`${entityKey}:Create`, async () => ({\n            execute: async (input): Promise<AXPExecuteCommandResult<any>> => {\n              try {\n                const id = await dataAccessor.create(input);\n                const entity = await dataAccessor.byKey(id);\n                if (!entity) {\n                  throw new Error('Entity not found after creation');\n                }\n                return { success: true, data: entity };\n              } catch (error) {\n                return {\n                  success: false,\n                  message: {\n                    text: error instanceof Error ? error.message : 'Failed to create entity',\n                  },\n                };\n              }\n            },\n          }));\n\n          commandRegistry.register(`${entityKey}:Update`, async () => ({\n            execute: async ({ id, ...rest }): Promise<AXPExecuteCommandResult<any>> => {\n              try {\n                const updated = await dataAccessor.update(id, rest);\n                return { success: true, data: updated };\n              } catch (error) {\n                return {\n                  success: false,\n                  message: {\n                    text: error instanceof Error ? error.message : 'Failed to update entity',\n                  },\n                };\n              }\n            },\n          }));\n\n          commandRegistry.register(`${entityKey}:Delete`, async () => ({\n            execute: async (id): Promise<AXPExecuteCommandResult<void>> => {\n              try {\n                await dataAccessor.delete(id);\n                return { success: true };\n              } catch (error) {\n                return {\n                  success: false,\n                  message: {\n                    text: error instanceof Error ? error.message : 'Failed to delete entity',\n                  },\n                };\n              }\n            },\n          }));\n\n          queryRegistry.register(`${entityKey}:GetById`, async () => ({\n            fetch: (id) => dataAccessor.byKey(id),\n          }));\n\n          queryRegistry.register(`${entityKey}:GetList`, async () => ({\n            fetch: (request) => dataAccessor.query(request),\n          }));\n\n          queryRegistry.register(`${entityKey}:GetRoots`, async () => ({\n            fetch: async () => {\n              return await dataAccessor.query({\n                skip: 0,\n                take: 1000,\n                filter: {\n                  field: 'parentId',\n                  operator: { type: 'isEmpty' },\n                  value: true,\n                },\n              });\n            },\n          }));\n\n          queryRegistry.register(`${entityKey}:GetChildren`, async () => ({\n            fetch: async (request: { parentId: any; parentKey?: string }) => {\n              const parentKey = request.parentKey ?? 'parentId';\n              return await dataAccessor.query({\n                skip: 0,\n                take: 1000,\n                filter: {\n                  field: parentKey,\n                  operator: { type: 'equal' },\n                  value: request.parentId,\n                },\n              });\n            },\n          }));\n\n          queryRegistry.register(`${entityKey}:GetByCategory`, async () => ({\n            fetch: async (request: { categoryId: any; categoryKey?: string }) => {\n              const categoryKey = request.categoryKey ?? 'categoryIds';\n              return await dataAccessor.query({\n                skip: 0,\n                take: 1000,\n                filter: {\n                  field: categoryKey,\n                  operator: { type: 'contains' },\n                  value: request.categoryId,\n                },\n              });\n            },\n          }));\n        }\n        return true;\n      },\n    },\n  ]);\n}\n","\nimport { AXPQuery } from '@acorex/platform/runtime-contracts';\nimport { AXPEntity } from '@acorex/platform/layout/entity-contracts';\n\nimport { inject, Injectable } from '@angular/core';\nimport { AXPEntityDefinitionRegistryService } from '../entity-registery.service';\nimport { AXPEntityService } from '../entity.service';\n\n//#region ----   Types   ----\n\nexport interface AXPGetEntityDetailsQueryInput {\n    entity: string; // Format: \"ModuleName.EntityName\"\n    id: string;\n}\n\nexport interface AXPGetEntityDetailsQueryResult {\n    success: boolean;\n    entityDefinition?: AXPEntity;\n    entityData?: any;\n    error?: string;\n}\n\n//#endregion\n\n//#region ----   Get Entity Details Query   ----\n\n/**\n * Generic query to get entity details including entity definition and entity data\n * Can be used by any entity to retrieve its definition and data by ID\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPGetEntityDetailsQuery implements AXPQuery<AXPGetEntityDetailsQueryInput, AXPGetEntityDetailsQueryResult> {\n\n    //#region ----   Services & Dependencies   ----\n\n    private readonly entityDefinitionRegistry = inject(AXPEntityDefinitionRegistryService);\n\n    private readonly entityService = inject(AXPEntityService);\n\n    //#region ----   Query Execution   ----\n\n    /**\n     * Execute the query to fetch entity definition and data\n     * @param input - Query input containing entity and ID information\n     */\n    async fetch(input: AXPGetEntityDetailsQueryInput): Promise<AXPGetEntityDetailsQueryResult> {\n        const { entity, id } = input;\n\n        try {\n            if (!entity) {\n                throw new Error('Entity name is required for fetching entity details');\n            }\n\n            if (!id) {\n                throw new Error('Entity ID is required for fetching entity details');\n            }\n\n            const [module, entityName] = entity.split('.');\n\n            if (!module || !entityName) {\n                throw new Error('Entity must be in format \"ModuleName.EntityName\"');\n            }\n\n            // Get entity definition\n            const entityDefinition = await this.entityDefinitionRegistry.resolve(module, entityName);\n\n            // Get entity data using the entity's CRUD service\n            const entityData = await this.getEntityData(entity, id);\n\n            return {\n                success: true,\n                entityDefinition,\n                entityData\n            };\n\n        } catch (error) {\n            return {\n                success: false,\n                error: error instanceof Error ? error.message : 'Unknown error occurred'\n            };\n        }\n    }\n\n    //#endregion\n\n    //#region ----   Private Methods   ----\n\n    /**\n     * Get entity data using the entity's CRUD service\n     * @param entity - Full entity path (ModuleName.EntityName)\n     * @param id - Entity ID\n     * @returns Promise resolving to entity data\n     */\n    private async getEntityData(entity: string, id: string): Promise<any> {\n        const dataService = this.entityService.withEntity(entity).data<any, any>();\n\n        try {\n            // Fetch the entity data\n            return await dataService.byKey(id);\n        } catch (error) {\n            throw new Error(`Failed to fetch entity data: ${error instanceof Error ? error.message : 'Unknown error'}`);\n        }\n    }\n\n    //#endregion\n}\n\n//#endregion\n","export {\n  entityMasterCreateAction,\n  entityMasterEditAction,\n  entityMasterBulkDeleteAction,\n  entityMasterViewAction,\n  entityMasterDeleteAction,\n  entityMasterCrudActions,\n  entityMasterRecordActions,\n  entityDetailsCreateActions,\n  entityDetailsCreateActionsDeferredParent,\n  mergeForeignKeyFieldIntoCreateActions,\n  collectNestedCreateHiddenProperties,\n  entityDetailsSimpleCondition,\n  entityDetailsReferenceCondition,\n  entityDetailsEditAction,\n  entityDetailsNewEditAction,\n  entityOverrideDetailsViewAction,\n  entityDetailsCrudActions,\n  entityDetailsReferenceCreateActions,\n} from '@acorex/platform/layout/entity-contracts';\n\n//TODO: Move to core as a shared utility\n//#region ----   Entity Diff Utilities   ----\n\nimport { isEqual, transform } from 'lodash';\n\nexport type AXPEntityChangeSet = {\n  [key: string]: { oldValue: any; newValue: any; added?: any[]; removed?: any[] };\n};\n\n/**\n * Computes a diff between two plain objects with array-aware semantics.\n * - For arrays of objects with an id field, computes added/removed by id.\n * - For arrays of primitives or objects without id, uses deep equality.\n * - For scalars/objects, reports oldValue/newValue when changed.\n */\nexport function detectEntityChanges(oldObj: any, newObj: any): AXPEntityChangeSet {\n  return transform(\n    newObj,\n    (result: AXPEntityChangeSet, value: any, key: string) => {\n      if (!isEqual(value, (oldObj as any)[key])) {\n        const oldValue = (oldObj as any)[key];\n\n        if (Array.isArray(value) || Array.isArray(oldValue)) {\n          const oldArray = Array.isArray(oldValue) ? oldValue : [];\n          const newArray = Array.isArray(value) ? value : [];\n\n          const hasId =\n            newArray.length > 0 && typeof newArray[0] === 'object' && newArray[0] !== null && 'id' in newArray[0];\n\n          if (hasId) {\n            const added = newArray.filter((item) => !oldArray.some((oldItem: any) => oldItem.id === item.id));\n            const removed = oldArray.filter((item: any) => !newArray.some((newItem: any) => newItem.id === item.id));\n            result[key] = { oldValue, newValue: value, added, removed };\n          } else {\n            const added = newArray.filter((item) => !oldArray.some((oldItem: any) => isEqual(item, oldItem)));\n            const removed = oldArray.filter((item: any) => !newArray.some((newItem: any) => isEqual(item, newItem)));\n            result[key] = { oldValue, newValue: value, added, removed };\n          }\n        } else {\n          result[key] = { oldValue, newValue: value };\n        }\n      }\n    },\n    {} as AXPEntityChangeSet,\n  );\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["LOOKUP_WIDGET_TYPE","hasPersistedRootId","i4","i5","i2","i3","i6","i7","i1","mapEntityColumnToWidgetColumnHelper","i8","i9","i1.AXPRelatedEntityConverterFactory","i2.AXPMainEntityContentBuilder","i3.AXPLayoutAdapterBuilder","moduleNameToI18nScope","filter","isEqual"],"mappings":"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"}