@openmfp/ngx 0.18.13 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"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 de from './de.json';\nimport en from './en.json';\n\nexport type DashboardLanguage = 'en' | 'de';\n\nexport const DASHBOARD_I18N_KEYS = {\n UNSAVED_CHANGES: 'unsavedChanges',\n EDIT_CARDS: 'editCards',\n EDIT_VIEW: 'editView',\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\nexport const DASHBOARD_TRANSLATIONS: Record<\n DashboardLanguage,\n Record<DashboardI18nKey, string>\n> = {\n en,\n de,\n};\n","import {\n DASHBOARD_TRANSLATIONS,\n DashboardI18nKey,\n DashboardLanguage,\n} from './dashboard-i18n';\nimport { Injectable, signal } from '@angular/core';\n\n/**\n * Holds the dashboard's current language and resolves translation keys for\n * the dashboard chrome (toolbar buttons, dialogs, a11y labels). Provided at\n * the `Dashboard` component level so every nested dashboard component shares\n * the same language signal — child components inject the same instance and\n * react to language changes automatically because `getTranslation` reads the\n * signal on every call.\n */\n@Injectable()\nexport class DashboardI18nService {\n readonly language = signal<DashboardLanguage>('en');\n\n getTranslation(key: DashboardI18nKey): string {\n return DASHBOARD_TRANSLATIONS[this.language()][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 /** Dashboard title rendered in the toolbar. */\n title: string;\n /** Optional subtitle shown below the title. */\n description?: string;\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 /** Extra action buttons rendered in the toolbar alongside the built-in ones. */\n customActions?: ButtonSettings[];\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 DashboardLanguage,\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 i18n = inject(DashboardI18nService);\n\n config = input.required<DashboardConfig>();\n sections = model<SectionConfig[]>([]);\n cards = model<CardConfig[]>([]);\n availableCards = input<CardConfig[]>([]);\n language = input<DashboardLanguage>('en');\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(SecurityContext.HTML, this.config().title) ?? '';\n return this.sanitizer.bypassSecurityTrustHtml(clean);\n });\n protected safeDescription = computed((): SafeHtml | null => {\n const desc = this.config().description;\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 customActions = computed(() => this.config().customActions ?? []);\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.i18n.getTranslation(DASHBOARD_I18N_KEYS.EDIT_VIEW),\n text: '',\n ...this.config().buttonsSettings?.editViewButton,\n }));\n protected editCardsButton = computed(() => ({\n icon: '',\n design: 'Default' as const,\n tooltip: '',\n text: this.i18n.getTranslation(DASHBOARD_I18N_KEYS.EDIT_CARDS),\n ...this.config().buttonsSettings?.editCardsButton,\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 this.i18n.language.set(this.language());\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 (config().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]=\"i18n.getTranslation(i18nKeys.UNSAVED_CHANGES)\"\n />\n <span class=\"mfp-dashboard__unsaved-changes-text\">{{\n i18n.getTranslation(i18nKeys.UNSAVED_CHANGES)\n }}</span>\n </div>\n }\n </div>\n @if (config().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 i18n.getTranslation(i18nKeys.EDIT_CARDS)\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]=\"i18n.getTranslation(i18nKeys.ACTIONS)\"\n [tooltip]=\"i18n.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 i18n.getTranslation(i18nKeys.EDIT_VIEW)\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 i18n.getTranslation(i18nKeys.EDIT_VIEW)\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 i18n.getTranslation(i18nKeys.EDIT_VIEW)\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 i18n.getTranslation(i18nKeys.EDIT_VIEW)\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 >{{ i18n.getTranslation(i18nKeys.SAVE) }}</ui5-button\n >\n <ui5-button\n data-testid=\"dashboard-cancel-btn\"\n design=\"Transparent\"\n (click)=\"cancelEdit()\"\n >{{ i18n.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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"}
1
+ {"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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"}