{"version":3,"file":"openmfp-ngx.mjs","sources":["../../../projects/ngx/declarative-ui/dashboard/constants/breakpoints.ts","../../../projects/ngx/declarative-ui/dashboard/constants/constants.ts","../../../projects/ngx/declarative-ui/dashboard/i18n/dashboard-i18n.ts","../../../projects/ngx/declarative-ui/dashboard/i18n/dashboard-i18n.service.ts","../../../projects/ngx/declarative-ui/dashboard/models/dashboard.model.ts","../../../projects/ngx/declarative-ui/dashboard/card/utils/dashboard-card-registry.ts","../../../projects/ngx/declarative-ui/dashboard/card/utils/mount-angular-card.ts","../../../projects/ngx/declarative-ui/dashboard/card/utils/mount-sap-card.ts","../../../projects/ngx/declarative-ui/dashboard/card/utils/mount-wc-card.ts","../../../projects/ngx/declarative-ui/dashboard/card/dashboard-card.component.ts","../../../projects/ngx/declarative-ui/dashboard/card/dashboard-card.component.html","../../../projects/ngx/declarative-ui/dashboard/discard-changes-dialog/discard-changes-dialog.component.ts","../../../projects/ngx/declarative-ui/dashboard/discard-changes-dialog/discard-changes-dialog.component.html","../../../projects/ngx/declarative-ui/dashboard/edit-cards-dialog/edit-cards-dialog.component.ts","../../../projects/ngx/declarative-ui/dashboard/edit-cards-dialog/edit-cards-dialog.component.html","../../../projects/ngx/declarative-ui/dashboard/section/dashboard-section.component.ts","../../../projects/ngx/declarative-ui/dashboard/section/dashboard-section.component.html","../../../projects/ngx/declarative-ui/dashboard/unsaved-changes-dialog/unsaved-changes-dialog.component.ts","../../../projects/ngx/declarative-ui/dashboard/unsaved-changes-dialog/unsaved-changes-dialog.component.html","../../../projects/ngx/declarative-ui/dashboard/dashboard/engines/zflow/resize.helpers.ts","../../../projects/ngx/declarative-ui/dashboard/dashboard/engines/zflow/z-flow.helpers.ts","../../../projects/ngx/declarative-ui/dashboard/dashboard/engines/zflow/z-flow-engine.ts","../../../projects/ngx/declarative-ui/dashboard/dashboard/engines/contants/engines.ts","../../../projects/ngx/declarative-ui/dashboard/dashboard/dashboard.component.ts","../../../projects/ngx/declarative-ui/dashboard/dashboard/dashboard.component.html","../../../projects/ngx/declarative-ui/dashboard/dashboard/dashboard-element-methods.ts","../../../projects/ngx/declarative-ui/pipes/sanitize-html.pipe.ts","../../../projects/ngx/declarative-ui/dialogs/delete-confirmation-dialog/delete-confirmation-dialog.component.ts","../../../projects/ngx/declarative-ui/dialogs/delete-confirmation-dialog/delete-confirmation-dialog.component.html","../../../projects/ngx/declarative-ui/form/utils/set-property-by-path.ts","../../../projects/ngx/declarative-ui/form/declarative-form/form-collection-field/form-collection-field.component.ts","../../../projects/ngx/declarative-ui/form/declarative-form/form-collection-field/form-collection-field.component.html","../../../projects/ngx/declarative-ui/form/declarative-form/declarative-form.component.ts","../../../projects/ngx/declarative-ui/form/declarative-form/declarative-form.component.html","../../../projects/ngx/declarative-ui/dialogs/resource-form-dialog/resource-form-dialog.component.ts","../../../projects/ngx/declarative-ui/dialogs/resource-form-dialog/resource-form-dialog.component.html","../../../projects/ngx/declarative-ui/table/utils/resource-field-by-path.ts","../../../projects/ngx/declarative-ui/table/utils/field-definition.utils.ts","../../../projects/ngx/declarative-ui/table/utils/rules.engine.ts","../../../projects/ngx/declarative-ui/resource-field/boolean-value/boolean-cell.constants.ts","../../../projects/ngx/declarative-ui/resource-field/boolean-value/boolean-value.component.ts","../../../projects/ngx/declarative-ui/resource-field/boolean-value/boolean-value.component.html","../../../projects/ngx/declarative-ui/resource-field/link-value/link-value.component.ts","../../../projects/ngx/declarative-ui/resource-field/link-value/link-value.component.html","../../../projects/ngx/declarative-ui/resource-field/resource-collection-field/resource-collection-field.component.ts","../../../projects/ngx/declarative-ui/resource-field/resource-collection-field/resource-collection-field.component.html","../../../projects/ngx/declarative-ui/resource-field/secret-value/secret-value.component.ts","../../../projects/ngx/declarative-ui/resource-field/secret-value/secret-value.component.html","../../../projects/ngx/declarative-ui/resource-field/tag-list-value/tag-list-value.component.ts","../../../projects/ngx/declarative-ui/resource-field/tag-list-value/tag-list-value.component.html","../../../projects/ngx/declarative-ui/resource-field/resource-field.component.ts","../../../projects/ngx/declarative-ui/resource-field/resource-field.component.html","../../../projects/ngx/declarative-ui/table/utils/proccess-fields.ts","../../../projects/ngx/declarative-ui/table/declarative-table/declarative-table.component.ts","../../../projects/ngx/declarative-ui/table/declarative-table/declarative-table.component.html","../../../projects/ngx/declarative-ui/table-card/filter-tabs/filter-tabs.component.ts","../../../projects/ngx/declarative-ui/table-card/filter-tabs/filter-tabs.component.html","../../../projects/ngx/declarative-ui/table-card/declarative-table-card.component.ts","../../../projects/ngx/declarative-ui/table-card/declarative-table-card.component.html","../../../projects/ngx/cards/visited-service-card/visited-service-card.component.ts","../../../projects/ngx/cards/visited-service-card/visited-service-card.component.html","../../../projects/ngx/cards/favorites/favorites.component.ts","../../../projects/ngx/cards/favorites/favorites.component.html","../../../projects/ngx/cards/service-status/service-status-card.component.ts","../../../projects/ngx/cards/service-status/service-status-card.component.html","../../../projects/ngx/cards/whats-new/whats-new.component.ts","../../../projects/ngx/cards/whats-new/whats-new.component.html","../../../projects/ngx/cards/mock-card/mock-card.component.ts","../../../projects/ngx/cards/mock-card/mock-card.component.html","../../../projects/ngx/openmfp-ngx.ts"],"sourcesContent":["// ─────────────────────────────────────────────────────────────────────────────\n// MUST MATCH: ./_breakpoints.scss (default values only)\n//\n// Two breakpoint tables exist — one per engine profile:\n//\n//   DASHBOARD_BREAKPOINTS      — default engine (14/12/8/1 columns).\n//                                The SCSS file's $dashboard-cols-* variables\n//                                MUST match these values (they are the fallbacks\n//                                when no --dashboard-cols-* CSS var is set).\n//\n//   ZFLOW_DASHBOARD_BREAKPOINTS — zFlow engine (4/4/4/1 columns).\n//                                 Overrides the CSS vars at runtime via the\n//                                 engineProfile().sectionColumns tuple set on the host.\n//\n// Both tables are consumed by two systems that can't share a single source of\n// truth at compile time:\n//\n//   1. dashboard.component.ts — passed to Gridstack as\n//      `gridOptions.columnOpts.breakpoints`. Gridstack picks the active\n//      breakpoint by `w` (max-width). At each breakpoint, every grid item is\n//      laid out using `c` columns.\n//\n//   2. _breakpoints.scss — @container queries on .mfp-sections-container use\n//      CSS vars (--dashboard-cols-*) with the SCSS $dashboard-cols-* values as\n//      fallbacks. The active ENGINE_PROFILES[*].sectionColumns tuple is pushed into\n//      those vars at runtime by dashboard.component.ts.\n//\n// If you change DASHBOARD_BREAKPOINTS column counts, update BOTH the TS values\n// and the matching $dashboard-cols-* SCSS variables.\n// ─────────────────────────────────────────────────────────────────────────────\nimport type { Breakpoint } from 'gridstack';\n\n/**\n * Layout strategy applied at each breakpoint when Gridstack changes column\n * count. See ColumnOptions in gridstack/dist/types.d.ts:27 for the full set.\n */\ntype LayoutStrategy = 'compact' | 'list' | 'none';\n\nexport type DashboardBreakpoint = Readonly<\n  Required<Pick<Breakpoint, 'w' | 'c'>> & { layout: LayoutStrategy }\n>;\n\n/** Default engine breakpoints: 14/12/8/1 columns (matches main). */\nexport const DASHBOARD_BREAKPOINTS: readonly DashboardBreakpoint[] = [\n  { w: 4000, c: 14, layout: 'compact' },\n  { w: 1439, c: 12, layout: 'compact' },\n  { w: 1023, c: 8, layout: 'compact' },\n  { w: 599, c: 1, layout: 'list' },\n] as const;\n\n/** zFlow engine breakpoints: 4/4/4/1 columns. */\nexport const ZFLOW_DASHBOARD_BREAKPOINTS: readonly DashboardBreakpoint[] = [\n  { w: 4000, c: 4, layout: 'compact' },\n  { w: 1439, c: 4, layout: 'compact' },\n  { w: 1023, c: 4, layout: 'compact' },\n  { w: 599, c: 1, layout: 'list' },\n] as const;\n\nexport const XL_PAGE = 1440;\n","export const COMPACT_BREAKPOINT = 726;\nexport const CELL_HEIGHT = 10;\nexport const DASHBOARD_CARD_DRAG_ORIGIN_CLASS =\n  'mfp-dashboard-card-drag-origin';\nexport const DASHBOARD_CARD_DRAG_ORIGIN_SELECTOR =\n  `.${DASHBOARD_CARD_DRAG_ORIGIN_CLASS}`;\n","import en from './en.json';\n\nexport const DASHBOARD_I18N_KEYS = {\n  TITLE: 'title',\n  DESCRIPTION: 'description',\n  EDIT_HOME_BUTTON: 'editHomeButton',\n  EDIT_CARDS_BUTTON: 'editCardsButton',\n  UNSAVED_CHANGES: 'unsavedChanges',\n  EDIT_CARDS: 'editCards',\n  ACTIONS: 'actions',\n  SAVE: 'save',\n  CANCEL: 'cancel',\n  DISCARD: 'discard',\n  DISCARD_CHANGES: 'discardChanges',\n  DISCARD_CONFIRM_BODY: 'discardConfirmBody',\n  UNSAVED_NAV_BODY: 'unsavedNavBody',\n  NO_CARDS_AVAILABLE: 'noCardsAvailable',\n  REMOVE_SECTION: 'removeSection',\n  REMOVE_CARD: 'removeCard',\n  RESIZABLE: 'resizable',\n} as const;\n\nexport type DashboardI18nKey =\n  (typeof DASHBOARD_I18N_KEYS)[keyof typeof DASHBOARD_I18N_KEYS];\n\n/**\n * The full set of dashboard chrome strings (toolbar buttons, dialogs, a11y\n * labels). Client applications provide translated values through\n * `DashboardConfig.i18n`; any key they omit falls back to `EN_DEFAULTS`.\n */\nexport type DashboardTranslations = Record<DashboardI18nKey, string>;\n\n/**\n * Built-in English strings. This is the only translation the library ships and\n * the fallback used whenever a key is not supplied by the client through\n * `DashboardConfig.i18n`.\n */\nexport const EN_DEFAULTS: DashboardTranslations = en;\n","import {\n  DashboardI18nKey,\n  DashboardTranslations,\n  EN_DEFAULTS,\n} from './dashboard-i18n';\nimport { Injectable, signal } from '@angular/core';\n\n/**\n * Resolves translation keys for the dashboard chrome (toolbar buttons,\n * dialogs, a11y labels). Provided at the `Dashboard` component level so every\n * nested dashboard component shares the same instance — child components\n * inject it and react to translation changes automatically because\n * `getTranslation` reads the `overrides` signal on every call.\n *\n * The library ships English only (`EN_DEFAULTS`). Client applications supply\n * translated strings through `DashboardConfig.i18n`, which the `Dashboard`\n * component pushes into `overrides`; switching language is just the client\n * swapping that object. Any key not present in the overrides falls back to the\n * English default, and finally to the key itself.\n */\n@Injectable()\nexport class DashboardI18nService {\n  readonly overrides = signal<Partial<DashboardTranslations>>({});\n\n  getTranslation(key: DashboardI18nKey): string {\n    return this.overrides()[key] ?? EN_DEFAULTS[key] ?? key;\n  }\n}\n","import { ButtonSettings } from '../../models/ui-definition';\n\nexport const CARD_TYPES = {\n  WC: 'wc',\n  ANGULAR: 'angular',\n  SAP_UI: 'sap-ui',\n} as const;\n\nexport type CardsType = (typeof CARD_TYPES)[keyof typeof CARD_TYPES];\n\n/** Configuration for a single card placed in the dashboard grid or a section. */\nexport interface CardConfig {\n  /** Unique identifier for this card. Used as a stable key for position persistence. */\n  id: string;\n  /** Column span (1–12). Defaults to 12 when omitted. */\n  w?: number;\n  /** Row span — number of CSS grid rows occupied (1 row = 10 px by default). Defaults to 100 when omitted. */\n  h?: number;\n  /** Starting column index (0-based). Omit to let the grid auto-place the card. */\n  x?: number;\n  /** Starting row index (0-based). Omit to let the grid auto-place the card. */\n  y?: number;\n  /** Maximum row span in edit mode. */\n  maxH?: number;\n  /** Maximum column span in edit mode. */\n  maxW?: number;\n  /** Minimum row span in edit mode. */\n  minH?: number;\n  /** Minimum column span in edit mode. */\n  minW?: number;\n  /** ID of the parent section. Omit to place the card in the loose-card grid. */\n  sectionId?: string;\n  /**\n   * Custom-element tag name (for `'wc'`/omitted), Angular component selector (for `'angular'`),\n   * or SAP UI5 component name (for `'sap-ui'`).\n   */\n  component: string;\n  /**\n   * Render strategy for the card.\n   * - `'wc'` (default) — creates a custom element and sets `componentInputs` as DOM properties.\n   * - `'angular'` — looks up the Angular registry; warns and renders nothing if not found.\n   * - `'sap-ui'` — mounts via `window.sap.ui.require` + `ComponentContainer`.\n   */\n  type?: CardsType;\n  /** Key/value pairs passed to the rendered card. Behaviour depends on `type`. */\n  componentInputs?: Record<string, unknown>;\n  /** Human-readable label shown in the \"Edit Cards\" dialog. */\n  label?: string;\n}\n\nexport type MountCfg = Pick<\n  CardConfig,\n  'type' | 'component' | 'componentInputs'\n>;\n\n/** Configuration for a named horizontal section that groups cards. */\nexport interface SectionConfig {\n  /** Unique identifier for this section. */\n  id: string;\n  /** Column span (1–12). Defaults to 12 when omitted. */\n  w?: number;\n  /** Section heading displayed in the UI. */\n  title?: string;\n  /** When `false`, the section and its cards are excluded from edit mode. Defaults to `true` when omitted. */\n  editable?: boolean;\n}\n\n/** Overrides for the two built-in dashboard toolbar buttons. */\nexport interface DashboardButtonsSettings {\n  /** Partial override merged on top of the Edit View button defaults. */\n  editViewButton?: Partial<ButtonSettings>;\n  /** Partial override merged on top of the Edit Cards button defaults. */\n  editCardsButton?: Partial<ButtonSettings>;\n}\n\n/** Top-level configuration for the `<mfp-dashboard>` component. */\nexport interface DashboardConfig {\n  /** URL of the background image applied to the dashboard host element. */\n  backgroundImageUrl?: string;\n  /** Overrides for the built-in Edit View and Edit Cards toolbar buttons. */\n  buttonsSettings?: DashboardButtonsSettings;\n  /** When `true`, shows the Edit View button in the toolbar, allowing the user to enter edit mode. */\n  editable?: boolean;\n  /** When `true`, the Edit View button is rendered before the custom actions instead of after. Defaults to `false`. */\n  editButtonFirst?: boolean;\n  /** When provided, enable z-flow layout. */\n  zFlow?: {\n    /** Sets the height of each card in the z-flow layout. */\n    cardHeight: number;\n  };\n}\n","import {\n  Type,\n  isDevMode,\n  isStandalone,\n  reflectComponentType,\n} from '@angular/core';\n\n\nexport interface RegisteredDashboardCardComponent {\n  componentType: Type<unknown>;\n  selector: string;\n  inputs: ReadonlyMap<string, string>;\n}\n\nconst ELEMENT_SELECTOR_PATTERN = /^[a-z](?:[a-z0-9-]*)$/;\n\nconst dashboardCardRegistry = new Map<\n  string,\n  RegisteredDashboardCardComponent\n>();\n\nexport function addComponentToRegistry(componentTypes: Type<unknown>[]): void {\n  for (const componentType of componentTypes) {\n    const mirror = reflectComponentType(componentType);\n\n    if (!mirror) {\n      throw new Error(\n        `Dashboard card registration failed: \"${getTypeName(componentType)}\" is not an Angular component.`,\n      );\n    }\n\n    if (!isStandalone(componentType)) {\n      throw new Error(\n        `Dashboard card registration failed: \"${mirror.selector}\" must be a standalone Angular component.`,\n      );\n    }\n\n    const selector = toElementSelector(mirror.selector, componentType);\n    const existing = dashboardCardRegistry.get(selector);\n\n    if (existing && existing.componentType !== componentType) {\n      throw new Error(\n        `Dashboard card registration failed: selector \"${selector}\" is already registered.`,\n      );\n    }\n\n    dashboardCardRegistry.set(selector, {\n      componentType,\n      selector,\n      inputs: createInputMap(mirror.inputs),\n    });\n  }\n}\n\nexport function getRegisteredDashboardCardComponent(\n  selector: string,\n): RegisteredDashboardCardComponent | undefined {\n  return dashboardCardRegistry.get(selector);\n}\n\nexport function resetDashboardCardRegistry(): void {\n  dashboardCardRegistry.clear();\n}\n\nexport function warnForUnknownDashboardCardInput(\n  selector: string,\n  inputName: string,\n): void {\n  if (!isDevMode()) return;\n\n  console.warn(\n    `Dashboard card \"${selector}\" ignores unknown Angular input \"${inputName}\".`,\n  );\n}\n\nfunction createInputMap(\n  inputs: readonly {\n    readonly propName: string;\n    readonly templateName: string;\n  }[],\n): ReadonlyMap<string, string> {\n  const bindings = new Map<string, string>();\n\n  for (const input of inputs) {\n    bindings.set(input.templateName, input.templateName);\n    bindings.set(input.propName, input.templateName);\n  }\n\n  return bindings;\n}\n\nfunction toElementSelector(\n  selector: string,\n  componentType: Type<unknown>,\n): string {\n  const normalized = selector.trim();\n\n  if (!ELEMENT_SELECTOR_PATTERN.test(normalized)) {\n    throw new Error(\n      `Dashboard card registration failed: \"${getTypeName(componentType)}\" must use a single element selector. Received \"${selector}\".`,\n    );\n  }\n\n  return normalized;\n}\n\nfunction getTypeName(componentType: Type<unknown>): string {\n  return componentType.name.replace(/^_+/, '') || 'AnonymousComponent';\n}\n","import { MountCfg } from '../../models';\nimport {\n  getRegisteredDashboardCardComponent,\n  warnForUnknownDashboardCardInput,\n} from './dashboard-card-registry';\nimport { EffectCleanupRegisterFn, ViewContainerRef } from '@angular/core';\n\nexport function mountAngularCard(\n  cfg: MountCfg,\n  angularHost: ViewContainerRef,\n  onCleanup: EffectCleanupRegisterFn,\n): void {\n  const registeredComponent = getRegisteredDashboardCardComponent(\n    cfg.component,\n  );\n\n  if (!registeredComponent) {\n    console.warn(\n      `[DashboardCard] Angular component \"${cfg.component}\" is not registered`,\n    );\n    return;\n  }\n\n  const componentRef = angularHost.createComponent(\n    registeredComponent.componentType,\n  );\n\n  for (const [inputName, value] of Object.entries(cfg.componentInputs ?? {})) {\n    const templateName = registeredComponent.inputs.get(inputName);\n\n    if (!templateName) {\n      warnForUnknownDashboardCardInput(cfg.component, inputName);\n      continue;\n    }\n\n    componentRef.setInput(templateName, value);\n  }\n\n  componentRef.changeDetectorRef.detectChanges();\n\n  onCleanup(() => {\n    angularHost.clear();\n  });\n}\n","import { MountCfg } from '../../models';\nimport { EffectCleanupRegisterFn, ViewContainerRef } from '@angular/core';\n\nexport type SapUiRequire = (\n  deps: string[],\n  cb: (\n    ComponentContainer: new (cfg: {\n      name: string;\n      manifest: boolean;\n      async: boolean;\n      settings: Record<string, unknown>;\n    }) => { placeAt(el: HTMLElement): void; destroy(): void },\n  ) => void,\n) => void;\n\nexport function mountSapCard(\n  cfg: MountCfg,\n  container: ViewContainerRef,\n  onCleanup: EffectCleanupRegisterFn,\n): void {\n  const host = container.element.nativeElement;\n\n  let sapContainer: { destroy(): void } | null = null;\n  let isDestroyed = false;\n  const sapRequire = (\n    window as unknown as { sap?: { ui: { require: SapUiRequire } } }\n  ).sap?.ui?.require;\n\n  if (sapRequire) {\n    sapRequire(['sap/ui/core/ComponentContainer'], (ComponentContainer) => {\n      if (isDestroyed) return;\n\n      const container = new ComponentContainer({\n        name: cfg.component,\n        manifest: true,\n        async: true,\n        settings: cfg.componentInputs ?? {},\n      });\n\n      container.placeAt(host);\n      sapContainer = container;\n    });\n  } else {\n    console.error('[DashboardCard] SAP UI5 is not available on window.sap');\n  }\n\n  onCleanup(() => {\n    isDestroyed = true;\n    sapContainer?.destroy();\n    host.innerHTML = '';\n  });\n}\n","import { MountCfg } from '../../models';\nimport {\n  EffectCleanupRegisterFn,\n  Renderer2,\n  ViewContainerRef,\n} from '@angular/core';\n\nexport function mountWcCard(\n  cfg: MountCfg,\n  container: ViewContainerRef,\n  onCleanup: EffectCleanupRegisterFn,\n  renderer: Renderer2,\n): void {\n  const host = container.element.nativeElement;\n  const element = renderer.createElement(cfg.component);\n\n  for (const [key, value] of Object.entries(cfg.componentInputs ?? {})) {\n    renderer.setProperty(element, key, value);\n  }\n\n  renderer.appendChild(host, element);\n\n  onCleanup(() => {\n    host.innerHTML = '';\n  });\n}\n","import { DASHBOARD_CARD_DRAG_ORIGIN_CLASS } from '../constants';\nimport { DASHBOARD_I18N_KEYS, DashboardI18nService } from '../i18n';\nimport { CARD_TYPES, CardConfig } from '../models';\nimport { mountAngularCard, mountSapCard, mountWcCard } from './utils';\nimport {\n  Component,\n  Renderer2,\n  ViewContainerRef,\n  ViewEncapsulation,\n  computed,\n  effect,\n  inject,\n  input,\n  output,\n  viewChild,\n} from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport '@ui5/webcomponents-icons/dist/resize-corner.js';\n\n@Component({\n  selector: 'mfp-dashboard-card',\n  imports: [Button, Icon],\n  templateUrl: './dashboard-card.component.html',\n  styleUrl: './dashboard-card.component.scss',\n  encapsulation: ViewEncapsulation.Emulated,\n  host: {\n    '[style.grid-column]': 'gridColumn()',\n    '[style.grid-row]': 'gridRow()',\n  },\n})\nexport class DashboardCard {\n  card = input.required<CardConfig>();\n  editMode = input<boolean>(false);\n  readonly removeCard = output<void>();\n  protected readonly i18n = inject(DashboardI18nService);\n  protected readonly i18nKeys = DASHBOARD_I18N_KEYS;\n  protected readonly componentHostClasses = `component-host ${DASHBOARD_CARD_DRAG_ORIGIN_CLASS}`;\n  protected readonly cardBodyClasses = `card__body ${DASHBOARD_CARD_DRAG_ORIGIN_CLASS}`;\n  protected readonly gridColumn = computed(() => {\n    const width = this.card().w ?? 12;\n    return this.createGridTrack(this.card().x, width);\n  });\n  protected readonly gridRow = computed(() => {\n    const height = this.card().h ?? 100;\n    return this.createGridTrack(this.card().y, height);\n  });\n\n  private host = viewChild('elementHost', { read: ViewContainerRef });\n  private renderer = inject(Renderer2);\n\n  private readonly mountCfg = computed(\n    () => {\n      const c = this.card();\n      return {\n        type: c.type,\n        component: c.component,\n        componentInputs: c.componentInputs,\n      };\n    },\n    {\n      equal: (a, b) =>\n        a.type === b.type &&\n        a.component === b.component &&\n        JSON.stringify(a.componentInputs) === JSON.stringify(b.componentInputs),\n    },\n  );\n\n  constructor() {\n    effect((onCleanup) => {\n      const host = this.host();\n      const mountCfg = this.mountCfg();\n      if (!host || !mountCfg.component) return;\n\n      host.clear();\n      host.element.nativeElement.innerHTML = '';\n\n      switch (mountCfg.type) {\n        case CARD_TYPES.SAP_UI:\n          mountSapCard(mountCfg, host, onCleanup);\n          break;\n        case CARD_TYPES.ANGULAR:\n          mountAngularCard(mountCfg, host, onCleanup);\n          break;\n        case CARD_TYPES.WC:\n        default:\n          mountWcCard(mountCfg, host, onCleanup, this.renderer);\n          break;\n      }\n    });\n  }\n\n  private createGridTrack(start: number | undefined, span: number): string {\n    if (start === undefined) {\n      return `span ${span}`;\n    }\n\n    return `${start + 1} / span ${span}`;\n  }\n}\n","@if (card().component) {\n  <div class=\"component-card\" [attr.data-testid]=\"'dashboard-card-' + card().id\" [class.component-card--editing]=\"editMode()\">\n    @if (editMode()) {\n      <div class=\"remove-wrapper\">\n        <ui5-button\n          class=\"card__remove\"\n          design=\"Default\"\n          icon=\"decline\"\n          [attr.data-testid]=\"'dashboard-card-' + card().id + '-remove'\"\n          [accessibleName]=\"\n            i18n.getTranslation(i18nKeys.REMOVE_CARD) +\n            ': ' +\n            (card().label || card().component)\n          \"\n          (click)=\"removeCard.emit()\"\n        />\n      </div>\n      <ui5-icon\n        aria-hidden=\"true\"\n        class=\"card__resize-indicator\"\n        name=\"resize-corner\"\n        [accessibleName]=\"i18n.getTranslation(i18nKeys.RESIZABLE)\"\n      />\n    }\n    <div\n      [class]=\"componentHostClasses\"\n      [style.pointer-events]=\"editMode() ? 'none' : 'auto'\"\n    >\n      <div #elementHost></div>\n    </div>\n  </div>\n} @else {\n  <div class=\"card\" [attr.data-testid]=\"'dashboard-card-' + card().id\">\n    <div\n      [class]=\"cardBodyClasses\"\n      [style.pointer-events]=\"editMode() ? 'none' : 'auto'\"\n    >\n      <ng-content />\n    </div>\n  </div>\n}\n","import { Component, ViewEncapsulation, inject, input, output } from '@angular/core';\nimport { DASHBOARD_I18N_KEYS, DashboardI18nService } from '../i18n';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Dialog } from '@fundamental-ngx/ui5-webcomponents/dialog';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\nimport '@ui5/webcomponents-icons/dist/alert.js';\n\n/**\n * Confirmation popup shown when the user tries to abandon edit mode while\n * there are unsaved dashboard changes. Emits `confirm` when the user accepts\n * the discard, `cancelled` when they back out.\n */\n@Component({\n  selector: 'mfp-discard-changes-dialog',\n  imports: [Button, Dialog, Title],\n  templateUrl: './discard-changes-dialog.component.html',\n  styleUrl: './discard-changes-dialog.component.scss',\n  encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class DiscardChangesDialog {\n  protected readonly i18n = inject(DashboardI18nService);\n  protected readonly i18nKeys = DASHBOARD_I18N_KEYS;\n\n  open = input<boolean>(false);\n\n  readonly confirm = output<void>();\n  readonly cancelled = output<void>();\n}\n","<ui5-dialog data-testid=\"dashboard-discard-changes-dialog\" state=\"Critical\" [open]=\"open()\" (ui5BeforeClose)=\"cancelled.emit()\">\n  <div class=\"discard-changes-dialog__header\" slot=\"header\">\n    <ui5-title level=\"H5\">{{ i18n.getTranslation(i18nKeys.DISCARD_CHANGES) }}</ui5-title>\n  </div>\n  <div class=\"discard-changes-dialog__body\">\n    {{ i18n.getTranslation(i18nKeys.DISCARD_CONFIRM_BODY) }}\n  </div>\n  <div class=\"discard-changes-dialog__footer\" slot=\"footer\">\n    <ui5-button data-testid=\"dashboard-discard-changes-confirm-btn\" design=\"Emphasized\" (click)=\"confirm.emit()\">{{ i18n.getTranslation(i18nKeys.DISCARD) }}</ui5-button>\n    <ui5-button data-testid=\"dashboard-discard-changes-cancel-btn\" design=\"Transparent\" (click)=\"cancelled.emit()\">{{ i18n.getTranslation(i18nKeys.CANCEL) }}</ui5-button>\n  </div>\n</ui5-dialog>\n","import { CardConfig } from '../models';\nimport { DASHBOARD_I18N_KEYS, DashboardI18nService } from '../i18n';\nimport {\n  Component,\n  ElementRef,\n  ViewEncapsulation,\n  effect,\n  inject,\n  input,\n  output,\n  signal,\n} from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Dialog } from '@fundamental-ngx/ui5-webcomponents/dialog';\nimport { List } from '@fundamental-ngx/ui5-webcomponents/list';\nimport { ListItemCustom } from '@fundamental-ngx/ui5-webcomponents/list-item-custom';\nimport { Switch } from '@fundamental-ngx/ui5-webcomponents/switch';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\n\n@Component({\n  selector: 'mfp-edit-cards-dialog',\n  imports: [Button, Dialog, List, ListItemCustom, Switch, Title],\n  templateUrl: './edit-cards-dialog.component.html',\n  styleUrl: './edit-cards-dialog.component.scss',\n  encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class EditCardsDialog {\n  private readonly host = inject(ElementRef<HTMLElement>);\n  protected readonly i18n = inject(DashboardI18nService);\n  protected readonly i18nKeys = DASHBOARD_I18N_KEYS;\n\n  availableCards = input<CardConfig[]>([]);\n  addedCardsIds = input<Set<string>>(new Set());\n  open = input<boolean>(false);\n\n  readonly confirm = output<{ added: CardConfig[]; removed: string[] }>();\n  readonly cancelled = output<void>();\n\n  selectedIds = signal<Set<string>>(new Set());\n\n  constructor() {\n    effect(() => {\n      if (this.open()) {\n        const initial = new Set(\n          this.availableCards()\n            .filter((ac) => this.addedCardsIds().has(ac.id))\n            .map((ac) => ac.id),\n        );\n        this.selectedIds.set(initial);\n      }\n    });\n  }\n\n  toggle(id: string): void {\n    this.selectedIds.update((set) => {\n      const next = new Set(set);\n      if (next.has(id)) {\n        next.delete(id);\n      } else {\n        next.add(id);\n      }\n      return next;\n    });\n  }\n\n  /**\n   * Tab moves focus across the switches directly, skipping the wrapping\n   * ui5-li-custom rows. Past the last switch Tab goes to the first footer\n   * button; before the first switch Shift+Tab goes to the last footer button.\n   * The dialog's native focus trap takes care of cycling from the buttons\n   * back into the list.\n   */\n  onSwitchKeydown(event: KeyboardEvent, _id: string): void {\n    if (event.key !== 'Tab') {\n      return;\n    }\n    const root: ParentNode =\n      this.host.nativeElement.shadowRoot ?? this.host.nativeElement;\n    const switches = Array.from(\n      root.querySelectorAll('ui5-switch'),\n    ) as HTMLElement[];\n    const buttons = Array.from(\n      root.querySelectorAll('ui5-button'),\n    ) as HTMLElement[];\n    const currentIndex = switches.indexOf(event.currentTarget as HTMLElement);\n    if (currentIndex === -1) {\n      return;\n    }\n    if (event.shiftKey) {\n      const prev = switches[currentIndex - 1];\n      if (prev) {\n        event.preventDefault();\n        event.stopPropagation();\n        prev.focus();\n      }\n      // First switch: let Shift+Tab fall through so the dialog's focus trap\n      // wraps to the last footer button.\n      return;\n    }\n    event.preventDefault();\n    event.stopPropagation();\n    const next = switches[currentIndex + 1];\n    if (next) {\n      next.focus();\n      return;\n    }\n    // Last switch: hand off to the first footer button.\n    buttons[0]?.focus();\n  }\n\n  confirmSave(): void {\n    const availableIds = new Set(this.availableCards().map((ac) => ac.id));\n    const added = this.availableCards().filter(\n      (ac) => this.selectedIds().has(ac.id) && !this.addedCardsIds().has(ac.id),\n    );\n    const removed = [...this.addedCardsIds()].filter(\n      (id) => availableIds.has(id) && !this.selectedIds().has(id),\n    );\n    this.confirm.emit({ added, removed });\n  }\n}\n","<ui5-dialog data-testid=\"dashboard-edit-cards-dialog\" class=\"edit-cards-dialog-container\" [open]=\"open()\" (ui5BeforeClose)=\"cancelled.emit()\">\n  <div class=\"edit-cards-dialog__header\" slot=\"header\">\n    <ui5-title level=\"H5\">{{ i18n.getTranslation(i18nKeys.EDIT_CARDS) }}</ui5-title>\n  </div>\n  <div class=\"edit-cards-dialog\">\n    <ui5-list\n      selectionMode=\"None\"\n      separators=\"Inner\"\n      [noDataText]=\"i18n.getTranslation(i18nKeys.NO_CARDS_AVAILABLE)\"\n    >\n      @for (availableCard of availableCards(); track availableCard.id) {\n        <ui5-li-custom\n          [attr.data-testid]=\"'dashboard-edit-cards-row-' + availableCard.id\"\n          class=\"edit-cards-dialog__list-item-container\"\n          [accessibleName]=\"availableCard.label || availableCard.component\"\n        >\n          <div class=\"edit-cards-dialog__list-item\">\n            <span>{{ availableCard.label || availableCard.component }}</span>\n            <ui5-switch\n              [attr.data-testid]=\"'dashboard-edit-cards-switch-' + availableCard.id\"\n              [accessibleName]=\"availableCard.label || availableCard.component\"\n              [checked]=\"selectedIds().has(availableCard.id)\"\n              (keydown)=\"onSwitchKeydown($event, availableCard.id)\"\n              (ui5Change)=\"toggle(availableCard.id)\"\n            />\n          </div>\n        </ui5-li-custom>\n      }\n    </ui5-list>\n  </div>\n  <div class=\"edit-cards-dialog__footer\" slot=\"footer\">\n    <ui5-button data-testid=\"dashboard-edit-cards-save-btn\" design=\"Emphasized\" (click)=\"confirmSave()\">{{ i18n.getTranslation(i18nKeys.SAVE) }}</ui5-button>\n    <ui5-button data-testid=\"dashboard-edit-cards-cancel-btn\" design=\"Transparent\" (click)=\"cancelled.emit()\">{{ i18n.getTranslation(i18nKeys.CANCEL) }}</ui5-button>\n  </div>\n</ui5-dialog>\n","import { DashboardCard } from '../card/dashboard-card.component';\nimport { CardConfig, SectionConfig } from '../models';\nimport { Component, ViewEncapsulation, inject, input, output } from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { DASHBOARD_I18N_KEYS, DashboardI18nService } from '../i18n';\n\n@Component({\n  selector: 'mfp-dashboard-section',\n  imports: [DashboardCard, Button],\n  templateUrl: './dashboard-section.component.html',\n  styleUrl: './dashboard-section.component.scss',\n  encapsulation: ViewEncapsulation.Emulated,\n  host: {\n    // Section width interpretation:\n    //   - `section.w` undefined OR equal to the active outer grid's column\n    //     count (12) → span the full outer row (`1 / -1`). This is what the\n    //     consumer means by \"full-width section\": fill whatever the dashboard\n    //     is showing right now (4 / 8 / 12 / 14 columns at sm/md/lg/xl).\n    //   - any other explicit `w` → span exactly that many outer columns.\n    //\n    // Without `1 / -1`, a `w: 12` section in an xl grid (14 cols) would only\n    // cover 12 of 14 columns, leaving a dead 2-col gutter on the right and\n    // squeezing the cards inside it relative to the outer grid's units.\n    '[style.grid-column]':\n      'section().w === undefined || section().w === 12 ? \"1 / -1\" : \"span \" + section().w',\n  },\n})\nexport class DashboardSection {\n  section = input.required<SectionConfig>();\n  cards = input<CardConfig[]>([]);\n  /**\n   * Optional override for the section's inner grid column count. Leave unset\n   * (the default) to inherit the responsive defaults from CSS — the section\n   * grid then mirrors the dashboard breakpoints (4/8/12/14 columns) via the\n   * `mfp-dashboard` container query in dashboard-section.component.scss.\n   * Pass an explicit number only when a section needs a fixed column count\n   * regardless of width.\n   */\n  columns = input<number | undefined>(undefined);\n  editMode = input<boolean>(false);\n  protected readonly i18n = inject(DashboardI18nService);\n  protected readonly i18nKeys = DASHBOARD_I18N_KEYS;\n  readonly removeSection = output<void>();\n  readonly removeCard = output<string>();\n}\n","<div\n  class=\"section\"\n  [attr.data-testid]=\"'dashboard-section-' + section().id\"\n  [class.section--edit]=\"editMode() && section().editable !== false\"\n>\n  @if (editMode() && section().editable !== false) {\n    <ui5-button\n      class=\"section__remove\"\n      design=\"Default\"\n      icon=\"decline\"\n      [attr.data-testid]=\"'dashboard-section-' + section().id + '-remove'\"\n      [accessibleName]=\"\n        i18n.getTranslation(i18nKeys.REMOVE_SECTION) +\n        ': ' +\n        (section().title || section().id)\n      \"\n      (click)=\"removeSection.emit()\"\n    />\n  }\n  @if (section().title) {\n    <div class=\"section__header\">\n      <span class=\"section__title\" [attr.data-testid]=\"'dashboard-section-' + section().id + '-title'\">{{ section().title }}</span>\n    </div>\n  }\n  <div class=\"section__grid\" [style.--cols]=\"columns() ?? null\">\n    @for (card of cards(); track card.id) {\n      <mfp-dashboard-card\n        [card]=\"card\"\n        [editMode]=\"editMode() && section().editable !== false\"\n        (removeCard)=\"removeCard.emit($any(card.id))\"\n      />\n    }\n  </div>\n</div>\n","import { Component, ViewEncapsulation, inject, input, output } from '@angular/core';\nimport { DASHBOARD_I18N_KEYS, DashboardI18nService } from '../i18n';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Dialog } from '@fundamental-ngx/ui5-webcomponents/dialog';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\nimport '@ui5/webcomponents-icons/dist/alert.js';\n\n/**\n * Confirmation popup shown when the user attempts to navigate away from the\n * dashboard while there are unsaved edit-mode changes. The host (the\n * dashboard, an Angular CanDeactivate guard, a Luigi navigation listener,\n * etc.) is responsible for routing its intercepted navigation through this\n * dialog and acting on the emitted decision:\n *  - `save`      → persist changes, then proceed with navigation\n *  - `discard`   → revert changes, then proceed with navigation\n *  - `cancelled` → abort navigation, stay on the page\n */\n@Component({\n  selector: 'mfp-unsaved-changes-dialog',\n  imports: [Button, Dialog, Title],\n  templateUrl: './unsaved-changes-dialog.component.html',\n  styleUrl: './unsaved-changes-dialog.component.scss',\n  encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class UnsavedChangesDialog {\n  protected readonly i18n = inject(DashboardI18nService);\n  protected readonly i18nKeys = DASHBOARD_I18N_KEYS;\n\n  open = input<boolean>(false);\n\n  readonly save = output<void>();\n  readonly discard = output<void>();\n  readonly cancelled = output<void>();\n}\n","<ui5-dialog data-testid=\"dashboard-unsaved-changes-dialog\" state=\"Critical\" [open]=\"open()\" (ui5BeforeClose)=\"cancelled.emit()\">\n  <div class=\"unsaved-changes-dialog__header\" slot=\"header\">\n    <ui5-title level=\"H5\">{{ i18n.getTranslation(i18nKeys.UNSAVED_CHANGES) }}</ui5-title>\n  </div>\n  <div class=\"unsaved-changes-dialog__body\">\n    {{ i18n.getTranslation(i18nKeys.UNSAVED_NAV_BODY) }}\n  </div>\n  <div class=\"unsaved-changes-dialog__footer\" slot=\"footer\">\n    <ui5-button data-testid=\"dashboard-unsaved-changes-save-btn\" design=\"Emphasized\" (click)=\"save.emit()\">{{ i18n.getTranslation(i18nKeys.SAVE) }}</ui5-button>\n    <ui5-button data-testid=\"dashboard-unsaved-changes-discard-btn\" design=\"Transparent\" (click)=\"discard.emit()\">{{ i18n.getTranslation(i18nKeys.DISCARD) }}</ui5-button>\n    <ui5-button data-testid=\"dashboard-unsaved-changes-cancel-btn\" design=\"Transparent\" (click)=\"cancelled.emit()\">{{ i18n.getTranslation(i18nKeys.CANCEL) }}</ui5-button>\n  </div>\n</ui5-dialog>\n","export function getAllowedResizeWidths(\n  maxWidth: number,\n  columnCount: number,\n  minWidth = 1,\n  effectiveMax = columnCount,\n): number[] {\n  return [1, 2, maxWidth]\n    .map((w) => Math.min(Math.max(w, minWidth), columnCount))\n    .filter((w, i, list) => list.indexOf(w) === i && w <= effectiveMax)\n    .sort((a, b) => a - b);\n}\n\nexport function resolveResizeWidthStep(\n  rawWidth: number,\n  maxWidth: number,\n  columnCount: number,\n  minWidth = 1,\n  effectiveMax = columnCount,\n): number {\n  const allowed = getAllowedResizeWidths(maxWidth, columnCount, minWidth, effectiveMax);\n\n  if (!allowed.length) {\n    return effectiveMax;\n  }\n\n  return allowed.reduce((best, candidate) => {\n    return Math.abs(candidate - rawWidth) <= Math.abs(best - rawWidth)\n      ? candidate\n      : best;\n  }, allowed[0]);\n}\n","import type { GridStackNode } from 'gridstack';\nimport type { GridStackEngine } from 'gridstack/dist/gridstack-engine';\n\nexport type ZFlowGridStackNode = GridStackNode & {\n  zFlowOrder?: number;\n};\n\ntype NotifyableGridStackEngine = GridStackEngine & {\n  _notify?: () => unknown;\n};\n\nexport function hasZFlowOrder(nodes: ZFlowGridStackNode[]): boolean {\n  return nodes.some((n) => n.zFlowOrder !== undefined);\n}\n\nexport function syncNodeOrderFromLayout(nodes: ZFlowGridStackNode[]): void {\n  const sorted = [...nodes].sort(compareNodesByLayoutPosition);\n\n  sorted.forEach((n, i) => {\n    n.zFlowOrder = i;\n  });\n}\n\nexport function seedNodeOrder(nodes: ZFlowGridStackNode[]): void {\n  if (hasZFlowOrder(nodes)) return;\n\n  syncNodeOrderFromLayout(nodes);\n}\n\nexport function normalizeNodeOrder(nodes: ZFlowGridStackNode[]): void {\n  seedNodeOrder(nodes);\n  sortNodesByZFlowOrder(nodes).forEach((node, index) => {\n    node.zFlowOrder = index;\n  });\n}\n\nexport function sortNodesByZFlowOrder(\n  nodes: ZFlowGridStackNode[],\n): ZFlowGridStackNode[] {\n  return [...nodes].sort((a, b) => {\n    if (a.zFlowOrder !== undefined && b.zFlowOrder !== undefined) {\n      return a.zFlowOrder - b.zFlowOrder;\n    }\n    if (a.zFlowOrder !== undefined) return -1;\n    if (b.zFlowOrder !== undefined) return 1;\n    const ay = a.y ?? 0;\n    const by = b.y ?? 0;\n    if (ay !== by) return ay - by;\n    return (a.x ?? 0) - (b.x ?? 0);\n  });\n}\n\nfunction compareNodesByLayoutPosition(\n  a: ZFlowGridStackNode,\n  b: ZFlowGridStackNode,\n): number {\n  const ay = a.y ?? 0;\n  const by = b.y ?? 0;\n  if (ay !== by) return ay - by;\n  return (a.x ?? 0) - (b.x ?? 0);\n}\n\nexport interface ProjectedNode {\n  id: string;\n  row: number;\n  x: number;\n  y: number;\n  w: number;\n  h: number;\n}\n\nexport interface ZFlowRowItem {\n  id?: string;\n  x?: number;\n  w?: number;\n}\n\nexport interface ZFlowDragRect {\n  leftPx: number;\n  topPx: number;\n  widthPx: number;\n  heightPx: number;\n}\n\nconst PROJECTED_SLOT_OVERLAP_THRESHOLD = 0.5;\n\nexport function getZFlowRowHeight(nodes: ZFlowGridStackNode[]): number {\n  return Math.max(...nodes.map((n) => n.h ?? 1), 1);\n}\n\nexport function projectZFlowLayout(\n  nodes: ZFlowGridStackNode[],\n  columnCount: number,\n): ProjectedNode[] {\n  const result: ProjectedNode[] = [];\n  let curX = 0;\n  let curRow = 0;\n  const rowHeight = getZFlowRowHeight(nodes);\n\n  for (const node of nodes) {\n    if (!node.id) continue;\n    const w = Math.min(node.w ?? 1, columnCount);\n    const h = node.h ?? rowHeight;\n\n    if (curX > 0 && curX + w > columnCount) {\n      curX = 0;\n      curRow++;\n    }\n\n    result.push({\n      id: node.id,\n      row: curRow,\n      x: curX,\n      y: curRow * rowHeight,\n      w,\n      h,\n    });\n    curX += w;\n  }\n\n  return result;\n}\n\nexport function resolveDropRowFromRect(\n  dragRectTopPx: number,\n  dragRectHeightPx: number,\n  rowHeightPx: number,\n  rowCount: number,\n  previousRow: number,\n): number {\n  if (rowHeightPx <= 0 || rowCount <= 0) return previousRow;\n\n  const clampedPreviousRow = Math.max(0, Math.min(previousRow, rowCount - 1));\n  const dragBottomPx = dragRectTopPx + dragRectHeightPx;\n  let bestRow = clampedPreviousRow;\n  let bestOverlap = 0;\n\n  for (let row = 0; row < rowCount; row++) {\n    const rowTopPx = row * rowHeightPx;\n    const rowBottomPx = rowTopPx + rowHeightPx;\n    const overlap = Math.max(\n      0,\n      Math.min(dragBottomPx, rowBottomPx) - Math.max(dragRectTopPx, rowTopPx),\n    );\n\n    if (overlap > bestOverlap) {\n      bestOverlap = overlap;\n      bestRow = row;\n    }\n  }\n\n  return bestOverlap > 0 ? bestRow : clampedPreviousRow;\n}\n\nexport function resolveInsertionSlotFromRow(\n  dragRectCenterXPx: number,\n  rowNodes: ZFlowRowItem[],\n  sourceId: string,\n  cellWidthPx: number,\n): number {\n  const candidates = rowNodes.filter((n) => n.id !== sourceId);\n  if (candidates.length === 0) return 0;\n\n  for (let i = 0; i < candidates.length; i++) {\n    const n = candidates[i];\n    const nodeX = (n.x ?? 0) * cellWidthPx;\n    const nodeW = (n.w ?? 1) * cellWidthPx;\n    const nodeMid = nodeX + nodeW / 2;\n\n    if (dragRectCenterXPx <= nodeMid) return i;\n  }\n\n  return candidates.length;\n}\n\nexport function reorderByInsertionSlot(\n  orderedIds: string[],\n  sourceId: string,\n  targetSlot: number,\n): string[] {\n  const withoutSource = orderedIds.filter((id) => id !== sourceId);\n  const clamped = Math.max(0, Math.min(targetSlot, withoutSource.length));\n  withoutSource.splice(clamped, 0, sourceId);\n  return withoutSource;\n}\n\nexport function resolveInsertionSlotFromProjectedRect(\n  orderedNodes: ZFlowGridStackNode[],\n  sourceId: string,\n  columnCount: number,\n  dragRect: ZFlowDragRect,\n  cellWidthPx: number,\n  cellHeightPx: number,\n  previousSlot: number,\n): number {\n  if (cellWidthPx <= 0 || cellHeightPx <= 0) {\n    return previousSlot;\n  }\n\n  const orderedIds = orderedNodes\n    .filter((node) => node.id)\n    .map((node) => node.id as string);\n  const nodesById = new Map(\n    orderedNodes\n      .filter((node): node is ZFlowGridStackNode & { id: string } => !!node.id)\n      .map((node) => [node.id, node]),\n  );\n  const idsWithoutSource = orderedIds.filter((id) => id !== sourceId);\n  const sourceNode = nodesById.get(sourceId);\n\n  if (!sourceNode) return previousSlot;\n\n  let bestSlot = previousSlot;\n  let bestOverlapRatio = 0;\n  let bestProjectedSource: ProjectedNode | undefined;\n\n  for (let slot = 0; slot <= idsWithoutSource.length; slot++) {\n    const candidateIds = reorderByInsertionSlot(orderedIds, sourceId, slot);\n    const candidateNodes = candidateIds\n      .map((id) => nodesById.get(id))\n      .filter((node): node is ZFlowGridStackNode & { id: string } => !!node);\n    const projectedSource = projectZFlowLayout(\n      candidateNodes,\n      columnCount,\n    ).find((projected) => projected.id === sourceId);\n\n    if (!projectedSource) continue;\n\n    const overlapAreaPx = getRectOverlapAreaPx(dragRect, {\n      leftPx: projectedSource.x * cellWidthPx,\n      topPx: projectedSource.y * cellHeightPx,\n      widthPx: projectedSource.w * cellWidthPx,\n      heightPx: projectedSource.h * cellHeightPx,\n    });\n    const projectedAreaPx =\n      projectedSource.w * cellWidthPx * projectedSource.h * cellHeightPx;\n    const overlapRatio =\n      projectedAreaPx > 0 ? overlapAreaPx / projectedAreaPx : 0;\n\n    if (\n      overlapRatio > bestOverlapRatio ||\n      (overlapRatio === bestOverlapRatio &&\n        bestProjectedSource &&\n        isSameProjectedPosition(projectedSource, bestProjectedSource) &&\n        slot > bestSlot)\n    ) {\n      bestOverlapRatio = overlapRatio;\n      bestProjectedSource = projectedSource;\n      bestSlot = slot;\n    }\n  }\n\n  if (bestOverlapRatio > PROJECTED_SLOT_OVERLAP_THRESHOLD) return bestSlot;\n\n  return Math.max(0, Math.min(previousSlot, idsWithoutSource.length));\n}\n\nfunction isSameProjectedPosition(a: ProjectedNode, b: ProjectedNode): boolean {\n  return a.x === b.x && a.y === b.y && a.w === b.w && a.h === b.h;\n}\n\nfunction getRectOverlapAreaPx(a: ZFlowDragRect, b: ZFlowDragRect): number {\n  const overlapWidthPx = Math.max(\n    0,\n    Math.min(a.leftPx + a.widthPx, b.leftPx + b.widthPx) -\n      Math.max(a.leftPx, b.leftPx),\n  );\n  const overlapHeightPx = Math.max(\n    0,\n    Math.min(a.topPx + a.heightPx, b.topPx + b.heightPx) -\n      Math.max(a.topPx, b.topPx),\n  );\n\n  return overlapWidthPx * overlapHeightPx;\n}\n\nexport function applyProjectedLayout(\n  nodes: ZFlowGridStackNode[],\n  projected: ProjectedNode[],\n): void {\n  for (const proj of projected) {\n    const node = nodes.find((n) => n.id === proj.id);\n    if (!node) continue;\n    if (\n      node.x !== proj.x ||\n      node.y !== proj.y ||\n      node.w !== proj.w ||\n      node.h !== proj.h\n    ) {\n      node.x = proj.x;\n      node.y = proj.y;\n      node.w = proj.w;\n      node.h = proj.h;\n      (node as unknown as { _dirty: boolean })._dirty = true;\n    }\n  }\n}\n\nexport function notifyEngine(engine: GridStackEngine): void {\n  (engine as NotifyableGridStackEngine)._notify?.();\n}\n","import { resolveResizeWidthStep } from './resize.helpers';\nimport {\n  type ZFlowGridStackNode,\n  applyProjectedLayout,\n  getZFlowRowHeight,\n  normalizeNodeOrder,\n  notifyEngine,\n  projectZFlowLayout,\n  reorderByInsertionSlot,\n  resolveDropRowFromRect,\n  resolveInsertionSlotFromProjectedRect,\n  seedNodeOrder,\n  sortNodesByZFlowOrder,\n  syncNodeOrderFromLayout,\n} from './z-flow.helpers';\nimport type { GridStackMoveOpts, GridStackNode } from 'gridstack';\nimport { GridStackEngine } from 'gridstack/dist/gridstack-engine';\n\ninterface LayoutSnapshot {\n  node: ZFlowGridStackNode;\n  x?: number;\n  y?: number;\n  w?: number;\n  h?: number;\n}\n\nexport class ZflowGridStackEngine extends GridStackEngine {\n  override moveNodeCheck(\n    node: GridStackNode,\n    opts: GridStackMoveOpts,\n  ): boolean {\n    if (opts.resizing) {\n      return this.moveNodeCheckWithSteppedResize(node, opts);\n    }\n\n    if ((node as unknown as { _moving?: boolean })._moving && !opts.nested) {\n      return this.moveNodeCheckWithZFlowDrag(node, opts);\n    }\n\n    return super.moveNodeCheck(node, opts);\n  }\n\n  private moveNodeCheckWithSteppedResize(\n    node: GridStackNode,\n    opts: GridStackMoveOpts,\n  ): boolean {\n    if (!node.id || opts.w === undefined)\n      return super.moveNodeCheck(node, opts);\n\n    const nodes = this.nodes as ZFlowGridStackNode[];\n    const sourceNode = nodes.find((n) => n.id === node.id);\n    if (!sourceNode) return super.moveNodeCheck(node, opts);\n\n    syncNodeOrderFromLayout(nodes);\n\n    const snapshot = this.takeLayoutSnapshot(nodes);\n    const effectiveMax = this.column - (sourceNode.x ?? 0);\n    const nextWidth = resolveResizeWidthStep(\n      opts.w,\n      sourceNode.maxW ?? this.column,\n      this.column,\n      sourceNode.minW ?? 1,\n      effectiveMax,\n    );\n\n    sourceNode.w = nextWidth;\n    opts.w = nextWidth;\n    opts.x = sourceNode.x;\n    opts.y = sourceNode.y;\n    opts.h = sourceNode.h;\n\n    const ordered = sortNodesByZFlowOrder(nodes);\n    const projected = projectZFlowLayout(ordered, this.column);\n    applyProjectedLayout(nodes, projected);\n\n    const changed = this.markLayoutChangesDirty(snapshot);\n    if (!changed) return false;\n\n    notifyEngine(this);\n    return true;\n  }\n\n  commitZFlowLayout(): boolean {\n    const nodes = this.nodes as ZFlowGridStackNode[];\n    normalizeNodeOrder(nodes);\n\n    const snapshot = this.takeLayoutSnapshot(nodes);\n    const ordered = sortNodesByZFlowOrder(nodes);\n    const projected = projectZFlowLayout(ordered, this.column);\n    applyProjectedLayout(nodes, projected);\n\n    const changed = this.markLayoutChangesDirty(snapshot);\n    if (!changed) return false;\n\n    notifyEngine(this);\n    return true;\n  }\n\n  syncZFlowOrderFromLayout(): void {\n    syncNodeOrderFromLayout(this.nodes as ZFlowGridStackNode[]);\n  }\n\n  private takeLayoutSnapshot(nodes: ZFlowGridStackNode[]): LayoutSnapshot[] {\n    return nodes.map((n) => ({\n      node: n,\n      x: n.x,\n      y: n.y,\n      w: n.w,\n      h: n.h,\n    }));\n  }\n\n  private markLayoutChangesDirty(snapshot: LayoutSnapshot[]): boolean {\n    let changed = false;\n\n    for (const { node, x, y, w, h } of snapshot) {\n      if (node.x === x && node.y === y && node.w === w && node.h === h) {\n        continue;\n      }\n\n      (node as unknown as { _dirty: boolean })._dirty = true;\n      changed = true;\n    }\n\n    return changed;\n  }\n\n  private moveNodeCheckWithZFlowDrag(\n    node: GridStackNode,\n    opts: GridStackMoveOpts,\n  ): boolean {\n    if (!node.id) return super.moveNodeCheck(node, opts);\n\n    const nodes = this.nodes as ZFlowGridStackNode[];\n    seedNodeOrder(nodes);\n\n    const ordered = sortNodesByZFlowOrder(nodes);\n    const orderedIds = ordered.filter((n) => n.id).map((n) => n.id as string);\n\n    const rect = opts.rect;\n    const cellWidth = opts.cellWidth ?? 1;\n    const cellHeight = opts.cellHeight ?? 60;\n    const rowHeight = getZFlowRowHeight(ordered);\n    const rowHeightPx = rowHeight * cellHeight;\n\n    const projected = projectZFlowLayout(ordered, this.column);\n    const rowCount =\n      projected.length > 0 ? Math.max(...projected.map((p) => p.row)) + 1 : 1;\n\n    const sourceNode = nodes.find((n) => n.id === node.id) as\n      | ZFlowGridStackNode\n      | undefined;\n    const sourceProjected = projected.find((p) => p.id === node.id);\n    const previousRow = sourceProjected?.row ?? 0;\n\n    let targetRow: number;\n    if (rect) {\n      const rectTop = (rect as unknown as { top?: number }).top ?? rect.y ?? 0;\n      const rectHeight =\n        (rect as unknown as { height?: number }).height ??\n        rect.h ??\n        rowHeightPx;\n      targetRow = resolveDropRowFromRect(\n        rectTop,\n        rectHeight,\n        rowHeightPx,\n        rowCount,\n        previousRow,\n      );\n    } else {\n      targetRow = Math.floor((opts.y ?? sourceNode?.y ?? 0) / rowHeight);\n    }\n\n    targetRow = Math.max(0, Math.min(targetRow, rowCount - 1));\n\n    const rowNodes = projected\n      .filter((p) => p.row === targetRow)\n      .map((p) => ({ id: p.id, x: p.x, w: p.w }));\n\n    const idsWithoutSource = orderedIds.filter((id) => id !== node.id);\n    let absoluteSlot: number;\n\n    if (rect) {\n      const rectLeft =\n        (rect as unknown as { left?: number }).left ?? rect.x ?? 0;\n      const rectTop = (rect as unknown as { top?: number }).top ?? rect.y ?? 0;\n      const rectWidth =\n        (rect as unknown as { width?: number }).width ?? rect.w ?? cellWidth;\n      const rectHeight =\n        (rect as unknown as { height?: number }).height ??\n        rect.h ??\n        rowHeightPx;\n      absoluteSlot = resolveInsertionSlotFromProjectedRect(\n        ordered,\n        node.id as string,\n        this.column,\n        {\n          leftPx: rectLeft,\n          topPx: rectTop,\n          widthPx: rectWidth,\n          heightPx: rectHeight,\n        },\n        cellWidth,\n        cellHeight,\n        orderedIds.indexOf(node.id as string),\n      );\n    } else {\n      const targetX = opts.x ?? sourceNode?.x ?? 0;\n      const insertionSlotInRow = rowNodes.filter((n) => {\n        const proj = projected.find((p) => p.id === n.id);\n        return proj && proj.x <= targetX && n.id !== node.id;\n      }).length;\n\n      const rowIdsWithoutSource = rowNodes\n        .filter((n) => n.id && n.id !== node.id)\n        .map((n) => n.id as string);\n\n      if (rowIdsWithoutSource.length === 0) {\n        absoluteSlot = orderedIds.indexOf(node.id as string);\n      } else {\n        const firstRowIdxInFull = idsWithoutSource.indexOf(\n          rowIdsWithoutSource[0],\n        );\n        absoluteSlot = firstRowIdxInFull + insertionSlotInRow;\n      }\n    }\n\n    absoluteSlot = Math.max(0, Math.min(absoluteSlot, idsWithoutSource.length));\n\n    const newOrderedIds = reorderByInsertionSlot(\n      orderedIds,\n      node.id as string,\n      absoluteSlot,\n    );\n    const orderChanged = newOrderedIds.some((id, i) => id !== orderedIds[i]);\n    if (!orderChanged) return false;\n\n    newOrderedIds.forEach((id, idx) => {\n      const n = nodes.find((nn) => nn.id === id);\n      if (n) n.zFlowOrder = idx;\n    });\n\n    const projectedSource = projectZFlowLayout(\n      sortNodesByZFlowOrder(nodes),\n      this.column,\n    ).find((projected) => projected.id === node.id);\n\n    if (projectedSource) {\n      node.x = projectedSource.x;\n      node.y = projectedSource.y;\n      node.w = projectedSource.w;\n      node.h = projectedSource.h;\n      (node as unknown as { _dirty: boolean })._dirty = true;\n      notifyEngine(this);\n    }\n\n    return true;\n  }\n}\n","import {\n  DASHBOARD_BREAKPOINTS,\n  DashboardBreakpoint,\n  ZFLOW_DASHBOARD_BREAKPOINTS,\n} from '../../../constants/breakpoints';\nimport { ZflowGridStackEngine } from '../zflow/z-flow-engine';\nimport { GridStackEngine } from 'gridstack/dist/gridstack-engine';\n\nexport interface EngineProfile {\n  /** GridStack engine class, or undefined to use GridStack's native engine. */\n  engineClass: typeof GridStackEngine | undefined;\n  /** Column breakpoint table fed to GridStack columnOpts. */\n  breakpoints: readonly DashboardBreakpoint[];\n  /** Column counts for [sm, md, lg, xl] page size. Pushed to CSS vars so the section grids match. */\n  sectionColumns: readonly [number, number, number, number];\n  /** When true, all loose cards get a fixed h/maxH from the engine's config. */\n  fixedCardHeight: boolean;\n  /** When true, the XL-page width swap (3↔4) runs. */\n  xlWidthSwap: boolean;\n  /** When true, the origin position is rendered. */\n  renderOriginPosition: boolean;\n}\n\nconst getColumns = (breakpoints: readonly DashboardBreakpoint[]) =>\n  breakpoints.map((bp) => bp.c).reverse() as [number, number, number, number];\n\nexport const ENGINE_PROFILES = {\n  zFlow: {\n    engineClass: ZflowGridStackEngine,\n    breakpoints: ZFLOW_DASHBOARD_BREAKPOINTS,\n    sectionColumns: [1, 2, 3, 3],\n    fixedCardHeight: true,\n    xlWidthSwap: true,\n    renderOriginPosition: true,\n  },\n  default: {\n    engineClass: undefined,\n    breakpoints: DASHBOARD_BREAKPOINTS,\n    sectionColumns: getColumns(DASHBOARD_BREAKPOINTS),\n    fixedCardHeight: false,\n    xlWidthSwap: false,\n    renderOriginPosition: false,\n  },\n} as const satisfies Record<string, EngineProfile>;\n\n/** @deprecated Use ENGINE_PROFILES and EngineProfile instead. */\nexport type EngineClass = typeof GridStackEngine | undefined;\n","import { ButtonSettings } from '../../models';\nimport { DashboardCard } from '../card/dashboard-card.component';\nimport { addComponentToRegistry } from '../card/utils';\nimport { CELL_HEIGHT, COMPACT_BREAKPOINT, XL_PAGE } from '../constants';\nimport { DiscardChangesDialog } from '../discard-changes-dialog/discard-changes-dialog.component';\nimport { EditCardsDialog } from '../edit-cards-dialog/edit-cards-dialog.component';\nimport {\n  DASHBOARD_I18N_KEYS,\n  DashboardI18nService,\n  DashboardTranslations,\n  EN_DEFAULTS,\n} from '../i18n';\nimport { CardConfig, DashboardConfig, SectionConfig } from '../models';\nimport { DashboardSection } from '../section/dashboard-section.component';\nimport { UnsavedChangesDialog } from '../unsaved-changes-dialog/unsaved-changes-dialog.component';\nimport { ENGINE_PROFILES, EngineProfile } from './engines/contants/engines';\nimport { ZflowGridStackEngine } from './engines/zflow/z-flow-engine';\nimport {\n  Component,\n  ElementRef,\n  Injector,\n  OnDestroy,\n  OnInit,\n  SecurityContext,\n  Type,\n  ViewEncapsulation,\n  afterNextRender,\n  computed,\n  effect,\n  inject,\n  input,\n  linkedSignal,\n  model,\n  output,\n  signal,\n  viewChild,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport { Menu } from '@fundamental-ngx/ui5-webcomponents/menu';\nimport { MenuItem } from '@fundamental-ngx/ui5-webcomponents/menu-item';\nimport { MenuSeparator } from '@fundamental-ngx/ui5-webcomponents/menu-separator';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\nimport '@ui5/webcomponents-icons/dist/action-settings.js';\nimport '@ui5/webcomponents-icons/dist/menu2.js';\nimport '@ui5/webcomponents-icons/dist/user-edit.js';\nimport { GridStackNode, GridStackOptions, GridStackPosition } from 'gridstack';\nimport {\n  GridstackComponent,\n  GridstackItemComponent,\n} from 'gridstack/dist/angular';\n\ndocument.body.classList.add('ui5-content-density-compact');\n\n@Component({\n  selector: 'mfp-dashboard',\n  imports: [\n    GridstackComponent,\n    GridstackItemComponent,\n    DiscardChangesDialog,\n    EditCardsDialog,\n    UnsavedChangesDialog,\n    DashboardSection,\n    DashboardCard,\n    Button,\n    Icon,\n    Menu,\n    MenuItem,\n    MenuSeparator,\n    Title,\n  ],\n  templateUrl: './dashboard.component.html',\n  styleUrl: './dashboard.component.scss',\n  providers: [DashboardI18nService],\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    '[style.background-image]':\n      'config().backgroundImageUrl ? \"url(\" + config().backgroundImageUrl + \")\" : null',\n    '[style.background-size]':\n      'backgroundImageHeight() ? \"100% \" + backgroundImageHeight() + \"px\" : \"100% auto\"',\n  },\n})\nexport class Dashboard implements OnInit, OnDestroy {\n  static registerAngularComponents(componentTypes: Type<unknown>[]): void {\n    addComponentToRegistry(componentTypes);\n  }\n  private readonly hostEl = inject(ElementRef<HTMLElement>);\n  private readonly injector = inject(Injector);\n  private readonly sanitizer = inject(DomSanitizer);\n  protected readonly i18nService = inject(DashboardI18nService);\n\n  config = input.required<DashboardConfig>();\n  sections = model<SectionConfig[]>([]);\n  cards = model<CardConfig[]>([]);\n  availableCards = input<CardConfig[]>([]);\n  /** Extra action buttons rendered in the toolbar alongside the built-in ones. */\n  customActions = input<ButtonSettings[]>([]);\n  /**\n   * Full set of dashboard-chrome translations (title, description, toolbar\n   * buttons, dialogs, a11y labels). The library ships English only. Provide a\n   * complete `DashboardTranslations` to render the dashboard in another\n   * language, and swap it to switch language. When `null`, `undefined`, or an\n   * empty object, the built-in English defaults (`EN_DEFAULTS`) are used. See\n   * `DashboardTranslations` / `DashboardI18nKey` for the full key contract.\n   */\n  i18n = input<DashboardTranslations | null | undefined>(EN_DEFAULTS);\n\n  readonly saved = output<{ sections: SectionConfig[]; cards: CardConfig[] }>();\n  readonly actionButtonClick = output<{\n    event: MouseEvent;\n    action: ButtonSettings;\n  }>();\n  readonly unsavedChangesChange = output<boolean>();\n\n  protected readonly i18nKeys = DASHBOARD_I18N_KEYS;\n\n  /** True once the user has dragged/resized any grid item while in edit mode. */\n  private gridDirty = signal(false);\n  private isXLPage = signal(true);\n\n  editMode = signal(false);\n  compactToolbar = signal(false);\n  toolbarMenuOpen = signal(false);\n  cardDialogOpen = signal(false);\n  discardDialogOpen = signal(false);\n  unsavedNavDialogOpen = signal(false);\n  backgroundImageHeight = signal<number | null>(null);\n  dragOriginStyle = signal<{\n    top: string;\n    left: string;\n    width: string;\n    height: string;\n  } | null>(null);\n\n  protected hasUnsavedChanges = computed(() => {\n    if (!this.editMode()) return false;\n    if (this.gridDirty()) return true;\n    return (\n      JSON.stringify(this.sections()) !== this.sectionsSnapshotJson ||\n      JSON.stringify(this.cards()) !== this.cardsSnapshotJson\n    );\n  });\n  protected safeTitle = computed((): SafeHtml => {\n    const clean =\n      this.sanitizer.sanitize(\n        SecurityContext.HTML,\n        this.i18nService.getTranslation(DASHBOARD_I18N_KEYS.TITLE),\n      ) ?? '';\n    return this.sanitizer.bypassSecurityTrustHtml(clean);\n  });\n  protected safeDescription = computed((): SafeHtml | null => {\n    const desc = this.i18nService.getTranslation(\n      DASHBOARD_I18N_KEYS.DESCRIPTION,\n    );\n    if (!desc) return null;\n\n    const clean = this.sanitizer.sanitize(SecurityContext.HTML, desc) ?? '';\n    return this.sanitizer.bypassSecurityTrustHtml(clean);\n  });\n\n  protected engineProfile = computed(\n    (): EngineProfile =>\n      this.config().zFlow ? ENGINE_PROFILES.zFlow : ENGINE_PROFILES.default,\n  );\n\n  protected gridStackEngine = computed(() => this.engineProfile().engineClass);\n\n  protected gridBreakpoints = computed(() => [\n    ...this.engineProfile().breakpoints,\n  ]);\n\n  protected columnVars = computed(() => {\n    const [sm, md, lg, xl] = this.engineProfile().sectionColumns;\n    return {\n      '--dashboard-cols-sm': sm,\n      '--dashboard-cols-md': md,\n      '--dashboard-cols-lg': lg,\n      '--dashboard-cols-xl': xl,\n    };\n  });\n\n  protected addedCardsIds = computed(\n    () => new Set(this.cards().map((c) => c.id)),\n  );\n\n  protected editViewButton = computed(() => ({\n    icon: 'action-settings',\n    design: 'Transparent' as const,\n    tooltip: this.i18nService.getTranslation(\n      DASHBOARD_I18N_KEYS.EDIT_HOME_BUTTON,\n    ),\n    ...this.config().buttonsSettings?.editViewButton,\n    text: this.i18nService.getTranslation(DASHBOARD_I18N_KEYS.EDIT_HOME_BUTTON),\n  }));\n  protected editCardsButton = computed(() => ({\n    icon: '',\n    design: 'Default' as const,\n    tooltip: '',\n    ...this.config().buttonsSettings?.editCardsButton,\n    text: this.i18nService.getTranslation(DASHBOARD_I18N_KEYS.EDIT_CARDS_BUTTON),\n  }));\n\n  protected sectionCards = computed(() => {\n    const all = this.cards();\n    return (sectionId: string) => all.filter((c) => c.sectionId === sectionId);\n  });\n  protected looseCards = linkedSignal(() => {\n    const loose = this.cards().filter((c) => !c.sectionId);\n    const cardHeight = this.config().zFlow?.cardHeight;\n    if (!this.engineProfile().fixedCardHeight || cardHeight === undefined)\n      return loose;\n    return loose.map((c) => ({\n      ...c,\n      h: cardHeight,\n      maxH: cardHeight,\n      minH: cardHeight,\n    }));\n  });\n\n  protected gridOptions = computed(\n    (): GridStackOptions => ({\n      cellHeight: CELL_HEIGHT,\n      sizeToContent: true,\n      disableResize: !this.editMode(),\n      disableDrag: !this.editMode(),\n      marginBottom: 0,\n      marginLeft: 0,\n      marginRight: 0,\n      engineClass: this.gridStackEngine(),\n      columnOpts: {\n        // Source of truth: ../constants/breakpoints.ts — active profile's\n        // breakpoints (paired with ../constants/_breakpoints.scss for the\n        // section grid's container queries via --dashboard-cols-* CSS vars).\n        breakpoints: this.gridBreakpoints(),\n      },\n    }),\n  );\n\n  /** JSON snapshots of sections/cards taken on entering edit mode, used to detect changes. */\n  private sectionsSnapshotJson = '';\n  private cardsSnapshotJson = '';\n  private sectionsSnapshot: SectionConfig[] = [];\n  private cardsSnapshot: CardConfig[] = [];\n\n  private gridStack = viewChild.required<GridstackComponent>('grid');\n  private addCardBtn = viewChild<Button>('editCardsBtn');\n  private resizeObserver?: ResizeObserver;\n  private cardsPosition = new Map<string, GridStackPosition>();\n\n  /** Callback that resumes the intercepted navigation once the user resolves the dialog. */\n  private pendingNavigation: (() => void) | null = null;\n  /** beforeunload handler kept on instance so add/removeEventListener pair up. */\n  private readonly beforeUnloadHandler = (event: BeforeUnloadEvent): void => {\n    if (this.hasUnsavedChanges()) {\n      event.preventDefault();\n      // Required by older browsers; the string itself is ignored — modern\n      // browsers always render their own generic prompt.\n      event.returnValue = '';\n    }\n  };\n\n  constructor() {\n    effect(() => {\n      this.unsavedChangesChange.emit(this.hasUnsavedChanges());\n    });\n    effect(() => {\n      const supplied = this.i18n();\n      const resolved =\n        supplied && Object.keys(supplied).length > 0 ? supplied : EN_DEFAULTS;\n      this.i18nService.overrides.set(resolved);\n    });\n    effect((onCleanup) => {\n      const url = this.config().backgroundImageUrl;\n      this.backgroundImageHeight.set(null);\n      if (!url) return;\n      const img = new Image();\n      img.onload = () => {\n        this.backgroundImageHeight.set(img.naturalHeight);\n      };\n      img.src = url;\n      onCleanup(() => {\n        img.onload = null;\n      });\n    });\n  }\n\n  ngOnInit(): void {\n    this.resizeObserver = new ResizeObserver((entries) => {\n      const width = entries[0]?.contentRect.width ?? 0;\n      this.compactToolbar.set(width < COMPACT_BREAKPOINT);\n      this.changeCardSettingsForXlPage(width);\n    });\n    this.resizeObserver.observe(this.hostEl.nativeElement);\n    window.addEventListener('beforeunload', this.beforeUnloadHandler);\n  }\n\n  ngOnDestroy(): void {\n    this.resizeObserver?.disconnect();\n    window.removeEventListener('beforeunload', this.beforeUnloadHandler);\n  }\n\n  onMenuItemClick(actionId: string, event: Event): void {\n    if (actionId === 'edit-view') {\n      this.enterEditMode();\n      return;\n    }\n    const action = this.customActions().find((a) => a.action === actionId);\n    if (action) {\n      this.actionButtonClick.emit({ event: event as MouseEvent, action });\n    }\n  }\n\n  enterEditMode(): void {\n    this.updateCardsPositions();\n\n    this.sectionsSnapshot = [...this.sections()];\n    this.cardsSnapshot = [...this.cards()];\n    this.sectionsSnapshotJson = JSON.stringify(this.sections());\n    this.cardsSnapshotJson = JSON.stringify(this.cards());\n    this.gridDirty.set(false);\n    this.editMode.set(true);\n    afterNextRender(\n      () => {\n        this.addCardBtn()?.element.focus();\n      },\n      { injector: this.injector },\n    );\n  }\n\n  saveEdit(): void {\n    this.updateCardsPositions();\n\n    const savedCards = this.cards().map((c) => {\n      const pos = this.cardsPosition.get(c.id);\n      return {\n        ...c,\n        x: pos?.x,\n        y: pos?.y,\n        w: pos?.w ?? c.w,\n        h: pos?.h ?? c.h,\n      };\n    });\n    this.gridDirty.set(false);\n    this.editMode.set(false);\n\n    this.cards.set(savedCards);\n    this.saved.emit({\n      sections: this.sections(),\n      cards: savedCards,\n    });\n  }\n\n  cancelEdit(): void {\n    if (this.hasUnsavedChanges()) {\n      this.discardDialogOpen.set(true);\n      return;\n    }\n    this.discardEdit();\n  }\n\n  confirmDiscard(): void {\n    this.discardDialogOpen.set(false);\n    this.discardEdit();\n  }\n\n  cancelDiscard(): void {\n    this.discardDialogOpen.set(false);\n  }\n\n  /**\n   * Public framework-agnostic navigation guard. Consumer apps (Angular Router\n   * CanDeactivate guard, Luigi navigation listener, plain `<a>` click handler,\n   * window history listener — anything) call this before performing their\n   * navigation:\n   *\n   *   if (dashboard.requestNavigation(() => router.navigateByUrl(target))) {\n   *     // already navigated synchronously — clean state\n   *   } else {\n   *     // dashboard popped the unsaved-changes dialog; the navigation will\n   *     // resume from the user's choice (Save → proceed, Discard → proceed,\n   *     // Cancel → drop the request entirely).\n   *   }\n   *\n   * Returns `true` when navigation may proceed immediately (no unsaved\n   * changes — `proceed` was invoked synchronously). Returns `false` when the\n   * dialog has been opened and the caller must NOT navigate; the dashboard\n   * will run the callback later if the user picks Save or Discard.\n   *\n   * If a previous navigation is already pending, that one is dropped in\n   * favour of the new request — Cancel always means \"stay here\", so losing\n   * the older queued navigation is the correct outcome.\n   */\n  requestNavigation(proceed: () => void): boolean {\n    if (!this.hasUnsavedChanges()) {\n      proceed();\n      return true;\n    }\n    this.pendingNavigation = proceed;\n    this.unsavedNavDialogOpen.set(true);\n    return false;\n  }\n\n  /** Save → persist changes, close the dialog, then resume navigation. */\n  onUnsavedNavSave(): void {\n    this.unsavedNavDialogOpen.set(false);\n    this.saveEdit();\n    this.runPendingNavigation();\n  }\n\n  /** Discard → revert to snapshot, close the dialog, then resume navigation. */\n  onUnsavedNavDiscard(): void {\n    this.unsavedNavDialogOpen.set(false);\n    this.discardEdit();\n    this.runPendingNavigation();\n  }\n\n  /** Cancel → drop the queued navigation and stay in edit mode. */\n  onUnsavedNavCancel(): void {\n    this.unsavedNavDialogOpen.set(false);\n    this.pendingNavigation = null;\n  }\n\n  private runPendingNavigation(): void {\n    const pending = this.pendingNavigation;\n    this.pendingNavigation = null;\n    pending?.();\n  }\n\n  private discardEdit(): void {\n    this.sections.set(this.sectionsSnapshot);\n    this.cards.set(\n      this.cardsSnapshot.map((c) => {\n        const pos = this.cardsPosition.get(c.id);\n        return { ...c, x: pos?.x, y: pos?.y };\n      }),\n    );\n    this.cardDialogOpen.set(false);\n    this.gridDirty.set(false);\n    this.editMode.set(false);\n  }\n\n  removeSection(id: string): void {\n    this.sections.update((list) => list.filter((s) => s.id !== id));\n    this.cards.update((list) => list.filter((c) => c.sectionId !== id));\n  }\n\n  removeCard(id: string): void {\n    const wasLooseCard = this.looseCards().some((c) => c.id === id);\n    this.cardsPosition.delete(id);\n    this.cards.update((list) => list.filter((c) => c.id !== id));\n\n    if (wasLooseCard) {\n      afterNextRender(\n        () => {\n          this.gridStack().grid?.compact('compact', false);\n        },\n        { injector: this.injector },\n      );\n    }\n  }\n\n  openCardPanel(): void {\n    this.cardDialogOpen.set(true);\n  }\n\n  closeCardPanel(): void {\n    this.cardDialogOpen.set(false);\n  }\n\n  onCardsEdited(event: { added: CardConfig[]; removed: string[] }): void {\n    const looseCardIds = new Set(this.looseCards().map((c) => c.id));\n\n    const hasLooseCardChanges =\n      event.added.some((card) => !card.sectionId) ||\n      event.removed.some((id) => looseCardIds.has(id));\n    if (hasLooseCardChanges) {\n      this.getZFlowEngine()?.syncZFlowOrderFromLayout();\n    }\n\n    this.cards.update((list) => {\n      const withoutRemoved = list.filter((c) => !event.removed.includes(c.id));\n      return [...withoutRemoved, ...event.added.map((ac) => ({ ...ac }))];\n    });\n    this.closeCardPanel();\n  }\n\n  onDragStart(event: { el: Element }): void {\n    this.getZFlowEngine()?.syncZFlowOrderFromLayout();\n\n    if (!this.engineProfile().renderOriginPosition) {\n      return;\n    }\n\n    const el = event.el;\n    const gridEl = this.gridStack().el as HTMLElement;\n    const gridRect = gridEl.getBoundingClientRect();\n    const elRect = el.getBoundingClientRect();\n\n    this.dragOriginStyle.set({\n      top: `${elRect.top - gridRect.top}px`,\n      left: `${elRect.left - gridRect.left}px`,\n      width: `${elRect.width}px`,\n      height: `${elRect.height}px`,\n    });\n  }\n\n  onDragStop(): void {\n    this.getZFlowEngine()?.commitZFlowLayout();\n    this.dragOriginStyle.set(null);\n  }\n\n  onGridChange(): void {\n    this.getZFlowEngine()?.commitZFlowLayout();\n    if (this.editMode()) {\n      this.gridDirty.set(true);\n    }\n  }\n\n  private saveCardsPosition(items: GridStackNode[]): void {\n    items.forEach((node) => {\n      if (node.id) {\n        this.cardsPosition.set(node.id, {\n          x: node.x,\n          y: node.y,\n          w: node.w,\n          h: node.h,\n        });\n      }\n    });\n  }\n\n  private updateCardsPositions(): void {\n    const gridStackNodes = this.gridStack()\n      .gridstackItems?.toArray()\n      .map((node) => node.options);\n\n    if (gridStackNodes) {\n      this.saveCardsPosition(gridStackNodes);\n    }\n  }\n\n  private getZFlowEngine(): ZflowGridStackEngine | null {\n    const engine = this.gridStack().grid?.engine;\n    return engine instanceof ZflowGridStackEngine ? engine : null;\n  }\n\n  private updateCardsForBreakpoint(\n    updateCard: (card: CardConfig) => CardConfig,\n  ): void {\n    this.getZFlowEngine()?.syncZFlowOrderFromLayout();\n    this.cards.set(this.cards().map(updateCard));\n    afterNextRender(\n      () => {\n        this.getZFlowEngine()?.commitZFlowLayout();\n      },\n      { injector: this.injector },\n    );\n  }\n\n  private changeCardSettingsForXlPage(width: number): void {\n    if (!this.engineProfile().xlWidthSwap) return;\n    if (width >= XL_PAGE) {\n      if (!this.isXLPage()) {\n        this.isXLPage.set(true);\n        this.updateCardsForBreakpoint((c) => ({\n          ...c,\n          w: c.w === 4 ? 3 : c.w,\n          maxW: c.maxW === 4 ? 3 : c.maxW,\n        }));\n      }\n    } else {\n      if (this.isXLPage()) {\n        this.isXLPage.set(false);\n        this.updateCardsForBreakpoint((c) => ({\n          ...c,\n          w: c.w === 3 ? 4 : c.w,\n          maxW: c.maxW === 3 ? 4 : c.maxW,\n        }));\n      }\n    }\n  }\n}\n","<div\n  class=\"mfp-dashboard\"\n  data-testid=\"dashboard\"\n  [style]=\"columnVars()\"\n  [class.edit]=\"editMode()\"\n>\n  <div class=\"mfp-dashboard__topbar\">\n    <div class=\"mfp-dashboard__topbar-row\">\n      <div class=\"mfp-dashboard__header\">\n        <div class=\"mfp-dashboard__title-row\">\n          @if (i18nService.getTranslation(i18nKeys.TITLE)) {\n            <ui5-title\n              data-testid=\"dashboard-title\"\n              level=\"H3\"\n              size=\"H3\"\n              wrapping-type=\"Normal\"\n            >\n              <span [innerHTML]=\"safeTitle()\"></span>\n            </ui5-title>\n          }\n          @if (hasUnsavedChanges()) {\n            <div class=\"mfp-dashboard__unsaved-changes\" role=\"status\">\n              <ui5-icon\n                class=\"mfp-dashboard__unsaved-changes-icon\"\n                name=\"user-edit\"\n                [accessibleName]=\"\n                  i18nService.getTranslation(i18nKeys.UNSAVED_CHANGES)\n                \"\n              />\n              <span class=\"mfp-dashboard__unsaved-changes-text\">{{\n                i18nService.getTranslation(i18nKeys.UNSAVED_CHANGES)\n              }}</span>\n            </div>\n          }\n        </div>\n        @if (i18nService.getTranslation(i18nKeys.DESCRIPTION)) {\n          <ui5-title\n            data-testid=\"dashboard-description\"\n            level=\"H5\"\n            size=\"H5\"\n            wrapping-type=\"Normal\"\n          >\n            <span\n              class=\"mfp-dashboard__description\"\n              [innerHTML]=\"safeDescription()\"\n            ></span>\n          </ui5-title>\n        }\n      </div>\n\n      <div class=\"mfp-dashboard__toolbar\">\n        @if (editMode()) {\n          <ui5-button\n            #editCardsBtn\n            data-testid=\"dashboard-edit-cards-btn\"\n            id=\"edit-cards-btn\"\n            [accessibleName]=\"\n              editCardsButton().text ||\n              editCardsButton().tooltip ||\n              i18nService.getTranslation(i18nKeys.EDIT_CARDS_BUTTON)\n            \"\n            [design]=\"editCardsButton().design\"\n            [icon]=\"editCardsButton().icon\"\n            [tooltip]=\"editCardsButton().tooltip\"\n            (click)=\"openCardPanel()\"\n            >{{ editCardsButton().text }}</ui5-button\n          >\n        } @else if (compactToolbar()) {\n          <ui5-button\n            #menuBtn\n            data-testid=\"dashboard-toolbar-menu-btn\"\n            design=\"Transparent\"\n            icon=\"menu2\"\n            [accessibleName]=\"i18nService.getTranslation(i18nKeys.ACTIONS)\"\n            [tooltip]=\"i18nService.getTranslation(i18nKeys.ACTIONS)\"\n            (click)=\"toolbarMenuOpen.update((v) => !v)\"\n          />\n          <ui5-menu\n            data-testid=\"dashboard-toolbar-menu\"\n            [open]=\"toolbarMenuOpen()\"\n            [opener]=\"menuBtn.element\"\n            (ui5Close)=\"toolbarMenuOpen.set(false)\"\n            (ui5ItemClick)=\"\n              onMenuItemClick(\n                $any($event).detail.item.dataset['action'],\n                $event\n              )\n            \"\n            (ui5Open)=\"toolbarMenuOpen.set(true)\"\n          >\n            @if (config().editButtonFirst && config().editable) {\n              <ui5-menu-item\n                data-action=\"edit-view\"\n                data-testid=\"dashboard-action-edit-view\"\n                [icon]=\"editViewButton().icon\"\n                [text]=\"\n                  editViewButton().text ||\n                  i18nService.getTranslation(i18nKeys.EDIT_HOME_BUTTON)\n                \"\n              />\n              @if (customActions().length) {\n                <ui5-menu-separator />\n              }\n            }\n            @for (action of customActions(); track action.action) {\n              <ui5-menu-item\n                [attr.data-action]=\"action.action\"\n                [attr.data-testid]=\"'dashboard-action-' + action.action\"\n                [icon]=\"action.icon ?? ''\"\n                [text]=\"action.text ?? ''\"\n              />\n            }\n            @if (!config().editButtonFirst && config().editable) {\n              <ui5-menu-separator />\n              <ui5-menu-item\n                data-action=\"edit-view\"\n                data-testid=\"dashboard-action-edit-view\"\n                [icon]=\"editViewButton().icon\"\n                [text]=\"\n                  editViewButton().text ||\n                  i18nService.getTranslation(i18nKeys.EDIT_HOME_BUTTON)\n                \"\n              />\n            }\n          </ui5-menu>\n        } @else {\n          @if (config().editButtonFirst && config().editable) {\n            <ui5-button\n              data-testid=\"dashboard-edit-view-btn\"\n              [accessibleName]=\"\n                editViewButton().text ||\n                editViewButton().tooltip ||\n                i18nService.getTranslation(i18nKeys.EDIT_HOME_BUTTON)\n              \"\n              [design]=\"editViewButton().design\"\n              [icon]=\"editViewButton().icon\"\n              [tooltip]=\"editViewButton().tooltip\"\n              (click)=\"enterEditMode()\"\n              >{{ editViewButton().text }}</ui5-button\n            >\n          }\n          @for (action of customActions(); track action.action) {\n            <ui5-button\n              [accessibleName]=\"action.text || action.tooltip || action.action\"\n              [attr.data-testid]=\"'dashboard-action-' + action.action\"\n              [design]=\"action.design ?? 'Default'\"\n              [endIcon]=\"action?.endIcon\"\n              [icon]=\"action.icon ?? ''\"\n              [tooltip]=\"action.tooltip ?? ''\"\n              (click)=\"\n                actionButtonClick.emit({ event: $event, action: action })\n              \"\n              >{{ action.text }}</ui5-button\n            >\n          }\n          @if (!config().editButtonFirst && config().editable) {\n            <ui5-button\n              data-testid=\"dashboard-edit-view-btn\"\n              [accessibleName]=\"\n                editViewButton().text ||\n                editViewButton().tooltip ||\n                i18nService.getTranslation(i18nKeys.EDIT_HOME_BUTTON)\n              \"\n              [design]=\"editViewButton().design\"\n              [icon]=\"editViewButton().icon\"\n              [tooltip]=\"editViewButton().tooltip\"\n              (click)=\"enterEditMode()\"\n              >{{ editViewButton().text }}</ui5-button\n            >\n          }\n        }\n      </div>\n    </div>\n\n    <div class=\"mfp-dashboard__subheader\">\n      <ng-content select=\"[slot=dashboard-subheader]\" />\n    </div>\n  </div>\n\n  <div class=\"mfp-sections-container\">\n    @for (section of sections(); track section.id) {\n      <mfp-dashboard-section\n        [cards]=\"sectionCards()(section.id)\"\n        [editMode]=\"editMode()\"\n        [section]=\"section\"\n        (removeCard)=\"removeCard($event)\"\n        (removeSection)=\"removeSection(section.id)\"\n      />\n    }\n  </div>\n\n  <gridstack\n    #grid\n    data-testid=\"dashboard-grid\"\n    [class.zflow-dragging]=\"!!dragOriginStyle()\"\n    [options]=\"gridOptions()\"\n    (addedCB)=\"onGridChange()\"\n    (changeCB)=\"onGridChange()\"\n    (dragStartCB)=\"onDragStart($event)\"\n    (dragStopCB)=\"onDragStop()\"\n    (removedCB)=\"onGridChange()\"\n  >\n    @if (dragOriginStyle()) {\n      <div\n        class=\"mfp-dashboard__drag-origin-placeholder\"\n        [style]=\"dragOriginStyle()\"\n      ></div>\n    }\n    @for (card of looseCards(); track card.id) {\n      <gridstack-item [options]=\"card\">\n        <mfp-dashboard-card\n          [card]=\"card\"\n          [editMode]=\"editMode()\"\n          (removeCard)=\"removeCard($any(card.id))\"\n        />\n      </gridstack-item>\n    }\n  </gridstack>\n</div>\n@if (editMode()) {\n  <div class=\"mfp-dashboard__edit-bar\">\n    <ui5-button\n      data-testid=\"dashboard-save-btn\"\n      design=\"Emphasized\"\n      (click)=\"saveEdit()\"\n      >{{ i18nService.getTranslation(i18nKeys.SAVE) }}</ui5-button\n    >\n    <ui5-button\n      data-testid=\"dashboard-cancel-btn\"\n      design=\"Transparent\"\n      (click)=\"cancelEdit()\"\n      >{{ i18nService.getTranslation(i18nKeys.CANCEL) }}</ui5-button\n    >\n  </div>\n}\n\n<mfp-edit-cards-dialog\n  [addedCardsIds]=\"addedCardsIds()\"\n  [availableCards]=\"availableCards()\"\n  [open]=\"cardDialogOpen()\"\n  (cancelled)=\"closeCardPanel()\"\n  (confirm)=\"onCardsEdited($event)\"\n/>\n\n<mfp-discard-changes-dialog\n  [open]=\"discardDialogOpen()\"\n  (cancelled)=\"cancelDiscard()\"\n  (confirm)=\"confirmDiscard()\"\n/>\n\n<mfp-unsaved-changes-dialog\n  [open]=\"unsavedNavDialogOpen()\"\n  (cancelled)=\"onUnsavedNavCancel()\"\n  (discard)=\"onUnsavedNavDiscard()\"\n  (save)=\"onUnsavedNavSave()\"\n/>\n","import type { Dashboard } from './dashboard.component';\n\n/**\n * Public no-argument, `void`-returning handlers on {@link Dashboard} that we\n * forward onto the custom element so non-Angular consumers can drive the\n * edit-mode / unsaved-changes flow directly on the DOM node.\n */\nconst VOID_METHODS = [\n  'saveEdit',\n  'cancelEdit',\n  'confirmDiscard',\n  'onUnsavedNavSave',\n  'onUnsavedNavDiscard',\n  'onUnsavedNavCancel',\n] as const satisfies readonly (keyof Dashboard)[];\n\n/** Reads the live Angular component instance backing an `@angular/elements` custom element. */\nfunction getInstance(element: unknown): Dashboard | undefined {\n  return (\n    element as {\n      ngElementStrategy?: { componentRef?: { instance?: Dashboard } };\n    }\n  ).ngElementStrategy?.componentRef?.instance;\n}\n\n/**\n * `createCustomElement` only proxies `@Input()`/`output()` — public methods on\n * the component class are NOT reachable from the DOM. This forwards the\n * dashboard's public methods onto the custom-element prototype so that\n * non-Angular consumers (UI5, plain JS, Luigi, etc.) can call them directly on\n * the `<mfp-wc-dashboard>` DOM node.\n *\n * `requestNavigation` needs a synchronous fallback when the Angular component\n * isn't created yet: run the navigation immediately (returning `true`) rather\n * than silently blocking the user — this preserves the original, pre-guard\n * behaviour. The remaining handlers no-op until the component exists.\n */\nexport function defineDashboardElementMethods(\n  elementCtor: CustomElementConstructor,\n): void {\n  const proto = elementCtor.prototype;\n\n  Object.defineProperty(proto, 'requestNavigation', {\n    value(proceed: () => void): boolean {\n      const instance = getInstance(this);\n      if (!instance) {\n        proceed();\n        return true;\n      }\n      return instance.requestNavigation(proceed);\n    },\n    configurable: true,\n    writable: true,\n  });\n\n  for (const name of VOID_METHODS) {\n    Object.defineProperty(proto, name, {\n      value(): void {\n        getInstance(this)?.[name]();\n      },\n      configurable: true,\n      writable: true,\n    });\n  }\n}\n","import { Pipe, PipeTransform, SecurityContext, inject } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n  name: 'sanitizeHtml',\n  standalone: true,\n})\nexport class SanitizeHtmlPipe implements PipeTransform {\n  private readonly sanitizer = inject(DomSanitizer);\n\n  transform(value: string | null | undefined): string {\n    if (!value) {\n      return '';\n    }\n\n    return this.sanitizer.sanitize(SecurityContext.HTML, value) ?? '';\n  }\n}\n","import { SanitizeHtmlPipe } from '../../pipes/sanitize-html.pipe';\nimport { DeleteResourceConfirmationConfig } from '../../table-card/models/configs';\nimport {\n  CUSTOM_ELEMENTS_SCHEMA,\n  ChangeDetectionStrategy,\n  Component,\n  ViewEncapsulation,\n  computed,\n  effect,\n  input,\n  output,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule, ValidatorFn } from '@angular/forms';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Dialog } from '@fundamental-ngx/ui5-webcomponents/dialog';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport { Input } from '@fundamental-ngx/ui5-webcomponents/input';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\n\n@Component({\n  selector: 'mfp-delete-confirmation-dialog',\n  imports: [\n    Dialog,\n    Title,\n    Button,\n    Input,\n    Icon,\n    ReactiveFormsModule,\n    SanitizeHtmlPipe,\n  ],\n  templateUrl: './delete-confirmation-dialog.component.html',\n  styleUrl: './delete-confirmation-dialog.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.ShadowDom,\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class DeleteConfirmationDialog {\n  readonly open = input(false);\n  readonly config = input<DeleteResourceConfirmationConfig | undefined>(\n    undefined,\n  );\n\n  readonly confirmed = output<void>();\n  readonly cancelled = output<void>();\n\n  /** Input used to confirm deletion by typing `confirmationText`. */\n  protected readonly confirmationControl = new FormControl('', {\n    nonNullable: true,\n  });\n\n  /** True when the config requires typing a confirmation phrase before deleting. */\n  protected readonly requiresConfirmation = computed(\n    () => !!this.config()?.confirmationText,\n  );\n\n  /** Recomputes whenever the control's validity changes. */\n  private readonly status = toSignal(this.confirmationControl.statusChanges, {\n    initialValue: this.confirmationControl.status,\n  });\n\n  /** Disables the confirm button while the confirmation input is invalid. */\n  protected readonly confirmDisabled = computed(() => {\n    this.status();\n    if (this.requiresConfirmation()) {\n      return this.confirmationControl.invalid;\n    }\n\n    return false;\n  });\n\n  constructor() {\n    effect(() => {\n      if (!this.open()) {\n        this.confirmationControl.reset();\n      }\n    });\n\n    effect(() => {\n      if (this.config()?.confirmationText) {\n        this.confirmationControl.setValidators([this.matchValidator()]);\n      } else {\n        this.confirmationControl.setValidators([]);\n      }\n\n      this.confirmationControl.updateValueAndValidity();\n    });\n  }\n\n  protected onConfirm(): void {\n    if (this.confirmationControl.invalid) return;\n    this.confirmed.emit();\n  }\n\n  /** Passes only when the trimmed, case-insensitive control value equals `expected`. */\n  private matchValidator(): ValidatorFn {\n    const normalized = this.config()?.confirmationText?.trim().toLowerCase();\n    return (control) =>\n      (control.value ?? '').trim().toLowerCase() === normalized\n        ? null\n        : { confirmationMismatch: true };\n  }\n}\n","<ui5-dialog\n  data-testid=\"generic-table-card-delete-dialog\"\n  [accessibleName]=\"config()?.title ?? 'Confirm Delete'\"\n  [open]=\"open()\"\n  (ui5BeforeClose)=\"cancelled.emit()\"\n>\n  <div class=\"dialog__header\" slot=\"header\">\n    <ui5-icon class=\"dialog__header-icon\" name=\"alert\" design=\"Critical\"></ui5-icon>\n    <ui5-title level=\"H5\">\n      <span [innerHTML]=\"(config()?.title ?? 'Confirm Delete') | sanitizeHtml\"></span>\n    </ui5-title>\n  </div>\n  @if (config()?.message || requiresConfirmation()) {\n    <div class=\"dialog__body\">\n      @if (config()?.message; as message) {\n        <p class=\"dialog__message\" [innerHTML]=\"message | sanitizeHtml\"></p>\n      }\n      @if (requiresConfirmation()) {\n        <p class=\"dialog__message\">\n          <ui5-input\n            class=\"dialog__confirmation-input\"\n            data-testid=\"generic-table-card-delete-confirmation-input\"\n            [formControl]=\"confirmationControl\"\n            [placeholder]=\"config()?.confirmationPlaceholder ?? 'Type to confirm'\"\n            [valueState]=\"confirmationControl.invalid && confirmationControl.dirty ? 'Negative' : 'None'\"\n          />\n        </p>\n      }\n    </div>\n  }\n  <div class=\"dialog__footer\" slot=\"footer\">\n    <ui5-button\n      data-testid=\"generic-table-card-delete-confirm\"\n      design=\"Negative\"\n      [disabled]=\"confirmDisabled()\"\n      (click)=\"onConfirm()\"\n    >\n      {{ config()?.confirmLabel ?? 'Delete' }}\n    </ui5-button>\n    <ui5-button\n      data-testid=\"generic-table-card-delete-cancel\"\n      design=\"Transparent\"\n      (click)=\"cancelled.emit()\"\n    >\n      {{ config()?.cancelLabel ?? 'Cancel' }}\n    </ui5-button>\n  </div>\n</ui5-dialog>\n","export function setPropertyByPath<T extends Record<string, unknown>>(\n  object: T,\n  path: string,\n  value: unknown,\n): T {\n  const segments = path.split('.').filter(Boolean);\n  if (segments.length === 0) {\n    return object;\n  }\n\n  let current: Record<string, unknown> = object;\n\n  for (let i = 0; i < segments.length; i += 1) {\n    const key = segments[i];\n    if (i === segments.length - 1) {\n      current[key] = value;\n      break;\n    }\n\n    const existing = current[key];\n\n    if (existing === undefined || existing === null || typeof existing !== 'object') {\n      current[key] = {};\n    }\n\n    current = current[key] as Record<string, unknown>;\n  }\n\n  return object;\n}\n","import { FormFieldDefinition } from '../../models';\nimport { DeclarativeForm } from '../declarative-form.component';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ViewEncapsulation,\n  forwardRef,\n  input,\n  linkedSignal,\n  output,\n} from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport '@ui5/webcomponents-icons/dist/add.js';\nimport '@ui5/webcomponents-icons/dist/delete.js';\nimport '@ui5/webcomponents-icons/dist/navigation-down-arrow.js';\nimport '@ui5/webcomponents-icons/dist/navigation-right-arrow.js';\n\n/**\n * Internal collection editor rendered by `mfp-declarative-form` when a field\n * carries `propertyCollection` sub-fields.\n *\n * Each entry renders as a collapsible card whose expanded body is a nested\n * `<mfp-declarative-form>` bound to that entry. Live changes flow up\n * through the nested form's `(formValueChange)` output — no `viewChildren`\n * on the class, so this component can safely participate in the mutual\n * import cycle with `DeclarativeForm`.\n */\n@Component({\n  selector: 'mfp-form-collection-field',\n  standalone: true,\n  // `DeclarativeForm` is imported via `forwardRef` because it also imports\n  // this component — a strict module-init cycle. Angular resolves the\n  // `forwardRef` when the template is instantiated, by which point both\n  // classes are fully defined.\n  imports: [Button, Icon, forwardRef(() => DeclarativeForm)],\n  templateUrl: './form-collection-field.component.html',\n  styleUrl: './form-collection-field.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class FormCollectionField {\n  readonly fields = input.required<FormFieldDefinition[]>();\n  readonly label = input.required<string>();\n\n  readonly initialEntries = input<Record<string, unknown>[]>([]);\n  readonly valueChange = output<Record<string, unknown>[]>();\n\n  protected readonly entries = linkedSignal<Record<string, unknown>[]>(() => [\n    ...(this.initialEntries() ?? []),\n  ]);\n\n  protected readonly expandedIndex = linkedSignal<\n    Record<string, unknown>[],\n    number | null\n  >({\n    source: this.initialEntries,\n    computation: () => null,\n  });\n\n  previewFor(entry: Record<string, unknown>, index: number): string {\n    for (const field of this.fields()) {\n      const raw = entry[field.name];\n      if (raw !== undefined && raw !== null && String(raw).trim() !== '') {\n        return `${field.label ?? field.name}: ${String(raw)}`;\n      }\n    }\n    const prefix = this.label().trim() || 'Item';\n    return `${prefix} ${index + 1}`;\n  }\n\n  toggle(index: number): void {\n    this.expandedIndex.set(this.expandedIndex() === index ? null : index);\n  }\n\n  add(): void {\n    const next = [...this.entries(), {}];\n    this.entries.set(next);\n    this.expandedIndex.set(next.length - 1);\n    this.valueChange.emit(next);\n  }\n\n  remove(index: number): void {\n    const next = this.entries().filter((_, i) => i !== index);\n    this.entries.set(next);\n    const expandedIndex = this.expandedIndex() as number;\n    if (expandedIndex === index) {\n      this.expandedIndex.set(null);\n    } else if (expandedIndex !== null && expandedIndex > index) {\n      // Preserve the same expanded row after removing an earlier one.\n      this.expandedIndex.set(expandedIndex - 1);\n    }\n    this.valueChange.emit(next);\n  }\n\n  onEntryValueChange(index: number, value: Record<string, unknown>): void {\n    const next = this.entries().map((entry, i) =>\n      i === index ? { ...value } : entry,\n    );\n    this.entries.set(next);\n    this.valueChange.emit(next);\n  }\n}\n","<div class=\"collection\" data-testid=\"collection-field\">\n  @for (entry of entries(); track $index; let index = $index) {\n    @let expanded = expandedIndex() === index;\n    <div\n      class=\"card\"\n      [class.card--expanded]=\"expanded\"\n      [attr.data-testid]=\"'collection-item-' + index\"\n    >\n      <button\n        type=\"button\"\n        class=\"card__header\"\n        [attr.aria-expanded]=\"expanded\"\n        [attr.data-testid]=\"'collection-item-' + index + '-toggle'\"\n        (click)=\"toggle(index)\"\n      >\n        <ui5-icon\n          class=\"card__chevron\"\n          [name]=\"expanded ? 'navigation-down-arrow' : 'navigation-right-arrow'\"\n        />\n        <span class=\"card__preview\">{{ previewFor(entry, index) }}</span>\n        <span class=\"card__spacer\"></span>\n        <ui5-button\n          class=\"card__action\"\n          design=\"Transparent\"\n          icon=\"delete\"\n          accessibleName=\"Remove\"\n          tooltip=\"Remove\"\n          [attr.data-testid]=\"'collection-item-' + index + '-remove'\"\n          (click)=\"remove(index); $event.stopPropagation()\"\n        />\n      </button>\n\n      @if (expanded) {\n        <div class=\"card__body\">\n          <mfp-declarative-form\n            [attr.data-testid]=\"'collection-item-' + index + '-form'\"\n            [fields]=\"fields()\"\n            [initialValues]=\"entry\"\n            (formValueChange)=\"onEntryValueChange(index, $event)\"\n          />\n        </div>\n      }\n    </div>\n  }\n\n  <ui5-button\n    class=\"collection__add\"\n    design=\"Transparent\"\n    icon=\"add\"\n    accessibleName=\"Add\"\n    data-testid=\"collection-add\"\n    (click)=\"add()\"\n  />\n</div>\n","import { GenericResource } from '../../models';\nimport {\n  FormFieldChangeEvent,\n  FormFieldDefinition,\n  FormFieldErrors,\n} from '../models';\nimport { setPropertyByPath } from '../utils/set-property-by-path';\nimport { FormCollectionField } from './form-collection-field/form-collection-field.component';\nimport {\n  Component,\n  ViewEncapsulation,\n  effect,\n  inject,\n  input,\n  output,\n  signal,\n} from '@angular/core';\nimport {\n  FormArray,\n  FormBuilder,\n  FormControl,\n  FormGroup,\n  ReactiveFormsModule,\n} from '@angular/forms';\nimport { Input } from '@fundamental-ngx/ui5-webcomponents/input';\nimport { Label } from '@fundamental-ngx/ui5-webcomponents/label';\nimport { Option } from '@fundamental-ngx/ui5-webcomponents/option';\nimport { Select } from '@fundamental-ngx/ui5-webcomponents/select';\n\n@Component({\n  selector: 'mfp-declarative-form',\n  imports: [\n    ReactiveFormsModule,\n    Input,\n    Label,\n    Select,\n    Option,\n    FormCollectionField,\n  ],\n  templateUrl: './declarative-form.component.html',\n  styleUrl: './declarative-form.component.scss',\n  encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class DeclarativeForm<T extends GenericResource> {\n  readonly fields = input.required<FormFieldDefinition[]>();\n  readonly initialValues = input<T>({} as T);\n  readonly fieldErrors = input<FormFieldErrors>({});\n\n  readonly fieldChange = output<FormFieldChangeEvent>();\n  readonly formSubmit = output<T>();\n  readonly formValueChange = output<Record<string, unknown>>();\n\n  readonly form: FormGroup;\n\n  protected readonly collectionSeeds = signal<\n    Record<string, Record<string, unknown>[]>\n  >({});\n\n  private readonly fb = inject(FormBuilder);\n\n  constructor() {\n    this.form = this.fb.group({});\n\n    effect(() => {\n      this.rebuildControls(this.fields());\n    });\n\n    effect(() => {\n      this.setInitialValues(this.initialValues());\n    });\n\n    effect(() => {\n      const fields = this.fields();\n      this.initialValues();\n\n      for (const field of fields) {\n        if (field.validation) {\n          this.fieldChange.emit({\n            fieldProperty: field.name,\n            value: this.form.controls[field.name]?.value ?? '',\n          });\n        }\n      }\n    });\n  }\n\n  setFormControlValue($event: Event, field: FormFieldDefinition): void {\n    const target = $event.target as\n      | HTMLInputElement\n      | HTMLTextAreaElement\n      | HTMLSelectElement;\n\n    const control = this.form.controls[field.name];\n    control.setValue(target.value);\n    control.markAsTouched();\n    control.markAsDirty();\n\n    this.formValueChange.emit(this.form.value as Record<string, unknown>);\n\n    if (field.validation === 'onChange') {\n      this.fieldChange.emit({\n        fieldProperty: field.name,\n        value: control.value,\n      });\n    }\n  }\n\n  onCollectionValueChange(\n    field: FormFieldDefinition,\n    entries: Record<string, unknown>[],\n  ): void {\n    const array = this.form.controls[field.name] as FormArray | undefined;\n    if (!array) return;\n\n    while (array.length) array.removeAt(0);\n    for (const entry of entries) {\n      array.push(this.buildEntryGroup(entry));\n    }\n    array.markAsDirty();\n    array.markAsTouched();\n\n    if (field.validation === 'onChange' || field.validation === 'onBlur') {\n      this.fieldChange.emit({\n        fieldProperty: field.name,\n        value: entries,\n      });\n    }\n  }\n\n  getError(name: string): string | null {\n    const control = this.form.controls[name];\n    const error = this.fieldErrors()[name];\n\n    return error && (control.dirty || control.touched) ? error : null;\n  }\n\n  getValueState(name: string): 'None' | 'Negative' {\n    return this.getError(name) ? 'Negative' : 'None';\n  }\n\n  onFieldBlur(field: FormFieldDefinition): void {\n    this.form.controls[field.name]?.markAsTouched();\n\n    if (field.validation === 'onBlur') {\n      this.fieldChange.emit({\n        fieldProperty: field.name,\n        value: this.form.controls[field.name]?.value,\n      });\n    }\n  }\n\n  submit(): void {\n    this.formSubmit.emit(this.buildOutputValue());\n  }\n\n  clear(): void {\n    this.form.reset();\n  }\n\n  collectionEntries(field: FormFieldDefinition): Record<string, unknown>[] {\n    return this.collectionSeeds()[field.name] ?? [];\n  }\n\n  private rebuildControls(fields: FormFieldDefinition[]): void {\n    const existingControls = this.form.controls;\n    const nextFieldNames = new Set(fields.map((field) => field.name));\n\n    for (const field of fields) {\n      const existingControl = existingControls[field.name];\n      const wantsCollection = !!field.propertyCollection?.length;\n      const existingIsCollection = existingControl instanceof FormArray;\n      if (existingControl && wantsCollection !== existingIsCollection) {\n        this.form.removeControl(field.name);\n      } else if (existingControl) {\n        existingControl.clearValidators();\n        existingControl.updateValueAndValidity({ emitEvent: false });\n        continue;\n      }\n\n      if (wantsCollection) {\n        this.form.addControl(field.name, this.fb.array([]));\n      } else {\n        this.form.addControl(field.name, new FormControl(''));\n      }\n    }\n\n    for (const controlName of Object.keys(existingControls)) {\n      if (!nextFieldNames.has(controlName)) {\n        this.form.removeControl(controlName);\n      }\n    }\n\n    this.form.updateValueAndValidity({ emitEvent: false });\n  }\n\n  private setInitialValues(initialValues: T | null | undefined): void {\n    if (!initialValues) {\n      return;\n    }\n\n    const seeds: Record<string, Record<string, unknown>[]> = {};\n    for (const field of this.fields()) {\n      if (!field.propertyCollection?.length) continue;\n      const raw = (initialValues as Record<string, unknown>)[field.name];\n      const entries = Array.isArray(raw)\n        ? (raw as Record<string, unknown>[])\n        : [];\n\n      const array = this.form.controls[field.name] as FormArray | undefined;\n      if (array) {\n        while (array.length) array.removeAt(0);\n        for (const entry of entries) {\n          array.push(this.buildEntryGroup(entry));\n        }\n      }\n      seeds[field.name] = entries;\n    }\n    this.collectionSeeds.set(seeds);\n\n    this.form.patchValue(initialValues, { emitEvent: false });\n    this.form.markAsPristine({ emitEvent: false });\n    this.form.updateValueAndValidity({ emitEvent: false });\n  }\n\n  private buildOutputValue(): T {\n    const result = {} as T;\n\n    for (const key of Object.keys(this.form.controls)) {\n      const control = this.form.controls[key];\n      let value: unknown = control.value;\n      if (control instanceof FormArray) {\n        value = control.controls.map(\n          (group) => (group as FormGroup).controls['entry']?.value ?? {},\n        );\n      }\n      setPropertyByPath(result, key, value);\n    }\n\n    return result;\n  }\n\n  private buildEntryGroup(entry: Record<string, unknown>): FormGroup {\n    return this.fb.group({\n      entry: new FormControl(entry),\n    });\n  }\n}\n","<section class=\"form\" data-testid=\"generic-form\" [formGroup]=\"form\">\n  @for (field of fields(); track field.name) {\n    @let control = form.controls[field.name];\n    <div\n      class=\"inputs\"\n      [attr.data-testid]=\"'generic-form-field-container-' + field.name\"\n    >\n      <ui5-label\n        show-colon\n        [attr.data-testid]=\"'generic-form-field-label-' + field.name\"\n        [required]=\"field.required\"\n        >{{ field.label }}</ui5-label\n      >\n      @if (field.propertyCollection?.length) {\n        <mfp-form-collection-field\n          [attr.data-testid]=\"'generic-form-field-' + field.name\"\n          [fields]=\"field.propertyCollection!\"\n          [label]=\"field.label\"\n          [initialEntries]=\"collectionEntries(field)\"\n          (valueChange)=\"onCollectionValueChange(field, $event)\"\n        />\n        @if (getError(field.name); as error) {\n          <div class=\"collection-error\" role=\"alert\">{{ error }}</div>\n        }\n      } @else if (field.values?.length) {\n        <ui5-select\n          class=\"input\"\n          [attr.data-testid]=\"'generic-form-field-' + field.name\"\n          [disabled]=\"field.disabled\"\n          [required]=\"field.required\"\n          [value]=\"control.value\"\n          [valueState]=\"getValueState(field.name)\"\n          (blur)=\"onFieldBlur(field)\"\n          (change)=\"setFormControlValue($event, field)\"\n          (input)=\"setFormControlValue($event, field)\"\n        >\n          @if (getError(field.name); as error) {\n            <div slot=\"valueStateMessage\">{{ error }}</div>\n          }\n          @for (value of [''].concat(field.values ?? []); track value) {\n            <ui5-option\n              [attr.data-testid]=\"\n                'generic-form-field-' +\n                field.name +\n                '-option-' +\n                (value || 'empty')\n              \"\n              [selected]=\"value === control.value\"\n              [value]=\"value\"\n              >{{ value }}</ui5-option\n            >\n          }\n        </ui5-select>\n      } @else {\n        <ui5-input\n          class=\"input\"\n          [attr.data-testid]=\"'generic-form-field-' + field.name\"\n          [disabled]=\"field.disabled\"\n          [required]=\"field.required\"\n          [value]=\"control.value\"\n          [valueState]=\"getValueState(field.name)\"\n          (blur)=\"onFieldBlur(field)\"\n          (change)=\"setFormControlValue($event, field)\"\n          (input)=\"setFormControlValue($event, field)\"\n        >\n          @if (getError(field.name); as error) {\n            <div slot=\"valueStateMessage\">{{ error }}</div>\n          }\n        </ui5-input>\n      }\n    </div>\n  }\n</section>\n","import { DeclarativeForm } from '../../form';\nimport {\n  FormFieldChangeEvent,\n  FormFieldDefinition,\n  FormFieldErrors,\n} from '../../form/models';\nimport { SanitizeHtmlPipe } from '../../pipes/sanitize-html.pipe';\nimport { ResourceFormConfig } from '../../table-card';\nimport {\n  CUSTOM_ELEMENTS_SCHEMA,\n  ChangeDetectionStrategy,\n  Component,\n  ViewEncapsulation,\n  computed,\n  input,\n  output,\n} from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Dialog } from '@fundamental-ngx/ui5-webcomponents/dialog';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\n\n@Component({\n  selector: 'mfp-resource-form-dialog',\n  imports: [Dialog, Title, Button, DeclarativeForm, SanitizeHtmlPipe],\n  templateUrl: './resource-form-dialog.component.html',\n  styleUrl: './resource-form-dialog.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.ShadowDom,\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class ResourceFormDialog {\n  readonly open = input(false);\n  readonly config = input<ResourceFormConfig | undefined>(undefined);\n  readonly fields = input<FormFieldDefinition[]>([]);\n  readonly fieldErrors = input<FormFieldErrors>({});\n  readonly initialValues = input<Record<string, unknown>>({});\n  readonly defaultTitle = input('Create');\n  readonly defaultConfirmLabel = input('Save');\n  readonly defaultCancelLabel = input('Cancel');\n  readonly dataTestidPrefix = input('generic-table-card-create');\n\n  readonly fieldChange = output<FormFieldChangeEvent>();\n  readonly submitted = output<Record<string, unknown>>();\n  readonly cancelled = output<void>();\n\n  protected hasErrors = computed(() => {\n    const errors = this.fieldErrors();\n    return !!errors && Object.values(errors).some((val) => !!val);\n  });\n}\n","<ui5-dialog\n  [attr.data-testid]=\"dataTestidPrefix() + '-dialog'\"\n  [accessibleName]=\"config()?.title ?? defaultTitle()\"\n  [open]=\"open()\"\n  (ui5BeforeClose)=\"cancelled.emit()\"\n>\n  <div class=\"dialog__header\" slot=\"header\">\n    <ui5-title level=\"H5\">\n      <span [innerHTML]=\"(config()?.title ?? defaultTitle()) | sanitizeHtml\"></span>\n    </ui5-title>\n  </div>\n  <div class=\"dialog__body\">\n    <mfp-declarative-form\n      #form\n      [fieldErrors]=\"fieldErrors()\"\n      [fields]=\"fields()\"\n      [initialValues]=\"initialValues()\"\n      (fieldChange)=\"fieldChange.emit($event)\"\n      (formSubmit)=\"submitted.emit($event)\"\n    />\n  </div>\n  <div class=\"dialog__footer\" slot=\"footer\">\n    <ui5-button\n      [attr.data-testid]=\"dataTestidPrefix() + '-confirm'\"\n      design=\"Emphasized\"\n      [disabled]=\"hasErrors()\"\n      (click)=\"form.submit()\"\n    >\n      {{ config()?.confirmLabel ?? defaultConfirmLabel() }}\n    </ui5-button>\n    <ui5-button\n      [attr.data-testid]=\"dataTestidPrefix() + '-cancel'\"\n      design=\"Transparent\"\n      (click)=\"cancelled.emit()\"\n    >\n      {{ config()?.cancelLabel ?? defaultCancelLabel() }}\n    </ui5-button>\n  </div>\n</ui5-dialog>\n","import { PropertyField, TransformType } from '../../models';\nimport { JSONPath } from 'jsonpath-plus';\n\nexport const getResourceValueByJsonPath = <T>(\n  resource: T,\n  field: {\n    jsonPathExpression?: string;\n    property?: string | string[];\n    propertyField?: PropertyField;\n  },\n) => {\n  const property = field.jsonPathExpression || field.property;\n  if (!property) {\n    return undefined;\n  }\n\n  if (property instanceof Array) {\n    console.error(\n      `Property defined as an array: ${JSON.stringify(property)}, provide \"jsonPathExpression\" field to properly ready resource value`,\n    );\n    return undefined;\n  }\n\n  const prefix = property.startsWith('$.') ? '' : '$.';\n  // jsonpath-plus's `JSONPath` is overloaded: by default `resultType: 'value'`\n  // returns an array of matched values, but the TS overload defaults to\n  // returning a `JSONPathClass` unless we pin `<T>` to the array shape.\n  // The `json` parameter is typed as a concrete JSON-shape union; the generic\n  // `T` of this function is unconstrained, so we cast at the boundary. The\n  // returned array is `any[]` (matching jsonpath's old typing) so the\n  // downstream `value[field.propertyField.key]` access keeps compiling.\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const queryResult = JSONPath<any[]>({\n    path: `${prefix}${property}`,\n    json: resource as object,\n  });\n  const value = queryResult.length ? queryResult[0] : undefined;\n\n  if (value && field.propertyField) {\n    return executeTransform(\n      value[field.propertyField.key],\n      field.propertyField.transform,\n    );\n  }\n\n  return value;\n};\n\nconst executeTransform = (\n  value: string | undefined,\n  transform: TransformType[] | undefined,\n): string | undefined => {\n  if (value == null || transform == null || !transform.length) return value;\n\n  return transform.reduce((acc, t) => {\n    if (acc == null) return acc;\n\n    switch (t) {\n      case 'uppercase':\n        return acc.toUpperCase();\n      case 'lowercase':\n        return acc.toLowerCase();\n      case 'capitalize': {\n        const str = String(acc);\n        return str.length ? str.charAt(0).toUpperCase() + str.slice(1) : str;\n      }\n      case 'decode': {\n        try {\n          return decodeBase64(acc);\n        } catch {\n          return acc;\n        }\n      }\n      case 'encode': {\n        try {\n          return encodeBase64(acc);\n        } catch {\n          return acc;\n        }\n      }\n      default:\n        return acc;\n    }\n  }, value);\n};\n\nexport const encodeBase64 = (str: string): string => {\n  try {\n    const utf8Bytes = new TextEncoder().encode(str);\n    const binaryString = Array.from(utf8Bytes, (byte) =>\n      String.fromCharCode(byte),\n    ).join('');\n    return btoa(binaryString);\n  } catch (error) {\n    console.error('Base64 encoding failed:', error);\n    throw new Error('Failed to encode string to Base64');\n  }\n};\n\nexport const decodeBase64 = (base64: string): string => {\n  try {\n    const binaryString = atob(base64);\n    const bytes = Uint8Array.from(binaryString, (char) => char.charCodeAt(0));\n    return new TextDecoder().decode(bytes);\n  } catch (error) {\n    console.error('Base64 decoding failed:', error);\n    throw new Error('Failed to decode Base64 string');\n  }\n};\n","import { FieldDefinition } from '../../models';\nimport { getResourceValueByJsonPath } from './resource-field-by-path';\n\nexport function getFieldValue<T>(\n  field: FieldDefinition,\n  resource: T | undefined,\n) {\n  if (resource) {\n    return getResourceValueByJsonPath<T>(resource, field) ?? field.value;\n  }\n\n  return field.value;\n}\n","import { CssRule, RuleCondition, ValueRule } from '../../models';\n\nexport const parseStringValue = (value: string) => {\n  if (value === 'true') {\n    return true;\n  }\n\n  if (value === 'false') {\n    return false;\n  }\n\n  if (!isNaN(Number(value))) {\n    return Number(value);\n  }\n\n  return value;\n};\n\ninterface ConditionRule { if: { condition: RuleCondition; value: string } }\n\nexport const ruleResolver = (\n  rule: ConditionRule,\n  resourceValue: string,\n): boolean => {\n  const parsedResouceValue = parseStringValue(resourceValue);\n  const parsedConditionValue = parseStringValue(rule.if.value);\n\n  switch (rule.if.condition) {\n    case 'equals':\n      return parsedResouceValue === parsedConditionValue;\n    case 'notEquals':\n      return parsedResouceValue !== parsedConditionValue;\n    case 'greaterThan':\n      return parsedResouceValue > parsedConditionValue;\n    case 'greaterThanOrEqual':\n      return parsedResouceValue >= parsedConditionValue;\n    case 'lessThan':\n      return parsedResouceValue < parsedConditionValue;\n    case 'lessThanOrEqual':\n      return parsedResouceValue <= parsedConditionValue;\n    case 'contains':\n      if (Array.isArray(parsedResouceValue)) {\n        return parsedResouceValue.includes(parsedConditionValue);\n      } else if (\n        typeof parsedResouceValue === 'string' &&\n        typeof parsedConditionValue === 'string'\n      ) {\n        return parsedResouceValue.includes(parsedConditionValue);\n      }\n\n      return false;\n  }\n  return false;\n};\n\nexport const evaluateCssRules = (\n  value: string,\n  rules?: CssRule[],\n): Partial<CSSStyleDeclaration> => {\n  if (!rules) {\n    return {};\n  }\n\n  return rules.reduce((acc, rule) => {\n    const result = ruleResolver(rule, value);\n    if (result) {\n      return { ...acc, ...rule.styles };\n    }\n    return acc;\n  }, {});\n};\n\nexport const evaluateValueRules = (\n  value: string,\n  rules?: ValueRule[],\n): string => {\n  if (!rules) return value;\n  for (const rule of rules) {\n    if (ruleResolver(rule, value)) return rule.then;\n  }\n  return value;\n};\n","export const ICON_DESIGN_POSITIVE = 'Positive';\nexport const ICON_DESIGN_NEGATIVE = 'Negative';\n\nexport const ICON_NAME_POSITIVE = 'accept';\nexport const ICON_NAME_NEGATIVE = 'decline';\n","import {\n  ICON_DESIGN_NEGATIVE,\n  ICON_DESIGN_POSITIVE,\n  ICON_NAME_NEGATIVE,\n  ICON_NAME_POSITIVE,\n} from './boolean-cell.constants';\nimport {\n  CUSTOM_ELEMENTS_SCHEMA,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from '@angular/core';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\n\nexport type IconDesignType = typeof ICON_DESIGN_POSITIVE | typeof ICON_DESIGN_NEGATIVE;\n\n@Component({\n  selector: 'mfp-boolean-value',\n  imports: [Icon],\n  templateUrl: './boolean-value.component.html',\n  styleUrl: './boolean-value.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class BooleanValue {\n  boolValue = input.required<boolean>();\n  testId = input<string>('boolean-value-icon');\n  iconDesign = computed<IconDesignType>(() => {\n    return this.boolValue() ? ICON_DESIGN_POSITIVE : ICON_DESIGN_NEGATIVE;\n  });\n  iconName = computed<string>(() => {\n    return this.boolValue() ? ICON_NAME_POSITIVE : ICON_NAME_NEGATIVE;\n  });\n}\n","<ui5-icon [attr.data-testid]=\"testId()\" [design]=\"iconDesign()\" [name]=\"iconName()\" />\n","import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { Link } from '@fundamental-ngx/ui5-webcomponents/link';\n\n@Component({\n  selector: 'mfp-link-value',\n  imports: [Link],\n  templateUrl: './link-value.component.html',\n  styleUrl: './link-value.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class LinkValue {\n  urlValue = input.required<string>();\n  testId = input<string>('link-value-link');\n\n  public stopPropagation(event: Event) {\n    event.stopPropagation();\n  }\n}\n","<ui5-link\n  target=\"_blank\"\n  [attr.data-testid]=\"testId()\"\n  [href]=\"urlValue()\"\n  [tooltip]=\"urlValue()\"\n  (click)=\"stopPropagation($event)\"\n>Link</ui5-link>\n","import { FieldDefinition, GenericResource } from '../../models';\nimport { getResourceValueByJsonPath } from '../../table/utils/resource-field-by-path';\nimport { ResourceField } from '../resource-field.component';\nimport {\n  CUSTOM_ELEMENTS_SCHEMA,\n  ChangeDetectionStrategy,\n  Component,\n  ViewEncapsulation,\n  computed,\n  forwardRef,\n  input,\n  signal,\n} from '@angular/core';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport '@ui5/webcomponents-icons/dist/navigation-down-arrow.js';\nimport '@ui5/webcomponents-icons/dist/navigation-right-arrow.js';\n\n/** One `label: value` row of an expanded collection card. */\ninterface CollectionRow {\n  label: string;\n  field: FieldDefinition;\n}\n\n/**\n * Read-only display for a `propertyCollection` field. Renders the resolved\n * array as a column of collapsed cards; expanding a card lists each sub-field\n * as a `label: value` row rendered through `mfp-resource-field`, so per-\n * sub-field `uiSettings` still apply. Mirrors the styling of the editable\n * `mfp-form-collection-field`.\n */\n@Component({\n  selector: 'mfp-resource-collection-field',\n  // `ResourceField` imports this component back, so the two form a module-init\n  // cycle. `forwardRef` defers resolution until the template is instantiated.\n  imports: [Icon, forwardRef(() => ResourceField)],\n  templateUrl: './resource-collection-field.component.html',\n  styleUrl: './resource-collection-field.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.ShadowDom,\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class ResourceCollectionField<\n  T extends GenericResource,\n  F extends FieldDefinition,\n> {\n  readonly fieldDefinition = input.required<F>();\n  readonly resource = input<T>();\n\n  protected readonly expandedIndex = signal<number | null>(null);\n\n  private readonly collectionPath = computed(() => {\n    const property = this.fieldDefinition().property;\n    return typeof property === 'string' ? property : undefined;\n  });\n\n  protected readonly entries = computed<Record<string, unknown>[]>(() => {\n    const value = getResourceValueByJsonPath(this.resource() ?? {}, {\n      property: this.collectionPath(),\n    });\n    return Array.isArray(value) ? (value as Record<string, unknown>[]) : [];\n  });\n\n  protected readonly rows = computed<CollectionRow[]>(() => {\n    const parent = this.collectionPath();\n    return (this.fieldDefinition().propertyCollection ?? []).map((sub) => {\n      const property =\n        typeof sub.property === 'string'\n          ? this.stripParentPath(sub.property, parent)\n          : sub.property;\n      return {\n        label: sub.label ?? this.leafOf(property),\n        field: { ...sub, property } as FieldDefinition,\n      };\n    });\n  });\n\n  toggle(index: number, event?: Event): void {\n    event?.stopPropagation();\n    this.expandedIndex.set(this.expandedIndex() === index ? null : index);\n  }\n\n  previewFor(entry: Record<string, unknown>, index: number): string {\n    for (const row of this.rows()) {\n      const raw = getResourceValueByJsonPath(entry, {\n        property: row.field.property,\n      });\n      if (raw !== undefined && raw !== null && String(raw).trim() !== '') {\n        return `${row.label}: ${String(raw)}`;\n      }\n    }\n    const prefix = (this.fieldDefinition().label ?? '').trim() || 'Item';\n    return `${prefix} ${index + 1}`;\n  }\n\n  private stripParentPath(name: string, parent: string | undefined): string {\n    if (!parent) return name;\n    if (name.startsWith(parent + '.')) {\n      return name.slice(parent.length + 1);\n    }\n    return name;\n  }\n\n  private leafOf(property: string | string[] | undefined): string {\n    if (typeof property !== 'string') return '';\n    const segments = property.split('.');\n    return segments[segments.length - 1];\n  }\n}\n","<div class=\"collection\" data-testid=\"resource-collection-field\">\n  @for (entry of entries(); track $index; let index = $index) {\n    @let expanded = expandedIndex() === index;\n    <div\n      class=\"card\"\n      [class.card--expanded]=\"expanded\"\n      [attr.data-testid]=\"'resource-collection-item-' + index\"\n    >\n      <button\n        type=\"button\"\n        class=\"card__header\"\n        [attr.aria-expanded]=\"expanded\"\n        [attr.data-testid]=\"'resource-collection-item-' + index + '-toggle'\"\n        (click)=\"toggle(index, $event)\"\n      >\n        <ui5-icon\n          class=\"card__chevron\"\n          [name]=\"expanded ? 'navigation-down-arrow' : 'navigation-right-arrow'\"\n        />\n        <span class=\"card__preview\">{{ previewFor(entry, index) }}</span>\n      </button>\n\n      @if (expanded) {\n        <div class=\"card__body\" (click)=\"$event.stopPropagation()\">\n          @for (row of rows(); track row.field.property) {\n            <div class=\"row\">\n              <span class=\"row__label\">{{ row.label }}:</span>\n              <mfp-resource-field\n                [fieldDefinition]=\"row.field\"\n                [resource]=\"entry\"\n              />\n            </div>\n          }\n        </div>\n      }\n    </div>\n  }\n</div>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from '@angular/core';\n\n@Component({\n  selector: 'mfp-secret-value',\n  imports: [],\n  templateUrl: './secret-value.component.html',\n  styleUrl: './secret-value.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  schemas: [],\n})\nexport class SecretValue {\n  value = input.required<string>();\n  isVisible = input<boolean>(false);\n  testId = input<string>('secret-value');\n  maskedValue = computed(() => '*'.repeat(this.value()?.length || 8));\n}\n","<span class=\"secret-value\" [attr.data-testid]=\"testId()\" [class.masked]=\"!isVisible()\">\n  @if (isVisible()) {\n    {{ value() }}\n  } @else {\n    {{ maskedValue() }}\n  }\n</span>\n","import { TagSettings } from '../../models';\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { Tag } from '@fundamental-ngx/ui5-webcomponents/tag';\n\n@Component({\n  selector: 'mfp-tag-list-value',\n  imports: [Tag],\n  templateUrl: './tag-list-value.component.html',\n  styleUrl: './tag-list-value.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TagListValue {\n  tags = input.required<string[]>();\n  tagSettings = input<TagSettings>();\n  testId = input<string>('tag-list-value');\n}\n","<span class=\"tag-list\" [attr.data-testid]=\"testId()\">\n  @for (tag of tags(); track $index) {\n    <ui5-tag\n      [colorScheme]=\"tagSettings()?.colorScheme\"\n      [design]=\"tagSettings()?.design ?? 'Neutral'\"\n      [hideStateIcon]=\"true\"\n    >{{ tag }}</ui5-tag>\n  }\n</span>\n","import {\n  FieldDefinition,\n  GenericResource,\n  ResourceFieldButtonClickEvent,\n} from '../models';\nimport { getFieldValue } from '../table/utils/field-definition.utils';\nimport {\n  evaluateCssRules,\n  evaluateValueRules,\n} from '../table/utils/rules.engine';\nimport { BooleanValue } from './boolean-value/boolean-value.component';\nimport { LinkValue } from './link-value/link-value.component';\nimport { ResourceCollectionField } from './resource-collection-field/resource-collection-field.component';\nimport { SecretValue } from './secret-value/secret-value.component';\nimport { TagListValue } from './tag-list-value/tag-list-value.component';\nimport {\n  CUSTOM_ELEMENTS_SCHEMA,\n  ChangeDetectionStrategy,\n  Component,\n  ViewEncapsulation,\n  computed,\n  forwardRef,\n  input,\n  output,\n  signal,\n} from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport '@ui5/webcomponents-icons/dist/AllIcons.js';\n\n@Component({\n  selector: 'mfp-resource-field',\n  imports: [\n    Icon,\n    BooleanValue,\n    LinkValue,\n    SecretValue,\n    Button,\n    TagListValue,\n    // `ResourceCollectionField` imports this component back (each expanded\n    // card renders its sub-fields via `mfp-resource-field`), so the two form\n    // a module-init cycle. `forwardRef` defers resolution until the template\n    // is instantiated, by which point both classes are defined.\n    forwardRef(() => ResourceCollectionField),\n  ],\n  templateUrl: './resource-field.component.html',\n  styleUrl: './resource-field.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.ShadowDom,\n  host: {\n    '[class.resource-field--collection]': 'isCollection()',\n  },\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class ResourceField<\n  T extends GenericResource,\n  F extends FieldDefinition,\n> {\n  fieldDefinition = input.required<F>();\n  resource = input<T>();\n  // keyed by row id; host sets row.id = permissionKey(entity/ns/name)\n  permissions = input<Record<string, string[]>>();\n  readonly buttonClick = output<ResourceFieldButtonClickEvent<T>>();\n\n  value = computed(() =>\n    getFieldValue(this.fieldDefinition(), this.resource()),\n  );\n\n  uiSettings = computed(() => this.fieldDefinition().uiSettings);\n  displayAs = computed(() => this.uiSettings()?.displayAs);\n  withCopyButton = computed(() => this.uiSettings()?.withCopyButton);\n  cssCustomization = computed(() => this.uiSettings()?.cssCustomization);\n  tooltipIcon = computed(() => this.uiSettings()?.tooltipIcon);\n  cssRules = computed(() =>\n    evaluateCssRules(this.value(), this.uiSettings()?.cssRules),\n  );\n  cssStyles = computed(() => ({\n    ...this.cssCustomization(),\n    ...this.cssRules(),\n  }));\n  displayValue = computed(() =>\n    evaluateValueRules(this.value() ?? '', this.uiSettings()?.valueRules),\n  );\n\n  isBoolLike = computed(() => this.boolValue() !== undefined);\n  isUrlValue = computed(() => this.checkValidUrl(this.stringValue()));\n  testId = computed(() => `resource-field-${this.fieldDefinition().property}`);\n  buttonDisabled = computed(() => this.resource()?.isAvailable === false);\n  buttonAccessibleName = computed(\n    () =>\n      (this.buttonDisabled() ? this.resource()?.accessibleName : undefined) ??\n      this.uiSettings()?.buttonSettings?.text ??\n      this.uiSettings()?.buttonSettings?.tooltip ??\n      this.uiSettings()?.buttonSettings?.icon ??\n      '',\n  );\n\n  boolValue = computed(() => this.normalizeBoolean(this.value()));\n  stringValue = computed(() => this.normalizeString(this.value()));\n  tags = computed(() => this.normalizeTagsArray(this.value()));\n  isVisible = signal(false);\n  copySuccess = signal(false);\n\n  isCollection = computed(\n    () => !!this.fieldDefinition().propertyCollection?.length,\n  );\n\n  protected canRenderField = computed(() => {\n    const perm = this.fieldDefinition().requirePermission;\n    if (!perm) {\n      return true;\n    }\n\n    const resourceId = this.resource()?.id;\n    if (!resourceId) {\n      return false;\n    }\n\n    return this.permissions()?.[resourceId]?.includes(perm) ?? false;\n  });\n\n  toggleVisibility(e: Event): void {\n    e.stopPropagation();\n    this.isVisible.set(!this.isVisible());\n  }\n\n  private normalizeBoolean(value: unknown): boolean | undefined {\n    const normalizedValue = value?.toString()?.toLowerCase();\n    if (normalizedValue === 'true') {\n      return true;\n    }\n    if (normalizedValue === 'false') {\n      return false;\n    }\n    return undefined;\n  }\n\n  private normalizeString(value: unknown): string | undefined {\n    if (typeof value !== 'string' || !value.trim()) {\n      return undefined;\n    }\n\n    return value;\n  }\n\n  private normalizeTagsArray(value: unknown): string[] {\n    if (Array.isArray(value)) {\n      return value.map((v) => String(v).trim()).filter((v) => v.length > 0);\n    }\n    if (typeof value === 'string') {\n      const separator = this.uiSettings()?.tagSettings?.valueSeparator ?? ',';\n      return value\n        .split(separator)\n        .map((v) => v.trim())\n        .filter((v) => v.length > 0);\n    }\n    return [];\n  }\n\n  private checkValidUrl(value: string | undefined): boolean {\n    if (!value) {\n      return false;\n    }\n\n    try {\n      new URL(value);\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  public copyValue(event: Event) {\n    event.stopPropagation();\n    navigator.clipboard.writeText(this.value() || '').then(() => {\n      this.copySuccess.set(true);\n      setTimeout(() => {\n        this.copySuccess.set(false);\n      }, 2000);\n    });\n  }\n\n  protected buttonClicked(event: MouseEvent) {\n    event.stopPropagation();\n    if (this.buttonDisabled()) {\n      return;\n    }\n\n    this.buttonClick.emit({\n      event,\n      field: this.fieldDefinition(),\n      resource: this.resource(),\n    });\n  }\n}\n","@if (canRenderField()) {\n  @if (isCollection()) {\n    <mfp-resource-collection-field\n      [fieldDefinition]=\"fieldDefinition()\"\n      [resource]=\"resource()\"\n    />\n  } @else {\n    @let displayType = displayAs();\n    <span [attr.data-testid]=\"testId()\" [style]=\"cssStyles()\">\n      @if (displayType === 'secret') {\n        <span class=\"secret-value-container\">\n          <mfp-secret-value [isVisible]=\"isVisible()\" [testId]=\"testId() + '-secret'\" [value]=\"value()\" />\n          <ui5-icon\n            class=\"toggle-icon\"\n            mode=\"Interactive\"\n            [accessibleName]=\"isVisible() ? 'Hide value' : 'Show value'\"\n            [attr.data-testid]=\"testId() + '-secret-toggle'\"\n            [name]=\"isVisible() ? 'hide' : 'show'\"\n            (click)=\"toggleVisibility($event)\"\n          />\n        </span>\n      } @else if (displayType === 'boolIcon' && isBoolLike()) {\n        <mfp-boolean-value [boolValue]=\"boolValue()!\" [testId]=\"testId() + '-boolean'\" />\n      } @else if (displayType === 'link' && isUrlValue()) {\n        <mfp-link-value [testId]=\"testId() + '-link'\" [urlValue]=\"stringValue()!\" />\n      } @else if (displayType === 'tooltip') {\n        <ui5-icon\n          [accessibleName]=\"stringValue()!\"\n          [attr.data-testid]=\"testId() + '-tooltip'\"\n          [name]=\"tooltipIcon() ?? 'hint'\"\n          [showTooltip]=\"true\"\n        />\n      } @else if (displayType === 'alert') {\n        @if (!value()) {\n          <ui5-icon\n            design=\"Critical\"\n            name=\"alert\"\n            [accessibleName]=\"resource()?.accessibleName ?? ''\"\n            [attr.data-testid]=\"testId() + '-icon'\"\n            [showTooltip]=\"true\"\n            (click)=\"$event.stopPropagation()\"\n          />\n        }\n      } @else if (displayType === 'img' && value()) {\n        <img alt=\"Resource image\" class=\"image-cell\" [src]=\"value()\" />\n      } @else if (displayType === 'button') {\n        @let buttonSettings = uiSettings()?.buttonSettings;\n        <ui5-button\n          [attr.data-testid]=\"testId() + '-button'\"\n          [accessibleName]=\"buttonAccessibleName()\"\n          [design]=\"buttonSettings?.design\"\n          [endIcon]=\"buttonSettings?.endIcon\"\n          [disabled]=\"buttonDisabled()\"\n          [icon]=\"buttonSettings?.icon\"\n          [tooltip]=\"buttonSettings?.tooltip\"\n          (click)=\"buttonClicked($event)\"\n          >{{ buttonSettings?.text }}</ui5-button\n        >&nbsp;\n      } @else if (displayType === 'tag') {\n        <mfp-tag-list-value\n          [tagSettings]=\"uiSettings()?.tagSettings\"\n          [tags]=\"tags()\"\n          [testId]=\"testId() + '-tags'\"\n        />\n      } @else {\n        {{ displayValue() }}\n      }\n    </span>\n\n    @if (withCopyButton()) {\n      <ui5-icon\n        class=\"toggle-icon\"\n        mode=\"Interactive\"\n        [accessibleName]=\"copySuccess() ? 'Copied' : 'Copy value'\"\n        [attr.data-testid]=\"testId() + '-copy'\"\n        [design]=\"copySuccess() ? 'Positive' : 'Default'\"\n        [name]=\"copySuccess() ? 'accept' : 'copy'\"\n        (click)=\"copyValue($event)\"\n      />\n    }\n  }\n}\n","import { TableFieldDefinition } from '../models';\n\ntype GroupBase = NonNullable<TableFieldDefinition['group']>;\ntype ProcessedGroup = GroupBase & {\n  fields?: TableFieldDefinition[];\n};\n\nexport type ProcessedTableFieldDefinition = Omit<TableFieldDefinition, 'group'> & {\n  group?: ProcessedGroup;\n};\n\nexport const processGroupFields = (\n  fields: TableFieldDefinition[],\n): ProcessedTableFieldDefinition[] => {\n  return combineGroupFields(fields);\n};\n\nconst collectGroupFields = (\n  fields: TableFieldDefinition[],\n): Record<string, TableFieldDefinition[]> => {\n  return fields.reduce(\n    (acc, f): Record<string, TableFieldDefinition[]> => {\n      if (!f.group?.name) {\n        return acc;\n      }\n\n      const key = f.group.name;\n      if (!acc[key]) {\n        acc[key] = [];\n      }\n\n      // Strip group information from the field when adding to the fields array\n      const { group, ...fieldWithoutGroup } = f;\n      acc[key].push(fieldWithoutGroup);\n      return acc;\n    },\n    {} as Record<string, TableFieldDefinition[]>,\n  );\n};\n\nconst combineGroupFields = (fields: TableFieldDefinition[]): ProcessedTableFieldDefinition[] => {\n  const seenGroup = new Set<string>();\n  const groupFields = collectGroupFields(fields);\n  const result: ProcessedTableFieldDefinition[] = [];\n\n  fields.forEach((f) => {\n    if (!f.group?.name) {\n      result.push(f);\n      return;\n    }\n\n    const key = f.group.name;\n    if (seenGroup.has(key)) {\n      return;\n    }\n\n    seenGroup.add(key);\n\n    const grouped: ProcessedTableFieldDefinition = {\n      ...f,\n      group: {\n        ...f.group,\n        fields: groupFields[key],\n      },\n    };\n\n    result.push(grouped);\n  });\n\n  return result;\n};\n","import { GenericResource, ResourceFieldButtonClickEvent } from '../../models';\nimport { ResourceField } from '../../resource-field';\nimport { TableFieldDefinition } from '../models';\nimport { processGroupFields } from '../utils/proccess-fields';\nimport { getResourceValueByJsonPath } from '../utils/resource-field-by-path';\nimport {\n  Component,\n  ViewEncapsulation,\n  computed,\n  input,\n  output,\n} from '@angular/core';\nimport { IllustratedMessage } from '@fundamental-ngx/ui5-webcomponents-fiori';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Option } from '@fundamental-ngx/ui5-webcomponents/option';\nimport { Select } from '@fundamental-ngx/ui5-webcomponents/select';\nimport { Table } from '@fundamental-ngx/ui5-webcomponents/table';\nimport { TableCell } from '@fundamental-ngx/ui5-webcomponents/table-cell';\nimport { TableGrowing } from '@fundamental-ngx/ui5-webcomponents/table-growing';\nimport { TableHeaderCell } from '@fundamental-ngx/ui5-webcomponents/table-header-cell';\nimport { TableHeaderRow } from '@fundamental-ngx/ui5-webcomponents/table-header-row';\nimport { TableRow } from '@fundamental-ngx/ui5-webcomponents/table-row';\nimport '@ui5/webcomponents-fiori/dist/illustrations/NoData.js';\nimport '@ui5/webcomponents-icons/dist/close-command-field.js';\nimport '@ui5/webcomponents-icons/dist/navigation-left-arrow.js';\nimport '@ui5/webcomponents-icons/dist/navigation-right-arrow.js';\nimport '@ui5/webcomponents-icons/dist/open-command-field.js';\n\n@Component({\n  selector: 'mfp-declarative-table',\n  imports: [\n    IllustratedMessage,\n    Table,\n    TableCell,\n    TableHeaderCell,\n    TableHeaderRow,\n    TableRow,\n    ResourceField,\n    Select,\n    Option,\n    TableGrowing,\n    Button,\n  ],\n  templateUrl: './declarative-table.component.html',\n  styleUrl: './declarative-table.component.scss',\n  encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class DeclarativeTable<T extends GenericResource> {\n  columns = input.required<TableFieldDefinition[]>();\n  resources = input.required<T[]>();\n  trackByPath = input<string>('id');\n  permissions = input<Record<string, string[]>>();\n\n  totalItemsCount = input<number>();\n  paginationLimit = input<number>(5);\n  hasMore = input<boolean>(false);\n  loadMode = input<'scroll' | 'button' | 'pager'>('button');\n  loadMoreButtonText = input<string>('Load More');\n  height = input<number>();\n  currentPage = input<number>(1);\n\n  readonly buttonClick = output<ResourceFieldButtonClickEvent<T>>();\n  readonly tableRowClicked = output<T>();\n  readonly loadMoreResources = output<void>();\n  readonly paginationLimitChanged = output<number>();\n  readonly pageChange = output<number>();\n\n  columnTrackBy = (column: TableFieldDefinition, index: number) =>\n    column.property ?? column.value ?? index;\n  rowTrackBy = (_index: number, item: T): unknown =>\n    getResourceValueByJsonPath(item, { property: this.trackByPath() }) ??\n    _index;\n  viewColumns = computed(() => processGroupFields(this.columns()));\n\n  onRowClick(item: T): void {\n    if (item.isAvailable !== false) {\n      this.tableRowClicked.emit(item);\n    }\n  }\n\n  isPagerMode = computed(() => this.loadMode() === 'pager');\n  knowsTotal = computed(() => this.totalItemsCount() !== undefined);\n  hasResults = computed(() => (this.totalItemsCount() ?? 0) > 0);\n  totalPages = computed(() =>\n    Math.max(\n      1,\n      Math.ceil((this.totalItemsCount() ?? 0) / this.paginationLimit()),\n    ),\n  );\n  canPrev = computed(() => this.currentPage() > 1);\n  canNext = computed(() =>\n    this.knowsTotal()\n      ? this.hasResults() && this.currentPage() < this.totalPages()\n      : this.hasMore(),\n  );\n\n  goToPage(page: number): void {\n    const maxPage = this.knowsTotal() ? this.totalPages() : Infinity;\n    const target = Math.min(Math.max(1, page), maxPage);\n    if (target !== this.currentPage()) {\n      this.pageChange.emit(target);\n    }\n  }\n\n  firstPage = () => {\n    this.goToPage(1);\n  };\n  prevPage = () => {\n    this.goToPage(this.currentPage() - 1);\n  };\n  nextPage = () => {\n    this.goToPage(this.currentPage() + 1);\n  };\n  lastPage = () => {\n    this.goToPage(this.totalPages());\n  };\n}\n","<ui5-table\n  data-testid=\"generic-table\"\n  [style.height]=\"height() ? height() + 'px' : null\"\n  [style.overflow-y]=\"'auto'\"\n>\n  <ui5-table-header-row\n    slot=\"headerRow\"\n    [sticky]=\"loadMode() === 'scroll' && !!height()\"\n  >\n    @for (column of viewColumns(); track columnTrackBy(column, $index)) {\n      @if (column.group) {\n        <ui5-table-header-cell\n          [attr.data-testid]=\"'generic-table-header-' + column.group.name\"\n          [width]=\"column.uiSettings?.columnWidth ?? 'auto'\"\n          >{{ column.group.label ?? column.group.name }}</ui5-table-header-cell\n        >\n      } @else {\n        <ui5-table-header-cell\n          [attr.data-testid]=\"'generic-table-header-' + column.property\"\n          [width]=\"column.uiSettings?.columnWidth ?? 'auto'\"\n          >{{ column.label }}</ui5-table-header-cell\n        >\n      }\n    }\n  </ui5-table-header-row>\n\n  @for (item of resources(); let i = $index; track rowTrackBy($index, item)) {\n    <ui5-table-row\n      [attr.data-testid]=\"'generic-table-row-' + i\"\n      [class.disabled]=\"item.isAvailable === false\"\n      [interactive]=\"item.isAvailable !== false\"\n      (click)=\"onRowClick(item)\"\n    >\n      @for (column of viewColumns(); track columnTrackBy(column, $index)) {\n        @if (column.group) {\n          <ui5-table-cell\n            [attr.data-testid]=\"'generic-table-cell-' + i + '-' + column.group.name\"\n          >\n            @let isMultiline = column.group.multiline ?? true;\n            <div\n              class=\"flex\"\n              [style.alignItems]=\"isMultiline ? column.uiSettings?.align : null\"\n              [style.flexDirection]=\"isMultiline ? 'column' : 'row'\"\n              [style.justifyContent]=\"\n                isMultiline ? null : column.uiSettings?.align\n              \"\n            >\n              @for (\n                field of column.group.fields;\n                let last = $last;\n                track columnTrackBy(field, $index)\n              ) {\n                <span\n                  class=\"group-value\"\n                  [attr.data-testid]=\"\n                    'generic-table-cell-' +\n                    i +\n                    '-' +\n                    column.group.name +\n                    '-' +\n                    field.property\n                  \"\n                >\n                  @if (field.label) {\n                    <span>{{ field.label }}: </span>\n                  }\n                  <mfp-resource-field\n                    [fieldDefinition]=\"field\"\n                    [resource]=\"item\"\n                    [permissions]=\"permissions()\"\n                    (buttonClick)=\"buttonClick.emit($event)\"\n                  />\n                </span>\n                @if (!last && column.group.delimiter) {\n                  <span class=\"delimiter\">{{ column.group.delimiter }}</span>\n                }\n              }\n            </div>\n          </ui5-table-cell>\n        } @else {\n          <ui5-table-cell\n            [attr.data-testid]=\"'generic-table-cell-' + i + '-' + column.property\"\n          >\n            <div class=\"flex\" [style.justifyContent]=\"column.uiSettings?.align\">\n              <mfp-resource-field\n                [fieldDefinition]=\"column\"\n                [resource]=\"item\"\n                [permissions]=\"permissions()\"\n                (buttonClick)=\"buttonClick.emit($event)\"\n              />\n            </div>\n          </ui5-table-cell>\n        }\n      }\n    </ui5-table-row>\n  } @empty {\n    <ui5-illustrated-message\n      data-testid=\"generic-table-view-nodata\"\n      name=\"NoData\"\n      slot=\"noData\"\n    >\n      <span slot=\"title\">No Resources</span>\n      <span slot=\"subtitle\">There are currently no items to show.</span>\n    </ui5-illustrated-message>\n  }\n\n  @if (loadMode() !== 'pager' && hasMore()) {\n    <ui5-table-growing\n      data-testid=\"generic-table-growing\"\n      id=\"growing\"\n      slot=\"features\"\n      [mode]=\"loadMode() === 'scroll' ? 'Scroll' : 'Button'\"\n      [text]=\"loadMoreButtonText()\"\n      (ui5LoadMore)=\"loadMoreResources.emit()\"\n    />\n  }\n</ui5-table>\n\n<!-- Pagination Control -->\n<div\n  class=\"pagination-footer\"\n  style=\"\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    padding: 0rem 1rem;\n    min-height: 3rem;\n    border-top: 1px solid var(--sapList_BorderColor);\n  \"\n>\n  <div class=\"pagination-footer__side\" style=\"display: flex; align-items: center; gap: 0.5rem\">\n    <span style=\"color: var(--sapTextColor); font-size: var(--sapFontSmallSize)\">\n      {{ isPagerMode() ? 'Items per page:' : 'Items per load:' }}\n    </span>\n    <ui5-select\n      data-testid=\"generic-table-pagination-select\"\n      style=\"width: 5rem\"\n      [value]=\"paginationLimit().toString()\"\n      (change)=\"paginationLimitChanged.emit(+$any($event)?.target?.value)\"\n    >\n      <ui5-option value=\"5\">5</ui5-option>\n      <ui5-option value=\"10\">10</ui5-option>\n      <ui5-option value=\"20\">20</ui5-option>\n      <ui5-option value=\"50\">50</ui5-option>\n      <ui5-option value=\"100\">100</ui5-option>\n    </ui5-select>\n  </div>\n\n  @if (isPagerMode()) {\n    <div class=\"pager\" data-testid=\"generic-table-pager\">\n      @if (knowsTotal()) {\n        <ui5-button\n          accessibleName=\"First page\"\n          data-testid=\"generic-table-pager-first\"\n          design=\"Transparent\"\n          icon=\"close-command-field\"\n          [disabled]=\"!canPrev()\"\n          (click)=\"firstPage()\"\n        />\n      }\n      <ui5-button\n        accessibleName=\"Previous page\"\n        data-testid=\"generic-table-pager-prev\"\n        design=\"Transparent\"\n        icon=\"navigation-left-arrow\"\n        [disabled]=\"!canPrev()\"\n        (click)=\"prevPage()\"\n      />\n      <span\n        class=\"pager__indicator\"\n        data-testid=\"generic-table-pager-indicator\"\n        >{{\n          knowsTotal()\n            ? (hasResults() ? currentPage() + ' / ' + totalPages() : '–')\n            : currentPage()\n        }}</span\n      >\n      <ui5-button\n        accessibleName=\"Next page\"\n        data-testid=\"generic-table-pager-next\"\n        design=\"Transparent\"\n        icon=\"navigation-right-arrow\"\n        [disabled]=\"!canNext()\"\n        (click)=\"nextPage()\"\n      />\n      @if (knowsTotal()) {\n        <ui5-button\n          accessibleName=\"Last page\"\n          data-testid=\"generic-table-pager-last\"\n          design=\"Transparent\"\n          icon=\"open-command-field\"\n          [disabled]=\"!canNext()\"\n          (click)=\"lastPage()\"\n        />\n      }\n    </div>\n    <div class=\"pagination-footer__side pagination-footer__side--end\">\n        @if (knowsTotal()) {\n          <span\n            data-testid=\"generic-table-item-count\"\n            style=\"color: var(--sapTextColor); font-size: var(--sapFontSmallSize)\"\n          >\n            <b style=\"font-size: var(--sapFontSize)\">{{ totalItemsCount() }}</b>\n            Items\n          </span>\n      }\n      </div>\n  } @else {\n    <div class=\"pagination-footer__side pagination-footer__side--end\">\n      <span\n        style=\"color: var(--sapTextColor); font-size: var(--sapFontSmallSize)\"\n      >\n        Items loaded:\n        <b style=\"font-size: var(--sapFontSize)\">{{\n          totalItemsCount() !== undefined\n            ? resources().length + ' / ' + totalItemsCount()\n            : resources().length\n        }}</b>\n      </span>\n    </div>\n  }\n</div>\n","import { FieldFilterDefinition } from '../models/configs';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  Injector,\n  OnDestroy,\n  ViewEncapsulation,\n  afterNextRender,\n  effect,\n  inject,\n  input,\n  output,\n  signal,\n  viewChild,\n} from '@angular/core';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport '@ui5/webcomponents-icons/dist/navigation-left-arrow.js';\nimport '@ui5/webcomponents-icons/dist/navigation-right-arrow.js';\n\n/**\n * Horizontal filter-tab strip rendered above the table by\n * `<mfp-declarative-table-card>`. Internal to the table-card — not part of the\n * package public API.\n *\n * Renders one tab per {@link FieldFilterDefinition}. When the combined width\n * exceeds the host width, left/right chevron buttons appear and scroll the\n * strip by ~70% of the visible width per click; the native scrollbar is hidden.\n *\n * Initial active tab:\n * - The first `FieldFilterDefinition` with `default: true`, if any.\n * - Otherwise the first tab in the array.\n *\n * The component owns the active-tab state; the host only needs to listen to\n * `tabChanged` and apply the picked filter to its data layer. If the host\n * wants an \"All / no filter\" option it must author it as a regular tab — the\n * strip never auto-prepends one. The output type still allows `undefined` for\n * forward compatibility with hosts that want to clear the selection.\n */\n@Component({\n  selector: 'mfp-filter-tabs',\n  standalone: true,\n  imports: [Icon],\n  templateUrl: './filter-tabs.component.html',\n  styleUrl: './filter-tabs.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class FilterTabs implements OnDestroy {\n  tabs = input.required<FieldFilterDefinition[]>();\n  readonly tabChanged = output<FieldFilterDefinition | undefined>();\n\n  protected activeTab = signal<FieldFilterDefinition | undefined>(undefined);\n  protected stripRef = viewChild<ElementRef<HTMLDivElement>>('strip');\n  protected canScrollLeft = signal(false);\n  protected canScrollRight = signal(false);\n\n  private readonly injector = inject(Injector);\n  private resizeObserver?: ResizeObserver;\n\n  constructor() {\n    effect(() => {\n      const tabs = this.tabs();\n      const next = tabs.find((t) => t.default) ?? tabs[0];\n      this.activeTab.set(next);\n      afterNextRender(() => this.recomputeScrollState(), {\n        injector: this.injector,\n      });\n    });\n\n    afterNextRender(\n      () => {\n        const el = this.stripRef()?.nativeElement;\n        if (!el) return;\n        this.resizeObserver = new ResizeObserver(() =>\n          this.recomputeScrollState(),\n        );\n        this.resizeObserver.observe(el);\n        this.recomputeScrollState();\n      },\n      { injector: this.injector },\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.resizeObserver?.disconnect();\n  }\n\n  /**\n   * Reflects the carousel's current `scrollLeft` into signals that drive the\n   * chevron buttons' visibility. Called on init, on user scroll, and after\n   * any size change.\n   */\n  protected recomputeScrollState(): void {\n    const el = this.stripRef()?.nativeElement;\n    if (!el) {\n      this.canScrollLeft.set(false);\n      this.canScrollRight.set(false);\n      return;\n    }\n    const { scrollLeft, scrollWidth, clientWidth } = el;\n    // 1px tolerance — browsers occasionally report fractional pixel widths.\n    this.canScrollLeft.set(scrollLeft > 1);\n    this.canScrollRight.set(scrollLeft + clientWidth < scrollWidth - 1);\n  }\n\n  protected onScroll(): void {\n    this.recomputeScrollState();\n  }\n\n  /**\n   * Scrolls the strip by ~70% of its visible width so one filter overlaps\n   * the previous viewport — matches the carousel idiom in SAP and Material.\n   */\n  protected scroll(direction: 'left' | 'right'): void {\n    const el = this.stripRef()?.nativeElement;\n    if (!el) return;\n    const delta = el.clientWidth * 0.7 * (direction === 'right' ? 1 : -1);\n    el.scrollBy({ left: delta, behavior: 'smooth' });\n  }\n\n  protected select(tab: FieldFilterDefinition): void {\n    this.activeTab.set(tab);\n    this.tabChanged.emit(tab);\n  }\n}\n","<div class=\"filter-tabs\">\n  @if (canScrollLeft()) {\n    <button\n      type=\"button\"\n      class=\"filter-tabs__chevron filter-tabs__chevron--left\"\n      aria-label=\"Scroll filters left\"\n      (click)=\"scroll('left')\"\n    >\n      <ui5-icon name=\"navigation-left-arrow\" />\n    </button>\n  }\n  <div\n    #strip\n    class=\"filter-tabs__strip\"\n    role=\"tablist\"\n    (scroll)=\"onScroll()\"\n  >\n    @for (tab of tabs(); track tab.property + ':' + tab.value) {\n      <button\n        type=\"button\"\n        role=\"tab\"\n        class=\"filter-tabs__tab\"\n        [class.filter-tabs__tab--active]=\"activeTab() === tab\"\n        [attr.aria-selected]=\"activeTab() === tab\"\n        (click)=\"select(tab)\"\n      >\n        {{ tab.label }}\n      </button>\n    }\n  </div>\n  @if (canScrollRight()) {\n    <button\n      type=\"button\"\n      class=\"filter-tabs__chevron filter-tabs__chevron--right\"\n      aria-label=\"Scroll filters right\"\n      (click)=\"scroll('right')\"\n    >\n      <ui5-icon name=\"navigation-right-arrow\" />\n    </button>\n  }\n</div>\n","import { DeleteConfirmationDialog } from '../dialogs/delete-confirmation-dialog/delete-confirmation-dialog.component';\nimport { ResourceFormDialog } from '../dialogs/resource-form-dialog/resource-form-dialog.component';\nimport { FormFieldChangeEvent, FormFieldDefinition } from '../form';\nimport { GenericResource, ResourceFieldButtonClickEvent } from '../models';\nimport { DeclarativeTable } from '../table';\nimport { getResourceValueByJsonPath } from '../table/utils/resource-field-by-path';\nimport { FilterTabs } from './filter-tabs/filter-tabs.component';\nimport {\n  FieldFilterDefinition,\n  TableCardConfig,\n  TableCardFormState,\n} from './models/configs';\nimport {\n  CUSTOM_ELEMENTS_SCHEMA,\n  ChangeDetectionStrategy,\n  Component,\n  ViewEncapsulation,\n  computed,\n  input,\n  output,\n  signal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport { Input } from '@fundamental-ngx/ui5-webcomponents/input';\nimport '@ui5/webcomponents-icons/dist/add.js';\nimport '@ui5/webcomponents-icons/dist/search.js';\nimport { debounceTime, distinctUntilChanged, filter, map } from 'rxjs';\n\n@Component({\n  selector: 'mfp-declarative-table-card',\n  imports: [\n    DeclarativeTable,\n    FilterTabs,\n    ReactiveFormsModule,\n    Button,\n    Icon,\n    Input,\n    ResourceFormDialog,\n    DeleteConfirmationDialog,\n  ],\n  templateUrl: './declarative-table-card.component.html',\n  styleUrl: './declarative-table-card.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.ShadowDom,\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class DeclarativeTableCard<R extends GenericResource> {\n  resources = input.required<R[]>();\n  permissions = input<Record<string, string[]>>();\n\n  config = input.required<TableCardConfig<R>>();\n  createFormState = input<TableCardFormState>({});\n  editFormState = input<TableCardFormState>({});\n\n  readonly actionButtonClick = output<ResourceFieldButtonClickEvent<R>>();\n  readonly tableRowClicked = output<R>();\n  readonly loadMoreResources = output<void>();\n  readonly paginationLimitChanged = output<number>();\n  readonly pageChange = output<number>();\n\n  readonly searchChanged = output<string>();\n  readonly createFieldChange = output<FormFieldChangeEvent>();\n  readonly editFieldChange = output<{\n    resource: R;\n    formChangeEvent: FormFieldChangeEvent;\n  }>();\n  readonly createSubmit = output<R>();\n  readonly editSubmit = output<{\n    resource: R;\n    value: Record<string, unknown>;\n  }>();\n  readonly deleteSubmit = output<R>();\n  readonly filterTabChanged = output<FieldFilterDefinition | undefined>();\n\n  protected searchControl = new FormControl('');\n\n  protected createDialogOpen = signal(false);\n  protected editDialogOpen = signal(false);\n  protected deleteDialogOpen = signal(false);\n\n  protected pendingResource = signal<R | null>(null);\n  protected resolvedCreateFields = signal<FormFieldDefinition[]>([]);\n  protected resolvedEditFields = signal<FormFieldDefinition[]>([]);\n\n  protected tableConfig = computed(() => this.config().tableConfig);\n  protected header = computed(() => this.config().header);\n  protected headerTooltip = computed(() => this.config().headerTooltip);\n  protected createFormConfig = computed(\n    () => this.config().createResourceFormConfig,\n  );\n  protected editFormConfig = computed(() => {\n    const pendingResource = this.pendingResource();\n    if (!pendingResource) {\n      return;\n    }\n\n    return this.config().editResourceFormConfig?.(pendingResource);\n  });\n  protected deleteConfirmationConfig = computed(() => {\n    const pendingResource = this.pendingResource();\n    if (!pendingResource) {\n      return;\n    }\n\n    return this.config().deleteResourceConfirmationConfig?.(pendingResource);\n  });\n  protected createButtonConfig = computed(\n    () => this.config().buttonSettings?.createButton,\n  );\n  protected searchButtonConfig = computed(\n    () => this.config().buttonSettings?.searchButton,\n  );\n  protected effectiveColumns = computed(() => this.tableConfig().fields);\n  protected editInitialValue = computed(() => {\n    const pendingResource = this.pendingResource();\n    const editConfig = this.editFormConfig();\n    if (!pendingResource || !editConfig) {\n      return {};\n    }\n\n    return this.buildInitialValues(this.resolvedEditFields(), pendingResource);\n  });\n\n  protected searchConfig = computed(() => this.config().searchConfig);\n  protected resourcesSearchable = computed(() => !!this.searchConfig());\n  protected searchPlaceholder = computed(\n    () => this.searchConfig()?.placeholder ?? 'Search',\n  );\n\n  protected filterTabs = computed(() => {\n    const tabs = this.searchConfig()?.filterTabs;\n    if (!tabs?.length) return [];\n\n    const initial = this.searchConfig()?.initialFilter;\n    if (!initial) {\n      return tabs;\n    }\n\n    const matches = tabs.some(\n      (t) => t.property === initial.property && t.value === initial.value,\n    );\n    if (!matches) return tabs;\n\n    return tabs.map((tab) =>\n      tab.property === initial.property && tab.value === initial.value\n        ? { ...tab, default: true }\n        : tab.default\n          ? { ...tab, default: false }\n          : tab,\n    );\n  });\n\n  protected hasFilterTabs = computed(() => this.filterTabs().length > 0);\n\n  constructor() {\n    this.searchControl.valueChanges\n      .pipe(debounceTime(500), distinctUntilChanged(), takeUntilDestroyed())\n      .subscribe((value) => {\n        this.searchChanged.emit(value ?? '');\n      });\n\n    toObservable(this.searchConfig)\n      .pipe(\n        map((config) => config?.initialSearch),\n        filter((initial): initial is string => !!initial),\n        takeUntilDestroyed(),\n      )\n      .subscribe((initial) => {\n        this.searchControl.setValue(initial, { emitEvent: false });\n      });\n  }\n\n  protected onFilterTabChanged(tab: FieldFilterDefinition | undefined): void {\n    this.filterTabChanged.emit(tab);\n  }\n\n  submitSearch(): void {\n    this.searchChanged.emit(this.searchControl.value ?? '');\n  }\n\n  onButtonClick(event: ResourceFieldButtonClickEvent<R>): void {\n    if (event.resource?.isAvailable === false) {\n      return;\n    }\n\n    const action = event.field.uiSettings?.buttonSettings?.action;\n    if (action === 'update' && event.resource) {\n      this.pendingResource.set(event.resource);\n      void this.openEditDialog(event.resource);\n      return;\n    }\n    if (action === 'delete' && event.resource) {\n      this.pendingResource.set(event.resource);\n      this.deleteDialogOpen.set(true);\n      return;\n    }\n\n    this.actionButtonClick.emit(event);\n  }\n\n  async openCreateDialog(): Promise<void> {\n    this.resolvedCreateFields.set(\n      await this.resolveFormFields(this.createFormConfig()?.fields),\n    );\n    this.createDialogOpen.set(true);\n  }\n\n  private async openEditDialog(resource: R): Promise<void> {\n    const config = this.config().editResourceFormConfig?.(resource);\n    const fields = await this.resolveFormFields(config?.fields);\n    // A newer update action may have replaced the pending resource while we\n    // awaited the field resolver; ignore this stale result so the dialog never\n    // shows one resource's fields with another's initial values.\n    if (this.pendingResource() !== resource) {\n      return;\n    }\n\n    this.resolvedEditFields.set(fields);\n    this.editDialogOpen.set(true);\n  }\n\n  private async resolveFormFields(\n    fields:\n      | FormFieldDefinition[]\n      | (() => Promise<FormFieldDefinition[]>)\n      | undefined,\n  ): Promise<FormFieldDefinition[]> {\n    if (!fields) return [];\n    return typeof fields === 'function' ? await fields() : fields;\n  }\n\n  closeCreateDialog(): void {\n    this.createDialogOpen.set(false);\n  }\n\n  closeEditDialog(): void {\n    this.editDialogOpen.set(false);\n  }\n\n  closeDeleteDialog(): void {\n    this.deleteDialogOpen.set(false);\n  }\n\n  onCreateFieldChange(event: FormFieldChangeEvent): void {\n    this.createFieldChange.emit(event);\n  }\n\n  onEditFieldChange(event: FormFieldChangeEvent): void {\n    const resource = this.pendingResource();\n\n    if (resource) {\n      this.editFieldChange.emit({ resource, formChangeEvent: event });\n    }\n  }\n\n  onCreateSubmit(value: Record<string, unknown>): void {\n    this.createSubmit.emit(value as R);\n  }\n\n  onEditSubmit(value: Record<string, unknown>): void {\n    const resource = this.pendingResource();\n\n    if (resource) {\n      this.editSubmit.emit({ resource, value });\n    }\n  }\n\n  onDeleteSubmit(): void {\n    const resource = this.pendingResource();\n    if (resource) this.deleteSubmit.emit(resource);\n  }\n\n  private buildInitialValues(\n    fields: FormFieldDefinition[],\n    resource?: R,\n  ): Record<string, unknown> {\n    if (!resource) return {};\n\n    return fields.reduce(\n      (acc, field) => {\n        if (typeof field.name === 'string') {\n          acc[field.name] =\n            getResourceValueByJsonPath(resource, { property: field.name }) ??\n            '';\n        }\n        return acc;\n      },\n      {} as Record<string, unknown>,\n    );\n  }\n}\n","<div class=\"card\" data-testid=\"generic-table-card\">\n  <div class=\"card__header\">\n    <div class=\"card__title\">\n      @if (header(); as header) {\n        {{ header }}\n        @if (headerTooltip(); as tooltip) {\n          <ui5-icon\n            class=\"card__info-icon\"\n            name=\"hint\"\n            [accessibleName]=\"tooltip\"\n            [showTooltip]=\"true\"\n          />\n        }\n      }\n    </div>\n    <div class=\"card__actions\">\n      @if (resourcesSearchable()) {\n        <ui5-input\n          class=\"card__search-input\"\n          data-testid=\"generic-table-card-search-input\"\n          [formControl]=\"searchControl\"\n          [placeholder]=\"searchPlaceholder()\"\n          [showClearIcon]=\"true\"\n        >\n          <ui5-icon\n            class=\"card__search-icon\"\n            data-testid=\"generic-table-card-search-icon\"\n            name=\"search\"\n            slot=\"icon\"\n            [accessibleName]=\"searchButtonConfig()?.tooltip ?? 'Search'\"\n            [showTooltip]=\"true\"\n            (click)=\"submitSearch()\"\n          />\n        </ui5-input>\n      }\n      @if (createFormConfig()) {\n        <ui5-button\n          class=\"card__create-btn\"\n          data-testid=\"generic-table-card-create-btn\"\n          [accessibleName]=\"\n            createButtonConfig()?.text ||\n            createButtonConfig()?.tooltip ||\n            'Create'\n          \"\n          [design]=\"createButtonConfig()?.design ?? 'Transparent'\"\n          [icon]=\"createButtonConfig()?.icon ?? 'add'\"\n          [tooltip]=\"createButtonConfig()?.tooltip\"\n          (click)=\"openCreateDialog()\"\n        >\n          {{ createButtonConfig()?.text ?? '' }}\n        </ui5-button>\n      }\n    </div>\n  </div>\n\n  @if (hasFilterTabs()) {\n    <mfp-filter-tabs\n      [tabs]=\"filterTabs()\"\n      (tabChanged)=\"onFilterTabChanged($event)\"\n    />\n  }\n\n  <div class=\"card__body\">\n    @if (tableConfig(); as config) {\n      <mfp-declarative-table\n        [columns]=\"effectiveColumns()\"\n        [currentPage]=\"config.currentPage ?? 1\"\n        [hasMore]=\"config.hasMore ?? false\"\n        [height]=\"config.height\"\n        [loadMode]=\"config.loadMode ?? 'button'\"\n        [loadMoreButtonText]=\"config.loadMoreButtonText ?? 'Load More'\"\n        [paginationLimit]=\"config.paginationLimit ?? 5\"\n        [permissions]=\"permissions()\"\n        [resources]=\"resources()\"\n        [totalItemsCount]=\"config.totalItemsCount\"\n        (buttonClick)=\"onButtonClick($event)\"\n        (loadMoreResources)=\"loadMoreResources.emit()\"\n        (pageChange)=\"pageChange.emit($event)\"\n        (paginationLimitChanged)=\"paginationLimitChanged.emit($event)\"\n        (tableRowClicked)=\"tableRowClicked.emit($event)\"\n      />\n    }\n  </div>\n</div>\n\n@if (createDialogOpen()) {\n  <mfp-resource-form-dialog\n    [open]=\"createDialogOpen()\"\n    [config]=\"createFormConfig()\"\n    [fields]=\"resolvedCreateFields()\"\n    [fieldErrors]=\"createFormState().fieldErrors ?? {}\"\n    [initialValues]=\"{}\"\n    defaultTitle=\"Create\"\n    defaultConfirmLabel=\"Save\"\n    dataTestidPrefix=\"generic-table-card-create\"\n    (fieldChange)=\"onCreateFieldChange($event)\"\n    (submitted)=\"onCreateSubmit($event)\"\n    (cancelled)=\"closeCreateDialog()\"\n  />\n}\n\n@if (editDialogOpen()) {\n  <mfp-resource-form-dialog\n    [open]=\"editDialogOpen()\"\n    [config]=\"editFormConfig()\"\n    [fields]=\"resolvedEditFields()\"\n    [fieldErrors]=\"editFormState().fieldErrors ?? {}\"\n    [initialValues]=\"editInitialValue()\"\n    defaultTitle=\"Edit\"\n    defaultConfirmLabel=\"Edit\"\n    dataTestidPrefix=\"generic-table-card-edit\"\n    (fieldChange)=\"onEditFieldChange($event)\"\n    (submitted)=\"onEditSubmit($event)\"\n    (cancelled)=\"closeEditDialog()\"\n  />\n}\n\n<mfp-delete-confirmation-dialog\n  [open]=\"deleteDialogOpen()\"\n  [config]=\"deleteConfirmationConfig()\"\n  (confirmed)=\"onDeleteSubmit()\"\n  (cancelled)=\"closeDeleteDialog()\"\n/>\n","import { Component, ViewEncapsulation, input, output } from '@angular/core';\nimport { Card } from '@fundamental-ngx/ui5-webcomponents/card';\nimport { CardHeader } from '@fundamental-ngx/ui5-webcomponents/card-header';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport '@ui5/webcomponents-icons/dist/AllIcons.js';\n\n@Component({\n  selector: 'mfp-visited-service-card',\n  imports: [Card, CardHeader, Icon],\n  templateUrl: './visited-service-card.component.html',\n  styleUrl: './visited-service-card.component.scss',\n  encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class VisitedServiceCard {\n  serviceType = input.required<string>();\n  serviceName = input.required<string>();\n  serviceDescription = input.required<string>();\n  serviceIcon = input.required<string>();\n  path = input.required<string>();\n\n  readonly cardClick = output<string>();\n}\n","<div\n  class=\"visited-card-wrapper\"\n  role=\"button\"\n  tabindex=\"0\"\n  (click)=\"cardClick.emit(path())\"\n  (keydown.enter)=\"cardClick.emit(path())\"\n>\n  <span class=\"visited-card__type-badge\">{{ serviceType() }}</span>\n  <ui5-card class=\"visited-card\">\n    <ui5-card-header\n      slot=\"header\"\n      [interactive]=\"true\"\n      [subtitleText]=\"serviceDescription()\"\n      [titleText]=\"serviceName()\"\n    >\n      <ui5-icon\n        class=\"visited-card__icon\"\n        slot=\"avatar\"\n        [name]=\"serviceIcon()\"\n      />\n    </ui5-card-header>\n  </ui5-card>\n</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\n\n@Component({\n  selector: 'mfp-favorites',\n  imports: [Button, Icon, Title],\n  templateUrl: './favorites.component.html',\n  styleUrl: './favorites.component.scss',\n  encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class Favorites {\n  readonly items = [\n    { label: 'Create Account', icon: 'add', action: 'create-account' },\n    { label: 'Start Approval', icon: 'workflow-tasks', action: 'start-approval' },\n    { label: 'Add User to Account', icon: 'person-placeholder', action: 'add-user' },\n  ];\n}\n","<div class=\"favorites\">\n  <ui5-title class=\"favorites__title\" level=\"H5\">Favorites</ui5-title>\n  <div class=\"favorites__list\">\n    @for (item of items; track item.action) {\n      <div class=\"favorites__item\">\n        <ui5-icon class=\"favorites__icon\" [name]=\"item.icon\" />\n        <span class=\"favorites__label\">{{ item.label }}</span>\n        <ui5-button design=\"Transparent\" [icon]=\"item.icon\">{{ item.label }}</ui5-button>\n      </div>\n    }\n  </div>\n</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\n\n/** Possible health states for a service. */\nexport type ServiceStatusValue = 'operational' | 'degraded' | 'outage' | 'maintenance';\n\n/** A single service entry displayed in the service-status card. */\nexport interface ServiceStatusItem {\n  /** Display name of the service. */\n  name: string;\n  /** SAP UI5 icon name used as the service icon. */\n  icon: string;\n  /** Current health status of the service. */\n  status: ServiceStatusValue;\n}\n\n@Component({\n  selector: 'mfp-service-status-card',\n  imports: [Icon, Title],\n  templateUrl: './service-status-card.component.html',\n  styleUrl: './service-status-card.component.scss',\n  encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class ServiceStatusCard {\n  readonly services: ServiceStatusItem[] = [\n    { name: 'API Gateway', icon: 'connected', status: 'operational' },\n    { name: 'Identity Service', icon: 'customer', status: 'operational' },\n    { name: 'Database Cluster', icon: 'database', status: 'degraded' },\n    { name: 'Message Queue', icon: 'email', status: 'operational' },\n    { name: 'Object Storage', icon: 'storage', status: 'maintenance' },\n    { name: 'Audit Log', icon: 'log', status: 'outage' },\n  ];\n\n  readonly statusConfig: Record<ServiceStatusValue, { label: string; icon: string; colorClass: string }> = {\n    operational: { label: 'Operational', icon: 'status-positive', colorClass: 'status--operational' },\n    degraded:    { label: 'Degraded',    icon: 'status-critical', colorClass: 'status--degraded' },\n    outage:      { label: 'Outage',      icon: 'status-negative', colorClass: 'status--outage' },\n    maintenance: { label: 'Maintenance', icon: 'status-inactive', colorClass: 'status--maintenance' },\n  };\n}\n","<div class=\"service-status\">\n  <ui5-title class=\"service-status__title\" level=\"H5\">Service Availability</ui5-title>\n  <div class=\"service-status__list\">\n    @for (service of services; track service.name) {\n      <div class=\"service-status__item\">\n        <ui5-icon class=\"service-status__icon\" [name]=\"service.icon\" />\n        <span class=\"service-status__name\">{{ service.name }}</span>\n        <div [class]=\"'service-status__status ' + statusConfig[service.status].colorClass\">\n          <ui5-icon class=\"service-status__status-icon\" [name]=\"statusConfig[service.status].icon\" />\n          <span class=\"service-status__status-label\">{{ statusConfig[service.status].label }}</span>\n        </div>\n      </div>\n    }\n  </div>\n</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { List } from '@fundamental-ngx/ui5-webcomponents/list';\nimport { ListItemStandard } from '@fundamental-ngx/ui5-webcomponents/list-item-standard';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\n\n@Component({\n  selector: 'mfp-whats-new',\n  imports: [List, ListItemStandard, Title],\n  templateUrl: './whats-new.component.html',\n  styleUrl: './whats-new.component.scss',\n  encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class WhatsNew {\n  readonly headlines = [\n    {\n      title: 'Kubernetes 1.32 Released',\n      description: 'Improved scheduling, new APIs and graduated features.',\n      icon: 'cloud',\n    },\n    {\n      title: 'Angular 20 Signals Stable',\n      description: 'Signal-based reactivity is now production-ready.',\n      icon: 'developer-settings',\n    },\n    {\n      title: 'WebAssembly WASI 2.0 Preview',\n      description: 'System interface advances bring server-side WASM closer.',\n      icon: 'technical-object',\n    },\n    {\n      title: 'OpenTelemetry Hits 1.0',\n      description: 'Unified observability standard lands in enterprise stacks.',\n      icon: 'monitor-payments',\n    },\n    {\n      title: 'Rust Enters Linux Kernel Mainstream',\n      description: 'More subsystems accept Rust driver contributions.',\n      icon: 'settings',\n    },\n    {\n      title: 'TypeScript 5.8 Performance Boost',\n      description: 'Declaration emit is up to 10x faster in large projects.',\n      icon: 'accelerated',\n    },\n  ];\n}\n","<div class=\"whats-new\">\n  <ui5-title class=\"whats-new__title\" level=\"H5\">What's New</ui5-title>\n  <ui5-list class=\"whats-new__list\" separators=\"Inner\">\n    @for (item of headlines; track item.title) {\n      <ui5-li [description]=\"item.description\" [icon]=\"item.icon\">\n        {{ item.title }}\n      </ui5-li>\n    }\n  </ui5-list>\n</div>\n","import { Component, ViewEncapsulation, input } from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\nimport '@ui5/webcomponents-icons/dist/overflow.js';\n\n@Component({\n  selector: 'mfp-mock-card',\n  imports: [Button, Title],\n  templateUrl: './mock-card.component.html',\n  styleUrl: './mock-card.component.scss',\n  encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class MockCard {\n  readonly title = input<string>('Card Name');\n}\n","<div class=\"mock-card\">\n  <div class=\"mock-card__header\">\n    <ui5-title class=\"mock-card__title\" level=\"H5\">{{ title() }}</ui5-title>\n    <ui5-button\n      accessibleName=\"More actions\"\n      class=\"mock-card__menu\"\n      design=\"Transparent\"\n      icon=\"overflow\"\n    />\n  </div>\n  <div class=\"mock-card__body\"></div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}