@acorex-platform/module-dashboard-management-client 0.0.32 → 0.0.37
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.
- package/fesm2022/{acorex-platform-module-dashboard-management-client-acorex-platform-module-dashboard-management-client-Cl4LZc2m.mjs → acorex-platform-module-dashboard-management-client-acorex-platform-module-dashboard-management-client-BUmHWNqL.mjs} +919 -83
- package/fesm2022/acorex-platform-module-dashboard-management-client-acorex-platform-module-dashboard-management-client-BUmHWNqL.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-dashboard-management-client-contracts-entities-dashboard.mjs +280 -0
- package/fesm2022/acorex-platform-module-dashboard-management-client-contracts-entities-dashboard.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-dashboard-management-client-contracts-entity-catalog-acorex-platform-module-dashboard-management-client-contracts-entity-catalog-CPDwiLWC.mjs +90 -0
- package/fesm2022/acorex-platform-module-dashboard-management-client-contracts-entity-catalog-acorex-platform-module-dashboard-management-client-contracts-entity-catalog-CPDwiLWC.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-dashboard-management-client-contracts-entity-catalog-dashboard.entity-C1ju-BQM.mjs +209 -0
- package/fesm2022/acorex-platform-module-dashboard-management-client-contracts-entity-catalog-dashboard.entity-C1ju-BQM.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-dashboard-management-client-contracts-entity-catalog.mjs +2 -0
- package/fesm2022/acorex-platform-module-dashboard-management-client-contracts-entity-catalog.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-dashboard-management-client-contracts.mjs +11 -1
- package/fesm2022/acorex-platform-module-dashboard-management-client-contracts.mjs.map +1 -1
- package/fesm2022/{acorex-platform-module-dashboard-management-client-index-2e_oRKpO.mjs → acorex-platform-module-dashboard-management-client-index-C1Te5cDf.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-dashboard-management-client-index-2e_oRKpO.mjs.map → acorex-platform-module-dashboard-management-client-index-C1Te5cDf.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-dashboard-management-client-local-entities.mjs +29 -0
- package/fesm2022/acorex-platform-module-dashboard-management-client-local-entities.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-dashboard-management-client.mjs +1 -1
- package/package.json +13 -1
- package/types/acorex-platform-module-dashboard-management-client-contracts-entities-dashboard.d.ts +5 -0
- package/types/acorex-platform-module-dashboard-management-client-contracts-entity-catalog.d.ts +10 -0
- package/types/acorex-platform-module-dashboard-management-client-contracts.d.ts +19 -2
- package/types/acorex-platform-module-dashboard-management-client-local-entities.d.ts +12 -0
- package/types/acorex-platform-module-dashboard-management-client.d.ts +82 -4
- package/fesm2022/acorex-platform-module-dashboard-management-client-acorex-platform-module-dashboard-management-client-Cl4LZc2m.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-dashboard-management-client-acorex-platform-module-dashboard-management-client-Cl4LZc2m.mjs","sources":["../../../../libs/modules/dashboard-management/client/src/lib/manifest.ts","../../../../libs/modules/dashboard-management/client/src/lib/menu.provider.ts","../../../../libs/modules/dashboard-management/client/src/lib/permission-definition.provider.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/dashboard-breakpoints.util.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/dashboard-dimensions.util.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/dashboard-seed-layout.util.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/chart-widget.dimensions.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/kpi/kpi-widget.dimensions.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/utility/utility-widget.dimensions.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/dashboard-seed-widget-builders.util.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/dashboard-widget-grid-size.token.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/dashboard-widget-base.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/chart-query-load.util.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/chart-widget-ai-options.util.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/chart-widget-data.util.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/chart-query-tabs.component.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/chart-legend.util.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/bar-chart/bar-chart-widget.component.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/bar-chart/bar-chart-widget.component.html","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/widget-categories.type.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/widget-subcategories.type.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/bar-chart/bar-chart-widget.config.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/donut-chart/donut-chart-widget.component.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/donut-chart/donut-chart-widget.component.html","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/donut-chart/donut-chart-widget.config.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/funnel-chart/funnel-chart-widget.component.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/funnel-chart/funnel-chart-widget.component.html","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/funnel-chart/funnel-chart-widget.config.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/gauge-chart/gauge-chart-widget.component.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/gauge-chart/gauge-chart-widget.component.html","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/gauge-chart/gauge-chart-widget.config.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/heatmap-chart/heatmap-chart-widget.component.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/heatmap-chart/heatmap-chart-widget.component.html","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/heatmap-chart/heatmap-chart-widget.config.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/line-chart/line-chart-widget.component.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/line-chart/line-chart-widget.component.html","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/line-chart/line-chart-widget.config.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/utility/shortcut/shortcut-widget.utils.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/kpi/kpi-widget.util.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/kpi/kpi-progress/kpi-progress-widget.component.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/kpi/kpi-progress/kpi-progress-widget.component.html","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/kpi/kpi-progress/kpi-progress-widget.config.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/kpi/kpi-segmented/kpi-segmented-widget.component.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/kpi/kpi-segmented/kpi-segmented-widget.component.html","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/kpi/kpi-segmented/kpi-segmented-widget.config.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/kpi/kpi-details/kpi-details-widget.component.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/kpi/kpi-details/kpi-details-widget.component.html","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/kpi/kpi-details/kpi-details-widget.config.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/kpi/kpi-stat-card/kpi-stat-card-widget.config.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/kpi/kpi-stat-card/kpi-stat-card-widget.component.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/kpi/kpi-stat-card/kpi-stat-card-widget.component.html","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/utility/analog-clock/analog-clock.component.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/utility/analog-clock/analog-clock.component.html","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/utility/clock-calendar/clock-calendar.types.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/utility/clock-calendar/clock-calendar-widget.component.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/utility/clock-calendar/clock-calendar-widget.component.html","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/utility/clock-calendar/clock-calendar-widget.config.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/utility/shortcut/shortcut-widget-view.component.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/utility/shortcut/shortcut-widget-view.component.html","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/utility/shortcut/shortcut-widget.config.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/utility/sticky-note/sticky-note-widget.utils.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/utility/sticky-note/sticky-note-widget.component.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/utility/sticky-note/sticky-note-widget.component.html","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/utility/sticky-note/sticky-note-widget.config.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/dashboard/dashboard.plugin.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/dashboard/entity-dashboard.service.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/dashboard-layout-page/dashboard-layout-entity-mode.token.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/dashboard-layout-page/dashboard-readonly-mode.token.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/home-dashboard/dashboard-popups/configuration-popup.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/home-dashboard/dashboard-popups/dashboard-popup.service.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/dashboard-services/home-dashboard.store.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/home-dashboard/dashboard-canvas-context-menu.util.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/home-dashboard/widget-wrapper/dashboard-widget-wrapper.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/home-dashboard/widget-wrapper/dashboard-widget-wrapper.html","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/dashboard-widget-grid-size.directive.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/dashboard-grid-layout-section/dashboard-grid-layout-section.component.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/dashboard-grid-layout-section/dashboard-grid-layout-section.component.html","../../../../libs/modules/dashboard-management/client/src/lib/features/dashboard/entity-dashboard-host.component.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/dashboard/entity-dashboard-page.component.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/dashboard/entity-dashboard-page-component.provider.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/dashboard/entity-dashboard-widget.config.ts","../../../../libs/modules/dashboard-management/client/src/lib/widget-definition.provider.ts","../../../../libs/modules/dashboard-management/client/src/lib/middleware/dashboard-scope.middleware.ts","../../../../libs/modules/dashboard-management/client/src/lib/dashboard-management.module.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/home-dashboard/dashboard-home/home-dashboard.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/home-dashboard/dashboard-home/home-dashboard.html","../../../../libs/modules/dashboard-management/client/src/lib/features/home-dashboard/dashboard-popups/add-dashboard-popup.ts","../../../../libs/modules/dashboard-management/client/src/acorex-platform-module-dashboard-management-client.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex-platform/framework-client/core';\nimport { RootConfig } from '@acorex-platform/module-dashboard-management-client/contracts';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * Dashboard Management Module Manifest.\n * Defines module metadata, features, and provider references.\n */\nexport const DashboardManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n type: 'platform',\n domain: 'platform',\n required: true,\n\n // Module dependencies (optional)\n};\n\n//#endregion\n\n","import { AXPCommonMenuKeys } from '@acorex-platform/module-common-client/contracts';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { RootConfig } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { AXPDashboardManagementMenuKeys } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { AXPAdministrationPermissionKeys } from '@acorex-platform/module-dashboard-management-client/contracts';\n\nexport class AXMMenuProvider implements AXPMenuProvider {\n private sessionService = inject(AXPSessionService);\n private entityService = inject(AXPEntityService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const isAuthorized = await firstValueFrom(this.sessionService.isAuthorized$);\n if (!isAuthorized) {\n return;\n }\n\n const module = RootConfig.module;\n\n const contentMenu = context.find(AXPCommonMenuKeys.Content);\n if (!contentMenu.exists) {\n context.find(AXPCommonMenuKeys.Administration).addItems([\n {\n name: AXPCommonMenuKeys.Content,\n priority: 10,\n text: '@general:menus.content.title',\n icon: 'fa-light fa-paint-brush',\n type: 'menu',\n children: [],\n },\n ]);\n }\n\n context.find(AXPCommonMenuKeys.Content).addItems([\n {\n name: AXPDashboardManagementMenuKeys.Dashboards,\n text: '@dashboard-management:dashboards.menus.dashboards.title',\n path: this.entityService.withEntity(module.name, RootConfig.entities.dashboard.name).createPath(),\n icon: RootConfig.entities.dashboard.icon,\n priority: 2,\n policy: {\n features: [RootConfig.module.name],\n permissions: [AXPAdministrationPermissionKeys.MaintainDashboards],\n },\n },\n ]);\n }\n}\n","//#region ---- Imports ----\n\nimport {\n AXPPermissionDefinitionProvider,\n AXPPermissionDefinitionProviderContext,\n} from '@acorex-platform/framework-client/auth';\nimport { AXPCommonPermissionGroupKeys } from '@acorex-platform/module-common-client/contracts';\nimport { AXPAdministrationPermissionKeys } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Permission Definition Provider ----\n\n/**\n * Registers Dashboards section capabilities under Administration.\n */\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPAdministrationPermissionKeys;\n const groups = AXPCommonPermissionGroupKeys;\n const P = '@common:administration.permissions';\n const G = '@common:permission-groups';\n\n context.addGroup(groups.Administration.Root, `${G}.administration.title`, `${G}.administration.description`, { order: 120 });\n\n context\n .addGroup(\n groups.Administration.Dashboards,\n `${G}.administration-dashboards.title`,\n `${G}.administration-dashboards.description`,\n { parent: groups.Administration.Root, order: 60 },\n )\n .addPermission(\n keys.MaintainDashboards,\n `${P}.maintain-dashboards.title`,\n `${P}.maintain-dashboards.description`,\n )\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXMDashboardBreakpoint, AXMDashboardWidgetLayoutMap } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { AXGridLayoutNode } from '@acorex/components/grid-layout-builder';\n\n//#endregion\n\n//#region ----- Types -----\n\ntype DashboardBreakpointProfile = {\n name: AXMDashboardBreakpoint;\n /** Min container width (px) for this tier; `sm` uses 0 (everything below `md`). */\n minWidth: number;\n columns: number;\n};\n\n//#endregion\n\n//#region ----- Constants -----\n\n/**\n * Tailwind-aligned dashboard breakpoint profiles (ascending).\n * `sm` covers widths below `md` (768px); 640px sm tier is not a separate column profile.\n */\nconst DASHBOARD_BREAKPOINT_PROFILES: readonly DashboardBreakpointProfile[] = [\n { name: 'sm', minWidth: 0, columns: 1 },\n { name: 'md', minWidth: 768, columns: 6 },\n { name: 'lg', minWidth: 1024, columns: 9 },\n { name: 'xl', minWidth: 1280, columns: 9 },\n { name: '2xl', minWidth: 1536, columns: 12 },\n { name: '3xl', minWidth: 1920, columns: 12 },\n { name: '4xl', minWidth: 2560, columns: 15 },\n] as const;\n\n/** Narrow → wide; layout / meta presets fall back to the previous tier when unset. */\nexport const DASHBOARD_LAYOUT_BREAKPOINT_ORDER: readonly AXMDashboardBreakpoint[] = DASHBOARD_BREAKPOINT_PROFILES.map(\n (profile) => profile.name,\n);\n\nexport const DASHBOARD_BREAKPOINT_COLUMNS = Object.fromEntries(DASHBOARD_BREAKPOINT_PROFILES.map(({ name, columns }) => [name, columns])) as Record<AXMDashboardBreakpoint, number>;\n\nexport const DEFAULT_DASHBOARD_GRID_GAP = 5;\nexport const DEFAULT_DASHBOARD_CELL_HEIGHT = 75;\n\n//#endregion\n\n//#region ----- Public API -----\n\n/** Resolves the active dashboard breakpoint from a container width. */\nexport const getDashboardBreakpointFromWidth = (width: number): AXMDashboardBreakpoint => {\n for (let i = DASHBOARD_BREAKPOINT_PROFILES.length - 1; i >= 0; i--) {\n const profile = DASHBOARD_BREAKPOINT_PROFILES[i];\n if (width >= profile.minWidth) {\n return profile.name;\n }\n }\n return 'sm';\n};\n\nexport const getDashboardBreakpointFromWindow = (): AXMDashboardBreakpoint => {\n if (typeof window === 'undefined') return 'lg';\n return getDashboardBreakpointFromWidth(window.innerWidth);\n};\n\nexport const getDashboardColumnsForBreakpoint = (breakpoint: AXMDashboardBreakpoint): number => DASHBOARD_BREAKPOINT_COLUMNS[breakpoint];\n\n/**\n * Returns the persisted layout node for a breakpoint.\n * Falls back to the next narrower tier (4xl → 3xl → … → sm) when unset.\n */\nexport const resolveDashboardWidgetLayoutNode = (config: AXMDashboardWidgetLayoutMap, breakpoint: AXMDashboardBreakpoint): AXGridLayoutNode => {\n const startIndex = DASHBOARD_LAYOUT_BREAKPOINT_ORDER.indexOf(breakpoint);\n\n for (let i = startIndex; i >= 0; i--) {\n const layout = config[DASHBOARD_LAYOUT_BREAKPOINT_ORDER[i]];\n if (layout) {\n return layout;\n }\n }\n\n return config.lg;\n};\n\n/**\n * Calculates cell height so a 1×1 tile is square for the given column count.\n * Matches GridStack cell-width: `(width - gap * (columns + 1)) / columns`.\n */\nexport const calcDashboardSquareCellHeight = (containerWidth: number, columns: number, gap: number): number => {\n if (containerWidth <= 0 || columns <= 0) {\n return DEFAULT_DASHBOARD_CELL_HEIGHT;\n }\n const cellHeight = (containerWidth - gap * (columns + 1)) / columns;\n return Math.max(1, Math.round(cellHeight * 100) / 100);\n};\n\n/** md and wider: square 1×1 cells from container width; sm: fixed height. */\nexport const resolveDashboardCellHeightForBreakpoint = (breakpoint: AXMDashboardBreakpoint, containerWidth: number, gap: number): number => {\n if (breakpoint === 'sm') {\n return DEFAULT_DASHBOARD_CELL_HEIGHT;\n }\n return calcDashboardSquareCellHeight(containerWidth, getDashboardColumnsForBreakpoint(breakpoint), gap);\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXGridLayoutNode } from '@acorex/components/grid-layout-builder';\nimport { AXMDashboardBreakpoint } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport type { AXPOptionsData } from '@acorex-platform/framework-shared/core';\n\nimport { DASHBOARD_LAYOUT_BREAKPOINT_ORDER } from './dashboard-breakpoints.util';\n\n//#endregion\n\n//#region ---- Types ----\n\n/** Grid size preset as `[width, height]` in column/row units. */\nexport type AXPDashboardDimensionPreset = readonly [width: number, height: number];\n\nexport type AXPDashboardLegacyBreakpointDimensions = {\n width?: number;\n height?: number;\n minWidth?: number;\n minHeight?: number;\n maxWidth?: number;\n maxHeight?: number;\n};\n\nexport type AXPDashboardBreakpointDimensions =\n | readonly AXPDashboardDimensionPreset[]\n | AXPDashboardLegacyBreakpointDimensions;\n\nexport type AXPDashboardWidgetDimensions = Partial<Record<AXMDashboardBreakpoint, AXPDashboardBreakpointDimensions>>;\n\nexport type AXPDashboardDimensionPresets = readonly AXPDashboardDimensionPreset[];\n\nexport type AXPDashboardCoreDimensionPresets = {\n sm: AXPDashboardDimensionPresets;\n md: AXPDashboardDimensionPresets;\n lg: AXPDashboardDimensionPresets;\n xl?: AXPDashboardDimensionPresets;\n '2xl'?: AXPDashboardDimensionPresets;\n '3xl'?: AXPDashboardDimensionPresets;\n '4xl'?: AXPDashboardDimensionPresets;\n};\n\n/** Builds a full breakpoint dimension map; each wide tier falls back to the next narrower tier when omitted. */\nexport const defineDashboardWidgetDimensions = (\n presets: AXPDashboardCoreDimensionPresets,\n): Required<AXPDashboardWidgetDimensions> => {\n const md = presets.md ?? presets.sm;\n const lg = presets.lg ?? md;\n const xl = presets.xl ?? lg;\n const twoXl = presets['2xl'] ?? xl;\n const threeXl = presets['3xl'] ?? twoXl;\n const fourXl = presets['4xl'] ?? threeXl;\n\n return {\n sm: presets.sm,\n md,\n lg,\n xl,\n '2xl': twoXl,\n '3xl': threeXl,\n '4xl': fourXl,\n };\n};\n\n//#endregion\n\n//#region ---- Grid size token (widget options) ----\n\nexport const DASHBOARD_WIDGET_GRID_WIDTH_OPTION = 'gridWidth';\nexport const DASHBOARD_WIDGET_GRID_HEIGHT_OPTION = 'gridHeight';\n\nexport function formatDashboardGridSizeToken(width?: number, height?: number): string | null {\n if (typeof width !== 'number' || typeof height !== 'number' || width <= 0 || height <= 0) {\n return null;\n }\n return `${width}x${height}`;\n}\n\nexport function readDashboardGridSizeToken(options: Record<string, unknown>): string | null {\n return formatDashboardGridSizeToken(\n options[DASHBOARD_WIDGET_GRID_WIDTH_OPTION] as number | undefined,\n options[DASHBOARD_WIDGET_GRID_HEIGHT_OPTION] as number | undefined,\n );\n}\n\n/** Merges current grid cell width/height into widget options for discrete layout variants. */\nexport function withDashboardGridSizeOptions<T extends AXPOptionsData = AXPOptionsData>(\n options: T | undefined,\n layoutNode: Pick<AXGridLayoutNode, 'width' | 'height'>,\n): T {\n return {\n ...(options ?? ({} as T)),\n [DASHBOARD_WIDGET_GRID_WIDTH_OPTION]: layoutNode.width,\n [DASHBOARD_WIDGET_GRID_HEIGHT_OPTION]: layoutNode.height,\n } as T;\n}\n\n//#endregion\n\n//#region ---- Helpers ----\n\nconst isPresetArray = (\n dims: AXPDashboardBreakpointDimensions | undefined,\n): dims is readonly AXPDashboardDimensionPreset[] =>\n Array.isArray(dims) && dims.length > 0 && Array.isArray(dims[0]);\n\nconst snapToNearestPreset = (\n width: number,\n height: number,\n presets: readonly AXPDashboardDimensionPreset[],\n): AXPDashboardDimensionPreset => {\n const safeWidth = Number.isFinite(width) && width > 0 ? width : 1;\n const safeHeight = Number.isFinite(height) && height > 0 ? height : 1;\n\n return presets.reduce<AXPDashboardDimensionPreset>((best, preset) => {\n const bestDistance = (best[0] - safeWidth) ** 2 + (best[1] - safeHeight) ** 2;\n const nextDistance = (preset[0] - safeWidth) ** 2 + (preset[1] - safeHeight) ** 2;\n return nextDistance < bestDistance ? preset : best;\n }, presets[0]);\n};\n\n//#endregion\n\n//#region ---- Meta dimension fallback ----\n\n/** Resolves widget meta.dimensions for a breakpoint, falling back to narrower tiers. */\nexport const resolveDashboardMetaDimensionsForBreakpoint = (\n metaDimensions: AXPDashboardWidgetDimensions | undefined,\n breakpoint: AXMDashboardBreakpoint,\n): AXPDashboardBreakpointDimensions | undefined => {\n if (!metaDimensions) {\n return undefined;\n }\n\n const startIndex = DASHBOARD_LAYOUT_BREAKPOINT_ORDER.indexOf(breakpoint);\n for (let i = startIndex; i >= 0; i--) {\n const dims = metaDimensions[DASHBOARD_LAYOUT_BREAKPOINT_ORDER[i]];\n if (dims !== undefined) {\n return dims;\n }\n }\n\n return undefined;\n};\n\n/** Builds an initial layout node from meta.dimensions with narrower-tier fallback. */\nexport const resolveDashboardMetaLayoutNode = (\n metaDimensions: AXPDashboardWidgetDimensions | undefined,\n breakpoint: AXMDashboardBreakpoint,\n fallback: AXPDashboardDimensionPreset,\n options?: { forceWidth?: number },\n): AXGridLayoutNode => {\n const dims = resolveDashboardMetaDimensionsForBreakpoint(metaDimensions, breakpoint);\n return resolveDashboardLayoutNode(dims, fallback, options);\n};\n\n//#endregion\n\n//#region ---- Public API ----\n\n/**\n * Builds a grid layout node from widget meta dimensions.\n * Supports preset arrays (`[[w,h], ...]`) and legacy min/max objects.\n */\nexport const resolveDashboardLayoutNode = (\n dims: AXPDashboardBreakpointDimensions | undefined,\n fallback: AXPDashboardDimensionPreset,\n options?: { forceWidth?: number },\n): AXGridLayoutNode => {\n if (isPresetArray(dims)) {\n const [width, height] = dims[0] ?? fallback;\n return {\n width: options?.forceWidth ?? width,\n height,\n allowedSizes: dims,\n };\n }\n\n const legacy = dims ?? {};\n return {\n width: legacy.width ?? fallback[0],\n height: legacy.height ?? fallback[1],\n minWidth: legacy.minWidth,\n minHeight: legacy.minHeight,\n maxWidth: legacy.maxWidth,\n maxHeight: legacy.maxHeight,\n };\n};\n\n/**\n * Enriches a persisted layout node with allowedSizes from widget meta when missing.\n * Snaps stored width/height to the nearest preset when presets are available.\n */\nexport const enrichDashboardLayoutNode = (\n layoutNode: AXGridLayoutNode,\n breakpoint: AXMDashboardBreakpoint,\n metaDimensions: AXPDashboardWidgetDimensions | undefined,\n): AXGridLayoutNode => {\n if (layoutNode.allowedSizes?.length) {\n return layoutNode;\n }\n\n const breakpointDims = resolveDashboardMetaDimensionsForBreakpoint(metaDimensions, breakpoint);\n if (!isPresetArray(breakpointDims)) {\n return layoutNode;\n }\n\n const [width, height] = snapToNearestPreset(\n layoutNode.width ?? breakpointDims[0][0],\n layoutNode.height ?? breakpointDims[0][1],\n breakpointDims,\n );\n\n return {\n ...layoutNode,\n width: breakpoint === 'sm' ? layoutNode.width ?? 1 : width,\n height,\n allowedSizes: breakpointDims,\n };\n};\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type { AXGridLayoutSize } from '@acorex-platform/module-dashboard-management-client/contracts';\n\nimport type { AXPDashboardWidgetDimensions } from './dashboard-dimensions.util';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport type DashboardSeedDimensionPreset = Required<AXPDashboardWidgetDimensions>;\nexport type DashboardSeedGridSize = readonly [width: number, height: number];\n\nexport type DashboardSeedLayoutPlacement = {\n x: number;\n y: number;\n lg: DashboardSeedGridSize;\n md?: DashboardSeedGridSize;\n sm?: DashboardSeedGridSize;\n};\n\n//#endregion\n\n//#region ----- Layout helper -----\n\n/** Builds persisted grid config + meta.dimensions from preset arrays (defineDashboardWidgetDimensions). */\nexport function layoutFromDimensions(id: string, dimensions: DashboardSeedDimensionPreset, placement: DashboardSeedLayoutPlacement) {\n const mdSize = placement.md ?? placement.lg;\n const smSize = placement.sm ?? mdSize;\n\n return {\n config: {\n id,\n lg: {\n id,\n width: placement.lg[0],\n height: placement.lg[1],\n allowedSizes: dimensions.lg as readonly AXGridLayoutSize[],\n x: placement.x,\n y: placement.y,\n },\n md: {\n id,\n width: mdSize[0],\n height: mdSize[1],\n allowedSizes: dimensions.md as readonly AXGridLayoutSize[],\n },\n sm: {\n id,\n width: smSize[0],\n height: smSize[1],\n allowedSizes: dimensions.sm as readonly AXGridLayoutSize[],\n },\n },\n meta: {\n dimensions,\n },\n };\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { defineDashboardWidgetDimensions } from '../../dashboard-dimensions.util';\n\n//#endregion\n\n//#region ----- Chart presets -----\n\n/** Wide cartesian charts (bar, line, heatmap, donut). */\nexport const AXP_CHART_WIDE_DIMENSIONS = defineDashboardWidgetDimensions({\n sm: [[1, 6]],\n md: [\n [3, 4],\n [4, 4],\n ],\n lg: [\n [3, 4],\n [4, 4],\n ],\n xl: [\n [3, 4],\n [4, 4],\n ],\n '2xl': [\n [3, 4],\n [4, 4],\n ],\n '3xl': [\n [3, 4],\n [4, 4],\n ],\n '4xl': [\n [3, 4],\n [4, 4],\n ],\n});\n\n/** Donut chart — same allowed sizes as wide charts. */\nexport const AXP_CHART_SQUARE_DIMENSIONS = AXP_CHART_WIDE_DIMENSIONS;\n\n/** Gauge chart — compact radial tile. */\nexport const AXP_CHART_GAUGE_DIMENSIONS = defineDashboardWidgetDimensions({\n sm: [[1, 4]],\n md: [\n [2, 2],\n [3, 2],\n [3, 3],\n ],\n lg: [\n [2, 2],\n [3, 2],\n [3, 3],\n ],\n xl: [\n [2, 2],\n [3, 2],\n [3, 3],\n ],\n '2xl': [\n [2, 2],\n [3, 2],\n [3, 3],\n ],\n '3xl': [\n [2, 2],\n [3, 2],\n [3, 3],\n ],\n '4xl': [\n [2, 2],\n [3, 2],\n [3, 3],\n ],\n});\n\n/** Funnel chart — same allowed sizes as wide charts. */\nexport const AXP_CHART_FUNNEL_DIMENSIONS = AXP_CHART_WIDE_DIMENSIONS;\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { defineDashboardWidgetDimensions } from '../../dashboard-dimensions.util';\n\n//#endregion\n\n//#region ----- Stat card KPI presets -----\n\n/** KpiStatCard — compact stat + trend. */\nexport const AXP_KPI_STAT_CARD_DIMENSIONS = defineDashboardWidgetDimensions({\n sm: [[1, 2]],\n md: [\n [2, 1],\n [2, 2],\n [3, 2],\n ],\n lg: [\n [2, 1],\n [2, 2],\n [3, 2],\n ],\n xl: [\n [2, 1],\n [2, 2],\n [3, 2],\n ],\n '2xl': [\n [2, 1],\n [2, 2],\n [3, 2],\n ],\n '3xl': [\n [2, 1],\n [2, 2],\n [3, 2],\n ],\n '4xl': [\n [2, 1],\n [2, 2],\n [3, 2],\n ],\n});\n\n//#endregion\n\n//#region ----- Progress / segmented KPI presets -----\n\n/** KpiProgress & KpiSegmented — single fixed tile size. */\nexport const AXP_KPI_PROGRESS_SEGMENTED_DIMENSIONS = defineDashboardWidgetDimensions({\n sm: [[1, 2]],\n md: [\n [2, 2],\n [3, 2],\n ],\n lg: [\n [2, 2],\n [3, 2],\n ],\n xl: [\n [2, 2],\n [3, 2],\n ],\n '2xl': [\n [2, 2],\n [3, 2],\n ],\n '3xl': [\n [2, 2],\n [3, 2],\n ],\n '4xl': [\n [2, 2],\n [3, 2],\n ],\n});\n\n//#endregion\n\n//#region ----- Standard KPI presets (legacy alias) -----\n\n/** @deprecated Prefer {@link AXP_KPI_STAT_CARD_DIMENSIONS} or {@link AXP_KPI_PROGRESS_SEGMENTED_DIMENSIONS}. */\nexport const AXP_KPI_STANDARD_DIMENSIONS = AXP_KPI_STAT_CARD_DIMENSIONS;\n\n//#endregion\n\n//#region ----- Details KPI presets -----\n\n/** KpiDetails — value + detail rows. */\nexport const AXP_KPI_DETAILS_DIMENSIONS = defineDashboardWidgetDimensions({\n sm: [[1, 4]],\n md: [\n [2, 2],\n [3, 2],\n ],\n lg: [\n [2, 2],\n [3, 2],\n ],\n xl: [\n [2, 2],\n [3, 2],\n ],\n '2xl': [\n [2, 2],\n [3, 2],\n ],\n '3xl': [\n [2, 2],\n [3, 2],\n ],\n '4xl': [\n [2, 2],\n [3, 2],\n ],\n});\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { defineDashboardWidgetDimensions } from '../../dashboard-dimensions.util';\n\n//#endregion\n\n//#region ----- Utility presets -----\n\n/** Sticky note tile. */\nexport const AXP_UTILITY_COMPACT_SQUARE_DIMENSIONS = defineDashboardWidgetDimensions({\n sm: [[1, 3]],\n md: [\n [2, 2],\n [3, 2],\n ],\n lg: [\n [2, 2],\n [3, 2],\n ],\n xl: [\n [2, 2],\n [3, 2],\n ],\n '2xl': [\n [2, 2],\n [3, 2],\n ],\n '3xl': [\n [2, 2],\n [3, 2],\n ],\n '4xl': [\n [2, 2],\n [3, 2],\n ],\n});\n\n/** Shortcut launcher tile. */\nexport const AXP_UTILITY_SHORTCUT_DIMENSIONS = defineDashboardWidgetDimensions({\n sm: [[1, 2]],\n md: [\n [1, 2],\n [2, 1],\n [2, 2],\n ],\n lg: [\n [1, 2],\n [2, 1],\n [2, 2],\n ],\n xl: [\n [1, 2],\n [2, 1],\n [2, 2],\n ],\n '2xl': [\n [1, 2],\n [2, 1],\n [2, 2],\n ],\n '3xl': [\n [1, 2],\n [2, 1],\n [2, 2],\n ],\n '4xl': [\n [1, 2],\n [2, 1],\n [2, 2],\n ],\n});\n\n/** Weather tile. */\nexport const AXP_UTILITY_WEATHER_DIMENSIONS = defineDashboardWidgetDimensions({\n sm: [[1, 3]],\n md: [\n [2, 2],\n [3, 2],\n ],\n lg: [\n [2, 2],\n [3, 2],\n ],\n xl: [\n [2, 2],\n [3, 2],\n ],\n '2xl': [\n [2, 2],\n [3, 2],\n ],\n '3xl': [\n [2, 2],\n [3, 2],\n ],\n '4xl': [\n [2, 2],\n [3, 2],\n ],\n});\n\n/** Clock + calendar combo tile. */\nexport const AXP_UTILITY_CLOCK_CALENDAR_DIMENSIONS = defineDashboardWidgetDimensions({\n sm: [[1, 3]],\n md: [\n [2, 1],\n [2, 2],\n [3, 2],\n ],\n lg: [\n [2, 1],\n [2, 2],\n [3, 2],\n ],\n xl: [\n [2, 1],\n [2, 2],\n [3, 2],\n ],\n '2xl': [\n [2, 1],\n [2, 2],\n [3, 2],\n ],\n '3xl': [\n [2, 1],\n [2, 2],\n [3, 2],\n ],\n '4xl': [\n [2, 1],\n [2, 2],\n [3, 2],\n ],\n});\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type { AXMCommonDashboardEntityModel } from '@acorex-platform/module-dashboard-management-client/contracts';\n\nimport { AXP_CHART_FUNNEL_DIMENSIONS, AXP_CHART_GAUGE_DIMENSIONS, AXP_CHART_SQUARE_DIMENSIONS, AXP_CHART_WIDE_DIMENSIONS } from './widgets/chart/chart-widget.dimensions';\nimport { AXP_KPI_DETAILS_DIMENSIONS } from './widgets/kpi/kpi-widget.dimensions';\nimport { AXP_KPI_PROGRESS_SEGMENTED_DIMENSIONS } from './widgets/kpi/kpi-widget.dimensions';\nimport { AXP_KPI_STAT_CARD_DIMENSIONS } from './widgets/kpi/kpi-widget.dimensions';\nimport { AXP_UTILITY_CLOCK_CALENDAR_DIMENSIONS } from './widgets/utility/utility-widget.dimensions';\nimport { AXP_UTILITY_COMPACT_SQUARE_DIMENSIONS } from './widgets/utility/utility-widget.dimensions';\nimport { AXP_UTILITY_SHORTCUT_DIMENSIONS } from './widgets/utility/utility-widget.dimensions';\nimport { AXP_UTILITY_WEATHER_DIMENSIONS } from './widgets/utility/utility-widget.dimensions';\nimport {\n type DashboardSeedDimensionPreset,\n type DashboardSeedGridSize,\n layoutFromDimensions,\n} from './dashboard-seed-layout.util';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport type DashboardSeedWidget = AXMCommonDashboardEntityModel['widgets'][number];\ntype QueryTab = { label: string; query: string };\n\ntype ChartWidgetType =\n | 'BarChart'\n | 'DonutChart'\n | 'LineChart'\n | 'GaugeChart'\n | 'FunnelChart'\n | 'HeatmapChart';\n\nconst CHART_DIMENSIONS_BY_TYPE: Record<ChartWidgetType, DashboardSeedDimensionPreset> = {\n BarChart: AXP_CHART_WIDE_DIMENSIONS,\n LineChart: AXP_CHART_WIDE_DIMENSIONS,\n HeatmapChart: AXP_CHART_WIDE_DIMENSIONS,\n DonutChart: AXP_CHART_SQUARE_DIMENSIONS,\n GaugeChart: AXP_CHART_GAUGE_DIMENSIONS,\n FunnelChart: AXP_CHART_FUNNEL_DIMENSIONS,\n};\n\n//#endregion\n\n//#region ----- Builders -----\n\nexport function buildDashboardKpiStatCard(\n id: string,\n x: number,\n y: number,\n query: string,\n size: DashboardSeedGridSize = [2, 2],\n navigatePath?: string,\n): DashboardSeedWidget {\n const { config, meta } = layoutFromDimensions(id, AXP_KPI_STAT_CARD_DIMENSIONS, { x, y, lg: size });\n\n return {\n config,\n node: {\n type: 'DashboardManagement:Widget:Dashboard:KpiStatCard',\n options: {\n query,\n ...(navigatePath ? { navigatePath } : {}),\n },\n meta: {\n title: { visible: false },\n ...meta,\n },\n name: `DashboardManagement:Widget:Dashboard:KpiStatCard-${id}`,\n path: `DashboardManagement:Widget:Dashboard:KpiStatCard-${id}`,\n },\n };\n}\n\nexport function buildDashboardKpiTile(\n id: string,\n type: 'KpiProgress' | 'KpiSegmented' | 'KpiDetails',\n x: number,\n y: number,\n options: Record<string, unknown>,\n size: DashboardSeedGridSize = [2, 2],\n): DashboardSeedWidget {\n const dimensions =\n type === 'KpiDetails'\n ? AXP_KPI_DETAILS_DIMENSIONS\n : AXP_KPI_PROGRESS_SEGMENTED_DIMENSIONS;\n const { config, meta } = layoutFromDimensions(id, dimensions, { x, y, lg: size });\n\n return {\n config,\n node: {\n type: `DashboardManagement:Widget:Dashboard:${type}`,\n options,\n meta: {\n title: { visible: false },\n ...meta,\n },\n name: `DashboardManagement:Widget:Dashboard:${type}-${id}`,\n path: `DashboardManagement:Widget:Dashboard:${type}-${id}`,\n },\n };\n}\n\nexport function buildDashboardChartWidget(\n id: string,\n title: string,\n type: ChartWidgetType,\n x: number,\n y: number,\n options: Record<string, unknown>,\n size: DashboardSeedGridSize = [4, 4],\n): DashboardSeedWidget {\n const dimensions = CHART_DIMENSIONS_BY_TYPE[type];\n const { config, meta } = layoutFromDimensions(id, dimensions, { x, y, lg: size });\n\n return {\n config: { ...config, title },\n node: {\n type: `DashboardManagement:Widget:Dashboard:${type}`,\n options,\n meta,\n name: `DashboardManagement:Widget:Dashboard:${type}-${id}`,\n path: `DashboardManagement:Widget:Dashboard:${type}-${id}`,\n },\n };\n}\n\nexport function buildDashboardChartWidgetWithQuery(\n id: string,\n title: string,\n type: 'BarChart' | 'DonutChart' | 'LineChart' | 'GaugeChart',\n x: number,\n y: number,\n queryOrTabs: string | QueryTab[],\n size: DashboardSeedGridSize = [4, 4],\n): DashboardSeedWidget {\n const tabs = Array.isArray(queryOrTabs) ? queryOrTabs : null;\n const query = tabs ? tabs[0]?.query : queryOrTabs;\n const options = tabs ? { title, query, queryTabs: tabs } : { title, query };\n\n return buildDashboardChartWidget(id, title, type, x, y, options, size);\n}\n\nexport function buildDashboardShortcut(\n id: string,\n x: number,\n y: number,\n title: string,\n icon: string,\n path: string,\n color: string,\n size: DashboardSeedGridSize = [2, 1],\n): DashboardSeedWidget {\n const { config, meta } = layoutFromDimensions(id, AXP_UTILITY_SHORTCUT_DIMENSIONS, { x, y, lg: size });\n\n return {\n config,\n node: {\n type: 'DashboardManagement:Widget:Dashboard:Shortcut',\n options: {\n color,\n item: {\n name: 'menu',\n title,\n icon,\n command: {\n name: 'navigate',\n options: {\n type: 'router',\n options: { path },\n },\n },\n },\n },\n meta,\n name: `DashboardManagement:Widget:Dashboard:Shortcut-${id}`,\n path: `DashboardManagement:Widget:Dashboard:Shortcut-${id}`,\n },\n };\n}\n\nexport function buildDashboardClockCalendar(\n id: string,\n x: number,\n y: number,\n options: Record<string, unknown> = {},\n size: DashboardSeedGridSize = [3, 2],\n): DashboardSeedWidget {\n const { config, meta } = layoutFromDimensions(id, AXP_UTILITY_CLOCK_CALENDAR_DIMENSIONS, { x, y, lg: size });\n\n return {\n config,\n node: {\n type: 'DashboardManagement:Widget:Dashboard:ClockCalendar',\n options,\n meta,\n name: `DashboardManagement:Widget:Dashboard:ClockCalendar-${id}`,\n path: `DashboardManagement:Widget:Dashboard:ClockCalendar-${id}`,\n },\n };\n}\n\nexport function buildDashboardStickyNote(\n id: string,\n x: number,\n y: number,\n defaultValue: string,\n size: DashboardSeedGridSize = [2, 2],\n): DashboardSeedWidget {\n const { config, meta } = layoutFromDimensions(id, AXP_UTILITY_COMPACT_SQUARE_DIMENSIONS, { x, y, lg: size });\n\n return {\n config,\n node: {\n type: 'DashboardManagement:Widget:Dashboard:StickyNote',\n defaultValue,\n options: { hasConfiguration: false },\n meta,\n name: `DashboardManagement:Widget:Dashboard:StickyNote-${id}`,\n path: `DashboardManagement:Widget:Dashboard:StickyNote-${id}`,\n },\n };\n}\n\nexport function buildDashboardWeatherWidget(\n id: string,\n x: number,\n y: number,\n options: Record<string, unknown>,\n size: DashboardSeedGridSize = [3, 2],\n): DashboardSeedWidget {\n const { config, meta } = layoutFromDimensions(id, AXP_UTILITY_WEATHER_DIMENSIONS, { x, y, lg: size });\n\n return {\n config,\n node: {\n type: 'DashboardManagement:Widget:Dashboard:Weather',\n options,\n meta: {\n title: { visible: false },\n ...meta,\n },\n name: `DashboardManagement:Widget:Dashboard:Weather-${id}`,\n path: `DashboardManagement:Widget:Dashboard:Weather-${id}`,\n },\n };\n}\n\n//#endregion\n","import { InjectionToken, Signal } from '@angular/core';\n\n/** Layout grid size token (`2x2`) provided by {@link AxmDashboardWidgetGridSizeDirective}. */\nexport const AXP_DASHBOARD_WIDGET_GRID_SIZE = new InjectionToken<Signal<string | null>>(\n 'AXP_DASHBOARD_WIDGET_GRID_SIZE',\n);\n","//#region ---- Imports ----\n\nimport { AXPOptionsData } from '@acorex-platform/framework-shared/core';\nimport { AXPBaseWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { afterNextRender, computed, DestroyRef, Injectable, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { get, isObjectLike, isString } from 'lodash';\nimport { Observable, Subject } from 'rxjs';\nimport { throttleTime } from 'rxjs/operators';\nimport { readDashboardGridSizeToken } from '../dashboard-dimensions.util';\nimport { AXP_DASHBOARD_WIDGET_GRID_SIZE } from '../dashboard-widget-grid-size.token';\n\n//#endregion\n\n//#region ---- Constants ----\n\n/** Minimum interval between container resize emissions to subscribers and {@link AXPDashboardWidgetComponent.onContainerSizeChanged}. */\nconst AXPDASHBOARD_WIDGET_CONTAINER_RESIZE_THROTTLE_MS = 100;\n\n/** Reserved widgets-container key for runtime entity detail context (entity dashboard plugin). */\nexport const AXPDASHBOARD_ENTITY_CONTEXT_KEY = '__dashboardEntityContext';\n\n//#endregion\n\n//#region ---- Types ----\n\n/** Content-box size of the widget host element (from ResizeObserver). */\nexport interface AXPDashboardWidgetContainerSize {\n width: number;\n height: number;\n}\n\n/** Runtime entity record context passed to dashboard widgets on entity detail views. */\nexport interface AXPDashboardEntityContext {\n entityType: string;\n entityId: string;\n /** Full entity record from the detail view (rootContext). */\n data: Record<string, unknown>;\n}\n\n//#endregion\n\n//#region ---- Context helpers ----\n\n/**\n * Merges a persisted dashboard model with optional runtime entity context for widget rendering.\n */\nexport function buildDashboardWidgetsContext(\n dashboardModel: Record<string, unknown>,\n entityContext?: AXPDashboardEntityContext,\n): Record<string, unknown> {\n if (!entityContext) {\n return { ...dashboardModel };\n }\n\n return {\n ...dashboardModel,\n ...entityContext.data,\n [AXPDASHBOARD_ENTITY_CONTEXT_KEY]: entityContext,\n };\n}\n\n/**\n * Reads {@link AXPDashboardEntityContext} from a widgets-container context object.\n */\nexport function readDashboardEntityContext(context: unknown): AXPDashboardEntityContext | undefined {\n const value = get(context, AXPDASHBOARD_ENTITY_CONTEXT_KEY);\n if (!isObjectLike(value)) {\n return undefined;\n }\n\n const raw = value as unknown as Record<string, unknown>;\n const entityType = raw['entityType'];\n const entityId = raw['entityId'];\n const data = raw['data'];\n\n if (!isString(entityType) || !entityType.trim() || !isString(entityId) || !entityId.trim()) {\n return undefined;\n }\n\n return {\n entityType: entityType.trim(),\n entityId: entityId.trim(),\n data: isObjectLike(data) ? (data as Record<string, unknown>) : {},\n };\n}\n\n//#endregion\n\n//#region ---- Dashboard widget base ----\n\n/**\n * Base class for dashboard widgets ({@link AXPBaseWidgetComponent}).\n * Extend this to add shared dashboard logic and helpers.\n */\n@Injectable()\nexport abstract class AXPDashboardWidgetComponent<\n TOptions extends Record<string, unknown> = AXPOptionsData,\n> extends AXPBaseWidgetComponent<TOptions> {\n //#region ---- Entity context ----\n\n /**\n * Runtime entity detail context when the dashboard is shown on an entity record (dashboard plugin).\n * Undefined on home/tenant dashboards.\n */\n protected readonly entityContext = computed(() => readDashboardEntityContext(this.contextService.data()));\n\n /** True when {@link entityContext} is available for dynamic, record-scoped widget data. */\n protected hasEntityContext(): boolean {\n return this.entityContext() != null;\n }\n\n /**\n * Current dashboard grid cell size as `WxH` (e.g. `2x2`).\n * Provided by {@link AxmDashboardWidgetGridSizeDirective} on the dashboard grid host.\n */\n private readonly dashboardGridSize = inject(AXP_DASHBOARD_WIDGET_GRID_SIZE, { optional: true });\n\n protected readonly gridSizeToken = computed(() => {\n const fromLayout = this.dashboardGridSize?.();\n if (fromLayout) {\n return fromLayout;\n }\n return readDashboardGridSizeToken(this.options() as Record<string, unknown>);\n });\n\n //#endregion\n\n //#region ---- Container resize ----\n\n private readonly containerResizeRawSubject = new Subject<AXPDashboardWidgetContainerSize>();\n\n private readonly containerSizeSubject = new Subject<AXPDashboardWidgetContainerSize>();\n\n /**\n * Emits the widget host content-box size whenever it changes.\n * Notifications are throttled; see `AXPDASHBOARD_WIDGET_CONTAINER_RESIZE_THROTTLE_MS`.\n */\n protected readonly containerSize$: Observable<AXPDashboardWidgetContainerSize> =\n this.containerSizeSubject.asObservable();\n\n constructor() {\n super();\n const destroyRef = inject(DestroyRef);\n if (typeof ResizeObserver === 'undefined') {\n return;\n }\n\n this.containerResizeRawSubject\n .pipe(\n throttleTime(AXPDASHBOARD_WIDGET_CONTAINER_RESIZE_THROTTLE_MS, undefined, {\n leading: true,\n trailing: true,\n }),\n takeUntilDestroyed(destroyRef),\n )\n .subscribe((size) => {\n this.containerSizeSubject.next(size);\n this.onContainerSizeChanged(size);\n });\n\n const resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (!entry) {\n return;\n }\n const size: AXPDashboardWidgetContainerSize = {\n width: entry.contentRect.width,\n height: entry.contentRect.height,\n };\n this.containerResizeRawSubject.next(size);\n });\n\n const bindResizeObservation = (): void => {\n if (!this.host.isConnected) {\n return;\n }\n resizeObserver.disconnect();\n resizeObserver.observe(this.host);\n };\n\n afterNextRender(() => {\n bindResizeObservation();\n });\n\n destroyRef.onDestroy(() => {\n resizeObserver.disconnect();\n this.containerResizeRawSubject.complete();\n this.containerSizeSubject.complete();\n });\n }\n\n /**\n * Called when the widget host content box is resized.\n * Override for imperative updates; use {@link containerSize$} for reactive pipelines.\n */\n protected onContainerSizeChanged(_size: AXPDashboardWidgetContainerSize): void { }\n\n //#endregion\n}\n\n//#endregion\n","/**\n * Shared helpers for loading dashboard chart/KPI data via AXPQuery (single or tabbed).\n */\n\nimport { AXPQueryExecutor } from '@acorex-platform/framework-client/runtime';\nimport { runtimeQueryPayloadData } from '@acorex-platform/framework-shared/core';\nimport type { AXPQueryExecuteOptions } from '@acorex-platform/framework-shared/runtime';\nimport { isObjectLike, isString } from 'lodash';\n\n//#region ----- Types -----\n\nexport interface AXPChartQueryTab {\n label: string;\n query: string;\n /** Present when the tab/query binding has an input payload; otherwise `undefined`. */\n queryInput: Record<string, unknown> | undefined;\n}\n\n//#endregion\n\n//#region ----- Options helpers -----\n\nexport function resolveChartQueryKey(opts: Record<string, unknown>): string | undefined {\n const query = opts['query'];\n if (isString(query) && query.trim()) {\n return query.trim();\n }\n return undefined;\n}\n\nexport function resolveChartQueryInput(\n opts: Record<string, unknown>,\n entityId?: string,\n): Record<string, unknown> | undefined {\n const raw = opts['queryInput'] ?? opts['filters'];\n const input = isObjectLike(raw) ? { ...(raw as Record<string, unknown>) } : {};\n\n const productId = input['productId'];\n const productIdValue = isString(productId) ? productId.trim() : '';\n const needsEntityId = entityId && (!productIdValue || productIdValue.includes('context.eval'));\n\n if (needsEntityId) {\n input['productId'] = entityId;\n }\n\n return Object.keys(input).length > 0 ? input : undefined;\n}\n\nfunction normalizeTabInput(\n queryInput: unknown,\n entityId?: string,\n): Record<string, unknown> | undefined {\n return resolveChartQueryInput(\n { queryInput: isObjectLike(queryInput) ? queryInput : undefined },\n entityId,\n );\n}\n\n/**\n * Resolves configured query tabs. Falls back to legacy single `query` / `queryInput`.\n */\nexport function resolveChartQueryTabs(\n opts: Record<string, unknown>,\n entityId?: string,\n): AXPChartQueryTab[] {\n const rawTabs = opts['queryTabs'];\n if (Array.isArray(rawTabs) && rawTabs.length > 0) {\n const tabs = rawTabs\n .map((raw, index) => {\n if (!isObjectLike(raw)) {\n return null;\n }\n const row = raw as Record<string, unknown>;\n const query = isString(row['query']) ? row['query'].trim() : '';\n if (!query) {\n return null;\n }\n const labelRaw = row['label'];\n const label =\n isString(labelRaw) && labelRaw.trim()\n ? labelRaw.trim()\n : `Query ${index + 1}`;\n return {\n label,\n query,\n queryInput: normalizeTabInput(row['queryInput'], entityId),\n } satisfies AXPChartQueryTab;\n })\n .filter((tab): tab is AXPChartQueryTab => tab != null);\n if (tabs.length > 0) {\n return tabs;\n }\n }\n\n const query = resolveChartQueryKey(opts);\n if (!query) {\n return [];\n }\n return [\n {\n label: '',\n query,\n queryInput: resolveChartQueryInput(opts, entityId),\n },\n ];\n}\n\n//#endregion\n\n//#region ----- Fetch -----\n\n/**\n * Fetches a chart/KPI query and returns the single-result DTO, or `undefined` on failure/empty.\n */\nexport async function fetchChartQueryResult<T>(\n queryExecutor: AXPQueryExecutor,\n queryKey: string,\n queryInput?: Record<string, unknown>,\n options?: AXPQueryExecuteOptions,\n): Promise<T | undefined> {\n try {\n const result = await queryExecutor.fetch<Record<string, unknown> | undefined, T>(\n queryKey,\n queryInput ?? {},\n options,\n );\n return runtimeQueryPayloadData(result);\n } catch {\n return undefined;\n }\n}\n\n//#endregion\n","/**\n * Normalizes AI / Chart Generator agent payloads into shapes dashboard chart widgets expect.\n * Called before every `load*Chart*` resolver in {@link chart-widget-data.util.ts}.\n */\n\nimport { isNumber, isObjectLike, isString } from 'lodash';\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return isObjectLike(value) && !Array.isArray(value) ? (value as Record<string, unknown>) : undefined;\n}\n\nfunction toNumber(value: unknown): number | undefined {\n if (isNumber(value) && Number.isFinite(value)) {\n return value;\n }\n if (isString(value) && value.trim()) {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) {\n return parsed;\n }\n }\n return undefined;\n}\n\nfunction promoteLabelsToAxisCategories(opts: Record<string, unknown>): void {\n const xAxis = asRecord(opts['xAxis']);\n if (xAxis && Array.isArray(xAxis['labels']) && !Array.isArray(opts['labels'])) {\n opts['labels'] = xAxis['labels'];\n }\n\n const labels = opts['labels'];\n if (!Array.isArray(labels)) {\n return;\n }\n\n const nextXAxis = xAxis ?? {};\n if (!Array.isArray(nextXAxis['categories'])) {\n opts['xAxis'] = { ...nextXAxis, categories: labels };\n }\n}\n\nfunction materializeLabelValueRows(labels: unknown[], values: unknown[]): Array<{ label: string; value: number }> {\n const rows: Array<{ label: string; value: number }> = [];\n const length = Math.min(labels.length, values.length);\n for (let index = 0; index < length; index++) {\n const value = toNumber(values[index]);\n const label = String(labels[index] ?? '').trim();\n if (!label || value === undefined) {\n continue;\n }\n rows.push({ label, value });\n }\n return rows;\n}\n\nfunction readCategoriesForExpand(opts: Record<string, unknown>): string[] {\n const xAxis = asRecord(opts['xAxis']);\n const fromAxis = xAxis?.['categories'] ?? xAxis?.['labels'];\n if (Array.isArray(fromAxis)) {\n return fromAxis.map((entry) => String(entry ?? ''));\n }\n if (Array.isArray(opts['labels'])) {\n return opts['labels'].map((entry) => String(entry ?? ''));\n }\n return [];\n}\n\nfunction materializeDataSourceFromLabelsAndSeries(opts: Record<string, unknown>): void {\n if (opts['dataSource'] != null || opts['items'] != null) {\n return;\n }\n const labels = readCategoriesForExpand(opts);\n if (labels.length === 0) {\n return;\n }\n\n const values = opts['values'];\n if (Array.isArray(values)) {\n const rows = materializeLabelValueRows(labels, values);\n if (rows.length > 0) {\n opts['dataSource'] = rows;\n }\n return;\n }\n\n const rawSeries = opts['series'];\n if (!Array.isArray(rawSeries) || rawSeries.length === 0) {\n return;\n }\n const first = rawSeries[0];\n if (!isObjectLike(first)) {\n return;\n }\n const seriesData = (first as Record<string, unknown>)['data'];\n if (!Array.isArray(seriesData)) {\n return;\n }\n const rows = materializeLabelValueRows(labels, seriesData);\n if (rows.length > 0) {\n opts['dataSource'] = rows;\n }\n}\n\nfunction unwrapNestedDataObject(opts: Record<string, unknown>): void {\n const data = opts['data'];\n if (data == null || typeof data !== 'object' || Array.isArray(data)) {\n return;\n }\n\n const dataObj = data as Record<string, unknown>;\n\n if (Array.isArray(dataObj['labels']) && opts['labels'] == null) {\n opts['labels'] = dataObj['labels'];\n }\n const xAxisObj = asRecord(dataObj['xAxis']);\n if (xAxisObj && Array.isArray(xAxisObj['labels']) && opts['xAxis'] == null) {\n opts['xAxis'] = xAxisObj;\n }\n if (Array.isArray(dataObj['values']) && opts['values'] == null) {\n opts['values'] = dataObj['values'];\n }\n if (Array.isArray(dataObj['series']) && opts['series'] == null) {\n opts['series'] = dataObj['series'];\n }\n if (Array.isArray(dataObj['items'])) {\n if (opts['items'] == null) {\n opts['items'] = dataObj['items'];\n }\n if (opts['dataSource'] == null) {\n opts['dataSource'] = dataObj['items'];\n }\n }\n\n const scalarValue = toNumber(dataObj['value']);\n if (scalarValue !== undefined && opts['value'] == null && opts['dataSource'] == null) {\n opts['value'] = scalarValue;\n opts['dataSource'] = scalarValue;\n }\n\n delete opts['data'];\n}\n\n/**\n * Expands common AI chart option shapes (`props`, `data`, `labels`+`series`, etc.)\n * into `dataSource` / `xAxis.categories` / scalar gauge values understood by chart loaders.\n */\nexport function expandAiChartWidgetOptions(opts: Record<string, unknown>): void {\n unwrapNestedDataObject(opts);\n\n if (Array.isArray(opts['data']) && opts['dataSource'] == null && opts['items'] == null) {\n opts['dataSource'] = opts['data'];\n delete opts['data'];\n }\n\n if (Array.isArray(opts['items']) && opts['dataSource'] == null) {\n opts['dataSource'] = opts['items'];\n }\n\n promoteLabelsToAxisCategories(opts);\n materializeDataSourceFromLabelsAndSeries(opts);\n\n if (opts['dataSource'] == null) {\n const scalar = toNumber(opts['value']);\n if (scalar !== undefined) {\n opts['dataSource'] = scalar;\n }\n }\n}\n","/**\n * Resolves chart widget payloads from AXPQuery bindings, inline `options.dataSource`,\n * or common AI-emitted shapes (`series` + `xAxis.categories`, etc.).\n */\n\nimport type { AXPQueryExecutor } from '@acorex-platform/framework-client/runtime';\nimport { runtimeQueryCollectionData } from '@acorex-platform/framework-shared/core';\nimport type {\n AXPBarChartQueryItem,\n AXPBarChartQueryResult,\n AXPDonutChartQueryItem,\n AXPDonutChartQueryResult,\n AXPFunnelChartQueryItem,\n AXPFunnelChartQueryResult,\n AXPGaugeChartQueryResult,\n AXPHeatmapChartQueryItem,\n AXPHeatmapChartQueryResult,\n AXPLineChartQueryPoint,\n AXPLineChartQueryResult,\n AXPLineChartQuerySeries,\n} from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { isNumber, isObjectLike, isString } from 'lodash';\n\nimport { fetchChartQueryResult } from './chart-query-load.util';\nimport { expandAiChartWidgetOptions } from './chart-widget-ai-options.util';\n\n//#region ----- Shared helpers -----\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return isObjectLike(value) && !Array.isArray(value) ? (value as Record<string, unknown>) : undefined;\n}\n\nfunction readAxisTitle(axis: unknown): string | undefined {\n const row = asRecord(axis);\n const title = row?.['title'];\n return isString(title) && title.trim() ? title.trim() : undefined;\n}\n\nfunction readAxisCategoriesFromRecord(axis: Record<string, unknown> | undefined): string[] {\n if (!axis) {\n return [];\n }\n const categories = axis['categories'] ?? axis['labels'];\n if (!Array.isArray(categories)) {\n return [];\n }\n return categories.map((entry) => String(entry ?? ''));\n}\n\nfunction readAxisCategories(opts: Record<string, unknown>): string[] {\n const fromXAxis = readAxisCategoriesFromRecord(asRecord(opts['xAxis']));\n if (fromXAxis.length > 0) {\n return fromXAxis;\n }\n const labels = opts['labels'];\n if (Array.isArray(labels)) {\n return labels.map((entry) => String(entry ?? ''));\n }\n return [];\n}\n\nfunction zipCategoryValues(categories: string[], values: unknown[]): AXPLineChartQueryPoint[] {\n const points: AXPLineChartQueryPoint[] = [];\n const length = Math.min(categories.length, values.length);\n for (let index = 0; index < length; index++) {\n const y = values[index];\n if (!isNumber(y)) {\n continue;\n }\n points.push({ x: categories[index], y });\n }\n return points;\n}\n\nfunction seriesLabel(raw: Record<string, unknown>): string | undefined {\n const label = raw['label'] ?? raw['name'];\n return isString(label) && label.trim() ? label.trim() : undefined;\n}\n\nfunction toNumber(value: unknown): number | undefined {\n if (isNumber(value) && Number.isFinite(value)) {\n return value;\n }\n if (isString(value) && value.trim()) {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) {\n return parsed;\n }\n }\n return undefined;\n}\n\nfunction normalizeLinePoints(rawData: unknown, categories: string[]): AXPLineChartQueryPoint[] {\n if (!Array.isArray(rawData) || rawData.length === 0) {\n return [];\n }\n\n const first = rawData[0];\n if (isNumber(first)) {\n return zipCategoryValues(categories, rawData);\n }\n\n const points: AXPLineChartQueryPoint[] = [];\n for (const entry of rawData) {\n if (!isObjectLike(entry)) {\n continue;\n }\n const row = entry as Record<string, unknown>;\n const y = toNumber(row['y'] ?? row['value'] ?? row['count'] ?? row['productCount']);\n if (y === undefined) {\n continue;\n }\n const x =\n row['x'] ??\n row['label'] ??\n row['name'] ??\n row['brandLabel'] ??\n row['brandTitle'] ??\n row['brand'] ??\n row['category'];\n if (x == null || x === '') {\n continue;\n }\n points.push({ x: x as number | string, y });\n }\n return points;\n}\n\nfunction toLineChartSeries(row: Record<string, unknown>, index: number, categories: string[]): AXPLineChartQuerySeries | undefined {\n const data = normalizeLinePoints(row['data'], categories);\n if (data.length === 0) {\n return undefined;\n }\n return {\n id: isString(row['id']) ? row['id'] : `series-${index + 1}`,\n label: seriesLabel(row),\n lineColor: isString(row['lineColor']) ? row['lineColor'] : undefined,\n fillColor: isString(row['fillColor']) ? row['fillColor'] : undefined,\n data,\n };\n}\n\nconst LINE_CHART_LABEL_KEYS = ['label', 'name', 'brandLabel', 'brandTitle', 'brand', 'category'] as const;\n\nfunction isLineChartLabelValueRow(row: Record<string, unknown>): boolean {\n if (Array.isArray(row['data'])) {\n return false;\n }\n const labelRaw = LINE_CHART_LABEL_KEYS.map((key) => row[key]).find((value) => value != null && value !== '');\n const y = toNumber(row['value'] ?? row['y'] ?? row['count'] ?? row['productCount']);\n return labelRaw != null && y !== undefined;\n}\n\n/** Bar/donut-style `{ label, value }[]` → one line series (common AI chart agent output). */\nfunction normalizeLineSeriesFromLabelValueItems(rawItems: unknown[]): AXPLineChartQuerySeries[] {\n const points: AXPLineChartQueryPoint[] = [];\n for (const entry of rawItems) {\n if (!isObjectLike(entry)) {\n continue;\n }\n const row = entry as Record<string, unknown>;\n if (!isLineChartLabelValueRow(row)) {\n continue;\n }\n const labelRaw = LINE_CHART_LABEL_KEYS.map((key) => row[key]).find((value) => value != null && value !== '');\n const y = toNumber(row['value'] ?? row['y'] ?? row['count'] ?? row['productCount']);\n if (labelRaw == null || y === undefined) {\n continue;\n }\n points.push({ x: String(labelRaw), y });\n }\n if (points.length === 0) {\n return [];\n }\n return [{ id: 'series-1', data: points }];\n}\n\nfunction tryNormalizeLineSeriesFromLabelValueRows(rawItems: unknown[]): AXPLineChartQuerySeries[] {\n if (!Array.isArray(rawItems) || rawItems.length === 0) {\n return [];\n }\n const rows = rawItems.filter(isObjectLike) as Record<string, unknown>[];\n if (rows.length === 0 || rows.length !== rawItems.length || !rows.every(isLineChartLabelValueRow)) {\n return [];\n }\n return normalizeLineSeriesFromLabelValueItems(rawItems);\n}\n\nfunction normalizeLineSeriesFromOptions(opts: Record<string, unknown>): AXPLineChartQuerySeries[] {\n const categories = readAxisCategories(opts);\n const series: AXPLineChartQuerySeries[] = [];\n\n const fromDataSource = opts['dataSource'] ?? (Array.isArray(opts['data']) ? opts['data'] : undefined);\n if (Array.isArray(fromDataSource) && fromDataSource.length > 0) {\n fromDataSource.forEach((entry, index) => {\n if (!isObjectLike(entry)) {\n return;\n }\n const normalized = toLineChartSeries(entry as Record<string, unknown>, index, categories);\n if (normalized) {\n series.push(normalized);\n }\n });\n if (series.length > 0) {\n return series;\n }\n const labelValueFromDataSource = tryNormalizeLineSeriesFromLabelValueRows(fromDataSource);\n if (labelValueFromDataSource.length > 0) {\n return labelValueFromDataSource;\n }\n }\n\n const inlineData = opts['data'];\n if (Array.isArray(inlineData) && inlineData.length > 0) {\n const points = normalizeLinePoints(inlineData, categories);\n if (points.length > 0) {\n return [{ id: 'series-1', data: points }];\n }\n }\n\n if (inlineData != null && typeof inlineData === 'object' && !Array.isArray(inlineData)) {\n const wrapped = inlineData as Record<string, unknown>;\n const wrappedSeries = wrapped['series'];\n if (Array.isArray(wrappedSeries) && wrappedSeries.length > 0) {\n const points = normalizeLinePoints(wrappedSeries, categories);\n if (points.length > 0) {\n return [{ id: 'series-1', data: points }];\n }\n }\n }\n\n const rawSeries = opts['series'];\n if (!Array.isArray(rawSeries) || rawSeries.length === 0) {\n return [];\n }\n\n rawSeries.forEach((entry, index) => {\n if (!isObjectLike(entry)) {\n return;\n }\n const normalized = toLineChartSeries(entry as Record<string, unknown>, index, categories);\n if (normalized) {\n series.push(normalized);\n }\n });\n if (series.length > 0) {\n return series;\n }\n return tryNormalizeLineSeriesFromLabelValueRows(rawSeries);\n}\n\nfunction normalizeLabelValueItems(\n opts: Record<string, unknown>,\n labelKeys: string[],\n): Array<{ id?: string; label: string; value: number; color?: string }> {\n const categories = readAxisCategories(opts);\n const rawItems = opts['items'] ?? opts['dataSource'] ?? opts['data'];\n const items: Array<{ id?: string; label: string; value: number; color?: string }> = [];\n\n if (Array.isArray(rawItems) && rawItems.length > 0) {\n rawItems.forEach((entry, index) => {\n if (!isObjectLike(entry)) {\n return;\n }\n const row = entry as Record<string, unknown>;\n const labelRaw = labelKeys.map((key) => row[key]).find((value) => value != null && value !== '');\n const label = labelRaw != null ? String(labelRaw) : '';\n const value = toNumber(row['value'] ?? row['y'] ?? row['count'] ?? row['productCount']);\n if (!label || value === undefined) {\n return;\n }\n items.push({\n id: isString(row['id']) ? row['id'] : `item-${index + 1}`,\n label,\n value,\n color: isString(row['color']) ? row['color'] : undefined,\n });\n });\n return items;\n }\n\n const rawSeries = opts['series'];\n if (Array.isArray(rawSeries) && rawSeries.length > 0 && categories.length > 0) {\n const first = rawSeries[0];\n if (!isObjectLike(first)) {\n return [];\n }\n const row = first as Record<string, unknown>;\n const values = Array.isArray(row['data']) ? row['data'] : [];\n return zipCategoryValues(categories, values).map((point, index) => ({\n id: `item-${index + 1}`,\n label: String(point.x),\n value: point.y,\n }));\n }\n\n return [];\n}\n\n/** Loads collection items when `options.dataSource` is a query key. */\nexport async function loadQueryDataSourceItems(\n queryExecutor: AXPQueryExecutor,\n queryKey: string,\n): Promise<unknown[]> {\n const key = queryKey.trim();\n if (!key) {\n return [];\n }\n\n try {\n const result = await queryExecutor.fetch(key, { skip: 0, take: 10_000, sort: [] });\n const page = runtimeQueryCollectionData(result);\n return Array.isArray(page?.items) ? page.items : [];\n } catch {\n return [];\n }\n}\n\ntype ChartDataLoadDeps = {\n queryExecutor: AXPQueryExecutor;\n queryKey?: string;\n queryInput?: Record<string, unknown>;\n};\n\n/** Merges `xAxisLabel` / `yAxisLabel` with AI `xAxis.title` / `yAxis.title` fallbacks. */\nexport function resolveChartAxisLabels(opts: Record<string, unknown>): {\n xAxisLabel: unknown;\n yAxisLabel: unknown;\n} {\n const xAxisLabel = opts['xAxisLabel'] ?? readAxisTitle(opts['xAxis']);\n const yAxisLabel = opts['yAxisLabel'] ?? readAxisTitle(opts['yAxis']);\n return { xAxisLabel, yAxisLabel };\n}\n\n//#endregion\n\n//#region ----- Line chart -----\n\nexport async function loadLineChartSeries(\n opts: Record<string, unknown>,\n deps: ChartDataLoadDeps,\n): Promise<AXPLineChartQuerySeries[]> {\n expandAiChartWidgetOptions(opts);\n\n if (deps.queryKey) {\n const payload = await fetchChartQueryResult<AXPLineChartQueryResult>(\n deps.queryExecutor,\n deps.queryKey,\n deps.queryInput,\n );\n return payload?.series ?? [];\n }\n\n const inline = normalizeLineSeriesFromOptions(opts);\n if (inline.length > 0) {\n return inline;\n }\n\n const dataSource = opts['dataSource'];\n if (isString(dataSource) && dataSource.trim()) {\n const items = await loadQueryDataSourceItems(deps.queryExecutor, dataSource);\n return normalizeLineSeriesFromOptions({ ...opts, dataSource: items });\n }\n\n return [];\n}\n\n//#endregion\n\n//#region ----- Bar chart -----\n\nexport async function loadBarChartItems(\n opts: Record<string, unknown>,\n deps: ChartDataLoadDeps,\n): Promise<AXPBarChartQueryItem[]> {\n expandAiChartWidgetOptions(opts);\n\n if (deps.queryKey) {\n const payload = await fetchChartQueryResult<AXPBarChartQueryResult>(\n deps.queryExecutor,\n deps.queryKey,\n deps.queryInput,\n );\n return payload?.items ?? [];\n }\n\n const inline = normalizeLabelValueItems(opts, ['label', 'name', 'brand', 'brandLabel', 'brandTitle', 'category']);\n if (inline.length > 0) {\n return inline.map((item) => ({\n id: item.id ?? item.label,\n label: item.label,\n value: item.value,\n color: item.color,\n }));\n }\n\n const dataSource = opts['dataSource'];\n if (isString(dataSource) && dataSource.trim()) {\n const items = await loadQueryDataSourceItems(deps.queryExecutor, dataSource);\n return normalizeLabelValueItems({ ...opts, dataSource: items }, ['label', 'name', 'brand', 'brandLabel', 'brandTitle', 'category']).map(\n (item) => ({\n id: item.id ?? item.label,\n label: item.label,\n value: item.value,\n color: item.color,\n }),\n );\n }\n\n return [];\n}\n\n//#endregion\n\n//#region ----- Donut chart -----\n\nexport async function loadDonutChartItems(\n opts: Record<string, unknown>,\n deps: ChartDataLoadDeps,\n): Promise<AXPDonutChartQueryItem[]> {\n expandAiChartWidgetOptions(opts);\n\n if (deps.queryKey) {\n const payload = await fetchChartQueryResult<AXPDonutChartQueryResult>(\n deps.queryExecutor,\n deps.queryKey,\n deps.queryInput,\n );\n return payload?.items ?? [];\n }\n\n const inline = normalizeLabelValueItems(opts, ['label', 'name', 'brandLabel', 'brandTitle', 'brand', 'category']);\n if (inline.length > 0) {\n return inline.map((item) => ({\n id: item.id ?? item.label,\n label: item.label,\n value: item.value,\n color: item.color,\n }));\n }\n\n const dataSource = opts['dataSource'];\n if (isString(dataSource) && dataSource.trim()) {\n const items = await loadQueryDataSourceItems(deps.queryExecutor, dataSource);\n return normalizeLabelValueItems({ ...opts, dataSource: items }, ['label', 'name', 'brandLabel', 'brandTitle', 'brand', 'category']).map((item) => ({\n id: item.id ?? item.label,\n label: item.label,\n value: item.value,\n color: item.color,\n }));\n }\n\n return [];\n}\n\n//#endregion\n\n//#region ----- Funnel chart -----\n\nexport async function loadFunnelChartItems(\n opts: Record<string, unknown>,\n deps: ChartDataLoadDeps,\n): Promise<AXPFunnelChartQueryItem[]> {\n expandAiChartWidgetOptions(opts);\n\n if (deps.queryKey) {\n const payload = await fetchChartQueryResult<AXPFunnelChartQueryResult>(\n deps.queryExecutor,\n deps.queryKey,\n deps.queryInput,\n );\n return payload?.items ?? [];\n }\n\n const inline = normalizeLabelValueItems(opts, ['name', 'label', 'brandLabel', 'brandTitle', 'brand', 'category']);\n if (inline.length > 0) {\n return inline.map((item) => ({\n id: item.id ?? item.label,\n name: item.label,\n value: item.value,\n color: item.color,\n }));\n }\n\n const dataSource = opts['dataSource'];\n if (isString(dataSource) && dataSource.trim()) {\n const items = await loadQueryDataSourceItems(deps.queryExecutor, dataSource);\n return loadFunnelChartItems({ ...opts, dataSource: items }, { ...deps, queryKey: undefined });\n }\n\n return [];\n}\n\n//#endregion\n\n//#region ----- Heatmap chart -----\n\nexport async function loadHeatmapChartItems(\n opts: Record<string, unknown>,\n deps: ChartDataLoadDeps,\n): Promise<AXPHeatmapChartQueryItem[]> {\n expandAiChartWidgetOptions(opts);\n\n if (deps.queryKey) {\n const payload = await fetchChartQueryResult<AXPHeatmapChartQueryResult>(\n deps.queryExecutor,\n deps.queryKey,\n deps.queryInput,\n );\n return payload?.items ?? [];\n }\n\n const rawItems = opts['items'] ?? opts['dataSource'] ?? opts['data'];\n if (Array.isArray(rawItems) && rawItems.length > 0) {\n const items: AXPHeatmapChartQueryItem[] = [];\n rawItems.forEach((entry) => {\n if (!isObjectLike(entry)) {\n return;\n }\n const row = entry as Record<string, unknown>;\n const x = row['x'];\n const y = row['y'];\n const value = toNumber(row['value'] ?? row['v']);\n if (x == null || y == null || value === undefined) {\n return;\n }\n const item: AXPHeatmapChartQueryItem = {\n x: x as number | string,\n y: y as number | string,\n value,\n };\n if (row['label'] != null) {\n item.label = String(row['label']);\n }\n items.push(item);\n });\n return items;\n }\n\n const dataSource = opts['dataSource'];\n if (isString(dataSource) && dataSource.trim()) {\n const items = await loadQueryDataSourceItems(deps.queryExecutor, dataSource);\n return loadHeatmapChartItems({ ...opts, dataSource: items }, { ...deps, queryKey: undefined });\n }\n\n return [];\n}\n\n//#endregion\n\n//#region ----- Gauge chart -----\n\nexport async function loadGaugeChartValue(\n opts: Record<string, unknown>,\n deps: ChartDataLoadDeps,\n): Promise<number> {\n expandAiChartWidgetOptions(opts);\n\n if (deps.queryKey) {\n const payload = await fetchChartQueryResult<AXPGaugeChartQueryResult>(\n deps.queryExecutor,\n deps.queryKey,\n deps.queryInput,\n );\n return typeof payload?.value === 'number' ? payload.value : 0;\n }\n\n const dataSource = opts['dataSource'];\n if (isNumber(dataSource)) {\n return dataSource;\n }\n\n if (isString(dataSource) && dataSource.trim()) {\n const payload = await fetchChartQueryResult<AXPGaugeChartQueryResult | number>(\n deps.queryExecutor,\n dataSource.trim(),\n );\n if (isNumber(payload)) {\n return payload;\n }\n if (payload && typeof payload === 'object' && isNumber(payload.value)) {\n return payload.value;\n }\n }\n\n const fallback = toNumber(opts['value']);\n return fallback ?? 0;\n}\n\n//#endregion\n","/**\n * Compact tab strip for multi-query chart/KPI widgets (uses ax-tabs).\n */\n\nimport { AXTabsModule, type AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\n\nimport type { AXPChartQueryTab } from './chart-query-load.util';\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axp-chart-query-tabs',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXTabsModule],\n template: `\n @if (tabs().length > 1) {\n <!-- ----- Query tab strip (only when multiple queries are configured) ----- -->\n <ax-tabs\n class=\"axp-chart-query-tabs\"\n [look]=\"'with-line'\"\n [location]=\"'bottom'\"\n [fitParent]=\"false\"\n (onActiveTabChanged)=\"handleTabChanged($event)\"\n >\n @for (tab of tabs(); track tabKey(tab, $index)) {\n <ax-tab-item\n [key]=\"tabKey(tab, $index)\"\n [text]=\"tab.label\"\n [active]=\"activeIndex() === $index\"\n >\n </ax-tab-item>\n }\n </ax-tabs>\n }\n `,\n styles: [\n `\n :host {\n display: block;\n flex: 0 0 auto;\n }\n .axp-chart-query-tabs {\n margin-bottom: 0.25rem;\n }\n `,\n ],\n})\nexport class AXPChartQueryTabsComponent {\n readonly tabs = input<AXPChartQueryTab[]>([]);\n readonly activeIndex = input(0);\n readonly activeIndexChange = output<number>();\n\n protected tabKey(tab: AXPChartQueryTab, index: number): string {\n return `${tab.query}:${index}`;\n }\n\n protected handleTabChanged(event: AXTabStripChangedEvent): void {\n this.activeIndexChange.emit(event.index);\n }\n}\n\n//#endregion\n","/**\n * Shared legend options for dashboard chart widgets (ax-chart-legend).\n */\n\nimport type { AXChartLegendOptions } from '@acorex/charts/chart-legend';\n\n//#region ----- Defaults -----\n\nexport const AXP_CHART_LEGEND_OPTIONS_SERIES: AXChartLegendOptions = {\n mode: 'horizontal',\n showValues: true,\n showPercentage: false,\n interactive: true,\n};\n\nexport const AXP_CHART_LEGEND_OPTIONS_DONUT: AXChartLegendOptions = {\n mode: 'horizontal',\n showValues: true,\n showPercentage: true,\n interactive: true,\n};\n\n//#endregion\n\n//#region ----- Options helpers -----\n\n/**\n * Removes fixed width/height so @acorex/charts sizes from the container.\n */\nexport function omitChartFixedSize<T extends Record<string, unknown>>(options: T): T {\n const next = { ...options };\n delete next['width'];\n delete next['height'];\n return next;\n}\n\n//#endregion\n","import { AXBarChartComponent, AXBarChartData, AXBarChartOption } from '@acorex/charts/bar-chart';\nimport { AXChartLegendComponent } from '@acorex/charts/chart-legend';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { AXPQueryExecutor } from '@acorex-platform/framework-client/runtime';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { AXPDashboardWidgetComponent } from '../../dashboard-widget-base';\nimport { resolveChartQueryTabs } from '../chart-query-load.util';\nimport { loadBarChartItems, resolveChartAxisLabels } from '../chart-widget-data.util';\nimport { AXPChartQueryTabsComponent } from '../chart-query-tabs.component';\nimport { AXP_CHART_LEGEND_OPTIONS_SERIES, omitChartFixedSize } from '../chart-legend.util';\n\n/**\n * Bar Chart Widget Component\n * Renders data as vertical bars with interactive hover effects and animations\n */\n@Component({\n templateUrl: './bar-chart-widget.component.html',\n styleUrls: ['./bar-chart-widget.component.css'],\n imports: [AXBarChartComponent, AXChartLegendComponent, AXPChartQueryTabsComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPBarChartWidgetViewComponent extends AXPDashboardWidgetComponent {\n //#region ----- Services & Dependencies -----\n\n private readonly queryExecutor = inject(AXPQueryExecutor);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ----- Chart state -----\n\n protected data = signal<AXBarChartData[]>([]);\n\n /** Options for the chart with localized title and axis labels. */\n protected barChartOptions = signal<AXBarChartOption & { title: string }>({} as AXBarChartOption & { title: string });\n\n protected readonly legendOptions = AXP_CHART_LEGEND_OPTIONS_SERIES;\n\n private labelResolveGeneration = 0;\n\n //#endregion\n\n //#region ----- Query tabs -----\n\n protected readonly queryTabs = computed(() =>\n resolveChartQueryTabs(this.options() as Record<string, unknown>, this.entityContext()?.entityId),\n );\n\n protected readonly activeTabIndex = signal(0);\n\n private readonly activeQuery = computed(() => {\n const tabs = this.queryTabs();\n if (tabs.length === 0) {\n return undefined;\n }\n const index = Math.min(Math.max(this.activeTabIndex(), 0), tabs.length - 1);\n return tabs[index];\n });\n\n protected selectQueryTab(index: number): void {\n this.activeTabIndex.set(index);\n }\n\n //#endregion\n\n private async resolveChartOptionLabel(value: unknown): Promise<string> {\n if (value != null && typeof value === 'object' && !Array.isArray(value)) {\n return this.translationService.resolve(value as AXPMultiLanguageString);\n }\n const s = String(value ?? '');\n if (s.startsWith('@')) {\n return this.translationService.translateAsync(s);\n }\n return s;\n }\n\n /**\n * Resolves bar category labels from plain text, @i18n keys, or multi-language maps.\n */\n private async resolveLocalizedChartText(value: unknown): Promise<string> {\n if (value == null) {\n return '';\n }\n if (typeof value === 'string') {\n if (value.startsWith('@')) {\n return this.translationService.translateAsync(value);\n }\n return value;\n }\n if (\n typeof value === 'object' &&\n !Array.isArray(value) &&\n this.translationService.isValidMultiLanguageObject(value)\n ) {\n return this.translationService.resolve(value as AXPMultiLanguageString);\n }\n return String(value);\n }\n\n private readonly resolveChartLabelKeysEffect = effect(() => {\n const raw = this.options() as Record<string, unknown>;\n const generation = ++this.labelResolveGeneration;\n const axisLabels = resolveChartAxisLabels(raw);\n void Promise.all([\n this.resolveChartOptionLabel(raw['title']),\n this.resolveChartOptionLabel(axisLabels.xAxisLabel),\n this.resolveChartOptionLabel(axisLabels.yAxisLabel),\n ]).then(([title, xAxisLabel, yAxisLabel]) => {\n if (generation !== this.labelResolveGeneration) {\n return;\n }\n const base = omitChartFixedSize(raw) as unknown as AXBarChartOption & { title: string };\n this.barChartOptions.set({\n ...base,\n title,\n xAxisLabel,\n yAxisLabel,\n });\n });\n });\n\n private readonly clampTabIndexEffect = effect(() => {\n const tabs = this.queryTabs();\n if (this.activeTabIndex() >= tabs.length) {\n this.activeTabIndex.set(0);\n }\n });\n\n //#region ----- Query loading -----\n\n private readonly dataLoadEffect = effect(async () => {\n const opts = this.options() as Record<string, unknown>;\n const active = this.activeQuery();\n const items = await loadBarChartItems(opts, {\n queryExecutor: this.queryExecutor,\n queryKey: active?.query,\n queryInput: active?.queryInput,\n });\n const resolved = await Promise.all(\n items.map(async (item) => ({\n ...item,\n label: await this.resolveLocalizedChartText(item.label),\n })),\n );\n this.data.set(resolved as AXBarChartData[]);\n });\n\n //#endregion\n\n constructor() {\n super();\n this.setOptions({\n showXAxis: true,\n showYAxis: true,\n barWidth: 80,\n cornerRadius: 4,\n showGrid: true,\n showDataLabels: false,\n showTooltip: true,\n animationEasing: 'cubic-out',\n animationDuration: 800,\n ...omitChartFixedSize(this.options() as Record<string, unknown>),\n });\n this.barChartOptions.set(\n omitChartFixedSize(this.options() as Record<string, unknown>) as unknown as AXBarChartOption & {\n title: string;\n },\n );\n }\n\n handleBarClick(_event: unknown) {\n // reserved for future drill-down\n }\n}\n","<div class=\"axp-chart-widget-host\">\n <axp-chart-query-tabs\n [tabs]=\"queryTabs()\"\n [activeIndex]=\"activeTabIndex()\"\n (activeIndexChange)=\"selectQueryTab($event)\"\n />\n <div class=\"axp-chart-widget-host__body axp-chart-widget-host__body--with-legend\">\n <div class=\"axp-chart-widget-host__chart\">\n <ax-bar-chart\n #chart\n [data]=\"data()\"\n [options]=\"barChartOptions()\"\n (barClick)=\"handleBarClick($event)\"\n ></ax-bar-chart>\n </div>\n <!-- ----- Series indicator (legend) ----- -->\n @if (data().length > 0) {\n <div class=\"axp-chart-widget-host__legend\">\n <ax-chart-legend [chart]=\"chart\" [options]=\"legendOptions\"></ax-chart-legend>\n </div>\n }\n </div>\n</div>\n","import type { AXPDefinitionCategory } from '@acorex-platform/framework-shared/core';\n\nconst CAT = '@dashboard-management:shared-widgets.widget-picker-category';\n\nexport const AXP_WIDGETS_CHART_CATEGORY: AXPDefinitionCategory = {\n name: 'chart',\n order: 6,\n title: `${CAT}.chart`,\n};\n\nexport const AXP_WIDGETS_UTILITY_CATEGORY: AXPDefinitionCategory = {\n name: 'utility',\n order: 7,\n title: `${CAT}.utility`,\n};\n","import type { AXPDefinitionCategory } from '@acorex-platform/framework-shared/core';\n\nconst SUB = '@dashboard-management:shared-widgets.widget-picker-sub-categories';\n\n//#region ---- Chart tab sub-categories ----\n\nexport const AXP_DASHBOARD_SHARED_SUB_CHART_KPI: AXPDefinitionCategory = {\n name: 'dashboard-chart-kpi',\n order: 1,\n title: `${SUB}.chart-kpi`,\n};\n\nexport const AXP_DASHBOARD_SHARED_SUB_CHART_CARTESIAN: AXPDefinitionCategory = {\n name: 'dashboard-chart-cartesian',\n order: 2,\n title: `${SUB}.chart-cartesian`,\n};\n\nexport const AXP_DASHBOARD_SHARED_SUB_CHART_RADIAL: AXPDefinitionCategory = {\n name: 'dashboard-chart-radial',\n order: 3,\n title: `${SUB}.chart-radial`,\n};\n\nexport const AXP_DASHBOARD_SHARED_SUB_CHART_SPECIALIZED: AXPDefinitionCategory = {\n name: 'dashboard-chart-specialized',\n order: 4,\n title: `${SUB}.chart-specialized`,\n};\n\n//#endregion\n\n//#region ---- Utility tab sub-categories ----\n\nexport const AXP_DASHBOARD_SHARED_SUB_UTILITY_SHORTCUT: AXPDefinitionCategory = {\n name: 'dashboard-utility-shortcut',\n order: 1,\n title: `${SUB}.utility-shortcut`,\n};\n\nexport const AXP_DASHBOARD_SHARED_SUB_UTILITY_TIME: AXPDefinitionCategory = {\n name: 'dashboard-utility-time',\n order: 2,\n title: `${SUB}.utility-time`,\n};\n\nexport const AXP_DASHBOARD_SHARED_SUB_UTILITY_WEATHER: AXPDefinitionCategory = {\n name: 'dashboard-utility-weather',\n order: 3,\n title: `${SUB}.utility-weather`,\n};\n\nexport const AXP_DASHBOARD_SHARED_SUB_UTILITY_NOTES: AXPDefinitionCategory = {\n name: 'dashboard-utility-notes',\n order: 4,\n title: `${SUB}.utility-notes`,\n};\n\n//#endregion\n\n","import { AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\nimport { AXPWidgetConfig, AXPWidgetGroupEnum, cloneProperty } from '@acorex-platform/framework-shared/widget-core';\nimport { RootConfig } from '@acorex-platform/module-dashboard-management-client/contracts';\n\nimport { AXP_APPEARANCE_PROPERTY_GROUP, AXP_DATA_PATH_PROPERTY, AXP_NAME_PROPERTY, createQueryOptionsProperty } from '@acorex-platform/framework-client/layout/widgets';\nimport { AXP_CHART_QUERY_RESULT_TYPE } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { AXP_WIDGETS_CHART_CATEGORY } from '../../widget-categories.type';\nimport { AXP_CHART_WIDE_DIMENSIONS } from '../chart-widget.dimensions';\nimport { AXP_DASHBOARD_SHARED_SUB_CHART_CARTESIAN } from '../../widget-subcategories.type';\n\nexport const AXPBarChartWidget: AXPWidgetConfig = {\n name: RootConfig.widgets.barChart,\n title: '@dashboard:widgets.bar-chart.widget-title',\n description: '@dashboard:widgets.bar-chart.widget-description',\n categories: [AXP_WIDGETS_CHART_CATEGORY],\n subCategory: AXP_DASHBOARD_SHARED_SUB_CHART_CARTESIAN,\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-chart-bar',\n properties: [\n createQueryOptionsProperty({ resultType: AXP_CHART_QUERY_RESULT_TYPE.barSeries }),\n cloneProperty(AXP_NAME_PROPERTY, { visible: false }),\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n // ====== Chart Title ======\n {\n name: 'title',\n title: '@dashboard:widgets.bar-chart.chart-title',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'title',\n path: 'options.title',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: 'Enter chart title',\n },\n },\n },\n visible: true,\n },\n // ====== X Axis Settings ======\n {\n name: 'xAxisLabel',\n title: '@dashboard:widgets.bar-chart.x-axis-label',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'xAxisLabel',\n path: 'options.xAxisLabel',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n // ====== Y Axis Settings ======\n {\n name: 'yAxisLabel',\n title: '@dashboard:widgets.bar-chart.y-axis-label',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'yAxisLabel',\n path: 'options.yAxisLabel',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n /* Commented out properties\n // ====== Layout & Dimensions ======\n {\n name: 'width',\n title: '@dashboard:widgets.bar-chart.width',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: null,\n dataType: 'number',\n interface: {\n name: 'width',\n path: 'options.width',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 0,\n maxValue: 1200,\n },\n },\n },\n visible: true,\n },\n {\n name: 'height',\n title: '@dashboard:widgets.bar-chart.height',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: 300,\n dataType: 'number',\n interface: {\n name: 'height',\n path: 'options.height',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 0,\n maxValue: 800,\n },\n },\n },\n visible: true,\n },\n // ====== X Axis Settings ======\n {\n name: 'showXAxis',\n title: '@dashboard:widgets.bar-chart.show-x-axis',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showXAxis',\n path: 'options.showXAxis',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n // ====== Y Axis Settings ======\n {\n name: 'showYAxis',\n title: '@dashboard:widgets.bar-chart.show-y-axis',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showYAxis',\n path: 'options.showYAxis',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n // ====== Bar Appearance ======\n {\n name: 'barWidth',\n title: '@dashboard:widgets.bar-chart.bar-width',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 80,\n dataType: 'number',\n interface: {\n name: 'barWidth',\n path: 'options.barWidth',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '1-100',\n minValue: 1,\n maxValue: 100,\n },\n },\n },\n visible: true,\n },\n {\n name: 'cornerRadius',\n title: '@dashboard:widgets.bar-chart.corner-radius',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 4,\n dataType: 'number',\n interface: {\n name: 'cornerRadius',\n path: 'options.cornerRadius',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '0-20',\n minValue: 0,\n maxValue: 20,\n },\n },\n },\n visible: true,\n },\n // ====== Grid Settings ======\n {\n name: 'showGrid',\n title: '@dashboard:widgets.bar-chart.show-grid',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showGrid',\n path: 'options.showGrid',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'showDataLabels',\n title: '@dashboard:widgets.bar-chart.show-data-labels',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showDataLabels',\n path: 'options.showDataLabels',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n // ====== Tooltip Settings ======\n {\n name: 'showTooltip',\n title: '@dashboard:widgets.bar-chart.show-tooltip',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showTooltip',\n path: 'options.showTooltip',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n // ====== Animation Settings ======\n {\n name: 'animationEasing',\n title: '@dashboard:widgets.bar-chart.animation-easing',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 'cubic-out',\n dataType: 'string',\n interface: {\n name: 'animationEasing',\n path: 'options.animationEasing',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: [\n { value: 'linear', text: 'Linear' },\n { value: 'ease', text: 'Ease' },\n { value: 'ease-in', text: 'Ease In' },\n { value: 'ease-out', text: 'Ease Out' },\n { value: 'ease-in-out', text: 'Ease In Out' },\n { value: 'cubic', text: 'Cubic' },\n { value: 'cubic-in', text: 'Cubic In' },\n { value: 'cubic-out', text: 'Cubic Out' },\n { value: 'cubic-in-out', text: 'Cubic In Out' },\n ],\n textField: 'text',\n valueField: 'value',\n },\n },\n },\n visible: true,\n },\n {\n name: 'animationDuration',\n title: '@dashboard:widgets.bar-chart.animation-duration',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 800,\n dataType: 'number',\n interface: {\n name: 'animationDuration',\n path: 'options.animationDuration',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '0-2000',\n minValue: 0,\n maxValue: 2000,\n },\n },\n },\n visible: true,\n },\n */\n ],\n components: {\n view: {\n component: () => import('./bar-chart-widget.component').then((c) => c.AXPBarChartWidgetViewComponent),\n },\n },\n meta: {\n dimensions: AXP_CHART_WIDE_DIMENSIONS,\n },\n};\n","import { AXChartLegendComponent } from '@acorex/charts/chart-legend';\nimport { AXDonutChartComponent, AXDonutChartData, AXDonutChartOption } from '@acorex/charts/donut-chart';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { AXPQueryExecutor } from '@acorex-platform/framework-client/runtime';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { AXPDashboardWidgetComponent } from '../../dashboard-widget-base';\nimport { resolveChartQueryTabs } from '../chart-query-load.util';\nimport { loadDonutChartItems } from '../chart-widget-data.util';\nimport { AXPChartQueryTabsComponent } from '../chart-query-tabs.component';\nimport { AXP_CHART_LEGEND_OPTIONS_DONUT, omitChartFixedSize } from '../chart-legend.util';\n\n/**\n * Donut Chart Widget Component\n * Displays data in a circular donut chart with interactive segments\n */\n@Component({\n templateUrl: './donut-chart-widget.component.html',\n styleUrls: ['./donut-chart-widget.component.css'],\n imports: [AXDonutChartComponent, AXChartLegendComponent, AXPChartQueryTabsComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPDonutChartWidgetViewComponent extends AXPDashboardWidgetComponent {\n //#region ----- Services & Dependencies -----\n\n private readonly queryExecutor = inject(AXPQueryExecutor);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ----- Chart state -----\n\n protected data = signal<AXDonutChartData[]>([]);\n\n protected donutChartOptions = signal<AXDonutChartOption & { title: string }>(\n {} as AXDonutChartOption & { title: string },\n );\n\n protected readonly legendOptions = AXP_CHART_LEGEND_OPTIONS_DONUT;\n\n private labelResolveGeneration = 0;\n\n //#endregion\n\n //#region ----- Localization -----\n\n private async resolveChartOptionLabel(value: unknown): Promise<string> {\n if (value != null && typeof value === 'object' && !Array.isArray(value)) {\n return this.translationService.resolve(value as AXPMultiLanguageString);\n }\n const s = String(value ?? '');\n if (s.startsWith('@')) {\n return this.translationService.translateAsync(s);\n }\n return s;\n }\n\n /**\n * Resolves segment labels from plain text, @i18n keys, or multi-language maps.\n */\n private async resolveLocalizedChartText(value: unknown): Promise<string> {\n if (value == null) {\n return '';\n }\n if (typeof value === 'string') {\n if (value.startsWith('@')) {\n return this.translationService.translateAsync(value);\n }\n return value;\n }\n if (\n typeof value === 'object' &&\n !Array.isArray(value) &&\n this.translationService.isValidMultiLanguageObject(value)\n ) {\n return this.translationService.resolve(value as AXPMultiLanguageString);\n }\n return String(value);\n }\n\n private readonly resolveDonutOptionsEffect = effect(() => {\n const raw = this.options() as Record<string, unknown>;\n const generation = ++this.labelResolveGeneration;\n void (async () => {\n const title = await this.resolveChartOptionLabel(raw['title']);\n const totalLabel =\n raw['totalLabel'] !== undefined ? await this.resolveChartOptionLabel(raw['totalLabel']) : undefined;\n if (generation !== this.labelResolveGeneration) {\n return;\n }\n const base = omitChartFixedSize(raw) as unknown as AXDonutChartOption & { title: string };\n this.donutChartOptions.set({\n ...base,\n title,\n ...(totalLabel !== undefined ? { totalLabel } : {}),\n });\n })();\n });\n\n //#endregion\n\n //#region ----- Query tabs -----\n\n protected readonly queryTabs = computed(() =>\n resolveChartQueryTabs(this.options() as Record<string, unknown>, this.entityContext()?.entityId),\n );\n\n protected readonly activeTabIndex = signal(0);\n\n private readonly activeQuery = computed(() => {\n const tabs = this.queryTabs();\n if (tabs.length === 0) {\n return undefined;\n }\n const index = Math.min(Math.max(this.activeTabIndex(), 0), tabs.length - 1);\n return tabs[index];\n });\n\n protected selectQueryTab(index: number): void {\n this.activeTabIndex.set(index);\n }\n\n private readonly clampTabIndexEffect = effect(() => {\n const tabs = this.queryTabs();\n if (this.activeTabIndex() >= tabs.length) {\n this.activeTabIndex.set(0);\n }\n });\n\n //#endregion\n\n //#region ----- Query loading -----\n\n private readonly dataLoadEffect = effect(async () => {\n const opts = this.options() as Record<string, unknown>;\n const active = this.activeQuery();\n const items = await loadDonutChartItems(opts, {\n queryExecutor: this.queryExecutor,\n queryKey: active?.query,\n queryInput: active?.queryInput,\n });\n const resolved = await Promise.all(\n items.map(async (item) => ({\n ...item,\n label: await this.resolveLocalizedChartText(item.label),\n })),\n );\n this.data.set(resolved as AXDonutChartData[]);\n });\n\n //#endregion\n\n constructor() {\n super();\n this.setOptions({\n showDataLabels: false,\n donutWidth: 22,\n cornerRadius: 4,\n showTooltip: true,\n animationEasing: 'cubic-out',\n animationDuration: 800,\n ...omitChartFixedSize(this.options() as Record<string, unknown>),\n });\n this.donutChartOptions.set(\n omitChartFixedSize(this.options() as Record<string, unknown>) as unknown as AXDonutChartOption & {\n title: string;\n },\n );\n }\n\n handleDonutChartSegmentClick(_event: unknown) {\n // reserved for future drill-down\n }\n}\n","<div class=\"axp-chart-widget-host\">\n <axp-chart-query-tabs\n [tabs]=\"queryTabs()\"\n [activeIndex]=\"activeTabIndex()\"\n (activeIndexChange)=\"selectQueryTab($event)\"\n />\n <div class=\"axp-chart-widget-host__body axp-chart-widget-host__body--with-legend\">\n <div class=\"axp-chart-widget-host__chart axp-chart-widget-host__chart--radial\">\n <ax-donut-chart\n #chart\n [data]=\"data()\"\n [options]=\"donutChartOptions()\"\n (segmentClick)=\"handleDonutChartSegmentClick($event)\"\n ></ax-donut-chart>\n </div>\n <!-- ----- Series indicator (legend) ----- -->\n @if (data().length > 0) {\n <div class=\"axp-chart-widget-host__legend\">\n <ax-chart-legend [chart]=\"chart\" [options]=\"legendOptions\"></ax-chart-legend>\n </div>\n }\n </div>\n</div>\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, cloneProperty } from '@acorex-platform/framework-shared/widget-core';\nimport { RootConfig } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\n\nimport {\n AXP_APPEARANCE_PROPERTY_GROUP,\n AXP_DATA_PATH_PROPERTY,\n AXP_NAME_PROPERTY,\n AXP_STYLING_PROPERTY_GROUP,\n createQueryOptionsProperty,\n} from '@acorex-platform/framework-client/layout/widgets';\nimport { AXP_CHART_QUERY_RESULT_TYPE } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { AXP_WIDGETS_CHART_CATEGORY } from '../../widget-categories.type';\nimport { AXP_CHART_SQUARE_DIMENSIONS } from '../chart-widget.dimensions';\nimport { AXP_DASHBOARD_SHARED_SUB_CHART_RADIAL } from '../../widget-subcategories.type';\n\nexport const AXPDonutChartWidget: AXPWidgetConfig = {\n name: RootConfig.widgets.donutChart,\n title: '@dashboard:widgets.donut-chart.widget-title',\n description: '@dashboard:widgets.donut-chart.widget-description',\n categories: AXP_WIDGETS_CHART_CATEGORY,\n subCategory: AXP_DASHBOARD_SHARED_SUB_CHART_RADIAL,\n groups: [AXPWidgetGroupEnum.BaseWidget],\n type: 'dashboard',\n icon: 'fa-light fa-donut',\n properties: [\n createQueryOptionsProperty({ resultType: AXP_CHART_QUERY_RESULT_TYPE.donutSeries }),\n cloneProperty(AXP_NAME_PROPERTY, { visible: false }),\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n // ====== Chart Title ======\n {\n name: 'title',\n title: '@dashboard:widgets.donut-chart.chart-title',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'title',\n path: 'options.title',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: 'Enter chart title',\n },\n },\n },\n visible: true,\n },\n /* Commented out properties\n // ====== Size & Layout ======\n {\n name: 'width',\n title: '@dashboard:widgets.donut-chart.width',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: 300,\n dataType: 'number',\n interface: {\n name: 'width',\n path: 'options.width',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 200,\n maxValue: 1200,\n },\n },\n },\n visible: true,\n },\n {\n name: 'height',\n title: '@dashboard:widgets.donut-chart.height',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: 300,\n dataType: 'number',\n interface: {\n name: 'height',\n path: 'options.height',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 200,\n maxValue: 800,\n },\n },\n },\n visible: true,\n },\n // ====== Donut Appearance ======\n {\n name: 'showDataLabels',\n title: '@dashboard:widgets.donut-chart.show-data-labels',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showDataLabels',\n path: 'options.showDataLabels',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'donutWidth',\n title: '@dashboard:widgets.donut-chart.donut-width',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 35,\n dataType: 'number',\n interface: {\n name: 'donutWidth',\n path: 'options.donutWidth',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '10-80',\n minValue: 10,\n maxValue: 80,\n },\n },\n },\n visible: true,\n },\n {\n name: 'cornerRadius',\n title: '@dashboard:widgets.donut-chart.corner-radius',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 4,\n dataType: 'number',\n interface: {\n name: 'cornerRadius',\n path: 'options.cornerRadius',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '0-20',\n minValue: 0,\n maxValue: 20,\n },\n },\n },\n visible: true,\n },\n // ====== Legend ======\n // {\n // name: 'showLegend',\n // title: 'Show Legend',\n // group: AXP_APPEARANCE_PROPERTY_GROUP,\n // schema: {\n // defaultValue: true,\n // dataType: 'boolean',\n // interface: {\n // name: 'showLegend',\n // path: 'options.showLegend',\n // type: AXPWidgetsCatalog.toggle,\n // },\n // },\n // visible: true,\n // },\n // {\n // name: 'legendPosition',\n // title: 'Legend Position',\n // group: AXP_APPEARANCE_PROPERTY_GROUP,\n // schema: {\n // defaultValue: 'right',\n // dataType: 'string',\n // interface: {\n // name: 'legendPosition',\n // path: 'options.legendPosition',\n // type: AXPWidgetsCatalog.select,\n // options: {\n // dataSource: ['right', 'bottom'],\n // },\n // },\n // },\n // visible: true,\n // },\n // ====== Tooltip ======\n {\n name: 'showTooltip',\n title: '@dashboard:widgets.donut-chart.show-tooltip',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showTooltip',\n path: 'options.showTooltip',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n // ====== Animation Settings ======\n {\n name: 'animationEasing',\n title: '@dashboard:widgets.donut-chart.animation-easing',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 'cubic-out',\n dataType: 'string',\n interface: {\n name: 'animationEasing',\n path: 'options.animationEasing',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: [\n { value: 'linear', text: 'Linear' },\n { value: 'ease', text: 'Ease' },\n { value: 'ease-in', text: 'Ease In' },\n { value: 'ease-out', text: 'Ease Out' },\n { value: 'ease-in-out', text: 'Ease In Out' },\n { value: 'cubic', text: 'Cubic' },\n { value: 'cubic-in', text: 'Cubic In' },\n { value: 'cubic-out', text: 'Cubic Out' },\n { value: 'cubic-in-out', text: 'Cubic In Out' },\n ],\n textField: 'text',\n valueField: 'value',\n },\n },\n },\n visible: true,\n },\n {\n name: 'animationDuration',\n title: '@dashboard:widgets.donut-chart.animation-duration',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 800,\n dataType: 'number',\n interface: {\n name: 'animationDuration',\n path: 'options.animationDuration',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '0-2000',\n minValue: 0,\n maxValue: 2000,\n },\n },\n },\n visible: true,\n },\n */\n ],\n components: {\n view: {\n component: () => import('./donut-chart-widget.component').then((c) => c.AXPDonutChartWidgetViewComponent),\n },\n },\n meta: {\n dimensions: AXP_CHART_SQUARE_DIMENSIONS,\n },\n};\n","import { AXFunnelChartComponent, AXFunnelChartOption, AXFunnelData } from '@acorex/charts/funnel-chart';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { AXPQueryExecutor } from '@acorex-platform/framework-client/runtime';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { AXPDashboardWidgetComponent } from '../../dashboard-widget-base';\nimport { resolveChartQueryTabs } from '../chart-query-load.util';\nimport { loadFunnelChartItems } from '../chart-widget-data.util';\nimport { AXPChartQueryTabsComponent } from '../chart-query-tabs.component';\n\n/**\n * Funnel Chart Widget Component\n * Displays step-wise conversion/flow data as a funnel.\n */\n@Component({\n templateUrl: './funnel-chart-widget.component.html',\n styleUrls: ['./funnel-chart-widget.component.css'],\n imports: [AXFunnelChartComponent, AXPChartQueryTabsComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPFunnelChartWidgetViewComponent extends AXPDashboardWidgetComponent {\n //#region ----- Services & Dependencies -----\n\n private readonly queryExecutor = inject(AXPQueryExecutor);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ----- Chart state -----\n\n protected data = signal<AXFunnelData[]>([]);\n\n /** Options passed to the chart with resolved messages/labels (multi-language and @i18n keys). */\n protected funnelOptions = signal<AXFunnelChartOption>({} as AXFunnelChartOption);\n\n private labelResolveGeneration = 0;\n\n //#endregion\n\n //#region ----- Query tabs -----\n\n protected readonly queryTabs = computed(() =>\n resolveChartQueryTabs(this.options() as Record<string, unknown>, this.entityContext()?.entityId),\n );\n\n protected readonly activeTabIndex = signal(0);\n\n private readonly activeQuery = computed(() => {\n const tabs = this.queryTabs();\n if (tabs.length === 0) {\n return undefined;\n }\n const index = Math.min(Math.max(this.activeTabIndex(), 0), tabs.length - 1);\n return tabs[index];\n });\n\n protected selectQueryTab(index: number): void {\n this.activeTabIndex.set(index);\n }\n\n //#endregion\n\n //#region ----- Localization -----\n\n private async resolveChartText(value: unknown): Promise<string> {\n if (value == null) {\n return '';\n }\n if (typeof value === 'string') {\n return value.startsWith('@') ? this.translationService.translateAsync(value) : value;\n }\n if (\n typeof value === 'object' &&\n !Array.isArray(value) &&\n this.translationService.isValidMultiLanguageObject(value)\n ) {\n return this.translationService.resolve(value as AXPMultiLanguageString);\n }\n return String(value);\n }\n\n private readonly resolveOptionLabelsEffect = effect(() => {\n const raw = this.options() as Record<string, unknown>;\n const generation = ++this.labelResolveGeneration;\n\n void (async () => {\n const messagesRaw = raw['messages'];\n const messages =\n messagesRaw && typeof messagesRaw === 'object' && !Array.isArray(messagesRaw)\n ? (messagesRaw as Record<string, unknown>)\n : undefined;\n\n const noData = await this.resolveChartText(messages?.['noData']);\n\n if (generation !== this.labelResolveGeneration) {\n return;\n }\n\n const base = raw as unknown as AXFunnelChartOption;\n this.funnelOptions.set({\n ...base,\n ...(messages\n ? {\n messages: {\n ...base.messages,\n ...(noData ? { noData } : {}),\n ...(messages['noDataIcon'] ? { noDataIcon: String(messages['noDataIcon']) } : {}),\n },\n }\n : {}),\n });\n })();\n });\n\n //#endregion\n\n //#region ----- Query loading -----\n\n private readonly clampTabIndexEffect = effect(() => {\n const tabs = this.queryTabs();\n if (this.activeTabIndex() >= tabs.length) {\n this.activeTabIndex.set(0);\n }\n });\n\n private readonly dataLoadEffect = effect(async () => {\n const opts = this.options() as Record<string, unknown>;\n const active = this.activeQuery();\n const items = await loadFunnelChartItems(opts, {\n queryExecutor: this.queryExecutor,\n queryKey: active?.query,\n queryInput: active?.queryInput,\n });\n const resolved = await Promise.all(\n items.map(async (item) => ({\n ...item,\n name: await this.resolveChartText(item.name),\n })),\n );\n this.data.set(resolved as AXFunnelData[]);\n });\n\n //#endregion\n\n constructor() {\n super();\n this.setOptions({\n showLabels: true,\n showTooltip: true,\n neckWidth: 0.3,\n animationEasing: 'cubic-out',\n color: 'rgb(var(--ax-sys-color-primary-500))',\n animationDuration: 800,\n margin: { top: 16, right: 16, bottom: 16, left: 16 },\n ...this.options(),\n });\n\n this.funnelOptions.set(this.options() as AXFunnelChartOption);\n }\n}\n","<div class=\"axp-chart-widget-host\">\n <axp-chart-query-tabs\n [tabs]=\"queryTabs()\"\n [activeIndex]=\"activeTabIndex()\"\n (activeIndexChange)=\"selectQueryTab($event)\"\n />\n <div class=\"axp-chart-widget-host__body\">\n <div class=\"axp-chart-widget-host__chart axp-chart-widget-host__chart--funnel\">\n <ax-funnel-chart [data]=\"data()\" [options]=\"funnelOptions()\"></ax-funnel-chart>\n </div>\n </div>\n</div>\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, cloneProperty } from '@acorex-platform/framework-shared/widget-core';\nimport { AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\n\nimport {\n AXP_APPEARANCE_PROPERTY_GROUP,\n AXP_DATA_PATH_PROPERTY,\n AXP_NAME_PROPERTY,\n createQueryOptionsProperty,\n} from '@acorex-platform/framework-client/layout/widgets';\nimport { AXP_CHART_QUERY_RESULT_TYPE } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { RootConfig } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { AXP_WIDGETS_CHART_CATEGORY } from '../../widget-categories.type';\nimport { AXP_CHART_FUNNEL_DIMENSIONS } from '../chart-widget.dimensions';\nimport { AXP_DASHBOARD_SHARED_SUB_CHART_SPECIALIZED } from '../../widget-subcategories.type';\n\nexport const AXPFunnelChartWidget: AXPWidgetConfig = {\n name: RootConfig.widgets.funnelChart,\n title: '@dashboard:widgets.funnel-chart.widget-title',\n description: '@dashboard:widgets.funnel-chart.widget-description',\n categories: [AXP_WIDGETS_CHART_CATEGORY],\n subCategory: AXP_DASHBOARD_SHARED_SUB_CHART_SPECIALIZED,\n groups: [AXPWidgetGroupEnum.BaseWidget],\n type: 'dashboard',\n icon: 'fa-light fa-filter',\n properties: [\n createQueryOptionsProperty({ resultType: AXP_CHART_QUERY_RESULT_TYPE.funnelSeries }),\n cloneProperty(AXP_NAME_PROPERTY, { visible: false }),\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n {\n name: 'title',\n title: '@dashboard:widgets.funnel-chart.chart-title',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'title',\n path: 'options.title',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: 'Enter chart title',\n },\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () => import('./funnel-chart-widget.component').then((c) => c.AXPFunnelChartWidgetViewComponent),\n },\n },\n meta: {\n dimensions: AXP_CHART_FUNNEL_DIMENSIONS,\n },\n};\n","import { AXGaugeChartComponent, AXGaugeChartOption } from '@acorex/charts/gauge-chart';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { AXPQueryExecutor } from '@acorex-platform/framework-client/runtime';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { AXPDashboardWidgetComponent } from '../../dashboard-widget-base';\nimport { resolveChartQueryTabs } from '../chart-query-load.util';\nimport { loadGaugeChartValue } from '../chart-widget-data.util';\nimport { omitChartFixedSize } from '../chart-legend.util';\nimport { AXPChartQueryTabsComponent } from '../chart-query-tabs.component';\n\n/**\n * Gauge Chart Widget Component\n * Renders a semi-circular gauge chart with animated needle and thresholds\n */\n@Component({\n templateUrl: './gauge-chart-widget.component.html',\n styleUrls: ['./gauge-chart-widget.component.css'],\n imports: [AXGaugeChartComponent, AXPChartQueryTabsComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPGaugeChartWidgetViewComponent extends AXPDashboardWidgetComponent {\n //#region ----- Services & Dependencies -----\n\n private readonly queryExecutor = inject(AXPQueryExecutor);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ----- Chart state -----\n\n protected value = signal<number>(0);\n\n /** Options with resolved title, label, and threshold labels for the chart SVG/layer. */\n protected gaugeChartOptions = signal<AXGaugeChartOption & { title?: string }>(\n {} as AXGaugeChartOption & { title?: string },\n );\n\n private labelResolveGeneration = 0;\n\n //#endregion\n\n //#region ----- Localization -----\n\n private async resolveChartOptionLabel(value: unknown): Promise<string> {\n if (value != null && typeof value === 'object' && !Array.isArray(value)) {\n return this.translationService.resolve(value as AXPMultiLanguageString);\n }\n const s = String(value ?? '');\n if (s.startsWith('@')) {\n return this.translationService.translateAsync(s);\n }\n return s;\n }\n\n private readonly resolveGaugeOptionsEffect = effect(() => {\n const raw = this.options() as Record<string, unknown>;\n const generation = ++this.labelResolveGeneration;\n const thresholdSource = raw['thresholds'];\n void (async () => {\n const [title, label] = await Promise.all([\n this.resolveChartOptionLabel(raw['title']),\n this.resolveChartOptionLabel(raw['label']),\n ]);\n let thresholds: AXGaugeChartOption['thresholds'];\n if (Array.isArray(thresholdSource)) {\n thresholds = await Promise.all(\n thresholdSource.map(async (t) => {\n const entry = t as Record<string, unknown>;\n const labelRaw = entry['label'];\n return {\n value: entry['value'] as number,\n color: String(entry['color'] ?? ''),\n ...(labelRaw != null && labelRaw !== '' ? { label: await this.resolveChartOptionLabel(labelRaw) } : {}),\n };\n }),\n );\n }\n if (generation !== this.labelResolveGeneration) {\n return;\n }\n const base = omitChartFixedSize(raw) as unknown as AXGaugeChartOption & { title?: string };\n this.gaugeChartOptions.set({\n ...base,\n title,\n label,\n showValue: base.showValue !== false,\n showDataLabels: base.showDataLabels !== false,\n ...(thresholds ? { thresholds } : {}),\n });\n })();\n });\n\n //#endregion\n\n //#region ----- Query tabs -----\n\n protected readonly queryTabs = computed(() =>\n resolveChartQueryTabs(this.options() as Record<string, unknown>, this.entityContext()?.entityId),\n );\n\n protected readonly activeTabIndex = signal(0);\n\n private readonly activeQuery = computed(() => {\n const tabs = this.queryTabs();\n if (tabs.length === 0) {\n return undefined;\n }\n const index = Math.min(Math.max(this.activeTabIndex(), 0), tabs.length - 1);\n return tabs[index];\n });\n\n protected selectQueryTab(index: number): void {\n this.activeTabIndex.set(index);\n }\n\n private readonly clampTabIndexEffect = effect(() => {\n const tabs = this.queryTabs();\n if (this.activeTabIndex() >= tabs.length) {\n this.activeTabIndex.set(0);\n }\n });\n\n //#endregion\n\n //#region ----- Query loading -----\n\n private readonly dataLoadEffect = effect(async () => {\n const opts = this.options() as Record<string, unknown>;\n const active = this.activeQuery();\n const value = await loadGaugeChartValue(opts, {\n queryExecutor: this.queryExecutor,\n queryKey: active?.query,\n queryInput: active?.queryInput,\n });\n this.value.set(value);\n });\n\n //#endregion\n\n constructor() {\n super();\n this.setOptions({\n minValue: 0,\n maxValue: 100,\n showTooltip: true,\n showValue: true,\n showDataLabels: true,\n gaugeWidth: 18,\n cornerRadius: 4,\n animationEasing: 'cubic-out',\n animationDuration: 800,\n ...omitChartFixedSize(this.options() as Record<string, unknown>),\n });\n this.gaugeChartOptions.set(\n omitChartFixedSize(this.options() as Record<string, unknown>) as unknown as AXGaugeChartOption & {\n title?: string;\n },\n );\n }\n}\n","<div class=\"axp-chart-widget-host\">\n <axp-chart-query-tabs\n [tabs]=\"queryTabs()\"\n [activeIndex]=\"activeTabIndex()\"\n (activeIndexChange)=\"selectQueryTab($event)\"\n />\n <div class=\"axp-chart-widget-host__body\">\n <div class=\"axp-chart-widget-host__chart axp-chart-widget-host__chart--radial\">\n <ax-gauge-chart [value]=\"value()\" [options]=\"gaugeChartOptions()\"></ax-gauge-chart>\n </div>\n </div>\n</div>\n","import { AXPWidgetConfig, cloneProperty } from '@acorex-platform/framework-shared/widget-core';\nimport { RootConfig } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\n\nimport {\n AXP_APPEARANCE_PROPERTY_GROUP,\n AXP_DATA_PATH_PROPERTY,\n AXP_NAME_PROPERTY,\n AXP_STYLING_PROPERTY_GROUP,\n createQueryOptionsProperty,\n} from '@acorex-platform/framework-client/layout/widgets';\nimport { AXP_CHART_QUERY_RESULT_TYPE } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { AXP_WIDGETS_CHART_CATEGORY } from '../../widget-categories.type';\nimport { AXP_CHART_GAUGE_DIMENSIONS } from '../chart-widget.dimensions';\nimport { AXP_DASHBOARD_SHARED_SUB_CHART_RADIAL } from '../../widget-subcategories.type';\n\nexport const AXPGaugeChartWidget: AXPWidgetConfig = {\n name: RootConfig.widgets.gaugeChart,\n title: '@dashboard:widgets.gauge-chart.widget-title',\n description: '@dashboard:widgets.gauge-chart.widget-description',\n categories: [AXP_WIDGETS_CHART_CATEGORY],\n subCategory: AXP_DASHBOARD_SHARED_SUB_CHART_RADIAL,\n type: 'dashboard',\n icon: 'fa-light fa-gauge',\n properties: [\n createQueryOptionsProperty({ resultType: AXP_CHART_QUERY_RESULT_TYPE.gaugeValue }),\n cloneProperty(AXP_NAME_PROPERTY, { visible: false }),\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n // ====== Chart Title ======\n {\n name: 'title',\n title: '@dashboard:widgets.gauge-chart.chart-title',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'title',\n path: 'options.title',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: 'Enter chart title',\n },\n },\n },\n visible: true,\n },\n // ====== Label Display ======\n {\n name: 'label',\n title: '@dashboard:widgets.gauge-chart.label',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'label',\n path: 'options.label',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n /* Commented out properties\n // ====== Layout & Dimensions ======\n {\n name: 'width',\n title: '@dashboard:widgets.gauge-chart.width',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: null,\n dataType: 'number',\n interface: {\n name: 'width',\n path: 'options.width',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '1-1200',\n minValue: 1,\n maxValue: 1200,\n },\n },\n },\n visible: true,\n },\n {\n name: 'height',\n title: '@dashboard:widgets.gauge-chart.height',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: 300,\n dataType: 'number',\n interface: {\n name: 'height',\n path: 'options.height',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '1-800',\n minValue: 1,\n maxValue: 800,\n },\n },\n },\n visible: true,\n },\n // ====== Gauge Configuration ======\n {\n name: 'minValue',\n title: '@dashboard:widgets.gauge-chart.min-value',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 0,\n dataType: 'number',\n interface: {\n name: 'minValue',\n path: 'options.minValue',\n type: AXPWidgetsCatalog.number,\n },\n },\n visible: true,\n },\n {\n name: 'maxValue',\n title: '@dashboard:widgets.gauge-chart.max-value',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 100,\n dataType: 'number',\n interface: {\n name: 'maxValue',\n path: 'options.maxValue',\n type: AXPWidgetsCatalog.number,\n },\n },\n visible: true,\n },\n // ====== Gauge Appearance ======\n {\n name: 'showTooltip',\n title: '@dashboard:widgets.gauge-chart.show-tooltip',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showTooltip',\n path: 'options.showTooltip',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'gaugeWidth',\n title: '@dashboard:widgets.gauge-chart.gauge-width',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 30,\n dataType: 'number',\n interface: {\n name: 'gaugeWidth',\n path: 'options.gaugeWidth',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '1-100',\n minValue: 1,\n maxValue: 100,\n },\n },\n },\n visible: true,\n },\n {\n name: 'cornerRadius',\n title: '@dashboard:widgets.gauge-chart.corner-radius',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 4,\n dataType: 'number',\n interface: {\n name: 'cornerRadius',\n path: 'options.cornerRadius',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '1-20',\n minValue: 0,\n maxValue: 20,\n },\n },\n },\n visible: true,\n },\n // ====== Animation Settings ======\n {\n name: 'animationEasing',\n title: '@dashboard:widgets.gauge-chart.animation-easing',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 'cubic-out',\n dataType: 'string',\n interface: {\n name: 'animationEasing',\n path: 'options.animationEasing',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: [\n { value: 'linear', text: 'Linear' },\n { value: 'ease', text: 'Ease' },\n { value: 'ease-in', text: 'Ease In' },\n { value: 'ease-out', text: 'Ease Out' },\n { value: 'ease-in-out', text: 'Ease In Out' },\n { value: 'cubic', text: 'Cubic' },\n { value: 'cubic-in', text: 'Cubic In' },\n { value: 'cubic-out', text: 'Cubic Out' },\n { value: 'cubic-in-out', text: 'Cubic In Out' },\n ],\n textField: 'text',\n valueField: 'value',\n },\n },\n },\n visible: true,\n },\n {\n name: 'animationDuration',\n title: '@dashboard:widgets.gauge-chart.animation-duration',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 800,\n dataType: 'number',\n interface: {\n name: 'animationDuration',\n path: 'options.animationDuration',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '0-2000',\n minValue: 0,\n maxValue: 2000,\n },\n },\n },\n visible: true,\n },\n */\n ],\n components: {\n view: {\n component: () => import('./gauge-chart-widget.component').then((c) => c.AXPGaugeChartWidgetViewComponent),\n },\n },\n meta: {\n dimensions: AXP_CHART_GAUGE_DIMENSIONS,\n },\n};\n","import { AXHeatmapChartComponent, AXHeatmapChartOption, AXHeatmapData } from '@acorex/charts/heatmap-chart';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { AXPQueryExecutor } from '@acorex-platform/framework-client/runtime';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { AXPDashboardWidgetComponent } from '../../dashboard-widget-base';\nimport { resolveChartQueryTabs } from '../chart-query-load.util';\nimport { loadHeatmapChartItems, resolveChartAxisLabels } from '../chart-widget-data.util';\nimport { AXPChartQueryTabsComponent } from '../chart-query-tabs.component';\n\n/**\n * Heatmap Chart Widget Component\n * Displays matrix-like data with color intensity based on value.\n */\n@Component({\n templateUrl: './heatmap-chart-widget.component.html',\n styleUrls: ['./heatmap-chart-widget.component.css'],\n imports: [AXHeatmapChartComponent, AXPChartQueryTabsComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPHeatmapChartWidgetViewComponent extends AXPDashboardWidgetComponent {\n //#region ----- Services & Dependencies -----\n\n private readonly queryExecutor = inject(AXPQueryExecutor);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ----- Chart state -----\n\n protected data = signal<AXHeatmapData[]>([]);\n\n /** Options passed to the chart with resolved string labels (multi-language and @i18n keys). */\n protected heatmapOptions = signal<AXHeatmapChartOption>({} as AXHeatmapChartOption);\n\n private labelResolveGeneration = 0;\n\n //#endregion\n\n //#region ----- Query tabs -----\n\n protected readonly queryTabs = computed(() =>\n resolveChartQueryTabs(this.options() as Record<string, unknown>, this.entityContext()?.entityId),\n );\n\n protected readonly activeTabIndex = signal(0);\n\n private readonly activeQuery = computed(() => {\n const tabs = this.queryTabs();\n if (tabs.length === 0) {\n return undefined;\n }\n const index = Math.min(Math.max(this.activeTabIndex(), 0), tabs.length - 1);\n return tabs[index];\n });\n\n protected selectQueryTab(index: number): void {\n this.activeTabIndex.set(index);\n }\n\n //#endregion\n\n //#region ----- Localization -----\n\n private async resolveChartText(value: unknown): Promise<string> {\n if (value == null) {\n return '';\n }\n if (typeof value === 'string') {\n return value.startsWith('@') ? this.translationService.translateAsync(value) : value;\n }\n if (\n typeof value === 'object' &&\n !Array.isArray(value) &&\n this.translationService.isValidMultiLanguageObject(value)\n ) {\n return this.translationService.resolve(value as AXPMultiLanguageString);\n }\n return String(value);\n }\n\n private readonly resolveOptionLabelsEffect = effect(() => {\n const raw = this.options() as Record<string, unknown>;\n const generation = ++this.labelResolveGeneration;\n\n void (async () => {\n const axisLabels = resolveChartAxisLabels(raw);\n const [xAxisLabel, yAxisLabel] = await Promise.all([\n this.resolveChartText(axisLabels.xAxisLabel),\n this.resolveChartText(axisLabels.yAxisLabel),\n ]);\n\n const messagesRaw = raw['messages'];\n const messages =\n messagesRaw && typeof messagesRaw === 'object' && !Array.isArray(messagesRaw)\n ? (messagesRaw as Record<string, unknown>)\n : undefined;\n\n const [noData, noDataHelp] = await Promise.all([\n this.resolveChartText(messages?.['noData']),\n this.resolveChartText(messages?.['noDataHelp']),\n ]);\n\n if (generation !== this.labelResolveGeneration) {\n return;\n }\n\n const base = raw as unknown as AXHeatmapChartOption;\n this.heatmapOptions.set({\n ...base,\n xAxisLabel,\n yAxisLabel,\n ...(messages\n ? {\n messages: {\n ...base.messages,\n ...(noData ? { noData } : {}),\n ...(noDataHelp ? { noDataHelp } : {}),\n ...(messages['noDataIcon'] ? { noDataIcon: String(messages['noDataIcon']) } : {}),\n },\n }\n : {}),\n });\n })();\n });\n\n //#endregion\n\n //#region ----- Query loading -----\n\n private readonly clampTabIndexEffect = effect(() => {\n const tabs = this.queryTabs();\n if (this.activeTabIndex() >= tabs.length) {\n this.activeTabIndex.set(0);\n }\n });\n\n private readonly dataLoadEffect = effect(async () => {\n const opts = this.options() as Record<string, unknown>;\n const active = this.activeQuery();\n const items = await loadHeatmapChartItems(opts, {\n queryExecutor: this.queryExecutor,\n queryKey: active?.query,\n queryInput: active?.queryInput,\n });\n const resolved = await Promise.all(\n items.map(async (item) => {\n const x = item.x;\n const y = item.y;\n const label = item.label;\n\n return {\n ...item,\n x: typeof x === 'number' ? x : await this.resolveChartText(x),\n y: typeof y === 'number' ? y : await this.resolveChartText(y),\n ...(label !== undefined ? { label: await this.resolveChartText(label) } : {}),\n };\n }),\n );\n\n this.data.set(resolved as AXHeatmapData[]);\n });\n\n //#endregion\n\n constructor() {\n super();\n this.setOptions({\n showXAxis: true,\n showYAxis: true,\n showTooltip: true,\n cellPadding: 0.05,\n borderRadius: 2,\n color: 'rgb(var(--ax-sys-color-primary-500))',\n animationEasing: 'cubic-out',\n animationDuration: 800,\n ...this.options(),\n });\n\n this.heatmapOptions.set(this.options() as AXHeatmapChartOption);\n }\n}\n","<div class=\"axp-chart-widget-host\">\n <axp-chart-query-tabs\n [tabs]=\"queryTabs()\"\n [activeIndex]=\"activeTabIndex()\"\n (activeIndexChange)=\"selectQueryTab($event)\"\n />\n <div class=\"axp-chart-widget-host__body\">\n <div class=\"axp-chart-widget-host__chart axp-chart-widget-host__chart--heatmap\">\n <ax-heatmap-chart [data]=\"data()\" [options]=\"heatmapOptions()\"></ax-heatmap-chart>\n </div>\n </div>\n</div>\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, cloneProperty } from '@acorex-platform/framework-shared/widget-core';\nimport { AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\n\nimport {\n AXP_APPEARANCE_PROPERTY_GROUP,\n AXP_DATA_PATH_PROPERTY,\n AXP_NAME_PROPERTY,\n createQueryOptionsProperty,\n} from '@acorex-platform/framework-client/layout/widgets';\nimport { AXP_CHART_QUERY_RESULT_TYPE } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { RootConfig } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { AXP_WIDGETS_CHART_CATEGORY } from '../../widget-categories.type';\nimport { AXP_CHART_WIDE_DIMENSIONS } from '../chart-widget.dimensions';\nimport { AXP_DASHBOARD_SHARED_SUB_CHART_SPECIALIZED } from '../../widget-subcategories.type';\n\nexport const AXPHeatmapChartWidget: AXPWidgetConfig = {\n name: RootConfig.widgets.heatmapChart,\n title: '@dashboard:widgets.heatmap-chart.widget-title',\n description: '@dashboard:widgets.heatmap-chart.widget-description',\n categories: [AXP_WIDGETS_CHART_CATEGORY],\n subCategory: AXP_DASHBOARD_SHARED_SUB_CHART_SPECIALIZED,\n groups: [AXPWidgetGroupEnum.BaseWidget],\n type: 'dashboard',\n icon: 'fa-light fa-grid-2',\n properties: [\n createQueryOptionsProperty({ resultType: AXP_CHART_QUERY_RESULT_TYPE.heatmapSeries }),\n cloneProperty(AXP_NAME_PROPERTY, { visible: false }),\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n {\n name: 'title',\n title: '@dashboard:widgets.heatmap-chart.chart-title',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'title',\n path: 'options.title',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: 'Enter chart title',\n },\n },\n },\n visible: true,\n },\n // ====== Axis Settings ======\n {\n name: 'xAxisLabel',\n title: '@dashboard:widgets.heatmap-chart.x-axis-label',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'xAxisLabel',\n path: 'options.xAxisLabel',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n {\n name: 'yAxisLabel',\n title: '@dashboard:widgets.heatmap-chart.y-axis-label',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'yAxisLabel',\n path: 'options.yAxisLabel',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () => import('./heatmap-chart-widget.component').then((c) => c.AXPHeatmapChartWidgetViewComponent),\n },\n },\n meta: {\n dimensions: AXP_CHART_WIDE_DIMENSIONS,\n },\n};\n","import { AXChartLegendComponent } from '@acorex/charts/chart-legend';\nimport {\n AXLineChartComponent,\n AXLineChartData,\n AXLineChartOption,\n AXLineChartPointClickEvent,\n} from '@acorex/charts/line-chart';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { AXPQueryExecutor } from '@acorex-platform/framework-client/runtime';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { AXPDashboardWidgetComponent } from '../../dashboard-widget-base';\nimport { resolveChartQueryTabs } from '../chart-query-load.util';\nimport { loadLineChartSeries, resolveChartAxisLabels } from '../chart-widget-data.util';\nimport { AXPChartQueryTabsComponent } from '../chart-query-tabs.component';\nimport { AXP_CHART_LEGEND_OPTIONS_SERIES, omitChartFixedSize } from '../chart-legend.util';\n\n/**\n * Line Chart Widget Component\n * Renders data as lines with interactive hover effects and animations\n */\n@Component({\n templateUrl: './line-chart-widget.component.html',\n styleUrls: ['./line-chart-widget.component.css'],\n standalone: true,\n imports: [AXLineChartComponent, AXChartLegendComponent, AXPChartQueryTabsComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPLineChartWidgetViewComponent extends AXPDashboardWidgetComponent {\n //#region ----- Services & Dependencies -----\n\n private readonly queryExecutor = inject(AXPQueryExecutor);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ----- Chart state -----\n\n protected data = signal<AXLineChartData[]>([]);\n\n /** Options passed to the chart with resolved string labels (multi-language and @i18n keys). */\n protected lineChartOptions = signal<AXLineChartOption & { title: string }>(\n {} as AXLineChartOption & { title: string },\n );\n\n protected readonly legendOptions = AXP_CHART_LEGEND_OPTIONS_SERIES;\n\n private labelResolveGeneration = 0;\n\n //#endregion\n\n //#region ----- Localization -----\n\n private async resolveChartOptionLabel(value: unknown): Promise<string> {\n if (value != null && typeof value === 'object' && !Array.isArray(value)) {\n return this.translationService.resolve(value as AXPMultiLanguageString);\n }\n const s = String(value ?? '');\n if (s.startsWith('@')) {\n return this.translationService.translateAsync(s);\n }\n return s;\n }\n\n /**\n * Resolves series labels from plain text, @i18n keys, or multi-language maps.\n */\n private async resolveLocalizedChartText(value: unknown): Promise<string> {\n if (value == null) {\n return '';\n }\n if (typeof value === 'string') {\n if (value.startsWith('@')) {\n return this.translationService.translateAsync(value);\n }\n return value;\n }\n if (\n typeof value === 'object' &&\n !Array.isArray(value) &&\n this.translationService.isValidMultiLanguageObject(value)\n ) {\n return this.translationService.resolve(value as AXPMultiLanguageString);\n }\n return String(value);\n }\n\n private readonly resolveChartLabelKeysEffect = effect(() => {\n const raw = this.options() as Record<string, unknown>;\n const generation = ++this.labelResolveGeneration;\n const axisLabels = resolveChartAxisLabels(raw);\n void Promise.all([\n this.resolveChartOptionLabel(raw['title']),\n this.resolveChartOptionLabel(axisLabels.xAxisLabel),\n this.resolveChartOptionLabel(axisLabels.yAxisLabel),\n ]).then(([title, xAxisLabel, yAxisLabel]) => {\n if (generation !== this.labelResolveGeneration) {\n return;\n }\n const base = omitChartFixedSize(raw) as unknown as AXLineChartOption & { title: string };\n this.lineChartOptions.set({\n ...base,\n title,\n xAxisLabel,\n yAxisLabel,\n });\n });\n });\n\n //#endregion\n\n //#region ----- Query tabs -----\n\n protected readonly queryTabs = computed(() =>\n resolveChartQueryTabs(this.options() as Record<string, unknown>, this.entityContext()?.entityId),\n );\n\n protected readonly activeTabIndex = signal(0);\n\n private readonly activeQuery = computed(() => {\n const tabs = this.queryTabs();\n if (tabs.length === 0) {\n return undefined;\n }\n const index = Math.min(Math.max(this.activeTabIndex(), 0), tabs.length - 1);\n return tabs[index];\n });\n\n protected selectQueryTab(index: number): void {\n this.activeTabIndex.set(index);\n }\n\n private readonly clampTabIndexEffect = effect(() => {\n const tabs = this.queryTabs();\n if (this.activeTabIndex() >= tabs.length) {\n this.activeTabIndex.set(0);\n }\n });\n\n //#endregion\n\n //#region ----- Query loading -----\n\n private readonly dataLoadEffect = effect(async () => {\n const opts = this.options() as Record<string, unknown>;\n const active = this.activeQuery();\n const series = await loadLineChartSeries(opts, {\n queryExecutor: this.queryExecutor,\n queryKey: active?.query,\n queryInput: active?.queryInput,\n });\n const resolved = await Promise.all(\n series.map(async (s) => ({\n ...s,\n label: await this.resolveLocalizedChartText(s.label),\n })),\n );\n this.data.set(resolved as AXLineChartData[]);\n });\n\n //#endregion\n\n constructor() {\n super();\n this.setOptions({\n showXAxis: true,\n showYAxis: true,\n yAxisStartsAtZero: true,\n showGrid: true,\n showVerticalGrid: true,\n lineWidth: 2,\n smoothLine: true,\n showPoints: true,\n pointRadius: 4,\n fillOpacity: 80,\n showTooltip: true,\n showCrosshair: true,\n animationEasing: 'cubic-out',\n animationDuration: 800,\n ...omitChartFixedSize(this.options() as Record<string, unknown>),\n });\n this.lineChartOptions.set(\n omitChartFixedSize(this.options() as Record<string, unknown>) as unknown as AXLineChartOption & {\n title: string;\n },\n );\n }\n\n handleLineChartPointClick(_event: AXLineChartPointClickEvent) {\n // reserved for future drill-down\n }\n}\n","<div class=\"axp-chart-widget-host\">\n <axp-chart-query-tabs [tabs]=\"queryTabs()\" [activeIndex]=\"activeTabIndex()\" (activeIndexChange)=\"selectQueryTab($event)\" />\n <div class=\"axp-chart-widget-host__body axp-chart-widget-host__body--with-legend\">\n <div class=\"axp-chart-widget-host__chart\">\n <ax-line-chart #chart (pointClick)=\"handleLineChartPointClick($event)\" [data]=\"data()\" [options]=\"lineChartOptions()\"></ax-line-chart>\n </div>\n <!-- ----- Series indicator (legend) ----- -->\n @if (data().length > 1) {\n <div class=\"axp-chart-widget-host__legend\">\n <ax-chart-legend [chart]=\"chart\" [options]=\"legendOptions\"></ax-chart-legend>\n </div>\n }\n </div>\n</div>\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, cloneProperty } from '@acorex-platform/framework-shared/widget-core';\nimport { RootConfig } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\n\nimport {\n AXP_APPEARANCE_PROPERTY_GROUP,\n AXP_DATA_PATH_PROPERTY,\n AXP_NAME_PROPERTY,\n AXP_STYLING_PROPERTY_GROUP,\n createQueryOptionsProperty,\n} from '@acorex-platform/framework-client/layout/widgets';\nimport { AXP_CHART_QUERY_RESULT_TYPE } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { AXP_WIDGETS_CHART_CATEGORY } from '../../widget-categories.type';\nimport { AXP_CHART_WIDE_DIMENSIONS } from '../chart-widget.dimensions';\nimport { AXP_DASHBOARD_SHARED_SUB_CHART_CARTESIAN } from '../../widget-subcategories.type';\n\nexport const AXPLineChartWidget: AXPWidgetConfig = {\n name: RootConfig.widgets.lineChart,\n title: '@dashboard:widgets.line-chart.widget-title',\n description: '@dashboard:widgets.line-chart.widget-description',\n categories: [AXP_WIDGETS_CHART_CATEGORY],\n subCategory: AXP_DASHBOARD_SHARED_SUB_CHART_CARTESIAN,\n groups: [AXPWidgetGroupEnum.BaseWidget],\n type: 'dashboard',\n icon: 'fa-light fa-chart-line',\n properties: [\n createQueryOptionsProperty({ resultType: AXP_CHART_QUERY_RESULT_TYPE.lineSeries }),\n cloneProperty(AXP_NAME_PROPERTY, { visible: false }),\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n // ====== Chart Title ======\n {\n name: 'title',\n title: '@dashboard:widgets.line-chart.chart-title',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'title',\n path: 'options.title',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: 'Enter chart title',\n },\n },\n },\n visible: true,\n },\n // ====== Axis Settings ======\n {\n name: 'xAxisLabel',\n title: '@dashboard:widgets.line-chart.x-axis-label',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'xAxisLabel',\n path: 'options.xAxisLabel',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n {\n name: 'yAxisLabel',\n title: '@dashboard:widgets.line-chart.y-axis-label',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'yAxisLabel',\n path: 'options.yAxisLabel',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n {\n name: 'fillArea',\n title: '@dashboard:widgets.line-chart.fill-area',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: false,\n dataType: 'boolean',\n interface: {\n name: 'fillArea',\n path: 'options.fillArea',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n /* Commented out properties\n // ====== Layout & Dimensions ======\n {\n name: 'width',\n title: '@dashboard:widgets.line-chart.width',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: null,\n dataType: 'number',\n interface: {\n name: 'width',\n path: 'options.width',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 0,\n maxValue: 1200,\n },\n },\n },\n visible: true,\n },\n {\n name: 'height',\n title: '@dashboard:widgets.line-chart.height',\n group: AXP_STYLING_PROPERTY_GROUP,\n schema: {\n defaultValue: 300,\n dataType: 'number',\n interface: {\n name: 'height',\n path: 'options.height',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 0,\n maxValue: 800,\n },\n },\n },\n visible: true,\n },\n\n // ====== Axis Settings ======\n {\n name: 'showXAxis',\n title: '@dashboard:widgets.line-chart.show-x-axis',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showXAxis',\n path: 'options.showXAxis',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'showYAxis',\n title: '@dashboard:widgets.line-chart.show-y-axis',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showYAxis',\n path: 'options.showYAxis',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'yAxisStartsAtZero',\n title: '@dashboard:widgets.line-chart.y-axis-starts-at-zero',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'yAxisStartsAtZero',\n path: 'options.yAxisStartsAtZero',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n\n {\n name: 'showGrid',\n title: '@dashboard:widgets.line-chart.show-grid',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showGrid',\n path: 'options.showGrid',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'showVerticalGrid',\n title: '@dashboard:widgets.line-chart.show-vertical-grid',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showVerticalGrid',\n path: 'options.showVerticalGrid',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n\n // ====== Line Appearance ======\n {\n name: 'lineWidth',\n title: '@dashboard:widgets.line-chart.line-width',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 2,\n dataType: 'number',\n interface: {\n name: 'lineWidth',\n path: 'options.lineWidth',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '1-10',\n minValue: 1,\n maxValue: 10,\n },\n },\n },\n visible: true,\n },\n {\n name: 'smoothLine',\n title: '@dashboard:widgets.line-chart.smooth-line',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'smoothLine',\n path: 'options.smoothLine',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'showPoints',\n title: '@dashboard:widgets.line-chart.show-points',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showPoints',\n path: 'options.showPoints',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'pointRadius',\n title: '@dashboard:widgets.line-chart.point-radius',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 4,\n dataType: 'number',\n interface: {\n name: 'pointRadius',\n path: 'options.pointRadius',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '1-10',\n minValue: 1,\n maxValue: 10,\n },\n },\n },\n visible: true,\n },\n {\n name: 'fillOpacity',\n title: '@dashboard:widgets.line-chart.fill-opacity',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 80,\n dataType: 'number',\n interface: {\n name: 'fillOpacity',\n path: 'options.fillOpacity',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '1-100',\n minValue: 1,\n maxValue: 100,\n },\n },\n },\n visible: true,\n },\n\n // ====== Tooltip Settings ======\n {\n name: 'showTooltip',\n title: '@dashboard:widgets.line-chart.show-tooltip',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showTooltip',\n path: 'options.showTooltip',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n {\n name: 'showCrosshair',\n title: '@dashboard:widgets.line-chart.show-crosshair',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: true,\n dataType: 'boolean',\n interface: {\n name: 'showCrosshair',\n path: 'options.showCrosshair',\n type: AXPWidgetsCatalog.toggle,\n },\n },\n visible: true,\n },\n\n // ====== Animation Settings ======\n {\n name: 'animationEasing',\n title: '@dashboard:widgets.line-chart.animation-easing',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 'cubic-out',\n dataType: 'string',\n interface: {\n name: 'animationEasing',\n path: 'options.animationEasing',\n type: AXPWidgetsCatalog.select,\n options: {\n dataSource: [\n { value: 'linear', text: 'Linear' },\n { value: 'ease', text: 'Ease' },\n { value: 'ease-in', text: 'Ease In' },\n { value: 'ease-out', text: 'Ease Out' },\n { value: 'ease-in-out', text: 'Ease In Out' },\n { value: 'cubic', text: 'Cubic' },\n { value: 'cubic-in', text: 'Cubic In' },\n { value: 'cubic-out', text: 'Cubic Out' },\n { value: 'cubic-in-out', text: 'Cubic In Out' },\n ],\n textField: 'text',\n valueField: 'value',\n },\n },\n },\n visible: true,\n },\n {\n name: 'animationDuration',\n title: '@dashboard:widgets.line-chart.animation-duration',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 800,\n dataType: 'number',\n interface: {\n name: 'animationDuration',\n path: 'options.animationDuration',\n type: AXPWidgetsCatalog.number,\n options: {\n placeholder: '0-2000',\n minValue: 0,\n maxValue: 2000,\n },\n },\n },\n visible: true,\n },\n */\n ],\n components: {\n view: {\n component: () => import('./line-chart-widget.component').then((c) => c.AXPLineChartWidgetViewComponent),\n },\n },\n meta: {\n dimensions: AXP_CHART_WIDE_DIMENSIONS,\n },\n};\n","export type AXPShortcutLayoutVariant = 'compact' | 'standard' | 'wide' | 'hero' | 'mobile';\n\nexport type AXPShortcutBackgroundStyle = 'gradient' | 'pattern' | 'illustrative';\n\nexport interface AXPShortcutAccentTheme {\n accent: string;\n hue: number;\n background: string;\n backgroundStyle: AXPShortcutBackgroundStyle;\n}\n\nexport interface AXPShortcutAccentParts {\n hex: string;\n hue: number;\n saturation: number;\n lightness: number;\n}\n\nexport function generateShortcutAccent(): AXPShortcutAccentParts {\n const hue = Math.floor(Math.random() * 360);\n const saturation = Math.floor(Math.random() * 14) + 72;\n const lightness = Math.floor(Math.random() * 8) + 50;\n const { r, g, b } = hslToRgb(hue, saturation / 100, lightness / 100);\n const toHex = (value: number) => value.toString(16).padStart(2, '0');\n\n return {\n hex: `#${toHex(r)}${toHex(g)}${toHex(b)}`,\n hue,\n saturation,\n lightness,\n };\n}\n\nexport function parseColorToHue(color: string | undefined | null): number | null {\n if (!color) {\n return null;\n }\n\n const trimmed = color.trim();\n\n if (trimmed.startsWith('#')) {\n return parseHexToHue(trimmed);\n }\n\n if (/^[0-9a-f]{3,8}$/i.test(trimmed)) {\n return parseHexToHue(`#${trimmed}`);\n }\n\n const hslMatch = trimmed.match(/^hsla?\\(\\s*([\\d.]+)(?:deg)?\\s+([\\d.]+)%\\s+([\\d.]+)%/i)\n ?? trimmed.match(/^hsla?\\(\\s*([\\d.]+)(?:deg)?\\s*,\\s*([\\d.]+)%\\s*,\\s*([\\d.]+)%/i);\n if (hslMatch) {\n return Math.round(Number(hslMatch[1]));\n }\n\n const rgbMatch = trimmed.match(/^rgba?\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)/i);\n if (rgbMatch) {\n return rgbToHue(Number(rgbMatch[1]), Number(rgbMatch[2]), Number(rgbMatch[3]));\n }\n\n return null;\n}\n\nexport function buildShortcutAccentTheme(\n color: string | undefined | null,\n colorHue: number | undefined | null,\n backgroundStyle?: AXPShortcutBackgroundStyle | null,\n): AXPShortcutAccentTheme {\n const parsedHue = parseColorToHue(color);\n const hue = normalizeHue(parsedHue ?? colorHue);\n const accent = normalizeAccentColor(color, hue);\n const style = backgroundStyle ?? pickBackgroundStyle(hue);\n\n return {\n accent,\n hue,\n background: buildShortcutBackground(hue, style),\n backgroundStyle: style,\n };\n}\n\n/** Pastel card background derived from accent hue (high saturation, high lightness). */\nexport function buildShortcutBackground(hue: number, style: AXPShortcutBackgroundStyle): string {\n const h = normalizeHue(hue);\n const gradient = `linear-gradient(135deg, hsl(${h}, 84%, 90%) 0%, hsl(${h}, 72%, 94%) 52%, hsl(${h}, 58%, 97%) 100%)`;\n\n if (style === 'pattern') {\n const { r, g, b } = hslToRgb(h, 0.72, 0.74);\n const dot = `rgba(${r}, ${g}, ${b}, 0.22)`;\n return `radial-gradient(circle at 1px 1px, ${dot} 0.75px, transparent 0), ${gradient}`;\n }\n\n return gradient;\n}\n\nexport function resolveShortcutLayoutVariant(width: number, height: number): AXPShortcutLayoutVariant {\n if (width <= 0 || height <= 0) {\n return 'standard';\n }\n\n const aspect = width / height;\n\n if (height <= 88 || (width < 480 && height <= 120)) {\n return 'mobile';\n }\n\n if (width >= 480 && height >= 200 && (width >= 520 || width * height >= 120_000)) {\n return 'hero';\n }\n\n if (width >= 360 && aspect >= 1.35) {\n return 'wide';\n }\n\n if (width < 260 && height < 200) {\n return 'compact';\n }\n\n return 'standard';\n}\n\nexport function shouldShowShortcutDescription(\n width: number,\n height: number,\n variant: AXPShortcutLayoutVariant,\n): boolean {\n if (variant === 'mobile' || variant === 'compact') {\n return false;\n }\n\n if (variant === 'hero' || variant === 'wide') {\n return true;\n }\n\n return height >= 156 && width >= 240;\n}\n\nfunction normalizeHue(hue: number | null | undefined): number {\n if (hue == null || Number.isNaN(hue)) {\n return 220;\n }\n\n return ((Math.round(hue) % 360) + 360) % 360;\n}\n\nfunction normalizeAccentColor(color: string | undefined | null, fallbackHue: number): string {\n if (!color?.trim()) {\n return hslToHex(fallbackHue, 72, 52);\n }\n\n const trimmed = color.trim();\n\n if (trimmed.startsWith('#') || /^[0-9a-f]{3,8}$/i.test(trimmed)) {\n const hex = trimmed.startsWith('#') ? trimmed : `#${trimmed}`;\n const parts = parseHexToHslParts(hex);\n if (!parts || parts.saturation < 20) {\n return hslToHex(fallbackHue, 72, 52);\n }\n return hex;\n }\n\n const rgbMatch = trimmed.match(/^rgba?\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)/i);\n if (rgbMatch) {\n return rgbToHex(Number(rgbMatch[1]), Number(rgbMatch[2]), Number(rgbMatch[3]));\n }\n\n const hslMatch = trimmed.match(/^hsla?\\(\\s*([\\d.]+)(?:deg)?\\s+([\\d.]+)%\\s+([\\d.]+)%/i)\n ?? trimmed.match(/^hsla?\\(\\s*([\\d.]+)(?:deg)?\\s*,\\s*([\\d.]+)%\\s*,\\s*([\\d.]+)%/i);\n if (hslMatch) {\n return hslToHex(Number(hslMatch[1]), Number(hslMatch[2]), Number(hslMatch[3]));\n }\n\n const parsedHue = parseColorToHue(trimmed);\n if (parsedHue == null) {\n return trimmed;\n }\n\n return hslToHex(parsedHue, 72, 52);\n}\n\nfunction hslToHex(h: number, s: number, l: number): string {\n const { r, g, b } = hslToRgb(h, s / 100, l / 100);\n const toHex = (value: number) => value.toString(16).padStart(2, '0');\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n}\n\nfunction pickBackgroundStyle(hue: number): AXPShortcutBackgroundStyle {\n const styles: AXPShortcutBackgroundStyle[] = ['gradient', 'pattern', 'illustrative'];\n return styles[hue % styles.length];\n}\n\nfunction parseHexToHue(hex: string): number | null {\n return parseHexToHslParts(hex)?.hue ?? null;\n}\n\nfunction parseHexToHslParts(hex: string): { hue: number; saturation: number; lightness: number } | null {\n const normalized = hex.trim().replace('#', '');\n if (normalized.length !== 3 && normalized.length !== 6) {\n return null;\n }\n\n const expanded = normalized.length === 3\n ? normalized.split('').map((char) => char + char).join('')\n : normalized;\n\n return rgbToHslParts(\n parseInt(expanded.slice(0, 2), 16),\n parseInt(expanded.slice(2, 4), 16),\n parseInt(expanded.slice(4, 6), 16),\n );\n}\n\nfunction rgbToHue(r: number, g: number, b: number): number {\n return rgbToHslParts(r, g, b).hue;\n}\n\nfunction rgbToHex(r: number, g: number, b: number): string {\n const toHex = (value: number) =>\n Math.round(Math.min(255, Math.max(0, value))).toString(16).padStart(2, '0');\n\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n}\n\nfunction rgbToHslParts(r: number, g: number, b: number): { hue: number; saturation: number; lightness: number } {\n const rn = r / 255;\n const gn = g / 255;\n const bn = b / 255;\n const max = Math.max(rn, gn, bn);\n const min = Math.min(rn, gn, bn);\n const delta = max - min;\n const lightness = (max + min) / 2;\n\n if (delta === 0) {\n return { hue: 0, saturation: 0, lightness: Math.round(lightness * 100) };\n }\n\n const saturation = delta / (1 - Math.abs(2 * lightness - 1));\n let hue = 0;\n\n if (max === rn) {\n hue = ((gn - bn) / delta) % 6;\n } else if (max === gn) {\n hue = (bn - rn) / delta + 2;\n } else {\n hue = (rn - gn) / delta + 4;\n }\n\n hue = Math.round(hue * 60);\n if (hue < 0) {\n hue += 360;\n }\n\n return {\n hue,\n saturation: Math.round(saturation * 100),\n lightness: Math.round(lightness * 100),\n };\n}\n\nfunction hslToRgb(h: number, s: number, l: number): { r: number; g: number; b: number } {\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs((h / 60) % 2 - 1));\n const m = l - c / 2;\n let r = 0;\n let g = 0;\n let b = 0;\n\n if (h < 60) [r, g, b] = [c, x, 0];\n else if (h < 120) [r, g, b] = [x, c, 0];\n else if (h < 180) [r, g, b] = [0, c, x];\n else if (h < 240) [r, g, b] = [0, x, c];\n else if (h < 300) [r, g, b] = [x, 0, c];\n else [r, g, b] = [c, 0, x];\n\n return {\n r: Math.round((r + m) * 255),\n g: Math.round((g + m) * 255),\n b: Math.round((b + m) * 255),\n };\n}\n","//#region ----- Imports -----\n\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { AXPQueryExecutor } from '@acorex-platform/framework-client/runtime';\n\nimport { fetchChartQueryResult, resolveChartQueryTabs } from '../chart/chart-query-load.util';\nimport {\n type AXPShortcutAccentTheme,\n buildShortcutAccentTheme,\n} from '../utility/shortcut/shortcut-widget.utils';\nimport { AXPKpiIconTone, AXPKpiTextValueFormat } from './kpi-widget.types';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport type AXPKpiQueryLoadState = 'idle' | 'loading' | 'ready' | 'error';\n\n//#endregion\n\n//#region ----- Query helpers -----\n\nexport function hasKpiQueryConfigured(opts: Record<string, unknown>): boolean {\n return resolveChartQueryTabs(opts).length > 0;\n}\n\n/** Prefer / ensure QuerySnapshot when a policy exists (miss writes a ready row). */\nconst KPI_QUERY_EXECUTE_OPTIONS = { snapshot: true as const };\n\nexport async function loadKpiQueryResult<T>(\n queryExecutor: AXPQueryExecutor,\n queryKey: string,\n queryInput: Record<string, unknown> | undefined,\n): Promise<T | undefined> {\n return fetchChartQueryResult<T>(\n queryExecutor,\n queryKey,\n queryInput,\n KPI_QUERY_EXECUTE_OPTIONS,\n );\n}\n\n//#endregion\n\n//#region ----- Text & value formatting -----\n\nexport async function resolveKpiText(\n translationService: AXTranslationService,\n value: unknown,\n): Promise<string> {\n if (value == null) {\n return '';\n }\n if (typeof value === 'string') {\n return value.startsWith('@') ? translationService.translateAsync(value) : value;\n }\n if (\n typeof value === 'object' &&\n !Array.isArray(value) &&\n translationService.isValidMultiLanguageObject(value)\n ) {\n return translationService.resolve(value as AXPMultiLanguageString);\n }\n return String(value);\n}\n\nexport function formatKpiValue(\n formatService: AXFormatService,\n value: unknown,\n format?: AXPKpiTextValueFormat,\n): string {\n if (value == null || value === '') {\n return '';\n }\n if (typeof value === 'string') {\n return value;\n }\n if (typeof value !== 'number' || !format?.style) {\n return String(value);\n }\n\n const fractionOpts = {\n minimumFractionDigits: format.minimumFractionDigits,\n maximumFractionDigits: format.maximumFractionDigits,\n };\n\n switch (format.style) {\n case 'decimal':\n return String(formatService.format(value, 'number', fractionOpts));\n case 'currency':\n return String(\n formatService.format(value, 'currency', {\n ...fractionOpts,\n currency: format.currency,\n }),\n );\n case 'percent':\n return String(formatService.format(value / 100, 'percent', fractionOpts));\n default:\n return String(value);\n }\n}\n\nexport function normalizeKpiPercent(value: number): number {\n if (!Number.isFinite(value)) {\n return 0;\n }\n return Math.max(0, Math.min(100, value));\n}\n\n/** Maps progress percent to a bar tone for visual feedback. */\nexport function resolveKpiProgressBarTone(percent: number): 'success' | 'primary' | 'warning' | 'danger' {\n if (percent >= 85) {\n return 'success';\n }\n if (percent >= 55) {\n return 'primary';\n }\n if (percent >= 30) {\n return 'warning';\n }\n return 'danger';\n}\n\nconst KPI_ICON_TONE_HUES: Record<AXPKpiIconTone, number> = {\n primary: 234,\n secondary: 215,\n success: 142,\n warning: 38,\n info: 199,\n danger: 4,\n};\n\n/** Accent gradient + color for KPI icon tones (shortcut-widget visual language). */\nexport function resolveKpiIconToneTheme(tone: AXPKpiIconTone): AXPShortcutAccentTheme {\n const hue = KPI_ICON_TONE_HUES[tone] ?? KPI_ICON_TONE_HUES.primary;\n return buildShortcutAccentTheme(null, hue, 'pattern');\n}\n\n/** KPI value color — same hue as the icon accent (avoids theme semantic tokens diverging from icon tone). */\nexport function resolveKpiIconToneValueColor(tone: AXPKpiIconTone): string {\n return resolveKpiIconToneTheme(tone).accent;\n}\n\nexport function resolveKpiSegmentPaletteColor(index: number): string {\n const palette = [\n 'rgb(var(--ax-sys-color-primary-500))',\n 'rgb(var(--ax-sys-color-warning-500))',\n 'rgb(var(--ax-sys-color-success-500))',\n 'rgb(var(--ax-sys-color-accent2-500))',\n 'rgb(var(--ax-sys-color-danger-500))',\n ];\n return palette[index % palette.length];\n}\n\n//#endregion\n\n//#region ----- Grid size (dashboard layout) -----\n\nexport {\n DASHBOARD_WIDGET_GRID_HEIGHT_OPTION as AXP_KPI_GRID_HEIGHT_OPTION,\n DASHBOARD_WIDGET_GRID_WIDTH_OPTION as AXP_KPI_GRID_WIDTH_OPTION,\n formatDashboardGridSizeToken as formatKpiGridSizeToken,\n readDashboardGridSizeToken as readKpiGridSizeToken,\n} from '../../dashboard-dimensions.util';\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPQueryExecutor } from '@acorex-platform/framework-client/runtime';\nimport type { AXPKpiProgressQueryResult } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { AXPDashboardWidgetComponent } from '../../dashboard-widget-base';\nimport { resolveChartQueryTabs } from '../../chart/chart-query-load.util';\nimport { AXPChartQueryTabsComponent } from '../../chart/chart-query-tabs.component';\nimport { AXPKpiProgressData } from '../kpi-widget.types';\nimport {\n formatKpiValue,\n hasKpiQueryConfigured,\n loadKpiQueryResult,\n normalizeKpiPercent,\n resolveKpiProgressBarTone,\n resolveKpiText,\n type AXPKpiQueryLoadState,\n} from '../kpi-widget.util';\n\n//#endregion\n\n@Component({\n templateUrl: './kpi-progress-widget.component.html',\n styleUrls: ['./kpi-progress-widget.component.css'],\n imports: [CommonModule, AXPChartQueryTabsComponent, AXLoadingModule, AXTranslationModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPKpiProgressWidgetViewComponent extends AXPDashboardWidgetComponent {\n //#region ----- Services & Dependencies -----\n\n private readonly queryExecutor = inject(AXPQueryExecutor);\n private readonly translationService = inject(AXTranslationService);\n private readonly formatService = inject(AXFormatService);\n\n //#endregion\n\n //#region ----- State Signals -----\n\n protected readonly model = signal<AXPKpiProgressData>({\n title: 'KPI',\n value: 0,\n subtitle: '',\n targetValue: '',\n progressPercent: 0,\n });\n\n protected readonly localized = signal({\n title: 'KPI',\n valuePrefix: '',\n valueSuffix: '',\n subtitle: '',\n targetValue: '',\n });\n\n protected readonly queryLoadState = signal<AXPKpiQueryLoadState>('idle');\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly progressPercent = computed(() => {\n const model = this.model();\n if (typeof model.progressPercent === 'number') {\n return normalizeKpiPercent(model.progressPercent);\n }\n\n const progressValue = model.progressValue ?? (typeof model.value === 'number' ? model.value : 0);\n const targetValue = Number(model.targetValue);\n if (!targetValue || Number.isNaN(targetValue)) {\n return 0;\n }\n return normalizeKpiPercent((progressValue / targetValue) * 100);\n });\n\n protected readonly progressBarTone = computed(() => resolveKpiProgressBarTone(this.progressPercent()));\n\n protected readonly progressBarFillClasses = computed(() => ({\n 'axp-kpi-progress__bar-fill': true,\n [`axp-kpi-progress__bar-fill--${this.progressBarTone()}`]: true,\n }));\n\n protected readonly formattedValue = computed(() =>\n formatKpiValue(this.formatService, this.model().value, this.model().format),\n );\n\n protected readonly formattedProgressPercent = computed(() =>\n formatKpiValue(this.formatService, this.progressPercent(), { style: 'decimal', maximumFractionDigits: 0 }),\n );\n\n protected readonly showQueryLoading = computed(\n () => this.queryLoadState() === 'loading' && hasKpiQueryConfigured(this.options() as Record<string, unknown>),\n );\n\n protected readonly showQueryError = computed(\n () => this.queryLoadState() === 'error' && hasKpiQueryConfigured(this.options() as Record<string, unknown>),\n );\n\n //#endregion\n\n //#region ----- Query tabs -----\n\n protected readonly queryTabs = computed(() =>\n resolveChartQueryTabs(this.options() as Record<string, unknown>, this.entityContext()?.entityId),\n );\n\n protected readonly activeTabIndex = signal(0);\n\n private readonly activeQuery = computed(() => {\n const tabs = this.queryTabs();\n if (tabs.length === 0) {\n return undefined;\n }\n const index = Math.min(Math.max(this.activeTabIndex(), 0), tabs.length - 1);\n return tabs[index];\n });\n\n protected selectQueryTab(index: number): void {\n this.activeTabIndex.set(index);\n }\n\n //#endregion\n\n //#region ----- Effects -----\n\n private readonly optionsEffect = effect(() => {\n const raw = this.options() as AXPKpiProgressData;\n this.model.update((current) => ({ ...current, ...raw }));\n if (!hasKpiQueryConfigured(this.options() as Record<string, unknown>)) {\n this.queryLoadState.set('idle');\n }\n });\n\n private readonly localizationEffect = effect(() => {\n const model = this.model();\n void Promise.all([\n resolveKpiText(this.translationService, model.title),\n resolveKpiText(this.translationService, model.valuePrefix),\n resolveKpiText(this.translationService, model.valueSuffix),\n resolveKpiText(this.translationService, model.subtitle),\n resolveKpiText(this.translationService, model.targetValue),\n ]).then(([title, valuePrefix, valueSuffix, subtitle, targetValue]) => {\n this.localized.set({\n title,\n valuePrefix,\n valueSuffix,\n subtitle,\n targetValue,\n });\n });\n });\n\n private readonly clampTabIndexEffect = effect(() => {\n const tabs = this.queryTabs();\n if (this.activeTabIndex() >= tabs.length) {\n this.activeTabIndex.set(0);\n }\n });\n\n private readonly dataLoadEffect = effect(async () => {\n const active = this.activeQuery();\n if (!active?.query) {\n return;\n }\n\n this.queryLoadState.set('loading');\n const payload = await loadKpiQueryResult<AXPKpiProgressQueryResult>(\n this.queryExecutor,\n active.query,\n active.queryInput,\n );\n if (!payload) {\n this.queryLoadState.set('error');\n return;\n }\n this.model.update((current) => ({ ...current, ...payload }));\n this.queryLoadState.set('ready');\n });\n\n //#endregion\n}\n","<div class=\"axp-chart-widget-host flex flex-col h-full min-h-0\">\n <axp-chart-query-tabs\n [tabs]=\"queryTabs()\"\n [activeIndex]=\"activeTabIndex()\"\n (activeIndexChange)=\"selectQueryTab($event)\"\n />\n <div class=\"axp-chart-widget-host__body flex-1 min-h-0\">\n <div\n class=\"axp-kpi-progress axp-kpi-widget-card axp-kpi-widget-card--progress\"\n [attr.data-grid-size]=\"gridSizeToken()\"\n >\n <!-- ----- Loading overlay while query data is fetched ----- -->\n @if (showQueryLoading()) {\n <div class=\"axp-kpi-widget-card__loading\" aria-busy=\"true\">\n <ax-loading></ax-loading>\n </div>\n }\n <div class=\"axp-kpi-widget-card__body\">\n <div class=\"axp-kpi-progress__header\">\n <div class=\"axp-kpi-widget-card__title\">{{ localized().title }}</div>\n <div class=\"axp-kpi-progress__badge\">{{ formattedProgressPercent() }}%</div>\n </div>\n\n <div class=\"axp-kpi-progress__main\">\n <div class=\"axp-kpi-progress__value-block\">\n <div class=\"axp-kpi-progress__value-row\">\n <div class=\"axp-kpi-progress__value\">\n {{ localized().valuePrefix }}{{ formattedValue() }}{{ localized().valueSuffix }}\n </div>\n @if (localized().targetValue) {\n <div class=\"axp-kpi-progress__target-wrap\">\n <span class=\"axp-kpi-progress__target-label\">\n {{ '@dashboard:widgets.kpi-progress.target-label' | translate | async }}\n </span>\n <span class=\"axp-kpi-progress__target\">{{ localized().targetValue }}</span>\n </div>\n }\n </div>\n @if (localized().subtitle) {\n <div class=\"axp-kpi-progress__subtitle\">{{ localized().subtitle }}</div>\n }\n </div>\n\n <div\n [class]=\"'axp-kpi-progress__ring axp-kpi-progress__ring--' + progressBarTone()\"\n [style.--kpi-ring-progress]=\"progressPercent()\"\n role=\"img\"\n [attr.aria-label]=\"formattedProgressPercent() + '% complete'\"\n >\n <div class=\"axp-kpi-progress__ring-track\" aria-hidden=\"true\"></div>\n <div class=\"axp-kpi-progress__ring-fill\" aria-hidden=\"true\"></div>\n <span class=\"axp-kpi-progress__ring-label\">{{ formattedProgressPercent() }}%</span>\n </div>\n </div>\n\n <div class=\"axp-kpi-progress__bar-wrap\">\n <div\n class=\"axp-kpi-progress__bar-track\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"progressPercent()\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n >\n <div [class]=\"progressBarFillClasses()\" [style.width.%]=\"progressPercent()\"></div>\n </div>\n </div>\n\n <!-- ----- Query error hint ----- -->\n @if (showQueryError()) {\n <p class=\"axp-kpi-widget-card__error\">\n {{ '@dashboard:widgets.kpi-shared.query-error' | translate | async }}\n </p>\n }\n </div>\n </div>\n </div>\n</div>\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, cloneProperty } from '@acorex-platform/framework-shared/widget-core';\nimport { RootConfig } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\n\nimport {\n AXP_APPEARANCE_PROPERTY_GROUP,\n AXP_DATA_PATH_PROPERTY,\n AXP_NAME_PROPERTY,\n createQueryOptionsProperty,\n} from '@acorex-platform/framework-client/layout/widgets';\nimport { AXP_CHART_QUERY_RESULT_TYPE } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { AXP_WIDGETS_CHART_CATEGORY } from '../../widget-categories.type';\nimport { AXP_DASHBOARD_SHARED_SUB_CHART_KPI } from '../../widget-subcategories.type';\nimport { AXP_KPI_PROGRESS_SEGMENTED_DIMENSIONS } from '../kpi-widget.dimensions';\n\nexport const AXPKpiProgressWidget: AXPWidgetConfig = {\n name: RootConfig.widgets.kpiProgress,\n title: '@dashboard:widgets.kpi-progress.widget-title',\n description: '@dashboard:widgets.kpi-progress.widget-description',\n categories: [AXP_WIDGETS_CHART_CATEGORY],\n subCategory: AXP_DASHBOARD_SHARED_SUB_CHART_KPI,\n groups: [AXPWidgetGroupEnum.BaseWidget],\n type: 'dashboard',\n icon: 'fa-light fa-chart-bullet',\n properties: [\n createQueryOptionsProperty({ resultType: AXP_CHART_QUERY_RESULT_TYPE.kpiProgress }),\n cloneProperty(AXP_NAME_PROPERTY, { visible: false }),\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n {\n name: 'title',\n title: '@dashboard:widgets.kpi-progress.title',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'title',\n path: 'options.title',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n {\n name: 'value',\n title: '@dashboard:widgets.kpi-progress.value',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 0,\n dataType: 'number',\n interface: {\n name: 'value',\n path: 'options.value',\n type: AXPWidgetsCatalog.number,\n },\n },\n visible: true,\n },\n {\n name: 'subtitle',\n title: '@dashboard:widgets.kpi-progress.subtitle',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'subtitle',\n path: 'options.subtitle',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n {\n name: 'targetValue',\n title: '@dashboard:widgets.kpi-progress.target-value',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'targetValue',\n path: 'options.targetValue',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n {\n name: 'progressPercent',\n title: '@dashboard:widgets.kpi-progress.progress-percent',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 0,\n dataType: 'number',\n interface: {\n name: 'progressPercent',\n path: 'options.progressPercent',\n type: AXPWidgetsCatalog.number,\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () => import('./kpi-progress-widget.component').then((c) => c.AXPKpiProgressWidgetViewComponent),\n },\n },\n meta: {\n dimensions: AXP_KPI_PROGRESS_SEGMENTED_DIMENSIONS,\n },\n};\n","//#region ----- Imports -----\n\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPQueryExecutor } from '@acorex-platform/framework-client/runtime';\nimport type { AXPKpiSegmentedQueryResult } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { AXPDashboardWidgetComponent } from '../../dashboard-widget-base';\nimport { resolveChartQueryTabs } from '../../chart/chart-query-load.util';\nimport { AXPChartQueryTabsComponent } from '../../chart/chart-query-tabs.component';\nimport { AXPKpiSegmentItem, AXPKpiSegmentedData } from '../kpi-widget.types';\nimport {\n hasKpiQueryConfigured,\n loadKpiQueryResult,\n resolveKpiSegmentPaletteColor,\n resolveKpiText,\n type AXPKpiQueryLoadState,\n} from '../kpi-widget.util';\n\n//#endregion\n\n//#region ----- Types -----\n\ninterface AXPKpiSegmentViewItem {\n label: string;\n value: number;\n color: string;\n percent: number;\n}\n\n//#endregion\n\n@Component({\n templateUrl: './kpi-segmented-widget.component.html',\n styleUrls: ['./kpi-segmented-widget.component.css'],\n imports: [CommonModule, AXPChartQueryTabsComponent, AXLoadingModule, AXTranslationModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPKpiSegmentedWidgetViewComponent extends AXPDashboardWidgetComponent {\n //#region ----- Services & Dependencies -----\n\n private readonly queryExecutor = inject(AXPQueryExecutor);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ----- State Signals -----\n\n protected readonly model = signal<AXPKpiSegmentedData>({\n title: 'KPI Breakdown',\n segments: [],\n });\n\n protected readonly title = signal('KPI Breakdown');\n protected readonly segments = signal<AXPKpiSegmentViewItem[]>([]);\n protected readonly queryLoadState = signal<AXPKpiQueryLoadState>('idle');\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly hasSegments = computed(() => this.segments().length > 0);\n\n protected readonly segmentTotal = computed(() =>\n this.segments().reduce((sum, segment) => sum + segment.value, 0),\n );\n\n protected readonly showQueryLoading = computed(\n () => this.queryLoadState() === 'loading' && hasKpiQueryConfigured(this.options() as Record<string, unknown>),\n );\n\n protected readonly showQueryError = computed(\n () => this.queryLoadState() === 'error' && hasKpiQueryConfigured(this.options() as Record<string, unknown>),\n );\n\n protected readonly showEmptyState = computed(\n () => !this.showQueryLoading() && !this.hasSegments() && this.queryLoadState() !== 'error',\n );\n\n //#endregion\n\n //#region ----- Query tabs -----\n\n protected readonly queryTabs = computed(() =>\n resolveChartQueryTabs(this.options() as Record<string, unknown>, this.entityContext()?.entityId),\n );\n\n protected readonly activeTabIndex = signal(0);\n\n private readonly activeQuery = computed(() => {\n const tabs = this.queryTabs();\n if (tabs.length === 0) {\n return undefined;\n }\n const index = Math.min(Math.max(this.activeTabIndex(), 0), tabs.length - 1);\n return tabs[index];\n });\n\n protected selectQueryTab(index: number): void {\n this.activeTabIndex.set(index);\n }\n\n //#endregion\n\n //#region ----- Effects -----\n\n private readonly optionsEffect = effect(() => {\n const raw = this.options() as AXPKpiSegmentedData;\n this.model.update((current) => ({ ...current, ...raw }));\n if (!hasKpiQueryConfigured(this.options() as Record<string, unknown>)) {\n this.queryLoadState.set('idle');\n }\n });\n\n private readonly transformEffect = effect(() => {\n const model = this.model();\n const segmentItems = model.segments ?? [];\n void Promise.all([resolveKpiText(this.translationService, model.title), this.resolveSegments(segmentItems)]).then(\n ([resolvedTitle, resolvedSegments]) => {\n this.title.set(resolvedTitle);\n this.segments.set(resolvedSegments);\n },\n );\n });\n\n private readonly clampTabIndexEffect = effect(() => {\n const tabs = this.queryTabs();\n if (this.activeTabIndex() >= tabs.length) {\n this.activeTabIndex.set(0);\n }\n });\n\n private readonly dataLoadEffect = effect(async () => {\n const active = this.activeQuery();\n if (!active?.query) {\n return;\n }\n\n this.queryLoadState.set('loading');\n const payload = await loadKpiQueryResult<AXPKpiSegmentedQueryResult>(\n this.queryExecutor,\n active.query,\n active.queryInput,\n );\n if (!payload) {\n this.queryLoadState.set('error');\n return;\n }\n this.model.update((current) => ({\n ...current,\n ...payload,\n segments: payload.segments ?? current.segments,\n }));\n this.queryLoadState.set('ready');\n });\n\n //#endregion\n\n //#region ----- Helpers -----\n\n protected trackByLabel(_: number, item: AXPKpiSegmentViewItem): string {\n return item.label;\n }\n\n private async resolveSegments(segments: AXPKpiSegmentItem[]): Promise<AXPKpiSegmentViewItem[]> {\n const total = segments.reduce((sum, item) => sum + (item.value ?? 0), 0);\n const resolved = await Promise.all(\n segments.map(async (item, index) => ({\n label: await resolveKpiText(this.translationService, item.label),\n value: item.value ?? 0,\n color: item.color || resolveKpiSegmentPaletteColor(index),\n percent: total > 0 ? ((item.value ?? 0) / total) * 100 : 0,\n })),\n );\n return resolved;\n }\n\n //#endregion\n}\n","<div class=\"axp-chart-widget-host flex flex-col h-full min-h-0\">\n <axp-chart-query-tabs\n [tabs]=\"queryTabs()\"\n [activeIndex]=\"activeTabIndex()\"\n (activeIndexChange)=\"selectQueryTab($event)\"\n />\n <div class=\"axp-chart-widget-host__body flex-1 min-h-0\">\n <div\n class=\"axp-kpi-segmented axp-kpi-widget-card axp-kpi-widget-card--segmented\"\n [attr.data-grid-size]=\"gridSizeToken()\"\n >\n <!-- ----- Loading overlay while query data is fetched ----- -->\n @if (showQueryLoading()) {\n <div class=\"axp-kpi-widget-card__loading\" aria-busy=\"true\">\n <ax-loading></ax-loading>\n </div>\n }\n <div class=\"axp-kpi-widget-card__body\">\n <div class=\"axp-kpi-segmented__header\">\n <div class=\"axp-kpi-widget-card__title\">{{ title() }}</div>\n @if (hasSegments()) {\n <div class=\"axp-kpi-segmented__total\">{{ segmentTotal() }}</div>\n }\n </div>\n\n @if (hasSegments()) {\n <div class=\"axp-kpi-segmented__bar-track\" role=\"img\" [attr.aria-label]=\"title()\">\n @for (segment of segments(); track trackByLabel($index, segment)) {\n <div\n class=\"axp-kpi-segmented__bar-part\"\n [style.flex-grow]=\"segment.value\"\n [style.background-color]=\"segment.color\"\n [attr.title]=\"segment.label + ': ' + segment.value\"\n ></div>\n }\n </div>\n\n <div class=\"axp-kpi-segmented__legend\">\n @for (segment of segments(); track trackByLabel($index, segment)) {\n <div\n class=\"axp-kpi-segmented__legend-item\"\n [style.--segment-color]=\"segment.color\"\n >\n <div class=\"axp-kpi-segmented__legend-head\">\n <span class=\"axp-kpi-segmented__legend-dot\" [style.background-color]=\"segment.color\"></span>\n <span class=\"axp-kpi-segmented__legend-value\">{{ segment.value }}</span>\n </div>\n <span class=\"axp-kpi-segmented__legend-label\">{{ segment.label }}</span>\n </div>\n }\n </div>\n }\n <!-- ----- Empty state when no segments are configured ----- -->\n @else if (showEmptyState()) {\n <div class=\"axp-kpi-widget-card__empty\">\n {{ '@dashboard:widgets.kpi-segmented.empty-segments' | translate | async }}\n </div>\n }\n\n <!-- ----- Query error hint ----- -->\n @if (showQueryError()) {\n <p class=\"axp-kpi-widget-card__error\">\n {{ '@dashboard:widgets.kpi-shared.query-error' | translate | async }}\n </p>\n }\n </div>\n </div>\n </div>\n</div>\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, cloneProperty } from '@acorex-platform/framework-shared/widget-core';\nimport { RootConfig } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\n\nimport {\n AXP_APPEARANCE_PROPERTY_GROUP,\n AXP_DATA_PATH_PROPERTY,\n AXP_NAME_PROPERTY,\n createQueryOptionsProperty,\n} from '@acorex-platform/framework-client/layout/widgets';\nimport { AXP_CHART_QUERY_RESULT_TYPE } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { AXP_WIDGETS_CHART_CATEGORY } from '../../widget-categories.type';\nimport { AXP_DASHBOARD_SHARED_SUB_CHART_KPI } from '../../widget-subcategories.type';\nimport { AXP_KPI_PROGRESS_SEGMENTED_DIMENSIONS } from '../kpi-widget.dimensions';\n\nexport const AXPKpiSegmentedWidget: AXPWidgetConfig = {\n name: RootConfig.widgets.kpiSegmented,\n title: '@dashboard:widgets.kpi-segmented.widget-title',\n description: '@dashboard:widgets.kpi-segmented.widget-description',\n categories: [AXP_WIDGETS_CHART_CATEGORY],\n subCategory: AXP_DASHBOARD_SHARED_SUB_CHART_KPI,\n groups: [AXPWidgetGroupEnum.BaseWidget],\n type: 'dashboard',\n icon: 'fa-light fa-chart-simple',\n properties: [\n createQueryOptionsProperty({ resultType: AXP_CHART_QUERY_RESULT_TYPE.kpiSegmented }),\n cloneProperty(AXP_NAME_PROPERTY, { visible: false }),\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n {\n name: 'title',\n title: '@dashboard:widgets.kpi-segmented.title',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'title',\n path: 'options.title',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () => import('./kpi-segmented-widget.component').then((c) => c.AXPKpiSegmentedWidgetViewComponent),\n },\n },\n meta: {\n title: {\n visible: false,\n },\n dimensions: AXP_KPI_PROGRESS_SEGMENTED_DIMENSIONS,\n },\n};\n","//#region ----- Imports -----\n\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPQueryExecutor } from '@acorex-platform/framework-client/runtime';\nimport type { AXPKpiDetailsQueryResult } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { AXPDashboardWidgetComponent } from '../../dashboard-widget-base';\nimport { resolveChartQueryTabs } from '../../chart/chart-query-load.util';\nimport { AXPChartQueryTabsComponent } from '../../chart/chart-query-tabs.component';\nimport { AXPKpiDetailItem, AXPKpiDetailsData } from '../kpi-widget.types';\nimport {\n formatKpiValue,\n hasKpiQueryConfigured,\n loadKpiQueryResult,\n resolveKpiText,\n type AXPKpiQueryLoadState,\n} from '../kpi-widget.util';\n\n//#endregion\n\n//#region ----- Types -----\n\ninterface AXPKpiDetailViewItem {\n label: string;\n value: string;\n color?: string;\n}\n\n//#endregion\n\n@Component({\n templateUrl: './kpi-details-widget.component.html',\n styleUrls: ['./kpi-details-widget.component.css'],\n imports: [CommonModule, AXPChartQueryTabsComponent, AXLoadingModule, AXTranslationModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPKpiDetailsWidgetViewComponent extends AXPDashboardWidgetComponent {\n //#region ----- Services & Dependencies -----\n\n private readonly queryExecutor = inject(AXPQueryExecutor);\n private readonly translationService = inject(AXTranslationService);\n private readonly formatService = inject(AXFormatService);\n\n //#endregion\n\n //#region ----- State Signals -----\n\n protected readonly model = signal<AXPKpiDetailsData>({\n title: 'KPI',\n value: 0,\n subtitle: '',\n details: [],\n });\n\n protected readonly localized = signal({\n title: 'KPI',\n subtitle: '',\n valuePrefix: '',\n valueSuffix: '',\n });\n\n protected readonly detailItems = signal<AXPKpiDetailViewItem[]>([]);\n protected readonly queryLoadState = signal<AXPKpiQueryLoadState>('idle');\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly formattedValue = computed(() =>\n formatKpiValue(this.formatService, this.model().value, this.model().format),\n );\n\n protected readonly hasDetails = computed(() => this.detailItems().length > 0);\n\n protected readonly showQueryLoading = computed(\n () => this.queryLoadState() === 'loading' && hasKpiQueryConfigured(this.options() as Record<string, unknown>),\n );\n\n protected readonly showQueryError = computed(\n () => this.queryLoadState() === 'error' && hasKpiQueryConfigured(this.options() as Record<string, unknown>),\n );\n\n //#endregion\n\n //#region ----- Query tabs -----\n\n protected readonly queryTabs = computed(() =>\n resolveChartQueryTabs(this.options() as Record<string, unknown>, this.entityContext()?.entityId),\n );\n\n protected readonly activeTabIndex = signal(0);\n\n private readonly activeQuery = computed(() => {\n const tabs = this.queryTabs();\n if (tabs.length === 0) {\n return undefined;\n }\n const index = Math.min(Math.max(this.activeTabIndex(), 0), tabs.length - 1);\n return tabs[index];\n });\n\n protected selectQueryTab(index: number): void {\n this.activeTabIndex.set(index);\n }\n\n //#endregion\n\n //#region ----- Effects -----\n\n private readonly optionsEffect = effect(() => {\n const raw = this.options() as AXPKpiDetailsData;\n this.model.update((current) => ({ ...current, ...raw }));\n if (!hasKpiQueryConfigured(this.options() as Record<string, unknown>)) {\n this.queryLoadState.set('idle');\n }\n });\n\n private readonly localizationEffect = effect(() => {\n const model = this.model();\n void Promise.all([\n resolveKpiText(this.translationService, model.title),\n resolveKpiText(this.translationService, model.subtitle),\n resolveKpiText(this.translationService, model.valuePrefix),\n resolveKpiText(this.translationService, model.valueSuffix),\n this.resolveDetails(model.details),\n ]).then(([title, subtitle, valuePrefix, valueSuffix, details]) => {\n this.localized.set({ title, subtitle, valuePrefix, valueSuffix });\n this.detailItems.set(details);\n });\n });\n\n private readonly clampTabIndexEffect = effect(() => {\n const tabs = this.queryTabs();\n if (this.activeTabIndex() >= tabs.length) {\n this.activeTabIndex.set(0);\n }\n });\n\n private readonly dataLoadEffect = effect(async () => {\n const active = this.activeQuery();\n if (!active?.query) {\n return;\n }\n\n this.queryLoadState.set('loading');\n const payload = await loadKpiQueryResult<AXPKpiDetailsQueryResult>(\n this.queryExecutor,\n active.query,\n active.queryInput,\n );\n if (!payload) {\n this.queryLoadState.set('error');\n return;\n }\n this.model.update((current) => ({\n ...current,\n ...payload,\n details: payload.details ?? current.details,\n }));\n this.queryLoadState.set('ready');\n });\n\n //#endregion\n\n //#region ----- Helpers -----\n\n protected trackByLabel(_: number, item: AXPKpiDetailViewItem): string {\n return item.label;\n }\n\n private async resolveDetails(items: AXPKpiDetailItem[] = []): Promise<AXPKpiDetailViewItem[]> {\n return Promise.all(\n items.map(async (item) => ({\n label: await resolveKpiText(this.translationService, item.label),\n value: await resolveKpiText(this.translationService, item.value),\n color: item.color,\n })),\n );\n }\n\n //#endregion\n}\n","<div class=\"axp-chart-widget-host flex flex-col h-full min-h-0\">\n <axp-chart-query-tabs\n [tabs]=\"queryTabs()\"\n [activeIndex]=\"activeTabIndex()\"\n (activeIndexChange)=\"selectQueryTab($event)\"\n />\n <div class=\"axp-chart-widget-host__body flex-1 min-h-0\">\n <div\n class=\"axp-kpi-details axp-kpi-widget-card axp-kpi-widget-card--details\"\n [attr.data-grid-size]=\"gridSizeToken()\"\n >\n <!-- ----- Loading overlay while query data is fetched ----- -->\n @if (showQueryLoading()) {\n <div class=\"axp-kpi-widget-card__loading\" aria-busy=\"true\">\n <ax-loading></ax-loading>\n </div>\n }\n <div class=\"axp-kpi-widget-card__body\">\n <div class=\"axp-kpi-details__header\">\n <div class=\"axp-kpi-widget-card__title\">{{ localized().title }}</div>\n @if (localized().subtitle) {\n <span class=\"axp-kpi-widget-card__chip\">{{ localized().subtitle }}</span>\n }\n </div>\n\n <div class=\"axp-kpi-details__hero\">\n <div class=\"axp-kpi-details__value\">\n {{ localized().valuePrefix }}{{ formattedValue() }}{{ localized().valueSuffix }}\n </div>\n </div>\n\n @if (hasDetails()) {\n <div class=\"axp-kpi-details__divider\" aria-hidden=\"true\">\n <span class=\"axp-kpi-details__divider-line\"></span>\n <span class=\"axp-kpi-details__divider-dot\"></span>\n <span class=\"axp-kpi-details__divider-line\"></span>\n </div>\n\n <div class=\"axp-kpi-details__items\">\n @for (item of detailItems(); track trackByLabel($index, item)) {\n <div\n class=\"axp-kpi-details__item\"\n [style.--detail-accent]=\"item.color || null\"\n >\n <span class=\"axp-kpi-details__item-label\">{{ item.label }}</span>\n <span\n class=\"axp-kpi-details__item-value\"\n [style.color]=\"item.color || null\"\n >{{ item.value }}</span>\n </div>\n }\n </div>\n }\n\n <!-- ----- Query error hint ----- -->\n @if (showQueryError()) {\n <p class=\"axp-kpi-widget-card__error\">\n {{ '@dashboard:widgets.kpi-shared.query-error' | translate | async }}\n </p>\n }\n </div>\n </div>\n </div>\n</div>\n","import { AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\nimport { AXPWidgetConfig, AXPWidgetGroupEnum, cloneProperty } from '@acorex-platform/framework-shared/widget-core';\nimport { RootConfig } from '@acorex-platform/module-dashboard-management-client/contracts';\n\nimport { AXP_APPEARANCE_PROPERTY_GROUP, AXP_DATA_PATH_PROPERTY, AXP_NAME_PROPERTY, createQueryOptionsProperty } from '@acorex-platform/framework-client/layout/widgets';\nimport { AXP_CHART_QUERY_RESULT_TYPE } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { AXP_WIDGETS_CHART_CATEGORY } from '../../widget-categories.type';\nimport { AXP_DASHBOARD_SHARED_SUB_CHART_KPI } from '../../widget-subcategories.type';\nimport { AXP_KPI_DETAILS_DIMENSIONS } from '../kpi-widget.dimensions';\n\nexport const AXPKpiDetailsWidget: AXPWidgetConfig = {\n name: RootConfig.widgets.kpiDetails,\n title: '@dashboard:widgets.kpi-details.widget-title',\n description: '@dashboard:widgets.kpi-details.widget-description',\n categories: [AXP_WIDGETS_CHART_CATEGORY],\n subCategory: AXP_DASHBOARD_SHARED_SUB_CHART_KPI,\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-square-list',\n properties: [\n createQueryOptionsProperty({ resultType: AXP_CHART_QUERY_RESULT_TYPE.kpiDetails }),\n cloneProperty(AXP_NAME_PROPERTY, { visible: false }),\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n {\n name: 'title',\n title: '@dashboard:widgets.kpi-details.title',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'title',\n path: 'options.title',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n {\n name: 'value',\n title: '@dashboard:widgets.kpi-details.value',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 0,\n dataType: 'number',\n interface: {\n name: 'value',\n path: 'options.value',\n type: AXPWidgetsCatalog.number,\n },\n },\n visible: true,\n },\n {\n name: 'subtitle',\n title: '@dashboard:widgets.kpi-details.subtitle',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'subtitle',\n path: 'options.subtitle',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () => import('./kpi-details-widget.component').then((c) => c.AXPKpiDetailsWidgetViewComponent),\n },\n },\n meta: {\n title: {\n visible: false,\n },\n dimensions: AXP_KPI_DETAILS_DIMENSIONS,\n },\n};\n","import { AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\nimport { AXPWidgetConfig, AXPWidgetGroupEnum, cloneProperty } from '@acorex-platform/framework-shared/widget-core';\nimport { RootConfig } from '@acorex-platform/module-dashboard-management-client/contracts';\n\nimport { AXP_APPEARANCE_PROPERTY_GROUP, AXP_DATA_PATH_PROPERTY, AXP_NAME_PROPERTY, createQueryOptionsProperty } from '@acorex-platform/framework-client/layout/widgets';\nimport { AXP_CHART_QUERY_RESULT_TYPE } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { AXP_WIDGETS_CHART_CATEGORY } from '../../widget-categories.type';\nimport { AXP_DASHBOARD_SHARED_SUB_CHART_KPI } from '../../widget-subcategories.type';\nimport { AXP_KPI_STAT_CARD_DIMENSIONS } from '../kpi-widget.dimensions';\n\nconst ICON_TONE_OPTIONS = ['primary', 'secondary', 'success', 'warning', 'info', 'danger'] as const;\nconst TREND_STATUS_OPTIONS = ['success', 'danger', 'neutral'] as const;\nconst TITLE_BADGE_TONE_OPTIONS = ['primary', 'secondary', 'warning', 'info', 'neutral'] as const;\n\nexport const AXPKpiStatCardWidget: AXPWidgetConfig = {\n name: RootConfig.widgets.kpiStatCard,\n title: '@dashboard:widgets.kpi-stat-card.widget-title',\n description: '@dashboard:widgets.kpi-stat-card.widget-description',\n categories: [AXP_WIDGETS_CHART_CATEGORY],\n subCategory: AXP_DASHBOARD_SHARED_SUB_CHART_KPI,\n groups: [AXPWidgetGroupEnum.BaseWidget],\n type: 'dashboard',\n icon: 'fa-light fa-gauge-high',\n properties: [\n createQueryOptionsProperty({ resultType: AXP_CHART_QUERY_RESULT_TYPE.kpiStatCard }),\n cloneProperty(AXP_NAME_PROPERTY, { visible: false }),\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n {\n name: 'title',\n title: '@dashboard:widgets.kpi-stat-card.title',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'title',\n path: 'options.title',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n {\n name: 'titleBadgeText',\n title: '@dashboard:widgets.kpi-stat-card.title-badge-text',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'titleBadgeText',\n path: 'options.titleBadgeText',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n {\n name: 'titleBadgeTone',\n title: '@dashboard:widgets.kpi-stat-card.title-badge-tone',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 'warning',\n dataType: 'string',\n interface: {\n name: 'titleBadgeTone',\n path: 'options.titleBadgeTone',\n type: AXPWidgetsCatalog.select,\n options: { dataSource: TITLE_BADGE_TONE_OPTIONS },\n },\n },\n visible: true,\n },\n {\n name: 'value',\n title: '@dashboard:widgets.kpi-stat-card.value',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 0,\n dataType: 'number',\n interface: {\n name: 'value',\n path: 'options.value',\n type: AXPWidgetsCatalog.number,\n },\n },\n visible: true,\n },\n {\n name: 'valuePrefix',\n title: '@dashboard:widgets.kpi-stat-card.value-prefix',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'valuePrefix',\n path: 'options.valuePrefix',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n {\n name: 'valueSuffix',\n title: '@dashboard:widgets.kpi-stat-card.value-suffix',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'valueSuffix',\n path: 'options.valueSuffix',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n {\n name: 'trendValue',\n title: '@dashboard:widgets.kpi-stat-card.trend-value',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'trendValue',\n path: 'options.trendValue',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n {\n name: 'trendLabel',\n title: '@dashboard:widgets.kpi-stat-card.trend-label',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: '',\n dataType: 'string',\n interface: {\n name: 'trendLabel',\n path: 'options.trendLabel',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n {\n name: 'trendStatus',\n title: '@dashboard:widgets.kpi-stat-card.trend-status',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 'neutral',\n dataType: 'string',\n interface: {\n name: 'trendStatus',\n path: 'options.trendStatus',\n type: AXPWidgetsCatalog.select,\n options: { dataSource: TREND_STATUS_OPTIONS },\n },\n },\n visible: true,\n },\n {\n name: 'icon',\n title: '@dashboard:widgets.kpi-stat-card.icon',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 'fa-light fa-chart-line',\n dataType: 'string',\n interface: {\n name: 'icon',\n path: 'options.icon',\n type: AXPWidgetsCatalog.text,\n },\n },\n visible: true,\n },\n {\n name: 'iconTone',\n title: '@dashboard:widgets.kpi-stat-card.icon-tone',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 'primary',\n dataType: 'string',\n interface: {\n name: 'iconTone',\n path: 'options.iconTone',\n type: AXPWidgetsCatalog.select,\n options: { dataSource: ICON_TONE_OPTIONS },\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () => import('./kpi-stat-card-widget.component').then((c) => c.AXPKpiStatCardWidgetViewComponent),\n },\n },\n meta: {\n title: { visible: false },\n dimensions: AXP_KPI_STAT_CARD_DIMENSIONS,\n },\n};\n","//#region ----- Imports -----\n\nimport { AXPQueryExecutor } from '@acorex-platform/framework-client/runtime';\nimport type { AXPKpiStatCardQueryResult } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPPageLayoutBase } from '@acorex-platform/framework-client/layout/views';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { resolveChartQueryTabs } from '../../chart/chart-query-load.util';\nimport { AXPChartQueryTabsComponent } from '../../chart/chart-query-tabs.component';\nimport { AXPDashboardWidgetComponent } from '../../dashboard-widget-base';\nimport { AXPKpiIconTone, AXPKpiStatCardData, AXPKpiTitleBadgeTone, AXPKpiTrendStatus } from '../kpi-widget.types';\nimport {\n formatKpiValue,\n hasKpiQueryConfigured,\n loadKpiQueryResult,\n resolveKpiIconToneTheme,\n resolveKpiIconToneValueColor,\n resolveKpiText,\n type AXPKpiQueryLoadState,\n} from '../kpi-widget.util';\n\n//#endregion\n\n@Component({\n templateUrl: './kpi-stat-card-widget.component.html',\n styleUrls: ['./kpi-stat-card-widget.component.css'],\n imports: [CommonModule, AXPChartQueryTabsComponent, AXLoadingModule, AXTranslationModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPKpiStatCardWidgetViewComponent extends AXPDashboardWidgetComponent {\n //#region ----- Services & Dependencies -----\n\n private readonly queryExecutor = inject(AXPQueryExecutor);\n private readonly translationService = inject(AXTranslationService);\n private readonly formatService = inject(AXFormatService);\n private readonly commandService = inject(AXPCommandService);\n private readonly page = inject(AXPPageLayoutBase, { optional: true });\n\n //#endregion\n\n //#region ----- State Signals -----\n\n protected readonly model = signal<AXPKpiStatCardData>({\n title: 'KPI',\n value: 0,\n trendStatus: 'neutral',\n icon: 'fa-light fa-chart-line',\n iconTone: 'primary',\n });\n\n protected readonly localized = signal({\n title: '',\n valuePrefix: '',\n valueSuffix: '',\n titleBadgeText: '',\n trendValue: '',\n trendLabel: '',\n });\n\n protected readonly queryLoadState = signal<AXPKpiQueryLoadState>('idle');\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly formattedValue = computed(() => formatKpiValue(this.formatService, this.model().value, this.model().format));\n\n protected readonly iconClass = computed(() => this.model().icon || 'fa-light fa-chart-line');\n\n protected readonly iconToneTheme = computed(() =>\n resolveKpiIconToneTheme((this.model().iconTone ?? 'primary') as AXPKpiIconTone),\n );\n\n protected readonly accentColor = computed(() => this.iconToneTheme().accent);\n\n protected readonly valueColor = computed(() =>\n resolveKpiIconToneValueColor((this.model().iconTone ?? 'primary') as AXPKpiIconTone),\n );\n\n protected readonly cardBackground = computed(() => this.iconToneTheme().background);\n\n protected readonly cardBackgroundStyle = computed(() => this.iconToneTheme().backgroundStyle);\n\n protected readonly titleBadgeClasses = computed(() => {\n const raw = this.model();\n const tone = (raw.titleBadgeTone ?? raw.titleBadge?.tone ?? 'warning') as AXPKpiTitleBadgeTone;\n return {\n 'axp-kpi-stat-card__title-badge': true,\n 'axp-kpi-stat-card__title-badge--primary': tone === 'primary',\n 'axp-kpi-stat-card__title-badge--secondary': tone === 'secondary',\n 'axp-kpi-stat-card__title-badge--warning': tone === 'warning',\n 'axp-kpi-stat-card__title-badge--info': tone === 'info',\n 'axp-kpi-stat-card__title-badge--neutral': tone === 'neutral',\n };\n });\n\n protected readonly trendPillClasses = computed(() => {\n const s = (this.model().trendStatus ?? 'neutral') as AXPKpiTrendStatus;\n return {\n 'axp-kpi-stat-card__trend-pill': true,\n 'axp-kpi-stat-card__trend-pill--success': s === 'success',\n 'axp-kpi-stat-card__trend-pill--danger': s === 'danger',\n 'axp-kpi-stat-card__trend-pill--neutral': s === 'neutral',\n };\n });\n\n protected readonly showQueryLoading = computed(() => this.queryLoadState() === 'loading' && hasKpiQueryConfigured(this.options() as Record<string, unknown>));\n\n protected readonly showQueryError = computed(() => this.queryLoadState() === 'error' && hasKpiQueryConfigured(this.options() as Record<string, unknown>));\n\n protected readonly navigatePath = computed(() => {\n const path = (this.options() as Record<string, unknown>)['navigatePath'];\n return typeof path === 'string' && path.trim().length > 0 ? path.trim() : undefined;\n });\n\n protected readonly isClickable = computed(() => this.navigatePath() != null);\n\n //#endregion\n\n //#region ----- Query tabs -----\n\n protected readonly queryTabs = computed(() => resolveChartQueryTabs(this.options() as Record<string, unknown>, this.entityContext()?.entityId));\n\n protected readonly activeTabIndex = signal(0);\n\n private readonly activeQuery = computed(() => {\n const tabs = this.queryTabs();\n if (tabs.length === 0) {\n return undefined;\n }\n const index = Math.min(Math.max(this.activeTabIndex(), 0), tabs.length - 1);\n return tabs[index];\n });\n\n protected selectQueryTab(index: number): void {\n this.activeTabIndex.set(index);\n }\n\n //#endregion\n\n //#region ----- Effects -----\n\n private readonly optionsEffect = effect(() => {\n const raw = this.options() as Partial<AXPKpiStatCardData>;\n this.model.update((current) => this.applyPatch(current, raw));\n if (!hasKpiQueryConfigured(this.options() as Record<string, unknown>)) {\n this.queryLoadState.set('idle');\n }\n });\n\n private readonly localizationEffect = effect(() => {\n const m = this.model();\n const badgeFromNested = m.titleBadge?.text;\n const badgeFlat = m.titleBadgeText;\n const badgeText = badgeFromNested ?? badgeFlat;\n\n void Promise.all([\n resolveKpiText(this.translationService, m.title),\n resolveKpiText(this.translationService, m.valuePrefix),\n resolveKpiText(this.translationService, m.valueSuffix),\n resolveKpiText(this.translationService, badgeText),\n resolveKpiText(this.translationService, m.trendValue),\n resolveKpiText(this.translationService, m.trendLabel),\n ]).then(([title, valuePrefix, valueSuffix, titleBadgeText, trendValue, trendLabel]) => {\n this.localized.set({ title, valuePrefix, valueSuffix, titleBadgeText, trendValue, trendLabel });\n });\n });\n\n private readonly clampTabIndexEffect = effect(() => {\n const tabs = this.queryTabs();\n if (this.activeTabIndex() >= tabs.length) {\n this.activeTabIndex.set(0);\n }\n });\n\n private readonly dataLoadEffect = effect(async () => {\n const active = this.activeQuery();\n if (!active?.query) {\n return;\n }\n\n this.queryLoadState.set('loading');\n const payload = await loadKpiQueryResult<AXPKpiStatCardQueryResult>(this.queryExecutor, active.query, active.queryInput);\n if (!payload) {\n this.queryLoadState.set('error');\n return;\n }\n this.model.update((current) => this.applyPatch(current, payload as Partial<AXPKpiStatCardData>));\n this.queryLoadState.set('ready');\n });\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected handleClick(): void {\n const path = this.navigatePath();\n if (!path) {\n return;\n }\n\n void this.executeNavigate(path);\n }\n\n //#endregion\n\n //#region ----- Helpers -----\n\n private async executeNavigate(path: string): Promise<void> {\n const command = {\n name: 'navigate',\n options: {\n type: 'router',\n options: { path },\n },\n };\n\n if (this.commandService.exists(command.name)) {\n await this.commandService.execute(command.name, command.options);\n return;\n }\n\n if (this.page) {\n await this.page.execute(command);\n }\n }\n\n private applyPatch(current: AXPKpiStatCardData, raw: Partial<AXPKpiStatCardData>): AXPKpiStatCardData {\n const next: AXPKpiStatCardData = { ...current, ...raw };\n if (raw.titleBadge && typeof raw.titleBadge === 'object') {\n next.titleBadgeText = raw.titleBadge.text;\n if (raw.titleBadge.tone != null) {\n next.titleBadgeTone = raw.titleBadge.tone;\n }\n }\n if (next.trendStatus == null) {\n next.trendStatus = 'neutral';\n }\n if (next.iconTone == null) {\n next.iconTone = 'primary';\n }\n if (!next.icon) {\n next.icon = 'fa-light fa-chart-line';\n }\n return next;\n }\n\n //#endregion\n}\n","<div class=\"axp-chart-widget-host flex flex-col h-full min-h-0\">\n <axp-chart-query-tabs\n [tabs]=\"queryTabs()\"\n [activeIndex]=\"activeTabIndex()\"\n (activeIndexChange)=\"selectQueryTab($event)\"\n />\n <div\n class=\"axp-kpi-stat-card flex-1 min-h-0\"\n [attr.data-grid-size]=\"gridSizeToken()\"\n [class.axp-kpi-stat-card--clickable]=\"isClickable()\"\n [class.axp-kpi-stat-card--bg-pattern]=\"cardBackgroundStyle() === 'pattern'\"\n [class.axp-kpi-stat-card--bg-illustrative]=\"cardBackgroundStyle() === 'illustrative'\"\n [style.background]=\"cardBackground()\"\n [style.--kpi-accent]=\"accentColor()\"\n [style.--kpi-value-color]=\"valueColor()\"\n (click)=\"handleClick()\"\n >\n <!-- ----- Loading overlay while query data is fetched ----- -->\n @if (showQueryLoading()) {\n <div class=\"axp-kpi-stat-card__loading\" aria-busy=\"true\">\n <ax-loading></ax-loading>\n </div>\n }\n\n <i\n [class]=\"iconClass() + ' axp-kpi-stat-card__watermark axp-kpi-stat-card__watermark--layer-back'\"\n aria-hidden=\"true\"\n ></i>\n <i\n [class]=\"iconClass() + ' axp-kpi-stat-card__watermark axp-kpi-stat-card__watermark--layer-front'\"\n aria-hidden=\"true\"\n ></i>\n\n <div class=\"axp-kpi-stat-card__content\">\n <div class=\"axp-kpi-stat-card__head\">\n <div\n class=\"axp-kpi-stat-card__icon\"\n [style.background-color]=\"accentColor()\"\n role=\"img\"\n [attr.aria-label]=\"localized().title\"\n >\n <i [class]=\"iconClass()\" aria-hidden=\"true\"></i>\n </div>\n\n <div class=\"axp-kpi-stat-card__title-block\">\n <div class=\"axp-kpi-stat-card__title-row\">\n <span class=\"axp-kpi-stat-card__title\">{{ localized().title }}</span>\n @if (localized().titleBadgeText) {\n <span [class]=\"titleBadgeClasses()\">\n {{ localized().titleBadgeText }}\n </span>\n }\n </div>\n </div>\n </div>\n\n <div class=\"axp-kpi-stat-card__value-row\">\n <div class=\"axp-kpi-stat-card__value\">\n {{ localized().valuePrefix }}{{ formattedValue() }}{{ localized().valueSuffix }}\n </div>\n\n @if (isClickable()) {\n <div class=\"axp-kpi-stat-card__action\" aria-hidden=\"true\">\n <svg class=\"axp-kpi-stat-card__arrow\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5 12H19M14 7L19 12L14 17\"\n stroke=\"currentColor\"\n stroke-width=\"1.75\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n }\n </div>\n\n @if (localized().trendValue || localized().trendLabel) {\n <div class=\"axp-kpi-stat-card__trend\">\n <p class=\"axp-kpi-stat-card__trend-line\">\n @if (localized().trendValue) {\n <span [class]=\"trendPillClasses()\">\n {{ localized().trendValue }}\n </span>\n }\n @if (localized().trendLabel) {\n <span class=\"axp-kpi-stat-card__trend-label\">{{ localized().trendLabel }}</span>\n }\n </p>\n </div>\n }\n\n <!-- ----- Query error hint ----- -->\n @if (showQueryError()) {\n <p class=\"axp-kpi-stat-card__error\">\n {{ '@dashboard:widgets.kpi-shared.query-error' | translate | async }}\n </p>\n }\n </div>\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n OnDestroy,\n OnInit,\n signal,\n WritableSignal,\n} from '@angular/core';\n\ninterface AXMClockMark {\n transform?: string;\n top?: string;\n left?: string;\n value?: number;\n}\n\n@Component({\n selector: 'axm-analog-clock',\n standalone: true,\n imports: [],\n templateUrl: './analog-clock.component.html',\n styleUrls: ['./analog-clock.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXMAnalogClockComponent implements OnInit, OnDestroy {\n timezone = input<string>();\n classes = input<string>();\n showNumbers = input<boolean>(true);\n showSeconds = input<boolean>(true);\n utcOffsetMinutes = input<number | null>(null);\n\n private readonly currentTime: WritableSignal<Date> = signal(new Date());\n private readonly timeParts = signal({ hours: 0, minutes: 0, seconds: 0 });\n\n constructor() {\n effect(() => {\n const now = this.currentTime();\n const tz = this.timezone();\n const offsetMinutes = this.utcOffsetMinutes();\n let hours: number;\n let minutes: number;\n let seconds: number;\n\n if (offsetMinutes !== null) {\n const utcTime = now.getTime() + now.getTimezoneOffset() * 60000;\n const adjusted = new Date(utcTime + offsetMinutes * 60000);\n hours = adjusted.getHours();\n minutes = adjusted.getMinutes();\n seconds = adjusted.getSeconds();\n } else if (tz) {\n try {\n const formatter = new Intl.DateTimeFormat('en-US', {\n timeZone: tz,\n hour12: false,\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n });\n const parts = formatter.formatToParts(now);\n hours = parseInt(parts.find((p) => p.type === 'hour')?.value ?? '0', 10);\n minutes = parseInt(parts.find((p) => p.type === 'minute')?.value ?? '0', 10);\n seconds = parseInt(parts.find((p) => p.type === 'second')?.value ?? '0', 10);\n } catch (e) {\n console.error(`Invalid timezone provided: \"${tz}\". Falling back to local time.`);\n hours = now.getHours();\n minutes = now.getMinutes();\n seconds = now.getSeconds();\n }\n } else {\n hours = now.getHours();\n minutes = now.getMinutes();\n seconds = now.getSeconds();\n }\n this.timeParts.set({ hours, minutes, seconds });\n });\n }\n\n readonly hourHandTransform = computed(() => {\n const { hours, minutes } = this.timeParts();\n const hoursAngle = (hours % 12) * 30 + minutes * 0.5;\n return `translateX(-50%) rotate(${hoursAngle}deg)`;\n });\n\n readonly minuteHandTransform = computed(() => {\n const { minutes, seconds } = this.timeParts();\n const minutesAngle = minutes * 6 + seconds * 0.1;\n return `translateX(-50%) rotate(${minutesAngle}deg)`;\n });\n\n readonly secondHandTransform = computed(() => {\n const { seconds } = this.timeParts();\n const secondsAngle = seconds * 6;\n return `translateX(-50%) rotate(${secondsAngle}deg)`;\n });\n\n hourLines: AXMClockMark[] = [];\n hourNumbers: AXMClockMark[] = [];\n dots: AXMClockMark[] = [];\n\n private timerId?: number;\n\n ngOnInit(): void {\n this.createClockMarks();\n this.timerId = window.setInterval(() => {\n this.currentTime.set(new Date());\n }, 1000);\n }\n\n ngOnDestroy(): void {\n if (this.timerId) {\n clearInterval(this.timerId);\n }\n }\n\n private createClockMarks(): void {\n const majorHours = [12, 3, 6, 9];\n\n // Hour Lines\n this.hourLines = [];\n for (let i = 1; i <= 12; i++) {\n this.hourLines.push({\n transform: `translateX(-50%) rotate(${i * 30}deg)`,\n });\n }\n\n // Hour Numbers\n this.hourNumbers = [];\n for (const hour of majorHours) {\n const angleRad = (hour * 30 - 90) * (Math.PI / 180);\n this.hourNumbers.push({\n value: hour,\n top: `calc(50% + ${26 * Math.sin(angleRad)}%)`,\n left: `calc(50% + ${26 * Math.cos(angleRad)}%)`,\n });\n }\n\n // Dots\n this.dots = [];\n for (let i = 1; i <= 60; i++) {\n if (i % 5 !== 0) {\n this.dots.push({\n transform: `translateX(-50%) rotate(${i * 6}deg)`,\n });\n }\n }\n }\n}\n","<div class=\"axm-analog-clock-container\">\n <div class=\"axm-analog-clock-face\" [class]=\"classes()\">\n <div class=\"axm-analog-clock-marks-container\">\n @for (line of hourLines; track $index) {\n <div class=\"axm-analog-clock-hour-line\" [style.transform]=\"line.transform\">\n <div class=\"axm-analog-clock-hour-line-inner\"></div>\n </div>\n }\n @for (dot of dots; track $index) {\n <div class=\"axm-analog-clock-dot-line\" [style.transform]=\"dot.transform\">\n <div class=\"axm-analog-clock-dot-line-inner\"></div>\n </div>\n }\n </div>\n\n @if (showNumbers()) {\n <div class=\"axm-analog-clock-numbers-container\">\n @for (num of hourNumbers; track num.value) {\n <div class=\"axm-analog-clock-hour-number\" [style.top]=\"num.top\" [style.left]=\"num.left\">\n {{ num.value }}\n </div>\n }\n </div>\n }\n <div class=\"axm-analog-clock-hands\">\n <div class=\"axm-analog-clock-hand axm-analog-clock-hour-hand\" [style.transform]=\"hourHandTransform()\"></div>\n <div\n class=\"axm-analog-clock-hand axm-analog-clock-minute-hand\"\n [style.transform]=\"minuteHandTransform()\"\n ></div>\n @if (showSeconds()) {\n <div\n class=\"axm-analog-clock-hand axm-analog-clock-second-hand\"\n [style.transform]=\"secondHandTransform()\"\n ></div>\n }\n <div class=\"axm-analog-clock-center-point\"></div>\n </div>\n </div>\n</div>\n","/**\n * ACoreX Clock Calendar Widget Types\n */\n\n//#region ----- Types -----\n\n/**\n * Hour number definition for the analog clock\n */\nexport interface AXPHourNumber {\n number: number;\n angle: number;\n}\n\n//#endregion\n\n//#region ----- Timezone helpers -----\n\n/** Current UTC offset (minutes) for an IANA zone such as `Australia/Sydney`. */\nexport function getIanaTimeZoneOffsetMinutes(timeZone: string, at: Date = new Date()): number | null {\n try {\n const tzName = new Intl.DateTimeFormat('en-US', {\n timeZone,\n timeZoneName: 'shortOffset',\n hour: 'numeric',\n })\n .formatToParts(at)\n .find((part) => part.type === 'timeZoneName')?.value;\n\n if (!tzName) {\n return null;\n }\n\n if (tzName === 'GMT' || tzName === 'UTC') {\n return 0;\n }\n\n const [match, sign, hours, minutes] = tzName.match(/([+-])(\\d{1,2})(?::?(\\d{2}))?/) ?? [];\n if (!match) {\n return null;\n }\n\n const signMul = sign === '-' ? -1 : 1;\n return signMul * (parseInt(hours, 10) * 60 + parseInt(minutes ?? '0', 10));\n } catch {\n return null;\n }\n}\n\n/** Format offset minutes as `UTC+10` / `UTC+3:30` for the widget badge. */\nexport function formatUtcOffsetLabel(offsetMinutes: number): string {\n const sign = offsetMinutes < 0 ? '-' : '+';\n const absolute = Math.abs(offsetMinutes);\n const hours = Math.floor(absolute / 60);\n const minutes = absolute % 60;\n return minutes === 0 ? `UTC${sign}${hours}` : `UTC${sign}${hours}:${String(minutes).padStart(2, '0')}`;\n}\n\n/**\n * Normalize a timezone select / setting value to an IANA code.\n * Accepts a string code or an object with `code` / `iana` / `id`.\n */\nexport function resolveTimeZoneCode(value: unknown, fallback = 'UTC'): string {\n if (typeof value === 'string' && value.trim()) {\n return value.trim();\n }\n\n if (value && typeof value === 'object') {\n const record = value as { code?: unknown; iana?: unknown; id?: unknown };\n for (const key of ['code', 'iana', 'id'] as const) {\n const candidate = record[key];\n if (typeof candidate === 'string' && candidate.trim()) {\n return candidate.trim();\n }\n }\n }\n\n return fallback;\n}\n\n//#endregion\n","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPRegionalSetting } from '@acorex-platform/framework-shared/core';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n OnDestroy,\n OnInit,\n Signal,\n computed,\n inject,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Subscription, interval } from 'rxjs';\nimport { AXPDashboardWidgetComponent } from '../../dashboard-widget-base';\nimport { AXMAnalogClockComponent } from '../analog-clock/analog-clock.component';\nimport {\n formatUtcOffsetLabel,\n getIanaTimeZoneOffsetMinutes,\n resolveTimeZoneCode,\n} from './clock-calendar.types';\n\n//#region ----- Constants -----\n\nconst WEEKDAY_FORMAT = 'dddd';\n\n//#endregion\n\n//#region ----- Helpers -----\n\nfunction formatIncludesSeconds(format: string): boolean {\n return /s{1,2}/.test(format);\n}\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n templateUrl: './clock-calendar-widget.component.html',\n styleUrls: ['./clock-calendar-widget.component.css'],\n standalone: true,\n imports: [CommonModule, AXDateTimeModule, AXFormatModule, AXDecoratorModule, AXMAnalogClockComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPClockCalendarWidgetViewComponent extends AXPDashboardWidgetComponent implements OnInit, OnDestroy {\n //#region ----- Services & Dependencies -----\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly settingsService = inject(AXPSettingsService);\n private readonly destroyRef = inject(DestroyRef);\n //#endregion\n\n //#region ----- State Signals -----\n protected currentTime = new Date();\n protected currentDate = new Date();\n private clockSubscription: Subscription | null = null;\n\n protected readonly dateFormat = signal('DD/MM/YYYY');\n protected readonly timeFormat = signal('HH:mm:ss');\n protected readonly weekdayFormat = signal(WEEKDAY_FORMAT);\n /** Tenant regional TimeZone setting (IANA) — used when widget option is empty. */\n private readonly tenantTimeZone = signal('UTC');\n //#endregion\n\n //#region ----- Computed Properties -----\n /** Widget option (timezone entity code) or tenant regional TimeZone. */\n protected readonly ianaTimeZone: Signal<string> = computed(() => {\n const fromOption = resolveTimeZoneCode(this.options()?.['timezone'], '');\n return fromOption || this.tenantTimeZone();\n });\n\n protected readonly showSeconds: Signal<boolean> = computed(() => formatIncludesSeconds(this.timeFormat()));\n\n protected readonly utcOffsetMinutes: Signal<number | null> = computed(() =>\n getIanaTimeZoneOffsetMinutes(this.ianaTimeZone()),\n );\n\n protected readonly timezoneLabel: Signal<string> = computed(() => {\n const offset = this.utcOffsetMinutes();\n if (offset !== null) {\n return formatUtcOffsetLabel(offset);\n }\n\n return this.ianaTimeZone().replace(/_/g, '/').toUpperCase();\n });\n //#endregion\n\n //#region ----- Lifecycle -----\n override ngOnInit(): void {\n super.ngOnInit();\n void this.loadRegionalFormats();\n void this.loadTenantTimeZone();\n this.bindRegionalSettingChanges();\n this.startClockTimer();\n this.updateTime();\n }\n\n ngOnDestroy(): void {\n this.stopClockTimer();\n }\n //#endregion\n\n //#region ----- Widget Hooks -----\n protected initializeWidget(): void {\n this.updateTime();\n }\n\n protected updateWidget(): void {\n this.stopClockTimer();\n this.startClockTimer();\n void this.loadTenantTimeZone();\n this.updateTime();\n }\n\n protected destroyWidget(): void {\n this.stopClockTimer();\n }\n //#endregion\n\n //#region ----- Private Helpers -----\n private bindRegionalSettingChanges(): void {\n const regionalKeys = new Set<string>([\n AXPRegionalSetting.ShortDate,\n AXPRegionalSetting.ShortTime,\n AXPRegionalSetting.LongTime,\n AXPRegionalSetting.TimeZone,\n ]);\n\n this.settingsService.onChanged.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n if (event.keys.some((key) => regionalKeys.has(key))) {\n void this.loadRegionalFormats();\n if (event.keys.includes(AXPRegionalSetting.TimeZone)) {\n void this.loadTenantTimeZone();\n }\n }\n });\n }\n\n private async loadRegionalFormats(): Promise<void> {\n const [shortDate, shortTime, longTime] = await Promise.all([\n this.settingsService.get<string>(AXPRegionalSetting.ShortDate),\n this.settingsService.get<string>(AXPRegionalSetting.ShortTime),\n this.settingsService.get<string>(AXPRegionalSetting.LongTime),\n ]);\n\n this.dateFormat.set(shortDate || 'DD/MM/YYYY');\n this.timeFormat.set(formatIncludesSeconds(longTime) ? longTime : shortTime || longTime || 'HH:mm');\n this.cdr.markForCheck();\n }\n\n private async loadTenantTimeZone(): Promise<void> {\n const value = await this.settingsService.get<unknown>(AXPRegionalSetting.TimeZone);\n this.tenantTimeZone.set(resolveTimeZoneCode(value));\n this.updateTime();\n this.cdr.markForCheck();\n }\n\n private startClockTimer(): void {\n this.stopClockTimer();\n this.clockSubscription = interval(1000).subscribe(() => this.updateTime());\n }\n\n private stopClockTimer(): void {\n this.clockSubscription?.unsubscribe();\n this.clockSubscription = null;\n }\n\n private updateTime(): void {\n const now = this.getAdjustedTime();\n this.currentTime = now;\n this.currentDate = now;\n this.cdr.markForCheck();\n }\n\n private getAdjustedTime(): Date {\n const now = new Date();\n const offsetMinutes = this.utcOffsetMinutes();\n\n if (offsetMinutes === null) {\n return now;\n }\n\n const utcTime = now.getTime() + now.getTimezoneOffset() * 60000;\n return new Date(utcTime + offsetMinutes * 60000);\n }\n //#endregion\n}\n\n//#endregion\n","<div class=\"axp-clock-calendar-card\">\n <div class=\"axp-clock-calendar-body\">\n <div class=\"axp-clock-calendar-dial\">\n <axm-analog-clock\n [timezone]=\"ianaTimeZone()\"\n [utcOffsetMinutes]=\"utcOffsetMinutes()\"\n [showSeconds]=\"showSeconds()\"\n ></axm-analog-clock>\n </div>\n\n <div class=\"axp-clock-calendar-info\">\n <div class=\"axp-clock-calendar-timezone-row\">\n <div class=\"axp-clock-calendar-icon-badge\">\n <i class=\"fa-light fa-globe\"></i>\n </div>\n <span class=\"axp-clock-calendar-timezone-label\">{{ timezoneLabel() }}</span>\n </div>\n\n <div class=\"axp-clock-calendar-digital-pill\">\n <div class=\"axp-clock-calendar-icon-badge axp-clock-calendar-icon-badge--round\">\n <i class=\"fa-light fa-clock\"></i>\n </div>\n <span class=\"axp-clock-calendar-digital-time\">\n {{ currentTime | format: 'datetime' : timeFormat() | async }}\n </span>\n </div>\n\n <div class=\"axp-clock-calendar-divider\" aria-hidden=\"true\">\n <span class=\"axp-clock-calendar-divider-dot\"></span>\n </div>\n\n <div class=\"axp-clock-calendar-date-row\">\n <div class=\"axp-clock-calendar-icon-badge\">\n <i class=\"fa-light fa-calendar\"></i>\n </div>\n <div class=\"axp-clock-calendar-date-text\">\n <span class=\"axp-clock-calendar-date-value\">\n {{ currentDate | format: 'datetime' : dateFormat() | async }}\n </span>\n <span class=\"axp-clock-calendar-weekday\">\n {{ currentDate | format: 'datetime' : weekdayFormat() | async }}\n </span>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { AXP_BEHAVIOR_PROPERTY_GROUP } from '@acorex-platform/framework-client/layout/widgets';\nimport { AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\nimport { AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex-platform/framework-shared/widget-core';\nimport { RootConfig } from '@acorex-platform/module-dashboard-management-client/contracts';\n\nimport { AXP_WIDGETS_UTILITY_CATEGORY } from '../../widget-categories.type';\nimport { AXP_DASHBOARD_SHARED_SUB_UTILITY_TIME } from '../../widget-subcategories.type';\nimport { AXP_UTILITY_CLOCK_CALENDAR_DIMENSIONS } from '../utility-widget.dimensions';\n\n/**\n * Clock & calendar dashboard widget.\n * Timezone options come from lookup on LocaleManagement.Timezones (active only).\n * When unset, the view falls back to the tenant regional TimeZone setting.\n */\nexport const AXPClockCalendarWidget: AXPWidgetConfig = {\n name: RootConfig.widgets.clockCalendar,\n title: '@dashboard:widgets.clock-calendar.widget-title',\n description: '@dashboard:widgets.clock-calendar.widget-description',\n categories: [AXP_WIDGETS_UTILITY_CATEGORY],\n subCategory: AXP_DASHBOARD_SHARED_SUB_UTILITY_TIME,\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-clock',\n properties: [\n {\n name: 'timezone',\n title: '@dashboard:widgets.clock-calendar.timezone',\n group: AXP_BEHAVIOR_PROPERTY_GROUP,\n schema: {\n dataType: 'object',\n interface: {\n name: 'timezone',\n path: 'options.timezone',\n type: AXPWidgetsCatalog.lookup,\n options: {\n entity: 'LocaleManagement.Timezones',\n look: 'select',\n valueField: 'code',\n textField: 'title',\n allowSearch: true,\n filter: {\n logic: 'and',\n filters: [{ field: 'isActive', operator: { type: 'equal' }, value: true }],\n },\n },\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () => import('./clock-calendar-widget.component').then((m) => m.AXPClockCalendarWidgetViewComponent),\n },\n },\n meta: {\n dimensions: AXP_UTILITY_CLOCK_CALENDAR_DIMENSIONS,\n },\n};\n","import { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXP_GLOBAL_SEARCH_CONFIG_TOKEN } from '@acorex-platform/module-common-client';\nimport { AXPSearchDisplayResult } from '@acorex-platform/framework-client/common';\nimport { AXPExecuteCommand, AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { AXPPageLayoutBase } from '@acorex-platform/framework-client/layout/views';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXPDashboardWidgetComponent, AXPDashboardWidgetContainerSize } from '../../dashboard-widget-base';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, afterNextRender, computed, effect, inject, signal, untracked } from '@angular/core';\nimport {\n AXPShortcutBackgroundStyle,\n AXPShortcutLayoutVariant,\n buildShortcutAccentTheme,\n generateShortcutAccent,\n parseColorToHue,\n resolveShortcutLayoutVariant,\n shouldShowShortcutDescription,\n} from './shortcut-widget.utils';\n\nexport interface AXPShortcutItem {\n name: string;\n title: string | AXPMultiLanguageString;\n description?: string | AXPMultiLanguageString;\n icon: string;\n command: AXPExecuteCommand;\n}\n\n@Component({\n templateUrl: './shortcut-widget-view.component.html',\n styleUrls: ['./shortcut-widget-view.component.css'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXTranslationModule],\n})\nexport class AXPShortcutWidgetViewComponent extends AXPDashboardWidgetComponent {\n private popupService = inject(AXPopupService);\n private commandService = inject(AXPCommandService);\n private page = inject(AXPPageLayoutBase, { optional: true });\n private searchConfig = inject(AXP_GLOBAL_SEARCH_CONFIG_TOKEN);\n\n private containerWidth = signal(0);\n private containerHeight = signal(0);\n private shouldPromptShortcutCommand = false;\n private commandPromptInFlight = false;\n private suppressEmptyClick = false;\n\n constructor() {\n super();\n afterNextRender(() => {\n if (!this.shouldPromptShortcutCommand) {\n return;\n }\n\n this.shouldPromptShortcutCommand = false;\n void this.promptShortcutCommand();\n });\n }\n\n protected item = computed<AXPShortcutItem | undefined>(\n () => this.options()['item'] as AXPShortcutItem | undefined,\n );\n protected color = computed<string>(() => this.options()['color'] as string);\n protected colorHue = computed<number | undefined>(() => this.options()['colorHue'] as number | undefined);\n protected backgroundStyle = computed<AXPShortcutBackgroundStyle | undefined>(\n () => this.options()['backgroundStyle'] as AXPShortcutBackgroundStyle | undefined,\n );\n\n protected layoutVariant = computed<AXPShortcutLayoutVariant>(() =>\n resolveShortcutLayoutVariant(this.containerWidth(), this.containerHeight()),\n );\n\n protected theme = computed(() =>\n buildShortcutAccentTheme(this.color(), this.colorHue(), this.backgroundStyle()),\n );\n\n protected accentColor = computed(() => this.theme().accent);\n protected cardBackground = computed(() => this.theme().background);\n protected cardBackgroundStyle = computed(() => this.theme().backgroundStyle);\n protected isHero = computed(() => this.layoutVariant() === 'hero');\n protected isMobile = computed(() => this.layoutVariant() === 'mobile');\n protected showDescription = computed(() =>\n shouldShowShortcutDescription(this.containerWidth(), this.containerHeight(), this.layoutVariant()),\n );\n\n private readonly syncColorHue = effect(() => {\n const color = this.color();\n if (!color) {\n return;\n }\n\n const parsedHue = parseColorToHue(color);\n if (parsedHue == null || this.colorHue() === parsedHue) {\n return;\n }\n\n untracked(() => this.setOptions({ colorHue: parsedHue }));\n });\n\n override ngOnInit(): void {\n super.ngOnInit();\n if (!this.color()) {\n const accent = generateShortcutAccent();\n this.setOptions({\n color: accent.hex,\n colorHue: accent.hue,\n });\n return;\n }\n\n if (this.colorHue() == null) {\n const hue = parseColorToHue(this.color());\n if (hue != null) {\n this.setOptions({ colorHue: hue });\n } else {\n const accent = generateShortcutAccent();\n this.setOptions({ color: accent.hex, colorHue: accent.hue });\n }\n }\n }\n\n override onAdded(): void {\n const meta = (this.node as { __meta__?: { added?: boolean } }).__meta__;\n if (!meta?.added) {\n return;\n }\n\n this.clearAddedMeta();\n\n if (this.item()) {\n return;\n }\n\n this.shouldPromptShortcutCommand = true;\n this.suppressEmptyClick = true;\n }\n\n private async promptShortcutCommand(): Promise<void> {\n try {\n await this.setCommand();\n } finally {\n window.setTimeout(() => {\n this.suppressEmptyClick = false;\n }, 300);\n }\n }\n\n private clearAddedMeta(): void {\n const meta = (this.node as { __meta__?: { added?: boolean } }).__meta__;\n if (!meta?.added) {\n return;\n }\n\n delete meta.added;\n if (Object.keys(meta).length === 0) {\n delete (this.node as { __meta__?: unknown }).__meta__;\n }\n }\n\n protected override onContainerSizeChanged(size: AXPDashboardWidgetContainerSize): void {\n this.containerWidth.set(size.width);\n this.containerHeight.set(size.height);\n }\n\n protected handleClick(): void {\n if (this.item()) {\n void this.executeCommand();\n return;\n }\n\n if (this.suppressEmptyClick || this.commandPromptInFlight) {\n return;\n }\n\n void this.setCommand();\n }\n\n protected async executeCommand() {\n const command = this.item()?.command;\n if (!command) {\n return;\n }\n\n if (this.commandService.exists(command.name)) {\n await this.commandService.execute(command.name, command.options ?? {});\n return;\n }\n\n if (this.page) {\n await this.page.execute(command);\n }\n }\n\n protected async setCommand() {\n if (this.commandPromptInFlight) {\n return;\n }\n\n this.commandPromptInFlight = true;\n try {\n const component = await this.searchConfig.window();\n const popup = await this.popupService.open(component, {\n title: 'Choose command...',\n size: 'fit',\n closeOnBackdropClick: true,\n header: false,\n });\n if (popup.data) {\n const result = popup.data as AXPSearchDisplayResult;\n if (result && result.command) {\n this.setOptions({\n item: {\n name: result.name,\n title: result.title,\n description: result.description,\n icon: result.icon,\n command: result.command,\n } as AXPShortcutItem,\n });\n }\n }\n } finally {\n this.commandPromptInFlight = false;\n }\n }\n}\n","<div\n class=\"shortcut-container shortcut-container--{{ layoutVariant() }}\"\n [class.shortcut-container--bg-pattern]=\"item() && cardBackgroundStyle() === 'pattern'\"\n [class.shortcut-container--bg-illustrative]=\"item() && cardBackgroundStyle() === 'illustrative'\"\n [class.shortcut-container--empty]=\"!item()\"\n [style.background]=\"item() ? cardBackground() : null\"\n [style.--shortcut-accent]=\"accentColor()\"\n (click)=\"handleClick()\"\n>\n @if (item()) {\n <i\n [class]=\"item()!.icon + ' shortcut-container__watermark shortcut-container__watermark--layer-back'\"\n aria-hidden=\"true\"\n ></i>\n <i\n [class]=\"item()!.icon + ' shortcut-container__watermark shortcut-container__watermark--layer-front'\"\n [class.shortcut-container__watermark--hero]=\"isHero()\"\n aria-hidden=\"true\"\n ></i>\n\n <div class=\"shortcut-container__body\">\n <div class=\"shortcut-container__icon\" [style.background-color]=\"accentColor()\">\n <i [class]=\"item()!.icon\" aria-hidden=\"true\"></i>\n </div>\n\n <div class=\"shortcut-container__content\">\n <h3 class=\"shortcut-container__title\">{{ item()!.title | translate | async }}</h3>\n @if (item()?.description && showDescription()) {\n <p class=\"shortcut-container__description\">{{ item()!.description! | translate | async }}</p>\n }\n @if (isHero()) {\n <button type=\"button\" class=\"shortcut-container__cta\" [style.background-color]=\"accentColor()\">\n <span>{{ '@dashboard:widgets.shortcut.get-started' | translate | async }}</span>\n <i class=\"fa-light fa-arrow-right shortcut-container__cta-icon\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n </div>\n\n @if (!isHero()) {\n <div class=\"shortcut-container__action\" aria-hidden=\"true\">\n @if (isMobile()) {\n <i class=\"fa-light fa-chevron-right\"></i>\n } @else {\n <svg class=\"shortcut-container__arrow\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5 12H19M14 7L19 12L14 17\"\n stroke=\"currentColor\"\n stroke-width=\"1.75\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n }\n </div>\n }\n } @else {\n <div class=\"shortcut-container__empty\">\n <div class=\"shortcut-container__empty-icon\">\n <i class=\"fa-light fa-plus\"></i>\n </div>\n <h3 class=\"shortcut-container__empty-title\">\n {{ '@dashboard:widgets.shortcut.add-shortcut' | translate | async }}\n </h3>\n @if (!isMobile()) {\n <p class=\"shortcut-container__empty-hint\">\n {{ '@dashboard:widgets.shortcut.click-to-add' | translate | async }}\n </p>\n }\n </div>\n <div class=\"shortcut-container__dot-grid\" aria-hidden=\"true\"></div>\n }\n</div>\n","import { AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex-platform/framework-shared/widget-core';\nimport { RootConfig } from '@acorex-platform/module-dashboard-management-client/contracts';\n\nimport { AXP_COLOR_PROPERTY } from '@acorex-platform/framework-client/layout/widgets';\nimport { AXP_WIDGETS_UTILITY_CATEGORY } from '../../widget-categories.type';\nimport { AXP_UTILITY_SHORTCUT_DIMENSIONS } from '../utility-widget.dimensions';\nimport { AXP_DASHBOARD_SHARED_SUB_UTILITY_SHORTCUT } from '../../widget-subcategories.type';\n\nexport const AXPShortcutWidget: AXPWidgetConfig = {\n name: RootConfig.widgets.shortcut,\n title: '@dashboard:widgets.shortcut.widget-title',\n description: '@dashboard:widgets.shortcut.widget-description',\n type: 'view',\n categories: [AXP_WIDGETS_UTILITY_CATEGORY],\n subCategory: AXP_DASHBOARD_SHARED_SUB_UTILITY_SHORTCUT,\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n icon: 'fa-light fa-link',\n properties: [\n {\n ...AXP_COLOR_PROPERTY,\n title: '@dashboard:widgets.shortcut.color',\n },\n ],\n meta: {\n title: { visible: false },\n dimensions: AXP_UTILITY_SHORTCUT_DIMENSIONS,\n },\n components: {\n view: {\n component: () => import('./shortcut-widget-view.component').then((c) => c.AXPShortcutWidgetViewComponent),\n },\n },\n};\n","//#region ----- Types -----\n\nexport type AXPStickyNoteLayoutVariant = 'mini' | 'standard';\n\n//#endregion\n\n//#region ----- Constants -----\n\nexport const STICKY_NOTE_DEFAULT_BACKGROUND = '#FFF8B8';\n\n/** Curated palette — kept short for small widget tiles. */\nexport const STICKY_NOTE_COLOR_PRESETS: readonly string[] = [\n '#FFF8B8',\n '#FFD8E6',\n '#D1F0FF',\n '#E2FFD1',\n '#FFE8D1',\n '#F5F5F5',\n] as const;\n\n//#endregion\n\n//#region ----- Text helpers -----\n\n/** Reads persisted note text from widget options, with legacy `defaultValue` fallback. */\nexport function resolveStickyNoteText(\n options: Record<string, unknown> | undefined,\n legacyDefaultValue?: unknown,\n): string {\n const fromOptions = options?.['noteText'];\n if (typeof fromOptions === 'string' && fromOptions.trim().length > 0) {\n return stripHtmlToPlainText(fromOptions);\n }\n\n if (typeof legacyDefaultValue === 'string' && legacyDefaultValue.trim().length > 0) {\n return stripHtmlToPlainText(legacyDefaultValue);\n }\n\n return typeof fromOptions === 'string' ? fromOptions : '';\n}\n\n/** Converts legacy rich-text note content into plain text for the textarea. */\nexport function stripHtmlToPlainText(value: string): string {\n const trimmed = value.trim();\n if (!trimmed.includes('<')) {\n return value;\n }\n\n return trimmed\n .replace(/<br\\s*\\/?>/gi, '\\n')\n .replace(/<\\/p>/gi, '\\n')\n .replace(/<[^>]+>/g, '')\n .replace(/ /gi, ' ')\n .replace(/&/gi, '&')\n .replace(/</gi, '<')\n .replace(/>/gi, '>')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim();\n}\n\nexport function isStickyNoteEmpty(value: string | null | undefined): boolean {\n return !value || value.trim().length === 0;\n}\n\n//#endregion\n\n//#region ----- Color helpers -----\n\nexport function resolveStickyNoteBackgroundColor(color: unknown): string {\n if (typeof color !== 'string' || color.trim().length === 0) {\n return STICKY_NOTE_DEFAULT_BACKGROUND;\n }\n\n return color.trim();\n}\n\n/** Picks a readable ink color for the note body based on background luminance. */\nexport function resolveStickyNoteTextColor(backgroundColor: string): string {\n const rgb = parseHexColor(backgroundColor);\n if (!rgb) {\n return '#3F3F46';\n }\n\n const luminance = (0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b) / 255;\n return luminance > 0.7 ? '#3F3F46' : '#FAFAFA';\n}\n\nexport function resolveStickyNoteMutedTextColor(backgroundColor: string): string {\n const rgb = parseHexColor(backgroundColor);\n if (!rgb) {\n return '#71717A';\n }\n\n const luminance = (0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b) / 255;\n return luminance > 0.7 ? '#71717A' : 'rgba(250, 250, 250, 0.65)';\n}\n\nfunction parseHexColor(color: string): { r: number; g: number; b: number } | null {\n const normalized = color.trim().replace('#', '');\n if (!/^[0-9a-f]{3}([0-9a-f]{3})?$/i.test(normalized)) {\n return null;\n }\n\n const hex =\n normalized.length === 3\n ? normalized\n .split('')\n .map((char) => char + char)\n .join('')\n : normalized;\n\n return {\n r: Number.parseInt(hex.slice(0, 2), 16),\n g: Number.parseInt(hex.slice(2, 4), 16),\n b: Number.parseInt(hex.slice(4, 6), 16),\n };\n}\n\n//#endregion\n\n//#region ----- Layout helpers -----\n\n/** Dashboard tiles are usually small — default to the tighter layout. */\nexport function resolveStickyNoteLayoutVariant(width: number, height: number): AXPStickyNoteLayoutVariant {\n if (width < 180 || height < 120) {\n return 'mini';\n }\n\n return 'standard';\n}\n\nexport function shouldShowStickyNoteEmptyHint(height: number): boolean {\n return height >= 72;\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXTextAreaComponent, AXTextAreaModule } from '@acorex/components/text-area';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n HostListener,\n inject,\n signal,\n viewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXPDashboardWidgetComponent, AXPDashboardWidgetContainerSize } from '../../dashboard-widget-base';\nimport {\n isStickyNoteEmpty,\n resolveStickyNoteBackgroundColor,\n resolveStickyNoteLayoutVariant,\n resolveStickyNoteMutedTextColor,\n resolveStickyNoteText,\n resolveStickyNoteTextColor,\n shouldShowStickyNoteEmptyHint,\n STICKY_NOTE_COLOR_PRESETS,\n} from './sticky-note-widget.utils';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n templateUrl: './sticky-note-widget.component.html',\n styleUrls: ['./sticky-note-widget.component.css'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, FormsModule, AXTextAreaModule, AXTranslationModule],\n})\nexport class AXPStickyNoteWidgetViewComponent extends AXPDashboardWidgetComponent {\n //#region ----- Services & Dependencies -----\n\n private readonly elementRef = inject(ElementRef);\n\n //#endregion\n\n //#region ----- State Signals -----\n\n protected readonly isEditing = signal(false);\n protected readonly draftText = signal('');\n protected readonly draftBackgroundColor = signal<string | null>(null);\n protected readonly containerWidth = signal(0);\n protected readonly containerHeight = signal(0);\n\n private readonly noteEditor = viewChild<AXTextAreaComponent>('noteEditor');\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n constructor() {\n super();\n effect(() => {\n const editor = this.noteEditor();\n if (!this.isEditing() || !editor) {\n return;\n }\n\n queueMicrotask(() => editor.focus());\n });\n }\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly colorPresets = STICKY_NOTE_COLOR_PRESETS;\n\n protected readonly persistedNoteText = computed(() =>\n resolveStickyNoteText(this.options(), this.node.defaultValue),\n );\n\n protected readonly backgroundColor = computed(() => {\n const draftColor = this.draftBackgroundColor();\n if (draftColor) {\n return draftColor;\n }\n\n return resolveStickyNoteBackgroundColor(this.options()['backgroundColor']);\n });\n\n protected readonly textColor = computed(() => resolveStickyNoteTextColor(this.backgroundColor()));\n protected readonly mutedTextColor = computed(() => resolveStickyNoteMutedTextColor(this.backgroundColor()));\n\n protected readonly isEmpty = computed(() => isStickyNoteEmpty(this.persistedNoteText()));\n\n protected readonly layoutVariant = computed(() =>\n resolveStickyNoteLayoutVariant(this.containerWidth(), this.containerHeight()),\n );\n\n protected readonly showEmptyHint = computed(() => shouldShowStickyNoteEmptyHint(this.containerHeight()));\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n @HostListener('document:click', ['$event'])\n protected handleClickOutside(event: MouseEvent): void {\n if (!this.isEditing()) {\n return;\n }\n\n const clickedInside = this.elementRef.nativeElement.contains(event.target as Node);\n if (!clickedInside) {\n this.saveChanges();\n }\n }\n\n @HostListener('document:keydown', ['$event'])\n protected handleDocumentKeydown(event: KeyboardEvent): void {\n if (!this.isEditing()) {\n return;\n }\n\n if (event.key === 'Escape') {\n event.preventDefault();\n this.saveChanges();\n return;\n }\n\n if (event.key === 'Enter' && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n this.saveChanges();\n }\n }\n\n protected activateEdit(): void {\n if (this.isEditing()) {\n return;\n }\n\n this.draftText.set(this.persistedNoteText());\n this.draftBackgroundColor.set(null);\n this.isEditing.set(true);\n }\n\n protected handleDraftChange(event: AXValueChangedEvent<string>): void {\n if (event.isUserInteraction) {\n this.draftText.set(event.value ?? '');\n }\n }\n\n protected setColor(color: string, event: MouseEvent): void {\n event.stopPropagation();\n this.draftBackgroundColor.set(color);\n }\n\n //#endregion\n\n //#region ----- Container Resize -----\n\n protected override onContainerSizeChanged(size: AXPDashboardWidgetContainerSize): void {\n this.containerWidth.set(size.width);\n this.containerHeight.set(size.height);\n }\n\n //#endregion\n\n //#region ----- Private Helpers -----\n\n private saveChanges(): void {\n const nextText = this.draftText().trimEnd();\n const nextBackground = this.draftBackgroundColor();\n const persistedBackground = resolveStickyNoteBackgroundColor(this.options()['backgroundColor']);\n const updates: Record<string, string> = {};\n\n if (nextText !== this.persistedNoteText()) {\n updates['noteText'] = nextText;\n }\n\n if (nextBackground && nextBackground !== persistedBackground) {\n updates['backgroundColor'] = nextBackground;\n }\n\n if (Object.keys(updates).length > 0) {\n this.setOptions(updates);\n }\n\n this.draftBackgroundColor.set(null);\n this.isEditing.set(false);\n }\n\n //#endregion\n}\n\n//#endregion\n","<div\n class=\"sticky-note sticky-note--{{ layoutVariant() }}\"\n [class.sticky-note--editing]=\"isEditing()\"\n [class.sticky-note--empty]=\"isEmpty() && !isEditing()\"\n [style.--note-bg]=\"backgroundColor()\"\n [style.--note-text]=\"textColor()\"\n [style.--note-muted]=\"mutedTextColor()\"\n (dblclick)=\"activateEdit()\"\n>\n <span class=\"sticky-note__fold\" aria-hidden=\"true\"></span>\n\n <div class=\"sticky-note__content\">\n <!-- ----- Subtle empty hint ----- -->\n @if (!isEditing() && isEmpty() && showEmptyHint()) {\n <p class=\"sticky-note__hint\">{{ '@dashboard:widgets.sticky-note.empty-hint' | translate | async }}</p>\n }\n\n <!-- ----- Read-only note body when not editing ----- -->\n @if (!isEditing() && !isEmpty()) {\n <p class=\"sticky-note__text\">{{ persistedNoteText() }}</p>\n }\n\n <div\n class=\"sticky-note__editor-host\"\n [class.sticky-note__editor-host--hidden]=\"!isEditing()\"\n (click)=\"$event.stopPropagation()\"\n >\n <ax-text-area\n #noteEditor\n class=\"sticky-note__editor\"\n look=\"none\"\n [ngModel]=\"draftText()\"\n (onValueChanged)=\"handleDraftChange($event)\"\n [placeholder]=\"('@dashboard:widgets.sticky-note.placeholder' | translate | async)!\"\n ></ax-text-area>\n </div>\n </div>\n\n @if (isEditing()) {\n <div class=\"sticky-note__palette\" role=\"listbox\" [attr.aria-label]=\"('@dashboard:widgets.sticky-note.color-palette' | translate | async)!\">\n @for (preset of colorPresets; track preset) {\n <button\n type=\"button\"\n class=\"sticky-note__swatch\"\n role=\"option\"\n [attr.aria-selected]=\"backgroundColor() === preset\"\n [class.sticky-note__swatch--selected]=\"backgroundColor() === preset\"\n [style.background-color]=\"preset\"\n (click)=\"setColor(preset, $event)\"\n ></button>\n }\n </div>\n }\n</div>\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, createStringProperty } from '@acorex-platform/framework-shared/widget-core';\nimport { RootConfig } from '@acorex-platform/module-dashboard-management-client/contracts';\n\nimport { AXP_BG_COLOR_PROPERTY, AXP_DATA_PROPERTY_GROUP } from '@acorex-platform/framework-client/layout/widgets';\nimport { AXP_WIDGETS_UTILITY_CATEGORY } from '../../widget-categories.type';\nimport { AXP_UTILITY_COMPACT_SQUARE_DIMENSIONS } from '../utility-widget.dimensions';\nimport { AXP_DASHBOARD_SHARED_SUB_UTILITY_NOTES } from '../../widget-subcategories.type';\n\nexport const AXPStickyNoteWidget: AXPWidgetConfig = {\n name: RootConfig.widgets.stickyNote,\n title: '@dashboard:widgets.sticky-note.widget-title',\n description: '@dashboard:widgets.sticky-note.widget-description',\n categories: AXP_WIDGETS_UTILITY_CATEGORY,\n subCategory: AXP_DASHBOARD_SHARED_SUB_UTILITY_NOTES,\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-sticky-note',\n properties: [\n createStringProperty({\n name: 'noteText',\n title: '@dashboard:widgets.sticky-note.note-text',\n path: 'options.noteText',\n group: AXP_DATA_PROPERTY_GROUP,\n defaultValue: '',\n }),\n {\n ...AXP_BG_COLOR_PROPERTY,\n title: '@dashboard:widgets.sticky-note.background-color',\n },\n ],\n components: {\n view: {\n component: () => import('./sticky-note-widget.component').then((c) => c.AXPStickyNoteWidgetViewComponent),\n },\n },\n meta: {\n title: { visible: false },\n dimensions: AXP_UTILITY_COMPACT_SQUARE_DIMENSIONS,\n },\n};\n","//#region ---- Imports ----\n\nimport { AXPEntityAction, AXPEntityCommandScope, AXPEntityMasterSingleLayoutView } from '@acorex-platform/framework-shared/entity';\nimport {\n AXPEntityActionPlugin,\n actionExists,\n cloneLayoutArrays,\n ensureLayoutPropertyView,\n ensureLayoutSection,\n ensureListActions,\n resolveEntityPluginDetailPageOrder,\n} from '@acorex-platform/framework-client/layout/entity';\n\n//#endregion\n\n//#region ---- Types ----\n\n/** How to show dashboards in entity single view. */\nexport type DashboardDisplayMode = 'section' | 'page';\n\n/** Component key used when display is `page`. Register via {@link AXP_PAGE_COMPONENT_PROVIDER}. */\nexport const ENTITY_DASHBOARD_PAGE_COMPONENT_KEY = 'entity-dashboard-page';\n\nexport type DashboardPluginOptions = {\n /** Where to show the dashboard: section (inline) or page (separate tab). Default `page`. */\n display?: DashboardDisplayMode;\n /** Icon for the dashboard page. Default `fa-light fa-gauge-high`. */\n icon?: string;\n /** Title override for dashboard section/page. Default `@dashboard-management:dashboards.terms.dashboard`. */\n title?: string;\n};\n\n//#endregion\n\n//#region ---- Plugin ----\n\n/**\n * Dashboard plugin.\n * - Binds one dashboard layout per entity type (`scope: E`, `scopeRef.entityType`).\n * - When display is `page` (default), adds a page tab with {@link ENTITY_DASHBOARD_PAGE_COMPONENT_KEY}.\n * - When display is `section`, embeds the dashboard grid in the single layout.\n * - Adds a list action to open the entity dashboard page.\n * - Runtime entity record context is passed to dashboard widgets via `__dashboardEntityContext`.\n */\nexport const dashboardPlugin: AXPEntityActionPlugin = {\n name: 'dashboard',\n order: 45,\n apply: (ctx, options?: DashboardPluginOptions) => {\n const opts = options ?? {};\n const displayMode: DashboardDisplayMode = opts.display ?? 'page';\n const displayTitle = opts.title?.trim() || '@dashboard-management:dashboards.terms.dashboard';\n const entityType = `${ctx.entity.module}.${ctx.entity.name}`;\n\n //#region ---- Group & Property ----\n\n const groups = ctx.groups.list() ?? [];\n if (!groups.some((g: { id?: string }) => g.id === 'dashboard')) {\n ctx.groups.add({ id: 'dashboard', title: displayTitle } as any);\n }\n\n const props = ctx.properties.list();\n if (!props.some((p: { name?: string }) => p.name === 'entityDashboard')) {\n ctx.properties.add({\n name: 'entityDashboard',\n title: displayTitle,\n groupId: 'dashboard',\n schema: {\n dataType: 'object',\n interface: {\n type: 'entity-dashboard',\n options: {\n entityType,\n entityId: '{{ context.eval(\"id\") }}',\n subject: '{{ context.eval(\"title\", { pipes: [\"translate\"] }) }}',\n },\n },\n },\n } as any);\n }\n\n //#endregion\n\n //#region ---- Display Mode ----\n\n if (displayMode === 'section') {\n ctx.interfaces.master.single.update((single) => {\n const next: any = cloneLayoutArrays(\n (single ?? { title: ctx.entity.title, sections: [], properties: [] }) as AXPEntityMasterSingleLayoutView,\n );\n ensureLayoutSection(next, { id: 'dashboard', title: displayTitle, order: 90 } as any);\n ensureLayoutPropertyView(next, {\n name: 'entityDashboard',\n layout: {\n label: { visible: false },\n positions: { lg: { colSpan: 12, order: 6 } },\n },\n } as any);\n return next;\n });\n } else {\n ctx.entity.pages ??= [];\n const pageExists = ctx.entity.pages.some(\n (p: { componentKey?: string }) => p.componentKey === ENTITY_DASHBOARD_PAGE_COMPONENT_KEY,\n );\n const pageOrder = resolveEntityPluginDetailPageOrder(\n { relatedEntities: ctx.entity.relatedEntities, pages: ctx.entity.pages },\n 'dashboard',\n {\n componentKey: ENTITY_DASHBOARD_PAGE_COMPONENT_KEY,\n skipPage: pageExists ? { componentKey: ENTITY_DASHBOARD_PAGE_COMPONENT_KEY } : undefined,\n },\n );\n const page = {\n componentKey: ENTITY_DASHBOARD_PAGE_COMPONENT_KEY,\n title: displayTitle,\n icon: opts.icon ?? 'fa-light fa-gauge-high',\n layout: { order: pageOrder },\n } as any;\n if (!pageExists) {\n ctx.entity.pages.push(page);\n } else {\n const pages = ctx.entity.pages as any[];\n const index = pages.findIndex((p) => p.componentKey === ENTITY_DASHBOARD_PAGE_COMPONENT_KEY);\n if (index >= 0) {\n pages[index] = { ...pages[index], ...page };\n }\n }\n }\n\n //#endregion\n\n //#region ---- List Actions ----\n\n ensureListActions(ctx);\n ctx.interfaces.update((i) => {\n const actions = (i as any).master.list.actions as AXPEntityAction[];\n const cmdName = 'open-entity-dashboard';\n if (!actionExists(actions, cmdName)) {\n actions.push({\n title: '@dashboard-management:dashboards.actions.open-entity-dashboard',\n command: {\n name: cmdName,\n options: {\n entityId: '{{ context.eval(\"id\") }}',\n entityType,\n },\n },\n priority: 'secondary',\n type: 'dashboard',\n separated: true,\n scope: AXPEntityCommandScope.Individual,\n });\n }\n return i as any;\n });\n\n //#endregion\n\n (ctx.entity as any).extensions ??= {};\n (ctx.entity as any).extensions.dashboard = {\n entityType,\n display: displayMode,\n };\n },\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { createMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { Injectable, inject } from '@angular/core';\nimport { get } from 'lodash';\n\nimport { RootConfig } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { buildEntityScopeRef } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport type { AXMCommonDashboardEntityModel } from '@acorex-platform/module-dashboard-management-client/contracts';\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Resolves or creates entity-type dashboards (`scope: E`).\n * One dashboard layout is shared across all records of the same entity type.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMEntityDashboardService {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n\n private readonly dashboardData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.dashboard.name)\n .data<string, AXMCommonDashboardEntityModel, AXMCommonDashboardEntityModel>();\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Finds the dashboard bound to an entity type, if one exists.\n */\n async findEntityDashboard(entityType: string): Promise<AXMCommonDashboardEntityModel | null> {\n const result = await this.dashboardData.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [\n { field: 'scope', operator: { type: 'equal' }, value: 'E' },\n { field: 'scopeRef.entityType', operator: { type: 'equal' }, value: entityType },\n ],\n },\n });\n\n return result.items?.[0] ?? null;\n }\n\n /**\n * Returns the entity-type dashboard, creating an empty one when missing.\n */\n async ensureEntityDashboard(\n entityType: string,\n title?: AXMCommonDashboardEntityModel['title'],\n ): Promise<AXMCommonDashboardEntityModel> {\n const existing = await this.findEntityDashboard(entityType);\n if (existing) {\n return existing;\n }\n\n const dashboardTitle = title ?? createMultiLanguageString('Dashboard');\n const createdId = await this.dashboardData.create({\n title: dashboardTitle,\n description: '',\n widgets: [],\n scope: 'E',\n scopeRef: buildEntityScopeRef(entityType),\n locked: false,\n isArchived: false,\n });\n\n const created = await this.dashboardData.byKey(createdId);\n if (!created) {\n throw new Error('Failed to create entity dashboard');\n }\n return created;\n }\n\n /**\n * Resolves entity type/id from a host entity detail context.\n */\n resolveEntityRefFromContext(\n moduleName: string | null | undefined,\n entityName: string | null | undefined,\n context: Record<string, unknown> | null | undefined,\n ): { entityType: string; entityId: string } | null {\n const entityId = get(context, 'id');\n if (!moduleName || !entityName || typeof entityId !== 'string' || !entityId.trim()) {\n return null;\n }\n return {\n entityType: `${moduleName}.${entityName}`,\n entityId: entityId.trim(),\n };\n }\n\n //#endregion\n}\n\n//#endregion\n","import { InjectionToken } from '@angular/core';\n\n/** When true (provided on the dashboard layout entity tab), the store skips the default list query effect. */\nexport const DASHBOARD_LAYOUT_ENTITY_MODE = new InjectionToken<boolean>('DASHBOARD_LAYOUT_ENTITY_MODE');\n","import { InjectionToken } from '@angular/core';\n\n/** When true (entity dashboard plugin), layout and widgets are view-only. */\nexport const DASHBOARD_READONLY_MODE = new InjectionToken<boolean>('DASHBOARD_READONLY_MODE');\n","import type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\n\nimport { AXPWidgetPropertiesChangedEvent, AXPWidgetPropertyViewerComponent } from '@acorex-platform/framework-client/layout/components';\nimport { Component, OnInit, signal, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n template: `\n @if(widget) {\n <div class=\"px-1\">\n <axp-widget-property-viewer (onChanged)=\"handlePropertyChange($event)\" [widget]=\"widget\">\n </axp-widget-property-viewer>\n </div>\n }\n <ax-footer>\n <ax-prefix></ax-prefix>\n <ax-suffix>\n <ax-button text=\"Cancel\" look=\"solid\" (onClick)=\"handleClose(true)\"> </ax-button>\n <ax-button text=\"Save\" look=\"solid\" color=\"primary\" (onClick)=\"handleClose()\">\n <ax-icon class=\"fa-solid fa-save\"></ax-icon>\n </ax-button>\n </ax-suffix>\n </ax-footer>\n `,\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [AXButtonModule, AXDecoratorModule, AXPWidgetPropertyViewerComponent],\n})\nexport class AXMConfigurationPopup extends AXBasePageComponent implements OnInit {\n widget!: AXPWidgetNode;\n protected readonly widgetData = signal<AXPWidgetNode | null>(null);\n\n override ngOnInit(): void {\n this.widgetData.set(this.widget);\n }\n\n protected async handleClose(isCanceled = false): Promise<void> {\n this.close({\n isCanceled,\n widget: this.widgetData(),\n });\n }\n\n protected handlePropertyChange(event: AXPWidgetPropertiesChangedEvent): void {\n this.widgetData.set(event.values);\n }\n}\n","import { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { RootConfig as SecurityManagementRootConfig } from '@acorex-platform/module-security-management-client/contracts';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPMultiLanguageString, type AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport { AXPLayoutBuilderService, type AXPDialogRef } from '@acorex-platform/framework-client/layout/builder';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { inject, Injectable } from '@angular/core';\nimport {\n buildTenantScopeRef,\n buildUserScopeRef,\n readScopeRoleIds,\n} from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { AXMConfigurationPopup } from './configuration-popup';\nimport { AXMDashboardLayout } from '../../dashboard-services/home-dashboard.type';\n\nexport interface AXMDashboardLayoutDialogOptions {\n /** When false, hides the roles field (e.g. home-dashboard edit). Default: admin + tenant scope. */\n showRoleField?: boolean;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXMDashboardPopupService {\n private readonly popupService = inject(AXPopupService);\n private readonly translateService = inject(AXTranslationService);\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly entityService = inject(AXPEntityService);\n private readonly roleService = this.entityService\n .withEntity(SecurityManagementRootConfig.module.name, SecurityManagementRootConfig.entities.roles.name)\n .data<any, any>();\n private readonly sessionService = inject(AXPSessionService);\n\n async generateDashboardLayout(\n data: Partial<AXMDashboardLayout>,\n isAdmin: boolean,\n dialogOptions?: AXMDashboardLayoutDialogOptions,\n ): Promise<AXMDashboardLayout | void> {\n const showRoleByDefault = isAdmin && data?.scope !== 'U';\n const showRoleField = dialogOptions?.showRoleField !== undefined ? dialogOptions.showRoleField : showRoleByDefault;\n const roles = showRoleField\n ? (\n await this.roleService\n .query({ skip: 0, take: 100 })\n .catch(() => ({ items: [] as Array<{ id: string; title: string }> }))\n ).items.map((i: { id: string; title: string }) => ({ id: i.id, title: i.title }))\n : [];\n\n const result = await this.layoutBuilder\n .create()\n .dialog<AXMDashboardLayout | undefined>((dialog) => {\n dialog\n .setTitle('@dashboard:dashboard-info')\n .setSize('sm')\n .setContext({\n title: this.normalizeTitleForFormContext(data?.title),\n description: this.normalizeDescriptionForFormContext(data?.description),\n selectedRoleIds: readScopeRoleIds((data as AXMDashboardLayout | undefined)?.scopeRef),\n locked: (data as any)?.locked ?? false,\n isAdmin,\n })\n .content((flex) => {\n flex\n .setDirection('column')\n .formField('@general:terms.common.title', (field) => {\n field.path('title');\n field.textBox({\n placeholder: '@general:terms.common.title',\n multiLanguage: true,\n validations: [{ rule: 'required' }],\n } as any);\n })\n .formField('@general:terms.common.description', (field) => {\n field.path('description');\n field.largeTextBox({\n placeholder: '@general:terms.common.description',\n rows: 3,\n multiLanguage: true,\n } as any);\n })\n .formField('@dashboard:lock', (field) => {\n field.path('locked');\n field.toggleSwitch({});\n });\n // .formField('@dashboard:roles', (field) => {\n // field.path('selectedRoleIds');\n // field.visible(showRoleField ? 'true' : 'false');\n // field.selectionList({\n // valueField: 'id',\n // textField: 'title',\n // dataSource: roles,\n // multiple: true,\n // placeholder: '@dashboard:select-roles',\n // });\n // });\n })\n .setActions((actions) => {\n actions\n .cancel('@general:actions.cancel.title')\n .submit('@general:actions.save.title', { shortcuts: ['ctrl+s'] });\n })\n .confirmCloseWhenDirty()\n .onAction(async (dialogRef) => {\n const context = dialogRef.context();\n const action = dialogRef.action();\n if (!context || action === 'cancel') {\n return undefined;\n }\n const formData = context as Record<string, unknown>;\n const now = new Date();\n const userId = this.sessionService.user?.id ?? '';\n const tenantId = this.sessionService.tenant?.id ?? '';\n const scope = (data?.scope ?? (isAdmin ? 'T' : 'U')) as 'U' | 'T';\n const roleIds = showRoleField\n ? ((formData['selectedRoleIds'] as string[] | undefined) ?? [])\n : readScopeRoleIds(data?.scopeRef);\n return {\n ...(data as AXMDashboardLayout),\n title: this.normalizeTitleFromFormSubmit(formData['title']),\n description: this.normalizeDescriptionFromFormSubmit(formData['description']),\n scopeRef: scope === 'T' ? buildTenantScopeRef(tenantId, roleIds) : buildUserScopeRef(userId),\n locked: this.normalizeBooleanInput(formData['locked'], data?.locked ?? false),\n scope,\n createdBy: userId,\n createdAt: now,\n updatedBy: userId,\n updatedAt: now,\n } as AXMDashboardLayout;\n });\n })\n .show();\n\n if (this.isDialogCancelled(result)) {\n return;\n }\n\n return result;\n }\n\n async handlePopupConfiguration(widget: AXPWidgetNode): Promise<AXPWidgetNode | void> {\n const result = await this.popupService.open(AXMConfigurationPopup, {\n header: true,\n size: 'sm',\n draggable: true,\n hasBackdrop: true,\n title: await this.translateService.translateAsync('@dashboard:widget-configuration'),\n data: { widget },\n });\n\n if (!result.data) {\n return;\n }\n\n const { isCanceled, ...rest } = result.data;\n if (isCanceled) {\n return;\n }\n\n return rest.widget as AXPWidgetNode;\n }\n\n /**\n * With `confirmCloseWhenDirty`, cancel resolves `show()` with an {@link AXPDialogRef}\n * (action/close/context/...) instead of the `onAction` handler return value.\n */\n private isDialogCancelled(outcome: unknown): boolean {\n if (outcome == null) {\n return true;\n }\n\n const ref = outcome as Partial<AXPDialogRef>;\n if (typeof ref.action !== 'function') {\n return false;\n }\n\n return ref.action() === 'cancel';\n }\n\n //#region ---- Description (multi-language) helpers ----\n\n private normalizeTitleForFormContext(\n value: AXPMultiLanguageString | string | undefined | null,\n ): AXPMultiLanguageString | string {\n if (value == null || value === '') {\n return '';\n }\n if (typeof value === 'object' && !Array.isArray(value)) {\n return { ...(value as Record<string, string>) };\n }\n return (value as string).toString();\n }\n\n private normalizeTitleFromFormSubmit(raw: unknown): AXPMultiLanguageString {\n if (raw == null || raw === '') {\n return '';\n }\n if (typeof raw === 'object' && !Array.isArray(raw)) {\n return raw as AXPMultiLanguageString;\n }\n return (raw as string).toString().trim();\n }\n\n private normalizeDescriptionForFormContext(\n value: AXPMultiLanguageString | string | undefined | null,\n ): AXPMultiLanguageString | string {\n if (value == null) {\n return '';\n }\n if (typeof value === 'object' && !Array.isArray(value)) {\n return { ...(value as Record<string, string>) };\n }\n return (value as string).toString();\n }\n\n private normalizeDescriptionFromFormSubmit(raw: unknown): AXPMultiLanguageString {\n if (raw == null || raw === '') {\n return '';\n }\n if (typeof raw === 'object' && !Array.isArray(raw)) {\n return raw as AXPMultiLanguageString;\n }\n return (raw as string).toString().trim();\n }\n\n private normalizeBooleanInput(raw: unknown, fallback = false): boolean {\n if (raw === undefined || raw === null || raw === '') {\n return Boolean(fallback);\n }\n if (typeof raw === 'boolean') {\n return raw;\n }\n if (typeof raw === 'string') {\n const normalized = raw.trim().toLowerCase();\n if (normalized === 'true' || normalized === '1' || normalized === 'yes' || normalized === 'on') {\n return true;\n }\n if (normalized === 'false' || normalized === '0' || normalized === 'no' || normalized === 'off') {\n return false;\n }\n }\n if (typeof raw === 'number') {\n return raw !== 0;\n }\n return Boolean(raw);\n }\n\n //#endregion\n}\n","//#region ---- Imports ----\nimport { AXPWidgetGroupEnum } from '@acorex-platform/framework-shared/widget-core';\nimport { RootConfig as SecurityManagementRootConfig } from '@acorex-platform/module-security-management-client/contracts';\n\nimport { AXPAdministrationPermissionKeys, RootConfig } from '@acorex-platform/module-dashboard-management-client/contracts';\n\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPDataGenerator, AXPDeviceService } from '@acorex-platform/framework-client/core';\nimport { AXP_WIDGET_PICKER_TAB_CONTEXT, AXPWidgetPickerService } from '@acorex-platform/framework-client/layout/designer';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { type AXPMultiLanguageString, AXPPlatformScope, type AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport { AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXGridLayoutEvent, AXGridLayoutNode, AXGridLayoutOptions } from '@acorex/components/grid-layout-builder';\nimport { AXTranslationService } from '@acorex/core/translation';\n\nimport {\n AXMCommonDashboardEntityModel,\n AXPHomeDashboardSetting,\n buildTenantScopeRef,\n buildUserScopeRef,\n normalizeDashboardScopeRef,\n readScopeRoleIds,\n readScopeTenantId,\n readScopeUserId,\n} from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { computed, effect, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { patchState, signalStore, withComputed, withHooks, withMethods, withState } from '@ngrx/signals';\nimport { fromEvent, map } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { DASHBOARD_LAYOUT_ENTITY_MODE } from '../dashboard-layout-page/dashboard-layout-entity-mode.token';\nimport { DASHBOARD_READONLY_MODE } from '../dashboard-layout-page/dashboard-readonly-mode.token';\nimport { AXMDashboardPopupService } from '../home-dashboard/dashboard-popups/dashboard-popup.service';\nimport {\n DEFAULT_DASHBOARD_GRID_GAP,\n getDashboardBreakpointFromWindow,\n getDashboardColumnsForBreakpoint,\n resolveDashboardCellHeightForBreakpoint,\n resolveDashboardWidgetLayoutNode,\n} from '../shared/dashboard-breakpoints.util';\nimport { AXPDashboardWidgetDimensions, enrichDashboardLayoutNode, resolveDashboardMetaLayoutNode } from '../shared/dashboard-dimensions.util';\nimport { AXMDashboardBreakpoint, AXMDashboardLayout, AXMDashboardWidgetData } from './home-dashboard.type';\n\n//#endregion\n\n//#region ---- Types ----\n\n/**\n * State container for dashboard feature.\n */\ninterface DashboardState {\n dashboards: AXMDashboardLayout[];\n allDashboards: AXMDashboardLayout[];\n currentDashboardId: string | null;\n isAdmin: boolean;\n /**\n * Effective role ids for the active workspace\n * (`User.roleIds` ∪ active `TenantUser.roleId`) — mirrors server session authz.\n */\n userRoleIds: string[];\n dashboardsOption: AXGridLayoutOptions;\n /** Measured grid container width used to keep 1×1 cells square. */\n gridContainerWidth: number;\n isLoading: boolean;\n currentBreakpoint: AXMDashboardBreakpoint;\n /** True while a breakpoint transition is in progress; suppresses layout saves */\n isBreakpointTransitioning: boolean;\n /**\n * When true, the automatic list query effect is skipped (entity detail layout tab uses a\n * component-scoped store hydrated from `rootContext` instead of the shared list query).\n */\n entityDetailLayoutLock: boolean;\n /** View-only mode for entity dashboard plugin (no layout or widget edits). */\n readonly: boolean;\n}\n\ntype SessionUserMinimal = { id?: string } | undefined | null;\n\nconst readTenantId = (sessionService: AXPSessionService): string | undefined => {\n const tenantId = sessionService.tenant?.id;\n return typeof tenantId === 'string' && tenantId.trim() ? tenantId.trim() : undefined;\n};\n\nconst readApplicationId = (sessionService: AXPSessionService): string | undefined => {\n const applicationId = sessionService.application?.id;\n return typeof applicationId === 'string' && applicationId.trim() ? applicationId.trim() : undefined;\n};\n\n//#endregion\n\n//#region ---- Utility Functions ----\n\n/**\n * Builds grid layout options with breakpoint-aware cell height.\n */\nconst createDashboardsOption = (containerWidth = 0): AXGridLayoutOptions => {\n const bp = getDashboardBreakpointFromWindow();\n const column = getDashboardColumnsForBreakpoint(bp);\n const gap = DEFAULT_DASHBOARD_GRID_GAP;\n const width = containerWidth > 0 ? containerWidth : typeof window !== 'undefined' ? window.innerWidth : 0;\n return {\n float: false,\n cellHeight: resolveDashboardCellHeightForBreakpoint(bp, width, gap),\n gap,\n minRow: 9,\n column,\n };\n};\n\n/**\n * Keeps transient layout drafts for entity-detail layout tab re-mounts.\n * This prevents stale `rootContext` snapshots from overwriting in-session grid edits.\n */\nconst entityLayoutDrafts = new Map<string, AXMDashboardLayout>();\n\n/**\n * Creates the initial state for the dashboard store.\n */\nconst createInitialState = (): DashboardState => ({\n dashboards: [],\n allDashboards: [],\n currentDashboardId: null,\n isAdmin: false,\n userRoleIds: [],\n dashboardsOption: createDashboardsOption(),\n gridContainerWidth: 0,\n isLoading: false,\n currentBreakpoint: getDashboardBreakpointFromWindow(),\n isBreakpointTransitioning: false,\n entityDetailLayoutLock: false,\n readonly: false,\n});\n\n/**\n * Migrates a widget config from the old flat format to the new per-breakpoint format.\n * Old format: { id, x, y, width, height, minWidth, ... }\n * New format: { id, lg: { ... }, md: { ... }, sm: { ... } }\n */\nconst migrateWidgetConfig = (widget: AXMDashboardWidgetData): AXMDashboardWidgetData => {\n const config = widget.config as any;\n // Already in new format (has lg key as an object)\n if (config && typeof config.lg === 'object' && config.lg !== null) {\n return widget;\n }\n // Old flat format: convert to per-breakpoint\n const { id, ...rest } = config || {};\n const widgetId = id || AXPDataGenerator.uuid();\n return {\n ...widget,\n config: {\n id: widgetId,\n lg: { id: widgetId, ...rest } as AXGridLayoutNode,\n md: { id: widgetId, ...rest } as AXGridLayoutNode,\n sm: { id: widgetId, width: 1, height: rest.height || 2 } as AXGridLayoutNode,\n },\n };\n};\n\n/**\n * Maps an entity model to a dashboard layout model.\n * Automatically migrates old flat widget configs to the new per-breakpoint format.\n */\nconst modelToDashboardLayout = (model: AXMCommonDashboardEntityModel): AXMDashboardLayout => ({\n id: model.id || '',\n title: model.title,\n description: model.description,\n widgets: (model.widgets || []).map((widget) => migrateWidgetConfig(widget as AXMDashboardWidgetData)),\n createdBy: readScopeUserId(model.scopeRef) ?? model.auditInfo?.created?.by?.id,\n isArchived: model.isArchived,\n archivedAt: model.archivedAt,\n locked: model.locked,\n createdAt: model.auditInfo?.created?.at,\n updatedAt: model.auditInfo?.updated?.at,\n updatedBy: model.auditInfo?.updated?.by?.id,\n scope: model.scope,\n scopeRef: normalizeDashboardScopeRef(model.scope, model.scopeRef, {\n userId: readScopeUserId(model.scopeRef) ?? model.auditInfo?.created?.by?.id,\n roleIds: readScopeRoleIds(model.scopeRef),\n }),\n categoryIds: model.categoryIds,\n});\n\n/**\n * Maps a dashboard layout to an entity model for persistence.\n */\nconst sanitizeDashboardWidgetNode = (widget: AXMDashboardWidgetData): AXMDashboardWidgetData => {\n if (!widget.node) {\n return widget;\n }\n\n const { __meta__, ...node } = widget.node as AXPWidgetNode & { __meta__?: unknown };\n return { ...widget, node: node as AXPWidgetNode };\n};\n\nconst appendCopySuffixToTitle = (title: AXPMultiLanguageString, suffix: string): AXPMultiLanguageString => {\n if (title == null || title === '') {\n return suffix.trim();\n }\n if (typeof title === 'string') {\n return `${title}${suffix}`;\n }\n if (typeof title === 'object' && !Array.isArray(title)) {\n return Object.fromEntries(Object.entries(title).map(([lang, value]) => [lang, `${value}${suffix}`]));\n }\n return title;\n};\n\nconst cloneDashboardWidget = (widget: AXMDashboardWidgetData): AXMDashboardWidgetData => {\n const newId = AXPDataGenerator.uuid();\n const { config, node } = widget;\n\n const cloneResolvedLayout = (breakpoint: AXMDashboardBreakpoint): AXGridLayoutNode => {\n const resolved = resolveDashboardWidgetLayoutNode(config, breakpoint);\n return { ...resolved, id: newId };\n };\n\n const clonedConfig: typeof config = {\n ...config,\n id: newId,\n sm: cloneResolvedLayout('sm'),\n md: cloneResolvedLayout('md'),\n lg: cloneResolvedLayout('lg'),\n xl: cloneResolvedLayout('xl'),\n '2xl': cloneResolvedLayout('2xl'),\n '3xl': cloneResolvedLayout('3xl'),\n '4xl': cloneResolvedLayout('4xl'),\n };\n\n if (!node) {\n return { config: clonedConfig };\n }\n\n const randomId = AXPDataGenerator.uuid();\n const { __meta__, ...nodeWithoutMeta } = node as AXPWidgetNode & { __meta__?: unknown };\n const clonedNode = structuredClone(nodeWithoutMeta) as AXPWidgetNode;\n clonedNode.name = `${node.type}-${randomId}`;\n clonedNode.path = `${node.type}-${randomId}`;\n\n if (node.type === RootConfig.widgets.shortcut) {\n return {\n config: clonedConfig,\n node: { ...clonedNode, __meta__: { added: true } } as AXPWidgetNode,\n };\n }\n\n return { config: clonedConfig, node: clonedNode };\n};\n\nconst dashboardLayoutToModel = (layout: AXMDashboardLayout): AXMCommonDashboardEntityModel => ({\n id: layout.id,\n title: layout.title,\n description: layout.description ?? '',\n widgets: layout.widgets.map(sanitizeDashboardWidgetNode),\n isArchived: layout.isArchived,\n archivedAt: layout.archivedAt,\n locked: layout.locked,\n categoryIds: layout.categoryIds,\n scope: layout.scope,\n scopeRef: normalizeDashboardScopeRef(layout.scope, layout.scopeRef, {\n userId: layout.createdBy,\n roleIds: readScopeRoleIds(layout.scopeRef),\n }),\n auditInfo: {\n created: layout.createdAt ? { at: layout.createdAt, by: layout.createdBy ? ({ id: layout.createdBy, type: 'user' } as any) : undefined } : undefined,\n updated: layout.updatedAt ? { at: layout.updatedAt, by: layout.updatedBy ? ({ id: layout.updatedBy, type: 'user' } as any) : undefined } : undefined,\n },\n});\n\nconst dashboardLayoutToCreateModel = (layout: Omit<AXMDashboardLayout, 'id'> & { id?: string }): Omit<AXMCommonDashboardEntityModel, 'id'> => {\n const { id: _id, ...model } = dashboardLayoutToModel({ ...layout, id: layout.id ?? '' });\n return model;\n};\n\n/**\n * Safely reads the current user id from the session service.\n */\nconst readUserId = (sessionService: AXPSessionService): string | undefined => {\n const candidate = sessionService.user as SessionUserMinimal;\n return candidate?.id;\n};\n\n/**\n * Extracts role ids from scoped UserRole assignment rows for the current workspace.\n * Prefers application-matched rows, then tenant-wide rows, then unions all matching.\n */\nconst extractRoleIdsFromUserRoleAssignments = (assignments: Array<{ roleIds?: unknown; scopeInfo?: { applicationId?: string } }>, applicationId: string | undefined): string[] => {\n if (!Array.isArray(assignments) || assignments.length === 0) {\n return [];\n }\n\n const preferApp = applicationId && assignments.filter((row) => row.scopeInfo?.applicationId === applicationId);\n const preferTenantWide = assignments.filter((row) => !row.scopeInfo?.applicationId);\n const selected = preferApp && preferApp.length > 0 ? preferApp : preferTenantWide.length > 0 ? preferTenantWide : assignments;\n\n const roleIds = new Set<string>();\n for (const row of selected) {\n if (!Array.isArray(row.roleIds)) {\n continue;\n }\n for (const id of row.roleIds) {\n if (typeof id === 'string' && id.trim()) {\n roleIds.add(id.trim());\n }\n }\n }\n return [...roleIds];\n};\n\n/**\n * Determines whether the given dashboard is assigned to any of the user's roles.\n */\nconst hasMatchingRole = (dashboard: AXMDashboardLayout, userRoleIds: string[]): boolean => {\n if (userRoleIds.length === 0) return false;\n const roleIds = readScopeRoleIds(dashboard.scopeRef);\n return roleIds.length > 0 && userRoleIds.some((id) => roleIds.includes(id));\n};\n\n/**\n * Determines whether a personal dashboard belongs to the signed-in user.\n */\nconst isPersonalDashboardOwnedByUser = (dashboard: AXMDashboardLayout, userId: string): boolean => {\n return dashboard.scope === 'U' && dashboard.createdBy === userId;\n};\n\n/**\n * Determines whether a tenant dashboard is visible for a user (role intersection required).\n */\nconst isTenantDashboardVisibleForUser = (dashboard: AXMDashboardLayout, userRoleIds: string[]): boolean => {\n if (dashboard.scope !== 'T' || dashboard.isArchived === true) {\n return false;\n }\n return hasMatchingRole(dashboard, userRoleIds);\n};\n\n/**\n * Computes effective layout options based on breakpoint, lock, admin and role restrictions.\n * Always derives drag/resize state from the dashboard model — never from base options.\n * Small (`sm`) breakpoint never allows drag/resize, regardless of lock/scope/admin.\n */\nconst deriveLayoutOptions = (baseOptions: AXGridLayoutOptions, dashboard: AXMDashboardLayout | undefined, isAdmin: boolean, isDesktop: boolean, readonly: boolean, breakpoint: AXMDashboardBreakpoint): AXGridLayoutOptions => {\n const { disableDrag: _dd, disableResize: _dr, ...cleanBase } = baseOptions;\n\n if (breakpoint === 'sm') {\n return { ...cleanBase, disableDrag: true, disableResize: true };\n }\n if (!dashboard) return cleanBase;\n if (readonly) return { ...cleanBase, disableDrag: true, disableResize: true };\n if (isAdmin) return cleanBase;\n if (dashboard.locked === true || dashboard.scope === 'T') {\n return { ...cleanBase, disableDrag: true, disableResize: true };\n }\n\n return { ...cleanBase, disableDrag: false, disableResize: false };\n};\n\n/**\n * Checks if a widget is locked for the current user based on dashboard and role context.\n */\nconst isWidgetLockedForUser = (dashboard: AXMDashboardLayout | undefined, isAdmin: boolean, userRoleIds: string[], readonly: boolean): boolean => {\n if (!dashboard) return false;\n if (readonly) return true;\n if (isAdmin) return false;\n if (dashboard.locked === true) return true;\n return hasMatchingRole(dashboard, userRoleIds) && dashboard.scope === 'T';\n};\n\n/**\n * Determines if a widget can be configured by the current user.\n */\nconst canConfigureWidgetForUser = (dashboard: AXMDashboardLayout | undefined, isAdmin: boolean, userRoleIds: string[], widgetHasConfiguration: boolean, readonly: boolean): boolean => {\n if (!dashboard) return true;\n if (readonly) return false;\n if (isAdmin) return widgetHasConfiguration;\n if (dashboard.locked === true) return false;\n if (hasMatchingRole(dashboard, userRoleIds) && dashboard.scope === 'T') return false;\n return widgetHasConfiguration;\n};\n\n/**\n * Filters dashboards for the home view (non-admin): personal (scope U, owned by user) or tenant (scope T, role match).\n */\nconst filterDashboardsForUser = (dashboards: AXMDashboardLayout[], isAdmin: boolean, userId: string | undefined, userRoleIds: string[]): AXMDashboardLayout[] => {\n if (isAdmin) {\n return dashboards.filter((d) => d.scope === 'T');\n }\n\n if (!userId) {\n return [];\n }\n\n return dashboards.filter((d) => {\n if (d.scope === 'E') {\n return false;\n }\n const isOwnedPersonalDashboard = isPersonalDashboardOwnedByUser(d, userId);\n const isRoleMatchedTenantDashboard = isTenantDashboardVisibleForUser(d, userRoleIds);\n return isOwnedPersonalDashboard || isRoleMatchedTenantDashboard;\n });\n};\n\n/**\n * Default home order: personal My Workspace first, then tenant-scoped role boards.\n * MaintainDashboards only unlocks edit/create — it must not change the default selection.\n */\nconst sortHomeDashboards = (dashboards: AXMDashboardLayout[]): AXMDashboardLayout[] => {\n const rank = (dashboard: AXMDashboardLayout): number => {\n if (dashboard.scope === 'U') return 0;\n if (dashboard.scope === 'T') return 1;\n return 2;\n };\n return [...dashboards].sort((a, b) => rank(a) - rank(b));\n};\n\n//#endregion\n\n//#region ---- Signal Store ----\n/**\n * Dashboard Signal Store: manages dashboards, widgets and permissions.\n */\nexport const AXMDashboardStore = signalStore(\n { providedIn: 'root' },\n\n //#region ---- Initial State ----\n withState(() => createInitialState()),\n //#endregion\n\n //#region ---- Computed Properties ----\n withComputed((state, deviceService = inject(AXPDeviceService)) => ({\n selectedDashboard: computed(() => state.dashboards().find((dashboard) => dashboard.id === state.currentDashboardId()) || null),\n isUserAdmin: computed(() => state.isAdmin()),\n availableDashboards: computed(() => state.allDashboards()),\n currentLayoutOptions: computed(() => {\n const currentDashboard = state.dashboards().find((dashboard) => dashboard.id === state.currentDashboardId());\n const baseOptions = state.dashboardsOption();\n const isDesktop = deviceService.isDesktopDevice();\n const bp = state.currentBreakpoint();\n const column = getDashboardColumnsForBreakpoint(bp);\n const gap = typeof baseOptions.gap === 'number' ? baseOptions.gap : DEFAULT_DASHBOARD_GRID_GAP;\n const containerWidth = state.gridContainerWidth() > 0 ? state.gridContainerWidth() : typeof window !== 'undefined' ? window.innerWidth : 0;\n // md/lg: square 1×1 cells; sm: keep fixed cellHeight\n const optionsWithColumn = {\n ...baseOptions,\n column,\n gap,\n cellHeight: resolveDashboardCellHeightForBreakpoint(bp, containerWidth, gap),\n };\n return deriveLayoutOptions(optionsWithColumn, currentDashboard || undefined, state.isAdmin(), isDesktop, state.readonly(), bp);\n }),\n /**\n * Returns the current dashboard's widgets with their resolved breakpoint options.\n * This computed depends on BOTH the dashboard widgets AND currentBreakpoint,\n * ensuring the @for source produces a new array when the breakpoint changes.\n */\n currentWidgets: computed(() => {\n const dashboard = state.dashboards().find((d) => d.id === state.currentDashboardId());\n const bp = state.currentBreakpoint();\n if (!dashboard?.widgets) return [];\n return dashboard.widgets.map((widget) => {\n const layoutNode = resolveDashboardWidgetLayoutNode(widget.config, bp);\n const metaDimensions = (widget.node as { meta?: { dimensions?: AXPDashboardWidgetDimensions } } | undefined)?.meta?.dimensions;\n\n const resolvedOptions = enrichDashboardLayoutNode(layoutNode, bp, metaDimensions);\n\n return {\n ...widget,\n resolvedOptions,\n };\n });\n }),\n canConfigureWidget: computed(() => (widget: AXMDashboardWidgetData) => {\n const currentDashboard = state.dashboards().find((dashboard) => dashboard.id === state.currentDashboardId());\n const widgetHasConfiguration = widget.node?.options?.['hasConfiguration'] ?? true;\n return canConfigureWidgetForUser(currentDashboard || undefined, state.isAdmin(), state.userRoleIds(), widgetHasConfiguration, state.readonly());\n }),\n isWidgetLocked: computed(() => (widget: AXMDashboardWidgetData) => {\n const currentDashboard = state.dashboards().find((dashboard) => dashboard.id === state.currentDashboardId());\n return isWidgetLockedForUser(currentDashboard || undefined, state.isAdmin(), state.userRoleIds(), state.readonly());\n }),\n })),\n //#endregion\n\n //#region ---- Methods ----\n withMethods(\n (\n store,\n dashboardPopup = inject(AXMDashboardPopupService),\n dialogService = inject(AXDialogService),\n translationService = inject(AXTranslationService),\n widgetPickerService = inject(AXPWidgetPickerService),\n entityService = inject(AXPEntityService),\n settingsService = inject(AXPSettingsService),\n sessionService = inject(AXPSessionService),\n deviceService = inject(AXPDeviceService),\n ) => {\n const userRoleService = entityService.withEntity(SecurityManagementRootConfig.module.name, SecurityManagementRootConfig.entities.userRole.name).data<any, any>();\n const dashboardData = entityService.withEntity(RootConfig.module.name, RootConfig.entities.dashboard.name).data<string, AXMCommonDashboardEntityModel, AXMCommonDashboardEntityModel>();\n\n const sessionReady = toSignal(sessionService.isReadyForAppScopedApi$, {\n initialValue: sessionService.isReadyForAppScopedApi,\n });\n const sessionTenantId = toSignal(\n sessionService.tenant$.pipe(\n map((tenant) => (typeof tenant?.id === 'string' ? tenant.id : undefined)),\n distinctUntilChanged(),\n ),\n { initialValue: sessionService.tenant?.id },\n );\n const sessionApplicationId = toSignal(\n sessionService.application$.pipe(\n map((application) => (typeof application?.id === 'string' ? application.id : undefined)),\n distinctUntilChanged(),\n ),\n { initialValue: sessionService.application?.id },\n );\n\n // Reload when workspace is ready / tenant / application changes (not only admin flag).\n effect(() => {\n if (store.entityDetailLayoutLock()) {\n return;\n }\n const ready = sessionReady();\n const tenantId = sessionTenantId();\n const applicationId = sessionApplicationId();\n if (!ready || !tenantId || !applicationId) {\n return;\n }\n const canMaintainDashboards = sessionService.authorize(AXPAdministrationPermissionKeys.MaintainDashboards);\n // Edit/create capabilities only — home list always uses role + personal filters.\n if (canMaintainDashboards !== store.isUserAdmin()) {\n patchState(store, { isAdmin: canMaintainDashboards });\n }\n void loadHomeDashboards();\n });\n\n // Track window resize and update currentBreakpoint signal.\n // Sets isBreakpointTransitioning to suppress onGridChange saves\n // while the grid settles after a breakpoint switch.\n let transitionTimer: ReturnType<typeof setTimeout> | null = null;\n\n // Queued save: ensures only one save is in-flight at a time.\n // If a new save is requested while one is running, it queues the latest and runs it after.\n let isSaving = false;\n let pendingSaveDashboard: AXMDashboardLayout | null = null;\n\n async function persistDashboard(dashboard: AXMDashboardLayout): Promise<void> {\n if (isSaving) {\n // Queue the latest dashboard for saving after current completes\n pendingSaveDashboard = dashboard;\n return;\n }\n isSaving = true;\n try {\n await dashboardData.update(dashboard.id, dashboardLayoutToModel(dashboard));\n } catch (error) {\n console.error('Error saving dashboard layout:', error);\n }\n isSaving = false;\n // Process queued save if any\n if (pendingSaveDashboard) {\n const next = pendingSaveDashboard;\n pendingSaveDashboard = null;\n await persistDashboard(next);\n }\n }\n\n /**\n * Recalculates cellHeight for the current breakpoint and container width.\n * Square cells on md/lg; fixed height on sm.\n */\n const applyCellHeightForBreakpoint = (containerWidth: number, breakpoint: AXMDashboardBreakpoint): void => {\n const columns = getDashboardColumnsForBreakpoint(breakpoint);\n const current = store.dashboardsOption();\n const gap = typeof current.gap === 'number' ? current.gap : DEFAULT_DASHBOARD_GRID_GAP;\n const width = containerWidth > 0 ? containerWidth : store.gridContainerWidth();\n const cellHeight = resolveDashboardCellHeightForBreakpoint(breakpoint, width, gap);\n\n if (current.cellHeight === cellHeight && current.column === columns) {\n return;\n }\n\n patchState(store, {\n dashboardsOption: {\n ...current,\n cellHeight,\n column: columns,\n gap,\n },\n });\n };\n\n const applyBreakpointChange = (breakpoint: AXMDashboardBreakpoint, containerWidth: number): void => {\n if (breakpoint !== store.currentBreakpoint()) {\n const previous = store.currentBreakpoint();\n // eslint-disable-next-line no-console\n console.log('[home-dashboard] breakpoint changed', {\n from: previous,\n to: breakpoint,\n columns: getDashboardColumnsForBreakpoint(breakpoint),\n containerWidth,\n windowWidth: typeof window !== 'undefined' ? window.innerWidth : undefined,\n });\n if (transitionTimer) clearTimeout(transitionTimer);\n patchState(store, { currentBreakpoint: breakpoint, isBreakpointTransitioning: true });\n applyCellHeightForBreakpoint(containerWidth, breakpoint);\n\n transitionTimer = setTimeout(() => {\n patchState(store, { isBreakpointTransitioning: false });\n transitionTimer = null;\n }, 500);\n return;\n }\n\n applyCellHeightForBreakpoint(containerWidth, breakpoint);\n };\n\n if (typeof window !== 'undefined') {\n fromEvent(window, 'resize')\n .pipe(debounceTime(100))\n .subscribe(() => {\n const bp = getDashboardBreakpointFromWindow();\n applyBreakpointChange(bp, store.gridContainerWidth());\n });\n }\n\n /**\n * Resolves scoped UserRole.roleIds for the current tenant/application workspace.\n */\n async function resolveWorkspaceRoleIds(userId: string, tenantId: string): Promise<string[]> {\n try {\n const applicationId = readApplicationId(sessionService);\n const result = await userRoleService.query({\n skip: 0,\n take: 50,\n filter: {\n logic: 'and',\n filters: [\n { field: 'userId', operator: { type: 'equal' }, value: userId },\n { field: 'scopeInfo.tenantId', operator: { type: 'equal' }, value: tenantId },\n ],\n },\n } as never);\n const assignments = (result?.items ?? []) as Array<{\n roleIds?: unknown;\n scopeInfo?: { applicationId?: string };\n }>;\n return extractRoleIdsFromUserRoleAssignments(assignments, applicationId);\n } catch {\n return [];\n }\n }\n\n /**\n * Loads home dashboards: personal (U) owned by user, or tenant (T) matching effective roles.\n * Admin maintain permission does not broaden the home list — it only unlocks edit/create.\n */\n async function loadHomeDashboards(): Promise<void> {\n try {\n patchState(store, { isLoading: true });\n const userId = readUserId(sessionService);\n const tenantId = readTenantId(sessionService);\n let userRoleIds: string[] = [];\n\n const orFilters: AXDataSourceFilterOption[] = [];\n\n if (userId && tenantId && sessionService.isReadyForAppScopedApi) {\n userRoleIds = await resolveWorkspaceRoleIds(userId, tenantId);\n }\n\n if (userId) {\n orFilters.push({\n field: null as any,\n logic: 'and',\n operator: null as any,\n filters: [\n { field: 'scope', operator: { type: 'equal' }, value: 'U' },\n { field: 'scopeRef.userId', operator: { type: 'equal' }, value: userId },\n ],\n } as AXDataSourceFilterOption);\n }\n\n if (userRoleIds.length > 0) {\n const roleMatchFilters: AXDataSourceFilterOption[] = userRoleIds.map((roleId) => ({\n field: 'scopeRef.roleIds',\n operator: { type: 'contains' },\n value: roleId,\n }));\n\n orFilters.push({\n field: null as any,\n logic: 'and',\n operator: null as any,\n filters: [\n { field: 'scope', operator: { type: 'equal' }, value: 'T' },\n {\n field: null as any,\n logic: 'or',\n operator: null as any,\n filters: roleMatchFilters,\n },\n ],\n } as AXDataSourceFilterOption);\n }\n\n let filter: AXDataSourceFilterOption | undefined;\n if (orFilters.length === 1) {\n filter = orFilters[0];\n } else if (orFilters.length > 1) {\n filter = {\n field: null as any,\n logic: 'or',\n operator: null as any,\n filters: orFilters,\n } as AXDataSourceFilterOption;\n }\n\n if (orFilters.length === 0) {\n patchState(store, {\n allDashboards: [],\n dashboards: [],\n isLoading: false,\n currentDashboardId: null,\n userRoleIds,\n });\n return;\n }\n\n const result = await dashboardData.query({ skip: 0, take: 100, filter });\n const dashboardModels = result.items || [];\n // Home list is always role/personal filtered (isAdmin=false here).\n // MaintainDashboards unlocks edit/create only — it must not broaden visibility\n // or prefer a tenant role board over My Workspace as the default.\n const dashboards = sortHomeDashboards(filterDashboardsForUser(dashboardModels.map(modelToDashboardLayout), false, userId, userRoleIds));\n const currentDashboardId = await settingsService.scope(AXPPlatformScope.User).get(AXPHomeDashboardSetting.CurrentDashboard);\n\n let newCurrentDashboardId = null;\n if (dashboards.length > 0) {\n const dashboardExists = currentDashboardId && dashboards.some((d) => d.id === currentDashboardId);\n newCurrentDashboardId = dashboardExists ? (currentDashboardId as string) : dashboards[0].id;\n\n if (!dashboardExists) {\n settingsService.scope(AXPPlatformScope.User).set(AXPHomeDashboardSetting.CurrentDashboard, newCurrentDashboardId);\n }\n }\n\n patchState(store, {\n allDashboards: dashboards,\n dashboards: dashboards,\n isLoading: false,\n currentDashboardId: newCurrentDashboardId,\n userRoleIds,\n });\n } catch (error) {\n console.error('Error loading dashboards:', error);\n patchState(store, { isLoading: false, userRoleIds: [] });\n }\n }\n\n return {\n /**\n * Sets the selected dashboard and persists the choice for the user.\n */\n setCurrentDashboard(dashboardId: string): void {\n patchState(store, { currentDashboardId: dashboardId });\n settingsService.scope(AXPPlatformScope.User).set(AXPHomeDashboardSetting.CurrentDashboard, dashboardId);\n },\n\n /**\n * Creates a new dashboard and selects it as current.\n */\n async addDashboard(): Promise<void> {\n try {\n const newDashboard = await dashboardPopup.generateDashboardLayout({}, store.isUserAdmin());\n if (!newDashboard) return;\n\n const userId = readUserId(sessionService);\n const tenantId = readTenantId(sessionService);\n const now = new Date();\n const scope = store.isUserAdmin() ? 'T' : 'U';\n const dashboardWithMetadata: AXMDashboardLayout = {\n ...newDashboard,\n createdBy: userId,\n createdAt: now,\n updatedBy: userId,\n updatedAt: now,\n scope,\n scopeRef: scope === 'T' ? buildTenantScopeRef(tenantId ?? '', readScopeRoleIds(newDashboard.scopeRef)) : buildUserScopeRef(userId ?? ''),\n widgets: [],\n };\n\n const dashboardModel = dashboardLayoutToModel(dashboardWithMetadata);\n const createdDashboardId = await dashboardData.create(dashboardModel);\n dashboardWithMetadata.id = createdDashboardId;\n\n const updatedAllDashboards = [...store.availableDashboards(), dashboardWithMetadata];\n const updatedDashboards = [...store.dashboards(), dashboardWithMetadata];\n\n patchState(store, {\n allDashboards: updatedAllDashboards,\n dashboards: updatedDashboards,\n currentDashboardId: dashboardWithMetadata.id,\n });\n\n settingsService.scope(AXPPlatformScope.User).set(AXPHomeDashboardSetting.CurrentDashboard, dashboardWithMetadata.id);\n } catch (error) {\n console.error('Error adding dashboard:', error);\n }\n },\n\n /**\n * Edits the current dashboard metadata and persists changes.\n */\n async editDashboard(): Promise<void> {\n const currentDashboard = store.selectedDashboard();\n if (!currentDashboard) return;\n if (!store.isUserAdmin() && currentDashboard.scope === 'T') {\n console.warn('Tenant scoped dashboards are read-only for non-admin users');\n return;\n }\n\n try {\n const editedDashboard = await dashboardPopup.generateDashboardLayout(\n {\n title: currentDashboard.title,\n description: currentDashboard.description,\n scopeRef: currentDashboard.scopeRef,\n scope: currentDashboard.scope,\n isArchived: currentDashboard.isArchived,\n locked: currentDashboard.locked,\n },\n store.isUserAdmin(),\n { showRoleField: false },\n );\n\n if (!editedDashboard) return;\n\n const userId = readUserId(sessionService);\n const now = new Date();\n const updatedDashboard: AXMDashboardLayout = {\n ...currentDashboard,\n ...editedDashboard,\n updatedBy: userId,\n updatedAt: now,\n };\n\n await dashboardData.update(updatedDashboard.id, dashboardLayoutToModel(updatedDashboard));\n\n const updatedAllDashboards = store.availableDashboards().map((d) => (d.id === updatedDashboard.id ? updatedDashboard : d));\n const updatedDashboards = store.dashboards().map((d) => (d.id === updatedDashboard.id ? updatedDashboard : d));\n\n patchState(store, {\n allDashboards: updatedAllDashboards,\n dashboards: updatedDashboards,\n });\n } catch (error) {\n console.error('Error editing dashboard:', error);\n }\n },\n\n /**\n * Clones the current dashboard (metadata and widgets) and selects the copy.\n * Tenant dashboards cloned by non-admins become personal (U) editable copies.\n */\n async cloneDashboard(): Promise<void> {\n const currentDashboard = store.selectedDashboard();\n if (!currentDashboard) return;\n\n try {\n const confirmed = await dialogService.confirm(await translationService.translateAsync('@general:actions.clone.confirm.title'), await translationService.translateAsync('@general:actions.clone.confirm.message'), 'primary', 'horizontal');\n if (!confirmed.result) return;\n\n const isAdmin = store.isUserAdmin();\n const userId = readUserId(sessionService);\n const tenantId = readTenantId(sessionService);\n const now = new Date();\n const copySuffix = await translationService.translateAsync('@dashboard:clone-title-suffix');\n\n const scope = !isAdmin && currentDashboard.scope === 'T' ? 'U' : isAdmin ? currentDashboard.scope : 'U';\n\n const { id: _sourceId, ...sourceWithoutId } = currentDashboard;\n const clonedPayload: Omit<AXMDashboardLayout, 'id'> = {\n ...sourceWithoutId,\n title: appendCopySuffixToTitle(currentDashboard.title, copySuffix),\n description: currentDashboard.description,\n widgets: currentDashboard.widgets.map(cloneDashboardWidget),\n createdBy: userId,\n createdAt: now,\n updatedBy: userId,\n updatedAt: now,\n isArchived: false,\n archivedAt: undefined,\n locked: false,\n scope,\n scopeRef: scope === 'T' ? buildTenantScopeRef(tenantId ?? '', readScopeRoleIds(currentDashboard.scopeRef)) : buildUserScopeRef(userId ?? ''),\n };\n\n const createdDashboardId = await dashboardData.create(dashboardLayoutToCreateModel(clonedPayload) as AXMCommonDashboardEntityModel);\n const clonedDashboard: AXMDashboardLayout = { ...clonedPayload, id: createdDashboardId };\n\n const updatedAllDashboards = [...store.availableDashboards(), clonedDashboard];\n const updatedDashboards = [...store.dashboards(), clonedDashboard];\n\n patchState(store, {\n allDashboards: updatedAllDashboards,\n dashboards: updatedDashboards,\n currentDashboardId: clonedDashboard.id,\n });\n\n settingsService.scope(AXPPlatformScope.User).set(AXPHomeDashboardSetting.CurrentDashboard, clonedDashboard.id);\n } catch (error) {\n console.error('Error cloning dashboard:', error);\n }\n },\n\n /**\n * Updates the current dashboard metadata from an inline admin editor\n * (no popup/preview).\n */\n async updateDashboardMetadataFromEditor(form: { title: AXPMultiLanguageString; description?: AXPMultiLanguageString; roleIds: string[]; isArchived: boolean; locked: boolean }): Promise<boolean> {\n const currentDashboard = store.selectedDashboard();\n if (!currentDashboard) return false;\n\n try {\n const userId = readUserId(sessionService);\n const tenantId = readTenantId(sessionService);\n const now = new Date();\n\n const updatedDashboard: AXMDashboardLayout = {\n ...currentDashboard,\n title: form.title === undefined || form.title === null ? '' : typeof form.title === 'object' ? form.title : (form.title as string).toString().trim(),\n description: form.description === undefined || form.description === null ? undefined : typeof form.description === 'object' ? form.description : (form.description as string).toString().trim(),\n scopeRef: currentDashboard.scope === 'T' ? buildTenantScopeRef(tenantId ?? readScopeTenantId(currentDashboard.scopeRef) ?? '', form.roleIds ?? []) : currentDashboard.scopeRef,\n isArchived: Boolean(form.isArchived),\n locked: Boolean(form.locked),\n scope: currentDashboard.scope,\n updatedBy: userId,\n updatedAt: now,\n };\n\n await dashboardData.update(updatedDashboard.id, dashboardLayoutToModel(updatedDashboard));\n\n const updatedAllDashboards = store.availableDashboards().map((d) => (d.id === updatedDashboard.id ? updatedDashboard : d));\n const updatedDashboards = store.dashboards().map((d) => (d.id === updatedDashboard.id ? updatedDashboard : d));\n\n patchState(store, {\n allDashboards: updatedAllDashboards,\n dashboards: updatedDashboards,\n });\n\n return true;\n } catch (error) {\n console.error('Error updating dashboard metadata:', error);\n return false;\n }\n },\n\n /**\n * Adds selected widgets to the current dashboard and saves layout.\n */\n async addWidget(): Promise<void> {\n if (store.readonly()) return;\n if (!store.selectedDashboard()) {\n console.warn('No current dashboard selected');\n return;\n }\n\n try {\n const widgets = await widgetPickerService.showPicker({\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n tabPersistenceContext: AXP_WIDGET_PICKER_TAB_CONTEXT.dashboardHome,\n });\n\n const filteredWidgets = (widgets as any[]).map(({ __meta__, ...rest }) => {\n const widget = rest;\n if (widget.type === RootConfig.widgets.stickyNote && !widget.options) {\n widget.options = { hasConfiguration: false };\n }\n const randomId = AXPDataGenerator.uuid();\n widget.name = `${widget.type}-${randomId}`;\n widget.path = `${widget.type}-${randomId}`;\n return widget;\n });\n\n const convertedWidgets: AXMDashboardWidgetData[] = filteredWidgets.map((widget) => {\n const id = AXPDataGenerator.uuid();\n const dims = widget?.meta?.dimensions as AXPDashboardWidgetDimensions | undefined;\n const layoutFor = (breakpoint: AXMDashboardBreakpoint): AXGridLayoutNode => {\n const node = resolveDashboardMetaLayoutNode(dims, breakpoint, [2, 2], breakpoint === 'sm' ? { forceWidth: 1 } : undefined);\n return { id, ...node } as AXGridLayoutNode;\n };\n\n return {\n config: {\n id,\n title: widget.options?.['title'],\n sm: layoutFor('sm'),\n md: layoutFor('md'),\n lg: layoutFor('lg'),\n xl: layoutFor('xl'),\n '2xl': layoutFor('2xl'),\n '3xl': layoutFor('3xl'),\n '4xl': layoutFor('4xl'),\n },\n node: {\n ...widget,\n name: widget.name,\n ...(widget.type === RootConfig.widgets.shortcut ? { __meta__: { added: true } } : {}),\n },\n };\n });\n\n const currentDashboard = store.selectedDashboard()!;\n const updatedDashboard = {\n ...currentDashboard,\n widgets: [...currentDashboard.widgets, ...convertedWidgets],\n };\n\n await dashboardData.update(updatedDashboard.id, dashboardLayoutToModel(updatedDashboard));\n const updatedDashboards = store.dashboards().map((d) => (d.id === updatedDashboard.id ? updatedDashboard : d));\n const updatedAllDashboards = store.availableDashboards().map((d) => (d.id === updatedDashboard.id ? updatedDashboard : d));\n\n patchState(store, { dashboards: updatedDashboards, allDashboards: updatedAllDashboards });\n } catch (error) {\n console.error('Error adding widget:', error);\n }\n },\n\n /**\n * Removes a dashboard after user confirmation and updates selection.\n */\n async removeDashboard(id: string): Promise<void> {\n if (!id) {\n console.warn('No dashboard ID provided for removal');\n return;\n }\n const targetDashboard = store.dashboards().find((dashboard) => dashboard.id === id);\n if (!store.isUserAdmin() && targetDashboard?.scope === 'T') {\n console.warn('Tenant scoped dashboards cannot be deleted by non-admin users');\n return;\n }\n\n try {\n const dialogResult = await dialogService.confirm(await translationService.translateAsync('@general:workflow.warning'), await translationService.translateAsync('@general:workflow.confirm-delete'), 'danger', 'horizontal');\n\n if (dialogResult.result) {\n await dashboardData.delete(id);\n const updatedAllDashboards = store.availableDashboards().filter((dashboard) => dashboard.id !== id);\n const updatedDashboards = store.dashboards().filter((dashboard) => dashboard.id !== id);\n let newCurrentDashboardId = store.currentDashboardId();\n\n if (id === store.currentDashboardId()) {\n newCurrentDashboardId = updatedDashboards.length > 0 ? updatedDashboards[updatedDashboards.length - 1].id : null;\n if (newCurrentDashboardId) {\n settingsService.scope(AXPPlatformScope.User).set(AXPHomeDashboardSetting.CurrentDashboard, newCurrentDashboardId);\n }\n }\n\n patchState(store, {\n allDashboards: updatedAllDashboards,\n dashboards: updatedDashboards,\n currentDashboardId: newCurrentDashboardId,\n });\n }\n } catch (error) {\n console.error('Error removing dashboard:', error);\n }\n },\n\n /**\n * Removes a widget from the specified dashboard and persists the change.\n */\n async removeWidget(dashboardId: string, widgetId: string): Promise<void> {\n if (store.readonly()) return;\n const currentDashboard = store.dashboards().find((d) => d.id === dashboardId);\n if (!currentDashboard) return;\n\n const updatedDashboard = {\n ...currentDashboard,\n widgets: currentDashboard.widgets.filter((widget) => widget.config.id !== widgetId),\n };\n\n await dashboardData.update(dashboardId, dashboardLayoutToModel(updatedDashboard));\n const updatedDashboards = store.dashboards().map((dashboard) => (dashboard.id === dashboardId ? updatedDashboard : dashboard));\n const updatedAllDashboards = store.availableDashboards().map((dashboard) => (dashboard.id === dashboardId ? updatedDashboard : dashboard));\n\n patchState(store, { dashboards: updatedDashboards, allDashboards: updatedAllDashboards });\n },\n\n /**\n * Persists dashboard configuration changes and updates selection.\n */\n async handleConfigChange(dashboard: AXMDashboardLayout): Promise<void> {\n // await dashboardData.update(dashboard.id, dashboardLayoutToModel(dashboard));\n // const updatedDashboards = store.dashboards().map((d) => (d.id === dashboard.id ? dashboard : d));\n\n patchState(store, {\n // dashboards: updatedDashboards,\n currentDashboardId: dashboard.id,\n });\n\n settingsService.scope(AXPPlatformScope.User).set(AXPHomeDashboardSetting.CurrentDashboard, dashboard.id);\n },\n\n /**\n * Handles grid layout changes (drag/resize) and saves positions for the current breakpoint.\n * Skips saving during breakpoint transitions to avoid persisting auto-reflowed layouts.\n * Persists immediately with queued writes to prevent concurrent save conflicts.\n */\n onGridChange(event: AXGridLayoutEvent): void {\n if (store.readonly()) return;\n if (!store.selectedDashboard()) return;\n\n // Skip saves during breakpoint transitions to avoid persisting auto-reflowed layouts\n if (store.isBreakpointTransitioning()) return;\n\n // Skip if the live window breakpoint disagrees with the store\n const liveBp = getDashboardBreakpointFromWindow();\n const storeBp = store.currentBreakpoint();\n if (liveBp !== storeBp) return;\n\n // Small breakpoint never accepts user layout edits\n if (storeBp === 'sm') return;\n\n const bp = storeBp;\n const nodes = event.nodes.map(({ element, ...rest }) => rest);\n const currentDashboard = store.selectedDashboard()!;\n\n let hasChanges = false;\n const updatedWidgets = currentDashboard.widgets.map((widget) => {\n const updatedNode = nodes.find((node) => node.id === widget.config.id);\n if (!updatedNode) return widget;\n\n const existing = widget.config[bp];\n if (existing?.x === updatedNode.x && existing?.y === updatedNode.y && existing?.width === updatedNode.width && existing?.height === updatedNode.height) {\n return widget;\n }\n\n hasChanges = true;\n return {\n ...widget,\n config: {\n ...widget.config,\n [bp]: { ...widget.config[bp], ...updatedNode, id: widget.config.id },\n },\n };\n });\n\n if (!hasChanges) return;\n\n const updatedDashboard = {\n ...currentDashboard,\n widgets: updatedWidgets,\n };\n entityLayoutDrafts.set(updatedDashboard.id, updatedDashboard);\n\n const updatedDashboards = store.dashboards().map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n const updatedAllDashboards = store.availableDashboards().map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n\n patchState(store, { dashboards: updatedDashboards, allDashboards: updatedAllDashboards });\n\n // Persist to storage (queued to prevent concurrent writes)\n persistDashboard(updatedDashboard);\n },\n\n /**\n * Applies widget configuration changes returned from popup.\n */\n async handlePopupConfiguration(widgetNode: AXPWidgetNode): Promise<void> {\n if (store.readonly()) return;\n if (!store.selectedDashboard()) return;\n\n try {\n const updatedNode = await dashboardPopup.handlePopupConfiguration(widgetNode);\n if (!updatedNode) return;\n\n const currentDashboard = store.selectedDashboard()!;\n const updatedWidgets = currentDashboard.widgets.map((widget) => (widget.node?.name === widgetNode.name && widget.node?.path === widgetNode.path ? { ...widget, node: updatedNode } : widget));\n\n const updatedDashboard = {\n ...currentDashboard,\n widgets: updatedWidgets,\n };\n\n await dashboardData.update(updatedDashboard.id, dashboardLayoutToModel(updatedDashboard));\n const updatedDashboards = store.dashboards().map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n const updatedAllDashboards = store.availableDashboards().map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n\n patchState(store, { dashboards: updatedDashboards, allDashboards: updatedAllDashboards });\n } catch (error) {\n console.error('Error handling widget configuration:', error);\n }\n },\n\n /**\n * Updates widget value (defaultValue) and persists changes.\n */\n async handleValueChanged(widgetNode: AXPWidgetNode, data: unknown): Promise<void> {\n if (store.readonly()) return;\n if (!store.selectedDashboard()) return;\n if (!deviceService.isDesktopDevice()) {\n return;\n }\n\n try {\n const currentDashboard = store.selectedDashboard()!;\n const updatedWidgets = currentDashboard.widgets.map((widget) => (widget.node && widget.node.name === widgetNode.name && widget.node.path === widgetNode.path ? { ...widget, node: { ...widget.node, defaultValue: data } } : widget));\n\n const updatedDashboard = {\n ...currentDashboard,\n widgets: updatedWidgets,\n };\n\n await dashboardData.update(updatedDashboard.id, dashboardLayoutToModel(updatedDashboard));\n const updatedDashboards = store.dashboards().map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n const updatedAllDashboards = store.availableDashboards().map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n\n patchState(store, { dashboards: updatedDashboards, allDashboards: updatedAllDashboards });\n } catch (error) {\n console.error('Error handling widget value change:', error);\n }\n },\n\n /**\n * Merges widget options with provided data and persists changes.\n */\n async handleOptionsChanged(widgetNode: AXPWidgetNode, data: unknown): Promise<void> {\n if (store.readonly()) return;\n if (!store.selectedDashboard()) return;\n\n try {\n const currentDashboard = store.selectedDashboard()!;\n const updatedWidgets = currentDashboard.widgets.map((widget) =>\n widget.node && widget.node.name === widgetNode.name && widget.node.path === widgetNode.path\n ? {\n ...widget,\n node: {\n ...widget.node,\n options: { ...(widget.node.options || {}), ...(data as object) },\n },\n }\n : widget,\n );\n\n const updatedDashboard = {\n ...currentDashboard,\n widgets: updatedWidgets,\n };\n\n await dashboardData.update(updatedDashboard.id, dashboardLayoutToModel(updatedDashboard));\n const updatedDashboards = store.dashboards().map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n const updatedAllDashboards = store.availableDashboards().map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n\n patchState(store, { dashboards: updatedDashboards, allDashboards: updatedAllDashboards });\n } catch (error) {\n console.error('Error handling widget options change:', error);\n }\n },\n\n /**\n * Updates the admin flag in store state.\n */\n setIsAdmin(isAdmin: boolean): void {\n patchState(store, { isAdmin });\n },\n\n /**\n * Updates measured grid container width and refreshes breakpoint-aware cellHeight.\n */\n updateGridContainerWidth(width: number): void {\n if (!Number.isFinite(width) || width <= 0) {\n return;\n }\n\n const roundedWidth = Math.round(width);\n if (roundedWidth !== store.gridContainerWidth()) {\n patchState(store, { gridContainerWidth: roundedWidth });\n }\n\n applyCellHeightForBreakpoint(roundedWidth, store.currentBreakpoint());\n },\n\n /**\n * Skips the default dashboard list query (used by the entity detail layout tab with a\n * component-scoped store instance).\n */\n setEntityDetailLayoutLock(locked: boolean): void {\n patchState(store, { entityDetailLayoutLock: locked });\n },\n\n /**\n * Hydrates store state from a single dashboard model (entity detail layout tab).\n */\n hydrateFromEntityDetailModel(model: AXMCommonDashboardEntityModel): void {\n const layout = modelToDashboardLayout(model);\n const layoutDraft = entityLayoutDrafts.get(layout.id);\n const hydratedLayout = layoutDraft\n ? {\n ...layout,\n ...layoutDraft,\n widgets: layoutDraft.widgets ?? layout.widgets,\n }\n : layout;\n patchState(store, {\n isAdmin: !store.readonly(),\n isLoading: false,\n allDashboards: [hydratedLayout],\n dashboards: [hydratedLayout],\n currentDashboardId: hydratedLayout.id,\n });\n },\n\n // Client-side scope filtering is no longer needed; handled in query filter\n\n /**\n * Toggles lock state for current dashboard based on permission rules.\n */\n async toggleLockDashboard(): Promise<void> {\n const currentDashboard = store.selectedDashboard();\n if (!currentDashboard) return;\n\n try {\n const isAdmin = store.isUserAdmin();\n const userId = readUserId(sessionService);\n const canToggle = (!isAdmin && currentDashboard.scope === 'U' && currentDashboard.createdBy === userId) || (isAdmin && currentDashboard.scope === 'T');\n\n if (!canToggle) {\n console.warn('User does not have permission to toggle lock for this dashboard');\n return;\n }\n\n const updatedDashboard = {\n ...currentDashboard,\n locked: !currentDashboard.locked,\n };\n\n await dashboardData.update(updatedDashboard.id, dashboardLayoutToModel(updatedDashboard));\n const updatedDashboards = store.dashboards().map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n const updatedAllDashboards = store.availableDashboards().map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n\n patchState(store, { dashboards: updatedDashboards, allDashboards: updatedAllDashboards });\n } catch (error) {\n console.error('Error toggling dashboard lock state:', error);\n }\n },\n\n /**\n * Returns the lock state of the current dashboard.\n */\n isDashboardLocked(): boolean {\n const currentDashboard = store.selectedDashboard();\n return currentDashboard?.locked === true;\n },\n };\n },\n ),\n //#endregion\n\n //#region ---- Hooks ----\n\n withHooks((store, entityLayoutTab = inject(DASHBOARD_LAYOUT_ENTITY_MODE, { optional: true }), readonlyMode = inject(DASHBOARD_READONLY_MODE, { optional: true })) => ({\n onInit() {\n if (entityLayoutTab === true) {\n patchState(store, { entityDetailLayoutLock: true });\n }\n if (readonlyMode === true) {\n patchState(store, { readonly: true });\n }\n },\n })),\n\n //#endregion\n);\n//#endregion\n","import { AXStyleColorType } from '@acorex/cdk/common';\nimport { AXMenuItem } from '@acorex/components/menu';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPActionMenuItem } from '@acorex-platform/framework-shared/core';\n\nexport interface AXMDashboardCanvasMenuContext {\n includeAddActions: boolean;\n addWidgetDisabled: boolean;\n dashboardManagementDisabled: boolean;\n}\n\nexport function buildDashboardCanvasMenuItems(ctx: AXMDashboardCanvasMenuContext): AXPActionMenuItem[] {\n const items: AXPActionMenuItem[] = [];\n\n if (ctx.includeAddActions) {\n items.push(\n {\n title: '@dashboard:add-widget',\n icon: 'fa-window-restore',\n command: { name: 'new-widget' },\n disabled: ctx.addWidgetDisabled,\n break: true,\n },\n {\n title: '@dashboard:new-dashboard',\n icon: 'fa-gauge-high',\n command: { name: 'new-dashboard' },\n },\n );\n }\n\n items.push(\n {\n title: '@dashboard:dashboard-info',\n icon: 'fa-circle-info',\n command: { name: 'edit' },\n disabled: ctx.dashboardManagementDisabled,\n },\n {\n title: '@general:actions.clone.title',\n icon: 'fa-clone',\n command: { name: 'clone' },\n break: true,\n },\n {\n title: '@general:actions.delete.title',\n icon: 'fa-trash-can',\n color: 'danger',\n command: { name: 'delete' },\n disabled: ctx.dashboardManagementDisabled,\n },\n );\n\n return items;\n}\n\nexport async function toDashboardCanvasContextMenuItem(\n item: AXPActionMenuItem,\n translateService: AXTranslationService,\n): Promise<AXMenuItem> {\n const text =\n typeof item.title === 'string' && item.title.startsWith('@')\n ? await translateService.translateAsync(item.title)\n : String(item.title ?? '');\n\n return {\n name: item.command?.name ?? item.name,\n text,\n icon: item.icon ? `fa-light ${item.icon}` : undefined,\n color: item.color as AXStyleColorType | undefined,\n break: item.break,\n disabled: !!item.disabled,\n };\n}\n\nexport function isDashboardWidgetContextTarget(\n documentRef: Document,\n clientX: number,\n clientY: number,\n): boolean {\n return documentRef.elementsFromPoint(clientX, clientY).some((node) => {\n return node instanceof Element && !!node.closest('axm-dashboard-widget-wrapper');\n });\n}\n\nexport function shouldCancelDashboardCanvasContextMenu(\n el: HTMLElement | undefined,\n documentRef?: Document,\n clientX?: number,\n clientY?: number,\n): boolean {\n if (\n documentRef &&\n clientX != null &&\n clientY != null &&\n isDashboardWidgetContextTarget(documentRef, clientX, clientY)\n ) {\n return true;\n }\n\n if (!el) {\n return true;\n }\n\n if (\n el.closest('axm-dashboard-widget-wrapper') ||\n el.closest('.grid-stack-item') ||\n el.closest('ax-grid-layout-widget') ||\n el.closest('button') ||\n el.closest('a')\n ) {\n return true;\n }\n\n return !el.closest('.axm-dashboard-canvas-surface');\n}\n","//#region ----- Imports -----\n\nimport { AXItemClickEvent } from '@acorex/cdk/common';\nimport { AXButtonItemComponent, AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, HostListener, input, output, signal } from '@angular/core';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-dashboard-widget-wrapper',\n templateUrl: './dashboard-widget-wrapper.html',\n styleUrls: ['./dashboard-widget-wrapper.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'axm-dashboard-widget-wrapper block size-full',\n },\n imports: [AXButtonModule, AXDecoratorModule, AXDropdownModule, AXTranslationModule, CommonModule],\n standalone: true,\n})\nexport class AXMDashboardWidgetWrapperComponent {\n //#region ----- Inputs -----\n\n readonly title = input<string | null>(null);\n readonly hasConfiguration = input(true);\n readonly isLocked = input(false);\n\n //#endregion\n\n //#region ----- Outputs -----\n\n readonly onDelete = output<void>();\n readonly onConfiguration = output<void>();\n\n //#endregion\n\n //#region ----- State Signals -----\n\n protected readonly isDropdownOpen = signal(false);\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n @HostListener('contextmenu', ['$event'])\n protected stopDashboardCanvasContextMenuBubble(event: Event): void {\n event.stopPropagation();\n }\n\n protected handleOnItemClick(event: AXItemClickEvent<AXButtonItemComponent>): void {\n switch (event.item.data) {\n case 'delete':\n this.onDelete.emit();\n break;\n case 'configuration':\n this.onConfiguration.emit();\n break;\n }\n\n this.isDropdownOpen.set(false);\n }\n\n //#endregion\n}\n\n//#endregion\n","<section class=\"relative size-full flex flex-col group overflow-hidden\">\n <!-- Action button - stays absolute -->\n @if(!isLocked()) {\n <div\n class=\"p-[0.6125rem] absolute top-0 end-0 z-[9] invisible group-hover:visible md:group-hover:visible\"\n [class.!visible]=\"isDropdownOpen()\"\n (touchstart)=\"isDropdownOpen.set(true)\"\n >\n <ax-button class=\"ax-sm main-button\" [look]=\"'blank'\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-ellipsis-vertical\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel (onOpened)=\"isDropdownOpen.set(true)\" (onClosed)=\"isDropdownOpen.set(false)\">\n <ng-container *translate=\"let t\">\n <ax-button-item-list (onItemClick)=\"handleOnItemClick($event)\">\n @if(hasConfiguration()){\n <ax-button-item\n [data]=\"'configuration'\"\n [text]=\"('@dashboard:configuration' | translate | async) || 'configuration'\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-cog\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-divider></ax-divider>\n }\n <ax-button-item\n [data]=\"'delete'\"\n [text]=\"('@general:actions.delete.title' | translate | async)!\"\n color=\"danger\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ng-container>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n }\n\n <!-- Title section -->\n @if(title()) {\n <div class=\"ps-5 pe-8 py-3 border-b\">\n <h3 class=\"text-start text-lg font-medium truncate\">{{title()}}</h3>\n </div>\n }\n\n <!-- Content section -->\n <div class=\"overflow-hidden flex-1 min-h-0 min-w-0\">\n <ng-content></ng-content>\n </div>\n</section>\n","//#region ---- Imports ----\n\nimport { AXGridLayoutNode } from '@acorex/components/grid-layout-builder';\nimport { computed, Directive, inject, input } from '@angular/core';\n\nimport { formatDashboardGridSizeToken } from './dashboard-dimensions.util';\nimport { AXP_DASHBOARD_WIDGET_GRID_SIZE } from './dashboard-widget-grid-size.token';\n\n//#endregion\n\n//#region ---- Directive ----\n\n/**\n * Supplies the current dashboard grid cell size to descendant widgets without mutating\n * {@link AXPWidgetNode} (avoids full widget-renderer remount on resize).\n */\n@Directive({\n selector: '[axmDashboardWidgetGridSize]',\n providers: [\n {\n provide: AXP_DASHBOARD_WIDGET_GRID_SIZE,\n useFactory: () => inject(AxmDashboardWidgetGridSizeDirective).gridSizeToken,\n },\n ],\n})\nexport class AxmDashboardWidgetGridSizeDirective {\n layoutNode = input.required<Pick<AXGridLayoutNode, 'width' | 'height'>>({\n alias: 'axmDashboardWidgetGridSize',\n });\n\n readonly gridSizeToken = computed(() =>\n formatDashboardGridSizeToken(this.layoutNode().width, this.layoutNode().height),\n );\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { CommonModule, DOCUMENT } from '@angular/common';\nimport { afterNextRender, ChangeDetectionStrategy, Component, DestroyRef, effect, ElementRef, inject, Injector, input, output, runInInjectionContext, untracked, viewChild, ViewEncapsulation } from '@angular/core';\n\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXGridLayoutBuilderModule, AXGridLayoutContainerComponent } from '@acorex/components/grid-layout-builder';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXContextMenuComponent, AXContextMenuItemsClickEvent, AXContextMenuOpeningEvent, AXMenuModule } from '@acorex/components/menu';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\n\nimport { AXMDashboardStore } from '../../dashboard-services/home-dashboard.store';\nimport { buildDashboardCanvasMenuItems, shouldCancelDashboardCanvasContextMenu, toDashboardCanvasContextMenuItem } from '../../home-dashboard/dashboard-canvas-context-menu.util';\nimport { AXMDashboardWidgetWrapperComponent } from '../../home-dashboard/widget-wrapper/dashboard-widget-wrapper';\nimport { AxmDashboardWidgetGridSizeDirective } from '../dashboard-widget-grid-size.directive';\n\n//#endregion\n\nexport type AXMDashboardGridLayoutLoadingVariant = 'inline' | 'overlay';\n\n@Component({\n selector: 'axm-dashboard-grid-layout-section',\n templateUrl: './dashboard-grid-layout-section.component.html',\n styleUrls: ['./dashboard-grid-layout-section.component.css'],\n imports: [CommonModule, AXLoadingModule, AXButtonModule, AXGridLayoutBuilderModule, AXTranslationModule, AXPWidgetCoreModule, AXPStateMessageComponent, AXMDashboardWidgetWrapperComponent, AxmDashboardWidgetGridSizeDirective, AXMenuModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXMDashboardGridLayoutSectionComponent {\n //#region ---- Services & Dependencies ----\n\n protected readonly store = inject(AXMDashboardStore);\n private readonly dialogService = inject(AXDialogService);\n private readonly translationService = inject(AXTranslationService);\n private readonly documentRef = inject(DOCUMENT);\n private readonly injector = inject(Injector);\n private readonly host = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n\n private lastContextMenuClientX = 0;\n private lastContextMenuClientY = 0;\n\n //#endregion\n\n //#region ---- Inputs ----\n\n /** Widget container context object (bound to `axp-widgets-container`). */\n readonly widgetsContext = input<Record<string, unknown>>({});\n\n /**\n * `inline`: centered block (entity layout tab).\n * `overlay`: absolute overlay (home dashboard).\n */\n readonly loadingVariant = input<AXMDashboardGridLayoutLoadingVariant>('inline');\n\n /** Enables dashboard-level canvas context menu (home dashboard). */\n readonly enableCanvasContextMenu = input(false);\n\n readonly isTenantDashboardReadOnly = input(false);\n\n /** Emitted when the user chooses to add a widget from the empty state. */\n readonly addWidget = output<void>();\n\n /** Emitted when a dashboard canvas context menu command is chosen. */\n readonly canvasContextMenuCommand = output<{ name: string }>();\n\n private readonly canvasContextMenu = viewChild<AXContextMenuComponent>('canvasContextMenu');\n private readonly gridLayoutContainer = viewChild(AXGridLayoutContainerComponent);\n\n //#endregion\n\n //#region ---- Effects ----\n\n /** GridStack can keep per-widget noMove/noResize after sm lock; re-sync on breakpoint/options change. */\n #syncGridInteractionEffect = effect(() => {\n if (this.store.isLoading()) {\n return;\n }\n\n const layoutOptions = this.store.currentLayoutOptions();\n this.store.currentBreakpoint();\n this.store.selectedDashboard()?.widgets?.length;\n\n untracked(() => {\n queueMicrotask(() => {\n const grid = this.gridLayoutContainer();\n if (!grid) {\n return;\n }\n\n const dragEnabled = layoutOptions.disableDrag !== true;\n const resizeEnabled = layoutOptions.disableResize !== true;\n grid.setMovable(dragEnabled, true);\n grid.setResizable(resizeEnabled, true);\n });\n });\n });\n\n #bindCanvasContextMenuEffect = effect(() => {\n if (!this.enableCanvasContextMenu()) {\n return;\n }\n\n this.store.isLoading();\n this.store.selectedDashboard()?.widgets?.length;\n this.store.currentWidgets().length;\n\n untracked(() => {\n this.scheduleCanvasContextMenuRefresh();\n });\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n afterNextRender(() => {\n const element = this.host.nativeElement;\n if (typeof ResizeObserver === 'undefined' || !element) {\n return;\n }\n\n const resizeObserver = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width ?? element.clientWidth;\n this.store.updateGridContainerWidth(width);\n });\n\n resizeObserver.observe(element);\n this.store.updateGridContainerWidth(element.clientWidth);\n\n this.destroyRef.onDestroy(() => {\n resizeObserver.disconnect();\n });\n });\n }\n\n //#endregion\n\n //#region ---- Context menu binding ----\n\n protected rememberContextMenuEvent(event: MouseEvent): void {\n this.lastContextMenuClientX = event.clientX;\n this.lastContextMenuClientY = event.clientY;\n }\n\n protected refreshContextMenuBindings(): void {\n this.scheduleCanvasContextMenuRefresh();\n }\n\n private scheduleCanvasContextMenuRefresh(): void {\n if (!this.enableCanvasContextMenu()) {\n return;\n }\n\n runInInjectionContext(this.injector, () => {\n afterNextRender(() => {\n this.canvasContextMenu()?.refresh();\n });\n });\n }\n\n //#endregion\n\n //#region ---- Dashboard canvas context menu ----\n\n protected async handleCanvasContextMenuOpening(e: AXContextMenuOpeningEvent): Promise<void> {\n if (shouldCancelDashboardCanvasContextMenu(e.targetElement, this.documentRef, this.lastContextMenuClientX, this.lastContextMenuClientY)) {\n e.canceled = true;\n return;\n }\n\n const actionItems = buildDashboardCanvasMenuItems({\n includeAddActions: true,\n addWidgetDisabled: this.isCanvasAddWidgetDisabled(),\n dashboardManagementDisabled: this.isCanvasDashboardManagementDisabled(),\n });\n\n for (const item of actionItems) {\n e.items.push(await toDashboardCanvasContextMenuItem(item, this.translationService));\n }\n }\n\n protected handleCanvasContextMenuItemClick(e: AXContextMenuItemsClickEvent): void {\n if (e.item.name) {\n this.canvasContextMenuCommand.emit({ name: e.item.name });\n }\n }\n\n private isCanvasAddWidgetDisabled(): boolean {\n return this.store.dashboards().length < 1 || this.store.isDashboardLocked() || this.isTenantDashboardReadOnly();\n }\n\n private isCanvasDashboardManagementDisabled(): boolean {\n return this.store.dashboards().length < 1 || this.isTenantDashboardReadOnly();\n }\n\n //#endregion\n\n //#region ---- Widget delete ----\n\n protected async confirmWidgetDelete(dashboardId: string, widgetId: string): Promise<void> {\n try {\n const dialogResult = await this.dialogService.confirm(await this.translationService.translateAsync('@general:workflow.warning'), await this.translationService.translateAsync('@general:workflow.confirm-delete'), 'danger', 'horizontal');\n\n if (dialogResult.result) {\n this.store.removeWidget(dashboardId, widgetId);\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Error confirming widget deletion:', error);\n }\n }\n\n //#endregion\n}\n","<div\n class=\"axm-dashboard-grid-layout-section flex flex-col h-full min-h-0 w-full\"\n (contextmenu)=\"rememberContextMenuEvent($event)\"\n>\n @if (store.isLoading()) {\n @if (loadingVariant() === 'overlay') {\n <div\n class=\"flex flex-col items-center justify-center h-full w-full absolute z-10 bg-white/80\"\n >\n <ax-loading></ax-loading>\n <p class=\"mt-3 text-gray-600\">{{ '@dashboard:loading' | translate | async }}</p>\n </div>\n } @else {\n <div class=\"flex flex-col items-center justify-center h-full w-full flex-1\">\n <ax-loading></ax-loading>\n <p class=\"mt-3 text-gray-600\">{{ '@dashboard:loading' | translate | async }}</p>\n </div>\n }\n } @else if (!store.selectedDashboard()?.widgets?.length) {\n <div class=\"axm-dashboard-canvas-surface flex flex-col items-center justify-center h-full w-full flex-1 min-h-0\">\n <axp-state-message\n icon=\"fa-light fa-shapes\"\n [title]=\"'@dashboard:no-widgets.title'\"\n [description]=\"'@dashboard:no-widgets.description'\"\n >\n @if (!store.readonly()) {\n <div slot=\"actions\">\n <button type=\"button\" (click)=\"addWidget.emit()\" class=\"underline\">\n {{ '@dashboard:add-widget' | translate | async }}\n </button>\n </div>\n }\n </axp-state-message>\n </div>\n } @else {\n <axp-widgets-container [context]=\"widgetsContext()\">\n <ax-grid-layout-container\n class=\"axm-dashboard-canvas-surface w-full dark:[--ax-comp-grid-layout-stack-item-content-bg-color:var(--ax-sys-color-lighter-surface)] [--ax-comp-grid-layout-stack-item-content-bg-color:var(--ax-sys-color-lightest-surface)]\"\n [options]=\"store.currentLayoutOptions()\"\n (onChange)=\"store.onGridChange($event)\"\n (onRender)=\"refreshContextMenuBindings()\"\n >\n @for (widget of store.currentWidgets(); track widget.config.id) {\n <ax-grid-layout-widget [options]=\"widget.resolvedOptions\">\n @let title = (widget.node?.options?.['title'] ?? widget.config.title) | translate | async;\n @let isHeaderTitleVisible = widget.node?.meta?.['title']?.['visible'] ?? true;\n\n <div\n class=\"axm-dashboard-widget-grid-host flex flex-col h-full min-h-0\"\n [axmDashboardWidgetGridSize]=\"widget.resolvedOptions\"\n >\n <axm-dashboard-widget-wrapper\n [title]=\"isHeaderTitleVisible ? title! : null\"\n [hasConfiguration]=\"store.canConfigureWidget()(widget)\"\n [isLocked]=\"store.isWidgetLocked()(widget)\"\n (onDelete)=\"confirmWidgetDelete(store.selectedDashboard()!.id, widget.config.id!)\"\n (onConfiguration)=\"store.handlePopupConfiguration(widget.node!)\"\n (onValueChanged)=\"store.handleValueChanged($safeNavigationMigration(widget?.node)!, $event)\"\n (onOptionsChanged)=\"store.handleOptionsChanged($safeNavigationMigration(widget?.node)!, $event)\"\n >\n @if (widget.node) {\n <ng-container\n axp-widget-renderer\n [node]=\"widget.node\"\n [mode]=\"'view'\"\n (onOptionsChanged)=\"store.handleOptionsChanged(widget.node, $event.widget.options())\"\n (onValueChanged)=\"store.handleValueChanged(widget.node, $event.widget.getValue())\"\n ></ng-container>\n }\n </axm-dashboard-widget-wrapper>\n </div>\n </ax-grid-layout-widget>\n }\n </ax-grid-layout-container>\n </axp-widgets-container>\n }\n</div>\n\n@if (enableCanvasContextMenu()) {\n <ax-context-menu\n #canvasContextMenu\n [target]=\"'.axm-dashboard-canvas-surface'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onOpening)=\"handleCanvasContextMenuOpening($event)\"\n (onItemClick)=\"handleCanvasContextMenuItemClick($event)\"\n ></ax-context-menu>\n}\n","//#region ---- Imports ----\n\nimport { ChangeDetectionStrategy, Component, effect, inject, input, signal, ViewEncapsulation } from '@angular/core';\nimport { isObjectLike } from 'lodash';\n\nimport { AXPDesignerService } from '@acorex-platform/framework-client/layout/designer';\n\nimport { AXMDashboardStore } from '../dashboard-services/home-dashboard.store';\nimport { AXMDashboardGridLayoutSectionComponent } from '../shared/dashboard-grid-layout-section';\nimport { buildDashboardWidgetsContext } from '../shared/widgets/dashboard-widget-base';\nimport { DASHBOARD_LAYOUT_ENTITY_MODE } from '../dashboard-layout-page/dashboard-layout-entity-mode.token';\nimport { DASHBOARD_READONLY_MODE } from '../dashboard-layout-page/dashboard-readonly-mode.token';\nimport { AXMEntityDashboardService } from './entity-dashboard.service';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Shared host that loads an entity-type dashboard and renders the grid layout section.\n * Passes runtime entity context to widgets for record-scoped dynamic data.\n */\n@Component({\n selector: 'axm-entity-dashboard-host',\n imports: [AXMDashboardGridLayoutSectionComponent],\n template: `\n @if (isReady()) {\n <axm-dashboard-grid-layout-section [widgetsContext]=\"context()\"></axm-dashboard-grid-layout-section>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n AXPDesignerService,\n { provide: DASHBOARD_LAYOUT_ENTITY_MODE, useValue: true },\n { provide: DASHBOARD_READONLY_MODE, useValue: true },\n AXMDashboardStore,\n ],\n})\nexport class AXMEntityDashboardHostComponent {\n //#region ---- Services & Dependencies ----\n\n protected readonly store = inject(AXMDashboardStore);\n private readonly entityDashboardService = inject(AXMEntityDashboardService);\n\n //#endregion\n\n //#region ---- Inputs ----\n\n readonly entityType = input.required<string>();\n readonly entityId = input.required<string>();\n readonly entityTitle = input<string | undefined>();\n /** Full entity record from detail view (rootContext). */\n readonly entityData = input<Record<string, unknown>>({});\n\n //#endregion\n\n //#region ---- Local State ----\n\n protected readonly context = signal<Record<string, unknown>>({});\n protected readonly isReady = signal(false);\n\n //#endregion\n\n //#region ---- Effects ----\n\n #loadEntityDashboard = effect(() => {\n const entityType = this.entityType();\n const entityId = this.entityId();\n const entityTitle = this.entityTitle();\n const entityData = this.entityData();\n if (!entityType || !entityId) {\n return;\n }\n\n void this.entityDashboardService.ensureEntityDashboard(entityType, entityTitle as any).then((model) => {\n this.store.hydrateFromEntityDetailModel(model);\n this.context.set(\n buildDashboardWidgetsContext(\n { ...model },\n {\n entityType,\n entityId,\n data: isObjectLike(entityData) ? { ...entityData } : {},\n },\n ),\n );\n this.isReady.set(true);\n });\n });\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { get, isObjectLike } from 'lodash';\n\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent } from '@acorex-platform/framework-client/layout/views';\nimport { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport { AXMEntityDashboardHostComponent } from './entity-dashboard-host.component';\nimport { AXMEntityDashboardService } from './entity-dashboard.service';\n\n//#endregion\n\n//#region ---- Widget View ----\n\n@Component({\n selector: 'axm-entity-dashboard-widget-view',\n imports: [AXMEntityDashboardHostComponent],\n template: `\n @if (entityType() && entityId()) {\n <axm-entity-dashboard-host\n [entityType]=\"entityType()!\"\n [entityId]=\"entityId()!\"\n [entityTitle]=\"entityTitle()\"\n [entityData]=\"entityData()\"\n ></axm-entity-dashboard-host>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXMEntityDashboardWidgetViewComponent extends AXPValueWidgetComponent<Record<string, unknown>> {\n protected entityType = computed(() => {\n const fromOptions = this.options()?.['entityType'];\n return typeof fromOptions === 'string' && fromOptions.trim() ? fromOptions.trim() : undefined;\n });\n\n protected entityId = computed(() => {\n const fromOptions = this.options()?.['entityId'];\n return typeof fromOptions === 'string' && fromOptions.trim() ? fromOptions.trim() : undefined;\n });\n\n protected entityTitle = computed(() => {\n const subject = this.options()?.['subject'];\n return typeof subject === 'string' ? subject : undefined;\n });\n\n protected entityData = computed(() => {\n const data = this.contextService.data();\n return isObjectLike(data) ? (data as Record<string, unknown>) : {};\n });\n}\n\n//#endregion\n\n//#region ---- Page Component ----\n\n@Component({\n selector: 'axm-entity-dashboard-page',\n imports: [AXMEntityDashboardHostComponent],\n template: `\n @if (entityRef(); as ref) {\n <axm-entity-dashboard-host\n [entityType]=\"ref.entityType\"\n [entityId]=\"ref.entityId\"\n [entityTitle]=\"entityTitle()\"\n [entityData]=\"rootContext()\"\n ></axm-entity-dashboard-host>\n }\n `,\n styles: `@reference '@acorex/styles/themes/default.css';\n\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMEntityDashboardPageComponent,\n },\n ],\n})\nexport class AXMEntityDashboardPageComponent extends AXPPageLayoutBaseComponent {\n //#region ---- Inputs ----\n\n rootContext = input.required<Record<string, unknown>>();\n pageConfig = input<Record<string, unknown>>();\n\n eff= effect(() => {\n console.log(this.rootContext());\n });\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly route = inject(ActivatedRoute);\n private readonly entityDashboardService = inject(AXMEntityDashboardService);\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected entityRef = computed(() => {\n const moduleName = this.route.snapshot.parent?.paramMap.get('module');\n const entityName = this.route.snapshot.paramMap.get('entity');\n return this.entityDashboardService.resolveEntityRefFromContext(moduleName, entityName, this.rootContext());\n });\n\n protected entityTitle = computed(() => {\n const title = get(this.rootContext(), 'title');\n return typeof title === 'string' ? title : undefined;\n });\n\n //#endregion\n}\n\n//#endregion\n","import {\n AXPPageComponentDefinition,\n AXPPageComponentProvider,\n} from '@acorex-platform/framework-client/layout/components';\nimport { Injectable } from '@angular/core';\n\nimport { ENTITY_DASHBOARD_PAGE_COMPONENT_KEY } from './dashboard.plugin';\n\n//#region ---- Entity Dashboard Page Provider ----\n\n@Injectable()\nexport class AXMEntityDashboardPageComponentProvider implements AXPPageComponentProvider {\n async components(): Promise<AXPPageComponentDefinition[]> {\n return [\n {\n key: ENTITY_DASHBOARD_PAGE_COMPONENT_KEY,\n loader: () =>\n import('./entity-dashboard-page.component').then((c) => c.AXMEntityDashboardPageComponent),\n },\n ];\n }\n}\n\n//#endregion\n","import { AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex-platform/framework-shared/widget-core';\n\nexport const AXPEntityDashboardWidget: AXPWidgetConfig = {\n name: 'entity-dashboard',\n title: '@dashboard-management:dashboards.widget.entity-dashboard.title',\n description: '@dashboard-management:dashboards.widget.entity-dashboard.description',\n type: 'view',\n categories: [],\n groups: [AXPWidgetGroupEnum.EntityWidget],\n icon: 'fa-light fa-gauge-high',\n properties: [],\n components: {\n view: {\n component: () =>\n import('./entity-dashboard-page.component').then((c) => c.AXMEntityDashboardWidgetViewComponent),\n },\n edit: {\n component: () =>\n import('./entity-dashboard-page.component').then((c) => c.AXMEntityDashboardWidgetViewComponent),\n },\n },\n};\n","//#region ---- Imports ----\n\nimport { AXPWidgetDefinitionProvider } from '@acorex-platform/framework-client/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport {\n AXPBarChartWidget,\n AXPClockCalendarWidget,\n AXPDonutChartWidget,\n AXPFunnelChartWidget,\n AXPGaugeChartWidget,\n AXPHeatmapChartWidget,\n AXPLineChartWidget,\n AXPKpiDetailsWidget,\n AXPKpiProgressWidget,\n AXPKpiSegmentedWidget,\n AXPKpiStatCardWidget,\n AXPStickyNoteWidget,\n AXPShortcutWidget,\n} from './features/shared/widgets';\nimport { AXPEntityDashboardWidget } from './features/dashboard';\n\n//#endregion\n\n//#region ---- Dashboard Management Widgets Provider ----\n\nconst DASHBOARD_WIDGETS = [\n AXPEntityDashboardWidget,\n AXPShortcutWidget,\n AXPDonutChartWidget,\n AXPBarChartWidget,\n AXPLineChartWidget,\n AXPFunnelChartWidget,\n AXPHeatmapChartWidget,\n AXPKpiProgressWidget,\n AXPKpiSegmentedWidget,\n AXPKpiDetailsWidget,\n AXPKpiStatCardWidget,\n AXPGaugeChartWidget,\n AXPStickyNoteWidget,\n AXPClockCalendarWidget,\n];\n\n@Injectable()\nexport class AXMDashboardManagementWidgetsProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return DASHBOARD_WIDGETS;\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPEntityStorageMiddleware } from '@acorex-platform/framework-client/layout/entity';\nimport { get, isString, set } from 'lodash';\n\nimport { RootConfig } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport {\n buildEntityScopeRef,\n buildTenantScopeRef,\n buildUserScopeRef,\n normalizeDashboardScopeRef,\n readScopeRoleIds,\n} from '@acorex-platform/module-dashboard-management-client/contracts';\nimport type { AXMDashboardScope } from '@acorex-platform/module-dashboard-management-client/contracts';\n\n//#endregion\n\n//#region ---- Constants ----\n\nconst DASHBOARD_ENTITY_KEY = `${RootConfig.module.name}.${RootConfig.entities.dashboard.name}`;\n\n//#endregion\n\n//#region ---- Middleware ----\n\n/**\n * Normalizes dashboard scope/scopeRef on create/update and applies tenant lock defaults.\n */\nexport const dashboardScopeMiddleware: AXPEntityStorageMiddleware = {\n target: { ops: ['create', 'update'], order: 4 },\n execute: async (ctx, next) => {\n if (ctx.entityName !== DASHBOARD_ENTITY_KEY || ctx.data == null || typeof ctx.data !== 'object') {\n await next();\n return;\n }\n\n const payload = ctx.data as Record<string, unknown>;\n let scope = payload['scope'] as AXMDashboardScope | undefined;\n if (!scope) {\n scope = 'T';\n payload['scope'] = scope;\n }\n\n const legacyUserId = get(payload, 'userId');\n const legacyRoleIds = get(payload, 'roleIds');\n const legacyEntityType = get(payload, 'entityType');\n const legacyTenantId = get(payload, 'tenantId');\n\n const scopeRef = normalizeDashboardScopeRef(scope, payload['scopeRef'], {\n userId: isString(legacyUserId) ? legacyUserId : undefined,\n tenantId: isString(legacyTenantId) ? legacyTenantId : undefined,\n roleIds: Array.isArray(legacyRoleIds) ? legacyRoleIds : readScopeRoleIds(payload['scopeRef'] as any),\n entityType: isString(legacyEntityType) ? legacyEntityType : undefined,\n });\n\n set(payload, 'scopeRef', scopeRef);\n delete payload['userId'];\n delete payload['roleIds'];\n delete payload['entityType'];\n delete payload['tenantId'];\n\n if (scope === 'T') {\n payload['locked'] = true;\n }\n\n if (scope === 'E') {\n set(payload, 'scopeRef', buildEntityScopeRef(get(scopeRef, 'entityType') as string));\n }\n\n if (scope === 'U') {\n set(payload, 'scopeRef', buildUserScopeRef(get(scopeRef, 'userId') as string));\n }\n\n if (scope === 'T') {\n set(\n payload,\n 'scopeRef',\n buildTenantScopeRef(get(scopeRef, 'tenantId') as string, readScopeRoleIds(scopeRef)),\n );\n }\n\n await next();\n },\n};\n\n//#endregion\n","import { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\nimport { AXP_HOME_PAGE_DEFAULT_KEY, AXP_HOME_PAGES, AXP_MENU_PROVIDER, AXP_PROTECTED_ROUTE_GUARDS } from '@acorex-platform/framework-client/common';\nimport { AXP_MODULE_MANIFEST_PROVIDER, provideLazyProvider } from '@acorex-platform/framework-client/core';\nimport { AXP_PAGE_COMPONENT_PROVIDER } from '@acorex-platform/framework-client/layout/components';\nimport { AXP_ENTITY_ACTION_PLUGIN, AXP_ENTITY_CONFIG_TOKEN,AXP_ENTITY_STORAGE_MIDDLEWARE } from '@acorex-platform/framework-client/layout/entity';\nimport { AXP_WIDGET_DEFINITION_PROVIDER, AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPWidgetsModule } from '@acorex-platform/framework-client/layout/widgets';\nimport { inject, NgModule } from '@angular/core';\nimport { Route } from '@angular/router';\n\nimport { DashboardManagementManifest } from './manifest';\nimport { AXMMenuProvider } from './menu.provider';\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXMDashboardManagementWidgetsProvider } from './widget-definition.provider';\nimport { dashboardPlugin } from './features/dashboard/dashboard.plugin';\nimport { dashboardScopeMiddleware } from './middleware';\n// Entity Modules\n\nfunction createAppRoute(): Route {\n const config = inject(AXP_ENTITY_CONFIG_TOKEN);\n return {\n path: ':app',\n canActivate: [...AXP_PROTECTED_ROUTE_GUARDS],\n data: { rootLayout: true },\n loadComponent: () => {\n return config.viewers.root();\n },\n children: [\n {\n path: 'dashboard',\n loadComponent: () =>\n import('./features/home-dashboard/dashboard-home/home-dashboard').then((c) => c.AXMDashboardHomeComponent),\n },\n ],\n };\n}\n\n@NgModule({\n imports: [\n AXPWidgetCoreModule,\n // Entity Modules\n ],\n providers: [\n { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXMDashboardManagementWidgetsProvider, multi: true },\n {\n provide: AXP_HOME_PAGES,\n multi: true,\n useFactory: () => [\n {\n key: 'dashboard',\n title: 'Dashboard',\n route: createAppRoute(),\n },\n ],\n },\n // Module-specific providers (not part of manifest system)\n AXPWidgetsModule,\n {\n provide: AXP_HOME_PAGE_DEFAULT_KEY,\n useValue: 'dashboard',\n },\n // Module Manifest Provider\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: DashboardManagementManifest,\n multi: true,\n },\n // Provider references (now using tokens)\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n \n {\n provide: AXP_ENTITY_ACTION_PLUGIN,\n useValue: dashboardPlugin,\n multi: true,\n },\n {\n provide: AXP_ENTITY_STORAGE_MIDDLEWARE,\n useValue: dashboardScopeMiddleware,\n multi: true,\n },\n provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () =>\n import('./features/dashboard-layout-page').then((m) => m.AXMDashboardLayoutPageComponentProvider),\n ),\n provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () =>\n import('./features/dashboard/entity-dashboard-page-component.provider').then(\n (m) => m.AXMEntityDashboardPageComponentProvider,\n ),\n ),\n ],\n})\nexport class AXMDashboardManagementModule {}\n","import {\n AXPActionMenuItem,\n AXPExecuteCommand,\n} from '@acorex-platform/framework-shared/core';\nimport { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n Injector,\n OnDestroy,\n runInInjectionContext,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport {\n AXContextMenuComponent,\n AXContextMenuItemsClickEvent,\n AXContextMenuOpeningEvent,\n AXMenuModule,\n} from '@acorex/components/menu';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport {\n AXPStateMessageComponent,\n AXPThemeLayoutBlockComponent,\n} from '@acorex-platform/framework-client/layout/components';\nimport { AXPDesignerService } from '@acorex-platform/framework-client/layout/designer';\nimport {\n AXPPageLayoutBase,\n AXPPageLayoutBaseComponent,\n AXPPageLayoutComponent,\n} from '@acorex-platform/framework-client/layout/views';\nimport { AXPLayoutThemeService } from '@acorex-platform/framework-client/themes/shared';\n\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { resolveMultiLanguageString } from '@acorex/core/translation';\n\nimport { RootConfig } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { AXMDashboardStore } from '../../dashboard-services/home-dashboard.store';\nimport { AXMDashboardGridLayoutSectionComponent } from '../../shared/dashboard-grid-layout-section';\nimport {\n buildDashboardCanvasMenuItems,\n shouldCancelDashboardCanvasContextMenu,\n toDashboardCanvasContextMenuItem,\n} from '../dashboard-canvas-context-menu.util';\n\ntype AXMDashboardHomeSkeletonVariant = 'list' | 'compact' | 'action';\n\ninterface AXMDashboardHomeSkeletonWidget {\n id: string;\n area: string;\n variant: AXMDashboardHomeSkeletonVariant;\n}\n\n@Component({\n selector: 'axm-dashboard-home',\n templateUrl: './home-dashboard.html',\n styleUrls: ['./home-dashboard.css'],\n imports: [\n CommonModule,\n AXSkeletonModule,\n AXButtonModule,\n AXButtonGroupModule,\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXBreadcrumbsModule,\n AXMDashboardGridLayoutSectionComponent,\n AXPStateMessageComponent,\n AXMenuModule,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n AXPDesignerService,\n AXMDashboardStore,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMDashboardHomeComponent,\n },\n ],\n})\nexport class AXMDashboardHomeComponent\n extends AXPPageLayoutBaseComponent\n implements OnDestroy\n{\n //#region ---- Services & Dependencies ----\n\n protected readonly rootConfig = RootConfig;\n protected readonly dialogService = inject(AXDialogService);\n protected readonly popupService = inject(AXPopupService);\n protected readonly store = inject(AXMDashboardStore);\n protected readonly themeService = inject(AXPLayoutThemeService);\n private readonly injector = inject(Injector);\n\n //#endregion\n\n //#region ---- Component State ----\n\n protected readonly context = signal({});\n\n protected readonly skeletonListRows = [1, 2, 3, 4];\n\n protected readonly skeletonWidgets: AXMDashboardHomeSkeletonWidget[] = [\n { id: 'clock', area: 'clock', variant: 'compact' },\n { id: 'tasks', area: 'tasks', variant: 'list' },\n { id: 'notifications', area: 'notifications', variant: 'list' },\n { id: 'notes', area: 'notes', variant: 'compact' },\n { id: 'action', area: 'action', variant: 'action' },\n ];\n\n private dashboardsLoaded = signal(false);\n\n private readonly emptyStateCanvasContextMenu =\n viewChild<AXContextMenuComponent>('emptyStateCanvasContextMenu');\n\n //#endregion\n\n //#region ---- Effects ----\n\n #loadingEffect = effect(() => {\n const isLoading = this.store.isLoading();\n untracked(() => {\n this.themeService.setNavigationLoading(isLoading);\n });\n });\n\n #initEffect = effect(() => {\n const allDashboards = this.store.availableDashboards();\n if (allDashboards.length > 0 && !this.dashboardsLoaded()) {\n this.dashboardsLoaded.set(true);\n this.recompute();\n }\n });\n\n #refreshEmptyStateCanvasContextMenuEffect = effect(() => {\n if (this.store.isLoading() || this.store.dashboards().length > 0) {\n return;\n }\n\n untracked(() => {\n runInInjectionContext(this.injector, () => {\n afterNextRender(() => {\n this.emptyStateCanvasContextMenu()?.refresh();\n });\n });\n });\n });\n\n //#endregion\n\n //#region ---- Lifecycle Hooks ----\n\n ngOnDestroy(): void {\n if (this.store.isLoading()) {\n this.themeService.setNavigationLoading(false);\n }\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n protected isTenantDashboardReadOnlyForCurrentUser(): boolean {\n const selectedDashboard = this.store.selectedDashboard();\n return !this.store.isUserAdmin() && selectedDashboard?.scope === 'T';\n }\n\n private isAddWidgetDisabled(): boolean {\n return (\n this.store.dashboards().length < 1 ||\n this.store.isDashboardLocked() ||\n this.isTenantDashboardReadOnlyForCurrentUser()\n );\n }\n\n private isDashboardManagementDisabled(): boolean {\n return (\n this.store.dashboards().length < 1 ||\n this.isTenantDashboardReadOnlyForCurrentUser()\n );\n }\n\n protected async handleDashboardContextMenuOpening(\n e: AXContextMenuOpeningEvent,\n ): Promise<void> {\n if (shouldCancelDashboardCanvasContextMenu(e.targetElement)) {\n e.canceled = true;\n return;\n }\n\n const actionItems = buildDashboardCanvasMenuItems({\n includeAddActions: true,\n addWidgetDisabled: this.isAddWidgetDisabled(),\n dashboardManagementDisabled: this.isDashboardManagementDisabled(),\n });\n\n for (const item of actionItems) {\n e.items.push(\n await toDashboardCanvasContextMenuItem(item, this.translateService),\n );\n }\n }\n\n protected async handleDashboardContextMenuItemClick(\n e: AXContextMenuItemsClickEvent,\n ): Promise<void> {\n if (e.item.name) {\n await this.execute({ name: e.item.name });\n }\n }\n\n //#endregion\n\n //#region ---- Page Interface Implementation ----\n\n override getPageTitle(): string {\n const title = this.store.selectedDashboard()?.title;\n if (title == null || title === '') {\n return 'Dashboard';\n }\n const translatedTitle = resolveMultiLanguageString(\n title,\n this.translateService.getActiveLang(),\n );\n return translatedTitle;\n }\n\n override async getPageDescription(): Promise<string> {\n const raw = this.store.selectedDashboard()?.description;\n if (raw == null || raw === '') {\n return '';\n }\n if (\n typeof raw === 'object' &&\n !Array.isArray(raw) &&\n this.translateService.isValidMultiLanguageObject(raw)\n ) {\n return this.translateService.resolve(raw);\n }\n return String(raw);\n }\n\n // override async getPageBadge(): Promise<AXPBadge | null> {\n // const selectedDashboard = this.store.selectedDashboard();\n // if (selectedDashboard?.scope !== 'T') {\n // return null;\n // }\n // return {\n // title: await this.translateService.translateAsync(\n // '@dashboard-management:dashboards.entities.dashboard.fields.scope.options.tenant',\n // ),\n // color: 'primary',\n // description: 'Shared tenant dashboard',\n // };\n // }\n\n protected override getTitleActions():\n | AXPActionMenuItem[]\n | Promise<AXPActionMenuItem[]> {\n return this.store\n .dashboards()\n .map((dashboard) => {\n const isLayoutLocked =\n dashboard.locked === true || dashboard.scope === 'T';\n return {\n title: resolveMultiLanguageString(\n dashboard.title,\n this.translateService.getActiveLang(),\n ),\n command: {\n name: dashboard.id,\n metadata: { isDashboard: true, dashboard },\n },\n icon:\n dashboard.id === this.store.currentDashboardId()\n ? 'fa-solid fa-check'\n : '',\n suffix: isLayoutLocked ? { icon: 'fa-light fa-lock' } : undefined,\n };\n })\n .sort((a, b) =>\n (a.title ?? '').localeCompare(b.title ?? '', undefined, {\n sensitivity: 'base',\n }),\n );\n }\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n return [\n {\n title: '@general:actions.add-item.title',\n icon: 'fa-light fa-square-plus',\n color: 'primary',\n items: [\n {\n title: await this.translateService.translateAsync(\n '@dashboard:new-dashboard',\n ),\n icon: 'fa-light fa-gauge-high',\n break: true,\n command: { name: 'new-dashboard' },\n },\n {\n title:\n await this.translateService.translateAsync('@dashboard:widget'),\n icon: 'fa-light fa-window-restore',\n command: { name: 'new-widget' },\n disabled:\n this.store.dashboards().length < 1 ||\n this.store.isDashboardLocked() ||\n this.isTenantDashboardReadOnlyForCurrentUser(),\n },\n ],\n },\n ];\n }\n\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n return buildDashboardCanvasMenuItems({\n includeAddActions: false,\n addWidgetDisabled: this.isAddWidgetDisabled(),\n dashboardManagementDisabled: this.isDashboardManagementDisabled(),\n });\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n if (command.metadata?.['isDashboard']) {\n this.store.handleConfigChange(command.metadata?.['dashboard']);\n this.recompute();\n return;\n }\n\n switch (command.name) {\n case 'new-dashboard':\n await this.store.addDashboard();\n this.recompute();\n break;\n case 'new-widget':\n await this.store.addWidget();\n this.recompute();\n break;\n case 'edit':\n await this.store.editDashboard();\n this.recompute();\n break;\n case 'clone':\n await this.store.cloneDashboard();\n this.recompute();\n break;\n case 'delete':\n await this.store.removeDashboard(this.store.selectedDashboard()?.id!);\n this.recompute();\n break;\n case 'toggle-lock':\n await this.store.toggleLockDashboard();\n this.recompute();\n setTimeout(() => this.recompute(), 50);\n break;\n }\n }\n\n //#endregion\n}\n","<axp-page-layout *translate=\"let t\">\n <axp-page-content class=\"relative axm-dashboard-home-canvas\">\n @if (store.isLoading()) {\n <div class=\"axm-dashboard-home__skeleton w-full min-h-full\" aria-busy=\"true\" aria-live=\"polite\">\n <div class=\"axm-dashboard-home__skeleton-grid\">\n @for (widget of skeletonWidgets; track widget.id) {\n <article\n class=\"axm-dashboard-home__skeleton-widget\"\n [style.grid-area]=\"widget.area\"\n >\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-title\"></ax-skeleton>\n\n <div class=\"axm-dashboard-home__skeleton-body\">\n @switch (widget.variant) {\n @case ('list') {\n @for (row of skeletonListRows; track row) {\n <div class=\"axm-dashboard-home__skeleton-list-row\">\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-avatar\"></ax-skeleton>\n <div class=\"axm-dashboard-home__skeleton-list-text\">\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-line axm-dashboard-home__skeleton-line--wide\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-line axm-dashboard-home__skeleton-line--narrow\"></ax-skeleton>\n </div>\n </div>\n }\n }\n @case ('compact') {\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-circle\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-line axm-dashboard-home__skeleton-line--medium\"></ax-skeleton>\n }\n @case ('action') {\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-action\"></ax-skeleton>\n }\n }\n </div>\n </article>\n }\n </div>\n </div>\n } @else if (!store.dashboards().length) {\n <div class=\"axm-dashboard-canvas-surface flex flex-col items-center justify-center h-full w-full min-h-full\">\n <axp-state-message\n icon=\"fa-light fa-shapes\"\n [title]=\"'@dashboard:empty-state.title'\"\n [description]=\"'@dashboard:empty-state.description'\"\n >\n <div slot=\"actions\">\n <button type=\"button\" (click)=\"execute({ name: 'new-dashboard' })\" class=\"underline\">\n {{ '@dashboard:add-first-dashboard' | translate | async }}\n </button>\n </div>\n </axp-state-message>\n </div>\n } @else {\n <axm-dashboard-grid-layout-section\n [widgetsContext]=\"context()\"\n [loadingVariant]=\"'overlay'\"\n [enableCanvasContextMenu]=\"true\"\n [isTenantDashboardReadOnly]=\"isTenantDashboardReadOnlyForCurrentUser()\"\n (addWidget)=\"execute({ name: 'new-widget' })\"\n (canvasContextMenuCommand)=\"execute({ name: $event.name })\"\n ></axm-dashboard-grid-layout-section>\n }\n </axp-page-content>\n</axp-page-layout>\n\n@if (!store.isLoading() && !store.dashboards().length) {\n <ax-context-menu\n #emptyStateCanvasContextMenu\n [target]=\"'.axm-dashboard-canvas-surface'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onOpening)=\"handleDashboardContextMenuOpening($event)\"\n (onItemClick)=\"handleDashboardContextMenuItemClick($event)\"\n ></ax-context-menu>\n}\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXSwitchModule } from '@acorex/components/switch';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport {AXMOrganizationManagementJobDefinitionEntityModel} from '@acorex-platform/module-organization-management-client/contracts'\nimport {RootConfig as OrganizationManagementRootConfig} from '@acorex-platform/module-organization-management-client/contracts';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { CommonModule } from '@angular/common';\nimport { Component, inject, model, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RootConfig } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport {\n buildTenantScopeRef,\n buildUserScopeRef,\n readScopeRoleIds,\n} from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { AXMDashboardLayout } from '../../dashboard-services/home-dashboard.type';\n\n@Component({\n template: `\n <div class=\"card-body p-4\">\n <div class=\"flex flex-col gap-2 pb-4\">\n <p class=\"font-semibold\">{{ '@general:terms.common.title' | translate | async }}</p>\n <ax-text-box\n [(ngModel)]=\"title\"\n name=\"title\"\n placeholder=\"{{ '@general:terms.common.title' | translate | async }}\"\n >\n </ax-text-box>\n </div>\n <div class=\"flex flex-col gap-2\">\n <p class=\"font-semibold\">{{ '@general:terms.common.description' | translate | async }}</p>\n <ax-text-box\n [(ngModel)]=\"description\"\n name=\"description\"\n placeholder=\"{{ '@general:terms.common.description' | translate | async }}\"\n >\n </ax-text-box>\n </div>\n\n @if (showAdminFields()) {\n <div class=\"flex flex-col gap-2 mt-4\">\n <p class=\"font-semibold\">{{ 'roles' | translate: { scope } | async }}</p>\n <ax-select-box\n [(ngModel)]=\"selectedRoleIds\"\n [dataSource]=\"roles\"\n [multiple]=\"true\"\n [textField]=\"'title'\"\n [valueField]=\"'id'\"\n name=\"roles\"\n placeholder=\"{{ 'select-roles' | translate: { scope } | async }}\"\n >\n </ax-select-box>\n </div>\n\n <div class=\"grid grid-cols-2 grid-flow-col gap-8 mt-4\">\n <div class=\"flex flex-row items-center gap-2\">\n <p class=\"font-semibold\">{{ '@general:terms.status.states.is-archived' | translate | async }}</p>\n <ax-switch [(ngModel)]=\"isArchived\" name=\"isArchived\"></ax-switch>\n </div>\n\n <div class=\"flex flex-row items-center gap-2\">\n <p class=\"font-semibold\">{{ 'lock' | translate: { scope } | async }}</p>\n <ax-switch [(ngModel)]=\"isLocked\" name=\"isLocked\"></ax-switch>\n </div>\n </div>\n }\n </div>\n\n <ax-footer>\n <ax-prefix></ax-prefix>\n <ax-suffix>\n <ax-button\n [text]=\"'@general:actions.cancel.title' | translate | async\"\n look=\"solid\"\n (onClick)=\"handleClose(true)\"\n >\n </ax-button>\n <ax-button\n [text]=\"'@general:actions.save.title' | translate | async\"\n look=\"solid\"\n color=\"primary\"\n [disabled]=\"!isValid\"\n (onClick)=\"handleClose()\"\n >\n <ax-icon class=\"fa-solid fa-save\"></ax-icon>\n </ax-button>\n </ax-suffix>\n </ax-footer>\n `,\n imports: [\n FormsModule,\n AXButtonModule,\n AXTextBoxModule,\n AXLabelModule,\n AXDecoratorModule,\n CommonModule,\n AXTranslationModule,\n AXSelectBoxModule,\n AXSwitchModule,\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: true,\n})\nexport class AXMAddDashboardPopup extends AXBasePageComponent implements OnInit {\n protected readonly scope = RootConfig.config.i18n;\n\n private readonly data: Partial<AXMDashboardLayout & { isAdmin: boolean }>;\n\n private readonly entityService = inject(AXPEntityService);\n private readonly jobDefinitionData = this.entityService\n .withEntity(\n OrganizationManagementRootConfig.module.name,\n OrganizationManagementRootConfig.entities.jobDefinition.name,\n )\n .data<string, AXMOrganizationManagementJobDefinitionEntityModel>();\n private readonly sessionService = inject(AXPSessionService);\n private readonly multiLanguageResolver = inject(AXTranslationService);\n\n protected title = model<string>('');\n protected description = model<string>('');\n protected selectedRoleIds = model<string[]>([]);\n protected isArchived = model<boolean>(false);\n protected isLocked = model<boolean>(false);\n protected isAdmin = model<boolean>(false);\n protected showAdminFields = model<boolean>(false);\n protected roles: any[] = [];\n\n protected get isValid(): boolean {\n return !!this.title()?.trim();\n }\n\n /**\n * Maps stored dashboard title (plain or multi-language) to a single string for this popup’s text box.\n */\n private titleToPlainText(value: AXMDashboardLayout['title'] | undefined): string {\n if (value == null || value === '') {\n return '';\n }\n if (\n typeof value === 'object' &&\n !Array.isArray(value) &&\n this.multiLanguageResolver.isValidMultiLanguageObject(value)\n ) {\n return this.multiLanguageResolver.resolve(value);\n }\n return String(value);\n }\n\n /**\n * Maps stored dashboard description (plain or multi-language) to a single string for this popup’s text box.\n */\n private descriptionToPlainText(value: AXMDashboardLayout['description'] | undefined): string {\n if (value == null || value === '') {\n return '';\n }\n if (\n typeof value === 'object' &&\n !Array.isArray(value) &&\n this.multiLanguageResolver.isValidMultiLanguageObject(value)\n ) {\n return this.multiLanguageResolver.resolve(value);\n }\n return String(value);\n }\n\n override async ngOnInit(): Promise<void> {\n // Set initial values from input data\n this.title.set(this.titleToPlainText(this.data?.title));\n this.description.set(this.descriptionToPlainText(this.data?.description));\n this.isArchived.set(this.data?.isArchived || false);\n this.isLocked.set(this.data?.locked || false);\n this.isAdmin.set(this.data?.isAdmin || false);\n this.showAdminFields.set(this.isAdmin() && this.data?.scope !== 'U');\n // Load roles if admin\n if (this.showAdminFields()) {\n try {\n const result = await this.jobDefinitionData.query({ skip: 0, take: 100 });\n if (result.items && result.items.length > 0) {\n this.roles = result.items.map((i) => ({\n id: i.id,\n title: this.multiLanguageResolver.resolve(i.title),\n }));\n }\n this.selectedRoleIds.set(\n this.roles.filter((i) => readScopeRoleIds(this.data?.scopeRef).includes(i.id)).map((i) => i.id),\n );\n } catch (error) {\n console.error('Error loading roles:', error);\n this.roles = [];\n }\n }\n }\n\n protected async handleClose(isCanceled = false): Promise<void> {\n const userId = this.sessionService.user?.id ?? '';\n const tenantId = this.sessionService.tenant?.id ?? '';\n const scope = this.showAdminFields() ? 'T' : 'U';\n this.close({\n title: this.title()?.trim(),\n description: this.description()?.trim(),\n scopeRef: scope === 'T' ? buildTenantScopeRef(tenantId, this.selectedRoleIds()) : buildUserScopeRef(userId),\n isArchived: this.showAdminFields() ? this.isArchived() : undefined,\n locked: this.showAdminFields() ? this.isLocked() : undefined,\n scope,\n createdBy: userId,\n createdAt: new Date(),\n updatedBy: userId,\n updatedAt: new Date(),\n isCanceled,\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["asRecord","toNumber","i1","i2","i3","i4","SecurityManagementRootConfig","i5","i6","OrganizationManagementRootConfig","i7","i8"],"mappings":"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"}
|