{"version":3,"file":"acorex-platform-layout-widgets-repeater-widget-column.component-CFyfix31.mjs","sources":["../../../../libs/platform/layout/widgets/src/lib/widgets/layout/repeater/repeater-column-display.util.ts","../../../../libs/platform/layout/widgets/src/lib/widgets/layout/repeater/repeater-widget-column.component.ts","../../../../libs/platform/layout/widgets/src/lib/widgets/layout/repeater/repeater-widget-column.component.html"],"sourcesContent":["import { type AXPMultiLanguageString, type AXPWidgetNode, AXPWidgetsList } from '@acorex/platform/contracts';\nimport { isValidMultiLanguageObject, resolveMultiLanguageString } from '@acorex/core/translation';\n\nimport type { AXPRepeaterEntityByKeyLookup } from './repeater-entity-lookup.token';\nimport { get, isNil } from 'lodash-es';\n\n//#region ---- Types ----\n\nexport interface RepeaterLookupColumnHint {\n  entity: string;\n  valueField: string;\n  textField: string;\n  fkPath: string;\n  displayPath?: string;\n}\n\n//#endregion\n\n//#region ---- Constants ----\n\nconst LAYOUT_WIDGET_TYPES = new Set<string>(Object.values(AXPWidgetsList.Layouts));\n\nconst LOOKUP_WIDGET_TYPE = AXPWidgetsList.Editors.LookupBox;\n\nconst NESTED_DISPLAY_FIELDS = ['title', 'name', 'displayName', 'label', 'text', 'code'] as const;\n\nconst SKIP_ITEM_ROOT_KEYS = new Set(['id', 'startDate', 'endDate', '__meta__']);\n\n//#endregion\n\n//#region ---- Raw value normalization ----\n\n/**\n * Normalizes repeater column values from grid rows (array, single object, or JSON string).\n */\nexport function normalizeRepeaterColumnItems(raw: unknown, rowData?: unknown, dataPath?: string): unknown[] {\n  let value = raw;\n\n  if (isNil(value) && rowData != null && dataPath) {\n    value = get(rowData, dataPath);\n  }\n\n  if (typeof value === 'string') {\n    const trimmed = value.trim();\n    if (trimmed.startsWith('[') || trimmed.startsWith('{')) {\n      try {\n        value = JSON.parse(trimmed);\n      } catch {\n        return trimmed ? [trimmed] : [];\n      }\n    } else if (trimmed) {\n      return [trimmed];\n    } else {\n      return [];\n    }\n  }\n\n  if (isNil(value)) {\n    return [];\n  }\n\n  return (Array.isArray(value) ? value : [value]).filter((item) => item != null);\n}\n\nfunction resolveLookupFkValue(item: unknown, hint: RepeaterLookupColumnHint): unknown {\n  if (item == null || typeof item !== 'object') {\n    return undefined;\n  }\n\n  const direct = get(item, hint.fkPath);\n  if (direct != null && direct !== '') {\n    if (typeof direct === 'object') {\n      return get(direct, hint.valueField) ?? get(direct, 'id');\n    }\n    return direct;\n  }\n\n  if (hint.fkPath.endsWith('Id')) {\n    const base = hint.fkPath.slice(0, -2);\n    const nestedId = get(item, `${base}.id`);\n    if (nestedId != null && nestedId !== '') {\n      return nestedId;\n    }\n\n    const nestedObject = get(item, base);\n    if (nestedObject != null && typeof nestedObject === 'object') {\n      return get(nestedObject, hint.valueField) ?? get(nestedObject, 'id');\n    }\n  }\n\n  return undefined;\n}\n\nfunction extractNestedDisplayFallback(\n  item: Record<string, unknown>,\n  locale: string,\n  resolveMultiLanguage: (ml: AXPMultiLanguageString) => string,\n): string {\n  for (const value of Object.values(item)) {\n    if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n      continue;\n    }\n\n    for (const field of NESTED_DISPLAY_FIELDS) {\n      const text = resolveDisplayValue(get(value, field), locale, resolveMultiLanguage);\n      if (text) {\n        return text;\n      }\n    }\n  }\n\n  return '';\n}\n\n//#endregion\n\n//#region ---- Column mode resolution ----\n\n/**\n * Layout/container nodes wrap edit UI; leaf editors (contact, text, lookup, …) render per-item in columns.\n */\nexport function isRepeaterLayoutWidgetNode(node: AXPWidgetNode): boolean {\n  return LAYOUT_WIDGET_TYPES.has(String(node.type));\n}\n\n/**\n * Collects non-layout widget nodes under a repeater row template (one per editable field).\n */\nexport function collectRepeaterRowEditorLeaves(root: AXPWidgetNode | undefined): AXPWidgetNode[] {\n  if (!root) {\n    return [];\n  }\n\n  const leaves: AXPWidgetNode[] = [];\n\n  const visit = (node: AXPWidgetNode): void => {\n    const children = node.children ?? [];\n\n    if (!isRepeaterLayoutWidgetNode(node)) {\n      leaves.push(node);\n      return;\n    }\n\n    for (const child of children) {\n      visit(child);\n    }\n  };\n\n  visit(root);\n  return leaves;\n}\n\n/**\n * Widget column when the row template is a single leaf editor (e.g. ContactBox).\n * Text column when the row is a multi-field layout (e.g. GridLayout with lookup + dates).\n */\nexport function resolveRepeaterColumnDisplayMode(rowTemplate: AXPWidgetNode | undefined): 'widget' | 'text' {\n  if (!rowTemplate) {\n    return 'text';\n  }\n\n  if (!isRepeaterLayoutWidgetNode(rowTemplate)) {\n    return 'widget';\n  }\n\n  return collectRepeaterRowEditorLeaves(rowTemplate).length === 1 ? 'widget' : 'text';\n}\n\n/**\n * Node passed to `axp-widget-renderer` for widget-mode columns (direct leaf or single nested editor).\n */\nexport function resolveRepeaterWidgetColumnNode(rowTemplate: AXPWidgetNode | undefined): AXPWidgetNode | undefined {\n  if (!rowTemplate) {\n    return undefined;\n  }\n\n  if (!isRepeaterLayoutWidgetNode(rowTemplate)) {\n    return rowTemplate;\n  }\n\n  const leaves = collectRepeaterRowEditorLeaves(rowTemplate);\n  return leaves.length === 1 ? leaves[0] : undefined;\n}\n\n//#endregion\n\n//#region ---- Text display inference ----\n\nfunction flattenRepeaterRowNodes(root: AXPWidgetNode | undefined): AXPWidgetNode[] {\n  if (!root) {\n    return [];\n  }\n\n  const nodes: AXPWidgetNode[] = [];\n  const visit = (node: AXPWidgetNode): void => {\n    nodes.push(node);\n    for (const child of node.children ?? []) {\n      visit(child);\n    }\n  };\n  visit(root);\n  return nodes;\n}\n\nfunction isLookupWidget(node: AXPWidgetNode): boolean {\n  return String(node.type) === LOOKUP_WIDGET_TYPE;\n}\n\nfunction resolveLookupExposeDisplayPath(node: AXPWidgetNode): string | undefined {\n  const expose = node.options?.['expose'] as Array<{ source?: string; target?: string }> | undefined;\n  const textField = String(node.options?.['textField'] ?? 'title').trim() || 'title';\n\n  if (expose?.length) {\n    const preferred = expose.find((entry) => entry.source === textField && entry.target?.trim());\n    if (preferred?.target) {\n      return preferred.target.trim();\n    }\n\n    const titleTarget = expose.find(\n      (entry) =>\n        entry.target?.trim() &&\n        (entry.source === 'title' || entry.target.endsWith('.title') || entry.target === 'title'),\n    );\n    if (titleTarget?.target) {\n      return titleTarget.target.trim();\n    }\n\n    const firstTarget = expose.find((entry) => entry.target?.trim());\n    if (firstTarget?.target) {\n      return firstTarget.target.trim();\n    }\n  }\n\n  const binding = String(node.path ?? node.name ?? '').trim();\n  if (binding.endsWith('Id')) {\n    const base = binding.slice(0, -2);\n    if (base) {\n      return `${base}.${textField}`;\n    }\n  }\n\n  return undefined;\n}\n\nexport function inferRepeaterDisplayPathFromTemplate(rowTemplate: AXPWidgetNode | undefined): string | undefined {\n  return resolveRepeaterLookupColumnHint(rowTemplate)?.displayPath;\n}\n\n/**\n * Lookup metadata from the repeater row template (used to hydrate FK ids in list rows).\n */\nexport function resolveRepeaterLookupColumnHint(rowTemplate: AXPWidgetNode | undefined): RepeaterLookupColumnHint | undefined {\n  for (const node of flattenRepeaterRowNodes(rowTemplate)) {\n    if (!isLookupWidget(node)) {\n      continue;\n    }\n\n    const entity = String(node.options?.['entity'] ?? '').trim();\n    const fkPath = String(node.path ?? node.name ?? '').trim();\n    if (!entity || !fkPath) {\n      continue;\n    }\n\n    return {\n      entity,\n      valueField: String(node.options?.['valueField'] ?? 'id').trim() || 'id',\n      textField: String(node.options?.['textField'] ?? 'title').trim() || 'title',\n      fkPath,\n      displayPath: resolveLookupExposeDisplayPath(node),\n    };\n  }\n\n  return undefined;\n}\n\nexport function inferRepeaterDisplayPathFromItem(item: unknown): string | undefined {\n  if (item == null || typeof item !== 'object' || Array.isArray(item)) {\n    return undefined;\n  }\n\n  const record = item as Record<string, unknown>;\n\n  for (const [key, value] of Object.entries(record)) {\n    if (SKIP_ITEM_ROOT_KEYS.has(key) || key.endsWith('Id')) {\n      continue;\n    }\n    if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n      continue;\n    }\n\n    for (const field of NESTED_DISPLAY_FIELDS) {\n      if (!isNil(get(value, field))) {\n        return `${key}.${field}`;\n      }\n    }\n  }\n\n  for (const field of NESTED_DISPLAY_FIELDS) {\n    if (!isNil(get(record, field))) {\n      return field;\n    }\n  }\n\n  return undefined;\n}\n\nexport function resolveRepeaterItemDisplayPath(\n  rowTemplate: AXPWidgetNode | undefined,\n  sampleItem?: unknown,\n): string | undefined {\n  return inferRepeaterDisplayPathFromTemplate(rowTemplate) ?? inferRepeaterDisplayPathFromItem(sampleItem);\n}\n\nfunction resolveDisplayValue(\n  value: unknown,\n  locale: string,\n  resolveMultiLanguage: (ml: AXPMultiLanguageString) => string,\n): string {\n  if (isNil(value)) {\n    return '';\n  }\n\n  if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n    return String(value).trim();\n  }\n\n  if (typeof value === 'object' && !Array.isArray(value)) {\n    if (isValidMultiLanguageObject(value)) {\n      return resolveMultiLanguage(value as AXPMultiLanguageString).trim();\n    }\n\n    const resolved = resolveMultiLanguageString(value as AXPMultiLanguageString, locale).trim();\n    if (resolved && resolved !== '[object Object]') {\n      return resolved;\n    }\n  }\n\n  return '';\n}\n\nexport function extractRepeaterItemDisplayText(\n  item: unknown,\n  displayPath: string | undefined,\n  locale: string,\n  resolveMultiLanguage: (ml: AXPMultiLanguageString) => string,\n): string {\n  if (item == null) {\n    return '';\n  }\n\n  if (typeof item === 'string' || typeof item === 'number' || typeof item === 'boolean') {\n    return String(item).trim();\n  }\n\n  if (typeof item !== 'object') {\n    return '';\n  }\n\n  const path = displayPath ?? inferRepeaterDisplayPathFromItem(item);\n  if (path) {\n    const fromPath = resolveDisplayValue(get(item, path), locale, resolveMultiLanguage);\n    if (fromPath) {\n      return fromPath;\n    }\n  }\n\n  return extractNestedDisplayFallback(item as Record<string, unknown>, locale, resolveMultiLanguage);\n}\n\nexport function extractRepeaterDisplayTexts(\n  items: unknown[],\n  rowTemplate: AXPWidgetNode | undefined,\n  locale: string,\n  resolveMultiLanguage: (ml: AXPMultiLanguageString) => string,\n): string[] {\n  const filtered = items.filter((item) => item != null);\n  if (filtered.length === 0) {\n    return [];\n  }\n\n  const displayPath = resolveRepeaterItemDisplayPath(rowTemplate, filtered[0]);\n\n  return filtered\n    .map((item) => extractRepeaterItemDisplayText(item, displayPath, locale, resolveMultiLanguage))\n    .filter((text) => text.length > 0);\n}\n\n/**\n * Resolves repeater column labels, hydrating lookup FK ids when list rows omit nested snapshots.\n */\nexport async function resolveRepeaterDisplayTextsWithHydration(\n  items: unknown[],\n  rowTemplate: AXPWidgetNode | undefined,\n  entityLookup: AXPRepeaterEntityByKeyLookup | undefined,\n  locale: string,\n  resolveMultiLanguage: (ml: AXPMultiLanguageString) => string,\n): Promise<string[]> {\n  const filtered = items.filter((item) => item != null);\n  if (filtered.length === 0) {\n    return [];\n  }\n\n  const displayPath = resolveRepeaterItemDisplayPath(rowTemplate, filtered[0]);\n  const lookupHint = resolveRepeaterLookupColumnHint(rowTemplate);\n  const lookupCache = new Map<string, string>();\n\n  const resolveLookupTitle = async (id: unknown): Promise<string> => {\n    const hint = lookupHint;\n    if (!hint) {\n      return '';\n    }\n\n    if (id != null && typeof id === 'object') {\n      const inline = resolveDisplayValue(get(id, hint.textField), locale, resolveMultiLanguage);\n      if (inline) {\n        return inline;\n      }\n    }\n\n    if (id == null || id === '') {\n      return '';\n    }\n\n    if (!hint.entity.includes('.') || !entityLookup) {\n      return '';\n    }\n\n    const cacheKey = String(id);\n    const cached = lookupCache.get(cacheKey);\n    if (cached != null) {\n      return cached;\n    }\n\n    try {\n      const row = await entityLookup.byKey(hint.entity, cacheKey);\n      const text = resolveDisplayValue(get(row, hint.textField), locale, resolveMultiLanguage);\n      lookupCache.set(cacheKey, text);\n      return text;\n    } catch {\n      lookupCache.set(cacheKey, '');\n      return '';\n    }\n  };\n\n  const texts = await Promise.all(\n    filtered.map(async (item) => {\n      const inline = extractRepeaterItemDisplayText(item, displayPath, locale, resolveMultiLanguage);\n      if (inline) {\n        return inline;\n      }\n\n      if (!lookupHint) {\n        return '';\n      }\n\n      const fkValue = resolveLookupFkValue(item, lookupHint);\n      if (fkValue != null && typeof fkValue === 'object') {\n        const fromEmbedded = await resolveLookupTitle(fkValue);\n        if (fromEmbedded) {\n          return fromEmbedded;\n        }\n      }\n\n      return resolveLookupTitle(fkValue);\n    }),\n  );\n\n  return texts.filter((text) => text.length > 0);\n}\n\n//#endregion\n","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXPColumnWidgetComponent, AXPWidgetCoreModule, AXPWidgetCoreService } from '@acorex/platform/layout/widget-core';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPMultiLanguageString, type AXPWidgetNode } from '@acorex/platform/contracts';\nimport { AXPContextStore } from '@acorex/platform/core';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  Input,\n  OnChanges,\n  SimpleChanges,\n  computed,\n  effect,\n  inject,\n  signal,\n  untracked,\n  viewChild,\n} from '@angular/core';\n\nimport {\n  extractRepeaterDisplayTexts,\n  normalizeRepeaterColumnItems,\n  resolveRepeaterColumnDisplayMode,\n  resolveRepeaterDisplayTextsWithHydration,\n  resolveRepeaterWidgetColumnNode,\n} from './repeater-column-display.util';\nimport { AXP_REPEATER_ENTITY_BY_KEY_LOOKUP } from './repeater-entity-lookup.token';\n\n@Component({\n  selector: 'axp-repeater-widget-column',\n  templateUrl: './repeater-widget-column.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AXBadgeModule, AXButtonModule, AXPopoverModule, AXPWidgetCoreModule],\n  providers: [AXPWidgetCoreService, AXPContextStore],\n  inputs: ['rawValue', 'rowData'],\n})\nexport class AXPRepeaterWidgetColumnComponent extends AXPColumnWidgetComponent<any[]> implements OnChanges {\n  //#region ----   Services & Dependencies   ----\n\n  private readonly translation = inject(AXTranslationService);\n  private readonly entityLookup = inject(AXP_REPEATER_ENTITY_BY_KEY_LOOKUP, { optional: true });\n\n  //#endregion\n\n  //#region ----   Inputs   ----\n\n  private readonly rawValueSignal = signal<unknown>(null);\n  private readonly rowDataSignal = signal<unknown>(null);\n\n  @Input('rawValue')\n  set rawValueInput(value: unknown) {\n    this.rawValueSignal.set(value);\n  }\n\n  @Input('rowData')\n  set rowDataInput(value: unknown) {\n    this.rowDataSignal.set(value);\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['rawValue']) {\n      this.rawValueSignal.set(changes['rawValue'].currentValue);\n    }\n    if (changes['rowData']) {\n      this.rowDataSignal.set(changes['rowData'].currentValue);\n    }\n  }\n\n  //#endregion\n\n  //#region ----   View Children   ----\n\n  protected moreButton = viewChild<ElementRef>('moreButton');\n  protected morePopover = viewChild<AXPopoverComponent>('morePopover');\n\n  //#endregion\n\n  //#region ----   Properties   ----\n\n  protected maxVisible: number = this.options['maxVisible'] ?? 2;\n\n  protected get rowTemplate(): AXPWidgetNode | undefined {\n    return this.options['children']?.[0];\n  }\n\n  protected get columnDisplayMode(): 'widget' | 'text' {\n    return resolveRepeaterColumnDisplayMode(this.rowTemplate);\n  }\n\n  protected get childWidgetNode(): AXPWidgetNode | undefined {\n    return this.columnDisplayMode === 'widget' ? resolveRepeaterWidgetColumnNode(this.rowTemplate) : undefined;\n  }\n\n  //#endregion\n\n  //#region ----   Signals   ----\n\n  protected isMorePopoverOpen = signal(false);\n  protected resolvedDisplayTexts = signal<string[]>([]);\n\n  //#endregion\n\n  //#region ----   Node Cache   ----\n\n  private nodeCache = new Map<number, AXPWidgetNode>();\n  private lastItems: unknown[] = [];\n  private hydrateRequestId = 0;\n\n  private clearCacheIfNeeded(): void {\n    const currentItems = this.allItems();\n    if (\n      currentItems.length !== this.lastItems.length ||\n      currentItems.some((item, idx) => item !== this.lastItems[idx])\n    ) {\n      this.nodeCache.clear();\n      this.lastItems = [...currentItems];\n    }\n  }\n\n  //#endregion\n\n  //#region ----   Effects   ----\n\n  private readonly hydrateDisplayTexts = effect((onCleanup) => {\n    if (this.columnDisplayMode !== 'text') {\n      untracked(() => this.resolvedDisplayTexts.set([]));\n      return;\n    }\n\n    const items = this.displayItems();\n    const locale = this.translation.getActiveLang();\n    const resolveMultiLanguage = (value: AXPMultiLanguageString) => this.translation.resolve(value);\n\n    const syncTexts = extractRepeaterDisplayTexts(items, this.rowTemplate, locale, resolveMultiLanguage);\n    untracked(() => this.resolvedDisplayTexts.set(syncTexts));\n\n    const requestId = ++this.hydrateRequestId;\n    let cancelled = false;\n    onCleanup(() => {\n      cancelled = true;\n    });\n\n    void resolveRepeaterDisplayTextsWithHydration(\n      items,\n      this.rowTemplate,\n      this.entityLookup ?? undefined,\n      locale,\n      resolveMultiLanguage,\n    ).then((texts) => {\n      if (!cancelled && requestId === this.hydrateRequestId) {\n        this.resolvedDisplayTexts.set(texts);\n      }\n    });\n  });\n\n  //#endregion\n\n  //#region ----   Computed Properties   ----\n\n  protected useTextDisplay = computed(() => this.columnDisplayMode === 'text');\n\n  protected displayItems = computed(() =>\n    normalizeRepeaterColumnItems(\n      this.rawValueSignal(),\n      this.rowDataSignal(),\n      this.path ?? (this.options['columnName'] as string | undefined),\n    ),\n  );\n\n  protected allItems = computed(() => this.displayItems());\n\n  protected visibleItems = computed(() => this.allItems().slice(0, this.maxVisible));\n\n  protected visibleDisplayTexts = computed(() => this.resolvedDisplayTexts().slice(0, this.maxVisible));\n\n  protected hasMoreItems = computed(() => {\n    if (this.useTextDisplay()) {\n      return this.resolvedDisplayTexts().length > this.maxVisible;\n    }\n    return this.allItems().length > this.maxVisible;\n  });\n\n  protected popoverItemCount = computed(() =>\n    this.useTextDisplay() ? this.resolvedDisplayTexts().length : this.allItems().length,\n  );\n\n  //#endregion\n\n  //#region ----   UI Handlers   ----\n\n  protected showMoreItems(): void {\n    this.openMorePopover();\n  }\n\n  protected onMorePopoverOpenChange(event: unknown): void {\n    this.isMorePopoverOpen.set(!!event);\n  }\n\n  protected getItemNode(item: unknown, index: number): AXPWidgetNode | undefined {\n    const childWidgetNode = this.childWidgetNode;\n    if (!childWidgetNode) {\n      return undefined;\n    }\n\n    this.clearCacheIfNeeded();\n\n    const cachedNode = this.nodeCache.get(index);\n    if (cachedNode) {\n      return cachedNode;\n    }\n\n    const child = childWidgetNode;\n    const childBindingRaw = child.path ?? child.name;\n    const childBinding =\n      childBindingRaw != null && String(childBindingRaw).trim() !== '' ? String(childBindingRaw).trim() : '';\n    const baseItemPath = `${this.path}[${index}]`;\n    const itemPath = childBinding && childBinding !== '.' ? `${baseItemPath}.${childBinding}` : baseItemPath;\n\n    const node: AXPWidgetNode = {\n      ...child,\n      path: itemPath,\n      defaultValue: item,\n      options: {\n        ...child.options,\n        rawValue: item,\n        rowData: this.rowDataSignal(),\n      },\n    };\n\n    this.nodeCache.set(index, node);\n    return node;\n  }\n\n  //#endregion\n\n  //#region ----   Private Methods   ----\n\n  private openMorePopover(): void {\n    if (this.morePopover() && this.moreButton()) {\n      this.morePopover()!.target = this.moreButton()!.nativeElement;\n      this.morePopover()!.open();\n      this.isMorePopoverOpen.set(true);\n    }\n  }\n\n  //#endregion\n}\n","@if (useTextDisplay()) {\n  <div class=\"ax-relative ax-flex ax-min-w-0 ax-items-center ax-gap-1\">\n    @for (text of visibleDisplayTexts(); track $index) {\n      <span class=\"ax-truncate\">{{ text }}</span>\n      @if ($index < visibleDisplayTexts().length - 1) {\n        <span class=\"ax-text-muted ax-shrink-0\">,</span>\n      }\n    } @empty {\n      <span class=\"ax-text-muted\">---</span>\n    }\n\n    @if (hasMoreItems()) {\n      <span\n        class=\"ax-absolute ax-flex ax-end-0 ax-h-full ax-cursor-pointer ax-items-center ax-px-1 hover:ax-primary-lighter\"\n        (click)=\"showMoreItems()\"\n        #moreButton\n      >\n        <i class=\"fa-light fa-ellipsis-vertical\"></i>\n      </span>\n    }\n  </div>\n} @else {\n  <div class=\"ax-relative ax-flex ax-items-center ax-gap-1\">\n    @for (item of visibleItems(); track $index) {\n      @if (childWidgetNode) {\n        <ng-container\n          axp-widget-renderer\n          [node]=\"getItemNode(item, $index)!\"\n          [mode]=\"'view'\"\n          [parentNode]=\"null\"\n          [index]=\"$index\"\n        ></ng-container>\n      }\n    } @empty {\n      <span class=\"ax-text-muted\">---</span>\n    }\n\n    @if (hasMoreItems()) {\n      <span\n        class=\"ax-absolute ax-flex ax-end-0 ax-h-full ax-cursor-pointer ax-items-center ax-px-1 hover:ax-primary-lighter\"\n        (click)=\"showMoreItems()\"\n        #moreButton\n      >\n        <i class=\"fa-light fa-ellipsis-vertical\"></i>\n      </span>\n    }\n  </div>\n}\n\n<ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onMorePopoverOpenChange($event)\">\n  <div class=\"ax-lightest-surface ax-min-w-[280px] ax-rounded-lg ax-border 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\">All {{ popoverItemCount() }} Items</h3>\n    </div>\n    <div class=\"ax-max-h-64 ax-flex ax-flex-col ax-gap-3 ax-overflow-auto\" style=\"max-height: max(30dvh, 10rem)\">\n      @if (useTextDisplay()) {\n        @for (text of resolvedDisplayTexts(); track $index) {\n          <div class=\"ax-truncate\">{{ text }}</div>\n        }\n      } @else {\n        @for (item of allItems(); track $index) {\n          <div>\n            @if (childWidgetNode) {\n              <ng-container\n                axp-widget-renderer\n                [node]=\"getItemNode(item, $index)!\"\n                [mode]=\"'view'\"\n                [parentNode]=\"null\"\n                [index]=\"$index\"\n              ></ng-container>\n            }\n          </div>\n        }\n      }\n    </div>\n  </div>\n</ax-popover>\n"],"names":["i2"],"mappings":"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"}