{"version":3,"file":"acorex-platform-layout-entity-contracts.mjs","sources":["../../../../libs/platform/layout/entity-contracts/src/lib/types/entity-action.types.ts","../../../../libs/platform/layout/entity-contracts/src/lib/types/entity-property.types.ts","../../../../libs/platform/layout/entity-contracts/src/lib/types/entity-definition.types.ts","../../../../libs/platform/layout/entity-contracts/src/lib/types/entity-model.types.ts","../../../../libs/platform/layout/entity-contracts/src/lib/types/entity-storage.types.ts","../../../../libs/platform/layout/entity-contracts/src/lib/types/entity-formats.types.ts","../../../../libs/platform/layout/entity-contracts/src/lib/types/entity-property-list.types.ts","../../../../libs/platform/layout/entity-contracts/src/lib/types/entity-display-field.types.ts","../../../../libs/platform/layout/entity-contracts/src/lib/types/entity-card-field.types.ts","../../../../libs/platform/layout/entity-contracts/src/lib/types/entity-query-view.types.ts","../../../../libs/platform/layout/entity-contracts/src/lib/types/entity-master-list.types.ts","../../../../libs/platform/layout/entity-contracts/src/lib/types/entity-detail-list.types.ts","../../../../libs/platform/layout/entity-contracts/src/lib/types/entity-layout-view.types.ts","../../../../libs/platform/layout/entity-contracts/src/lib/types/entity-related-layout.types.ts","../../../../libs/platform/layout/entity-contracts/src/lib/types/entity-list-filter.types.ts","../../../../libs/platform/layout/entity-contracts/src/lib/types/lookup-widget.types.ts","../../../../libs/platform/layout/entity-contracts/src/lib/types/index.ts","../../../../libs/platform/layout/entity-contracts/src/lib/helpers/entity-action.helpers.ts","../../../../libs/platform/layout/entity-contracts/src/lib/helpers/entity-action-permission.util.ts","../../../../libs/platform/layout/entity-contracts/src/lib/helpers/index.ts","../../../../libs/platform/layout/entity-contracts/src/lib/utils/entity-display-template.util.ts","../../../../libs/platform/layout/entity-contracts/src/lib/utils/entity-property-display-path.util.ts","../../../../libs/platform/layout/entity-contracts/src/lib/utils/entity-search-title-context.util.ts","../../../../libs/platform/layout/entity-contracts/src/lib/utils/entity-quick-search-paths.util.ts","../../../../libs/platform/layout/entity-contracts/src/lib/utils/entity-merge-detail-list-properties.util.ts","../../../../libs/platform/layout/entity-contracts/src/lib/utils/entity-list-filter-definitions.util.ts","../../../../libs/platform/layout/entity-contracts/src/lib/utils/entity-list-sortable-fields.util.ts","../../../../libs/platform/layout/entity-contracts/src/lib/utils/entity-workflow-record.util.ts","../../../../libs/platform/layout/entity-contracts/src/lib/utils/lookup-create-options.util.ts","../../../../libs/platform/layout/entity-contracts/src/lib/utils/page-list-widget-name.util.ts","../../../../libs/platform/layout/entity-contracts/src/lib/utils/index.ts","../../../../libs/platform/layout/entity-contracts/src/lib/constants/entity-display.constants.ts","../../../../libs/platform/layout/entity-contracts/src/lib/constants/entity-datasource.keys.ts","../../../../libs/platform/layout/entity-contracts/src/lib/constants/entity-events.keys.ts","../../../../libs/platform/layout/entity-contracts/src/lib/constants/index.ts","../../../../libs/platform/layout/entity-contracts/src/lib/index.ts","../../../../libs/platform/layout/entity-contracts/src/acorex-platform-layout-entity-contracts.ts"],"sourcesContent":["import { type AXPMetaData, type AXPopupSizeType, AXPSystemActionType, type AXStyleColorType } from '@acorex/platform/contracts';\n//#region ---- Entity actions ----\n\nexport enum AXPEntityCommandScope {\n  TypeLevel = 'typeLevel',\n  Selected = 'selected',\n  Individual = 'individual',\n  Section = 'section',\n}\n\nexport enum AXPEntityQueryType {\n  Single = 'single',\n  List = 'list',\n}\n\nexport interface AXPEntityCommand {\n  execute: string | Function; // As runnable expression\n  permissions?: string[];\n}\n\nexport interface AXPEntityQuery {\n  execute: string | Function; // As runnable expression\n  type: AXPEntityQueryType;\n}\n\nexport type AXPCommandActionType = AXPSystemActionType;\n\nexport interface AXPCommandActionLook {\n  color: AXStyleColorType;\n  icon: string;\n}\n\nexport type AXPCommandActionPriority = 'primary' | 'secondary';\n\n//TODO: remove extra props\nexport type AXPCommandActionCallback =\n  | string\n  | {\n      name: string;\n      options?: {\n        decoration?: {\n          header?: {\n            title?: string;\n          };\n        };\n        process?: {\n          data?: any;\n          [name: string]: any;\n        };\n        layout?: {\n          size?: AXPopupSizeType;\n        };\n        [name: string]: any;\n      };\n      metadata?: AXPMetaData;\n    };\n\nexport interface AXPCommandActionDisplay extends Partial<AXPCommandActionLook> {\n  name?: string;\n  command: AXPCommandActionCallback;\n  title: string;\n  type: AXPSystemActionType | string;\n  priority: 'primary' | 'secondary' | 'none';\n  separated?: boolean;\n  permissions?: string[];\n  hidden?: boolean | string;\n  disabled?: boolean | string;\n  default?: boolean;\n  order?: number;\n  /**\n   * Keyboard chords for this action (e.g. `'ctrl+shift+a'`).\n   * Pass `[]` to disable shortcuts. When omitted, platform defaults may apply for known commands.\n   */\n  shortcuts?: string[];\n}\n\nexport interface AXPEntityAction extends AXPCommandActionDisplay {\n  scope: AXPEntityCommandScope;\n  /** Child actions for dropdown submenu */\n  items?: AXPEntityAction[];\n}\n\n//#endregion\n","//#region ---- Entity properties ----\n\nimport type { AXPExpression, AXPGridLayoutOptions, AXPValidationRules, AXPValueTransformerFunctions } from '@acorex/platform/contracts';\n\nimport type { AXPEntityPropertyListOptions } from './entity-property-list.types';\n\nexport interface AXEntityPropertyWidget {\n  type: string;\n  path?: string;\n  id?: string;\n  children?: AXEntityPropertyWidget[];\n  mode: 'view' | 'edit';\n  options?: Record<string, any>;\n  triggers?: { event: string; action: string; disabled?: boolean }[];\n  valueTransforms?: AXPValueTransformerFunctions;\n}\n\nexport interface AXPEntityPropertyLayoutConfig extends AXPGridLayoutOptions {\n  label?: {\n    visible?: boolean;\n  };\n  order?: number;\n  visible?: boolean | AXPExpression;\n}\n\nexport interface AXPEntityPropertyGroup {\n  id: string;\n  title: string;\n  description?: string;\n  permissions?: string[];\n  icon?: string;\n}\n\nexport interface AXPEntityPropertyView {\n  name: string;\n  dataPath?: string;\n  permissions?: string[];\n  layout?: AXPEntityPropertyLayoutConfig;\n}\n\nexport interface AXPEntityPropertyUpdateView extends AXPEntityPropertyView {}\n\nexport interface AXPEntityPropertyCreateView extends AXPEntityPropertyView {\n  defaultValue?: any;\n}\n\nexport interface AXPEntitySectionView {\n  id: string;\n  order?: number;\n  collapsed?: boolean;\n  layout?: AXPEntityPropertyLayoutConfig;\n}\n\nexport interface AXPEntityProperty {\n  name: string;\n  title: string;\n  description?: string;\n  groupId?: string;\n  schema: {\n    dataType: string;\n    nullable?: boolean;\n    readonly?: boolean | string;\n    visible?: boolean | string;\n    defaultValue?: any | string | ((context: any | null) => any);\n    unique?: {\n      enabled: boolean;\n    };\n    interface?: Partial<AXEntityPropertyWidget>;\n  };\n  options?: AXPEntityPropertyListOptions;\n  validations?: AXPValidationRules;\n}\n\n//#endregion\n","//#region ---- Entity definition ----\n\nimport type { AXPExpression, AXPMultiLanguageString, AXPOptionsData, AXPValidationRules } from '@acorex/platform/contracts';\n\nimport type { AXPEntityDetailListView } from './entity-detail-list.types';\nimport type { AXPEntityFormats } from './entity-formats.types';\nimport type { AXPEntityTableColumn } from './entity-display-field.types';\nimport type {\n  AXPEntityMasterCreateLayoutView,\n  AXPEntityMasterSingleLayoutView,\n  AXPEntityMasterUpdateLayoutView,\n} from './entity-layout-view.types';\nimport type { AXPEntityMasterListView } from './entity-master-list.types';\nimport type { AXPRelatedEntity } from './entity-related-layout.types';\nimport type { AXPQueryFilter } from './entity-query-view.types';\nimport type { AXPEntityCommand, AXPEntityQuery } from './entity-action.types';\nimport type { AXPEntityProperty, AXPEntityPropertyGroup } from './entity-property.types';\n\nexport enum AXPRelationshipKind {\n  Association,\n  Composition,\n  Aggregation,\n}\n\nexport enum AXPRelationshipCardinality {\n  OneToOne,\n  OneToMany,\n  ManyToMany,\n}\n\nexport interface AXPRelationship {\n  id: string;\n  from: string;\n  to: string;\n  kind: AXPRelationshipKind;\n  cardinality: AXPRelationshipCardinality;\n}\n\nexport interface AXPEntity {\n  plugins?: { name: string; options?: AXPOptionsData }[];\n  /**\n   * High-level rules: when expression evaluates true, apply actions to the given targets\n   * (property/section/action). Reduces repetition of the same condition across many properties.\n   * Evaluation context: form data, user, entity; precedence vs property-level visible/readonly\n   * must be defined where rules are applied.\n   */\n  rules?: Array<{\n    name: string;\n    expression: AXPExpression;\n    actions: Array<{\n      target: {\n        type: 'property' | 'section' | 'action';\n        name: string;\n      };\n      values: AXPOptionsData;\n    }>;\n  }>;\n  module: string;\n  name: string;\n  icon?: string;\n  parentKey?: string;\n  category?: AXPEntityCategoryPlugin;\n  title: string;\n  formats: AXPEntityFormats;\n  relatedEntities?: AXPRelatedEntity[];\n  pages?: AXPEntityPage[];\n  groups?: AXPEntityPropertyGroup[];\n  properties: AXPEntityProperty[];\n  columns?: AXPEntityTableColumn[];\n  commands?: {\n    create?: AXPEntityCommand | undefined;\n    update?: AXPEntityCommand | undefined;\n    delete?: AXPEntityCommand | undefined;\n    [name: string]: AXPEntityCommand | undefined;\n  };\n  queries?: {\n    byKey?: AXPEntityQuery;\n    list?: AXPEntityQuery;\n    lookup?: AXPEntityQuery;\n    history?: AXPEntityQuery;\n    comments?: AXPEntityQuery;\n    [name: string]: AXPEntityQuery | undefined;\n  };\n  validations?: AXPValidationRules;\n  interfaces?: {\n    master?: {\n      single?: AXPEntityMasterSingleLayoutView;\n      list?: AXPEntityMasterListView;\n      create?: AXPEntityMasterCreateLayoutView;\n      update?: AXPEntityMasterUpdateLayoutView;\n    };\n    detail?: {\n      list?: AXPEntityDetailListView;\n    };\n  };\n}\n\nfunction kebabCase(value: string): string {\n  return value\n    .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n    .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')\n    .replace(/[\\s_]+/g, '-')\n    .replace(/-+/g, '-')\n    .toLowerCase();\n}\n\nexport function getEntityInfo(entity: AXPEntity) {\n  return {\n    source: `${entity.module}.${entity.name}`,\n    module: {\n      route: kebabCase(entity.module),\n    },\n    entity: {\n      route: kebabCase(entity.name),\n    },\n  };\n}\n\nexport interface AXPEntityPage {\n  componentKey: string;\n  field?: string;\n  title?: AXPMultiLanguageString;\n  icon?: string;\n  description?: AXPMultiLanguageString;\n  layout?: {\n    order?: number;\n    position?: 'before' | 'after' | 'middle';\n  };\n  hidden?: boolean | string;\n  permissions?: string[];\n  appearOn?: {\n    create?: boolean;\n    update?: boolean;\n  };\n  options?: Record<string, any>;\n}\n\nexport interface AXPEntityCategoryPlugin {\n  entity: string;\n  title?: string;\n  textField?: string;\n  valueField?: string;\n  conditions?: AXPQueryFilter[];\n  applyConditions?: AXPQueryFilter[];\n}\n\nexport interface AXPEntityVersionHistory {\n  enabled?: boolean;\n  showInList?: boolean;\n  showInDetail?: boolean;\n}\n\nexport interface AXPAggregate {\n  id: string;\n  name: string;\n  title: AXPMultiLanguageString;\n  entities: AXPEntity[];\n}\n\nexport interface AXPModule {\n  name: string;\n  title: AXPMultiLanguageString;\n  aggregates: AXPAggregate[];\n  relationships?: AXPRelationship[];\n}\n\nexport interface AXPApplication {\n  name: string;\n  title: AXPMultiLanguageString;\n  modules: AXPModule[];\n}\n\nexport enum AXPEntityType {\n  Entity,\n  AggregateRoot,\n  ValueObject,\n}\n\nexport interface AXPEntityV2 {\n  version: 2;\n  module: string;\n  aggregate: string;\n  name: string;\n  type: AXPEntityType;\n  icon?: string;\n  title: string;\n  description?: string;\n  plugins?: { name: string; options?: AXPOptionsData }[];\n  pages?: AXPEntityPage[];\n  groups?: AXPEntityPropertyGroup[];\n  properties: AXPEntityProperty[];\n  formats: AXPEntityFormats;\n  columns?: AXPEntityTableColumn[];\n  validations?: AXPValidationRules;\n  interfaces?: {\n    master?: {\n      single?: AXPEntityMasterSingleLayoutView;\n      list?: AXPEntityMasterListView;\n      create?: AXPEntityMasterCreateLayoutView;\n      update?: AXPEntityMasterUpdateLayoutView;\n    };\n    detail?: {\n      list?: AXPEntityDetailListView;\n    };\n  };\n}\n\n//#endregion\n","//#region ---- Entity model & DTO types ----\n\nimport type { AXPUserReference } from '@acorex/platform/contracts';\n\nexport interface AXPAuditEvent {\n  at?: Date;\n  by?: AXPUserReference;\n  reason?: string;\n  source?: string;\n}\n\nexport interface AXPRecordAuditInfo {\n  created?: AXPAuditEvent;\n  updated?: AXPAuditEvent;\n  deleted?: AXPAuditEvent;\n}\n\nexport interface AXPRecordStateInfo {\n  isHidden?: boolean;\n  isSystem?: boolean;\n  isImmutable?: boolean;\n  /** @deprecated Prefer explicit domain modeling over this flag. */\n  isDistributed?: boolean;\n}\n\nexport interface AXPRecordOwnershipInfo {\n  tenantId?: string;\n  applicationId?: string;\n  userId?: string;\n}\n\nexport interface AXPRecordWorkflowInfo {\n  instanceId?: string | null;\n  definitionId?: string | null;\n  correlationId?: string | null;\n  pinnedVersion?: number | null;\n}\n\nexport interface AXPEntityModel<Id> {\n  id: Id;\n  auditInfo?: AXPRecordAuditInfo;\n  stateInfo?: AXPRecordStateInfo;\n  ownershipInfo?: AXPRecordOwnershipInfo;\n  workflowInfo?: AXPRecordWorkflowInfo;\n}\n\nexport interface AXPEntityCreateDto {}\n\nexport interface AXPEntityUpdateDto<Id> {\n  id: Id;\n}\n\nexport interface AXPEntityOutputDto<Id> {\n  id: Id;\n}\n\nexport interface AXPEntityDetailDto<Id> extends AXPEntityOutputDto<Id> {}\n\nexport interface AXPEntityListItemDto<Id> extends AXPEntityOutputDto<Id> {}\n\nexport interface AXPMockDto<Id> extends AXPEntityModel<Id> {}\n\n//#endregion\n","import type { AXPQueryRequest } from '@acorex/platform/contracts';\n\n//#region ---- Aggregate ----\n\nexport type AXPEntityAggregateReducerType = 'count' | 'sum' | 'min' | 'max' | 'avg';\n\nexport interface AXPEntityAggregateMeasure {\n  reducer: AXPEntityAggregateReducerType;\n  /** Required for sum, min, max, and avg. Ignored for count (rows per group). */\n  field?: string;\n  /** Result column name; defaults are derived from the reducer and field. */\n  alias?: string;\n}\n\n/**\n * Aggregate stored rows after the same filter/sort pipeline as {@link AXPQueryRequest}.\n * Group keys use dotted field paths (same as lodash-style getters).\n */\nexport interface AXPEntityAggregateRequest extends Pick<AXPQueryRequest, 'filter' | 'sort'> {\n  groupBy: string[];\n  measures: AXPEntityAggregateMeasure[];\n}\n\nexport interface AXPEntityAggregateResult {\n  rows: Record<string, unknown>[];\n}\n\n//#endregion\n\n//#region ---- Query all ----\n\nexport interface AXPEntityQueryAllOptions {\n  /**\n   * Page size for backends that read page-by-page (HTTP API).\n   * In-memory backends load the filtered set once and ignore this.\n   */\n  pageSize?: number;\n  /** Maximum rows to return or scan (safety cap). */\n  maxRows?: number;\n}\n\nexport interface AXPEntityQueryAllResult<T> {\n  items: T[];\n  /** Row count matching filter/sort before applying maxRows. */\n  total: number;\n  /** True when maxRows prevented returning every matching row. */\n  truncated: boolean;\n}\n\n//#endregion\n\n//#region ---- Aggregate scan cap ----\n\nexport interface AXPEntityAggregateOptions {\n  /** Maximum rows to load for aggregation when the backend pages remotely (default 50_000). */\n  maxRows?: number;\n  /** Page size for remote paging during aggregate (default 500). */\n  pageSize?: number;\n}\n\n//#endregion\n","//#region ---- Entity formats ----\n\nexport interface AXPEntitySearchResultFormat {\n  title: string;\n  description?: string;\n}\n\nexport interface AXPEntityFormats {\n  individual: string;\n  plural: string;\n  lookup?: string;\n  displayName?: string;\n  searchResult?: AXPEntitySearchResultFormat;\n}\n\n//#endregion\n","//#region ---- Entity property list options ----\n\nexport interface AXPEntityPropertyFilterOptions {\n  advance?: {\n    enabled?: boolean;\n    widgetType?: string;\n  };\n  inline?: {\n    enabled?: boolean;\n  };\n  preload?: {\n    enabled?: boolean;\n    required?: boolean;\n  };\n}\n\nexport interface AXPEntityPropertySortOptions {\n  enabled?: boolean;\n}\n\nexport interface AXPEntityPropertyListOptions {\n  filter?: AXPEntityPropertyFilterOptions;\n  sort?: AXPEntityPropertySortOptions;\n}\n\n//#endregion\n","//#region ---- Entity display fields ----\n\n/** Logical alignment for table column header/cell (respects RTL). */\nexport type AXPColumnContentAlign = 'start' | 'center' | 'end';\n\n/**\n * Column alignment: shorthand applies to both header and cell;\n * object form sets each side independently (omitted keys default to start).\n */\nexport type AXPColumnAlign =\n  | AXPColumnContentAlign\n  | {\n      header?: AXPColumnContentAlign;\n      cell?: AXPColumnContentAlign;\n    };\n\n/** Shared field definition for list layouts (table columns, card fields, etc.). */\nexport interface AXPEntityDisplayField {\n  name: string;\n  title?: string;\n  showAs?: {\n    type: string;\n    options?: Record<string, any>;\n  };\n  options?: {\n    /**\n     * When string, evaluate as an expression:\n     * - master list: list scope (`list.view()`, `list.views()`, `context.eval(...)`)\n     * - related list: parent detail context\n     */\n    visible?: boolean | string;\n    /** Optional dataPath override for field binding. */\n    dataPath?: string;\n    [name: string]: any;\n  };\n}\n\nexport interface AXPEntityTableColumn extends AXPEntityDisplayField {\n  options?: AXPEntityDisplayField['options'] & {\n    /** Initial column width (overrides widget column width when set). */\n    width?: string;\n    /** Header/cell alignment (shorthand or per-side). */\n    align?: AXPColumnAlign;\n  };\n}\n\n//#endregion\n","//#region ---- Entity card fields ----\n\nimport type { AXPExpression, AXStyleColorType } from '@acorex/platform/contracts';\nimport type { AXPEntityPropertyLayoutConfig } from './entity-property.types';\n\nimport type { AXPEntityDisplayField } from './entity-display-field.types';\n\n/** Card layout field presentation in master list card view. */\nexport type AXPCardFieldDisplay = 'simple' | 'badge';\n\n/** Badge color: semantic token or per-row expression (`{{ context.eval(...) }}`). */\nexport type AXPCardBadgeColor = AXStyleColorType | AXPExpression;\n\nexport interface AXPCardBadgeDisplayOptions {\n  /** Semantic color or expression evaluated against row context. */\n  color?: AXPCardBadgeColor;\n}\n\nexport interface AXPCardBadgeDisplay {\n  type: 'badge';\n  options?: AXPCardBadgeDisplayOptions;\n}\n\n/** Shorthand (`badge` / `simple`) or structured badge config with optional per-row color. */\nexport type AXPCardFieldDisplayConfig = AXPCardFieldDisplay | AXPCardBadgeDisplay;\n\n/** Card layout field in master list view. */\nexport type AXPCardField = AXPEntityDisplayField & {\n  layout?: AXPEntityPropertyLayoutConfig;\n  /**\n   * Field presentation. Default: `simple` (card body).\n   * Use `badge` or `{ type: 'badge', options: { color } }` for header chips beside title.\n   */\n  display?: AXPCardFieldDisplayConfig;\n  /**\n   * Badge color when presentation is badge-shaped.\n   * Prefer `display: { type: 'badge', options: { color } }` for new definitions.\n   * Omit for status fields — color is resolved from the status definition per row.\n   */\n  badgeColor?: AXPCardBadgeColor;\n};\n\n/** Whether the card field is shown as a header badge (not in the card body). */\nexport function isCardFieldBadgeDisplay(\n  display: AXPCardFieldDisplayConfig | undefined,\n): display is 'badge' | AXPCardBadgeDisplay {\n  if (display === 'badge') {\n    return true;\n  }\n  return typeof display === 'object' && display !== null && display.type === 'badge';\n}\n\n/** Resolves static badge color config from {@link AXPCardField.display} and legacy {@link AXPCardField.badgeColor}. */\nexport function resolveCardFieldBadgeColor(\n  field: Pick<AXPCardField, 'display' | 'badgeColor'>,\n): AXPCardBadgeColor | undefined {\n  if (typeof field.display === 'object' && field.display.type === 'badge') {\n    return field.display.options?.color ?? field.badgeColor;\n  }\n  if (field.display === 'badge') {\n    return field.badgeColor;\n  }\n  return undefined;\n}\n\n//#endregion\n","//#region ---- Entity query views ----\n\nimport type { AXDataSourceOperator, AXPExpression } from '@acorex/platform/contracts';\n\nexport interface AXPQueryFilter {\n  name: string; // entity property name\n  operator: AXDataSourceOperator;\n  value: any;\n}\n\nexport interface AXPQuerySort {\n  name: string; // entity property name\n  dir: 'asc' | 'desc';\n}\n\nexport interface AXPQueryView {\n  name: string;\n  fixed: boolean;\n  title: string;\n  /**\n   * Whitelist of entity column names for this view.\n   * Empty array = show all entity columns (still subject to each column's `options.visible`).\n   */\n  columns: string[];\n  conditions: AXPQueryFilter[];\n  sorts: AXPQuerySort[];\n  indexCol?: boolean;\n  pageSize?: number;\n  visible?: boolean | AXPExpression;\n}\n\nexport function createQueryView(\n  name: string,\n  title: string,\n  fixed: boolean,\n  params: { columns?: string[]; conditions?: any[]; sorts?: AXPQuerySort[] } = {\n    columns: [],\n    conditions: [],\n    sorts: [],\n  },\n): AXPQueryView {\n  params = Object.assign({ columns: [], sorts: [], conditions: [] }, params);\n  return {\n    name,\n    title,\n    fixed,\n    columns: params.columns ?? [],\n    conditions: params.conditions ?? [],\n    sorts: params.sorts ?? [],\n  };\n}\n\nexport function createAllQueryView(\n  params: { columns?: string[]; conditions?: AXPQueryFilter[]; sorts?: AXPQuerySort[] } | undefined = {\n    columns: [],\n    sorts: [],\n    conditions: [],\n  },\n): AXPQueryView {\n  params = Object.assign({ columns: [], sorts: [], conditions: [] }, params);\n  return createQueryView('all', '@general:terms.interface.selection.all-items', true, {\n    columns: params.columns ?? [],\n    conditions: params.conditions ?? [],\n    sorts: params.sorts ?? [],\n  });\n}\n\n//#endregion\n","//#region ---- Entity master list views ----\n\nimport type { AXPEntityAction } from './entity-action.types';\n\nimport { AXPExpression } from '@acorex/platform/contracts';\nimport type { AXPCardField } from './entity-card-field.types';\nimport type { AXPEntityTableColumn } from './entity-display-field.types';\nimport type { AXPQueryView } from './entity-query-view.types';\n\nexport interface AXPEntityMasterListView {\n  title?: string;\n  description?: string;\n  actions?: AXPEntityAction[];\n  views: AXPQueryView[];\n  layouts?: {\n    table?: {\n      enabled?: boolean;\n      columns: AXPEntityTableColumn[];\n      cssClass?: {\n        row?: AXPExpression;\n        cell?: AXPExpression;\n      };\n    };\n    card?: {\n      enabled?: boolean;\n      header: {\n        /** Property path, expression (`{{ ... }}`), or literal — evaluated per row. */\n        title?: string;\n        description?: string;\n        icon?: string;\n      };\n      fields: AXPCardField[];\n    };\n  };\n}\n\nexport type AXPEntityMasterListLayoutType = 'table' | 'card';\n\n/** Master list presentation: table or card with compact (collapsed) / expanded bodies. */\nexport type AXPEntityMasterListDisplayMode = 'table' | 'card-compact' | 'card-expanded';\n\nexport interface AXPEntityMasterListLayoutOption {\n  id: AXPEntityMasterListLayoutType;\n  title: string;\n  icon?: string;\n}\n\n/** Resolves master list layouts that are currently enabled. */\nexport function resolveEnabledMasterListLayouts(\n  layouts?: AXPEntityMasterListView['layouts'],\n): AXPEntityMasterListLayoutType[] {\n  if (!layouts) {\n    return ['table'];\n  }\n\n  const enabled: AXPEntityMasterListLayoutType[] = [];\n\n  if (layouts.table?.enabled !== false) {\n    enabled.push('table');\n  }\n\n  if (layouts.card && layouts.card.enabled !== false) {\n    enabled.push('card');\n  }\n\n  return enabled.length > 0 ? enabled : ['table'];\n}\n\n/** First enabled layout; used as the default when no user preference is stored. */\nexport function resolveDefaultMasterListLayout(\n  layouts?: AXPEntityMasterListView['layouts'],\n): AXPEntityMasterListLayoutType {\n  return resolveEnabledMasterListLayouts(layouts)[0];\n}\n\n//#endregion\n","//#region ---- Entity detail list views ----\n\nimport type { AXPEntityAction } from './entity-action.types';\n\nimport type { AXPEntityTableColumn } from './entity-display-field.types';\n\nexport interface AXPEntityDetailListView {\n  title?: string;\n  description?: string;\n  columns: AXPEntityTableColumn[];\n  actions?: AXPEntityAction[];\n}\n\n//#endregion\n","//#region ---- Entity layout views ----\n\nimport type { AXPEntityAction } from './entity-action.types';\nimport type {\n  AXPEntityPropertyLayoutConfig,\n  AXPEntityPropertyView,\n  AXPEntitySectionView,\n} from './entity-property.types';\nimport type { AXPopupSizeType } from '@acorex/platform/contracts';\n\nexport interface AXPEntityMasterLayoutView {\n  title?: string;\n  sections: AXPEntitySectionView[];\n  properties?: AXPEntityPropertyView[];\n}\n\n/** Quick create config for lookup widgets (+ button) - uses subset of create form */\nexport interface AXPEntityQuickCreate {\n  enabled?: boolean;\n  properties?: string[];\n  layout?: {\n    size?: AXPopupSizeType;\n  };\n  excludeProperties?: string[];\n}\n\nexport interface AXPEntityMasterCreateLayoutView extends AXPEntityMasterLayoutView {\n  steps?: {\n    id: string;\n    title: string;\n    description?: string;\n  };\n  /** Quick create config for lookup widgets - uses subset of create form */\n  quickCreate?: AXPEntityQuickCreate;\n}\n\nexport interface AXPEntityMasterUpdateLayoutView extends AXPEntityMasterLayoutView {}\n\nexport interface AXPEntityMasterSingleLayoutView extends AXPEntityMasterLayoutView {\n  title: string;\n  description?: string;\n  actions?: AXPEntityAction[];\n}\n\n//#endregion\n","//#region ---- Related entity layout ----\n\nimport type { AXPExpression } from '@acorex/platform/contracts';\nimport type { AXPEntityAction } from './entity-action.types';\n\nimport type { AXPEntityTableColumn } from './entity-display-field.types';\nimport type { AXPEntityListFilterDefinition } from './entity-list-filter.types';\nimport type { AXPQueryFilter } from './entity-query-view.types';\n\nexport interface AXPRelatedEntityLayout {\n  type: 'tab-detail' | 'tab-list' | 'page-detail' | 'page-list' | 'merge-detail';\n  order?: number;\n  position?: 'before' | 'after' | 'middle';\n}\n\nexport interface AXPRelatedEntityPersistence {\n  strategy?: 'embedded' | 'referenced';\n  idField?: string;\n  dataPath?: string;\n  map?: Record<string, string>;\n  hydrate?: 'eager' | 'lazy';\n  cascade?: { delete?: 'none' | 'orphans' | 'all' };\n  foreignKeyField?: string;\n}\n\nexport interface AXPRelatedEntity {\n  entity: string;\n  title?: string;\n  icon?: string;\n  columns?: string[] | AXPEntityTableColumn[];\n  properties?: string[];\n  excludeProperties?: string[];\n  layout?: AXPRelatedEntityLayout;\n  conditions?: AXPQueryFilter[];\n  customFilterDefinitions?: Partial<AXPEntityListFilterDefinition>[];\n  hidden?: boolean | AXPExpression;\n  actions?: AXPEntityAction[];\n  /**\n   * Controls inclusion on the host entity master **create** / **update** form.\n   * Defaults depend on layout:\n   * - **merge-detail**: omitted flags behave as **true** (opt-out with `false`).\n   * - **tab-list** / **page-list**: omitted flags behave as **false** (opt-in with `true`).\n   */\n  appearOn?: {\n    /** Include on host create form (see defaults above per layout type). */\n    create?: boolean;\n    /** Include on host update form (see defaults above per layout type). */\n    update?: boolean;\n  };\n  /**\n   * Host master-list filter policy for merge-detail related data.\n   * When omitted, filterable related properties referenced by host columns (or `properties`) are included.\n   */\n  filter?: {\n    /** Include related filterable properties on the host list (default: true). */\n    enabled?: boolean;\n  };\n  /**\n   * Relationship-level persistence strategy for merge-detail data.\n   * Defaults:\n   * - strategy: 'embedded'\n   * - idField: last segment of dataPath + 'Id' (or 'relatedId' when dataPath is missing)\n   * - map: undefined (pass-through)\n   * - hydrate: 'eager' (applies to getOne only in mock)\n   * - cascade.delete: 'none'\n   */\n  persistence?: AXPRelatedEntityPersistence;\n}\n\n//#endregion\n","//#region ---- Entity list filters ----\n\nimport type { AXPFilterDefinition } from '@acorex/platform/contracts';\n\nexport interface AXPEntityListFilterDefinition extends AXPFilterDefinition {\n  /**\n   * Lodash-get path for inline `contains` queries on lookup/select properties.\n   * Keeps `field` as the property name for advance filters and filter widget binding.\n   */\n  inlineQueryField?: string;\n  /**\n   * Flat filter UI context key when `field` contains dots (merge-detail paths).\n   * Widget binding uses this key; storage queries still use `field`.\n   */\n  contextField?: string;\n}\n\n/** Encodes a dotted storage path as a flat filter context key (e.g. `person.lastName` → `person__lastName`). */\nexport function encodeEntityListFilterContextField(queryField: string): string {\n  return queryField.replace(/\\./g, '__');\n}\n\n/**\n * Resolves the flat context key used by query-filters / widget binding for a filter definition.\n */\nexport function resolveEntityListFilterContextField(\n  filter: Pick<AXPEntityListFilterDefinition, 'field' | 'contextField'>,\n): string {\n  const explicit = filter.contextField?.trim();\n  if (explicit) {\n    return explicit;\n  }\n\n  const field = filter.field?.trim();\n  if (!field) {\n    return '';\n  }\n\n  return field.includes('.') ? encodeEntityListFilterContextField(field) : field;\n}\n\n/**\n * Maps an entity list filter definition to the storage query field.\n * Inline `contains` filters on lookup/select use `inlineQueryField` (display text path).\n */\nexport function resolveEntityListFilterQueryField(\n  filter: Pick<AXPFilterDefinition, 'field' | 'operator'> & Pick<AXPEntityListFilterDefinition, 'inlineQueryField'>,\n  operator?: { type?: string },\n): string | undefined {\n  const operatorType = operator?.type ?? filter.operator?.type;\n  if (operatorType === 'contains' && filter.inlineQueryField) {\n    return filter.inlineQueryField;\n  }\n  return filter.field;\n}\n\n//#endregion\n","import type { AXPContextData, AXPExpression } from '@acorex/platform/contracts';\n\n//#region ---- Lookup widget types ----\n\nexport interface AXPLookupWidgetCreateOptions {\n  enable?: boolean;\n  context?: AXPContextData;\n}\n\nexport interface ResolvedLookupCreateOptions {\n  enabled: boolean;\n  mode: 'none' | 'full' | 'quick';\n  context?: AXPContextData;\n}\n\nexport type AXPLookupWidgetLookType = 'select' | 'lookup';\n\n/**\n * How the lookup column resolves related items for display in entity lists.\n * - `hydrated`: titles (and optional ids) are already on the row; inline preview + overflow popover use row data only.\n * - `idsWithCount`: ids and optional count live on the row; the cell shows a count summary and loads titles via entity `byKey` when the popover opens.\n * - `countOnly`: only a count is on the row; the popover loads ids/titles via a registered `AXPQuery` when opened.\n */\nexport type AXPLookupColumnResolveStrategy = 'hydrated' | 'idsWithCount' | 'countOnly';\n\n/**\n * Column list only: controls how the lookup column loads and displays related items in grids.\n * Omitted or empty strategy defaults to `hydrated` at runtime.\n */\nexport interface AXPLookupColumnResolveOptions {\n  /** Default `hydrated` when omitted. */\n  strategy?: AXPLookupColumnResolveStrategy;\n  /** Lodash-style path on `rowData` for the displayed count (e.g. `rolesCount`). */\n  countFieldPath?: string;\n  /** Lodash-style path on `rowData` for the related id list (`idsWithCount`). If omitted, the column `rawValue` is used. */\n  idsPath?: string;\n  /** Registered query key for `AXPQueryExecutor.fetch` when using `countOnly`. */\n  queryKey?: string;\n  /**\n   * Maps query input property names to lodash-style paths on `rowData` (e.g. `{ \"userId\": \"id\" }`).\n   * May be a JSON string when set from the layout designer text field.\n   */\n  queryParams?: Record<string, string> | string;\n  /**\n   * Dot path into the named query result for the items array. Defaults to `items` when the result is an object.\n   * If the query returns an array directly, leave unset and handle at runtime.\n   */\n  queryResultItemsPath?: string;\n}\n\nexport interface AXPLookupDisplayOptions {\n  displayFormat?: string;\n  textField?: string;\n  isMultiLanguage?: (value: unknown) => boolean;\n}\n\n/** Column list: entity detail popover when clicking a lookup value. */\nexport interface AXPLookupPopoverOptions {\n  /** When `false`, lookup values are not clickable and the detail popover does not open. Default `true`. */\n  enabled?: boolean;\n}\n\n/** Row actions to show in the lookup data selector popup (subset of entity list actions). */\nexport interface AXPLookupSelectorRowActionsConfig {\n  /** Primary icon buttons (e.g. preview). Match full command name or suffix such as `:Preview`. */\n  primary?: string[];\n  /** Secondary actions in the row dropdown menu. */\n  secondary?: string[];\n}\n\nexport interface AXPLookupWidgetOptions {\n  disabled?: boolean | AXPExpression;\n  readonly?: boolean | AXPExpression;\n  placeholder?: string;\n  expose?: string | string[];\n  look?: AXPLookupWidgetLookType;\n  allowClear?: boolean;\n  /** Inline entity create configuration. */\n  create?: AXPLookupWidgetCreateOptions;\n  /** @deprecated Use create.enable; still supported for create mode (quick/full). */\n  allowCreate?: 'none' | 'full' | 'quick';\n  displayFormat?: string;\n  /** Column list: entity detail popover behavior. */\n  popover?: AXPLookupPopoverOptions;\n  /** Column list: lazy resolve and summary behavior. */\n  columnResolve?: AXPLookupColumnResolveOptions;\n  /** Lookup selector popup: entity row actions to display. */\n  rowActions?: AXPLookupSelectorRowActionsConfig;\n}\n\n//#endregion\n","//#region ---- Types barrel ----\n\nexport * from './entity-action.types';\nexport * from './entity-property.types';\nexport * from './entity-definition.types';\nexport * from './entity-model.types';\nexport * from './entity-storage.types';\nexport * from './entity-formats.types';\nexport * from './entity-property-list.types';\nexport * from './entity-display-field.types';\nexport * from './entity-card-field.types';\nexport * from './entity-query-view.types';\nexport * from './entity-master-list.types';\nexport * from './entity-detail-list.types';\nexport * from './entity-layout-view.types';\nexport * from './entity-related-layout.types';\nexport * from './entity-list-filter.types';\nexport * from './lookup-widget.types';\n\n//#endregion\n","//#region ---- Entity action helpers (pure data, no Angular) ----\n\nimport { AXPSystemActionType } from '@acorex/platform/contracts';\nimport type { AXPQueryFilter, AXPRelatedEntity } from '../types';\nimport type { AXPEntityAction } from '../types/entity-action.types';\nimport { AXPEntityCommandScope } from '../types/entity-action.types';\n\n//#region Master\n\n/** Optional permission keys applied to CRUD actions created by the helpers below. */\nexport interface AXPEntityCrudActionPermissions {\n  create?: string[];\n  delete?: string[];\n  view?: string[];\n  edit?: string[];\n}\n\nexport function entityMasterCreateAction(permissions?: string[]): AXPEntityAction {\n  return {\n    title: '@general:actions.create.title',\n    command: {\n      name: 'Entity:Create',\n    },\n    priority: 'primary',\n    type: AXPSystemActionType.Create,\n    scope: AXPEntityCommandScope.TypeLevel,\n    ...(permissions?.length ? { permissions } : {}),\n  };\n}\n\nexport function entityMasterEditAction(permissions?: string[]): AXPEntityAction {\n  return {\n    title: '@general:actions.edit.title',\n    command: 'Entity:Update',\n    priority: 'secondary',\n    type: AXPSystemActionType.Update,\n    scope: AXPEntityCommandScope.Individual,\n    default: true,\n    ...(permissions?.length ? { permissions } : {}),\n  };\n}\n\nexport function entityMasterBulkDeleteAction(permissions?: string[]): AXPEntityAction {\n  return {\n    title: '@general:actions.delete-items.title',\n    command: 'delete-entity',\n    priority: 'primary',\n    type: AXPSystemActionType.Delete,\n    scope: AXPEntityCommandScope.Selected,\n    order: 100,\n    ...(permissions?.length ? { permissions } : {}),\n  };\n}\n\nexport function entityMasterViewAction(permissions?: string[]): AXPEntityAction {\n  return {\n    title: '@general:actions.view.title',\n    command: 'open-entity',\n    priority: 'secondary',\n    type: AXPSystemActionType.View,\n    scope: AXPEntityCommandScope.Individual,\n    default: true,\n    ...(permissions?.length ? { permissions } : {}),\n  };\n}\n\nexport function entityMasterDeleteAction(permissions?: string[]): AXPEntityAction {\n  return {\n    title: '@general:actions.delete.title',\n    command: 'delete-entity',\n    priority: 'secondary',\n    type: AXPSystemActionType.Delete,\n    scope: AXPEntityCommandScope.Individual,\n    order: 100,\n    shortcuts: ['ctrl+shift+delete'],\n    ...(permissions?.length ? { permissions } : {}),\n  };\n}\n\nexport function entityMasterCrudActions(\n  options?: {\n    create?: boolean;\n    delete?: boolean;\n    view?: boolean;\n    edit?: boolean;\n  },\n  permissions?: AXPEntityCrudActionPermissions,\n): AXPEntityAction[] {\n  const opts = {\n    create: true,\n    delete: true,\n    view: true,\n    edit: false,\n    ...options,\n  };\n  const actions: AXPEntityAction[] = [];\n\n  if (opts.create) {\n    actions.push(entityMasterCreateAction(permissions?.create));\n  }\n  if (opts.delete) {\n    // Bulk + row delete share the same delete permission keys.\n    actions.push(entityMasterBulkDeleteAction(permissions?.delete));\n    actions.push(entityMasterDeleteAction(permissions?.delete));\n  }\n  if (opts.view) {\n    actions.push(entityMasterViewAction(permissions?.view));\n  }\n\n  if (opts.edit) {\n    actions.push(entityMasterEditAction(permissions?.edit));\n  }\n\n  return actions;\n}\n\nexport function entityMasterRecordActions(permissions?: string[]): AXPEntityAction[] {\n  return [entityMasterDeleteAction(permissions)];\n}\n\n//#endregion\n\n//#region Details\n\nexport function entityDetailsCreateActions(parentId: string): AXPEntityAction {\n  return {\n    title: '@general:actions.create.title',\n    command: {\n      name: 'Entity:Create',\n      options: {\n        process: {\n          redirect: false,\n          canCreateNewOne: false,\n          data: {\n            [parentId]: '{{context.eval(\"id\")}}',\n          },\n        },\n      },\n    },\n    priority: 'primary',\n    type: AXPSystemActionType.Create,\n    scope: AXPEntityCommandScope.TypeLevel,\n  };\n}\n\nexport function entityDetailsCreateActionsDeferredParent(): AXPEntityAction {\n  return {\n    title: '@general:actions.create.title',\n    command: {\n      name: 'Entity:Create',\n      options: {\n        process: {\n          redirect: false,\n          canCreateNewOne: false,\n          data: {},\n        },\n      },\n    },\n    priority: 'primary',\n    type: AXPSystemActionType.Create,\n    scope: AXPEntityCommandScope.TypeLevel,\n  };\n}\n\nexport function mergeForeignKeyFieldIntoCreateActions(\n  foreignKeyField: string | undefined,\n  actions: AXPEntityAction[] | undefined,\n): AXPEntityAction[] {\n  if (!foreignKeyField || !actions?.length) {\n    return actions ?? [];\n  }\n  return actions.map((a) => {\n    const cmd = a.command;\n    if (\n      typeof cmd !== 'object' ||\n      !cmd ||\n      cmd.name !== 'Entity:Create' ||\n      a.scope !== AXPEntityCommandScope.TypeLevel\n    ) {\n      return a;\n    }\n    const opts = (cmd.options ?? {}) as Record<string, unknown>;\n    const proc = (opts['process'] ?? {}) as Record<string, unknown>;\n    const data = { ...((proc['data'] as Record<string, unknown>) ?? {}) };\n    if (data[foreignKeyField] === undefined || data[foreignKeyField] === null || data[foreignKeyField] === '') {\n      data[foreignKeyField] = '{{ context.eval(\"id\") }}';\n    }\n    return {\n      ...a,\n      command: {\n        ...cmd,\n        options: { ...opts, process: { ...proc, data } },\n      },\n    } as AXPEntityAction;\n  });\n}\n\nexport function collectNestedCreateHiddenProperties(relatedEntity: AXPRelatedEntity): string[] | undefined {\n  const fk = relatedEntity.persistence?.foreignKeyField;\n  const merged = [...(relatedEntity.excludeProperties ?? [])];\n  if (fk) {\n    merged.push(fk);\n  }\n  const unique = [...new Set(merged)];\n  return unique.length ? unique : undefined;\n}\n\nexport function entityDetailsSimpleCondition(fk: string): AXPQueryFilter {\n  return {\n    name: fk,\n    operator: { type: 'equal' },\n    value: '{{context.eval(\"id\")}}',\n  };\n}\n\nexport function entityDetailsReferenceCondition(type: string): AXPQueryFilter[] {\n  return [\n    {\n      name: 'reference.id',\n      operator: { type: 'equal' },\n      value: '{{context.eval(\"id\")}}',\n    },\n    {\n      name: 'reference.type',\n      operator: { type: 'equal' },\n      value: type,\n    },\n  ];\n}\n\nexport function entityDetailsEditAction(): AXPEntityAction {\n  return {\n    title: '@general:actions.edit.title',\n    command: 'Entity:Update',\n    priority: 'secondary',\n    type: AXPSystemActionType.Update,\n    default: true,\n    scope: AXPEntityCommandScope.Individual,\n  };\n}\n\nexport function entityDetailsNewEditAction(): AXPEntityAction {\n  return {\n    title: 'New Edit',\n    command: {\n      name: 'Entity:Update',\n    },\n    priority: 'secondary',\n    type: AXPSystemActionType.Update,\n    default: true,\n    scope: AXPEntityCommandScope.Individual,\n  };\n}\n\nexport function entityOverrideDetailsViewAction(): AXPEntityAction {\n  return {\n    title: '@general:actions.view.title',\n    command: 'open-entity',\n    priority: 'secondary',\n    hidden: true,\n    type: AXPSystemActionType.View,\n    scope: AXPEntityCommandScope.Individual,\n  };\n}\n\nexport function entityDetailsCrudActions(\n  parentId?: string,\n  options?: {\n    create?: boolean;\n    delete?: boolean;\n    view?: boolean;\n    edit?: boolean;\n  },\n): AXPEntityAction[] {\n  const opts = {\n    create: true,\n    delete: true,\n    view: true,\n    edit: true,\n    ...options,\n  };\n  const actions: AXPEntityAction[] = [];\n  if (opts.create) {\n    if (parentId) {\n      actions.push(entityDetailsCreateActions(parentId));\n    } else {\n      actions.push(entityDetailsCreateActionsDeferredParent());\n    }\n  }\n  if (opts.edit) {\n    actions.push(entityDetailsEditAction());\n  }\n  if (opts.view) {\n    actions.push(entityOverrideDetailsViewAction());\n  }\n  return actions;\n}\n\nexport function entityDetailsReferenceCreateActions(type: string): AXPEntityAction[] {\n  return [\n    {\n      title: '@general:actions.create.title',\n      command: {\n        name: 'Entity:Create',\n        options: {\n          process: {\n            redirect: false,\n            canCreateNewOne: false,\n            data: {\n              reference: {\n                id: '{{context.eval(\"id\")}}',\n                type: type,\n              },\n            },\n          },\n        },\n      },\n      priority: 'primary',\n      type: AXPSystemActionType.Create,\n      scope: AXPEntityCommandScope.TypeLevel,\n    },\n    entityDetailsEditAction(),\n    entityOverrideDetailsViewAction(),\n  ];\n}\n\n//#endregion\n","//#region ---- Entity action permission helpers ----\n\n/**\n * Returns whether an entity action is permitted for the current session.\n * Empty / missing `permissions` keeps the action visible (migration-safe).\n * When keys are present, all must pass (AND), matching {@link AXPSessionService.authorize}.\n */\nexport function isEntityActionPermitted(\n  action: { permissions?: string[] | null },\n  authorize: (...keys: string[]) => boolean,\n): boolean {\n  const keys = action.permissions;\n  if (!keys?.length) {\n    return true;\n  }\n  return authorize(...keys);\n}\n\n//#endregion\n","//#region ---- Helpers barrel ----\n\nexport * from './entity-action.helpers';\nexport * from './entity-action-permission.util';\n\n//#endregion\n","//#region ---- Template normalization ----\n\n/**\n * Normalizes display templates before expression evaluation.\n * Converts simple dot paths (e.g. `{{ position.title }}`) to `context.eval(\"position.title\")`.\n */\nexport function normalizeExpressionTemplate(template: string): string {\n  let normalized = template.replace(\n    /\\{\\{\\s*context\\.eval\\(['\"]([^'\"]+)['\"]\\)\\s*\\}\\}/g,\n    '{{ context.eval(\"$1\") }}',\n  );\n\n  if (!normalized.includes('{{')) {\n    normalized = normalized.replace(/\\{/g, '{{').replace(/\\}/g, '}}');\n  }\n\n  return normalized.replace(\n    /\\{\\{\\s*(?!context\\.)([\\w]+(?:\\.[\\w]+)*)\\s*\\}\\}/g,\n    '{{ context.eval(\"$1\") }}',\n  );\n}\n\n/** @see normalizeExpressionTemplate */\nexport const normalizeEntityDisplayTemplate = normalizeExpressionTemplate;\n\n/** True when formatted text still contains unresolved template markers. */\nexport function isUnresolvedEntityDisplayTemplate(value: string): boolean {\n  return /\\{\\{/.test(value) || /context\\.eval\\s*\\(/.test(value) || value === '[object Object]';\n}\n\n/**\n * Strips literal `undefined` / `null` tokens produced when expression segments are missing.\n */\nexport function sanitizeResolvedEntityDisplayTitle(value: string): string {\n  const trimmed = value.trim();\n  if (!trimmed) {\n    return '';\n  }\n\n  const withoutLiterals = trimmed\n    .replace(/\\bundefined\\b/gi, ' ')\n    .replace(/\\bnull\\b/gi, ' ')\n    .replace(/\\s+/g, ' ')\n    .trim();\n\n  return withoutLiterals\n    .replace(/^[\\s\\-–—·|/,()+]+|[\\s\\-–—·|/,()+]+$/g, '')\n    .trim();\n}\n\n/** True when a resolved title is non-empty and safe to show in search or entity chrome. */\nexport function isMeaningfulEntityDisplayTitle(value: string): boolean {\n  const sanitized = sanitizeResolvedEntityDisplayTitle(value);\n  return sanitized.length > 0 && !isUnresolvedEntityDisplayTemplate(sanitized);\n}\n\nexport function isRowBoundEntityDisplayTemplate(template: string): boolean {\n  const trimmed = template.trim();\n  if (!trimmed || trimmed.startsWith('@')) {\n    return false;\n  }\n  return trimmed.includes('{{') || trimmed.includes('{');\n}\n\n//#endregion\n","import type { AXPEntity } from '../types/entity-definition.types';\n\n//#region ---- Types ----\n\nexport interface AXPEntityPropertyExposeEntry {\n  source: string;\n  target: string;\n}\n\nexport type AXPEntityPropertyLike = {\n  name: string;\n  schema?: {\n    interface?: {\n      options?: Record<string, unknown>;\n    };\n  };\n};\n\n//#endregion\n\n//#region ---- Expose parsing ----\n\n/**\n * Parses lookup/select `expose` entries from a property interface options object.\n */\nexport function parsePropertyExposeEntries(\n  options: Record<string, unknown> | undefined,\n): AXPEntityPropertyExposeEntry[] {\n  const expose = options?.['expose'];\n  if (!Array.isArray(expose)) {\n    return [];\n  }\n\n  return expose.filter(\n    (row): row is AXPEntityPropertyExposeEntry =>\n      row != null &&\n      typeof row === 'object' &&\n      typeof (row as { source?: unknown }).source === 'string' &&\n      typeof (row as { target?: unknown }).target === 'string',\n  );\n}\n\n/**\n * Collects all non-empty `expose[].target` paths from a property.\n */\nexport function collectPropertyExposeTargetPaths(property: AXPEntityPropertyLike): string[] {\n  const opts = property.schema?.interface?.options;\n  if (!opts || typeof opts !== 'object') {\n    return [];\n  }\n\n  const paths = new Set<string>();\n  for (const entry of parsePropertyExposeEntries(opts)) {\n    const target = entry.target.trim();\n    if (target) {\n      paths.add(target);\n    }\n  }\n  return [...paths];\n}\n\n/**\n * Resolves list column `options.dataPath` for a property when explicitly set.\n */\nexport function resolveEntityColumnDataPath(\n  entity: AXPEntity | null | undefined,\n  propertyName: string,\n): string | undefined {\n  const column = entity?.columns?.find((c) => c.name === propertyName);\n  const rawDataPath = column?.options?.['dataPath'];\n  if (typeof rawDataPath !== 'string') {\n    return undefined;\n  }\n\n  const dataPath = rawDataPath.trim();\n  if (!dataPath || dataPath === propertyName) {\n    return undefined;\n  }\n  return dataPath;\n}\n\n/**\n * Resolves the lodash-get path for lookup/select display text from expose metadata.\n */\nexport function resolvePropertyExposeDisplayTarget(\n  options: Record<string, unknown> | undefined,\n): string | undefined {\n  if (!options) {\n    return undefined;\n  }\n\n  const textField = typeof options['textField'] === 'string' ? options['textField'].trim() : '';\n  const valueField = typeof options['valueField'] === 'string' ? options['valueField'].trim() : 'id';\n  const entries = parsePropertyExposeEntries(options);\n\n  if (textField) {\n    const match = entries.find((entry) => entry.source === textField);\n    if (match?.target.trim()) {\n      return match.target.trim();\n    }\n  }\n\n  const displayEntry = entries.find(\n    (entry) => entry.source !== valueField && entry.source !== 'id' && entry.target.trim(),\n  );\n  return displayEntry?.target.trim();\n}\n\n/**\n * Resolves the lodash-get path used for inline `contains` filters on lookup/select properties.\n * Prefers list column `dataPath`, then lookup `expose` target for `textField` (or first non-id expose).\n * Returns `undefined` when the property name should be used as-is (e.g. plain text fields).\n */\nexport function resolveEntityPropertyInlineFilterField(\n  entity: AXPEntity | null | undefined,\n  property: AXPEntityPropertyLike,\n): string | undefined {\n  if (!entity || !property?.name) {\n    return undefined;\n  }\n\n  const dataPath = resolveEntityColumnDataPath(entity, property.name);\n  if (dataPath) {\n    return dataPath;\n  }\n\n  const opts = property.schema?.interface?.options;\n  if (!opts || typeof opts !== 'object') {\n    return undefined;\n  }\n\n  return resolvePropertyExposeDisplayTarget(opts);\n}\n\n//#endregion\n","import type { AXPEntity } from '../types/entity-definition.types';\n\nimport {\n  isRowBoundEntityDisplayTemplate,\n  normalizeEntityDisplayTemplate,\n} from './entity-display-template.util';\n\n//#region ---- Types ----\n\nexport interface AXPEntitySearchTitleContext {\n  /** Templates tried after the primary `searchResult.title` fails (`single.title`, lookup, individual). */\n  fallbackTemplates: string[];\n  /** Entity property paths tried when templates do not resolve (`lookup`, identifier, common fields). */\n  fallbackFields: string[];\n}\n\n//#endregion\n\n//#region ---- Entity metadata ----\n\nconst DEFAULT_DISPLAY_FIELD_CANDIDATES = [\n  'title',\n  'name',\n  'code',\n  'fullName',\n  'displayName',\n  'subject',\n  'description',\n] as const;\n\nfunction entityHasProperty(entity: AXPEntity, path: string): boolean {\n  const root = path.split('.')[0];\n  return entity.properties?.some((property) => property.name === root) ?? false;\n}\n\nfunction resolveEntityDisplayPropertyPaths(entity: AXPEntity): string[] {\n  const paths: string[] = [];\n  const add = (path?: string) => {\n    const trimmed = path?.trim();\n    if (!trimmed || trimmed.includes('{') || paths.includes(trimmed)) {\n      return;\n    }\n    if (entityHasProperty(entity, trimmed)) {\n      paths.push(trimmed);\n    }\n  };\n\n  const lookupFormat = entity.formats?.lookup?.trim();\n  if (lookupFormat && !lookupFormat.includes('{')) {\n    add(lookupFormat);\n  }\n\n  for (const candidate of DEFAULT_DISPLAY_FIELD_CANDIDATES) {\n    add(candidate);\n  }\n\n  const identifierPlugin = entity.plugins?.find((plugin) => plugin.name === 'identifier');\n  const identifierField = identifierPlugin?.options?.['field'];\n  if (typeof identifierField === 'string') {\n    add(identifierField);\n  }\n\n  if (paths.length === 0) {\n    const firstStringProperty = entity.properties?.find(\n      (property) => property.schema?.dataType === 'string' && property.name !== 'id',\n    );\n    add(firstStringProperty?.name);\n  }\n\n  return paths;\n}\n\n/**\n * Builds entity-scoped fallback metadata for global search (registered on each entity search definition).\n */\nexport function buildEntitySearchTitleContext(\n  entity: AXPEntity,\n  primaryTemplate?: string,\n): AXPEntitySearchTitleContext {\n  const fallbackTemplates: string[] = [];\n  const normalizedPrimary = primaryTemplate?.trim()\n    ? normalizeEntityDisplayTemplate(primaryTemplate.trim())\n    : undefined;\n\n  const addTemplate = (raw?: string) => {\n    const trimmed = raw?.trim();\n    if (!trimmed || !isRowBoundEntityDisplayTemplate(trimmed)) {\n      return;\n    }\n    const normalized = normalizeEntityDisplayTemplate(trimmed);\n    if (!normalized || normalized === normalizedPrimary || fallbackTemplates.includes(normalized)) {\n      return;\n    }\n    fallbackTemplates.push(normalized);\n  };\n\n  addTemplate(entity.interfaces?.master?.single?.title);\n  addTemplate(entity.formats?.lookup);\n  addTemplate(entity.formats?.individual);\n\n  return {\n    fallbackTemplates,\n    fallbackFields: resolveEntityDisplayPropertyPaths(entity),\n  };\n}\n\n/**\n * Row title template chain aligned with entity layouts.\n * Priority: `interfaces.master.single.title` → `formats.searchResult.title` → `formats.individual`.\n */\nexport function resolveEntityRowTitleTemplate(entity: AXPEntity | null | undefined): string | undefined {\n  if (!entity) {\n    return undefined;\n  }\n\n  const singleTitle = entity.interfaces?.master?.single?.title?.trim();\n  if (singleTitle && isRowBoundEntityDisplayTemplate(singleTitle)) {\n    return normalizeEntityDisplayTemplate(singleTitle);\n  }\n\n  const searchTitle = entity.formats?.searchResult?.title?.trim();\n  if (searchTitle && isRowBoundEntityDisplayTemplate(searchTitle)) {\n    return normalizeEntityDisplayTemplate(searchTitle);\n  }\n\n  const lookupFormat = entity.formats?.lookup?.trim();\n  if (lookupFormat && isRowBoundEntityDisplayTemplate(lookupFormat)) {\n    return normalizeEntityDisplayTemplate(lookupFormat);\n  }\n\n  const individual = entity.formats?.individual?.trim();\n  if (individual && isRowBoundEntityDisplayTemplate(individual)) {\n    return normalizeEntityDisplayTemplate(individual);\n  }\n\n  return undefined;\n}\n\n/**\n * Record title template for modify popups: `interfaces.master.update.title` → `single.title`.\n */\nexport function resolveEntityModifyRecordTitleTemplate(\n  entity: AXPEntity | null | undefined,\n): string | undefined {\n  if (!entity) {\n    return undefined;\n  }\n\n  const updateTitle = entity.interfaces?.master?.update?.title?.trim();\n  if (updateTitle && isRowBoundEntityDisplayTemplate(updateTitle)) {\n    return normalizeEntityDisplayTemplate(updateTitle);\n  }\n\n  const singleTitle = entity.interfaces?.master?.single?.title?.trim();\n  if (singleTitle && isRowBoundEntityDisplayTemplate(singleTitle)) {\n    return normalizeEntityDisplayTemplate(singleTitle);\n  }\n\n  return undefined;\n}\n\n//#endregion\n","import type { AXPEntity } from '../types/entity-definition.types';\n\nimport { collectPropertyExposeTargetPaths } from './entity-property-display-path.util';\n\n//#region ---- Types ----\n\nexport type AXPCollectEntityQuickSearchPathsResolver = (\n  moduleName: string,\n  entityName: string,\n) => Promise<AXPEntity | null>;\n\n//#endregion\n\n//#region ---- Quick search: schema-driven field paths ----\n\nconst NON_TEXT_DATATYPES = new Set([\n  'number',\n  'integer',\n  'int',\n  'long',\n  'float',\n  'double',\n  'decimal',\n  'money',\n  'currency',\n  'boolean',\n  'bool',\n  'date',\n  'datetime',\n  'time',\n  'object',\n  'array',\n  'json',\n  'image',\n  'file',\n  'binary',\n]);\n\n/**\n * Whether an entity property likely stores free text worth a `contains` quick-search clause.\n */\nfunction isTextLikeDataType(dataType: string | undefined): boolean {\n  const dt = (dataType ?? 'string').toLowerCase().trim();\n  if (!dt || NON_TEXT_DATATYPES.has(dt)) {\n    return false;\n  }\n  return true;\n}\n\n/**\n * Lodash-get paths for quick search from a single entity definition: string-like property names\n * plus lookup `expose[].target` paths (e.g. `brand.title`).\n */\nexport function collectQuickSearchPathsFromSingleEntityDefinition(entity: AXPEntity | null | undefined): string[] {\n  if (!entity?.properties?.length) {\n    return [];\n  }\n\n  const paths = new Set<string>();\n\n  for (const property of entity.properties) {\n    if (isTextLikeDataType(property.schema?.dataType)) {\n      paths.add(property.name);\n    }\n\n    for (const target of collectPropertyExposeTargetPaths(property)) {\n      paths.add(target);\n    }\n  }\n\n  return [...paths];\n}\n\n//#endregion\n\n//#region ---- Column-derived nested paths ----\n\n/**\n * Adds dotted paths from master columns (`name` or `options.dataPath`), e.g. `person.fullName`, `jobDefinition.title`.\n */\nexport function collectNestedFieldPathsFromEntityColumns(entity: AXPEntity | null | undefined): string[] {\n  if (!entity?.columns?.length) {\n    return [];\n  }\n\n  const paths = new Set<string>();\n\n  for (const col of entity.columns) {\n    const name = col.name.trim();\n    if (name.includes('.')) {\n      paths.add(name);\n    }\n\n    const rawDp = col.options?.['dataPath'];\n    if (typeof rawDp === 'string') {\n      const dp = rawDp.trim();\n      if (dp.includes('.')) {\n        paths.add(dp);\n      }\n    }\n  }\n\n  return [...paths];\n}\n\n//#endregion\n\n//#region ---- Related merge-detail paths ----\n\nfunction parseRelatedEntityFullName(fullName: string): { moduleName: string; entityName: string } | null {\n  const t = fullName.trim();\n  const idx = t.indexOf('.');\n  if (idx <= 0 || idx >= t.length - 1) {\n    return null;\n  }\n  return {\n    moduleName: t.slice(0, idx),\n    entityName: t.slice(idx + 1),\n  };\n}\n\n//#endregion\n\n//#region ---- Public API ----\n\n/**\n * Collects lodash-get field paths used for mock/API quick search (`contains` / OR filters):\n * host properties and lookup expose targets, dotted column paths, and merge-detail related entities\n * prefixed with the related entity merge `persistence.dataPath` (e.g. `person.firstName`).\n */\nexport async function collectEntityQuickSearchFieldPaths(\n  entity: AXPEntity | null | undefined,\n  resolveRelatedDefinition: AXPCollectEntityQuickSearchPathsResolver,\n): Promise<string[]> {\n  if (!entity) {\n    return [];\n  }\n\n  const paths = new Set<string>();\n\n  for (const p of collectQuickSearchPathsFromSingleEntityDefinition(entity)) {\n    paths.add(p);\n  }\n\n  for (const p of collectNestedFieldPathsFromEntityColumns(entity)) {\n    paths.add(p);\n  }\n\n  const related = entity.relatedEntities ?? [];\n  for (const rel of related) {\n    const dataPath = rel.persistence?.dataPath?.trim();\n    if (!dataPath || rel.layout?.type !== 'merge-detail') {\n      continue;\n    }\n\n    const parsed = rel.entity ? parseRelatedEntityFullName(rel.entity) : null;\n    if (!parsed) {\n      continue;\n    }\n\n    const relatedDef = await resolveRelatedDefinition(parsed.moduleName, parsed.entityName);\n    if (!relatedDef) {\n      continue;\n    }\n\n    for (const p of collectQuickSearchPathsFromSingleEntityDefinition(relatedDef)) {\n      paths.add(`${dataPath}.${p}`);\n    }\n\n    for (const p of collectNestedFieldPathsFromEntityColumns(relatedDef)) {\n      paths.add(`${dataPath}.${p}`);\n    }\n  }\n\n  return [...paths];\n}\n\nexport { resolveEntityPropertyInlineFilterField } from './entity-property-display-path.util';\n\n//#endregion\n","import type { AXPEntity } from '../types/entity-definition.types';\nimport type { AXPRelatedEntity } from '../types/entity-related-layout.types';\n\n//#region ---- Related entity helpers ----\n\nexport function parseRelatedEntityFullName(fullName: string): { moduleName: string; entityName: string } | null {\n  const trimmed = fullName.trim();\n  const idx = trimmed.indexOf('.');\n  if (idx <= 0 || idx >= trimmed.length - 1) {\n    return null;\n  }\n  return {\n    moduleName: trimmed.slice(0, idx),\n    entityName: trimmed.slice(idx + 1),\n  };\n}\n\nexport function parseDottedFieldPath(fieldPath: string): { dataPath: string; propertyName: string } | null {\n  const trimmed = fieldPath.trim();\n  const dotIndex = trimmed.indexOf('.');\n  if (dotIndex <= 0 || dotIndex >= trimmed.length - 1) {\n    return null;\n  }\n  return {\n    dataPath: trimmed.slice(0, dotIndex),\n    propertyName: trimmed.slice(dotIndex + 1),\n  };\n}\n\n//#endregion\n\n//#region ---- Merge-detail property discovery ----\n\n/**\n * Resolves related property names eligible for host list columns/filters/sorts:\n * host columns under `dataPath`, optional `related.properties` allowlist, minus `excludeProperties`.\n */\nexport function collectMergeDetailListPropertyNames(\n  hostEntity: AXPEntity,\n  dataPath: string,\n  relatedEntity: AXPRelatedEntity,\n): Set<string> {\n  const names = new Set<string>();\n  const prefix = `${dataPath}.`;\n\n  if (relatedEntity.properties?.length) {\n    for (const name of relatedEntity.properties) {\n      const trimmed = name.trim();\n      if (trimmed) {\n        names.add(trimmed);\n      }\n    }\n  }\n\n  for (const column of hostEntity.columns ?? []) {\n    const columnName = column.name.trim();\n    if (columnName.startsWith(prefix)) {\n      const tail = columnName.slice(prefix.length);\n      const leaf = tail.split('.')[0]?.trim();\n      if (leaf) {\n        names.add(leaf);\n      }\n    }\n\n    const rawDataPath = column.options?.['dataPath'];\n    if (typeof rawDataPath === 'string') {\n      const dp = rawDataPath.trim();\n      if (dp.startsWith(prefix)) {\n        const tail = dp.slice(prefix.length);\n        const leaf = tail.split('.')[0]?.trim();\n        if (leaf) {\n          names.add(leaf);\n        }\n      }\n    }\n  }\n\n  const excluded = new Set((relatedEntity.excludeProperties ?? []).map((n) => n.trim()).filter(Boolean));\n  for (const name of excluded) {\n    names.delete(name);\n  }\n\n  return names;\n}\n\n//#endregion\n","import type { AXPWidgetTypesMap } from '@acorex/platform/layout/widget-core-contracts';\nimport type { AXPFilterDefinition } from '@acorex/platform/contracts';\n\nimport { omit } from 'lodash-es';\n\nimport type { AXPEntity } from '../types/entity-definition.types';\nimport type { AXPEntityListFilterDefinition } from '../types/entity-list-filter.types';\nimport { encodeEntityListFilterContextField } from '../types/entity-list-filter.types';\nimport type { AXPEntityProperty } from '../types/entity-property.types';\nimport {\n  collectMergeDetailListPropertyNames,\n  parseRelatedEntityFullName,\n} from './entity-merge-detail-list-properties.util';\nimport {\n  resolveEntityColumnDataPath,\n  resolveEntityPropertyInlineFilterField,\n  resolvePropertyExposeDisplayTarget,\n} from './entity-property-display-path.util';\nimport type { AXPCollectEntityQuickSearchPathsResolver } from './entity-quick-search-paths.util';\n\n//#region ---- Types ----\n\nexport interface AXPBuildEntityListFilterDefinitionsDeps {\n  resolveWidget?: (\n    type: AXPWidgetTypesMap[keyof AXPWidgetTypesMap],\n  ) => { icon?: string; defaultFilterWidgetName?: string } | undefined;\n}\n\n//#endregion\n\n//#region ---- Property filter helpers ----\n\nfunction isPropertyFilterEnabled(property: AXPEntityProperty): boolean {\n  const filter = property.options?.filter;\n  return !!(\n    filter?.advance?.enabled ||\n    filter?.inline?.enabled ||\n    filter?.preload?.enabled\n  );\n}\n\n//#endregion\n\n//#region ---- Merge-detail property discovery ----\n\nfunction resolveMergedRelatedInlineFilterField(\n  dataPath: string,\n  relatedEntityDef: AXPEntity,\n  property: AXPEntityProperty,\n): string | undefined {\n  const columnDataPath = resolveEntityColumnDataPath(relatedEntityDef, property.name);\n  if (columnDataPath) {\n    return `${dataPath}.${columnDataPath}`;\n  }\n\n  const exposeTarget = resolvePropertyExposeDisplayTarget(property.schema?.interface?.options);\n  if (exposeTarget) {\n    return `${dataPath}.${exposeTarget}`;\n  }\n\n  return undefined;\n}\n\n//#endregion\n\n//#region ---- Filter definition builder ----\n\nfunction buildFilterDefinitionFromProperty(\n  hostEntity: AXPEntity,\n  property: AXPEntityProperty,\n  options: {\n    field: string;\n    inlineQueryField?: string;\n  },\n  deps?: AXPBuildEntityListFilterDefinitionsDeps,\n): AXPEntityListFilterDefinition | null {\n  if (!isPropertyFilterEnabled(property)) {\n    return null;\n  }\n\n  const iface = property.schema.interface ?? {};\n  const interfaceType = iface.type as AXPWidgetTypesMap[keyof AXPWidgetTypesMap] | undefined;\n  const widgetConfig = interfaceType ? deps?.resolveWidget?.(interfaceType) : undefined;\n\n  const type = (property.options?.filter?.advance?.widgetType ||\n    widgetConfig?.defaultFilterWidgetName ||\n    interfaceType) as AXPWidgetTypesMap[keyof AXPWidgetTypesMap];\n\n  const inlineQueryField =\n    options.inlineQueryField ??\n    resolveEntityPropertyInlineFilterField(hostEntity, property);\n\n  const preloadRequired = property.options?.filter?.preload?.required;\n  const validations = preloadRequired\n    ? [\n        {\n          rule: 'required',\n          message: 'This field is required',\n          options: {},\n        },\n      ]\n    : [];\n\n  // Form-only options (disabled/readonly) must not leak into list filters\n  const widgetOptions = {\n    ...omit(iface.options ?? {}, ['disabled', 'readonly']),\n    ...(validations.length ? { validations } : {}),\n  };\n\n  const contextField = options.field.includes('.')\n    ? encodeEntityListFilterContextField(options.field)\n    : undefined;\n\n  return {\n    title: property.title,\n    field: options.field,\n    ...(contextField ? { contextField } : {}),\n    ...(inlineQueryField && inlineQueryField !== options.field ? { inlineQueryField } : {}),\n    operator: {\n      type: 'contains',\n    },\n    widget: {\n      ...omit(iface as object, 'triggers'),\n      path: contextField ?? options.field,\n      type,\n      options: widgetOptions,\n    } as AXPFilterDefinition['widget'],\n    filters: [],\n    isParametric: false,\n    icon: widgetConfig?.icon,\n    filterType: {\n      advance: property.options?.filter?.advance?.enabled ?? false,\n      inline: property.options?.filter?.inline?.enabled ?? false,\n      preload: property.options?.filter?.preload,\n    },\n    triggers: iface.triggers,\n  };\n}\n\nasync function collectHostPropertyFilterDefinitions(\n  entity: AXPEntity,\n  deps?: AXPBuildEntityListFilterDefinitionsDeps,\n): Promise<AXPEntityListFilterDefinition[]> {\n  const definitions: AXPEntityListFilterDefinition[] = [];\n\n  for (const property of entity.properties ?? []) {\n    const definition = buildFilterDefinitionFromProperty(\n      entity,\n      property,\n      { field: property.name },\n      deps,\n    );\n    if (definition) {\n      definitions.push(definition);\n    }\n  }\n\n  return definitions;\n}\n\nasync function collectMergeDetailFilterDefinitions(\n  hostEntity: AXPEntity,\n  resolveRelatedDefinition: AXPCollectEntityQuickSearchPathsResolver,\n  deps?: AXPBuildEntityListFilterDefinitionsDeps,\n): Promise<AXPEntityListFilterDefinition[]> {\n  const definitions: AXPEntityListFilterDefinition[] = [];\n\n  for (const related of hostEntity.relatedEntities ?? []) {\n    if (related.layout?.type !== 'merge-detail') {\n      continue;\n    }\n\n    if (related.filter?.enabled === false) {\n      continue;\n    }\n\n    const dataPath = related.persistence?.dataPath?.trim();\n    if (!dataPath) {\n      continue;\n    }\n\n    const parsed = related.entity ? parseRelatedEntityFullName(related.entity) : null;\n    if (!parsed) {\n      continue;\n    }\n\n    const relatedDef = await resolveRelatedDefinition(parsed.moduleName, parsed.entityName);\n    if (!relatedDef) {\n      continue;\n    }\n\n    const propertyNames = collectMergeDetailListPropertyNames(hostEntity, dataPath, related);\n    if (propertyNames.size === 0) {\n      continue;\n    }\n\n    for (const propertyName of propertyNames) {\n      const property = relatedDef.properties?.find((p) => p.name === propertyName);\n      if (!property) {\n        continue;\n      }\n\n      const queryField = `${dataPath}.${propertyName}`;\n      const inlineQueryField = resolveMergedRelatedInlineFilterField(dataPath, relatedDef, property);\n\n      const definition = buildFilterDefinitionFromProperty(\n        hostEntity,\n        property,\n        {\n          field: queryField,\n          inlineQueryField,\n        },\n        deps,\n      );\n\n      if (definition) {\n        definitions.push(definition);\n      }\n    }\n  }\n\n  return definitions;\n}\n\n//#endregion\n\n//#region ---- Public API ----\n\n/**\n * Builds master-list filter definitions from host properties and merge-detail related entities.\n * Related filters use `{dataPath}.{property}` query fields (e.g. `person.firstName`).\n */\nexport async function collectEntityListFilterDefinitions(\n  entity: AXPEntity | null | undefined,\n  resolveRelatedDefinition: AXPCollectEntityQuickSearchPathsResolver,\n  deps?: AXPBuildEntityListFilterDefinitionsDeps,\n): Promise<AXPEntityListFilterDefinition[]> {\n  if (!entity) {\n    return [];\n  }\n\n  const hostDefinitions = await collectHostPropertyFilterDefinitions(entity, deps);\n  const relatedDefinitions = await collectMergeDetailFilterDefinitions(\n    entity,\n    resolveRelatedDefinition,\n    deps,\n  );\n\n  return [...hostDefinitions, ...relatedDefinitions];\n}\n\n//#endregion\n","import type { AXPEntity } from '../types/entity-definition.types';\nimport type { AXPEntityProperty } from '../types/entity-property.types';\n\nimport {\n  collectMergeDetailListPropertyNames,\n  parseRelatedEntityFullName,\n} from './entity-merge-detail-list-properties.util';\nimport type { AXPCollectEntityQuickSearchPathsResolver } from './entity-quick-search-paths.util';\n\n//#region ---- Types ----\n\nexport interface AXPEntityListSortableField {\n  name: string;\n  title: string;\n}\n\n//#endregion\n\n//#region ---- Property sort helpers ----\n\nfunction isPropertySortEnabled(property: AXPEntityProperty): boolean {\n  return !!property.options?.sort?.enabled;\n}\n\nfunction resolveHostColumnTitle(hostEntity: AXPEntity, fieldName: string): string | undefined {\n  const column = hostEntity.columns?.find((c) => c.name === fieldName);\n  return column?.title;\n}\n\nfunction collectHostSortableFields(entity: AXPEntity): AXPEntityListSortableField[] {\n  return (entity.properties ?? [])\n    .filter(isPropertySortEnabled)\n    .map((property) => ({\n      name: property.name,\n      title: resolveHostColumnTitle(entity, property.name) ?? property.title,\n    }));\n}\n\nasync function collectMergeDetailSortableFields(\n  hostEntity: AXPEntity,\n  resolveRelatedDefinition: AXPCollectEntityQuickSearchPathsResolver,\n): Promise<AXPEntityListSortableField[]> {\n  const fields: AXPEntityListSortableField[] = [];\n\n  for (const related of hostEntity.relatedEntities ?? []) {\n    if (related.layout?.type !== 'merge-detail') {\n      continue;\n    }\n\n    const dataPath = related.persistence?.dataPath?.trim();\n    if (!dataPath) {\n      continue;\n    }\n\n    const parsed = related.entity ? parseRelatedEntityFullName(related.entity) : null;\n    if (!parsed) {\n      continue;\n    }\n\n    const relatedDef = await resolveRelatedDefinition(parsed.moduleName, parsed.entityName);\n    if (!relatedDef) {\n      continue;\n    }\n\n    const propertyNames = collectMergeDetailListPropertyNames(hostEntity, dataPath, related);\n    for (const propertyName of propertyNames) {\n      const property = relatedDef.properties?.find((p) => p.name === propertyName);\n      if (!property || !isPropertySortEnabled(property)) {\n        continue;\n      }\n\n      const queryField = `${dataPath}.${propertyName}`;\n      fields.push({\n        name: queryField,\n        title: resolveHostColumnTitle(hostEntity, queryField) ?? property.title,\n      });\n    }\n  }\n\n  return fields;\n}\n\n//#endregion\n\n//#region ---- Public API ----\n\n/**\n * Builds master-list sortable fields from host properties and merge-detail related entities.\n * Related sorts use `{dataPath}.{property}` query fields (e.g. `person.firstName`).\n */\nexport async function collectEntityListSortableFields(\n  entity: AXPEntity | null | undefined,\n  resolveRelatedDefinition: AXPCollectEntityQuickSearchPathsResolver,\n): Promise<AXPEntityListSortableField[]> {\n  if (!entity) {\n    return [];\n  }\n\n  const hostFields = collectHostSortableFields(entity);\n  const relatedFields = await collectMergeDetailSortableFields(entity, resolveRelatedDefinition);\n\n  const seen = new Set<string>();\n  const result: AXPEntityListSortableField[] = [];\n\n  for (const field of [...hostFields, ...relatedFields]) {\n    if (seen.has(field.name)) {\n      continue;\n    }\n    seen.add(field.name);\n    result.push(field);\n  }\n\n  return result;\n}\n\nexport function isEntityPropertySortEnabled(property: AXPEntityProperty | null | undefined): boolean {\n  return property != null && isPropertySortEnabled(property);\n}\n\n//#endregion\n","//#region ---- Workflow record helpers ----\n\nimport type { AXPRecordWorkflowInfo } from '../types/entity-model.types';\n\n/** Entity query filter field for {@link AXPRecordWorkflowInfo.instanceId}. */\nexport const AXP_RECORD_WORKFLOW_INFO_INSTANCE_ID_FIELD = 'workflowInfo.instanceId' as const;\n\n/** Entity query filter field for {@link AXPRecordWorkflowInfo.correlationId}. */\nexport const AXP_RECORD_WORKFLOW_INFO_CORRELATION_ID_FIELD = 'workflowInfo.correlationId' as const;\n\n/** Entity query filter field for {@link AXPRecordWorkflowInfo.definitionId}. */\nexport const AXP_RECORD_WORKFLOW_INFO_DEFINITION_ID_FIELD = 'workflowInfo.definitionId' as const;\n\n/** Returns a trimmed workflow instance id from a record, if present. */\nexport function getRecordWorkflowInstanceId(\n  record: { workflowInfo?: AXPRecordWorkflowInfo | null } | null | undefined,\n): string | null {\n  const id = record?.workflowInfo?.instanceId?.trim();\n  return id && id.length > 0 ? id : null;\n}\n\n/** Returns a trimmed workflow correlation id from a record, if present. */\nexport function getRecordWorkflowCorrelationId(\n  record: { workflowInfo?: AXPRecordWorkflowInfo | null } | null | undefined,\n): string | null {\n  const id = record?.workflowInfo?.correlationId?.trim();\n  return id && id.length > 0 ? id : null;\n}\n\n/** Builds canonical workflow metadata for a domain record (engine / middleware). */\nexport function buildAXPRecordWorkflowInfo(params: {\n  instanceId: string;\n  definitionId?: string | null;\n  correlationId?: string | null;\n  pinnedVersion?: number | null;\n}): AXPRecordWorkflowInfo {\n  const instanceId = params.instanceId?.trim();\n  if (!instanceId) {\n    return {};\n  }\n  const definitionId = params.definitionId?.trim();\n  const correlationId = params.correlationId?.trim();\n  return {\n    instanceId,\n    ...(definitionId ? { definitionId } : { definitionId: null }),\n    ...(correlationId ? { correlationId } : { correlationId: null }),\n    ...(params.pinnedVersion != null ? { pinnedVersion: params.pinnedVersion } : {}),\n  };\n}\n\n//#endregion\n","import type { AXPLookupWidgetCreateOptions, ResolvedLookupCreateOptions } from '../types/lookup-widget.types';\n\n//#region ---- Resolution ----\n\n/**\n * Resolves lookup create options from `create` and legacy `allowCreate` (mode).\n */\nexport function resolveLookupWidgetCreateOptions(options: {\n  create?: AXPLookupWidgetCreateOptions;\n  /** @deprecated Use create.enable; still supported for create mode (quick/full). */\n  allowCreate?: 'none' | 'full' | 'quick';\n}): ResolvedLookupCreateOptions {\n  const create = options.create;\n  const legacyMode = options.allowCreate;\n  const context = create?.context;\n\n  if (create?.enable !== undefined) {\n    if (!create.enable) {\n      return { enabled: false, mode: 'none', context };\n    }\n\n    const mode = legacyMode && legacyMode !== 'none' ? legacyMode : 'quick';\n    return { enabled: true, mode, context };\n  }\n\n  const mode = legacyMode ?? 'none';\n  return {\n    enabled: mode !== 'none',\n    mode,\n    context,\n  };\n}\n\n//#endregion\n","/** Prefix for related-entity sidebar list widget nodes and page ids (`page-list` layout). */\nexport const PAGE_LIST_WIDGET_NAME_PREFIX = 'page-list-';\n\n/**\n * Builds a unique id/name for a related-entity `page-list` sidebar page (widget node + details `page` query).\n * Must not equal the host overview page id (`entity.name`) so self-referential related lists can navigate.\n * Mirrors the `tab-list` pattern (`${entity}-tab-list`).\n */\nexport function buildPageListWidgetName(relatedEntityKey: string): string {\n  return `${PAGE_LIST_WIDGET_NAME_PREFIX}${relatedEntityKey}`;\n}\n\n/** Whether a widget node name belongs to a related-entity `page-list` sidebar page. */\nexport function isPageListWidgetName(name: string | undefined | null): boolean {\n  return typeof name === 'string' && name.startsWith(PAGE_LIST_WIDGET_NAME_PREFIX);\n}\n\n/** Registered id of the embedded data-list inside a related-entity `page-list` widget. */\nexport function buildPageListTableWidgetId(widgetName: string): string {\n  return `${widgetName}_table`;\n}\n","//#region ---- Utils barrel ----\n\nexport * from './entity-display-template.util';\nexport * from './entity-property-display-path.util';\nexport * from './entity-search-title-context.util';\nexport * from './entity-quick-search-paths.util';\nexport * from './entity-list-filter-definitions.util';\nexport * from './entity-list-sortable-fields.util';\nexport * from './entity-merge-detail-list-properties.util';\nexport * from './entity-workflow-record.util';\nexport * from './lookup-create-options.util';\nexport * from './page-list-widget-name.util';\n\n//#endregion\n","//#region ---- Entity display constants ----\n\n/** Row path used when context carries a nested entity layout title. */\nexport const ENTITY_LAYOUT_SINGLE_TITLE_PATH = 'entity.layout.single.title';\n\n/** Widget option for a pre-evaluated or template entity row title (entity list column mappers). */\nexport const ENTITY_ROW_POPUP_TITLE_OPTION = 'popupTitle';\n\n/** Widget option alias for entity row title templates in view/edit forms. */\nexport const ENTITY_ROW_TITLE_TEMPLATE_OPTION = 'titleTemplate';\n\n//#endregion\n","//#region ---- Entity datasource keys ----\n\n/** Platform entity layout datasource registry names. */\nexport const AXPEntityDataSourceKeys = {\n  Entities: 'entities',\n} as const;\n\n//#endregion\n","//#region ---- Entity events ----\n\nexport const AXPEntityEventsKeys = {\n  REFRESH_LAYOUT: 'entity:refresh-layout',\n  REFRESH_DATA: 'entity:refresh-data',\n} as const;\n\n//#endregion\n","//#region ---- Constants barrel ----\n\nexport * from './entity-display.constants';\nexport * from './entity-datasource.keys';\nexport * from './entity-events.keys';\n\n//#endregion\n","//#region ---- Barrel ----\n\nexport * from './types';\nexport * from './helpers';\nexport * from './utils';\nexport * from './constants';\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["parseRelatedEntityFullName"],"mappings":"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"}